Merging Cocoa UI rework.
commit
30e8da41b0
125
.hgtags
125
.hgtags
|
|
@ -104,35 +104,35 @@ b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
|
|||
461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
|
||||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
|
||||
56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
|
||||
d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
|
||||
d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
|
||||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
|
||||
c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
|
||||
52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
|
||||
ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
|
||||
d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
|
||||
d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
|
||||
0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2
|
||||
0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
|
||||
3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
|
||||
214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
|
||||
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
|
||||
7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
|
||||
8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
|
||||
800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
|
||||
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
|
||||
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
|
||||
dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
|
||||
dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release
|
||||
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
|
||||
beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1
|
||||
beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1
|
||||
be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release
|
||||
|
|
@ -151,50 +151,50 @@ e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start
|
|||
9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start
|
||||
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
|
||||
e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
|
||||
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
|
||||
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
|
||||
6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
|
||||
6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
|
||||
be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
|
||||
be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
|
||||
19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start
|
||||
09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1
|
||||
09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
|
||||
6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
|
||||
6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
|
||||
e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
|
||||
057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
|
||||
6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
|
||||
6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
|
||||
502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
|
||||
2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1
|
||||
2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
|
||||
493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
|
||||
54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start
|
||||
ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
|
||||
29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
|
||||
29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
|
||||
4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix
|
||||
4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
|
||||
54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start
|
||||
ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
|
||||
599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1
|
||||
599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
|
||||
6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
|
||||
b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
|
||||
fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
|
||||
82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1
|
||||
364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
|
||||
f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1
|
||||
42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
|
||||
1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2
|
||||
e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
|
||||
b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
|
||||
|
|
@ -202,9 +202,9 @@ b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
|
|||
6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1
|
||||
61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2
|
||||
61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2
|
||||
586907287be581817b2422b5137971b22d54ea48 3.0.4-start
|
||||
0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release
|
||||
0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release
|
||||
586907287be581817b2422b5137971b22d54ea48 3.0.4-start
|
||||
92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start
|
||||
c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start
|
||||
2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1
|
||||
|
|
@ -225,11 +225,11 @@ e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1
|
|||
c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
|
||||
9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1
|
||||
9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
|
||||
40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
|
||||
523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
|
||||
523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
|
||||
a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
|
||||
80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
|
||||
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1
|
||||
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start
|
||||
|
|
@ -280,67 +280,57 @@ bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156
|
|||
6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148
|
||||
2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155
|
||||
24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153
|
||||
a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159
|
||||
9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157
|
||||
5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160
|
||||
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1
|
||||
f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144
|
||||
089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161
|
||||
600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
|
||||
c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163
|
||||
2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164
|
||||
600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162
|
||||
80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165
|
||||
fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2
|
||||
af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169
|
||||
4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3
|
||||
6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release
|
||||
a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159
|
||||
9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157
|
||||
089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161
|
||||
c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163
|
||||
b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171
|
||||
050e48759337249130f684b4a21080b683f61732 DRTVWR-168
|
||||
09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170
|
||||
f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158
|
||||
f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1
|
||||
005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
|
||||
bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173
|
||||
cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174
|
||||
82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2
|
||||
57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176
|
||||
eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177
|
||||
a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3
|
||||
888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
|
||||
4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180
|
||||
5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183
|
||||
6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4
|
||||
9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
|
||||
ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5
|
||||
28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release
|
||||
005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
|
||||
888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
|
||||
a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
|
||||
1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1
|
||||
81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186
|
||||
47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190
|
||||
cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181
|
||||
c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188
|
||||
9ee9387789701d597130f879d9011a4958753862 DRTVWR-189
|
||||
47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190
|
||||
421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192
|
||||
4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191
|
||||
33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195
|
||||
e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193
|
||||
78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194
|
||||
7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196
|
||||
ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198
|
||||
507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197
|
||||
b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2
|
||||
37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200
|
||||
182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3
|
||||
248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203
|
||||
6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199
|
||||
7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2
|
||||
7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201
|
||||
84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4
|
||||
de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202
|
||||
573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5
|
||||
34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag
|
||||
6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205
|
||||
7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206
|
||||
8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207
|
||||
351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3
|
||||
af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212
|
||||
|
|
@ -351,7 +341,6 @@ ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215
|
|||
97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release
|
||||
5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1
|
||||
b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a
|
||||
b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219
|
||||
2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220
|
||||
0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221
|
||||
e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3
|
||||
|
|
@ -376,31 +365,36 @@ baf97f06ae17223614c5e31aa42e71d87cff07fe DRTVWR-236
|
|||
b2f21e3442542283a80e7eaebae9f833e5a927b6 DRTVWR-237
|
||||
3f9be82de642d468c5fc272cb9d96b46b5498402 3.4.1-beta12
|
||||
e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release
|
||||
81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186
|
||||
cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181
|
||||
c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188
|
||||
4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191
|
||||
78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194
|
||||
248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203
|
||||
de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202
|
||||
34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag
|
||||
6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205
|
||||
7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206
|
||||
b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219
|
||||
32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217
|
||||
704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1
|
||||
d799593b53ed733862e9a13871e318e886469377 DRTVWR-208
|
||||
e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223
|
||||
288539fc0408ed4b69a99665de33bbbc2c3c08fe DRTVWR-216
|
||||
e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2
|
||||
93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240
|
||||
0891d7a773a31397dcad48be3fa66531d567a821 DRTVWR-242
|
||||
710785535362b3cb801b6a3dc4703be3373bd0cd 3.4.2-beta3
|
||||
2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209
|
||||
f7bedce18ad52283e6072814db23318907261487 DRTVWR-238
|
||||
7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210
|
||||
e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243
|
||||
73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4
|
||||
16310aabccf315870f7cc9bf966926c0ad6954fa 3.4.2-release
|
||||
d799593b53ed733862e9a13871e318e886469377 DRTVWR-208
|
||||
e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223
|
||||
93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240
|
||||
2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209
|
||||
f7bedce18ad52283e6072814db23318907261487 DRTVWR-238
|
||||
7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210
|
||||
5e4e4128b256525bafc07a62e35ae8527aaa9c9d DRTVWR-241
|
||||
f1d3b3fcab28ed9ea532bf50db0ba96f5c8cc8e9 DRTVWR-232
|
||||
4918b150e75df6b516fb6c2616d32043fa6b4cac DRTVWR-245
|
||||
94ab2b49458ab372a95d2d6949fdf574f413068d 3.4.3-beta1
|
||||
4c3460cb1fb7c6da9965e09c734d282a8e9c81f0 DRTVWR-229
|
||||
f4481df42f9a4a92bf475a80f0c51d1a4bbdfd59 DRTVWR-246
|
||||
39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247
|
||||
7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249
|
||||
f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230
|
||||
b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255
|
||||
965b9a35e260c0f53be1a25f0db7abc8a67eaf47 DRTVWR-252
|
||||
bb10adc4f76cf0067fca7075146f00cdc0740e9d DRTVWR-251
|
||||
ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253
|
||||
|
|
@ -409,9 +403,24 @@ ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253
|
|||
44e764a6ac9e672a4f3bce821a4b6a218590c374 DRTVWR-258
|
||||
c23d734065ed593b2413385aecd8366d8e0ee96b DRTVWR-257
|
||||
452ce96d4046dc05a3ecaecc203e2cc8ddd72e76 DRTVWR-259
|
||||
5cba5f39d0a81d659f24ebc4b5efd025a39e3db1 3.4.3-release
|
||||
9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260
|
||||
daca610d840625b5bebb966a57cb49581852c417 DRTVWR-265
|
||||
9afbdc4e24cc04feacfb2b7a10b78a64f780901a DRTVWR-266
|
||||
73280db02501f5ad041fc18b1eba68e73a81996c DRTVWR-267
|
||||
870e2d79e0063fda87187f17bbc2747766733194 3.4.3-beta3
|
||||
0a2ca6546b499239afeb66d17b2fadbcdbe36ab1 3.4.3-release
|
||||
4c3460cb1fb7c6da9965e09c734d282a8e9c81f0 DRTVWR-229
|
||||
f4481df42f9a4a92bf475a80f0c51d1a4bbdfd59 DRTVWR-246
|
||||
39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247
|
||||
7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249
|
||||
f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230
|
||||
b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255
|
||||
9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260
|
||||
84fbaf2d4141bd161731430e760949dc787ca206 DRTVWR-244
|
||||
083d2d36b5bb1c54fc3dd7caac0e7ac381a9cef0 3.4.4-beta1
|
||||
b634dec987c16e8c9c938e11e52591d9ead8fa9b DRTVWR-270
|
||||
cd39255bd23330fd30c04105f2811e941d8524fe 3.4.4-beta2
|
||||
2c4011bbc2b15b82198fd8b51f3a9fe765a08c4d DRTVWR-271
|
||||
2f8a3ef687bc55828abcb17ac1ad7cde70536d7e 3.4.4-beta3
|
||||
35cfd4cf5b895fa776592f2e630e330be7f0604e DRTVWR-273
|
||||
c374035d459af3c03dea2dd90880dfc25de64706 DRTVWR-275
|
||||
05d9f1dd7a954069af2a33abedb7713fa36a04cb 3.4.4-beta4
|
||||
|
|
|
|||
|
|
@ -962,9 +962,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>efaf5cb3e861d44518eb03f4c406f03c</string>
|
||||
<string>e6feee3b452c2f70ce8558e30d6bc10a</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/falcon_3p-havok-source/rev/261536/arch/Darwin/installer/havok_source-2012.1-darwin-20120710.tar.bz2</string>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Darwin/installer/havok_source-2012.1-darwin-20121219.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
|
|
@ -974,9 +974,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>50037fff3fd3356a073cdae88348c9ab</string>
|
||||
<string>0c0d2058ba48446e274d6595d1d8063e</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/falcon_3p-havok-source/rev/261536/arch/Linux/installer/havok_source-2012.1-linux-20120711.tar.bz2</string>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Linux/installer/havok_source-2012.1-linux-20121219.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
|
|
@ -986,9 +986,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>cd6638f5a03469654615730c16889a60</string>
|
||||
<string>88391b6e08d473506d406ca6f3e88cfb</string>
|
||||
<key>url</key>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/falcon_3p-havok-source/rev/261536/arch/CYGWIN/installer/havok_source-2012.1-windows-20120710.tar.bz2</string>
|
||||
<string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/CYGWIN/installer/havok_source-2012.1-windows-20121219.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
|
|||
|
|
@ -517,7 +517,7 @@ bool LLCrashLogger::sendCrashLogs()
|
|||
{
|
||||
sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to alternate server"), 3, 5);
|
||||
}
|
||||
|
||||
|
||||
mSentCrashLogs = sent;
|
||||
|
||||
// [SL:KB] - Patch: Viewer-CrashLookup | Checked: 2011-03-24 (Catznip-2.6.0a) | Added: Catznip-2.6.0a
|
||||
|
|
|
|||
|
|
@ -363,7 +363,7 @@ void LLAvatarNameCache::requestNamesViaCapability()
|
|||
while(!sAskQueue.empty())
|
||||
{
|
||||
it = sAskQueue.begin();
|
||||
const LLUUID& agent_id = *it;
|
||||
LLUUID agent_id = *it;
|
||||
sAskQueue.erase(it);
|
||||
|
||||
if (url.empty())
|
||||
|
|
@ -431,7 +431,7 @@ void LLAvatarNameCache::requestNamesViaLegacy()
|
|||
for (S32 requests = 0; !sAskQueue.empty() && requests < MAX_REQUESTS; ++requests)
|
||||
{
|
||||
it = sAskQueue.begin();
|
||||
const LLUUID& agent_id = *it;
|
||||
LLUUID agent_id = *it;
|
||||
sAskQueue.erase(it);
|
||||
|
||||
// Mark as pending first, just in case the callback is immediately
|
||||
|
|
@ -583,8 +583,7 @@ void LLAvatarNameCache::eraseUnrefreshed()
|
|||
const LLAvatarName& av_name = it->second;
|
||||
if (av_name.mExpires < max_unrefreshed)
|
||||
{
|
||||
const LLUUID& agent_id = it->first;
|
||||
LL_DEBUGS("AvNameCache") << agent_id
|
||||
LL_DEBUGS("AvNameCache") << it->first
|
||||
<< " user '" << av_name.mUsername << "' "
|
||||
<< "expired " << now - av_name.mExpires << " secs ago"
|
||||
<< LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ include_directories(
|
|||
|
||||
if (DARWIN)
|
||||
include(CMakeFindFrameworks)
|
||||
find_library(CARBON_LIBRARY Carbon)
|
||||
find_library(COCOA_LIBRARY Cocoa)
|
||||
endif (DARWIN)
|
||||
|
||||
|
|
@ -68,7 +67,7 @@ add_dependencies(SLPlugin
|
|||
|
||||
if (DARWIN)
|
||||
# Mac version needs to link against Carbon
|
||||
target_link_libraries(SLPlugin ${CARBON_LIBRARY} ${COCOA_LIBRARY})
|
||||
target_link_libraries(SLPlugin ${COCOA_LIBRARY})
|
||||
# Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later)
|
||||
add_custom_command(
|
||||
TARGET SLPlugin POST_BUILD
|
||||
|
|
|
|||
|
|
@ -28,8 +28,26 @@
|
|||
* @endcond
|
||||
*/
|
||||
|
||||
//Protos for ObjectiveC classes (cannot import cocoa here due to BOOL conflict)
|
||||
class NSWindow;
|
||||
|
||||
/* Defined in slplugin-objc.mm: */
|
||||
void setupCocoa();
|
||||
void createAutoReleasePool();
|
||||
void deleteAutoReleasePool();
|
||||
|
||||
class LLCocoaPlugin
|
||||
{
|
||||
public:
|
||||
LLCocoaPlugin();
|
||||
void setupCocoa();
|
||||
void createAutoReleasePool();
|
||||
void deleteAutoReleasePool();
|
||||
void setupGroup();
|
||||
void updateWindows();
|
||||
void processEvents();
|
||||
public:
|
||||
//EventTargetRef mEventTarget;
|
||||
NSWindow* mFrontWindow;
|
||||
NSWindow* mPluginWindow;
|
||||
int mHackState;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -30,11 +30,13 @@
|
|||
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
#include "slplugin-objc.h"
|
||||
|
||||
//Note: NSApp is a global defined by cocoa which is an id to the application.
|
||||
|
||||
void setupCocoa()
|
||||
void LLCocoaPlugin::setupCocoa()
|
||||
{
|
||||
static bool inited = false;
|
||||
|
||||
|
|
@ -56,6 +58,8 @@ void setupCocoa()
|
|||
// Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image
|
||||
[[[NSWindow alloc] init] release];
|
||||
|
||||
mPluginWindow = [NSApp mainWindow];
|
||||
|
||||
deleteAutoReleasePool();
|
||||
|
||||
inited = true;
|
||||
|
|
@ -64,7 +68,7 @@ void setupCocoa()
|
|||
|
||||
static NSAutoreleasePool *sPool = NULL;
|
||||
|
||||
void createAutoReleasePool()
|
||||
void LLCocoaPlugin::createAutoReleasePool()
|
||||
{
|
||||
if(!sPool)
|
||||
{
|
||||
|
|
@ -72,7 +76,7 @@ void createAutoReleasePool()
|
|||
}
|
||||
}
|
||||
|
||||
void deleteAutoReleasePool()
|
||||
void LLCocoaPlugin::deleteAutoReleasePool()
|
||||
{
|
||||
if(sPool)
|
||||
{
|
||||
|
|
@ -80,3 +84,94 @@ void deleteAutoReleasePool()
|
|||
sPool = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
LLCocoaPlugin::LLCocoaPlugin():mHackState(0)
|
||||
{
|
||||
NSArray* window_list = [NSApp orderedWindows];
|
||||
mFrontWindow = [window_list objectAtIndex:0];
|
||||
}
|
||||
|
||||
void LLCocoaPlugin::processEvents()
|
||||
{
|
||||
// Some plugins (webkit at least) will want an event loop. This qualifies.
|
||||
NSEvent * event;
|
||||
event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
|
||||
[NSApp sendEvent: event];
|
||||
}
|
||||
|
||||
|
||||
//Turns out the window ordering stuff never gets hit with any of the current plugins.
|
||||
//Leaving the following code here 'just in case' for the time being.
|
||||
|
||||
void LLCocoaPlugin::setupGroup()
|
||||
{
|
||||
// CreateWindowGroup(kWindowGroupAttrFixedLevel, &layer_group);
|
||||
// if(layer_group)
|
||||
// {
|
||||
// // Start out with a window layer that's way out in front (fixes the problem with the menubar not getting hidden on first switch to fullscreen youtube)
|
||||
// SetWindowGroupName(layer_group, CFSTR("SLPlugin Layer"));
|
||||
// SetWindowGroupLevel(layer_group, kCGOverlayWindowLevel);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
void LLCocoaPlugin::updateWindows() //SPATTERS give this a better name.
|
||||
{
|
||||
// NSArray* window_list = [NSApp orderedWindows];
|
||||
// NSWindow* current_window = [window_list objectAtIndex:0];
|
||||
// NSWindow* parent_window = [ current_window parentWindow ];
|
||||
// bool this_is_front_process = false;
|
||||
// bool parent_is_front_process = false;
|
||||
//
|
||||
//
|
||||
// // Check for a change in this process's frontmost window.
|
||||
// if ( current_window != mFrontWindow )
|
||||
// {
|
||||
// // and figure out whether this process or its parent are currently frontmost
|
||||
// if ( current_window == parent_window ) parent_is_front_process = true;
|
||||
// if ( current_window == mPluginWindow ) this_is_front_process = true;
|
||||
//
|
||||
// if (current_window != NULL && mFrontWindow == NULL)
|
||||
// {
|
||||
// // Opening the first window
|
||||
//
|
||||
// if(mHackState == 0)
|
||||
// {
|
||||
// // Next time through the event loop, lower the window group layer
|
||||
// mHackState = 1;
|
||||
// }
|
||||
//
|
||||
// if(parent_is_front_process)
|
||||
// {
|
||||
// // Bring this process's windows to the front.
|
||||
// [mPluginWindow makeKeyAndOrderFront:NSApp];
|
||||
// [mPluginWindow setOrderedIndex:0];
|
||||
// }
|
||||
//
|
||||
// [NSApp activateIgnoringOtherApps:YES];
|
||||
// }
|
||||
//
|
||||
// else if (( current_window == NULL) && (mFrontWindow != NULL))
|
||||
// {
|
||||
// // Closing the last window
|
||||
//
|
||||
// if(this_is_front_process)
|
||||
// {
|
||||
// // Try to bring this process's parent to the front
|
||||
// [parent_window makeKeyAndOrderFront:NSApp];
|
||||
// [parent_window setOrderedIndex:0];
|
||||
// }
|
||||
// }
|
||||
// else if(mHackState == 1)
|
||||
// {
|
||||
//// if(layer_group)
|
||||
//// {
|
||||
//// // Set the window group level back to something less extreme
|
||||
//// SetWindowGroupLevel(layer_group, kCGNormalWindowLevel);
|
||||
//// }
|
||||
// mHackState = 2;
|
||||
// }
|
||||
//
|
||||
// mFrontWindow = [window_list objectAtIndex:0];
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,8 +37,12 @@
|
|||
#include "llapr.h"
|
||||
#include "llstring.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
|
||||
|
||||
#if LL_DARWIN
|
||||
#include <Carbon/Carbon.h>
|
||||
#include "slplugin-objc.h"
|
||||
#endif
|
||||
|
||||
|
|
@ -183,6 +187,7 @@ int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
|
|||
int main(int argc, char **argv)
|
||||
#endif
|
||||
{
|
||||
|
||||
ll_init_apr();
|
||||
|
||||
// Set up llerror logging
|
||||
|
|
@ -223,26 +228,25 @@ int main(int argc, char **argv)
|
|||
|
||||
// Catch signals that most kinds of crashes will generate, and exit cleanly so the system crash dialog isn't shown.
|
||||
signal(SIGILL, &crash_handler); // illegal instruction
|
||||
# if LL_DARWIN
|
||||
signal(SIGEMT, &crash_handler); // emulate instruction executed
|
||||
# endif // LL_DARWIN
|
||||
signal(SIGFPE, &crash_handler); // floating-point exception
|
||||
signal(SIGBUS, &crash_handler); // bus error
|
||||
signal(SIGSEGV, &crash_handler); // segmentation violation
|
||||
signal(SIGSYS, &crash_handler); // non-existent system call invoked
|
||||
#endif
|
||||
# if LL_DARWIN
|
||||
signal(SIGEMT, &crash_handler); // emulate instruction executed
|
||||
|
||||
#if LL_DARWIN
|
||||
setupCocoa();
|
||||
createAutoReleasePool();
|
||||
#endif
|
||||
LLCocoaPlugin cocoa_interface;
|
||||
cocoa_interface.setupCocoa();
|
||||
cocoa_interface.createAutoReleasePool();
|
||||
#endif //LL_DARWIN
|
||||
|
||||
LLPluginProcessChild *plugin = new LLPluginProcessChild();
|
||||
|
||||
plugin->init(port);
|
||||
|
||||
#if LL_DARWIN
|
||||
deleteAutoReleasePool();
|
||||
cocoa_interface.deleteAutoReleasePool();
|
||||
#endif
|
||||
|
||||
LLTimer timer;
|
||||
|
|
@ -253,114 +257,22 @@ int main(int argc, char **argv)
|
|||
#endif
|
||||
|
||||
#if LL_DARWIN
|
||||
|
||||
// If the plugin opens a new window (such as the Flash plugin's fullscreen player), we may need to bring this plugin process to the foreground.
|
||||
// Use this to track the current frontmost window and bring this process to the front if it changes.
|
||||
WindowRef front_window = NULL;
|
||||
WindowGroupRef layer_group = NULL;
|
||||
int window_hack_state = 0;
|
||||
CreateWindowGroup(kWindowGroupAttrFixedLevel, &layer_group);
|
||||
if(layer_group)
|
||||
{
|
||||
// Start out with a window layer that's way out in front (fixes the problem with the menubar not getting hidden on first switch to fullscreen youtube)
|
||||
SetWindowGroupName(layer_group, CFSTR("SLPlugin Layer"));
|
||||
SetWindowGroupLevel(layer_group, kCGOverlayWindowLevel);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if LL_DARWIN
|
||||
EventTargetRef event_target = GetEventDispatcherTarget();
|
||||
// cocoa_interface.mEventTarget = GetEventDispatcherTarget();
|
||||
#endif
|
||||
while(!plugin->isDone())
|
||||
{
|
||||
#if LL_DARWIN
|
||||
createAutoReleasePool();
|
||||
cocoa_interface.createAutoReleasePool();
|
||||
#endif
|
||||
timer.reset();
|
||||
plugin->idle();
|
||||
#if LL_DARWIN
|
||||
{
|
||||
// Some plugins (webkit at least) will want an event loop. This qualifies.
|
||||
EventRef event;
|
||||
if(ReceiveNextEvent(0, 0, kEventDurationNoWait, true, &event) == noErr)
|
||||
{
|
||||
SendEventToEventTarget (event, event_target);
|
||||
ReleaseEvent(event);
|
||||
}
|
||||
|
||||
// Check for a change in this process's frontmost window.
|
||||
if(GetFrontWindowOfClass(kAllWindowClasses, true) != front_window)
|
||||
{
|
||||
ProcessSerialNumber self = { 0, kCurrentProcess };
|
||||
ProcessSerialNumber parent = { 0, kNoProcess };
|
||||
ProcessSerialNumber front = { 0, kNoProcess };
|
||||
Boolean this_is_front_process = false;
|
||||
Boolean parent_is_front_process = false;
|
||||
{
|
||||
// Get this process's parent
|
||||
ProcessInfoRec info;
|
||||
info.processInfoLength = sizeof(ProcessInfoRec);
|
||||
info.processName = NULL;
|
||||
info.processAppSpec = NULL;
|
||||
if(GetProcessInformation( &self, &info ) == noErr)
|
||||
{
|
||||
parent = info.processLauncher;
|
||||
}
|
||||
|
||||
// and figure out whether this process or its parent are currently frontmost
|
||||
if(GetFrontProcess(&front) == noErr)
|
||||
{
|
||||
(void) SameProcess(&self, &front, &this_is_front_process);
|
||||
(void) SameProcess(&parent, &front, &parent_is_front_process);
|
||||
}
|
||||
}
|
||||
|
||||
if((GetFrontWindowOfClass(kAllWindowClasses, true) != NULL) && (front_window == NULL))
|
||||
{
|
||||
// Opening the first window
|
||||
|
||||
if(window_hack_state == 0)
|
||||
{
|
||||
// Next time through the event loop, lower the window group layer
|
||||
window_hack_state = 1;
|
||||
}
|
||||
|
||||
if(layer_group)
|
||||
{
|
||||
SetWindowGroup(GetFrontWindowOfClass(kAllWindowClasses, true), layer_group);
|
||||
}
|
||||
|
||||
if(parent_is_front_process)
|
||||
{
|
||||
// Bring this process's windows to the front.
|
||||
(void) SetFrontProcess( &self );
|
||||
}
|
||||
|
||||
ActivateWindow(GetFrontWindowOfClass(kAllWindowClasses, true), true);
|
||||
}
|
||||
else if((GetFrontWindowOfClass(kAllWindowClasses, true) == NULL) && (front_window != NULL))
|
||||
{
|
||||
// Closing the last window
|
||||
|
||||
if(this_is_front_process)
|
||||
{
|
||||
// Try to bring this process's parent to the front
|
||||
(void) SetFrontProcess(&parent);
|
||||
}
|
||||
}
|
||||
else if(window_hack_state == 1)
|
||||
{
|
||||
if(layer_group)
|
||||
{
|
||||
// Set the window group level back to something less extreme
|
||||
SetWindowGroupLevel(layer_group, kCGNormalWindowLevel);
|
||||
}
|
||||
window_hack_state = 2;
|
||||
}
|
||||
|
||||
front_window = GetFrontWindowOfClass(kAllWindowClasses, true);
|
||||
|
||||
}
|
||||
}
|
||||
cocoa_interface.processEvents();
|
||||
}
|
||||
#endif
|
||||
F64 elapsed = timer.getElapsedTimeF64();
|
||||
F64 remaining = plugin->getSleepTime() - elapsed;
|
||||
|
|
@ -384,7 +296,8 @@ int main(int argc, char **argv)
|
|||
|
||||
// LL_INFOS("slplugin") << "slept for "<< timer.getElapsedTimeF64() * 1000.0f << " ms" << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if LL_WINDOWS
|
||||
// More agressive checking of interfering exception handlers.
|
||||
// Doesn't appear to be required so far - even for plugins
|
||||
|
|
@ -394,14 +307,14 @@ int main(int argc, char **argv)
|
|||
#endif
|
||||
|
||||
#if LL_DARWIN
|
||||
deleteAutoReleasePool();
|
||||
cocoa_interface.deleteAutoReleasePool();
|
||||
#endif
|
||||
}
|
||||
|
||||
delete plugin;
|
||||
|
||||
ll_cleanup_apr();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ set(llvfs_HEADER_FILES
|
|||
if (DARWIN)
|
||||
LIST(APPEND llvfs_SOURCE_FILES lldir_mac.cpp)
|
||||
LIST(APPEND llvfs_HEADER_FILES lldir_mac.h)
|
||||
LIST(APPEND llvfs_SOURCE_FILES llvfs_objc.mm)
|
||||
LIST(APPEND llvfs_HEADER_FILES llvfs_objc.h)
|
||||
endif (DARWIN)
|
||||
|
||||
if (LINUX)
|
||||
|
|
@ -73,8 +75,8 @@ target_link_libraries(llvfs
|
|||
|
||||
if (DARWIN)
|
||||
include(CMakeFindFrameworks)
|
||||
find_library(CARBON_LIBRARY Carbon)
|
||||
target_link_libraries(llvfs ${CARBON_LIBRARY})
|
||||
find_library(COCOA_LIBRARY Cocoa)
|
||||
target_link_libraries(llvfs ${COCOA_LIBRARY})
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ class LLDir
|
|||
*/
|
||||
|
||||
virtual std::string getCurPath() = 0;
|
||||
virtual BOOL fileExists(const std::string &filename) const = 0;
|
||||
virtual bool fileExists(const std::string &filename) const = 0;
|
||||
|
||||
const std::string findFile(const std::string& filename, const std::vector<std::string> filenames) const;
|
||||
const std::string findFile(const std::string& filename, const std::string& searchPath1 = "", const std::string& searchPath2 = "", const std::string& searchPath3 = "") const;
|
||||
|
|
|
|||
|
|
@ -315,7 +315,7 @@ std::string LLDir_Linux::getCurPath()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLDir_Linux::fileExists(const std::string &filename) const
|
||||
bool LLDir_Linux::fileExists(const std::string &filename) const
|
||||
{
|
||||
struct stat stat_data;
|
||||
// Check the age of the file
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ public:
|
|||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
virtual BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);
|
||||
/*virtual*/ BOOL fileExists(const std::string &filename) const;
|
||||
// /*virtual*/ bool fileExists(const std::string &filename) const;
|
||||
|
||||
/*virtual*/ std::string getLLPluginLauncher();
|
||||
/*virtual*/ std::string getLLPluginFilename(std::string base_name);
|
||||
|
|
|
|||
|
|
@ -35,73 +35,27 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <glob.h>
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include "llvfs_objc.h"
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
static OSStatus CFCreateDirectory(FSRef *parentRef, CFStringRef name, FSRef *newRef)
|
||||
static bool CreateDirectory(const std::string &parent,
|
||||
const std::string &child,
|
||||
std::string *fullname)
|
||||
{
|
||||
OSStatus result = noErr;
|
||||
HFSUniStr255 uniStr;
|
||||
|
||||
uniStr.length = CFStringGetLength(name);
|
||||
CFStringGetCharacters(name, CFRangeMake(0, uniStr.length), uniStr.unicode);
|
||||
result = FSMakeFSRefUnicode(parentRef, uniStr.length, uniStr.unicode, kTextEncodingMacRoman, newRef);
|
||||
if (result != noErr)
|
||||
{
|
||||
result = FSCreateDirectoryUnicode(parentRef, uniStr.length, uniStr.unicode, 0, NULL, newRef, NULL, NULL);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
static void CFStringRefToLLString(CFStringRef stringRef, std::string &llString, bool releaseWhenDone)
|
||||
{
|
||||
if (stringRef)
|
||||
{
|
||||
long stringSize = CFStringGetLength(stringRef) + 1;
|
||||
long bufferSize = CFStringGetMaximumSizeForEncoding(stringSize,kCFStringEncodingUTF8);
|
||||
char* buffer = new char[bufferSize];
|
||||
memset(buffer, 0, bufferSize);
|
||||
if (CFStringGetCString(stringRef, buffer, bufferSize, kCFStringEncodingUTF8))
|
||||
llString = buffer;
|
||||
delete[] buffer;
|
||||
if (releaseWhenDone)
|
||||
CFRelease(stringRef);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
static void CFURLRefToLLString(CFURLRef urlRef, std::string &llString, bool releaseWhenDone)
|
||||
{
|
||||
if (urlRef)
|
||||
{
|
||||
CFURLRef absoluteURLRef = CFURLCopyAbsoluteURL(urlRef);
|
||||
if (absoluteURLRef)
|
||||
{
|
||||
CFStringRef stringRef = CFURLCopyFileSystemPath(absoluteURLRef, kCFURLPOSIXPathStyle);
|
||||
CFStringRefToLLString(stringRef, llString, true);
|
||||
CFRelease(absoluteURLRef);
|
||||
}
|
||||
if (releaseWhenDone)
|
||||
CFRelease(urlRef);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
static void FSRefToLLString(FSRef *fsRef, std::string &llString)
|
||||
{
|
||||
OSStatus error = noErr;
|
||||
char path[MAX_PATH];
|
||||
|
||||
error = FSRefMakePath(fsRef, (UInt8*) path, sizeof(path));
|
||||
if (error == noErr)
|
||||
llString = path;
|
||||
|
||||
boost::filesystem::path p(parent);
|
||||
p /= child;
|
||||
|
||||
if (fullname)
|
||||
*fullname = std::string(p.string());
|
||||
|
||||
if (! boost::filesystem::create_directory(p))
|
||||
{
|
||||
return (boost::filesystem::is_directory(p));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
|
|
@ -112,32 +66,40 @@ LLDir_Mac::LLDir_Mac()
|
|||
mCurrentDirIndex = -1;
|
||||
mCurrentDirCount = -1;
|
||||
|
||||
CFBundleRef mainBundleRef = NULL;
|
||||
CFURLRef executableURLRef = NULL;
|
||||
CFStringRef stringRef = NULL;
|
||||
OSStatus error = noErr;
|
||||
FSRef fileRef;
|
||||
CFStringRef secondLifeString = CFSTR("Firestorm");
|
||||
//CFBundleRef mainBundleRef = NULL;
|
||||
//CFURLRef executableURLRef = NULL;
|
||||
//CFStringRef stringRef = NULL;
|
||||
//OSStatus error = noErr;
|
||||
//FSRef fileRef;
|
||||
//CFStringRef secondLifeString = CFSTR("Firestorm");
|
||||
|
||||
mainBundleRef = CFBundleGetMainBundle();
|
||||
//mainBundleRef = CFBundleGetMainBundle();
|
||||
|
||||
executableURLRef = CFBundleCopyExecutableURL(mainBundleRef);
|
||||
//executableURLRef = CFBundleCopyExecutableURL(mainBundleRef);
|
||||
|
||||
if (executableURLRef != NULL)
|
||||
//if (executableURLRef != NULL)
|
||||
|
||||
const std::string secondLifeString = "Firestorm";
|
||||
|
||||
std::string *executablepathstr = getSystemExecutableFolder();
|
||||
|
||||
//NOTE: LLINFOS/LLERRS will not output to log here. The streams are not initialized.
|
||||
|
||||
if (executablepathstr)
|
||||
{
|
||||
// mExecutablePathAndName
|
||||
CFURLRefToLLString(executableURLRef, mExecutablePathAndName, false);
|
||||
|
||||
// mExecutableFilename
|
||||
stringRef = CFURLCopyLastPathComponent(executableURLRef);
|
||||
CFStringRefToLLString(stringRef, mExecutableFilename, true);
|
||||
|
||||
// mExecutableDir
|
||||
CFURLRef executableParentURLRef = CFURLCreateCopyDeletingLastPathComponent(NULL, executableURLRef);
|
||||
CFURLRefToLLString(executableParentURLRef, mExecutableDir, true);
|
||||
mExecutablePathAndName = *executablepathstr;
|
||||
|
||||
boost::filesystem::path executablepath(*executablepathstr);
|
||||
|
||||
# ifndef BOOST_SYSTEM_NO_DEPRECATED
|
||||
#endif
|
||||
mExecutableFilename = executablepath.filename().string();
|
||||
mExecutableDir = executablepath.parent_path().string();
|
||||
|
||||
// mAppRODataDir
|
||||
|
||||
std::string *resourcepath = getSystemResourceFolder();
|
||||
mAppRODataDir = *resourcepath;
|
||||
|
||||
// *NOTE: When running in a dev tree, use the copy of
|
||||
// skins in indra/newview/ rather than in the application bundle. This
|
||||
|
|
@ -146,10 +108,7 @@ LLDir_Mac::LLDir_Mac()
|
|||
|
||||
// MBW -- This keeps the mac application from finding other things.
|
||||
// If this is really for skins, it should JUST apply to skins.
|
||||
|
||||
CFURLRef resourcesURLRef = CFBundleCopyResourcesDirectoryURL(mainBundleRef);
|
||||
CFURLRefToLLString(resourcesURLRef, mAppRODataDir, true);
|
||||
|
||||
|
||||
U32 build_dir_pos = mExecutableDir.rfind("/build-darwin-");
|
||||
if (build_dir_pos != std::string::npos)
|
||||
{
|
||||
|
|
@ -166,9 +125,30 @@ LLDir_Mac::LLDir_Mac()
|
|||
}
|
||||
|
||||
// mOSUserDir
|
||||
error = FSFindFolder(kUserDomain, kApplicationSupportFolderType, true, &fileRef);
|
||||
if (error == noErr)
|
||||
std::string *appdir = getSystemApplicationSupportFolder();
|
||||
std::string rootdir;
|
||||
|
||||
//Create root directory
|
||||
if (CreateDirectory(*appdir, secondLifeString, &rootdir))
|
||||
{
|
||||
|
||||
// Save the full path to the folder
|
||||
mOSUserDir = rootdir;
|
||||
|
||||
// Create our sub-dirs
|
||||
CreateDirectory(rootdir, std::string("data"), NULL);
|
||||
CreateDirectory(rootdir, std::string("logs"), NULL);
|
||||
CreateDirectory(rootdir, std::string("user_settings"), NULL);
|
||||
CreateDirectory(rootdir, std::string("browser_profile"), NULL);
|
||||
}
|
||||
|
||||
//mOSCacheDir
|
||||
std::string *cachedir = getSystemCacheFolder();
|
||||
|
||||
if (cachedir)
|
||||
|
||||
{
|
||||
#if 0 // <FS:TS> Merge testing
|
||||
FSRef newFileRef;
|
||||
|
||||
// Create the directory
|
||||
|
|
@ -194,27 +174,28 @@ LLDir_Mac::LLDir_Mac()
|
|||
{
|
||||
FSRefToLLString(&cacheDirRef, mOSCacheDir);
|
||||
(void)CFCreateDirectory(&cacheDirRef, CFSTR("Firestorm"),NULL);
|
||||
#endif
|
||||
mOSCacheDir = *cachedir;
|
||||
//SPATTERS TODO: This changes from ~/Library/Cache/Secondlife to ~/Library/Cache/com.app.secondlife/Secondlife. Last dir level could go away.
|
||||
CreateDirectory(mOSCacheDir, secondLifeString, NULL);
|
||||
}
|
||||
|
||||
// mOSUserAppDir
|
||||
mOSUserAppDir = mOSUserDir;
|
||||
|
||||
// mTempDir
|
||||
error = FSFindFolder(kOnAppropriateDisk, kTemporaryFolderType, true, &fileRef);
|
||||
if (error == noErr)
|
||||
{
|
||||
FSRef tempRef;
|
||||
error = CFCreateDirectory(&fileRef, secondLifeString, &tempRef);
|
||||
if (error == noErr)
|
||||
FSRefToLLString(&tempRef, mTempDir);
|
||||
}
|
||||
//Aura 120920 boost::filesystem::temp_directory_path() not yet implemented on mac. :(
|
||||
std::string *tmpdir = getSystemTempFolder();
|
||||
if (tmpdir)
|
||||
{
|
||||
|
||||
CreateDirectory(*tmpdir, secondLifeString, &mTempDir);
|
||||
if (tmpdir) delete tmpdir;
|
||||
}
|
||||
|
||||
mWorkingDir = getCurPath();
|
||||
|
||||
mLLPluginDir = mAppRODataDir + mDirDelimiter + "llplugin";
|
||||
|
||||
CFRelease(executableURLRef);
|
||||
executableURLRef = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -235,27 +216,6 @@ void LLDir_Mac::initAppDirs(const std::string &app_name,
|
|||
mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
|
||||
}
|
||||
mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");
|
||||
|
||||
//dumpCurrentDirectories();
|
||||
}
|
||||
|
||||
U32 LLDir_Mac::countFilesInDir(const std::string &dirname, const std::string &mask)
|
||||
{
|
||||
U32 file_count = 0;
|
||||
glob_t g;
|
||||
|
||||
std::string tmp_str;
|
||||
tmp_str = dirname;
|
||||
tmp_str += mask;
|
||||
|
||||
if(glob(tmp_str.c_str(), GLOB_NOSORT, NULL, &g) == 0)
|
||||
{
|
||||
file_count = g.gl_pathc;
|
||||
|
||||
globfree(&g);
|
||||
}
|
||||
|
||||
return (file_count);
|
||||
}
|
||||
|
||||
// get the next file in the directory
|
||||
|
|
@ -320,27 +280,14 @@ BOOL LLDir_Mac::getNextFileInDir(const std::string &dirname, const std::string &
|
|||
|
||||
std::string LLDir_Mac::getCurPath()
|
||||
{
|
||||
char tmp_str[LL_MAX_PATH]; /* Flawfinder: ignore */
|
||||
getcwd(tmp_str, LL_MAX_PATH);
|
||||
return tmp_str;
|
||||
return boost::filesystem::path( boost::filesystem::current_path() ).string();
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL LLDir_Mac::fileExists(const std::string &filename) const
|
||||
bool LLDir_Mac::fileExists(const std::string &filename) const
|
||||
{
|
||||
struct stat stat_data;
|
||||
// Check the age of the file
|
||||
// Now, we see if the files we've gathered are recent...
|
||||
int res = stat(filename.c_str(), &stat_data);
|
||||
if (!res)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return boost::filesystem::exists(filename);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -47,15 +47,11 @@ public:
|
|||
virtual std::string getCurPath();
|
||||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
virtual BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);
|
||||
virtual BOOL fileExists(const std::string &filename) const;
|
||||
//virtual BOOL fileExists(const std::string &filename) const;
|
||||
virtual bool fileExists(const std::string &filename) const;
|
||||
|
||||
/*virtual*/ std::string getLLPluginLauncher();
|
||||
/*virtual*/ std::string getLLPluginFilename(std::string base_name);
|
||||
|
||||
private:
|
||||
int mCurrentDirIndex;
|
||||
int mCurrentDirCount;
|
||||
std::string mCurrentDir;
|
||||
};
|
||||
|
||||
#endif // LL_LLDIR_MAC_H
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ std::string LLDir_Solaris::getCurPath()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLDir_Solaris::fileExists(const std::string &filename) const
|
||||
bool LLDir_Solaris::fileExists(const std::string &filename) const
|
||||
{
|
||||
struct stat stat_data;
|
||||
// Check the age of the file
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public:
|
|||
|
||||
virtual std::string getCurPath();
|
||||
virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
/*virtual*/ BOOL fileExists(const std::string &filename) const;
|
||||
/*virtual*/ bool fileExists(const std::string &filename) const;
|
||||
|
||||
private:
|
||||
DIR *mDirp;
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ std::string LLDir_Win32::getCurPath()
|
|||
}
|
||||
|
||||
|
||||
BOOL LLDir_Win32::fileExists(const std::string &filename) const
|
||||
bool LLDir_Win32::fileExists(const std::string &filename) const
|
||||
{
|
||||
llstat stat_data;
|
||||
// Check the age of the file
|
||||
|
|
|
|||
|
|
@ -1,60 +1,60 @@
|
|||
/**
|
||||
* @file lldir_win32.h
|
||||
* @brief Definition of directory utilities class for windows
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_WINDOWS
|
||||
#error This header must not be included when compiling for any target other than Windows. Consider including lldir.h instead.
|
||||
#endif // !LL_WINDOWS
|
||||
|
||||
#ifndef LL_LLDIR_WIN32_H
|
||||
#define LL_LLDIR_WIN32_H
|
||||
|
||||
#include "lldir.h"
|
||||
|
||||
class LLDir_Win32 : public LLDir
|
||||
{
|
||||
public:
|
||||
LLDir_Win32();
|
||||
virtual ~LLDir_Win32();
|
||||
|
||||
/*virtual*/ void initAppDirs(const std::string &app_name,
|
||||
const std::string& app_read_only_data_dir);
|
||||
|
||||
/*virtual*/ std::string getCurPath();
|
||||
/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
/*virtual*/ BOOL fileExists(const std::string &filename) const;
|
||||
/*virtual*/ BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);
|
||||
/*virtual*/ std::string getLLPluginLauncher();
|
||||
/*virtual*/ std::string getLLPluginFilename(std::string base_name);
|
||||
|
||||
private:
|
||||
BOOL getNextFileInDir(const llutf16string &dirname, const std::string &mask, std::string &fname);
|
||||
void* mDirSearch_h;
|
||||
llutf16string mCurrentDir;
|
||||
};
|
||||
|
||||
#endif // LL_LLDIR_WIN32_H
|
||||
|
||||
|
||||
/**
|
||||
* @file lldir_win32.h
|
||||
* @brief Definition of directory utilities class for windows
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_WINDOWS
|
||||
#error This header must not be included when compiling for any target other than Windows. Consider including lldir.h instead.
|
||||
#endif // !LL_WINDOWS
|
||||
|
||||
#ifndef LL_LLDIR_WIN32_H
|
||||
#define LL_LLDIR_WIN32_H
|
||||
|
||||
#include "lldir.h"
|
||||
|
||||
class LLDir_Win32 : public LLDir
|
||||
{
|
||||
public:
|
||||
LLDir_Win32();
|
||||
virtual ~LLDir_Win32();
|
||||
|
||||
/*virtual*/ void initAppDirs(const std::string &app_name,
|
||||
const std::string& app_read_only_data_dir);
|
||||
|
||||
/*virtual*/ std::string getCurPath();
|
||||
/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask);
|
||||
/*virtual*/ bool fileExists(const std::string &filename) const;
|
||||
|
||||
/*virtual*/ std::string getLLPluginLauncher();
|
||||
/*virtual*/ std::string getLLPluginFilename(std::string base_name);
|
||||
|
||||
private:
|
||||
BOOL getNextFileInDir(const llutf16string &dirname, const std::string &mask, std::string &fname);
|
||||
void* mDirSearch_h;
|
||||
llutf16string mCurrentDir;
|
||||
};
|
||||
|
||||
#endif // LL_LLDIR_WIN32_H
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
/**
|
||||
* @file llvfs_objc.h
|
||||
* @brief Definition of directory utilities class for Mac OS X
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if !LL_DARWIN
|
||||
#error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead.
|
||||
#endif // !LL_DARWIN
|
||||
|
||||
#ifndef LL_LLVFS_OBJC_H
|
||||
#define LL_LLVFS_OBJC_H
|
||||
|
||||
#include <iostream>
|
||||
|
||||
std::string* getSystemTempFolder();
|
||||
std::string* getSystemCacheFolder();
|
||||
std::string* getSystemApplicationSupportFolder();
|
||||
std::string* getSystemResourceFolder();
|
||||
std::string* getSystemExecutableFolder();
|
||||
|
||||
|
||||
#endif LL_LLVFS_OBJC_H
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
/**
|
||||
* @file llvfs_objc.cpp
|
||||
* @brief Cocoa implementation of directory utilities for Mac OS X
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#if LL_DARWIN
|
||||
|
||||
//WARNING: This file CANNOT use standard linden includes due to conflicts between definitions of BOOL
|
||||
|
||||
#include "llvfs_objc.h"
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
std::string* getSystemTempFolder()
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
NSString * tempDir = NSTemporaryDirectory();
|
||||
if (tempDir == nil)
|
||||
tempDir = @"/tmp";
|
||||
std::string *result = ( new std::string([tempDir UTF8String]) );
|
||||
[pool release];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//findSystemDirectory scoped exclusively to this file.
|
||||
std::string* findSystemDirectory(NSSearchPathDirectory searchPathDirectory,
|
||||
NSSearchPathDomainMask domainMask)
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
std::string *result;
|
||||
NSString *path = nil;
|
||||
|
||||
// Search for the path
|
||||
NSArray* paths = NSSearchPathForDirectoriesInDomains(searchPathDirectory,
|
||||
domainMask,
|
||||
YES);
|
||||
if ([paths count])
|
||||
{
|
||||
path = [paths objectAtIndex:0];
|
||||
//SPATTERS HACK: Always attempt to create directory, ignore errors.
|
||||
NSError *error = nil;
|
||||
|
||||
[[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
|
||||
|
||||
|
||||
result = new std::string([path UTF8String]);
|
||||
}
|
||||
[pool release];
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string* getSystemExecutableFolder()
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
NSString *bundlePath = [[NSBundle mainBundle] executablePath];
|
||||
std::string *result = (new std::string([bundlePath UTF8String]));
|
||||
[pool release];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string* getSystemResourceFolder()
|
||||
{
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
|
||||
std::string *result = (new std::string([bundlePath UTF8String]));
|
||||
[pool release];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string* getSystemCacheFolder()
|
||||
{
|
||||
return findSystemDirectory (NSCachesDirectory,
|
||||
NSUserDomainMask);
|
||||
}
|
||||
|
||||
std::string* getSystemApplicationSupportFolder()
|
||||
{
|
||||
return findSystemDirectory (NSApplicationSupportDirectory,
|
||||
NSUserDomainMask);
|
||||
|
||||
}
|
||||
|
||||
#endif // LL_DARWIN
|
||||
|
|
@ -134,7 +134,7 @@ struct LLDir_Dummy: public LLDir
|
|||
return 0;
|
||||
}
|
||||
|
||||
virtual BOOL fileExists(const std::string& pathname) const
|
||||
virtual bool fileExists(const std::string& pathname) const
|
||||
{
|
||||
// Record fileExists() calls so we can check whether caching is
|
||||
// working right. Certain LLDir calls should be able to make decisions
|
||||
|
|
|
|||
|
|
@ -23,12 +23,14 @@ include_directories(
|
|||
set(mac_crash_logger_SOURCE_FILES
|
||||
mac_crash_logger.cpp
|
||||
llcrashloggermac.cpp
|
||||
llcrashloggermacdelegate.mm
|
||||
)
|
||||
|
||||
set(mac_crash_logger_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
|
||||
llcrashloggermac.h
|
||||
llcrashloggermacdelegate.h
|
||||
)
|
||||
|
||||
set_source_files_properties(${mac_crash_logger_HEADER_FILES}
|
||||
|
|
@ -55,9 +57,12 @@ set_target_properties(mac-crash-logger
|
|||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
|
||||
)
|
||||
|
||||
find_library(COCOA_LIBRARY Cocoa)
|
||||
|
||||
target_link_libraries(mac-crash-logger
|
||||
${LLCRASHLOGGER_LIBRARIES}
|
||||
${LLVFS_LIBRARIES}
|
||||
${COCOA_LIBRARIES}
|
||||
${LLXML_LIBRARIES}
|
||||
${LLMESSAGE_LIBRARIES}
|
||||
${LLVFS_LIBRARIES}
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IBFramework Version</key>
|
||||
<string>788</string>
|
||||
<key>IBLastKnownRelativeProjectPath</key>
|
||||
<string>../../build-darwin-i386/SecondLife.xcodeproj</string>
|
||||
<key>IBOldestOS</key>
|
||||
<integer>5</integer>
|
||||
<key>IBOpenObjects</key>
|
||||
<array>
|
||||
<integer>181</integer>
|
||||
</array>
|
||||
<key>IBSystem Version</key>
|
||||
<string>10H574</string>
|
||||
<key>targetFramework</key>
|
||||
<string>IBCarbonFramework</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" standalone="yes"?>
|
||||
<object class="NSIBObjectData">
|
||||
<object name="rootObject" class="NSCustomObject" id="1">
|
||||
</object>
|
||||
<array count="7" name="allObjects">
|
||||
<object class="IBCarbonStaticText" id="181">
|
||||
<string name="title">Firestorm appears to have crashed or frozen on its last run. You can help improve Firestorm by submitting a crash report our developers. The crash reporter collects information about your computer's hardware configuration, operating system, and some Firestorm logs, all of which are used soley for debugging the problem. In the space below, please briefly describe what you were doing or trying to do just prior to the crash and click Send Report. </string>
|
||||
<string name="bounds">20 20 231 487 </string>
|
||||
</object>
|
||||
<object class="IBCarbonEditText" id="185">
|
||||
<ostype name="controlSignature">text</ostype>
|
||||
<boolean name="isUnicode">TRUE</boolean>
|
||||
<string name="bounds">242 23 391 484 </string>
|
||||
</object>
|
||||
<object class="IBCarbonButton" id="183">
|
||||
<ostype name="command">not!</ostype>
|
||||
<int name="buttonType">2</int>
|
||||
<string name="title">Don't Send</string>
|
||||
<string name="bounds">414 390 434 487 </string>
|
||||
</object>
|
||||
<object class="IBCarbonStaticText" id="181">
|
||||
<string name="title">Firestorm appears to have crashed or frozen on its last run. You can help improve Firestorm by submitting a crash report our developers. The crash reporter collects information about your computer's hardware configuration, operating system, and some Firestorm logs, all of which are used soley for debugging the problem. In the space below, please briefly describe what you were doing or trying to do just prior to the crash and click Send Report. </string>
|
||||
<string name="bounds">20 20 231 487 </string>
|
||||
</object>
|
||||
<object class="IBCarbonWindow" id="166">
|
||||
<int name="carbonWindowClass">2</int>
|
||||
<int name="themeBrush">3</int>
|
||||
<int name="windowPosition">7</int>
|
||||
<string name="title">Firestorm Crash Logger</string>
|
||||
<object name="rootControl" class="IBCarbonRootControl" id="167">
|
||||
<array count="5" name="subviews">
|
||||
<reference idRef="181"/>
|
||||
<object class="IBCarbonButton" id="182">
|
||||
<ostype name="command">ok </ostype>
|
||||
<string name="title">Send Report</string>
|
||||
<string name="bounds">414 273 434 378 </string>
|
||||
</object>
|
||||
<reference idRef="183"/>
|
||||
<reference idRef="185"/>
|
||||
<object class="IBCarbonCheckBox" id="193">
|
||||
<ostype name="controlSignature">remb</ostype>
|
||||
<string name="title">Remember This Choice</string>
|
||||
<string name="bounds">415 20 433 186 </string>
|
||||
</object>
|
||||
</array>
|
||||
<string name="bounds">0 0 454 507 </string>
|
||||
</object>
|
||||
<string name="windowRect">257 653 711 1160 </string>
|
||||
<string name="ScreenRectAtEncodeTime">0 0 768 1024 </string>
|
||||
</object>
|
||||
<reference idRef="193"/>
|
||||
<reference idRef="167"/>
|
||||
<reference idRef="182"/>
|
||||
</array>
|
||||
<array count="7" name="allParents">
|
||||
<reference idRef="167"/>
|
||||
<reference idRef="167"/>
|
||||
<reference idRef="167"/>
|
||||
<reference idRef="1"/>
|
||||
<reference idRef="167"/>
|
||||
<reference idRef="166"/>
|
||||
<reference idRef="167"/>
|
||||
</array>
|
||||
<dictionary count="2" name="nameTable">
|
||||
<string>CrashReporter</string>
|
||||
<reference idRef="166"/>
|
||||
<string>File's Owner</string>
|
||||
<reference idRef="1"/>
|
||||
</dictionary>
|
||||
<string name="targetFramework">IBCarbonFramework</string>
|
||||
<unsigned_int name="nextObjectID">194</unsigned_int>
|
||||
</object>
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
|
|
@ -10,8 +10,6 @@
|
|||
<string></string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.secondlife.indra.crashreporter</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
|
|
@ -22,5 +20,9 @@
|
|||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0.0</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>CrashReporter</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include "llcrashloggermac.h"
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <iostream>
|
||||
|
||||
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
|
||||
|
|
@ -38,102 +37,14 @@
|
|||
#include "lldir.h"
|
||||
#include "llsdserialize.h"
|
||||
|
||||
#define MAX_LOADSTRING 100
|
||||
const char* const SETTINGS_FILE_HEADER = "version";
|
||||
const S32 SETTINGS_FILE_VERSION = 101;
|
||||
|
||||
// Windows Message Handlers
|
||||
|
||||
BOOL gFirstDialog = TRUE; // Are we currently handling the Send/Don't Send dialog?
|
||||
BOOL gFirstDialog = TRUE;
|
||||
LLFILE *gDebugFile = NULL;
|
||||
|
||||
WindowRef gWindow = NULL;
|
||||
EventHandlerRef gEventHandler = NULL;
|
||||
std::string gUserNotes = "";
|
||||
bool gSendReport = false;
|
||||
bool gRememberChoice = false;
|
||||
IBNibRef nib = NULL;
|
||||
|
||||
OSStatus dialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata)
|
||||
{
|
||||
OSStatus result = eventNotHandledErr;
|
||||
OSStatus err;
|
||||
UInt32 evtClass = GetEventClass(event);
|
||||
UInt32 evtKind = GetEventKind(event);
|
||||
if((evtClass == kEventClassCommand) && (evtKind == kEventCommandProcess))
|
||||
{
|
||||
HICommand cmd;
|
||||
err = GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(cmd), NULL, &cmd);
|
||||
|
||||
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
//Get the value of the checkbox
|
||||
ControlID id;
|
||||
ControlRef checkBox = NULL;
|
||||
id.signature = 'remb';
|
||||
id.id = 0;
|
||||
err = GetControlByID(gWindow, &id, &checkBox);
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
if(GetControl32BitValue(checkBox) == kControlCheckBoxCheckedValue)
|
||||
{
|
||||
gRememberChoice = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
gRememberChoice = false;
|
||||
}
|
||||
}
|
||||
switch(cmd.commandID)
|
||||
{
|
||||
case kHICommandOK:
|
||||
{
|
||||
char buffer[65535]; /* Flawfinder: ignore */
|
||||
Size size = sizeof(buffer) - 1;
|
||||
ControlRef textField = NULL;
|
||||
|
||||
id.signature = 'text';
|
||||
id.id = 0;
|
||||
|
||||
err = GetControlByID(gWindow, &id, &textField);
|
||||
if(err == noErr)
|
||||
{
|
||||
// Get the user response text
|
||||
err = GetControlData(textField, kControlNoPart, kControlEditTextTextTag, size, (Ptr)buffer, &size);
|
||||
}
|
||||
if(err == noErr)
|
||||
{
|
||||
// Make sure the string is terminated.
|
||||
buffer[size] = 0;
|
||||
gUserNotes = buffer;
|
||||
|
||||
llinfos << buffer << llendl;
|
||||
}
|
||||
|
||||
// Send the report.
|
||||
|
||||
QuitAppModalLoopForWindow(gWindow);
|
||||
gSendReport = true;
|
||||
result = noErr;
|
||||
}
|
||||
break;
|
||||
|
||||
case kHICommandCancel:
|
||||
QuitAppModalLoopForWindow(gWindow);
|
||||
result = noErr;
|
||||
break;
|
||||
default:
|
||||
result = eventNotHandledErr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
LLCrashLoggerMac::LLCrashLoggerMac(void)
|
||||
{
|
||||
|
|
@ -146,73 +57,16 @@ LLCrashLoggerMac::~LLCrashLoggerMac(void)
|
|||
bool LLCrashLoggerMac::init(void)
|
||||
{
|
||||
bool ok = LLCrashLogger::init();
|
||||
if(!ok) return false;
|
||||
if(mCrashBehavior != CRASH_BEHAVIOR_ASK) return true;
|
||||
|
||||
// Real UI...
|
||||
OSStatus err;
|
||||
|
||||
err = CreateNibReference(CFSTR("CrashReporter"), &nib);
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
err = CreateWindowFromNib(nib, CFSTR("CrashReporter"), &gWindow);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// Set focus to the edit text area
|
||||
ControlRef textField = NULL;
|
||||
ControlID id;
|
||||
|
||||
id.signature = 'text';
|
||||
id.id = 0;
|
||||
|
||||
// Don't set err if any of this fails, since it's non-critical.
|
||||
if(GetControlByID(gWindow, &id, &textField) == noErr)
|
||||
{
|
||||
SetKeyboardFocus(gWindow, textField, kControlFocusNextPart);
|
||||
}
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
ShowWindow(gWindow);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// Set up an event handler for the window.
|
||||
EventTypeSpec handlerEvents[] =
|
||||
{
|
||||
{ kEventClassCommand, kEventCommandProcess }
|
||||
};
|
||||
|
||||
InstallWindowEventHandler(
|
||||
gWindow,
|
||||
NewEventHandlerUPP(dialogHandler),
|
||||
GetEventTypeCount (handlerEvents),
|
||||
handlerEvents,
|
||||
0,
|
||||
&gEventHandler);
|
||||
}
|
||||
return true;
|
||||
return ok;
|
||||
}
|
||||
|
||||
void LLCrashLoggerMac::gatherPlatformSpecificFiles()
|
||||
{
|
||||
updateApplication("Gathering hardware information...");
|
||||
}
|
||||
|
||||
bool LLCrashLoggerMac::mainLoop()
|
||||
{
|
||||
OSStatus err = noErr;
|
||||
|
||||
if(err == noErr && mCrashBehavior == CRASH_BEHAVIOR_ASK)
|
||||
{
|
||||
RunAppModalLoopForWindow(gWindow);
|
||||
}
|
||||
else if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
{
|
||||
gSendReport = true;
|
||||
}
|
||||
|
|
@ -227,26 +81,11 @@ bool LLCrashLoggerMac::mainLoop()
|
|||
{
|
||||
setUserText(gUserNotes);
|
||||
sendCrashLogs();
|
||||
}
|
||||
|
||||
if(gWindow != NULL)
|
||||
{
|
||||
DisposeWindow(gWindow);
|
||||
}
|
||||
|
||||
if(nib != NULL)
|
||||
{
|
||||
DisposeNibReference(nib);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLCrashLoggerMac::updateApplication(const std::string& message)
|
||||
{
|
||||
LLCrashLogger::updateApplication(message);
|
||||
}
|
||||
|
||||
bool LLCrashLoggerMac::cleanup()
|
||||
{
|
||||
commonCleanup();
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ public:
|
|||
~LLCrashLoggerMac(void);
|
||||
virtual bool init();
|
||||
virtual bool mainLoop();
|
||||
virtual void updateApplication(const std::string& message = LLStringUtil::null);
|
||||
virtual bool cleanup();
|
||||
virtual void gatherPlatformSpecificFiles();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* @file llcrashloggermacdelegate.h
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
/*
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface LLCrashLoggerMacDelegate : NSObject <NSApplicationDelegate>
|
||||
{
|
||||
IBOutlet NSTextField *crashText;
|
||||
IBOutlet NSButton *rememberCheck;
|
||||
|
||||
NSWindow *_window;
|
||||
bool mRemember;
|
||||
|
||||
}
|
||||
|
||||
- (void)setWindow:(NSWindow *)newWindow;
|
||||
- (NSWindow *)window;
|
||||
|
||||
- (IBAction)remember:(id)sender;
|
||||
- (IBAction)send:(id)sender;
|
||||
- (IBAction)cancel:(id)sender;
|
||||
|
||||
@property (assign) IBOutlet NSWindow *window;
|
||||
|
||||
@end
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* @file llcrashloggermacdelegate.mm
|
||||
* @brief Mac OSX crash logger implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
#import "llcrashloggermacdelegate.h"
|
||||
#include <iostream>
|
||||
|
||||
extern std::string gUserNotes;
|
||||
extern bool gSendReport;
|
||||
extern bool gRememberChoice;
|
||||
|
||||
@implementation LLCrashLoggerMacDelegate
|
||||
|
||||
- (void)setWindow:(NSWindow *)window
|
||||
{
|
||||
_window = window;
|
||||
}
|
||||
|
||||
- (NSWindow *)window
|
||||
{
|
||||
return _window;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
std::string* NSToString( NSString *ns_str )
|
||||
{
|
||||
return ( new std::string([ns_str UTF8String]) );
|
||||
}
|
||||
|
||||
- (IBAction)remember:(id)sender
|
||||
{
|
||||
gRememberChoice = [rememberCheck state];
|
||||
}
|
||||
|
||||
- (IBAction)send:(id)sender
|
||||
{
|
||||
std::string* user_input = NSToString([crashText stringValue]);
|
||||
gUserNotes = *user_input;
|
||||
gSendReport = true;
|
||||
}
|
||||
|
||||
- (IBAction)cancel:(id)sender
|
||||
{
|
||||
[ _window close];
|
||||
}
|
||||
@end
|
||||
*/
|
||||
|
|
@ -26,11 +26,12 @@
|
|||
|
||||
#include "linden_common.h"
|
||||
#include "llcrashloggermac.h"
|
||||
#include "indra_constants.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
llinfos << "Starting crash reporter." << llendl;
|
||||
|
||||
LLCrashLoggerMac app;
|
||||
app.parseCommandOptions(argc, argv);
|
||||
|
||||
|
|
@ -39,9 +40,16 @@ int main(int argc, char **argv)
|
|||
llwarns << "Unable to initialize application." << llendl;
|
||||
return 1;
|
||||
}
|
||||
if (app.getCrashBehavior() != CRASH_BEHAVIOR_ALWAYS_SEND)
|
||||
{
|
||||
// return NSApplicationMain(argc, (const char **)argv);
|
||||
}
|
||||
|
||||
app.mainLoop();
|
||||
|
||||
app.cleanup();
|
||||
|
||||
llinfos << "Crash reporter finished normally." << llendl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,91 @@
|
|||
/**
|
||||
* @file mac_updater.h
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <pthread.h>
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
#ifndef LL_MAC_UPDATER_H
|
||||
#define LL_MAC_UPDATER_H
|
||||
extern bool gCancelled;
|
||||
extern bool gFailure;
|
||||
|
||||
void *updatethreadproc(void*);
|
||||
std::string* walkParents( signed int depth, std::string* childpath );
|
||||
std::string* getUserTrashFolder();
|
||||
|
||||
void setProgress(int cur, int max);
|
||||
void setProgressText(const std::string& str);
|
||||
void sendProgress(int cur, int max, std::string str);
|
||||
void sendDone();
|
||||
void sendStopAlert();
|
||||
|
||||
bool isFSRefViewerBundle(const std::string& targetURL);
|
||||
bool isDirWritable(const std::string& dir_name);
|
||||
bool mkTempDir(boost::filesystem::path& temp_dir);
|
||||
bool copyDir(const std::string& src_dir, const std::string& dest_dir);
|
||||
|
||||
int oldmain();
|
||||
|
||||
class LLMacUpdater
|
||||
{
|
||||
public:
|
||||
LLMacUpdater();
|
||||
void doUpdate();
|
||||
const std::string walkParents( signed int depth, const std::string& childpath );
|
||||
bool isApplication(const std::string& app_str);
|
||||
void filterFile(const char* filename);
|
||||
|
||||
bool findAppBundleOnDiskImage(const boost::filesystem::path& dir_path,
|
||||
boost::filesystem::path& path_found);
|
||||
|
||||
bool verifyDirectory(const boost::filesystem::path* directory, bool isParent=false);
|
||||
bool getViewerDir(boost::filesystem::path &app_dir);
|
||||
bool downloadDMG(const std::string& dmgName, boost::filesystem::path* temp_dir);
|
||||
bool doMount(const std::string& dmgName, char* deviceNode, const boost::filesystem::path& temp_dir);
|
||||
bool moveApplication (const boost::filesystem::path& app_dir,
|
||||
const boost::filesystem::path& temp_dir,
|
||||
boost::filesystem::path& aside_dir);
|
||||
bool doInstall(const boost::filesystem::path& app_dir,
|
||||
const boost::filesystem::path& temp_dir,
|
||||
boost::filesystem::path& mount_dir,
|
||||
bool replacingTarget);
|
||||
void* updatethreadproc(void*);
|
||||
static void* sUpdatethreadproc(void*);
|
||||
|
||||
public:
|
||||
std::string *mUpdateURL;
|
||||
std::string *mProductName;
|
||||
std::string *mBundleID;
|
||||
std::string *mDmgFile;
|
||||
std::string *mMarkerPath;
|
||||
std::string *mApplicationPath;
|
||||
static LLMacUpdater *sInstance;
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -48,7 +48,7 @@ public:
|
|||
/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask) { return 42; }
|
||||
/*virtual*/ BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname, BOOL wrap) { fname = fname + "_NEXT"; return false; }
|
||||
/*virtual*/ void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname) { fname = "RANDOM_FILE"; }
|
||||
/*virtual*/ BOOL fileExists(const std::string &filename) const { return false; }
|
||||
/*virtual*/ bool fileExists(const std::string &filename) const { return false; }
|
||||
};
|
||||
|
||||
LLDir_stub gDirUtil;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class LLDir_Mock : public LLDir
|
|||
const std::string &mask,
|
||||
std::string &fname) {}
|
||||
std::string getCurPath() { return ""; }
|
||||
BOOL fileExists(const std::string &filename) const { return false; }
|
||||
bool fileExists(const std::string &filename) const { return false; }
|
||||
std::string getLLPluginLauncher() { return ""; }
|
||||
std::string getLLPluginFilename(std::string base_name) { return ""; }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue