summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcallum_linden <none@none>2014-09-08 12:28:24 -0700
committercallum_linden <none@none>2014-09-08 12:28:24 -0700
commitbd701ca99b7bd31559add2e94e533ee3bc3ff025 (patch)
tree563d4b63b4c741c15d6767f67c5f9fb2f4f762ba
parent77751a15d1dc976d77d41db5b586e18b5311ccb4 (diff)
parenteef4acc5367a486b0c52c6ce5e1aba995fefd99c (diff)
Merge with head of viewer-release
-rwxr-xr-x.hgtags2
-rwxr-xr-xautobuild.xml272
-rwxr-xr-xdoc/contributions.txt38
-rwxr-xr-xindra/CMakeLists.txt6
-rw-r--r--indra/cmake/00-COMPILE-LINK-RUN.txt344
-rwxr-xr-xindra/cmake/00-Common.cmake2
-rwxr-xr-xindra/cmake/Boost.cmake13
-rwxr-xr-xindra/cmake/Copy3rdPartyLibs.cmake29
-rwxr-xr-xindra/cmake/FreeType.cmake2
-rwxr-xr-xindra/cmake/GoogleMock.cmake2
-rwxr-xr-xindra/cmake/LLPrimitive.cmake28
-rwxr-xr-xindra/cmake/Linking.cmake1
-rwxr-xr-xindra/cmake/OpenSSL.cmake4
-rwxr-xr-xindra/cmake/PNG.cmake25
-rwxr-xr-xindra/cmake/WebKitLibPlugin.cmake43
-rwxr-xr-xindra/cmake/ZLIB.cmake21
-rwxr-xr-xindra/edit-me-to-trigger-new-build.txt1
-rw-r--r--indra/linux_updater/CMakeLists.txt57
-rw-r--r--indra/linux_updater/linux_updater.cpp926
-rwxr-xr-xindra/llaudio/llaudiodecodemgr.h2
-rwxr-xr-xindra/llcommon/CMakeLists.txt2
-rwxr-xr-xindra/llcommon/llmemory.h3
-rwxr-xr-xindra/llmessage/lltransfermanager.cpp8
-rw-r--r--indra/mac_updater/mac_updater.cpp1266
-rwxr-xr-xindra/media_plugins/quicktime/media_plugin_quicktime.cpp28
-rwxr-xr-xindra/media_plugins/webkit/CMakeLists.txt12
-rwxr-xr-xindra/newview/CMakeLists.txt31
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/app_settings/filters/BlackAndWhite.xml14
-rw-r--r--indra/newview/app_settings/filters/Sepia.xml25
-rwxr-xr-xindra/newview/app_settings/settings.xml13
-rwxr-xr-xindra/newview/icons/beta/secondlife_128.pngbin18268 -> 16200 bytes
-rwxr-xr-xindra/newview/icons/beta/secondlife_16.pngbin3536 -> 1020 bytes
-rwxr-xr-xindra/newview/icons/beta/secondlife_256.pngbin49418 -> 49119 bytes
-rwxr-xr-xindra/newview/icons/beta/secondlife_32.pngbin4767 -> 2252 bytes
-rwxr-xr-xindra/newview/icons/beta/secondlife_48.pngbin6438 -> 3940 bytes
-rwxr-xr-xindra/newview/icons/beta/secondlife_512.pngbin151779 -> 157618 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_128.pngbin17706 -> 15587 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_16.pngbin3471 -> 956 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_256.pngbin48488 -> 48230 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_32.pngbin4675 -> 2153 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_48.pngbin6195 -> 3704 bytes
-rwxr-xr-xindra/newview/icons/project/secondlife_512.pngbin149145 -> 155555 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_128.pngbin17198 -> 15184 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_16.pngbin3524 -> 1009 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_256.pngbin47946 -> 47740 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_32.pngbin4746 -> 2237 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_48.pngbin6249 -> 3748 bytes
-rwxr-xr-xindra/newview/icons/release/secondlife_512.pngbin147963 -> 154396 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_128.pngbin17156 -> 15058 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_16.pngbin3471 -> 956 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_256.pngbin47522 -> 47320 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_32.pngbin4644 -> 2130 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_48.pngbin6115 -> 3630 bytes
-rwxr-xr-xindra/newview/icons/test/secondlife_512.pngbin146971 -> 153502 bytes
-rw-r--r--indra/newview/llfloaterfacebook.cpp327
-rw-r--r--indra/newview/llfloaterfacebook.h45
-rw-r--r--indra/newview/llfloaterflickr.cpp23
-rw-r--r--indra/newview/llfloaterflickr.h1
-rwxr-xr-xindra/newview/llfloaterland.cpp7
-rwxr-xr-xindra/newview/llfloaterregioninfo.cpp21
-rwxr-xr-xindra/newview/llfloaterregioninfo.h2
-rwxr-xr-xindra/newview/llfloatersnapshot.cpp163
-rwxr-xr-xindra/newview/llfloatertopobjects.cpp24
-rwxr-xr-xindra/newview/llfloatertopobjects.h1
-rw-r--r--indra/newview/llfloatertwitter.cpp23
-rw-r--r--indra/newview/llfloatertwitter.h1
-rwxr-xr-xindra/newview/llinventoryfilter.cpp51
-rwxr-xr-xindra/newview/llinventoryfilter.h13
-rwxr-xr-xindra/newview/llinventorypanel.cpp5
-rwxr-xr-xindra/newview/llinventorypanel.h1
-rwxr-xr-xindra/newview/llpanelmaininventory.cpp43
-rwxr-xr-xindra/newview/llpanelsnapshot.cpp19
-rwxr-xr-xindra/newview/llpanelsnapshot.h1
-rwxr-xr-xindra/newview/llpanelsnapshotinventory.cpp13
-rwxr-xr-xindra/newview/llpanelsnapshotoptions.cpp11
-rwxr-xr-xindra/newview/llpanelsnapshotpostcard.cpp26
-rw-r--r--indra/newview/llsnapshotlivepreview.cpp32
-rw-r--r--indra/newview/llsyntaxid.cpp17
-rwxr-xr-xindra/newview/lltexturefetch.cpp355
-rwxr-xr-xindra/newview/lltextureview.cpp4
-rwxr-xr-xindra/newview/llviewermessage.cpp140
-rwxr-xr-xindra/newview/llviewerregion.cpp4
-rwxr-xr-xindra/newview/skins/default/textures/bottomtray/ChatBarHandle.pngbin2808 -> 260 bytes
-rwxr-xr-xindra/newview/skins/default/textures/bottomtray/Move_Fly_Off.pngbin3347 -> 609 bytes
-rwxr-xr-xindra/newview/skins/default/textures/bottomtray/Notices_Unread.pngbin3693 -> 436 bytes
-rwxr-xr-xindra/newview/skins/default/textures/bottomtray/Snapshot_Off.pngbin3204 -> 549 bytes
-rwxr-xr-xindra/newview/skins/default/textures/down_arrow.pngbin2936 -> 423 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Edit_Wrench.pngbin3000 -> 452 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Generic_Group_Large.pngbin7507 -> 5274 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Generic_Person.pngbin3280 -> 481 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Hierarchy_View_On.pngbin2839 -> 306 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_Link.pngbin2857 -> 317 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_LostClosed.pngbin3033 -> 526 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_LostOpen.pngbin3223 -> 708 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_Mesh.pngbin3263 -> 751 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_SysClosed.pngbin3153 -> 643 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_SysOpen.pngbin3251 -> 734 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_TrashClosed.pngbin2978 -> 465 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Inv_TrashOpen.pngbin2970 -> 457 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.pngbin3221 -> 681 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.pngbin3235 -> 696 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_Fly_Dark.pngbin3077 -> 474 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.pngbin3194 -> 680 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.pngbin3189 -> 680 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.pngbin3011 -> 452 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.pngbin3011 -> 453 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Person_Check.pngbin3824 -> 925 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Person_Star.pngbin3762 -> 739 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/SL_Logo.pngbin3999 -> 1484 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Shop.pngbin3052 -> 473 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/Web_Profile_Off.pngbin2961 -> 410 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/back_arrow_off.pngbin3775 -> 1261 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/back_arrow_over.pngbin3792 -> 1277 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/back_arrow_press.pngbin3844 -> 1329 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/check_mark.pngbin3166 -> 650 bytes
-rwxr-xr-xindra/newview/skins/default/textures/icons/pop_up_caution.pngbin3158 -> 642 bytes
-rwxr-xr-xindra/newview/skins/default/textures/menu_separator.pngbin2831 -> 304 bytes
-rwxr-xr-xindra/newview/skins/default/textures/model_wizard/progress_bar_bg.pngbin3180 -> 556 bytes
-rwxr-xr-xindra/newview/skins/default/textures/model_wizard/progress_light.pngbin2979 -> 464 bytes
-rwxr-xr-xindra/newview/skins/default/textures/navbar/Search.pngbin3182 -> 516 bytes
-rwxr-xr-xindra/newview/skins/default/textures/navbar/separator.pngbin2826 -> 330 bytes
-rwxr-xr-xindra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.pngbin2899 -> 355 bytes
-rwxr-xr-xindra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.pngbin2886 -> 339 bytes
-rwxr-xr-xindra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.pngbin2896 -> 341 bytes
-rwxr-xr-xindra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.pngbin2920 -> 344 bytes
-rw-r--r--indra/newview/skins/default/textures/toolbar_icons/facebook.pngbin2974 -> 424 bytes
-rwxr-xr-xindra/newview/skins/default/textures/toolbar_icons/mini_cart.pngbin2987 -> 474 bytes
-rwxr-xr-xindra/newview/skins/default/textures/up_arrow.pngbin2930 -> 426 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/Arrow_Down.pngbin3066 -> 467 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.pngbin3576 -> 801 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.pngbin4309 -> 1873 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.pngbin4272 -> 1828 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.pngbin4278 -> 1851 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.pngbin3425 -> 746 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.pngbin4151 -> 1726 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.pngbin4137 -> 1696 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.pngbin4200 -> 1767 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.pngbin3169 -> 538 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.pngbin3845 -> 1388 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.pngbin3867 -> 1410 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.pngbin3915 -> 1477 bytes
-rwxr-xr-xindra/newview/skins/default/textures/widgets/Tooltip.pngbin2910 -> 402 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Close_Foreground.pngbin2871 -> 352 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Help_Foreground.pngbin3084 -> 451 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Help_Press.pngbin3062 -> 451 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.pngbin2839 -> 301 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Minimize_Press.pngbin2839 -> 301 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Restore_Foreground.pngbin2955 -> 446 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/Icon_Restore_Press.pngbin2971 -> 406 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_arrow_down.pngbin3170 -> 573 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_arrow_left.pngbin3059 -> 482 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_arrow_lower_left.pngbin3081 -> 490 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_arrow_right.pngbin3112 -> 513 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_arrow_up.pngbin3219 -> 587 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/hint_background.pngbin4316 -> 1532 bytes
-rwxr-xr-xindra/newview/skins/default/textures/windows/yellow_gradient.pngbin3634 -> 1125 bytes
-rwxr-xr-xindra/newview/skins/default/textures/world/CameraDragDot.pngbin3101 -> 563 bytes
-rwxr-xr-xindra/newview/skins/default/textures/world/NoEntryLines.pngbin3523 -> 1265 bytes
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_snapshot.xml13
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_postcard_message.xml4
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_postcard_settings.xml19
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_inventory.xml5
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_local.xml31
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_options.xml11
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_postcard.xml8
-rwxr-xr-xindra/newview/skins/default/xui/de/panel_snapshot_profile.xml31
-rw-r--r--indra/newview/skins/default/xui/en/floater_facebook.xml39
-rw-r--r--indra/newview/skins/default/xui/en/floater_flickr.xml23
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_inventory_view_finder.xml96
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_snapshot.xml481
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_top_objects.xml14
-rw-r--r--indra/newview/skins/default/xui/en/floater_twitter.xml34
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_inventory_gear_default.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml21
-rw-r--r--indra/newview/skins/default/xui/en/panel_facebook_account.xml77
-rw-r--r--indra/newview/skins/default/xui/en/panel_facebook_friends.xml23
-rw-r--r--indra/newview/skins/default/xui/en/panel_facebook_photo.xml116
-rw-r--r--indra/newview/skins/default/xui/en/panel_facebook_place.xml120
-rw-r--r--indra/newview/skins/default/xui/en/panel_facebook_status.xml114
-rw-r--r--indra/newview/skins/default/xui/en/panel_flickr_account.xml22
-rw-r--r--indra/newview/skins/default/xui/en/panel_flickr_photo.xml145
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_postcard_message.xml59
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_postcard_settings.xml156
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_snapshot_inventory.xml83
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_snapshot_local.xml242
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_snapshot_options.xml159
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_snapshot_postcard.xml88
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_snapshot_profile.xml206
-rw-r--r--indra/newview/skins/default/xui/en/panel_tools_texture.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_twitter_account.xml24
-rw-r--r--indra/newview/skins/default/xui/en/panel_twitter_photo.xml124
-rwxr-xr-xindra/newview/skins/default/xui/en/teleport_strings.xml5
-rwxr-xr-xindra/newview/viewer_manifest.py106
-rw-r--r--indra/test_apps/llfbconnecttest/CMakeLists.txt118
-rw-r--r--indra/test_apps/llfbconnecttest/README.Linden20
-rwxr-xr-xindra/test_apps/llplugintest/CMakeLists.txt128
-rw-r--r--indra/test_apps/llplugintest/README.Linden21
-rwxr-xr-xindra/viewer_components/login/CMakeLists.txt4
-rwxr-xr-xindra/win_updater/CMakeLists.txt45
-rwxr-xr-xindra/win_updater/updater.cpp516
201 files changed, 2968 insertions, 5183 deletions
diff --git a/.hgtags b/.hgtags
index 4d2aec7673..dd0dc4499a 100755
--- a/.hgtags
+++ b/.hgtags
@@ -486,3 +486,5 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release
64799eb298834073a3e9992cd8d27c3cb9d30b10 3.7.11-release
3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release
d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release
+a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release
+3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release
diff --git a/autobuild.xml b/autobuild.xml
index c813e77288..b6586b25b7 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -66,9 +66,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
+ <string>8da309d24fb0bad8eaaa667fb04c6dc7</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-sdl-update/rev/290561/arch/Linux/installer/SDL-1.2.15-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -138,9 +138,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e6caaeea16131e1f2343ecd7765e3147</string>
+ <string>127c6c37726b11a0750cd4d3b920beff</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Darwin/installer/ares-1.10.0-darwin-20140529.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -150,9 +150,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0745872db83d45f4ab3bdc697d98e264</string>
+ <string>92f6a454d90b5740a38fb68e369cc13e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Linux/installer/ares-1.10.0-linux-20140529.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -162,9 +162,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>1dcec6babd249a2597114d4ac226c461</string>
+ <string>887c93c4075beefefa44b69fb2c0461e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/CYGWIN/installer/ares-1.10.0-windows-20140529.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -186,9 +186,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>06dd7af75e1eb179aed54fd58d8688af</string>
+ <string>b57789bd22dd166aade4a35ec5d36fbb</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Darwin/installer/boost-1.52.0-darwin-20130221.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Darwin/installer/boost-1.55.0-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -198,9 +198,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>50c8b50b7cced52cc5656fb44e9b12cf</string>
+ <string>2f076eae296600a1b810ce375dc4b42d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Linux/installer/boost-1.52.0-linux-20130222.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Linux/installer/boost-1.55.0-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -210,9 +210,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>742fc9675b033df7f9c6f215ff250f6c</string>
+ <string>8af0500013739866a41cfc2ce90e4f4b</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/CYGWIN/installer/boost-1.52.0-windows-20130221.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/CYGWIN/installer/boost-1.55.0-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -234,9 +234,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>480b27a0cb39a4adfcdeabef895de3e1</string>
+ <string>68dc13f49a686331df6f0128c5483da3</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/227230/arch/Darwin/installer/colladadom-2.2-darwin-20110420.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Darwin/installer/colladadom-2.3-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -246,9 +246,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>be7321370b69b6d66938b82a9230a067</string>
+ <string>bdec5fe5fd008da4328f84115128ee61</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/233450/arch/Linux/installer/colladadom-2.2-linux-20110621.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Linux/installer/colladadom-2.3-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -258,9 +258,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a9f548eb6f9aaf292508a8b09c7f2f73</string>
+ <string>ae103c9481be20cd6c035940832b2650</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-colladadom/rev/226584/arch/CYGWIN/installer/colladadom-2.2-windows-20110413.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/CYGWIN/installer/colladadom-2.3-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -282,9 +282,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f7d9b6a9c624364389b71209881f39de</string>
+ <string>f5a699c93beb1a854d0b51382b5cecc8</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/Darwin/installer/curl-7.24.0-darwin-20130826.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Darwin/installer/curl-7.37.0-darwin-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -294,9 +294,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>58b7bf45383c1b1bc24afb303b1519c8</string>
+ <string>2bc285edffd0e55e0cd6290f39854a89</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/Linux/installer/curl-7.24.0-linux-20130826.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Linux/installer/curl-7.37.0-linux-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -306,9 +306,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>8d9ccb0277a26bfe3f346c3c49ce4b58</string>
+ <string>8d3b197d7a114d2b688d2831a0a59757</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/280289/arch/CYGWIN/installer/curl-7.24.0-windows-20130826.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/CYGWIN/installer/curl-7.37.0-windows-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -546,9 +546,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>d8b08b657247566bde5fd853c7622478</string>
+ <string>2843c48e6c84a51e3d6aa05dace4c8c0</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-fontconfig-update/rev/290569/arch/Linux/installer/fontconfig-2.11.0-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -594,9 +594,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
+ <string>71c8d80de052f0c2a49e4c7ddf1a56a0</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Darwin/installer/freetype-2.4.4-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -606,9 +606,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>bd6f84f9fb3c2e68850676d06935373f</string>
+ <string>52f87a65cc61ec4b05721c079d015b19</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/271684/arch/Linux/installer/freetype-2.4.4-linux-20130312.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Linux/installer/freetype-2.4.4-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -618,9 +618,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>271349827b939406162ce42e42cd18e0</string>
+ <string>6e9fc0fe628a7c88f6f614bf3b0450ae</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/CYGWIN/installer/freetype-2.4.4-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -747,14 +747,14 @@
</map>
</map>
</map>
- <key>google_breakpad</key>
+ <key>gmock</key>
<map>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
- <string>LICENSES/google_breakpad.txt</string>
+ <string>LICENSES/gmock.txt</string>
<key>name</key>
- <string>google_breakpad</string>
+ <string>gmock</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -762,9 +762,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>aff5566e04003de0383941981198e04e</string>
+ <string>36b0ea1a8be38f5749a7b13536b871ab</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Darwin/installer/gmock-1.7.0-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -774,9 +774,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
+ <string>3de99704847b34c7acccf5ab87222f6c</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Linux/installer/gmock-1.7.0-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -786,23 +786,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a1e519d08c507c12f9d412b2ae8328c8</string>
+ <string>5d91c1d03780aa26bcd5481145ee9e86</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/CYGWIN/installer/gmock-1.7.0-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
</map>
- <key>googlemock</key>
+ <key>google_breakpad</key>
<map>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
- <string>LICENSES/googlemock.txt</string>
+ <string>LICENSES/google_breakpad.txt</string>
<key>name</key>
- <string>googlemock</string>
+ <string>google_breakpad</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -810,9 +810,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>886ee428f058005ab7f90f61784ec9d9</string>
+ <string>aff5566e04003de0383941981198e04e</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -822,9 +822,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>782ca04e56d8eab755adcae297cafa7c</string>
+ <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -834,9 +834,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>98994d5b0b4b3d43be22aa6a5c36e6fa</string>
+ <string>a1e519d08c507c12f9d412b2ae8328c8</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-mock-graham/rev/272961/arch/CYGWIN/installer/gmock-1.6.0-windows-20130327.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1194,9 +1194,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6fe1adf12d98bce9111f60ee762007b9</string>
+ <string>80a84bbbb363e1a38f39bb6be8a3f166</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Darwin/installer/libpng-1.6.8-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1206,9 +1206,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
+ <string>3368a25b361c22a03f7ec7e0f8d5ff9d</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Linux/installer/libpng-1.6.8-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1218,9 +1218,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f194ba857ca8dd86483a3ef24535d0db</string>
+ <string>596f4798f90941817b1ca5009c24d16a</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libpng/rev/226532/arch/CYGWIN/installer/libpng-1.5.1-windows-20110413.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/CYGWIN/installer/libpng-1.6.8-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1261,18 +1261,42 @@
<string>libxml2</string>
<key>platforms</key>
<map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>4a5880b8235beb5ca21f1e252a46e342</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Darwin/installer/libxml2-2.9.1-darwin-20140602.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>fd34e3e818ad7dd26add1f05e6069c11</string>
+ <string>7eb90f075730f8d7d176f8fb7bad5ef5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libxml/rev/282218/arch/Linux/installer/libxml2-2.7.8-linux-20131009.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Linux/installer/libxml2-2.9.1-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
+ <key>windows</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>ba20e2634b4c249a7064620d135f7972</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/CYGWIN/installer/libxml2-2.9.1-windows-20140602.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>windows</string>
+ </map>
</map>
</map>
<key>llappearanceutility-source</key>
@@ -1420,9 +1444,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4a98d727561cd1f4ac5ee02907411df1</string>
+ <string>79afb464255be2be7c02fdfac10bcd5c</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20120228.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1432,9 +1456,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f50e5f0cc880c55b3f0f7e67dc8f7221</string>
+ <string>090190a8dd80efe1f0933c7ed307e6f1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/Linux/installer/llqtwebkit-4.7.1-linux-20120228.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Linux/installer/llqtwebkit-4.7.1-linux-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1444,9 +1468,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5e3cd6af397e853a963a6de40d440ff4</string>
+ <string>650f2a30a83eacde238fcc87ff161190</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/250147/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20120228.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1597,36 +1621,26 @@
</map>
</map>
</map>
- <key>openSSL</key>
+ <key>openal_soft</key>
<map>
<key>license</key>
- <string>openSSL</string>
+ <string>lgpl</string>
<key>license_file</key>
- <string>LICENSES/openssl.txt</string>
+ <string>LICENSES/OPENAL.txt</string>
<key>name</key>
- <string>openSSL</string>
+ <string>openal_soft</string>
<key>platforms</key>
<map>
- <key>darwin</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>facee34b8bd57ad602157e65a5af1a49</string>
- <key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
- </map>
- <key>name</key>
- <string>darwin</string>
- </map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
+ <string>fccdca18a950ac9363c6fb39118b80e1</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1636,35 +1650,47 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>774c7f0a0312bee3054757a623e227bc</string>
+ <string>04df406f3e5d04cf176660bdac66c3a1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>3ad86a1c</string>
</map>
- <key>openal_soft</key>
+ <key>openjpeg</key>
<map>
<key>license</key>
- <string>lgpl</string>
+ <string>openjpeg</string>
<key>license_file</key>
- <string>LICENSES/OPENAL.txt</string>
+ <string>LICENSES/openjpeg.txt</string>
<key>name</key>
- <string>openal_soft</string>
+ <string>openjpeg</string>
<key>platforms</key>
<map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>4be51c7cca7d84831e30b63279df7ae5</string>
+ <key>url</key>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>fccdca18a950ac9363c6fb39118b80e1</string>
- <key>hash_algorithm</key>
- <string>md5</string>
+ <string>fb2382014c79e0049746e4e29bd834f9</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1674,25 +1700,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>04df406f3e5d04cf176660bdac66c3a1</string>
+ <string>ca5765af55f798724d601720afdf6953</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
+ <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
- <key>version</key>
- <string>3ad86a1c</string>
</map>
- <key>openjpeg</key>
+ <key>openssl</key>
<map>
<key>license</key>
- <string>openjpeg</string>
+ <string>openssl</string>
<key>license_file</key>
- <string>LICENSES/openjpeg.txt</string>
+ <string>LICENSES/openssl.txt</string>
<key>name</key>
- <string>openjpeg</string>
+ <string>openssl</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -1700,9 +1724,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4be51c7cca7d84831e30b63279df7ae5</string>
+ <string>4db126327bbb125ea2490c79c73103bf</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Darwin/installer/openssl-1.0.1h-darwin-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1712,9 +1736,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>fb2382014c79e0049746e4e29bd834f9</string>
+ <string>0665c18f8cdbe2f90cb0a2f088cfe1a6</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Linux/installer/openssl-1.0.1h-linux-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1724,9 +1748,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ca5765af55f798724d601720afdf6953</string>
+ <string>138997e1a73c65525d45c00f43f08010</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/CYGWIN/installer/openssl-1.0.1h-windows-20140605.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -1748,9 +1772,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a8e74694a0f4248228c13c845ed0a6f8</string>
+ <string>af0d38a4c56b52c4df40a4ff0d51efef</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Darwin/installer/pcre-7.6-darwin-20110504.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Darwin/installer/pcre-8.35-darwin-20140529.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1760,9 +1784,21 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>bb0abe962b3b8208ed2dab0424aab33d</string>
+ <string>5e6368d39b95f2c0d5162dac2c17c67f</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Linux/installer/pcre-8.35-linux-20140530.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>linux</string>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>9250f74fed826ad1b8700229e964519d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-pcre/rev/228822/arch/Linux/installer/pcre-7.6-linux-20110504.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/CYGWIN/installer/pcre-8.35-windows-20140529.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1928,9 +1964,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>49b8de20f3bb43537f51311894a72de1</string>
+ <string>6658071e3b54b1dd5f5279227aff402a</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Darwin/installer/zlib-1.2.8-darwin-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1940,9 +1976,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>7b4cf3aa2c04937d0a20761516587896</string>
+ <string>63a62bb3cbef2aad3cca49cb6f2d0aeb</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Linux/installer/zlib-1.2.8-linux-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1952,9 +1988,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5852192646681817fc3c3a8c95e91c1e</string>
+ <string>ab45a628e22a495814e806ce46081806</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/CYGWIN/installer/zlib-1.2.8-windows-20140602.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 7e8ab46b1a..2d27562e37 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -323,6 +323,7 @@ Cinder Roxley
STORM-1951
STORM-2035
STORM-2036
+ STORM-2037
Clara Young
Coaldust Numbers
VWR-1095
@@ -712,6 +713,9 @@ Jonathan Yap
STORM-1986
STORM-1981
STORM-2015
+ STORM-2031
+ STORM-2030
+ STORM-2034
STORM-2018
Kadah Coba
STORM-1060
@@ -990,6 +994,38 @@ Nicky Perian
STORM-1090
STORM-1828
Nicoladie Gymnast
+NiranV Dean
+ STORM-2040
+ STORM-2042
+ STORM-2043
+ STORM-2044
+ STORM-2045
+ STORM-2046
+ STORM-2047
+ STORM-2048
+ STORM-2049
+ STORM-2050
+ STORM-2051
+ STORM-2052
+ STORM-2057
+ STORM-2058
+ STORM-2059
+ STORM-2060
+ STORM-2061
+ STORM-2063
+ STORM-2065
+ STORM-2066
+ STORM-2068
+ STORM-2073
+ STORM-2076
+ BUG-372
+ BUG-1179
+ BUG-6835
+ BUG-6837
+ BUG-6839
+ BUG-6840
+ BUG-6958
+ BUG-7020
Nounouch Hapmouche
VWR-238
Ollie Kubrick
@@ -1183,6 +1219,7 @@ Sovereign Engineer
OPEN-189
STORM-1972
OPEN-195
+ OPEN-217
SpacedOut Frye
VWR-34
VWR-45
@@ -1358,6 +1395,7 @@ Whirly Fizzle
VWR-29543
MAINT-873
STORM-1930
+ BUG-6659
Whoops Babii
VWR-631
VWR-1640
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 410d25ad97..24ea59ca49 100755
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -71,7 +71,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
if (LINUX)
add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
- add_subdirectory(${VIEWER_PREFIX}linux_updater)
if (INSTALL_PROPRIETARY)
include(LLAppearanceUtility)
add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
@@ -86,9 +85,8 @@ elseif (WINDOWS)
if (EXISTS ${VIEWER_DIR}win_setup)
add_subdirectory(${VIEWER_DIR}win_setup)
endif (EXISTS ${VIEWER_DIR}win_setup)
- add_subdirectory(${VIEWER_PREFIX}win_updater)
- # add_dependencies(viewer windows-updater windows-setup windows-crash-logger)
- add_dependencies(viewer windows-updater windows-crash-logger)
+ # add_dependencies(viewer windows-setup windows-crash-logger)
+ add_dependencies(viewer windows-crash-logger)
elseif (SOLARIS)
add_subdirectory(solaris_crash_logger)
add_dependencies(viewer solaris-crash-logger)
diff --git a/indra/cmake/00-COMPILE-LINK-RUN.txt b/indra/cmake/00-COMPILE-LINK-RUN.txt
new file mode 100644
index 0000000000..d08cc2dc0c
--- /dev/null
+++ b/indra/cmake/00-COMPILE-LINK-RUN.txt
@@ -0,0 +1,344 @@
+
+ A short guide to compiling, linking, running and debugging issues
+ in the viewer and its packaged libraries.
+
+Introduction
+
+ A recent pass through some third-party libraries resulted in the
+ collection of a lot of information about how things should and
+ shouldn't be built in the viewer. Some of that is presented below
+ with hints and rules about doing things well. What's presented is
+ a guideline only. Not all suggestions are hard rules and you'll
+ find exceptions all over. Some exceptions arise from solid
+ reasoning, others may be legacy that hasn't been re-examined.
+
+ Use good engineering judgement when applying this information.
+
+Compilation
+
+ Windows Targets
+
+ Significant compilation flags and defines follow:
+
+ ----------------------------------------------------------------------------
+ Option Release RelWithDebInfo Debug
+ ----------------------------------------------------------------------------
+ wchar_t /Zc:wchar_t- " "
+ RTL type /MD /MD /MDd
+ FLoating Point /fp:fast " "
+ Debug Info /Zi (app/dll), /Z7 (lib) " "
+ Optimizer /O2 /Ob2 /GR /Od /Ob0 /GR /Od /GR
+ Incr. Link /INCREMENTAL:NO /INCREMENTAL /INCREMENTAL:NO
+ Debug /DEBUG /DEBUG /DEBUG
+ /OPT:REF
+ Ignore Libs LIBCMT LIBCMT LIBCMT;LIBCMTD;MSVCRT
+ Alignment Default " "
+
+ Defines WIN32 " "
+ _WINDOWS " "
+ LL_RELEASE=1 LL_RELEASE=1 n/a
+ LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a
+ NDEBUG NDEBUG _DEBUG
+ n/a n/a LL_DEBUG=1
+ n/a LL_RELEASE_WITH_\ n/a
+ DEBUG_INFO=1
+ n/a n/a _SCL_SECURE_NO_WARNINGS=1
+ _SECURE_STL=0 _SECURE_STL=0 _SECURE_STL=0
+ _HAS_ITERATOR_DEBUGGING=0 n/a n/a
+ LL_WINDOWS=1 " "
+ UNICODE " "
+ _UNICODE " "
+ WINVER=0x0501 " "
+ _WIN32_WINNT=0x0501 " "
+ LL_OS_DRAGDROP_ENABLED=1 " "
+ CARES_STATICLIB " "
+ LIB_NDOF=1 " "
+
+ ----------------------------------------------------------------------------
+ Notes:
+
+ 1. /Zc:wchar_t-. Not certain where this comes from. It may be
+ due to a default set of compilation flags in Qt 4.X that then
+ propagates outward. In Qt 5.X, this setting is flipped back to
+ default (wchar_t is a built-in). Other options for dealing with
+ this include:
+
+ http://msdn.microsoft.com/en-us/library/dh8che7s%28v=vs.110%29.aspx
+
+ Recommend trying to stay with /Zc:wchar_t (the default) when
+ adding libraries. If incompatible, you'll typically get some
+ missing ostream '<<' operators or something similar in the stream
+ headers.
+
+ 2. /Z7 (VC 7.0 compatibility symbols) gives us debug information
+ in the static libraries we build. Otherwise builds generate
+ vc100.pdb files all over the place which generally aren't useful.
+ DLL's and .EXEs are to get /Zi or /ZI with separate .PDB files.
+ These .PDB files can then be packaged up in symbol tarballs for
+ the crash dump analyzer or used in debugging. There are issues here
+ for VS 2013 (see below).
+
+
+ Mac Targets
+
+ Fairly straightforward, optimization level is easily changed (may
+ be little or negative gain for -O3 and RelWithDebInfo should be
+ kicked up to 1 or 2. Boost debug symbols to dwarf-2 with a goal
+ of dwarf-2 in separate dSYM file when building .dylibs and
+ executables.
+
+ ----------------------------------------------------------------------------
+ Option Release RelWithDebInfo Debug
+ ----------------------------------------------------------------------------
+ Strip Debug Symbols On " "
+ During Copy
+
+ Generate Debug Syms On " "
+
+ Level Debug Syms -gdwarf-2 " "
+
+ Optimization -O3 -O0 -O0
+
+ PIC -fPIC -DPIC " "
+
+ Defines LL_RELEASE=1 LL_RELEASE=1 n/a
+ LL_RELEASE_FOR_DOWNLOAD=1 n/a n/a
+ NDEBUG NDEBUG _DEBUG
+ n/a n/a LL_DEBUG=1
+ n/a LL_RELEASE_WITH_\ n/a
+ DEBUG_INFO=1
+ LL_DARWIN=1 " "
+ LL_OS_DRAGDROP_ENABLED=1 " "
+ CARES_STATICLIB " "
+ LIB_NDOF=1 " "
+
+ ----------------------------------------------------------------------------
+ Notes:
+
+ 1. We’re also building dylibs in a somewhat unusual way. They’re
+ currently being generated with a link path of
+ ‘@executable_path/../Resources/<library>’. If we were to follow
+ the recommendations in dyld’s man page, we’d instead reference
+ ‘@loader_path/<library>’, use -rpath on the executable link
+ (pointing to the ‘Resources’ subdir of the main executable), and
+ be able to avoid some symlinking in the .app tree.
+
+ 2. Use the -headerpad_max_install_names link option on all .dylibs.
+
+
+ Linux Targets
+
+ Not much variety here.
+
+ ----------------------------------------------------------------------------
+ Option Release RelWithDebInfo Debug
+ ----------------------------------------------------------------------------
+ Debug Level -g (-g0/1 better?) -g -g
+ During Copy
+
+ Optimization -O2 -O0 -O0
+
+ PIC -fPIC " "
+ ----------------------------------------------------------------------------
+ Notes:
+
+
+Linking
+
+ The library update work has generally moved in the direction of
+ preferring static libraries over dynamic (Qt4 being the notable
+ exception). It also mostly eliminated the extremely bad practice
+ of having multiple versions of a library built into an image.
+
+ How bad was it? Very. Appalling. A nightmare. On Windows, at
+ least four versions of zlib (1.2.3, 1.2.5, 1.2.6, unknown), three
+ versions of Boost (1.45, 1.48, 1.52), two versions of OpenSSL
+ (0.9.8q, 1.0.0g) and three different builds of libexpat
+ 2.0.5/1.5.2 were used. Mac was worse with five builds or versions
+ of zlib, two of PCRE, two of c-ares, and three of OpenSSL. Linux
+ topped that by adding two builds of libpng.
+
+ DO NOT ALLOW THIS TO HAPPEN AGAIN. It isn't enough to update a
+ library and then stuff a new triplet of S3 URLs into the viewer's
+ autobuild.xml. If you update a library you MUST:
+
+ * Update the autobuild.xml of ALL consumers of the library. In
+ the case of zlib, that meant updating freetype, libpng, openssl,
+ libxml2, fontconfig, curl, Boost, SDL, llqtwebkit, google-mock and
+ colladadom.
+
+ * Confirm by test and observation that the consumers actually use
+ your library rather than 'call home to mother' and find
+ system-supplied versions of your library. This may consist of
+ watching configuration scripts, probing with ldd/depends/otool,
+ pulling text out of binaries with 'strings'. The previously-
+ mentioned libraries all have a README.Linden file that gives
+ examples specific to the consumer library.
+
+ * DO NOT RE-EXPORT LIBRARIES. Colladadom was the worst offender
+ of this rule. As a shared library, it was re-exporting part, but
+ not all, of Boost filesystem and system, some zlib, some PCRE,
+ some libxml2 and minizip. This meant that depending upon link-
+ time and run-time symbol resolution, data constructed with one
+ version of a library might be processed by a method built in a
+ second, incompatible version of the library. Switching colladadom
+ to a static library ended the re-export problem.
+
+ * Preventing re-export is not sufficient. other libraries will
+ still be shipped as shared and they can still have Singleton and
+ Fragile Base Class issues. A DLL may be built with a static
+ archive of a library that has global data. That same static
+ archive might be linked into the application proper. An object
+ created with a method in the DLL may pass into a method in the
+ application where the archive's global data has a second instance
+ and no knowledge of the object. This is a failure due to an
+ assumption of Singleton global data which leads to some kind of
+ failure. This is the same effect as when, in Windows, both MSVCRT
+ and MSVCRTD get activated in a program. If you're lucky, some
+ asserts fail in that case having to do with file handle global
+ data.
+
+
+Running
+
+ Windows Debug Build. Seems to have been rendered nearly useless
+ by having the LL_CHECK_MEMORY define in llmemory.h calling
+ _CrtCheckMemory(). Viewer is almost useful disabling this in
+ llvoavatar code alone but not quite.
+
+
+Futures
+
+ Static Versus Dynamic Libraries
+
+ One solution to the above linking problems is the use of static
+ libraries for everything. Single version, singleton instancing of
+ data, etc. But it's not the 1950's and we're not running our
+ applications on bare metal. Every platform comes with 100s of
+ libraries waiting to interfere with operations by breaking the
+ single-version and singleton-data assumption.
+
+ Additionally, there are libraries that simply expect to be built
+ into shared libraries. Qt4 is one such. The version we're using
+ now, 4.7.1, is actually trying to disable both Webkit and plugin
+ modules because we're building it statically on Mac and Linux.
+ It's only because of configuration bugs that we're getting the
+ functionality out of it that we want.
+
+ With enough libraries and a single, global namespace, eventually
+ there will be collisions and there may not be a warning. All it
+ takes is two programmers who thought that 'FILE * open_file(const
+ char *);' was a safe signature to use between compilation units in
+ their libraries and glorious debugging sessions are in your
+ future. Having debugged it, you will now become the proud owner
+ of a one-off version of one of those libraries that uses a special
+ symbol prefix which you will be maintaining forever.
+
+ Lastly, we have some binary blobs that we must use as delivered.
+ Executables can be isolated at run-time if necessary. Shared
+ libraries are a different problem. They may bring their own
+ library dependencies that affect link- and run-time symbol
+ resolution and they'll impose that on us according to platform
+ rules.
+
+ So, what to do? My natural bias for large software is to use
+ shared libraries for everything. It's a path to single-version
+ and singleton data and isolates namespaces and prevents
+ interactions. It also has some field serviceability benefits if
+ you need to debug some bizarre problem a user has.
+
+ But there's a local preference for static. Here, my
+ rules-of-thumb are:
+
+ * Static library used by default.
+
+ * Shared library where the library must be built shared.
+
+ * Shared library if that is the only means to enforce the
+ single-version and singleton-data requirements.
+
+ * Shared library *on a case-by-case basis* if the library is also
+ provided by the platform and some benefit is plausible. (An
+ example of this is freetype/fontconfig on Linux. The .so
+ versions we build with, and incompletely ship, are inferior in
+ behavior to the platform libraries. By being shared libraries,
+ the platform-supplied option is available to all Linux users.)
+
+ In all cases, beware of cmake which appears to collapse and move
+ library references in links. This can drastically affect symbol
+ resolution when there are multiple sources for a symbol.
+
+ General
+
+ VS 2013. The /Z7 flag is rumored to be somewhat broken in 2013.
+ But it also sounds like there are explicit controls to name .PDB
+ files associated with static archives. That would make this an
+ ideal time to switch to /Zi or /ZI everywhere with explicit naming
+ and bring all the .PDBs together.
+
+ The embedded browser technology (e.g. Qt4 with Webkit) is the
+ 800-pound gorilla in the viewer. When starting any major work,
+ decide what changes you need here as those changes will propagate
+ outwards forcing many other decisions (cf: /Zc:wchar_t- flag).
+
+ The current package structure (./include, ./lib/release,
+ ./lib/debug, etc.) really works against the conventions used by
+ configure-like programs. I wasted a lot of time getting each
+ library to work with our structure without having to go back to
+ automake/autoconf. For Linux and Mac (and even for Windows), a
+ structure like the following where each grouping is optional would
+ probably save some work:
+
+ ./debug/bin
+ /include
+ /lib
+ ./debug/shared/bin
+ /include
+ /lib
+ ./debug/static/bin
+ /include
+ /lib
+ ./release/bin
+ /include
+ /lib
+ ...
+
+ In zlib and openssl and in a few of the libraries that consume
+ them, I experimented with packaging both static and shared
+ libraries and then having the consumer library move the unwanted
+ pieces out of the way to use the library type of choice (see
+ restore_dylibs() and restore_sos() functions). It was a bit fussy
+ and simplicity and clarity are the keys to maintaining libraries
+ in the future.
+
+ But it did suggest another approach. The idea is that every build
+ pre-stages inputs. Before anything is built, package pieces are
+ copied or symlinked from the 'stage/packages' area to the
+ 'stage/input' area. Builds then proceed with a single set of
+ -I/-L options for the dependencies. And products are built and
+ installed in a similar output staging structure for the next
+ consumer:
+
+ stage/packages/<package>/[above structure]
+ stage/input/{bin,include,lib}
+ stage/<package>/[above structure]
+
+ Next library project. I'd recommend working on the related set of
+ libexpat, apr, aprutil, xmlrpc-epi. We know libexpat has some
+ updates that should improve stability. Libapr consumes it and it
+ could use some /Z7 flag work to get rid of some 1000's of PDB
+ warnings and improve our debug symbols.
+
+ Miscellany to be sorted out:
+
+ * The packaging of libfreetype and libfontconfig on Linux.
+ Determine what the right thing is, do it.
+
+ * Maybe do something with ICU4C. Qt5 will require it and a number
+ of our packages can consume it typically replacing iconv or some
+ other library. But it is a huge bolus of static data. It can be
+ trimmed, but still.
+
+ * Revisit openssl. Package as a shared library? Replace with
+ LibreSSL when available? Start using platform-supplied crypto?
+
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 6a0f7a214c..52b0f4e8b4 100755
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -62,7 +62,7 @@ if (WINDOWS)
add_definitions(
/DLL_WINDOWS=1
/DNOMINMAX
- /DDOM_DYNAMIC
+# /DDOM_DYNAMIC # For shared library colladadom
/DUNICODE
/D_UNICODE
/GS
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 50ac27d402..25e54b7cbd 100755
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -8,6 +8,7 @@ if (USESYSTEMLIBS)
include(FindBoost)
set(BOOST_CONTEXT_LIBRARY boost_context-mt)
+ set(BOOST_COROUTINE_LIBRARY boost_coroutine-mt)
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
set(BOOST_REGEX_LIBRARY boost_regex-mt)
@@ -17,10 +18,11 @@ if (USESYSTEMLIBS)
else (USESYSTEMLIBS)
use_prebuilt_binary(boost)
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
- set(BOOST_VERSION "1.52")
+ set(BOOST_VERSION "1.55")
if (WINDOWS)
if(MSVC80)
+ # This should be obsolete at this point
set(BOOST_CONTEXT_LIBRARY
optimized libboost_context-vc80-mt-${BOOST_VERSION}
debug libboost_context-vc80-mt-gd-${BOOST_VERSION})
@@ -47,6 +49,9 @@ else (USESYSTEMLIBS)
set(BOOST_CONTEXT_LIBRARY
optimized libboost_context-mt
debug libboost_context-mt-gd)
+ set(BOOST_COROUTINE_LIBRARY
+ optimized libboost_coroutine-mt
+ debug libboost_coroutine-mt-gd)
set(BOOST_FILESYSTEM_LIBRARY
optimized libboost_filesystem-mt
debug libboost_filesystem-mt-gd)
@@ -70,6 +75,9 @@ else (USESYSTEMLIBS)
set(BOOST_CONTEXT_LIBRARY
optimized boost_context-mt
debug boost_context-mt-d)
+ set(BOOST_COROUTINE_LIBRARY
+ optimized boost_coroutine-mt
+ debug boost_coroutine-mt-d)
set(BOOST_FILESYSTEM_LIBRARY
optimized boost_filesystem-mt
debug boost_filesystem-mt-d)
@@ -92,6 +100,9 @@ else (USESYSTEMLIBS)
set(BOOST_CONTEXT_LIBRARY
optimized boost_context-mt
debug boost_context-mt-d)
+ set(BOOST_COROUTINE_LIBRARY
+ optimized boost_coroutine-mt
+ debug boost_coroutine-mt-d)
set(BOOST_FILESYSTEM_LIBRARY
optimized boost_filesystem-mt
debug boost_filesystem-mt-d)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 4f1b6640c2..28202f85d6 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -40,7 +40,6 @@ if(WINDOWS)
libapriconv-1.dll
ssleay32.dll
libeay32.dll
- libcollada14dom22-d.dll
glod.dll
libhunspell.dll
)
@@ -53,7 +52,6 @@ if(WINDOWS)
libapriconv-1.dll
ssleay32.dll
libeay32.dll
- libcollada14dom22.dll
glod.dll
libhunspell.dll
)
@@ -213,15 +211,12 @@ elseif(DARWIN)
libapr-1.dylib
libaprutil-1.0.dylib
libaprutil-1.dylib
+ libexception_handler.dylib
libexpat.1.5.2.dylib
libexpat.dylib
libGLOD.dylib
- libllqtwebkit.dylib
- libminizip.a
- libndofdev.dylib
libhunspell-1.3.0.dylib
- libexception_handler.dylib
- libcollada14dom.dylib
+ libndofdev.dylib
)
if (FMODEX)
@@ -259,35 +254,21 @@ elseif(LINUX)
libapr-1.so.0
libaprutil-1.so.0
libatk-1.0.so
- libboost_context-mt.so.${BOOST_VERSION}.0
- libboost_filesystem-mt.so.${BOOST_VERSION}.0
- libboost_program_options-mt.so.${BOOST_VERSION}.0
- libboost_regex-mt.so.${BOOST_VERSION}.0
- libboost_signals-mt.so.${BOOST_VERSION}.0
- libboost_system-mt.so.${BOOST_VERSION}.0
- libboost_thread-mt.so.${BOOST_VERSION}.0
- libcollada14dom.so
- libcrypto.so.1.0.0
libdb-5.1.so
libexpat.so
libexpat.so.1
+ libfreetype.so.6.6.2
libfreetype.so.6
libGLOD.so
- libgmock_main.so
- libgmock.so.0
libgmodule-2.0.so
libgobject-2.0.so
- libgtest_main.so
- libgtest.so.0
libhunspell-1.3.so.0.0.0
- libminizip.so
libopenal.so
libopenjpeg.so
- libssl.so
libuuid.so.16
libuuid.so.16.0.22
- libssl.so.1.0.0
- libfontconfig.so.1.4.4
+ libfontconfig.so.1.8.0
+ libfontconfig.so.1
)
if (USE_TCMALLOC)
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 02c5b37f28..a36485f6d0 100755
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -7,7 +7,7 @@ if (USESYSTEMLIBS)
pkg_check_modules(FREETYPE REQUIRED freetype2)
else (USESYSTEMLIBS)
use_prebuilt_binary(freetype)
- set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
+ set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2/)
set(FREETYPE_LIBRARIES freetype)
endif (USESYSTEMLIBS)
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
index c4c96a9af7..cac072988e 100755
--- a/indra/cmake/GoogleMock.cmake
+++ b/indra/cmake/GoogleMock.cmake
@@ -2,7 +2,7 @@
include(Prebuilt)
include(Linking)
-use_prebuilt_binary(googlemock)
+use_prebuilt_binary(gmock)
set(GOOGLEMOCK_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index 67c2115237..93626f689f 100755
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -6,32 +6,40 @@ include(Boost)
use_prebuilt_binary(colladadom)
use_prebuilt_binary(pcre)
+use_prebuilt_binary(libxml2)
set(LLPRIMITIVE_INCLUDE_DIRS
${LIBS_OPEN_DIR}/llprimitive
)
if (WINDOWS)
- set(LLPRIMITIVE_LIBRARIES
+ set(LLPRIMITIVE_LIBRARIES
debug llprimitive
optimized llprimitive
- debug libcollada14dom22-d
- optimized libcollada14dom22
+ debug libcollada14dom23-sd
+ optimized libcollada14dom23-s
+ libxml2_a
+ debug pcrecppd
+ optimized pcrecpp
+ debug pcred
+ optimized pcre
${BOOST_SYSTEM_LIBRARIES}
)
-elseif (LINUX)
- use_prebuilt_binary(libxml2)
- set(LLPRIMITIVE_LIBRARIES
+elseif (DARWIN)
+ set(LLPRIMITIVE_LIBRARIES
llprimitive
- collada14dom
+ debug collada14dom-d
+ optimized collada14dom
minizip
xml2
pcrecpp
pcre
+ iconv # Required by libxml2
)
-else (WINDOWS)
- set(LLPRIMITIVE_LIBRARIES
+elseif (LINUX)
+ set(LLPRIMITIVE_LIBRARIES
llprimitive
- collada14dom
+ debug collada14dom-d
+ optimized collada14dom
minizip
xml2
pcrecpp
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index b9c9e531fc..74fe3f1137 100755
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -6,6 +6,7 @@ set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
include(Variables)
set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
+set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)
set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
if (WINDOWS)
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index 5b469f74f9..eb548bdcc1 100755
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -7,7 +7,7 @@ set(OpenSSL_FIND_REQUIRED ON)
if (USESYSTEMLIBS)
include(FindOpenSSL)
else (USESYSTEMLIBS)
- use_prebuilt_binary(openSSL)
+ use_prebuilt_binary(openssl)
if (WINDOWS)
set(OPENSSL_LIBRARIES ssleay32 libeay32)
else (WINDOWS)
@@ -17,7 +17,7 @@ else (USESYSTEMLIBS)
endif (USESYSTEMLIBS)
if (LINUX)
- set(CRYPTO_LIBRARIES crypto)
+ set(CRYPTO_LIBRARIES crypto dl)
elseif (DARWIN)
set(CRYPTO_LIBRARIES crypto)
endif (LINUX)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index 173d59391e..248a875a19 100755
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -9,13 +9,26 @@ if (USESYSTEMLIBS)
else (USESYSTEMLIBS)
use_prebuilt_binary(libpng)
if (WINDOWS)
- set(PNG_LIBRARIES libpng15)
- set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+ set(PNG_LIBRARIES libpng16)
+ set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
elseif(DARWIN)
- set(PNG_LIBRARIES png15)
- set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+ set(PNG_LIBRARIES png16)
+ set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
else()
- set(PNG_LIBRARIES png15)
- set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+ #
+ # When we have updated static libraries in competition with older
+ # shared libraries and we want the former to win, we need to do some
+ # extra work. The *_PRELOAD_ARCHIVES settings are invoked early
+ # and will pull in the entire archive to the binary giving it
+ # priority in symbol resolution. Beware of cmake moving the
+ # achive load itself to another place on the link command line. If
+ # that happens, you can try something like -Wl,-lpng16 here to hide
+ # the archive. Also be aware that the linker will not tolerate a
+ # second whole-archive load of the archive. See viewer's
+ # CMakeLists.txt for more information.
+ #
+ set(PNG_PRELOAD_ARCHIVES -Wl,--whole-archive png16 -Wl,--no-whole-archive)
+ set(PNG_LIBRARIES png16)
+ set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng16)
endif()
endif (USESYSTEMLIBS)
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 76f2c148db..f7c548a2fd 100755
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -1,6 +1,7 @@
# -*- cmake -*-
include(Linking)
include(Prebuilt)
+include(OpenSSL)
if (USESYSTEMLIBS)
# The minimal version, 4.4.3, is rather arbitrary: it's the version in Debian/Lenny.
@@ -36,27 +37,32 @@ endif (USESYSTEMLIBS)
if (WINDOWS)
set(WEBKIT_PLUGIN_LIBRARIES
- debug llqtwebkitd
- debug QtWebKitd4
- debug QtOpenGLd4
- debug QtNetworkd4
- debug QtGuid4
- debug QtCored4
- debug qtmaind
- optimized llqtwebkit
- optimized QtWebKit4
- optimized QtOpenGL4
- optimized QtNetwork4
- optimized QtGui4
- optimized QtCore4
- optimized qtmain
+ debug llqtwebkitd
+ debug QtWebKitd4
+ debug QtOpenGLd4
+ debug QtNetworkd4
+ debug QtGuid4
+ debug QtCored4
+ debug qtmaind
+ optimized llqtwebkit
+ optimized QtWebKit4
+ optimized QtOpenGL4
+ optimized QtNetwork4
+ optimized QtGui4
+ optimized QtCore4
+ optimized qtmain
)
elseif (DARWIN)
set(WEBKIT_PLUGIN_LIBRARIES
- optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
- debug ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
- )
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.a
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libQtWebKit.4.dylib
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libQtOpenGL.4.dylib
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libQtNetwork.4.dylib
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libQtGui.4.dylib
+ ${ARCH_PREBUILT_DIRS_RELEASE}/libQtCore.4.dylib
+ )
elseif (LINUX)
+ # *HUH: What does this do?
set(WEBKIT_PLUGIN_LIBRARIES ${LLQTWEBKIT_LIBRARY} ${QT_LIBRARIES} ${QT_PLUGIN_LIBRARIES})
set(WEBKIT_PLUGIN_LIBRARIES
llqtwebkit
@@ -68,9 +74,10 @@ elseif (LINUX)
QtWebKit
QtOpenGL
QtNetwork
+ ${OPENSSL_LIBRARIES}
QtGui
QtCore
- jscore
+# jscore
# qgif
# qjpeg
# jpeg
diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake
index b99a8644c9..6cff0753b2 100755
--- a/indra/cmake/ZLIB.cmake
+++ b/indra/cmake/ZLIB.cmake
@@ -13,10 +13,23 @@ else (USESYSTEMLIBS)
set(ZLIB_LIBRARIES
debug zlibd
optimized zlib)
- else (WINDOWS)
+ elseif (LINUX)
+ #
+ # When we have updated static libraries in competition with older
+ # shared libraries and we want the former to win, we need to do some
+ # extra work. The *_PRELOAD_ARCHIVES settings are invoked early
+ # and will pull in the entire archive to the binary giving it
+ # priority in symbol resolution. Beware of cmake moving the
+ # achive load itself to another place on the link command line. If
+ # that happens, you can try something like -Wl,-lz here to hide
+ # the archive. Also be aware that the linker will not tolerate a
+ # second whole-archive load of the archive. See viewer's
+ # CMakeLists.txt for more information.
+ #
+ set(ZLIB_PRELOAD_ARCHIVES -Wl,--whole-archive z -Wl,--no-whole-archive)
+ set(ZLIB_LIBRARIES z)
+ elseif (DARWIN)
set(ZLIB_LIBRARIES z)
endif (WINDOWS)
- if (WINDOWS OR LINUX)
- set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
- endif (WINDOWS OR LINUX)
+ set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib)
endif (USESYSTEMLIBS)
diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt
index c63ad74682..6f2087d580 100755
--- a/indra/edit-me-to-trigger-new-build.txt
+++ b/indra/edit-me-to-trigger-new-build.txt
@@ -1 +1,2 @@
2014-02-25 10:34
+
diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt
deleted file mode 100644
index 4a9e82f9b6..0000000000
--- a/indra/linux_updater/CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- cmake -*-
-
-project(linux_updater)
-
-include(00-Common)
-include(CURL)
-include(CARes)
-include(OpenSSL)
-include(UI)
-include(LLCommon)
-include(LLMessage)
-include(LLVFS)
-include(LLXML)
-include(LLUI)
-include(Linking)
-
-include_directories(
- ${LLCOMMON_INCLUDE_DIRS}
- ${LLVFS_INCLUDE_DIRS}
- ${LLXML_INCLUDE_DIRS}
- ${LLUI_INCLUDE_DIRS}
- ${CURL_INCLUDE_DIRS}
- ${CARES_INCLUDE_DIRS}
- ${OPENSSL_INCLUDE_DIRS}
- ${UI_INCLUDE_DIRS}
- )
-include_directories(SYSTEM
- ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
- ${LLXML_SYSTEM_INCLUDE_DIRS}
- )
-
-set(linux_updater_SOURCE_FILES linux_updater.cpp)
-
-set(linux_updater_HEADER_FILES CMakeLists.txt)
-
-set_source_files_properties(${linux_updater_HEADER_FILES}
- PROPERTIES HEADER_FILES_ONLY TRUE)
-
-list(APPEND linux_updater_SOURCE_FILES ${linux_updater_HEADER_FILES})
-
-add_executable(linux-updater ${linux_updater_SOURCE_FILES})
-
-target_link_libraries(linux-updater
- ${CURL_LIBRARIES}
- ${CARES_LIBRARIES}
- ${OPENSSL_LIBRARIES}
- ${CRYPTO_LIBRARIES}
- ${LLMESSAGE_LIBRARIES}
- ${UI_LIBRARIES}
- ${LLXML_LIBRARIES}
- ${LLUI_LIBRARIES}
- ${LLVFS_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
- )
-
-add_custom_target(linux-updater-target ALL
- DEPENDS linux-updater)
diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp
deleted file mode 100644
index 5c94deba02..0000000000
--- a/indra/linux_updater/linux_updater.cpp
+++ /dev/null
@@ -1,926 +0,0 @@
-/**
- * @file linux_updater.cpp
- * @author Kyle Ambroff <ambroff@lindenlab.com>, Tofu Linden
- * @brief Viewer update program for unix platforms that support GTK+
- *
- * $LicenseInfo:firstyear=2008&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 <unistd.h>
-#include <signal.h>
-#include <errno.h>
-#include <set>
-#include <iostream>
-
-#include "linden_common.h"
-#include "llerrorcontrol.h"
-#include "llfile.h"
-#include "lldir.h"
-#include "lldiriterator.h"
-
-/*==========================================================================*|
-// IQA-490: Use of LLTrans -- by this program at least -- appears to be buggy.
-// With it, the 3.3.2 beta 1 linux-updater.bin crashes; without it seems stable.
-#include "llxmlnode.h"
-#include "lltrans.h"
-|*==========================================================================*/
-
-static class LLTrans
-{
-public:
- LLTrans();
- static std::string getString(const std::string& key);
-
-private:
- std::string _getString(const std::string& key) const;
-
- typedef std::map<std::string, std::string> MessageMap;
- MessageMap mMessages;
-} sLLTransInstance;
-
-#include <curl/curl.h>
-#include <map>
-#include <boost/foreach.hpp>
-
-extern "C" {
-#include <gtk/gtk.h>
-}
-
-const guint UPDATE_PROGRESS_TIMEOUT = 100;
-const guint UPDATE_PROGRESS_TEXT_TIMEOUT = 1000;
-const guint ROTATE_IMAGE_TIMEOUT = 8000;
-
-typedef struct _updater_app_state {
- std::string app_name;
- std::string url;
- std::string file;
- std::string image_dir;
- std::string dest_dir;
- std::string strings_dirs;
- std::string strings_file;
-
- LLDirIterator *image_dir_iter;
-
- GtkWidget *window;
- GtkWidget *progress_bar;
- GtkWidget *image;
-
- double progress_value;
- bool activity_mode;
-
- guint image_rotation_timeout_id;
- guint progress_update_timeout_id;
- guint update_progress_text_timeout_id;
-
- bool failure;
-} UpdaterAppState;
-
-// List of entries from strings.xml to always replace
-static std::set<std::string> default_trans_args;
-void init_default_trans_args()
-{
- default_trans_args.insert("SECOND_LIFE"); // World
- default_trans_args.insert("APP_NAME");
- default_trans_args.insert("SECOND_LIFE_GRID");
- default_trans_args.insert("SUPPORT_SITE");
-}
-
-bool translate_init(std::string comma_delim_path_list,
- std::string base_xml_name)
-{
- return true;
-/*==========================================================================*|
- init_default_trans_args();
-
- // extract paths string vector from comma-delimited flat string
- std::vector<std::string> paths;
- LLStringUtil::getTokens(comma_delim_path_list, paths, ","); // split over ','
-
- for(std::vector<std::string>::iterator it = paths.begin(), end_it = paths.end();
- it != end_it;
- ++it)
- {
- (*it) = gDirUtilp->findSkinnedFilename(*it, base_xml_name);
- }
-
- // suck the translation xml files into memory
- LLXMLNodePtr root;
- bool success = LLXMLNode::getLayeredXMLNode(root, paths);
- if (!success)
- {
- // couldn't load string table XML
- return false;
- }
- else
- {
- // get those strings out of the XML
- LLTrans::parseStrings(root, default_trans_args);
- return true;
- }
-|*==========================================================================*/
-}
-
-
-void updater_app_ui_init(void);
-void updater_app_quit(UpdaterAppState *app_state);
-void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state);
-std::string next_image_filename(std::string& image_path, LLDirIterator& iter);
-void display_error(GtkWidget *parent, std::string title, std::string message);
-BOOL install_package(std::string package_file, std::string destination);
-BOOL spawn_viewer(UpdaterAppState *app_state);
-
-extern "C" {
- void on_window_closed(GtkWidget *sender, GdkEvent *event, gpointer state);
- gpointer worker_thread_cb(gpointer *data);
- int download_progress_cb(gpointer data, double t, double d, double utotal, double ulnow);
- gboolean rotate_image_cb(gpointer data);
- gboolean progress_update_timeout(gpointer data);
- gboolean update_progress_text_timeout(gpointer data);
-}
-
-void updater_app_ui_init(UpdaterAppState *app_state)
-{
- GtkWidget *vbox;
- GtkWidget *summary_label;
- GtkWidget *description_label;
- GtkWidget *frame;
-
- llassert(app_state != NULL);
-
- // set up window and main container
- std::string window_title = LLTrans::getString("UpdaterWindowTitle");
- app_state->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(app_state->window),
- window_title.c_str());
- gtk_window_set_resizable(GTK_WINDOW(app_state->window), FALSE);
- gtk_window_set_position(GTK_WINDOW(app_state->window),
- GTK_WIN_POS_CENTER_ALWAYS);
-
- gtk_container_set_border_width(GTK_CONTAINER(app_state->window), 12);
- g_signal_connect(G_OBJECT(app_state->window), "delete-event",
- G_CALLBACK(on_window_closed), app_state);
-
- vbox = gtk_vbox_new(FALSE, 6);
- gtk_container_add(GTK_CONTAINER(app_state->window), vbox);
-
- // set top label
- std::ostringstream label_ostr;
- label_ostr << "<big><b>"
- << LLTrans::getString("UpdaterNowUpdating")
- << "</b></big>";
-
- summary_label = gtk_label_new(NULL);
- gtk_label_set_use_markup(GTK_LABEL(summary_label), TRUE);
- gtk_label_set_markup(GTK_LABEL(summary_label),
- label_ostr.str().c_str());
- gtk_misc_set_alignment(GTK_MISC(summary_label), 0, 0.5);
- gtk_box_pack_start(GTK_BOX(vbox), summary_label, FALSE, FALSE, 0);
-
- // create the description label
- description_label = gtk_label_new(LLTrans::getString("UpdaterUpdatingDescriptive").c_str());
- gtk_label_set_line_wrap(GTK_LABEL(description_label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(description_label), 0, 0.5);
- gtk_box_pack_start(GTK_BOX(vbox), description_label, FALSE, FALSE, 0);
-
- // If an image path has been set, load the background images
- if (!app_state->image_dir.empty()) {
- frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
- gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
-
- // load the first image
- app_state->image = gtk_image_new_from_file
- (next_image_filename(app_state->image_dir, *app_state->image_dir_iter).c_str());
- gtk_widget_set_size_request(app_state->image, 340, 310);
- gtk_container_add(GTK_CONTAINER(frame), app_state->image);
-
- // rotate the images every 5 seconds
- app_state->image_rotation_timeout_id = g_timeout_add
- (ROTATE_IMAGE_TIMEOUT, rotate_image_cb, app_state);
- }
-
- // set up progress bar, and update it roughly every 1/10 of a second
- app_state->progress_bar = gtk_progress_bar_new();
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar),
- LLTrans::getString("UpdaterProgressBarTextWithEllipses").c_str());
- gtk_box_pack_start(GTK_BOX(vbox),
- app_state->progress_bar, FALSE, TRUE, 0);
- app_state->progress_update_timeout_id = g_timeout_add
- (UPDATE_PROGRESS_TIMEOUT, progress_update_timeout, app_state);
- app_state->update_progress_text_timeout_id = g_timeout_add
- (UPDATE_PROGRESS_TEXT_TIMEOUT, update_progress_text_timeout, app_state);
-
- gtk_widget_show_all(app_state->window);
-}
-
-gboolean rotate_image_cb(gpointer data)
-{
- UpdaterAppState *app_state;
- std::string filename;
-
- llassert(data != NULL);
- app_state = (UpdaterAppState *) data;
-
- filename = next_image_filename(app_state->image_dir, *app_state->image_dir_iter);
-
- gdk_threads_enter();
- gtk_image_set_from_file(GTK_IMAGE(app_state->image), filename.c_str());
- gdk_threads_leave();
-
- return TRUE;
-}
-
-std::string next_image_filename(std::string& image_path, LLDirIterator& iter)
-{
- std::string image_filename;
- iter.next(image_filename);
- return gDirUtilp->add(image_path, image_filename);
-}
-
-void on_window_closed(GtkWidget *sender, GdkEvent* event, gpointer data)
-{
- UpdaterAppState *app_state;
-
- llassert(data != NULL);
- app_state = (UpdaterAppState *) data;
-
- updater_app_quit(app_state);
-}
-
-void updater_app_quit(UpdaterAppState *app_state)
-{
- if (app_state != NULL)
- {
- g_source_remove(app_state->progress_update_timeout_id);
-
- if (!app_state->image_dir.empty())
- {
- g_source_remove(app_state->image_rotation_timeout_id);
- }
- }
-
- gtk_main_quit();
-}
-
-void display_error(GtkWidget *parent, std::string title, std::string message)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "%s", message.c_str());
- gtk_window_set_title(GTK_WINDOW(dialog), title.c_str());
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
-}
-
-gpointer worker_thread_cb(gpointer data)
-{
- UpdaterAppState *app_state;
- CURL *curl;
- CURLcode result;
- FILE *package_file;
- GError *error = NULL;
- int fd;
-
- //g_return_val_if_fail (data != NULL, NULL);
- app_state = (UpdaterAppState *) data;
-
- try {
-
- if(!app_state->url.empty())
- {
- char* tmp_local_filename = NULL;
- // create temporary file to store the package.
- fd = g_file_open_tmp
- ("secondlife-update-XXXXXX", &tmp_local_filename, &error);
- if (error != NULL)
- {
- LL_ERRS() << "Unable to create temporary file: "
- << error->message
- << LL_ENDL;
-
- g_error_free(error);
- throw 0;
- }
-
- if(tmp_local_filename != NULL)
- {
- app_state->file = tmp_local_filename;
- g_free(tmp_local_filename);
- }
-
- package_file = fdopen(fd, "wb");
- if (package_file == NULL)
- {
- LL_ERRS() << "Failed to create temporary file: "
- << app_state->file.c_str()
- << LL_ENDL;
-
- gdk_threads_enter();
- display_error(app_state->window,
- LLTrans::getString("UpdaterFailDownloadTitle"),
- LLTrans::getString("UpdaterFailUpdateDescriptive"));
- gdk_threads_leave();
- throw 0;
- }
-
- // initialize curl and start downloading the package
- LL_INFOS() << "Downloading package: " << app_state->url << LL_ENDL;
-
- curl = curl_easy_init();
- if (curl == NULL)
- {
- LL_ERRS() << "Failed to initialize libcurl" << LL_ENDL;
-
- gdk_threads_enter();
- display_error(app_state->window,
- LLTrans::getString("UpdaterFailDownloadTitle"),
- LLTrans::getString("UpdaterFailUpdateDescriptive"));
- gdk_threads_leave();
- throw 0;
- }
-
- curl_easy_setopt(curl, CURLOPT_URL, app_state->url.c_str());
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE);
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, TRUE);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, package_file);
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
- curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION,
- &download_progress_cb);
- curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, app_state);
-
- result = curl_easy_perform(curl);
- fclose(package_file);
- curl_easy_cleanup(curl);
-
- if (result)
- {
- LL_ERRS() << "Failed to download update: "
- << app_state->url
- << LL_ENDL;
-
- gdk_threads_enter();
- display_error(app_state->window,
- LLTrans::getString("UpdaterFailDownloadTitle"),
- LLTrans::getString("UpdaterFailUpdateDescriptive"));
- gdk_threads_leave();
-
- throw 0;
- }
- }
-
- // now pulse the progres bar back and forth while the package is
- // being unpacked
- gdk_threads_enter();
- std::string installing_msg = LLTrans::getString("UpdaterNowInstalling");
- gtk_progress_bar_set_text(
- GTK_PROGRESS_BAR(app_state->progress_bar),
- installing_msg.c_str());
- app_state->activity_mode = TRUE;
- gdk_threads_leave();
-
- // *TODO: if the destination is not writable, terminate this
- // thread and show file chooser?
- if (!install_package(app_state->file.c_str(), app_state->dest_dir))
- {
- LL_WARNS() << "Failed to install package to destination: "
- << app_state->dest_dir
- << LL_ENDL;
-
- gdk_threads_enter();
- display_error(app_state->window,
- LLTrans::getString("UpdaterFailInstallTitle"),
- LLTrans::getString("UpdaterFailUpdateDescriptive"));
- //"Failed to update " + app_state->app_name,
- gdk_threads_leave();
- throw 0;
- }
-
- // try to spawn the new viewer
- if (!spawn_viewer(app_state))
- {
- LL_WARNS() << "Viewer was not installed properly in : "
- << app_state->dest_dir
- << LL_ENDL;
-
- gdk_threads_enter();
- display_error(app_state->window,
- LLTrans::getString("UpdaterFailStartTitle"),
- LLTrans::getString("UpdaterFailUpdateDescriptive"));
- gdk_threads_leave();
- throw 0;
- }
- }
- catch (...)
- {
- app_state->failure = TRUE;
- }
-
- gdk_threads_enter();
- updater_app_quit(app_state);
- gdk_threads_leave();
-
- return NULL;
-}
-
-
-gboolean less_anal_gspawnsync(gchar **argv,
- gchar **stderr_output,
- gint *child_exit_status,
- GError **spawn_error)
-{
- // store current SIGCHLD handler if there is one, replace with default
- // handler to make glib happy
- struct sigaction sigchld_backup;
- struct sigaction sigchld_appease_glib;
- sigchld_appease_glib.sa_handler = SIG_DFL;
- sigemptyset(&sigchld_appease_glib.sa_mask);
- sigchld_appease_glib.sa_flags = 0;
- sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup);
-
- gboolean rtn = g_spawn_sync(NULL,
- argv,
- NULL,
- (GSpawnFlags) (G_SPAWN_STDOUT_TO_DEV_NULL),
- NULL,
- NULL,
- NULL,
- stderr_output,
- child_exit_status,
- spawn_error);
-
- // restore SIGCHLD handler
- sigaction(SIGCHLD, &sigchld_backup, NULL);
-
- return rtn;
-}
-
-
-// perform a rename, or perform a (prompted) root rename if that fails
-int
-rename_with_sudo_fallback(const std::string& filename, const std::string& newname)
-{
- int rtncode = ::rename(filename.c_str(), newname.c_str());
- LL_DEBUGS() << "rename result is: " << rtncode << " / " << errno << LL_ENDL;
- if (rtncode && (EACCES == errno || EPERM == errno || EXDEV == errno))
- {
- LL_INFOS() << "Permission problem in rename, or moving between different mount points. Retrying as a mv under a sudo." << LL_ENDL;
- // failed due to permissions, try again as a gksudo or kdesu mv wrapper hack
- char *sudo_cmd = NULL;
- sudo_cmd = g_find_program_in_path("gksudo");
- if (!sudo_cmd)
- {
- sudo_cmd = g_find_program_in_path("kdesu");
- }
- if (sudo_cmd)
- {
- char *mv_cmd = NULL;
- mv_cmd = g_find_program_in_path("mv");
- if (mv_cmd)
- {
- char *src_string_copy = g_strdup(filename.c_str());
- char *dst_string_copy = g_strdup(newname.c_str());
- char* argv[] =
- {
- sudo_cmd,
- mv_cmd,
- src_string_copy,
- dst_string_copy,
- NULL
- };
-
- gchar *stderr_output = NULL;
- gint child_exit_status = 0;
- GError *spawn_error = NULL;
- if (!less_anal_gspawnsync(argv, &stderr_output,
- &child_exit_status, &spawn_error))
- {
- LL_WARNS() << "Failed to spawn child process: "
- << spawn_error->message
- << LL_ENDL;
- }
- else if (child_exit_status)
- {
- LL_WARNS() << "mv command failed: "
- << (stderr_output ? stderr_output : "(no reason given)")
- << LL_ENDL;
- }
- else
- {
- // everything looks good, clear the error code
- rtncode = 0;
- }
-
- g_free(src_string_copy);
- g_free(dst_string_copy);
- if (spawn_error) g_error_free(spawn_error);
- }
- }
- }
- return rtncode;
-}
-
-gboolean install_package(std::string package_file, std::string destination)
-{
- char *tar_cmd = NULL;
- std::ostringstream command;
-
- // Find the absolute path to the 'tar' command.
- tar_cmd = g_find_program_in_path("tar");
- if (!tar_cmd)
- {
- LL_ERRS() << "`tar' was not found in $PATH" << LL_ENDL;
- return FALSE;
- }
- LL_INFOS() << "Found tar command: " << tar_cmd << LL_ENDL;
-
- // Unpack the tarball in a temporary place first, then move it to
- // its final destination
- std::string tmp_dest_dir = gDirUtilp->getTempFilename();
- if (LLFile::mkdir(tmp_dest_dir, 0744))
- {
- LL_ERRS() << "Failed to create directory: "
- << destination
- << LL_ENDL;
-
- return FALSE;
- }
-
- char *package_file_string_copy = g_strdup(package_file.c_str());
- char *tmp_dest_dir_string_copy = g_strdup(tmp_dest_dir.c_str());
- gchar *argv[8] = {
- tar_cmd,
- const_cast<gchar*>("--strip"), const_cast<gchar*>("1"),
- const_cast<gchar*>("-xjf"),
- package_file_string_copy,
- const_cast<gchar*>("-C"), tmp_dest_dir_string_copy,
- NULL,
- };
-
- LL_INFOS() << "Untarring package: " << package_file << LL_ENDL;
-
- // store current SIGCHLD handler if there is one, replace with default
- // handler to make glib happy
- struct sigaction sigchld_backup;
- struct sigaction sigchld_appease_glib;
- sigchld_appease_glib.sa_handler = SIG_DFL;
- sigemptyset(&sigchld_appease_glib.sa_mask);
- sigchld_appease_glib.sa_flags = 0;
- sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup);
-
- gchar *stderr_output = NULL;
- gint child_exit_status = 0;
- GError *untar_error = NULL;
- if (!less_anal_gspawnsync(argv, &stderr_output,
- &child_exit_status, &untar_error))
- {
- LL_WARNS() << "Failed to spawn child process: "
- << untar_error->message
- << LL_ENDL;
- return FALSE;
- }
-
- if (child_exit_status)
- {
- LL_WARNS() << "Untar command failed: "
- << (stderr_output ? stderr_output : "(no reason given)")
- << LL_ENDL;
- return FALSE;
- }
-
- g_free(tar_cmd);
- g_free(package_file_string_copy);
- g_free(tmp_dest_dir_string_copy);
- g_free(stderr_output);
- if (untar_error) g_error_free(untar_error);
-
- // move the existing package out of the way if it exists
- if (gDirUtilp->fileExists(destination))
- {
- std::string backup_dir = destination + ".backup";
- int oldcounter = 1;
- while (gDirUtilp->fileExists(backup_dir))
- {
- // find a foo.backup.N folder name that isn't taken yet
- backup_dir = destination + ".backup." + llformat("%d", oldcounter);
- ++oldcounter;
- }
-
- if (rename_with_sudo_fallback(destination, backup_dir))
- {
- LL_WARNS() << "Failed to move directory: '"
- << destination << "' -> '" << backup_dir
- << LL_ENDL;
- return FALSE;
- }
- }
-
- // The package has been unpacked in a staging directory, now we just
- // need to move it to its destination.
- if (rename_with_sudo_fallback(tmp_dest_dir, destination))
- {
- LL_WARNS() << "Failed to move installation to the destination: "
- << destination
- << LL_ENDL;
- return FALSE;
- }
-
- // \0/ Success!
- return TRUE;
-}
-
-gboolean progress_update_timeout(gpointer data)
-{
- UpdaterAppState *app_state;
-
- llassert(data != NULL);
-
- app_state = (UpdaterAppState *) data;
-
- gdk_threads_enter();
- if (app_state->activity_mode)
- {
- gtk_progress_bar_pulse
- (GTK_PROGRESS_BAR(app_state->progress_bar));
- }
- else
- {
- gtk_progress_set_value(GTK_PROGRESS(app_state->progress_bar),
- app_state->progress_value);
- }
- gdk_threads_leave();
-
- return TRUE;
-}
-
-gboolean update_progress_text_timeout(gpointer data)
-{
- UpdaterAppState *app_state;
-
- llassert(data != NULL);
- app_state = (UpdaterAppState *) data;
-
- if (app_state->activity_mode == TRUE)
- {
- // We no longer need this timeout, it will be removed.
- return FALSE;
- }
-
- if (!app_state->progress_value)
- {
- return TRUE;
- }
-
- std::string progress_text = llformat((LLTrans::getString("UpdaterProgressBarText")+" (%.0f%%)").c_str(), app_state->progress_value);
-
- gdk_threads_enter();
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar),
- progress_text.c_str());
- gdk_threads_leave();
-
- return TRUE;
-}
-
-int download_progress_cb(gpointer data,
- double t,
- double d,
- double utotal,
- double ulnow)
-{
- UpdaterAppState *app_state;
-
- llassert(data != NULL);
- app_state = (UpdaterAppState *) data;
-
- if (t <= 0.0)
- {
- app_state->progress_value = 0;
- }
- else
- {
- app_state->progress_value = d * 100.0 / t;
- }
- return 0;
-}
-
-BOOL spawn_viewer(UpdaterAppState *app_state)
-{
- llassert(app_state != NULL);
-
- std::string cmd = app_state->dest_dir + "/secondlife";
- GError *error = NULL;
-
- // We want to spawn the Viewer on the same display as the updater app
- gboolean success = gdk_spawn_command_line_on_screen
- (gtk_widget_get_screen(app_state->window), cmd.c_str(), &error);
-
- if (!success)
- {
- LL_WARNS() << "Failed to launch viewer: " << error->message
- << LL_ENDL;
- }
-
- if (error) g_error_free(error);
-
- return success;
-}
-
-void show_usage_and_exit()
-{
- std::cout << "Usage: linux-updater <--url URL | --file FILE> --name NAME --dest PATH --stringsdir PATH1,PATH2 --stringsfile FILE"
- << "[--image-dir PATH]"
- << std::endl;
- exit(1);
-}
-
-void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state)
-{
- int i;
-
- for (i = 1; i < argc; i++)
- {
- if ((!strcmp(argv[i], "--url")) && (++i < argc))
- {
- app_state->url = argv[i];
- }
- else if ((!strcmp(argv[i], "--file")) && (++i < argc))
- {
- app_state->file = argv[i];
- }
- else if ((!strcmp(argv[i], "--name")) && (++i < argc))
- {
- app_state->app_name = argv[i];
- }
- else if ((!strcmp(argv[i], "--image-dir")) && (++i < argc))
- {
- app_state->image_dir = argv[i];
- app_state->image_dir_iter = new LLDirIterator(argv[i], "*.jpg");
- }
- else if ((!strcmp(argv[i], "--dest")) && (++i < argc))
- {
- app_state->dest_dir = argv[i];
- }
- else if ((!strcmp(argv[i], "--stringsdir")) && (++i < argc))
- {
- app_state->strings_dirs = argv[i];
- }
- else if ((!strcmp(argv[i], "--stringsfile")) && (++i < argc))
- {
- app_state->strings_file = argv[i];
- }
- else
- {
- // show usage, an invalid option was given.
- show_usage_and_exit();
- }
- }
-
- if (app_state->app_name.empty()
- || (app_state->url.empty() && app_state->file.empty())
- || app_state->dest_dir.empty())
- {
- show_usage_and_exit();
- }
-
- app_state->progress_value = 0.0;
- app_state->activity_mode = FALSE;
- app_state->failure = FALSE;
-
- translate_init(app_state->strings_dirs, app_state->strings_file);
-}
-
-int main(int argc, char **argv)
-{
- UpdaterAppState* app_state = new UpdaterAppState;
-
- parse_args_and_init(argc, argv, app_state);
-
- // Initialize logger, and rename old log file
- gDirUtilp->initAppDirs("SecondLife");
- LLError::initForApplication
- (gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
- std::string old_log_file = gDirUtilp->getExpandedFilename
- (LL_PATH_LOGS, "updater.log.old");
- std::string log_file =
- gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log");
- LLFile::rename(log_file, old_log_file);
- LLError::logToFile(log_file);
-
- // initialize gthreads and gtk+
- if (!g_thread_supported())
- {
- g_thread_init(NULL);
- gdk_threads_init();
- }
-
- gtk_init(&argc, &argv);
-
- // create UI
- updater_app_ui_init(app_state);
-
- //LL_INFOS() << "SAMPLE TRANSLATION IS: " << LLTrans::getString("LoginInProgress") << LL_ENDL;
-
- // create download thread
- g_thread_create(GThreadFunc(worker_thread_cb), app_state, FALSE, NULL);
-
- gdk_threads_enter();
- gtk_main();
- gdk_threads_leave();
-
- // Delete the file only if created from url download.
- if(!app_state->url.empty() && !app_state->file.empty())
- {
- if (gDirUtilp->fileExists(app_state->file))
- {
- LLFile::remove(app_state->file);
- }
- }
-
- bool success = !app_state->failure;
- delete app_state->image_dir_iter;
- delete app_state;
- return success ? 0 : 1;
-}
-
-/*****************************************************************************
-* Dummy LLTrans implementation (IQA-490)
-*****************************************************************************/
-static LLTrans sStaticStrings;
-
-// lookup
-std::string LLTrans::_getString(const std::string& key) const
-{
- MessageMap::const_iterator found = mMessages.find(key);
- if (found != mMessages.end())
- {
- return found->second;
- }
- LL_WARNS("linux_updater") << "No message for key '" << key
- << "' -- add to LLTrans::LLTrans() in linux_updater.cpp"
- << LL_ENDL;
- return key;
-}
-
-// static lookup
-std::string LLTrans::getString(const std::string& key)
-{
- return sLLTransInstance._getString(key);
-}
-
-// initialization
-LLTrans::LLTrans()
-{
- typedef std::pair<const char*, const char*> Pair;
- static const Pair data[] =
- {
- Pair("UpdaterFailDownloadTitle",
- "Failed to download update"),
- Pair("UpdaterFailInstallTitle",
- "Failed to install update"),
- Pair("UpdaterFailStartTitle",
- "Failed to start viewer"),
- Pair("UpdaterFailUpdateDescriptive",
- "An error occurred while updating Second Life. "
- "Please download the latest version from www.secondlife.com."),
- Pair("UpdaterNowInstalling",
- "Installing Second Life..."),
- Pair("UpdaterNowUpdating",
- "Now updating Second Life..."),
- Pair("UpdaterProgressBarText",
- "Downloading update"),
- Pair("UpdaterProgressBarTextWithEllipses",
- "Downloading update..."),
- Pair("UpdaterUpdatingDescriptive",
- "Your Second Life Viewer is being updated to the latest release. "
- "This may take some time, so please be patient."),
- Pair("UpdaterWindowTitle",
- "Second Life Update")
- };
-
- BOOST_FOREACH(Pair pair, data)
- {
- mMessages[pair.first] = pair.second;
- }
-}
diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h
index 7a9b807d04..8228e20e8c 100755
--- a/indra/llaudio/llaudiodecodemgr.h
+++ b/indra/llaudio/llaudiodecodemgr.h
@@ -24,7 +24,7 @@
*/
#ifndef LL_LLAUDIODECODEMGR_H
-#define LL_LLAUDIODECODEMG_H
+#define LL_LLAUDIODECODEMGR_H
#include "stdtypes.h"
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 8eeb186936..763f5a3521 100755
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -301,7 +301,7 @@ if (LL_TESTS)
LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
- LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY}")
+ LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}")
LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}")
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index db52f2b1f4..7d1d541a4b 100755
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -257,7 +257,8 @@ inline void ll_memcpy_nonaliased_aligned_16(char* __restrict dst, const char* __
assert((bytes % sizeof(F32))== 0);
ll_assert_aligned(src,16);
ll_assert_aligned(dst,16);
- assert((src < dst) ? ((src + bytes) < dst) : ((dst + bytes) < src));
+
+ assert((src < dst) ? ((src + bytes) <= dst) : ((dst + bytes) <= src));
assert(bytes%16==0);
char* end = dst + bytes;
diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp
index d6db20d7a3..ec7b21d8b6 100755
--- a/indra/llmessage/lltransfermanager.cpp
+++ b/indra/llmessage/lltransfermanager.cpp
@@ -1260,9 +1260,13 @@ bool LLTransferTarget::addDelayedPacket(
size);
#ifdef _DEBUG
- if (mDelayedPacketMap.find(packet_id) != mDelayedPacketMap.end())
+ transfer_packet_map::iterator iter = mDelayedPacketMap.find(packet_id);
+ if (iter != mDelayedPacketMap.end())
{
- LL_ERRS() << "Packet ALREADY in delayed packet map!" << LL_ENDL;
+ if (!(iter->second->mSize == size) && !(iter->second->mDatap == datap))
+ {
+ LL_ERRS() << "Packet ALREADY in delayed packet map!" << LL_ENDL;
+ }
}
#endif
diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp
deleted file mode 100644
index f533d47b18..0000000000
--- a/indra/mac_updater/mac_updater.cpp
+++ /dev/null
@@ -1,1266 +0,0 @@
-/**
- * @file mac_updater.cpp
- * @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 "linden_common.h"
-
-#include <boost/format.hpp>
-
-#include <libgen.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <curl/curl.h>
-#include <pthread.h>
-
-#include "llerror.h"
-#include "lltimer.h"
-#include "lldir.h"
-#include "llfile.h"
-
-#include "llstring.h"
-
-#include <Carbon/Carbon.h>
-
-#include "llerrorcontrol.h"
-
-#if LL_DARWIN
-// FSPathMakeRef, FSObjectCopy, deprecations...
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-enum
-{
- kEventClassCustom = 'Cust',
- kEventCustomProgress = 'Prog',
- kEventParamCustomCurValue = 'Cur ',
- kEventParamCustomMaxValue = 'Max ',
- kEventParamCustomText = 'Text',
- kEventCustomDone = 'Done',
-};
-
-WindowRef gWindow = NULL;
-EventHandlerRef gEventHandler = NULL;
-OSStatus gFailure = noErr;
-Boolean gCancelled = false;
-
-const char *gUpdateURL;
-const char *gProductName;
-const char *gBundleID;
-const char *gDmgFile;
-const char *gMarkerPath;
-
-void *updatethreadproc(void*);
-
-pthread_t updatethread;
-
-OSStatus setProgress(int cur, int max)
-{
- OSStatus err;
- ControlRef progressBar = NULL;
- ControlID id;
-
- id.signature = 'prog';
- id.id = 0;
-
- err = GetControlByID(gWindow, &id, &progressBar);
- if(err == noErr)
- {
- Boolean indeterminate;
-
- if(max == 0)
- {
- indeterminate = true;
- err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
- }
- else
- {
- double percentage = (double)cur / (double)max;
- SetControlMinimum(progressBar, 0);
- SetControlMaximum(progressBar, 100);
- SetControlValue(progressBar, (SInt16)(percentage * 100));
-
- indeterminate = false;
- err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
-
- Draw1Control(progressBar);
- }
- }
-
- return(err);
-}
-
-OSStatus setProgressText(CFStringRef text)
-{
- OSStatus err;
- ControlRef progressText = NULL;
- ControlID id;
-
- id.signature = 'what';
- id.id = 0;
-
- err = GetControlByID(gWindow, &id, &progressText);
- if(err == noErr)
- {
- err = SetControlData(progressText, kControlEntireControl, kControlStaticTextCFStringTag, sizeof(CFStringRef), (Ptr)&text);
- Draw1Control(progressText);
- }
-
- return(err);
-}
-
-OSStatus sendProgress(long cur, long max, CFStringRef text = NULL)
-{
- OSStatus result;
- EventRef evt;
-
- result = CreateEvent(
- NULL,
- kEventClassCustom,
- kEventCustomProgress,
- 0,
- kEventAttributeNone,
- &evt);
-
- // This event needs to be targeted at the window so it goes to the window's handler.
- if(result == noErr)
- {
- EventTargetRef target = GetWindowEventTarget(gWindow);
- result = SetEventParameter (
- evt,
- kEventParamPostTarget,
- typeEventTargetRef,
- sizeof(target),
- &target);
- }
-
- if(result == noErr)
- {
- result = SetEventParameter (
- evt,
- kEventParamCustomCurValue,
- typeLongInteger,
- sizeof(cur),
- &cur);
- }
-
- if(result == noErr)
- {
- result = SetEventParameter (
- evt,
- kEventParamCustomMaxValue,
- typeLongInteger,
- sizeof(max),
- &max);
- }
-
- if(result == noErr)
- {
- if(text != NULL)
- {
- result = SetEventParameter (
- evt,
- kEventParamCustomText,
- typeCFStringRef,
- sizeof(text),
- &text);
- }
- }
-
- if(result == noErr)
- {
- // Send the event
- PostEventToQueue(
- GetMainEventQueue(),
- evt,
- kEventPriorityStandard);
-
- }
-
- return(result);
-}
-
-OSStatus sendDone(void)
-{
- OSStatus result;
- EventRef evt;
-
- result = CreateEvent(
- NULL,
- kEventClassCustom,
- kEventCustomDone,
- 0,
- kEventAttributeNone,
- &evt);
-
- // This event needs to be targeted at the window so it goes to the window's handler.
- if(result == noErr)
- {
- EventTargetRef target = GetWindowEventTarget(gWindow);
- result = SetEventParameter (
- evt,
- kEventParamPostTarget,
- typeEventTargetRef,
- sizeof(target),
- &target);
- }
-
- if(result == noErr)
- {
- // Send the event
- PostEventToQueue(
- GetMainEventQueue(),
- evt,
- kEventPriorityStandard);
-
- }
-
- return(result);
-}
-
-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)
- {
- switch(cmd.commandID)
- {
- case kHICommandCancel:
- gCancelled = true;
-// QuitAppModalLoopForWindow(gWindow);
- result = noErr;
- break;
- }
- }
- }
- else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomProgress))
- {
- // Request to update the progress dialog
- long cur = 0;
- long max = 0;
- CFStringRef text = NULL;
- (void) GetEventParameter(event, kEventParamCustomCurValue, typeLongInteger, NULL, sizeof(cur), NULL, &cur);
- (void) GetEventParameter(event, kEventParamCustomMaxValue, typeLongInteger, NULL, sizeof(max), NULL, &max);
- (void) GetEventParameter(event, kEventParamCustomText, typeCFStringRef, NULL, sizeof(text), NULL, &text);
-
- err = setProgress(cur, max);
- if(err == noErr)
- {
- if(text != NULL)
- {
- setProgressText(text);
- }
- }
-
- result = noErr;
- }
- else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomDone))
- {
- // We're done. Exit the modal loop.
- QuitAppModalLoopForWindow(gWindow);
- result = noErr;
- }
-
- return(result);
-}
-
-#if 0
-size_t curl_download_callback(void *data, size_t size, size_t nmemb,
- void *user_data)
-{
- S32 bytes = size * nmemb;
- char *cdata = (char *) data;
- for (int i =0; i < bytes; i += 1)
- {
- gServerResponse.append(cdata[i]);
- }
- return bytes;
-}
-#endif
-
-int curl_progress_callback_func(void *clientp,
- double dltotal,
- double dlnow,
- double ultotal,
- double ulnow)
-{
- int max = (int)(dltotal / 1024.0);
- int cur = (int)(dlnow / 1024.0);
- sendProgress(cur, max);
-
- if(gCancelled)
- return(1);
-
- return(0);
-}
-
-int parse_args(int argc, char **argv)
-{
- int j;
-
- for (j = 1; j < argc; j++)
- {
- if ((!strcmp(argv[j], "-url")) && (++j < argc))
- {
- gUpdateURL = argv[j];
- }
- else if ((!strcmp(argv[j], "-name")) && (++j < argc))
- {
- gProductName = argv[j];
- }
- else if ((!strcmp(argv[j], "-bundleid")) && (++j < argc))
- {
- gBundleID = argv[j];
- }
- else if ((!strcmp(argv[j], "-dmg")) && (++j < argc))
- {
- gDmgFile = argv[j];
- }
- else if ((!strcmp(argv[j], "-marker")) && (++j < argc))
- {
- gMarkerPath = argv[j];;
- }
- }
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- // We assume that all the logs we're looking for reside on the current drive
- gDirUtilp->initAppDirs("SecondLife");
-
- LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
-
- // Rename current log file to ".old"
- std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log.old");
- std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log");
- LLFile::rename(log_file.c_str(), old_log_file.c_str());
-
- // Set the log file to updater.log
- LLError::logToFile(log_file);
-
- /////////////////////////////////////////
- //
- // Process command line arguments
- //
- gUpdateURL = NULL;
- gProductName = NULL;
- gBundleID = NULL;
- gDmgFile = NULL;
- gMarkerPath = NULL;
- parse_args(argc, argv);
- if ((gUpdateURL == NULL) && (gDmgFile == NULL))
- {
- llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl;
- exit(1);
- }
- else
- {
- llinfos << "Update url is: " << gUpdateURL << llendl;
- if (gProductName)
- {
- llinfos << "Product name is: " << gProductName << llendl;
- }
- else
- {
- gProductName = "Second Life";
- }
- if (gBundleID)
- {
- llinfos << "Bundle ID is: " << gBundleID << llendl;
- }
- else
- {
- gBundleID = "com.secondlife.indra.viewer";
- }
- }
-
- llinfos << "Starting " << gProductName << " Updater" << llendl;
-
- // Real UI...
- OSStatus err;
- IBNibRef nib = NULL;
-
- err = CreateNibReference(CFSTR("AutoUpdater"), &nib);
-
- char windowTitle[MAX_PATH]; /* Flawfinder: ignore */
- snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName);
- CFStringRef windowTitleRef = NULL;
- windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8);
-
- if(err == noErr)
- {
- err = CreateWindowFromNib(nib, CFSTR("Updater"), &gWindow);
- }
-
- if (err == noErr)
- {
- err = SetWindowTitleWithCFString(gWindow, windowTitleRef);
- }
- CFRelease(windowTitleRef);
-
- if(err == noErr)
- {
- // Set up an event handler for the window.
- EventTypeSpec handlerEvents[] =
- {
- { kEventClassCommand, kEventCommandProcess },
- { kEventClassCustom, kEventCustomProgress },
- { kEventClassCustom, kEventCustomDone }
- };
- InstallStandardEventHandler(GetWindowEventTarget(gWindow));
- InstallWindowEventHandler(
- gWindow,
- NewEventHandlerUPP(dialogHandler),
- GetEventTypeCount (handlerEvents),
- handlerEvents,
- 0,
- &gEventHandler);
- }
-
- if(err == noErr)
- {
- ShowWindow(gWindow);
- SelectWindow(gWindow);
- }
-
- if(err == noErr)
- {
- pthread_create(&updatethread,
- NULL,
- &updatethreadproc,
- NULL);
-
- }
-
- if(err == noErr)
- {
- RunAppModalLoopForWindow(gWindow);
- }
-
- void *threadresult;
-
- pthread_join(updatethread, &threadresult);
-
- if(!gCancelled && (gFailure != noErr))
- {
- // Something went wrong. Since we always just tell the user to download a new version, we don't really care what.
- AlertStdCFStringAlertParamRec params;
- SInt16 retval_mac = 1;
- DialogRef alert = NULL;
- OSStatus err;
-
- params.version = kStdCFStringAlertVersionOne;
- params.movable = false;
- params.helpButton = false;
- params.defaultText = (CFStringRef)kAlertDefaultOKText;
- params.cancelText = 0;
- params.otherText = 0;
- params.defaultButton = 1;
- params.cancelButton = 0;
- params.position = kWindowDefaultPosition;
- params.flags = 0;
-
- err = CreateStandardAlert(
- kAlertStopAlert,
- CFSTR("Error"),
- CFSTR("An error occurred while updating Second Life. Please download the latest version from www.secondlife.com."),
- &params,
- &alert);
-
- if(err == noErr)
- {
- err = RunStandardAlert(
- alert,
- NULL,
- &retval_mac);
- }
-
- if(gMarkerPath != 0)
- {
- // Create a install fail marker that can be used by the viewer to
- // detect install problems.
- std::ofstream stream(gMarkerPath);
- if(stream) stream << -1;
- }
- exit(-1);
- } else {
- exit(0);
- }
-
- if(gWindow != NULL)
- {
- DisposeWindow(gWindow);
- }
-
- if(nib != NULL)
- {
- DisposeNibReference(nib);
- }
-
- return 0;
-}
-
-bool isDirWritable(FSRef &dir)
-{
- bool result = false;
-
- // Test for a writable directory by creating a directory, then deleting it again.
- // This is kinda lame, but will pretty much always give the right answer.
-
- OSStatus err = noErr;
- char temp[PATH_MAX] = ""; /* Flawfinder: ignore */
-
- err = FSRefMakePath(&dir, (UInt8*)temp, sizeof(temp));
-
- if(err == noErr)
- {
- strncat(temp, "/.test_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
-
- if(mkdtemp(temp) != NULL)
- {
- // We were able to make the directory. This means the directory is writable.
- result = true;
-
- // Clean up.
- rmdir(temp);
- }
- }
-
-#if 0
- // This seemed like a good idea, but won't tell us if we're on a volume mounted read-only.
- UInt8 perm;
- err = FSGetUserPrivilegesPermissions(&targetParentRef, &perm, NULL);
- if(err == noErr)
- {
- if(perm & kioACUserNoMakeChangesMask)
- {
- // Parent directory isn't writable.
- llinfos << "Target parent directory not writable." << llendl;
- err = -1;
- replacingTarget = false;
- }
- }
-#endif
-
- return result;
-}
-
-static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src)
-{
- llutf16string string16((U16*)&(src->unicode), src->length);
- std::string result = utf16str_to_utf8str(string16);
- return result;
-}
-
-int restoreObject(const char* aside, const char* target, const char* path, const char* object)
-{
- char source[PATH_MAX] = ""; /* Flawfinder: ignore */
- char dest[PATH_MAX] = ""; /* Flawfinder: ignore */
- snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object);
- snprintf(dest, sizeof(dest), "%s/%s", target, path);
- FSRef sourceRef;
- FSRef destRef;
- OSStatus err;
- err = FSPathMakeRef((UInt8 *)source, &sourceRef, NULL);
- if(err != noErr) return false;
- err = FSPathMakeRef((UInt8 *)dest, &destRef, NULL);
- if(err != noErr) return false;
-
- llinfos << "Copying " << source << " to " << dest << llendl;
-
- err = FSCopyObjectSync(
- &sourceRef,
- &destRef,
- NULL,
- NULL,
- kFSFileOperationOverwrite);
-
- if(err != noErr) return false;
- return true;
-}
-
-// Replace any mention of "Second Life" with the product name.
-void filterFile(const char* filename)
-{
- char temp[PATH_MAX] = ""; /* Flawfinder: ignore */
- // First copy the target's version, so we can run it through sed.
- snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename);
- system(temp); /* Flawfinder: ignore */
-
- // Now run it through sed.
- snprintf(temp, sizeof(temp),
- "sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename);
- system(temp); /* Flawfinder: ignore */
-}
-
-static bool isFSRefViewerBundle(FSRef *targetRef)
-{
- bool result = false;
- CFURLRef targetURL = NULL;
- CFBundleRef targetBundle = NULL;
- CFStringRef targetBundleID = NULL;
- CFStringRef sourceBundleID = NULL;
-
- targetURL = CFURLCreateFromFSRef(NULL, targetRef);
-
- if(targetURL == NULL)
- {
- llinfos << "Error creating target URL." << llendl;
- }
- else
- {
- targetBundle = CFBundleCreate(NULL, targetURL);
- }
-
- if(targetBundle == NULL)
- {
- llinfos << "Failed to create target bundle." << llendl;
- }
- else
- {
- targetBundleID = CFBundleGetIdentifier(targetBundle);
- }
-
- if(targetBundleID == NULL)
- {
- llinfos << "Couldn't retrieve target bundle ID." << llendl;
- }
- else
- {
- sourceBundleID = CFStringCreateWithCString(NULL, gBundleID, kCFStringEncodingUTF8);
- if(CFStringCompare(sourceBundleID, targetBundleID, 0) == kCFCompareEqualTo)
- {
- // This is the bundle we're looking for.
- result = true;
- }
- else
- {
- llinfos << "Target bundle ID mismatch." << llendl;
- }
- }
-
- // Don't release targetBundleID -- since we don't retain it, it's released when targetBundle is released.
- if(targetURL != NULL)
- CFRelease(targetURL);
- if(targetBundle != NULL)
- CFRelease(targetBundle);
-
- return result;
-}
-
-// Search through the directory specified by 'parent' for an item that appears to be a Second Life viewer.
-static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
-{
- FSIterator iterator;
- bool found = false;
-
- OSErr err = FSOpenIterator( parent, kFSIterateFlat, &iterator );
- if(!err)
- {
- do
- {
- ItemCount actualObjects = 0;
- Boolean containerChanged = false;
- FSCatalogInfo info;
- FSRef ref;
- HFSUniStr255 unicodeName;
- err = FSGetCatalogInfoBulk(
- iterator,
- 1,
- &actualObjects,
- &containerChanged,
- kFSCatInfoNodeFlags,
- &info,
- &ref,
- NULL,
- &unicodeName );
-
- if(actualObjects == 0)
- break;
-
- if(!err)
- {
- // Call succeeded and not done with the iteration.
- std::string name = HFSUniStr255_to_utf8str(&unicodeName);
-
- llinfos << "Considering \"" << name << "\"" << llendl;
-
- if(info.nodeFlags & kFSNodeIsDirectoryMask)
- {
- // This is a directory. See if it's a .app
- if(name.find(".app") != std::string::npos)
- {
- // Looks promising. Check to see if it has the right bundle identifier.
- if(isFSRefViewerBundle(&ref))
- {
- llinfos << name << " is the one" << llendl;
- // This is the one. Return it.
- *app = ref;
- found = true;
- break;
- } else {
- llinfos << name << " is not the bundle we are looking for; move along" << llendl;
- }
-
- }
- }
- }
- }
- while(!err);
-
- llinfos << "closing the iterator" << llendl;
-
- FSCloseIterator(iterator);
-
- llinfos << "closed" << llendl;
- }
-
- if(!err && !found)
- err = fnfErr;
-
- return err;
-}
-
-void *updatethreadproc(void*)
-{
- char tempDir[PATH_MAX] = ""; /* Flawfinder: ignore */
- FSRef tempDirRef;
- char temp[PATH_MAX] = ""; /* Flawfinder: ignore */
- // *NOTE: This buffer length is used in a scanf() below.
- char deviceNode[1024] = ""; /* Flawfinder: ignore */
- LLFILE *downloadFile = NULL;
- OSStatus err;
- ProcessSerialNumber psn;
- char target[PATH_MAX] = ""; /* Flawfinder: ignore */
- FSRef targetRef;
- FSRef targetParentRef;
- FSVolumeRefNum targetVol;
- FSRef trashFolderRef;
- Boolean replacingTarget = false;
-
- memset(&tempDirRef, 0, sizeof(tempDirRef));
- memset(&targetRef, 0, sizeof(targetRef));
- memset(&targetParentRef, 0, sizeof(targetParentRef));
-
- try
- {
- // Attempt to get a reference to the Second Life application bundle containing this updater.
- // Any failures during this process will cause us to default to updating /Applications/Second Life.app
- {
- FSRef myBundle;
-
- err = GetCurrentProcess(&psn);
- if(err == noErr)
- {
- err = GetProcessBundleLocation(&psn, &myBundle);
- }
-
- if(err == noErr)
- {
- // Sanity check: Make sure the name of the item referenced by targetRef is "Second Life.app".
- FSRefMakePath(&myBundle, (UInt8*)target, sizeof(target));
-
- llinfos << "Updater bundle location: " << target << llendl;
- }
-
- // Our bundle should be in Second Life.app/Contents/Resources/AutoUpdater.app
- // so we need to go up 3 levels to get the path to the main application bundle.
- if(err == noErr)
- {
- err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
- }
- if(err == noErr)
- {
- err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
- }
- if(err == noErr)
- {
- err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
- }
-
- // And once more to get the parent of the target
- if(err == noErr)
- {
- err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef);
- }
-
- if(err == noErr)
- {
- FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
- llinfos << "Path to target: " << target << llendl;
- }
-
- // Sanity check: make sure the target is a bundle with the right identifier
- if(err == noErr)
- {
- // Assume the worst...
- err = -1;
-
- if(isFSRefViewerBundle(&targetRef))
- {
- // This is the bundle we're looking for.
- err = noErr;
- replacingTarget = true;
- }
- }
-
- // Make sure the target's parent directory is writable.
- if(err == noErr)
- {
- if(!isDirWritable(targetParentRef))
- {
- // Parent directory isn't writable.
- llinfos << "Target parent directory not writable." << llendl;
- err = -1;
- replacingTarget = false;
- }
- }
-
- if(err != noErr)
- {
- Boolean isDirectory;
- llinfos << "Target search failed, defaulting to /Applications/" << gProductName << ".app." << llendl;
-
- // Set up the parent directory
- err = FSPathMakeRef((UInt8*)"/Applications", &targetParentRef, &isDirectory);
- if((err != noErr) || (!isDirectory))
- {
- // We're so hosed.
- llinfos << "Applications directory not found, giving up." << llendl;
- throw 0;
- }
-
- snprintf(target, sizeof(target), "/Applications/%s.app", gProductName);
-
- memset(&targetRef, 0, sizeof(targetRef));
- err = FSPathMakeRef((UInt8*)target, &targetRef, NULL);
- if(err == fnfErr)
- {
- // This is fine, just means we're not replacing anything.
- err = noErr;
- replacingTarget = false;
- }
- else
- {
- replacingTarget = true;
- }
-
- // Make sure the target's parent directory is writable.
- if(err == noErr)
- {
- if(!isDirWritable(targetParentRef))
- {
- // Parent directory isn't writable.
- llinfos << "Target parent directory not writable." << llendl;
- err = -1;
- replacingTarget = false;
- }
- }
-
- }
-
- // If we haven't fixed all problems by this point, just bail.
- if(err != noErr)
- {
- llinfos << "Unable to pick a target, giving up." << llendl;
- throw 0;
- }
- }
-
- // Find the volID of the volume the target resides on
- {
- FSCatalogInfo info;
- err = FSGetCatalogInfo(
- &targetParentRef,
- kFSCatInfoVolume,
- &info,
- NULL,
- NULL,
- NULL);
-
- if(err != noErr)
- throw 0;
-
- targetVol = info.volume;
- }
-
- // Find the temporary items and trash folders on that volume.
- err = FSFindFolder(
- targetVol,
- kTrashFolderType,
- true,
- &trashFolderRef);
-
- if(err != noErr)
- throw 0;
-
-#if 0 // *HACK for DEV-11935 see below for details.
-
- FSRef tempFolderRef;
-
- err = FSFindFolder(
- targetVol,
- kTemporaryFolderType,
- true,
- &tempFolderRef);
-
- if(err != noErr)
- throw 0;
-
- err = FSRefMakePath(&tempFolderRef, (UInt8*)temp, sizeof(temp));
-
- if(err != noErr)
- throw 0;
-
-#else
-
- // *HACK for DEV-11935 the above kTemporaryFolderType query was giving
- // back results with path names that seem to be too long to be used as
- // mount points. I suspect this incompatibility was introduced in the
- // Leopard 10.5.2 update, but I have not verified this.
- char const HARDCODED_TMP[] = "/tmp";
- strncpy(temp, HARDCODED_TMP, sizeof(HARDCODED_TMP));
-
-#endif // 0 *HACK for DEV-11935
-
- // Skip downloading the file if the dmg was passed on the command line.
- std::string dmgName;
- if(gDmgFile != NULL) {
- dmgName = basename((char *)gDmgFile);
- char * dmgDir = dirname((char *)gDmgFile);
- strncpy(tempDir, dmgDir, sizeof(tempDir));
- err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
- if(err != noErr) throw 0;
- chdir(tempDir);
- goto begin_install;
- } else {
- // Continue on to download file.
- dmgName = "SecondLife.dmg";
- }
-
-
- strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
- if(mkdtemp(temp) == NULL)
- {
- throw 0;
- }
-
- strncpy(tempDir, temp, sizeof(tempDir));
- temp[sizeof(tempDir) - 1] = '\0';
-
- llinfos << "tempDir is " << tempDir << llendl;
-
- err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
-
- if(err != noErr)
- throw 0;
-
- chdir(tempDir);
-
- snprintf(temp, sizeof(temp), "SecondLife.dmg");
-
- downloadFile = LLFile::fopen(temp, "wb"); /* Flawfinder: ignore */
- if(downloadFile == NULL)
- {
- throw 0;
- }
-
- {
- CURL *curl = curl_easy_init();
-
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- // curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_download_callback);
- curl_easy_setopt(curl, CURLOPT_FILE, downloadFile);
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
- curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &curl_progress_callback_func);
- curl_easy_setopt(curl, CURLOPT_URL, gUpdateURL);
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
-
- sendProgress(0, 1, CFSTR("Downloading..."));
-
- CURLcode result = curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
-
- if(gCancelled)
- {
- llinfos << "User cancel, bailing out."<< llendl;
- throw 0;
- }
-
- if(result != CURLE_OK)
- {
- llinfos << "Error " << result << " while downloading disk image."<< llendl;
- throw 0;
- }
-
- fclose(downloadFile);
- downloadFile = NULL;
- }
-
- begin_install:
- sendProgress(0, 0, CFSTR("Mounting image..."));
- LLFile::mkdir("mnt", 0700);
-
- // NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder,
- // but if our cleanup fails, this makes it much harder for the user to unmount the image.
- std::string mountOutput;
- boost::format cmdFormat("hdiutil attach %s -mountpoint mnt");
- cmdFormat % dmgName;
- FILE* mounter = popen(cmdFormat.str().c_str(), "r"); /* Flawfinder: ignore */
-
- if(mounter == NULL)
- {
- llinfos << "Failed to mount disk image, exiting."<< llendl;
- throw 0;
- }
-
- // We need to scan the output from hdiutil to find the device node it uses to attach the disk image.
- // If we don't have this information, we can't detach it later.
- while(mounter != NULL)
- {
- size_t len = fread(temp, 1, sizeof(temp)-1, mounter);
- temp[len] = 0;
- mountOutput.append(temp);
- if(len < sizeof(temp)-1)
- {
- // End of file or error.
- int result = pclose(mounter);
- if(result != 0)
- {
- // NOTE: We used to abort here, but pclose() started returning
- // -1, possibly when the size of the DMG passed a certain point
- llinfos << "Unexpected result closing pipe: " << result << llendl;
- }
- mounter = NULL;
- }
- }
-
- if(!mountOutput.empty())
- {
- const char *s = mountOutput.c_str();
- const char *prefix = "/dev/";
- char *sub = strstr(s, prefix);
-
- if(sub != NULL)
- {
- sub += strlen(prefix); /* Flawfinder: ignore */
- sscanf(sub, "%1023s", deviceNode); /* Flawfinder: ignore */
- }
- }
-
- if(deviceNode[0] != 0)
- {
- llinfos << "Disk image attached on /dev/" << deviceNode << llendl;
- }
- else
- {
- llinfos << "Disk image device node not found!" << llendl;
- throw 0;
- }
-
- // Get an FSRef to the new application on the disk image
- FSRef sourceRef;
- FSRef mountRef;
- snprintf(temp, sizeof(temp), "%s/mnt", tempDir);
-
- llinfos << "Disk image mount point is: " << temp << llendl;
-
- err = FSPathMakeRef((UInt8 *)temp, &mountRef, NULL);
- if(err != noErr)
- {
- llinfos << "Couldn't make FSRef to disk image mount point." << llendl;
- throw 0;
- }
-
- sendProgress(0, 0, CFSTR("Searching for the app bundle..."));
- err = findAppBundleOnDiskImage(&mountRef, &sourceRef);
- if(err != noErr)
- {
- llinfos << "Couldn't find application bundle on mounted disk image." << llendl;
- throw 0;
- }
- else
- {
- llinfos << "found the bundle." << llendl;
- }
-
- sendProgress(0, 0, CFSTR("Preparing to copy files..."));
-
- FSRef asideRef;
- char aside[MAX_PATH]; /* Flawfinder: ignore */
-
- // this will hold the name of the destination target
- CFStringRef appNameRef;
-
- if(replacingTarget)
- {
- // Get the name of the target we're replacing
- HFSUniStr255 appNameUniStr;
- err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL);
- if(err != noErr)
- throw 0;
- appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr);
-
- // Move aside old version (into work directory)
- err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);
- if(err != noErr)
- {
- llwarns << "failed to move aside old version (error code " <<
- err << ")" << llendl;
- throw 0;
- }
-
- // Grab the path for later use.
- err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside));
- }
- else
- {
- // Construct the name of the target based on the product name
- char appName[MAX_PATH]; /* Flawfinder: ignore */
- snprintf(appName, sizeof(appName), "%s.app", gProductName);
- appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8);
- }
-
- sendProgress(0, 0, CFSTR("Copying files..."));
-
- llinfos << "Starting copy..." << llendl;
-
- // Copy the new version from the disk image to the target location.
- err = FSCopyObjectSync(
- &sourceRef,
- &targetParentRef,
- appNameRef,
- &targetRef,
- kFSFileOperationDefaultOptions);
-
- // Grab the path for later use.
- err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
- if(err != noErr)
- throw 0;
-
- llinfos << "Copy complete. Target = " << target << llendl;
-
- if(err != noErr)
- {
- // Something went wrong during the copy. Attempt to put the old version back and bail.
- (void)FSDeleteObject(&targetRef);
- if(replacingTarget)
- {
- (void)FSMoveObject(&asideRef, &targetParentRef, NULL);
- }
- throw 0;
- }
- else
- {
- // The update has succeeded. Clear the cache directory.
-
- sendProgress(0, 0, CFSTR("Clearing cache..."));
-
- llinfos << "Clearing cache..." << llendl;
-
- gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*");
-
- llinfos << "Clear complete." << llendl;
-
- }
- }
- catch(...)
- {
- if(!gCancelled)
- if(gFailure == noErr)
- gFailure = -1;
- }
-
- // Failures from here on out are all non-fatal and not reported.
- sendProgress(0, 3, CFSTR("Cleaning up..."));
-
- // Close disk image file if necessary
- if(downloadFile != NULL)
- {
- llinfos << "Closing download file." << llendl;
-
- fclose(downloadFile);
- downloadFile = NULL;
- }
-
- sendProgress(1, 3);
- // Unmount image
- if(deviceNode[0] != 0)
- {
- llinfos << "Detaching disk image." << llendl;
-
- snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode);
- system(temp); /* Flawfinder: ignore */
- }
-
- sendProgress(2, 3);
-
- // Move work directory to the trash
- if(tempDir[0] != 0)
- {
- llinfos << "Moving work directory to the trash." << llendl;
-
- FSRef trashRef;
- OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0);
- if(err != noErr) {
- llwarns << "failed to move files to trash, (error code " <<
- err << ")" << llendl;
- }
- }
-
- if(!gCancelled && !gFailure && (target[0] != 0))
- {
- llinfos << "Touching application bundle." << llendl;
-
- snprintf(temp, sizeof(temp), "touch '%s'", target);
- system(temp); /* Flawfinder: ignore */
-
- llinfos << "Launching updated application." << llendl;
-
- snprintf(temp, sizeof(temp), "open '%s'", target);
- system(temp); /* Flawfinder: ignore */
- }
-
- sendDone();
-
- return(NULL);
-}
-
-#if LL_DARWIN
-#pragma GCC diagnostic warning "-Wdeprecated-declarations"
-#endif
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
index 93d2a8fa6e..ff1ed8bfbc 100755
--- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
+++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
@@ -28,26 +28,26 @@
#include "linden_common.h"
-#if defined(LL_DARWIN)
- #include <QuickTime/QuickTime.h>
-#elif defined(LL_WINDOWS)
- #include "llwin32headers.h"
- #include "MacTypes.h"
- #include "QTML.h"
- #include "Movies.h"
- #include "QDoffscreen.h"
- #include "FixMath.h"
- #include "QTLoadLibraryUtils.h"
-#endif
-
#include "llgl.h"
-
+
#include "llplugininstance.h"
#include "llpluginmessage.h"
#include "llpluginmessageclasses.h"
#include "media_plugin_base.h"
-
+
#if LL_QUICKTIME_ENABLED
+
+#if defined(LL_DARWIN)
+#include <QuickTime/QuickTime.h>
+#elif defined(LL_WINDOWS)
+#include "llwin32headers.h"
+#include "MacTypes.h"
+#include "QTML.h"
+#include "Movies.h"
+#include "QDoffscreen.h"
+#include "FixMath.h"
+#include "QTLoadLibraryUtils.h"
+#endif
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 0c1c3d800e..5a8fe90bdd 100755
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -121,12 +121,12 @@ if (DARWIN)
)
# copy the webkit dylib to the build directory
- add_custom_command(
- TARGET media_plugin_webkit POST_BUILD
-# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
- COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
- DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
- )
+# add_custom_command(
+# TARGET media_plugin_webkit POST_BUILD
+# # OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
+# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+# DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+# )
endif (DARWIN)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 3e296c8d9f..279d98e5c0 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -47,6 +47,8 @@ include(VisualLeakDetector)
include(GLOD)
include(CMakeCopyIfDifferent)
include(LLAppearance)
+include(PNG)
+include(ZLIB)
if (NOT HAVOK_TPV)
# When using HAVOK_TPV, the library is precompiled, so no need for this
@@ -1765,7 +1767,6 @@ if (WINDOWS)
media_plugin_webkit
winmm_shim
windows-crash-logger
- windows-updater
)
if (FMODEX)
@@ -1811,7 +1812,6 @@ if (WINDOWS)
add_dependencies(${VIEWER_BINARY_NAME}
SLPlugin
- windows-updater
windows-crash-logger
)
@@ -1891,13 +1891,37 @@ else (WINDOWS)
)
endif (WINDOWS)
-# *NOTE - this list is very sensitive to ordering, test carefully on all
+# *NOTE: - this list is very sensitive to ordering, test carefully on all
# platforms if you change the releative order of the entries here.
# In particular, cmake 2.6.4 (when buidling with linux/makefile generators)
# appears to sometimes de-duplicate redundantly listed dependencies improperly.
# To work around this, higher level modules should be listed before the modules
# that they depend upon. -brad
+#
+# *NOTE: On mixing system shared libraries and updated static archives.
+# We use a number of libraries that have an existence as system libraries,
+# internal-use libraries and applications libraries. The most-referenced
+# one of these being libz where you can find four or more versions in play
+# at once. On Linux, libz can be found at link and run time via a number
+# of paths:
+#
+# => -lfreetype
+# => libz.so.1 (on install machine, not build)
+# => -lSDL
+# => libz.so.1 (on install machine, not build)
+# => -lgdk-x11-2.0
+# => libz.so.1
+# => -lz
+#
+# We generally want the newest version of the library to provide all symbol
+# resolution. To that end, when using static archives, the *_PRELOAD_ARCHIVES
+# variables, PNG_PRELOAD_ARCHIVES and ZLIB_PRELOAD_ARCHIVES, get the archives
+# dumped into the target binary and runtime lookup will find the most
+# modern version.
+
target_link_libraries(${VIEWER_BINARY_NAME}
+ ${PNG_PRELOAD_ARCHIVES}
+ ${ZLIB_PRELOAD_ARCHIVES}
${UPDATER_LIBRARIES}
${GOOGLE_PERFTOOLS_LIBRARIES}
${LLAUDIO_LIBRARIES}
@@ -1924,6 +1948,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${BOOST_PROGRAM_OPTIONS_LIBRARY}
${BOOST_REGEX_LIBRARY}
${BOOST_CONTEXT_LIBRARY}
+ ${BOOST_COROUTINE_LIBRARY}
${DBUSGLIB_LIBRARIES}
${OPENGL_LIBRARIES}
${FMODWRAPPER_LIBRARY} # must come after LLAudio
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 35c6ac5179..36f601f10e 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.14
+3.7.16
diff --git a/indra/newview/app_settings/filters/BlackAndWhite.xml b/indra/newview/app_settings/filters/BlackAndWhite.xml
index 101ed8233a..7894628d29 100644
--- a/indra/newview/app_settings/filters/BlackAndWhite.xml
+++ b/indra/newview/app_settings/filters/BlackAndWhite.xml
@@ -1,20 +1,6 @@
<llsd>
<array>
<array>
- <string>linearize</string>
- <real>0.01</real>
- <real>1.0</real>
- <real>1.0</real>
- <real>1.0</real>
- </array>
- <array>
- <string>contrast</string>
- <real>0.8</real>
- <real>1.0</real>
- <real>1.0</real>
- <real>1.0</real>
- </array>
- <array>
<string>grayscale</string>
</array>
</array>
diff --git a/indra/newview/app_settings/filters/Sepia.xml b/indra/newview/app_settings/filters/Sepia.xml
index 3d577b2998..81d7caf0eb 100644
--- a/indra/newview/app_settings/filters/Sepia.xml
+++ b/indra/newview/app_settings/filters/Sepia.xml
@@ -1,31 +1,6 @@
<llsd>
<array>
<array>
- <string>linearize</string>
- <real>0.01</real>
- <real>1.0</real>
- <real>1.0</real>
- <real>1.0</real>
- </array>
- <array>
- <string>contrast</string>
- <real>0.8</real>
- <real>1.0</real>
- <real>1.0</real>
- <real>1.0</real>
- </array>
- <array>
- <string>stencil</string>
- <string>vignette</string>
- <string>fade</string>
- <real>0.5</real>
- <real>1.0</real>
- <real>0.0</real>
- <real>0.0</real>
- <real>1.0</real>
- <real>4.0</real>
- </array>
- <array>
<string>sepia</string>
</array>
</array>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index e58fc01918..667b3f2a36 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -80,7 +80,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>AgentPause</key>
<map>
@@ -11475,17 +11475,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>SnapshotFiltersEnabled</key>
- <map>
- <key>Comment</key>
- <string>Enable filters in the Snapshot Advanced panel (experimental).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>SnapshotFormat</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/icons/beta/secondlife_128.png b/indra/newview/icons/beta/secondlife_128.png
index fa42aa764b..af5ae63335 100755
--- a/indra/newview/icons/beta/secondlife_128.png
+++ b/indra/newview/icons/beta/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_16.png b/indra/newview/icons/beta/secondlife_16.png
index ff648cf3fc..9e6305d98f 100755
--- a/indra/newview/icons/beta/secondlife_16.png
+++ b/indra/newview/icons/beta/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_256.png b/indra/newview/icons/beta/secondlife_256.png
index 245e2c3e9f..b0814fc180 100755
--- a/indra/newview/icons/beta/secondlife_256.png
+++ b/indra/newview/icons/beta/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_32.png b/indra/newview/icons/beta/secondlife_32.png
index fd7f46bf4d..a00b3cf53c 100755
--- a/indra/newview/icons/beta/secondlife_32.png
+++ b/indra/newview/icons/beta/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_48.png b/indra/newview/icons/beta/secondlife_48.png
index cc3a795e2b..551587b1cd 100755
--- a/indra/newview/icons/beta/secondlife_48.png
+++ b/indra/newview/icons/beta/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_512.png b/indra/newview/icons/beta/secondlife_512.png
index a959bd9a9e..99226de74e 100755
--- a/indra/newview/icons/beta/secondlife_512.png
+++ b/indra/newview/icons/beta/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_128.png b/indra/newview/icons/project/secondlife_128.png
index d67b8228f9..b1b4997306 100755
--- a/indra/newview/icons/project/secondlife_128.png
+++ b/indra/newview/icons/project/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_16.png b/indra/newview/icons/project/secondlife_16.png
index 91493a033c..7d3d74b534 100755
--- a/indra/newview/icons/project/secondlife_16.png
+++ b/indra/newview/icons/project/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_256.png b/indra/newview/icons/project/secondlife_256.png
index cccfaf7cba..88ad959275 100755
--- a/indra/newview/icons/project/secondlife_256.png
+++ b/indra/newview/icons/project/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_32.png b/indra/newview/icons/project/secondlife_32.png
index ad7b33f789..e55f75e1dd 100755
--- a/indra/newview/icons/project/secondlife_32.png
+++ b/indra/newview/icons/project/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_48.png b/indra/newview/icons/project/secondlife_48.png
index 104a931fbc..c29703e164 100755
--- a/indra/newview/icons/project/secondlife_48.png
+++ b/indra/newview/icons/project/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_512.png b/indra/newview/icons/project/secondlife_512.png
index 74e2fa9bc6..4fa3474d70 100755
--- a/indra/newview/icons/project/secondlife_512.png
+++ b/indra/newview/icons/project/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
index bcf94dcae8..4c9544f498 100755
--- a/indra/newview/icons/release/secondlife_128.png
+++ b/indra/newview/icons/release/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
index 90311ea8b0..bb3168b8be 100755
--- a/indra/newview/icons/release/secondlife_16.png
+++ b/indra/newview/icons/release/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
index a89fb4c74f..bece338a90 100755
--- a/indra/newview/icons/release/secondlife_256.png
+++ b/indra/newview/icons/release/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
index 530e8fc80c..736359c147 100755
--- a/indra/newview/icons/release/secondlife_32.png
+++ b/indra/newview/icons/release/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
index cb33c51f8a..07d39ae585 100755
--- a/indra/newview/icons/release/secondlife_48.png
+++ b/indra/newview/icons/release/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_512.png b/indra/newview/icons/release/secondlife_512.png
index f291e60586..53d1643f45 100755
--- a/indra/newview/icons/release/secondlife_512.png
+++ b/indra/newview/icons/release/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_128.png b/indra/newview/icons/test/secondlife_128.png
index 019f65db28..486772b6d3 100755
--- a/indra/newview/icons/test/secondlife_128.png
+++ b/indra/newview/icons/test/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_16.png b/indra/newview/icons/test/secondlife_16.png
index 91493a033c..7d3d74b534 100755
--- a/indra/newview/icons/test/secondlife_16.png
+++ b/indra/newview/icons/test/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.png b/indra/newview/icons/test/secondlife_256.png
index f402424c51..56c781788d 100755
--- a/indra/newview/icons/test/secondlife_256.png
+++ b/indra/newview/icons/test/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_32.png b/indra/newview/icons/test/secondlife_32.png
index 80d6efe13d..476029db61 100755
--- a/indra/newview/icons/test/secondlife_32.png
+++ b/indra/newview/icons/test/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_48.png b/indra/newview/icons/test/secondlife_48.png
index bba938feba..d7de7849f9 100755
--- a/indra/newview/icons/test/secondlife_48.png
+++ b/indra/newview/icons/test/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_512.png b/indra/newview/icons/test/secondlife_512.png
index 10ff65312b..a4b1e4974c 100755
--- a/indra/newview/icons/test/secondlife_512.png
+++ b/indra/newview/icons/test/secondlife_512.png
Binary files differ
diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp
index 9e3f917eae..6888e076aa 100644
--- a/indra/newview/llfloaterfacebook.cpp
+++ b/indra/newview/llfloaterfacebook.cpp
@@ -58,7 +58,6 @@ static LLPanelInjector<LLFacebookStatusPanel> t_panel_status("llfacebookstatuspa
static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel");
static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel");
static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel");
-static LLPanelInjector<LLFacebookAccountPanel> t_panel_account("llfacebookaccountpanel");
const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/";
@@ -99,13 +98,29 @@ S32 compute_jpeg_quality(S32 width, S32 height)
LLFacebookStatusPanel::LLFacebookStatusPanel() :
mMessageTextEditor(NULL),
mPostButton(NULL),
- mCancelButton(NULL)
+ mCancelButton(NULL),
+ mAccountCaptionLabel(NULL),
+ mAccountNameLabel(NULL),
+ mPanelButtons(NULL),
+ mConnectButton(NULL),
+ mDisconnectButton(NULL)
{
+ mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this));
+ mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this));
+
+ setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2));
+
mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this));
}
BOOL LLFacebookStatusPanel::postBuild()
{
+ mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label");
+ mAccountNameLabel = getChild<LLTextBox>("account_name_label");
+ mPanelButtons = getChild<LLUICtrl>("panel_buttons");
+ mConnectButton = getChild<LLUICtrl>("connect_btn");
+ mDisconnectButton = getChild<LLUICtrl>("disconnect_btn");
+
mMessageTextEditor = getChild<LLUICtrl>("status_message");
mPostButton = getChild<LLUICtrl>("post_status_btn");
mCancelButton = getChild<LLUICtrl>("cancel_status_btn");
@@ -115,6 +130,16 @@ BOOL LLFacebookStatusPanel::postBuild()
void LLFacebookStatusPanel::draw()
{
+ LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState();
+
+ //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress
+ bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING;
+ mDisconnectButton->setEnabled(!disconnecting);
+
+ //Disable the 'connect' button when a connection is in progress
+ bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS;
+ mConnectButton->setEnabled(!connecting);
+
if (mMessageTextEditor && mPostButton && mCancelButton)
{
bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing());
@@ -131,7 +156,7 @@ void LLFacebookStatusPanel::onSend()
{
LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening
LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1));
-
+
// Connect to Facebook if necessary and then post
if (LLFacebookConnect::instance().isConnected())
{
@@ -160,6 +185,24 @@ bool LLFacebookStatusPanel::onFacebookConnectStateChange(const LLSD& data)
return false;
}
+bool LLFacebookStatusPanel::onFacebookConnectAccountStateChange(const LLSD& data)
+{
+ if(LLFacebookConnect::instance().isConnected())
+ {
+ //In process of disconnecting so leave the layout as is
+ if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING)
+ {
+ showConnectedLayout();
+ }
+ }
+ else
+ {
+ showDisconnectedLayout();
+ }
+
+ return false;
+}
+
void LLFacebookStatusPanel::sendStatus()
{
std::string message = mMessageTextEditor->getValue().asString();
@@ -169,6 +212,103 @@ void LLFacebookStatusPanel::sendStatus()
}
}
+void LLFacebookStatusPanel::onVisibilityChange(BOOL visible)
+{
+ if(visible)
+ {
+ LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
+ LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1));
+
+ LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
+ LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this));
+
+ //Connected
+ if(LLFacebookConnect::instance().isConnected())
+ {
+ showConnectedLayout();
+ }
+ //Check if connected (show disconnected layout in meantime)
+ else
+ {
+ showDisconnectedLayout();
+ }
+ if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) ||
+ (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED))
+ {
+ LLFacebookConnect::instance().checkConnectionToFacebook();
+ }
+ }
+ else
+ {
+ LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
+ LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
+ }
+}
+
+bool LLFacebookStatusPanel::onFacebookConnectInfoChange()
+{
+ LLSD info = LLFacebookConnect::instance().getInfo();
+ std::string clickable_name;
+
+ //Strings of format [http://www.somewebsite.com Click Me] become clickable text
+ if(info.has("link") && info.has("name"))
+ {
+ clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]";
+ }
+
+ mAccountNameLabel->setText(clickable_name);
+
+ return false;
+}
+
+void LLFacebookStatusPanel::showConnectButton()
+{
+ if(!mConnectButton->getVisible())
+ {
+ mConnectButton->setVisible(TRUE);
+ mDisconnectButton->setVisible(FALSE);
+ }
+}
+
+void LLFacebookStatusPanel::hideConnectButton()
+{
+ if(mConnectButton->getVisible())
+ {
+ mConnectButton->setVisible(FALSE);
+ mDisconnectButton->setVisible(TRUE);
+ }
+}
+
+void LLFacebookStatusPanel::showDisconnectedLayout()
+{
+ mAccountCaptionLabel->setText(getString("facebook_disconnected"));
+ mAccountNameLabel->setText(std::string(""));
+ showConnectButton();
+}
+
+void LLFacebookStatusPanel::showConnectedLayout()
+{
+ LLFacebookConnect::instance().loadFacebookInfo();
+
+ mAccountCaptionLabel->setText(getString("facebook_connected"));
+ hideConnectButton();
+}
+
+void LLFacebookStatusPanel::onConnect()
+{
+ LLFacebookConnect::instance().checkConnectionToFacebook(true);
+
+ //Clear only the facebook browser cookies so that the facebook login screen appears
+ LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");
+}
+
+void LLFacebookStatusPanel::onDisconnect()
+{
+ LLFacebookConnect::instance().disconnectFromFacebook();
+
+ LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");
+}
+
void LLFacebookStatusPanel::clearAndClose()
{
mMessageTextEditor->setValue("");
@@ -185,7 +325,6 @@ void LLFacebookStatusPanel::clearAndClose()
///////////////////////////
LLFacebookPhotoPanel::LLFacebookPhotoPanel() :
-mSnapshotPanel(NULL),
mResolutionComboBox(NULL),
mRefreshBtn(NULL),
mBtnPreview(NULL),
@@ -213,7 +352,6 @@ BOOL LLFacebookPhotoPanel::postBuild()
{
setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2));
- mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw!
mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE));
@@ -300,16 +438,9 @@ void LLFacebookPhotoPanel::draw()
// calc preview offset within the preview rect
const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ;
const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
+ S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+ S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
- // calc preview offset within the floater rect
- // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
- // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
- // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
- S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
- S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-
- mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
-
gGL.matrixMode(LLRender::MM_MODELVIEW);
// Apply floater transparency to the texture unless the floater is focused.
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
@@ -344,7 +475,7 @@ void LLFacebookPhotoPanel::onVisibilityChange(BOOL visible)
LLSnapshotLivePreview* preview = getPreviewView();
if(preview)
{
- lldebugs << "opened, updating snapshot" << llendl;
+ LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
preview->updateSnapshot(TRUE);
}
}
@@ -477,7 +608,7 @@ void LLFacebookPhotoPanel::updateControls()
BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
// *TODO: Separate maximum size for Web images from postcards
- lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+ LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
updateResolution(FALSE);
}
@@ -507,13 +638,13 @@ void LLFacebookPhotoPanel::updateResolution(BOOL do_update)
if (width == 0 || height == 0)
{
// take resolution from current window size
- lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+ LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
}
else
{
// use the resolution from the selected pre-canned drop-down choice
- lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+ LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
previewp->setSize(width, height);
}
@@ -887,164 +1018,6 @@ bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data)
return false;
}
-///////////////////////////
-//LLFacebookAccountPanel//////
-///////////////////////////
-
-LLFacebookAccountPanel::LLFacebookAccountPanel() :
-mAccountCaptionLabel(NULL),
-mAccountNameLabel(NULL),
-mPanelButtons(NULL),
-mConnectButton(NULL),
-mDisconnectButton(NULL)
-{
- mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookAccountPanel::onConnect, this));
- mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookAccountPanel::onDisconnect, this));
-
- setVisibleCallback(boost::bind(&LLFacebookAccountPanel::onVisibilityChange, this, _2));
-}
-
-BOOL LLFacebookAccountPanel::postBuild()
-{
- mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label");
- mAccountNameLabel = getChild<LLTextBox>("account_name_label");
- mPanelButtons = getChild<LLUICtrl>("panel_buttons");
- mConnectButton = getChild<LLUICtrl>("connect_btn");
- mDisconnectButton = getChild<LLUICtrl>("disconnect_btn");
-
- return LLPanel::postBuild();
-}
-
-void LLFacebookAccountPanel::draw()
-{
- LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState();
-
- //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress
- bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING;
- mDisconnectButton->setEnabled(!disconnecting);
-
- //Disable the 'connect' button when a connection is in progress
- bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS;
- mConnectButton->setEnabled(!connecting);
-
- LLPanel::draw();
-}
-
-void LLFacebookAccountPanel::onVisibilityChange(BOOL visible)
-{
- if(visible)
- {
- LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
- LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectStateChange, this, _1));
-
- LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
- LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectInfoChange, this));
-
- //Connected
- if(LLFacebookConnect::instance().isConnected())
- {
- showConnectedLayout();
- }
- //Check if connected (show disconnected layout in meantime)
- else
- {
- showDisconnectedLayout();
- }
- if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) ||
- (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED))
- {
- LLFacebookConnect::instance().checkConnectionToFacebook();
- }
- }
- else
- {
- LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel");
- LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel");
- }
-}
-
-bool LLFacebookAccountPanel::onFacebookConnectStateChange(const LLSD& data)
-{
- if(LLFacebookConnect::instance().isConnected())
- {
- //In process of disconnecting so leave the layout as is
- if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING)
- {
- showConnectedLayout();
- }
- }
- else
- {
- showDisconnectedLayout();
- }
-
- return false;
-}
-
-bool LLFacebookAccountPanel::onFacebookConnectInfoChange()
-{
- LLSD info = LLFacebookConnect::instance().getInfo();
- std::string clickable_name;
-
- //Strings of format [http://www.somewebsite.com Click Me] become clickable text
- if(info.has("link") && info.has("name"))
- {
- clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]";
- }
-
- mAccountNameLabel->setText(clickable_name);
-
- return false;
-}
-
-void LLFacebookAccountPanel::showConnectButton()
-{
- if(!mConnectButton->getVisible())
- {
- mConnectButton->setVisible(TRUE);
- mDisconnectButton->setVisible(FALSE);
- }
-}
-
-void LLFacebookAccountPanel::hideConnectButton()
-{
- if(mConnectButton->getVisible())
- {
- mConnectButton->setVisible(FALSE);
- mDisconnectButton->setVisible(TRUE);
- }
-}
-
-void LLFacebookAccountPanel::showDisconnectedLayout()
-{
- mAccountCaptionLabel->setText(getString("facebook_disconnected"));
- mAccountNameLabel->setText(std::string(""));
- showConnectButton();
-}
-
-void LLFacebookAccountPanel::showConnectedLayout()
-{
- LLFacebookConnect::instance().loadFacebookInfo();
-
- mAccountCaptionLabel->setText(getString("facebook_connected"));
- hideConnectButton();
-}
-
-void LLFacebookAccountPanel::onConnect()
-{
- LLFacebookConnect::instance().checkConnectionToFacebook(true);
-
- //Clear only the facebook browser cookies so that the facebook login screen appears
- LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");
-}
-
-void LLFacebookAccountPanel::onDisconnect()
-{
- LLFacebookConnect::instance().disconnectFromFacebook();
-
- LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com");
-}
-
////////////////////////
//LLFloaterFacebook///////
////////////////////////
@@ -1094,7 +1067,7 @@ void LLFloaterFacebook::showPhotoPanel()
LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFacebookPhotoPanel->getParent());
if (!parent)
{
- llwarns << "Cannot find panel container" << llendl;
+ LL_WARNS() << "Cannot find panel container" << LL_ENDL;
return;
}
diff --git a/indra/newview/llfloaterfacebook.h b/indra/newview/llfloaterfacebook.h
index 34356412d6..a4ca666b20 100644
--- a/indra/newview/llfloaterfacebook.h
+++ b/indra/newview/llfloaterfacebook.h
@@ -46,11 +46,28 @@ public:
void draw();
void onSend();
bool onFacebookConnectStateChange(const LLSD& data);
+ bool onFacebookConnectAccountStateChange(const LLSD& data);
void sendStatus();
void clearAndClose();
private:
+ void onVisibilityChange(BOOL new_visibility);
+ bool onFacebookConnectInfoChange();
+ void onConnect();
+ void onUseAnotherAccount();
+ void onDisconnect();
+
+ void showConnectButton();
+ void hideConnectButton();
+ void showDisconnectedLayout();
+ void showConnectedLayout();
+
+ LLTextBox * mAccountCaptionLabel;
+ LLTextBox * mAccountNameLabel;
+ LLUICtrl * mPanelButtons;
+ LLUICtrl * mConnectButton;
+ LLUICtrl * mDisconnectButton;
LLUICtrl* mMessageTextEditor;
LLUICtrl* mPostButton;
LLUICtrl* mCancelButton;
@@ -87,7 +104,6 @@ private:
LLHandle<LLView> mPreviewHandle;
- LLUICtrl * mSnapshotPanel;
LLUICtrl * mResolutionComboBox;
LLUICtrl * mFilterComboBox;
LLUICtrl * mRefreshBtn;
@@ -147,33 +163,6 @@ private:
LLAvatarList* mSuggestedFriends;
};
-class LLFacebookAccountPanel : public LLPanel
-{
-public:
- LLFacebookAccountPanel();
- BOOL postBuild();
- void draw();
-
-private:
- void onVisibilityChange(BOOL new_visibility);
- bool onFacebookConnectStateChange(const LLSD& data);
- bool onFacebookConnectInfoChange();
- void onConnect();
- void onUseAnotherAccount();
- void onDisconnect();
-
- void showConnectButton();
- void hideConnectButton();
- void showDisconnectedLayout();
- void showConnectedLayout();
-
- LLTextBox * mAccountCaptionLabel;
- LLTextBox * mAccountNameLabel;
- LLUICtrl * mPanelButtons;
- LLUICtrl * mConnectButton;
- LLUICtrl * mDisconnectButton;
-};
-
class LLFloaterFacebook : public LLFloater
{
public:
diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp
index 4e6d98ecfa..36afab86b7 100644
--- a/indra/newview/llfloaterflickr.cpp
+++ b/indra/newview/llfloaterflickr.cpp
@@ -65,7 +65,6 @@ const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife";
///////////////////////////
LLFlickrPhotoPanel::LLFlickrPhotoPanel() :
-mSnapshotPanel(NULL),
mResolutionComboBox(NULL),
mRefreshBtn(NULL),
mBtnPreview(NULL),
@@ -96,7 +95,6 @@ BOOL LLFlickrPhotoPanel::postBuild()
{
setVisibleCallback(boost::bind(&LLFlickrPhotoPanel::onVisibilityChange, this, _2));
- mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
mResolutionComboBox->setCommitCallback(boost::bind(&LLFlickrPhotoPanel::updateResolution, this, TRUE));
mFilterComboBox = getChild<LLUICtrl>("filters_combobox");
@@ -191,16 +189,9 @@ void LLFlickrPhotoPanel::draw()
// calc preview offset within the preview rect
const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ;
const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
+ S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+ S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
- // calc preview offset within the floater rect
- // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
- // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
- // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
- S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
- S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-
- mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
-
gGL.matrixMode(LLRender::MM_MODELVIEW);
// Apply floater transparency to the texture unless the floater is focused.
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
@@ -235,7 +226,7 @@ void LLFlickrPhotoPanel::onVisibilityChange(BOOL visible)
LLSnapshotLivePreview* preview = getPreviewView();
if(preview)
{
- lldebugs << "opened, updating snapshot" << llendl;
+ LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
preview->updateSnapshot(TRUE);
}
}
@@ -427,7 +418,7 @@ void LLFlickrPhotoPanel::updateControls()
BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
// *TODO: Separate maximum size for Web images from postcards
- lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+ LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
updateResolution(FALSE);
}
@@ -457,13 +448,13 @@ void LLFlickrPhotoPanel::updateResolution(BOOL do_update)
if (width == 0 || height == 0)
{
// take resolution from current window size
- lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+ LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
}
else
{
// use the resolution from the selected pre-canned drop-down choice
- lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+ LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
previewp->setSize(width, height);
}
@@ -726,7 +717,7 @@ void LLFloaterFlickr::showPhotoPanel()
LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFlickrPhotoPanel->getParent());
if (!parent)
{
- llwarns << "Cannot find panel container" << llendl;
+ LL_WARNS() << "Cannot find panel container" << LL_ENDL;
return;
}
diff --git a/indra/newview/llfloaterflickr.h b/indra/newview/llfloaterflickr.h
index ba27c9a3d8..74da3bcea9 100644
--- a/indra/newview/llfloaterflickr.h
+++ b/indra/newview/llfloaterflickr.h
@@ -67,7 +67,6 @@ private:
LLHandle<LLView> mPreviewHandle;
- LLUICtrl * mSnapshotPanel;
LLUICtrl * mResolutionComboBox;
LLUICtrl * mFilterComboBox;
LLUICtrl * mRefreshBtn;
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 7213064746..d01c089eaf 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1517,6 +1517,8 @@ void LLPanelLandObjects::onClickRefresh(void* userdata)
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if (!region) return;
+ self->mBtnRefresh->setEnabled(false);
+
// ready the list for results
self->mOwnerList->deleteAllItems();
self->mOwnerList->setCommentText(LLTrans::getString("Searching"));
@@ -1576,6 +1578,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
{
msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);
}
+
if (owner_id.isNull())
{
continue;
@@ -1611,10 +1614,10 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date");
self->mOwnerList->addNameItemRow(item_params);
-
LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent")
<< ") owns " << object_count << " objects." << LL_ENDL;
}
+
// check for no results
if (0 == self->mOwnerList->getItemCount())
{
@@ -1624,6 +1627,8 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
{
self->mOwnerList->setEnabled(TRUE);
}
+
+ self->mBtnRefresh->setEnabled(true);
}
// static
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 5e9b25b474..a2af9da670 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -481,6 +481,17 @@ void LLFloaterRegionInfo::refresh()
}
}
+void LLFloaterRegionInfo::enableTopButtons()
+{
+ getChildView("top_colliders_btn")->setEnabled(true);
+ getChildView("top_scripts_btn")->setEnabled(true);
+}
+
+void LLFloaterRegionInfo::disableTopButtons()
+{
+ getChildView("top_colliders_btn")->setEnabled(false);
+ getChildView("top_scripts_btn")->setEnabled(false);
+}
///----------------------------------------------------------------------------
/// Local class implementation
@@ -1033,6 +1044,11 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
if(!instance) return;
LLFloaterReg::showInstance("top_objects");
instance->clearList();
+ instance->disableRefreshBtn();
+
+ self->getChildView("top_colliders_btn")->setEnabled(false);
+ self->getChildView("top_scripts_btn")->setEnabled(false);
+
self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
}
@@ -1047,6 +1063,11 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
if(!instance) return;
LLFloaterReg::showInstance("top_objects");
instance->clearList();
+ instance->disableRefreshBtn();
+
+ self->getChildView("top_colliders_btn")->setEnabled(false);
+ self->getChildView("top_scripts_btn")->setEnabled(false);
+
self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 5bc4273d5f..792f60ebc8 100755
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -96,6 +96,8 @@ public:
void requestRegionInfo();
void requestMeshRezInfo();
+ void enableTopButtons();
+ void disableTopButtons();
private:
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 960d3f35dd..8677028942 100755
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -62,7 +62,6 @@ const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");
-
///----------------------------------------------------------------------------
/// Class LLFloaterSnapshot::Impl
///----------------------------------------------------------------------------
@@ -96,7 +95,6 @@ public:
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
static void onClickFilter(LLUICtrl *ctrl, void* data);
//static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data);
- static void onClickMore(void* data) ;
static void onClickUICheck(LLUICtrl *ctrl, void* data);
static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked);
@@ -264,29 +262,34 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot");
- // Show/hide advanced options.
- LLPanel* advanced_options_panel = floaterp->getChild<LLPanel>("advanced_options_panel");
- floaterp->getChild<LLButton>("advanced_options_btn")->setImageOverlay(advanced ? "TabIcon_Open_Off" : "TabIcon_Close_Off");
- if (advanced != advanced_options_panel->getVisible())
+ //BD - Automatically calculate the size of our snapshot window to enlarge
+ // the snapshot preview to its maximum size, this is especially helpfull
+ // for pretty much every aspect ratio other than 1:1.
+ F32 panel_width = 400.f * gViewerWindow->getWorldViewAspectRatio();
+
+ //BD - Make sure we clamp at 700 here because 700 would be for 16:9 which we
+ // consider the maximum. Everything bigger will be clamped and will have
+ // a slightly smaller preview window which most likely won't fill up the
+ // whole snapshot floater as it should.
+ if(panel_width > 700.f)
{
- S32 panel_width = advanced_options_panel->getRect().getWidth();
- floaterp->getChild<LLPanel>("advanced_options_panel")->setVisible(advanced);
- S32 floater_width = floaterp->getRect().getWidth();
- floater_width += (advanced ? panel_width : -panel_width);
- floaterp->reshape(floater_width, floaterp->getRect().getHeight());
+ panel_width = 700.f;
}
- if(!advanced) //set to original window resolution
+ S32 floater_width = 224.f;
+ if(advanced)
{
- previewp->mKeepAspectRatio = TRUE;
-
- floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0);
- floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0);
- floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0);
- floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0);
+ floater_width = floater_width + panel_width;
+ }
- LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
- previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
+ LLUICtrl* thumbnail_placeholder = floaterp->getChild<LLUICtrl>("thumbnail_placeholder");
+ thumbnail_placeholder->setVisible(advanced);
+ thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight());
+ floaterp->getChild<LLUICtrl>("image_res_text")->setVisible(advanced);
+ floaterp->getChild<LLUICtrl>("file_size_label")->setVisible(advanced);
+ if(!floaterp->isMinimized())
+ {
+ floaterp->reshape(floater_width, floaterp->getRect().getHeight());
}
bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean();
@@ -388,7 +391,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
height_ctrl->setValue(h);
}
- // Сlamp snapshot resolution to window size when showing UI or HUD in snapshot.
+ // Clamp snapshot resolution to window size when showing UI or HUD in snapshot.
if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
{
S32 width = gViewerWindow->getWindowWidthRaw();
@@ -576,25 +579,11 @@ void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data)
LLComboBox* filterbox = static_cast<LLComboBox *>(view->getChild<LLComboBox>("filters_combobox"));
std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : "");
previewp->setFilter(filter_name);
- previewp->updateSnapshot(FALSE, TRUE);
+ previewp->updateSnapshot(TRUE);
}
}
}
-void LLFloaterSnapshot::Impl::onClickMore(void* data)
-{
- BOOL visible = gSavedSettings.getBOOL("AdvanceSnapshot");
-
- LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
- if (view)
- {
- view->impl.setStatus(Impl::STATUS_READY);
- gSavedSettings.setBOOL("AdvanceSnapshot", !visible);
- updateControls(view) ;
- updateLayout(view) ;
- }
-}
-
// static
void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
{
@@ -772,6 +761,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
S32 original_width = 0 , original_height = 0 ;
previewp->getSize(original_width, original_height) ;
+ if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
+ { //clamp snapshot resolution to window size when showing UI or HUD in snapshot
+ width = llmin(width, gViewerWindow->getWindowWidthRaw());
+ height = llmin(height, gViewerWindow->getWindowHeightRaw());
+ }
+
if (width == 0 || height == 0)
{
// take resolution from current window size
@@ -817,14 +812,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
checkAspectRatio(view, width) ;
previewp->getSize(width, height);
-
- if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot"))
- { //clamp snapshot resolution to window size when showing UI or HUD in snapshot
- width = llmin(width, gViewerWindow->getWindowWidthRaw());
- height = llmin(height, gViewerWindow->getWindowHeightRaw());
- }
- updateSpinners(view, previewp, width, height, TRUE); // may change width and height
+ // We use the height spinner here because we come here via the aspect ratio
+ // checkbox as well and we want height always changing to width by default.
+ // If we use the width spinner we would change width according to height by
+ // default, that is not what we want.
+ updateSpinners(view, previewp, width, height, !getHeightSpinner(view)->isDirty()); // may change width and height
if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height)
{
@@ -839,12 +832,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
// hide old preview as the aspect ratio could be wrong
checkAutoSnapshot(previewp, FALSE);
LL_DEBUGS() << "updating thumbnail" << LL_ENDL;
- getPreviewView(view)->updateSnapshot(FALSE, TRUE);
+ getPreviewView(view)->updateSnapshot(TRUE);
if(do_update)
{
LL_DEBUGS() << "Will update controls" << LL_ENDL;
updateControls(view);
- setNeedRefresh(view, true);
}
}
}
@@ -887,7 +879,6 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view)
LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL;
getPreviewView(view)->updateSnapshot(TRUE);
updateControls(view);
- setNeedRefresh(view, false); // we're refreshing
}
}
@@ -956,6 +947,8 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view
// static
void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed)
{
+ getWidthSpinner(view)->resetDirty();
+ getHeightSpinner(view)->resetDirty();
if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize()))
{
setImageSizeSpinnersValues(view, width, height);
@@ -965,8 +958,6 @@ void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshot
// static
void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h)
{
- bool need_refresh = false;
-
LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL;
if (!view) return;
@@ -981,25 +972,16 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32
//if to upload a snapshot, process spinner input in a special way.
previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ;
- updateSpinners(view, previewp, w, h, w != curw); // may change w and h
-
previewp->setSize(w,h);
checkAutoSnapshot(previewp, FALSE);
- LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL;
- previewp->updateSnapshot(FALSE, TRUE);
comboSetCustom(view, "profile_size_combo");
comboSetCustom(view, "postcard_size_combo");
comboSetCustom(view, "texture_size_combo");
comboSetCustom(view, "local_size_combo");
- need_refresh = true;
+ LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL;
+ previewp->updateSnapshot(TRUE);
}
}
-
- updateControls(view);
- if (need_refresh)
- {
- setNeedRefresh(view, true); // need to do this after updateControls()
- }
}
// static
@@ -1055,8 +1037,6 @@ BOOL LLFloaterSnapshot::postBuild()
mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");
mFailureLblPanel = getChild<LLUICtrl>("failed_panel");
- childSetAction("advanced_options_btn", Impl::onClickMore, this);
-
childSetCommitCallback("ui_check", Impl::onClickUICheck, this);
getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));
@@ -1075,24 +1055,15 @@ BOOL LLFloaterSnapshot::postBuild()
getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot"));
childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
+
// Filters
LLComboBox* filterbox = getChild<LLComboBox>("filters_combobox");
- if (gSavedSettings.getBOOL("SnapshotFiltersEnabled"))
- {
- // Update filter list if setting is on (experimental)
- std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList();
- for (U32 i = 0; i < filter_list.size(); i++)
- {
- filterbox->add(filter_list[i]);
- }
- childSetCommitCallback("filters_combobox", Impl::onClickFilter, this);
- }
- else
+ std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList();
+ for (U32 i = 0; i < filter_list.size(); i++)
{
- // Hide Filter UI if setting is off (default)
- getChild<LLUICtrl>("filter_list_label")->setVisible(FALSE);
- filterbox->setVisible(FALSE);
+ filterbox->add(filter_list[i]);
}
+ childSetCommitCallback("filters_combobox", Impl::onClickFilter, this);
LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSnapshotUploadFinished, _1));
LLPostCard::setPostResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSendingPostcardFinished, _1));
@@ -1119,7 +1090,7 @@ BOOL LLFloaterSnapshot::postBuild()
getChild<LLComboBox>("profile_size_combo")->selectNthItem(0);
getChild<LLComboBox>("postcard_size_combo")->selectNthItem(0);
getChild<LLComboBox>("texture_size_combo")->selectNthItem(0);
- getChild<LLComboBox>("local_size_combo")->selectNthItem(0);
+ getChild<LLComboBox>("local_size_combo")->selectNthItem(8);
getChild<LLComboBox>("local_format_combo")->selectNthItem(0);
impl.mPreviewHandle = previewp->getHandle();
@@ -1145,7 +1116,7 @@ void LLFloaterSnapshot::draw()
LLFloater::draw();
- if (previewp && !isMinimized())
+ if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible())
{
if(previewp->getThumbnailImage())
{
@@ -1172,44 +1143,13 @@ void LLFloaterSnapshot::draw()
previewp->drawPreviewRect(offset_x, offset_y) ;
- // Draw some controls on top of the preview thumbnail.
- static const S32 PADDING = 5;
- static const S32 REFRESH_LBL_BG_HEIGHT = 32;
-
- // Reshape and position the posting result message panels at the top of the thumbnail.
- // Do this regardless of current posting status (finished or not) to avoid flicker
- // when the result message is displayed for the first time.
- // if (impl.getStatus() == Impl::STATUS_FINISHED)
- {
- LLRect result_lbl_rect = mSucceessLblPanel->getRect();
- const S32 result_lbl_h = result_lbl_rect.getHeight();
- result_lbl_rect.setLeftTopAndSize(local_offset_x, local_offset_y + thumbnail_h, thumbnail_w - 1, result_lbl_h);
- mSucceessLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h);
- mSucceessLblPanel->setRect(result_lbl_rect);
- mFailureLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h);
- mFailureLblPanel->setRect(result_lbl_rect);
- }
-
- // Position the refresh button in the bottom left corner of the thumbnail.
- mRefreshBtn->setOrigin(local_offset_x + PADDING, local_offset_y + PADDING);
-
- if (impl.mNeedRefresh)
- {
- // Place the refresh hint text to the right of the refresh button.
- const LLRect& refresh_btn_rect = mRefreshBtn->getRect();
- mRefreshLabel->setOrigin(refresh_btn_rect.mLeft + refresh_btn_rect.getWidth() + PADDING, refresh_btn_rect.mBottom);
-
- // Draw the refresh hint background.
- LLRect refresh_label_bg_rect(offset_x, offset_y + REFRESH_LBL_BG_HEIGHT, offset_x + thumbnail_w - 1, offset_y);
- gl_rect_2d(refresh_label_bg_rect, LLColor4::white % 0.9f, TRUE);
- }
-
gGL.pushUIMatrix();
LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom);
sThumbnailPlaceholder->draw();
gGL.popUIMatrix();
}
}
+ impl.updateLayout(this);
}
void LLFloaterSnapshot::onOpen(const LLSD& key)
@@ -1225,6 +1165,9 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
gSnapshotFloaterView->setVisible(TRUE);
gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
+ impl.updateControls(this);
+ impl.updateLayout(this);
+
// Initialize default tab.
getChild<LLSideTrayPanelContainer>("panel_container")->getCurrentPanel()->onOpen(LLSD());
}
@@ -1293,8 +1236,6 @@ S32 LLFloaterSnapshot::notify(const LLSD& info)
{
// Disable the send/post/save buttons until snapshot is ready.
impl.updateControls(this);
- // Force hiding the "Refresh to save" hint because we know we've just started refresh.
- impl.setNeedRefresh(this, false);
return 1;
}
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 7530c72dd2..d604b8619a 100755
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -50,6 +50,7 @@
#include "llviewerregion.h"
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
+#include "llfloaterregioninfo.h"
//LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL;
@@ -207,7 +208,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
columns[column_num++]["font"] = "SANSSERIF";
columns[column_num]["column"] = "location";
- columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
+ columns[column_num]["value"] = llformat("<%0.f, %0.f, %0.f>", location_x, location_y, location_z);
columns[column_num++]["font"] = "SANSSERIF";
columns[column_num]["column"] = "parcel";
@@ -257,6 +258,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
format.setArg("[COUNT]", llformat("%d", total_count));
format.setArg("[TIME]", llformat("%0.3f", mtotalScore));
getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
+ list->setColumnLabel("URLs", getString("URLs"));
+ list->setColumnLabel("memory", getString("memory"));
}
else
{
@@ -268,6 +271,13 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
format.setArg("[COUNT]", llformat("%d", total_count));
getChild<LLUICtrl>("title_text")->setValue(LLSD(format));
}
+
+ LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if(region_info_floater)
+ {
+ region_info_floater->enableTopButtons();
+ }
+ getChildView("refresh_btn")->setEnabled(true);
}
void LLFloaterTopObjects::onCommitObjectsList()
@@ -453,12 +463,24 @@ void LLFloaterTopObjects::onRefresh()
msg->addStringFast(_PREHASH_Filter, filter);
msg->addS32Fast(_PREHASH_ParcelLocalID, 0);
+ LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if(region_info_floater)
+ {
+ region_info_floater->disableTopButtons();
+ }
+ disableRefreshBtn();
+
msg->sendReliable(gAgent.getRegionHost());
mFilter.clear();
mFlags = 0;
}
+void LLFloaterTopObjects::disableRefreshBtn()
+{
+ getChildView("refresh_btn")->setEnabled(false);
+}
+
void LLFloaterTopObjects::onGetByObjectName()
{
mFlags = STAT_FILTER_BY_OBJECT;
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index 28d2aa58e2..dbbe9ac521 100755
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -66,6 +66,7 @@ public:
void onRefresh();
static void setMode(U32 mode);
+ void disableRefreshBtn();
private:
LLFloaterTopObjects(const LLSD& key);
diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp
index 78e9259919..868d623d57 100644
--- a/indra/newview/llfloatertwitter.cpp
+++ b/indra/newview/llfloatertwitter.cpp
@@ -64,7 +64,6 @@ const std::string DEFAULT_STATUS_TEXT = " #SecondLife";
///////////////////////////
LLTwitterPhotoPanel::LLTwitterPhotoPanel() :
-mSnapshotPanel(NULL),
mResolutionComboBox(NULL),
mRefreshBtn(NULL),
mBtnPreview(NULL),
@@ -94,7 +93,6 @@ BOOL LLTwitterPhotoPanel::postBuild()
{
setVisibleCallback(boost::bind(&LLTwitterPhotoPanel::onVisibilityChange, this, _2));
- mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel");
mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox");
mResolutionComboBox->setValue("[i800,i600]"); // hardcoded defaults ftw!
mResolutionComboBox->setCommitCallback(boost::bind(&LLTwitterPhotoPanel::updateResolution, this, TRUE));
@@ -194,15 +192,8 @@ void LLTwitterPhotoPanel::draw()
// calc preview offset within the preview rect
const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ;
const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ;
-
- // calc preview offset within the floater rect
- // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater.
- // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity.
- // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time.
- S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1;
- S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39;
-
- mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>());
+ S32 offset_x = thumbnail_rect.mLeft + local_offset_x;
+ S32 offset_y = thumbnail_rect.mBottom + local_offset_y;
gGL.matrixMode(LLRender::MM_MODELVIEW);
// Apply floater transparency to the texture unless the floater is focused.
@@ -238,7 +229,7 @@ void LLTwitterPhotoPanel::onVisibilityChange(BOOL visible)
LLSnapshotLivePreview* preview = getPreviewView();
if(preview)
{
- lldebugs << "opened, updating snapshot" << llendl;
+ LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL;
preview->updateSnapshot(TRUE);
}
}
@@ -455,7 +446,7 @@ void LLTwitterPhotoPanel::updateControls()
BOOL got_snap = previewp && previewp->getSnapshotUpToDate();
// *TODO: Separate maximum size for Web images from postcards
- lldebugs << "Is snapshot up-to-date? " << got_snap << llendl;
+ LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL;
updateResolution(FALSE);
}
@@ -485,13 +476,13 @@ void LLTwitterPhotoPanel::updateResolution(BOOL do_update)
if (width == 0 || height == 0)
{
// take resolution from current window size
- lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl;
+ LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL;
previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw());
}
else
{
// use the resolution from the selected pre-canned drop-down choice
- lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl;
+ LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL;
previewp->setSize(width, height);
}
@@ -755,7 +746,7 @@ void LLFloaterTwitter::showPhotoPanel()
LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mTwitterPhotoPanel->getParent());
if (!parent)
{
- llwarns << "Cannot find panel container" << llendl;
+ LL_WARNS() << "Cannot find panel container" << LL_ENDL;
return;
}
diff --git a/indra/newview/llfloatertwitter.h b/indra/newview/llfloatertwitter.h
index f07ec2ca2f..d586799d18 100644
--- a/indra/newview/llfloatertwitter.h
+++ b/indra/newview/llfloatertwitter.h
@@ -70,7 +70,6 @@ private:
LLHandle<LLView> mPreviewHandle;
- LLUICtrl * mSnapshotPanel;
LLUICtrl * mResolutionComboBox;
LLUICtrl * mFilterComboBox;
LLUICtrl * mRefreshBtn;
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 000eee3317..0bbb4aeeff 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -37,6 +37,7 @@
#include "llfolderview.h"
#include "llinventorybridge.h"
#include "llviewerfoldertype.h"
+#include "llradiogroup.h"
// linden library includes
#include "llclipboard.h"
@@ -51,6 +52,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)
mMinDate(p.date_range.min_date),
mMaxDate(p.date_range.max_date),
mHoursAgo(p.hours_ago),
+ mDateSearchDirection(p.date_search_direction),
mShowFolderState(p.show_folder_state),
mPermissions(p.permissions),
mFilterTypes(p.types),
@@ -209,6 +211,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
{
const U16 HOURS_TO_SECONDS = 3600;
time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
+
if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
{
earliest = mFilterOps.mMinDate;
@@ -217,9 +220,19 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
{
earliest = 0;
}
- if (listener->getCreationDate() < earliest ||
- listener->getCreationDate() > mFilterOps.mMaxDate)
- return FALSE;
+
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff())
+ {
+ if (listener->getCreationDate() < earliest ||
+ listener->getCreationDate() > mFilterOps.mMaxDate)
+ return FALSE;
+ }
+ else
+ {
+ if (listener->getCreationDate() > earliest ||
+ listener->getCreationDate() > mFilterOps.mMaxDate)
+ return FALSE;
+ }
}
////////////////////////////////////////////////////////////////////////////////
@@ -629,11 +642,22 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
bool is_increasing = hours > mFilterOps.mHoursAgo;
+ bool is_decreasing = hours < mFilterOps.mHoursAgo;
bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();
// *NOTE: need to cache last filter time, in case filter goes stale
- BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
- BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+ BOOL less_restrictive;
+ BOOL more_restrictive;
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)
+ {
+ less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
+ more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+ }
+ else
+ {
+ less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours);
+ more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero);
+ }
mFilterOps.mHoursAgo = hours;
mFilterOps.mMinDate = time_min();
@@ -662,6 +686,20 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
}
}
+void LLInventoryFilter::setDateSearchDirection(U32 direction)
+{
+ if (direction != mFilterOps.mDateSearchDirection)
+ {
+ mFilterOps.mDateSearchDirection = direction;
+ setModified(FILTER_RESTART);
+ }
+}
+
+U32 LLInventoryFilter::getDateSearchDirection() const
+{
+ return mFilterOps.mDateSearchDirection;
+}
+
void LLInventoryFilter::setFilterLinks(U64 filter_links)
{
if (mFilterOps.mFilterLinks != filter_links)
@@ -926,6 +964,7 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
setFilterObjectTypes(other.getFilterObjectTypes());
setDateRange(other.getMinDate(), other.getMaxDate());
setHoursAgo(other.getHoursAgo());
+ setDateSearchDirection(other.getDateSearchDirection());
setShowFolderState(other.getShowFolderState());
setFilterPermissions(other.getFilterPermissions());
setFilterSubString(other.getFilterSubString());
@@ -945,6 +984,7 @@ void LLInventoryFilter::toParams(Params& params) const
params.filter_ops.date_range.min_date = getMinDate();
params.filter_ops.date_range.max_date = getMaxDate();
params.filter_ops.hours_ago = getHoursAgo();
+ params.filter_ops.date_search_direction = getDateSearchDirection();
params.filter_ops.show_folder_state = getShowFolderState();
params.filter_ops.permissions = getFilterPermissions();
params.substring = getFilterSubString();
@@ -966,6 +1006,7 @@ void LLInventoryFilter::fromParams(const Params& params)
}
setDateRange(params.filter_ops.date_range.min_date, params.filter_ops.date_range.max_date);
setHoursAgo(params.filter_ops.hours_ago);
+ setDateSearchDirection(params.filter_ops.date_search_direction);
setShowFolderState(params.filter_ops.show_folder_state);
setFilterPermissions(params.filter_ops.permissions);
setFilterSubString(params.substring);
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index ce516af0b9..0d3d3889cb 100755
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -55,6 +55,12 @@ public:
FILTERTYPE_EMPTYFOLDERS = 0x1 << 5 // pass if folder is not a system folder to be hidden if
};
+ enum EFilterDateDirection
+ {
+ FILTERDATEDIRECTION_NEWER,
+ FILTERDATEDIRECTION_OLDER
+ };
+
enum EFilterLink
{
FILTERLINK_INCLUDE_LINKS, // show links too
@@ -94,7 +100,8 @@ public:
Optional<EFilterLink> links;
Optional<LLUUID> uuid;
Optional<DateRange> date_range;
- Optional<S32> hours_ago;
+ Optional<U32> hours_ago;
+ Optional<U32> date_search_direction;
Optional<EFolderShow> show_folder_state;
Optional<PermissionMask> permissions;
@@ -107,6 +114,7 @@ public:
uuid("uuid"),
date_range("date_range"),
hours_ago("hours_ago", 0),
+ date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),
show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),
permissions("permissions", PERM_NONE)
{}
@@ -124,6 +132,7 @@ public:
time_t mMinDate,
mMaxDate;
U32 mHoursAgo;
+ U32 mDateSearchDirection;
EFolderShow mShowFolderState;
PermissionMask mPermissions;
@@ -177,6 +186,8 @@ public:
void setHoursAgo(U32 hours);
U32 getHoursAgo() const;
+ void setDateSearchDirection(U32 direction);
+ U32 getDateSearchDirection() const;
void setFilterLinks(U64 filter_link);
U64 getFilterLinks() const;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index a4a85e2e8d..db5be2cef5 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -400,6 +400,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours)
getFilter().setHoursAgo(hours);
}
+void LLInventoryPanel::setDateSearchDirection(U32 direction)
+{
+ getFilter().setDateSearchDirection(direction);
+}
+
void LLInventoryPanel::setFilterLinks(U64 filter_links)
{
getFilter().setFilterLinks(filter_links);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 91c3efd8f0..a490dfce5d 100755
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -173,6 +173,7 @@ public:
const std::string getFilterSubString();
void setSinceLogoff(BOOL sl);
void setHoursAgo(U32 hours);
+ void setDateSearchDirection(U32 direction);
BOOL getSinceLogoff();
void setFilterLinks(U64 filter_links);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index b02298090a..6c8765c62d 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -55,6 +55,7 @@
#include "llviewertexturelist.h"
#include "llsidepanelinventory.h"
#include "llfolderview.h"
+#include "llradiogroup.h"
const std::string FILTERS_FILENAME("filters.xml");
@@ -82,6 +83,7 @@ public:
void updateElementsFromFilter();
BOOL getCheckShowEmpty();
BOOL getCheckSinceLogoff();
+ U32 getDateSearchDirection();
static void onTimeAgo(LLUICtrl*, void *);
static void onCloseBtn(void* user_data);
@@ -700,6 +702,30 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() )
{
self->getChild<LLUICtrl>("check_since_logoff")->setValue(false);
+
+ U32 days = (U32)self->mSpinSinceDays->get();
+ U32 hours = (U32)self->mSpinSinceHours->get();
+ if (hours >= 24)
+ {
+ // Try to handle both cases of spinner clicking and text input in a sensible fashion as best as possible.
+ // There is no way to tell if someone has clicked the spinner to get to 24 or input 24 manually, so in
+ // this case add to days. Any value > 24 means they have input the hours manually, so do not add to the
+ // current day value.
+ if (24 == hours) // Got to 24 via spinner clicking or text input of 24
+ {
+ days = days + hours / 24;
+ }
+ else // Text input, so do not add to days
+ {
+ days = hours / 24;
+ }
+ hours = (U32)hours % 24;
+ self->mSpinSinceHours->setFocus(false);
+ self->mSpinSinceDays->setFocus(false);
+ self->mSpinSinceDays->set((F32)days);
+ self->mSpinSinceHours->set((F32)hours);
+ self->mSpinSinceHours->setFocus(true);
+ }
}
}
@@ -719,6 +745,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
std::string filter_string = mFilter->getFilterSubString();
LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
U32 hours = mFilter->getHoursAgo();
+ U32 date_search_direction = mFilter->getDateSearchDirection();
// update the ui elements
setTitle(mFilter->getName());
@@ -740,6 +767,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff());
mSpinSinceHours->set((F32)(hours % 24));
mSpinSinceDays->set((F32)(hours / 24));
+ getChild<LLRadioGroup>("date_search_direction")->setSelectedIndex(date_search_direction);
}
void LLFloaterInventoryFinder::draw()
@@ -840,17 +868,23 @@ void LLFloaterInventoryFinder::draw()
}
U32 days = (U32)mSpinSinceDays->get();
U32 hours = (U32)mSpinSinceHours->get();
- if (hours > 24)
+ if (hours >= 24)
{
- days += hours / 24;
+ days = hours / 24;
hours = (U32)hours % 24;
+ // A UI element that has focus will not display a new value set to it
+ mSpinSinceHours->setFocus(false);
+ mSpinSinceDays->setFocus(false);
mSpinSinceDays->set((F32)days);
mSpinSinceHours->set((F32)hours);
+ mSpinSinceHours->setFocus(true);
}
hours += days * 24;
+
mPanelMainInventory->getPanel()->setHoursAgo(hours);
mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
mPanelMainInventory->setFilterTextFromFilter();
+ mPanelMainInventory->getPanel()->setDateSearchDirection(getDateSearchDirection());
LLPanel::draw();
}
@@ -865,6 +899,11 @@ BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
return getChild<LLUICtrl>("check_since_logoff")->getValue();
}
+U32 LLFloaterInventoryFinder::getDateSearchDirection()
+{
+ return getChild<LLRadioGroup>("date_search_direction")->getSelectedIndex();
+}
+
void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
{
LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp
index 5924448671..56569e3207 100755
--- a/indra/newview/llpanelsnapshot.cpp
+++ b/indra/newview/llpanelsnapshot.cpp
@@ -65,8 +65,6 @@ void LLPanelSnapshot::onOpen(const LLSD& key)
{
LLFloaterSnapshot::getInstance()->notify(LLSD().with("image-format-change", true));
}
-
- updateCustomResControls();
}
LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const
@@ -77,11 +75,6 @@ LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const
void LLPanelSnapshot::enableControls(BOOL enable)
{
setCtrlsEnabled(enable);
- if (enable)
- {
- // Make sure only relevant controls are enabled/shown.
- updateCustomResControls();
- }
}
LLSpinCtrl* LLPanelSnapshot::getWidthSpinner()
@@ -121,16 +114,6 @@ LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer()
return parent;
}
-// virtual
-void LLPanelSnapshot::updateCustomResControls()
-{
- // Only show width/height spinners and the aspect ratio checkbox
- // when a custom resolution is chosen.
- LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName());
- const bool show = combo->getFirstSelectedIndex() == (combo->getItemCount() - 1);
- getChild<LLUICtrl>(getImageSizePanelName())->setVisible(show);
-}
-
void LLPanelSnapshot::updateImageQualityLevel()
{
LLSliderCtrl* quality_slider = getChild<LLSliderCtrl>("image_quality_slider");
@@ -188,8 +171,6 @@ void LLPanelSnapshot::onCustomResolutionCommit()
void LLPanelSnapshot::onResolutionComboCommit(LLUICtrl* ctrl)
{
- updateCustomResControls();
-
LLSD info;
info["combo-res-change"]["control-name"] = ctrl->getName();
LLFloaterSnapshot::getInstance()->notify(info);
diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h
index f3274cf594..42ad798d60 100755
--- a/indra/newview/llpanelsnapshot.h
+++ b/indra/newview/llpanelsnapshot.h
@@ -57,7 +57,6 @@ public:
protected:
LLSideTrayPanelContainer* getParentContainer();
- virtual void updateCustomResControls();
void updateImageQualityLevel();
void goBack(); ///< Switch to the default (Snapshot Options) panel
void cancel();
diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp
index 47e46a968f..c8a201a5c8 100755
--- a/indra/newview/llpanelsnapshotinventory.cpp
+++ b/indra/newview/llpanelsnapshotinventory.cpp
@@ -49,7 +49,6 @@ public:
/*virtual*/ void onOpen(const LLSD& key);
private:
- /*virtual*/ void updateCustomResControls(); ///< Show/hide custom resolution controls (spinners and checkbox)
/*virtual*/ std::string getWidthSpinnerName() const { return "inventory_snapshot_width"; }
/*virtual*/ std::string getHeightSpinnerName() const { return "inventory_snapshot_height"; }
/*virtual*/ std::string getAspectRatioCBName() const { return "inventory_keep_aspect_check"; }
@@ -73,7 +72,6 @@ BOOL LLPanelSnapshotInventory::postBuild()
{
getChild<LLSpinCtrl>(getWidthSpinnerName())->setAllowEdit(FALSE);
getChild<LLSpinCtrl>(getHeightSpinnerName())->setAllowEdit(FALSE);
- getChild<LLUICtrl>(getAspectRatioCBName())->setVisible(FALSE); // we don't keep aspect ratio for inventory textures
return LLPanelSnapshot::postBuild();
}
@@ -85,17 +83,6 @@ void LLPanelSnapshotInventory::onOpen(const LLSD& key)
}
// virtual
-void LLPanelSnapshotInventory::updateCustomResControls()
-{
- LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName());
- S32 selected_idx = combo->getFirstSelectedIndex();
- const bool show = selected_idx == (combo->getItemCount() - 1); // Custom selected
-
- getChild<LLUICtrl>(getWidthSpinnerName())->setVisible(show);
- getChild<LLUICtrl>(getHeightSpinnerName())->setVisible(show);
-}
-
-// virtual
void LLPanelSnapshotInventory::updateControls(const LLSD& info)
{
const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true;
diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp
index 743ef3e329..0fc9ceec83 100755
--- a/indra/newview/llpanelsnapshotoptions.cpp
+++ b/indra/newview/llpanelsnapshotoptions.cpp
@@ -72,7 +72,9 @@ LLPanelSnapshotOptions::LLPanelSnapshotOptions()
mCommitCallbackRegistrar.add("Snapshot.SaveToEmail", boost::bind(&LLPanelSnapshotOptions::onSaveToEmail, this));
mCommitCallbackRegistrar.add("Snapshot.SaveToInventory", boost::bind(&LLPanelSnapshotOptions::onSaveToInventory, this));
mCommitCallbackRegistrar.add("Snapshot.SaveToComputer", boost::bind(&LLPanelSnapshotOptions::onSaveToComputer, this));
-
+ mCommitCallbackRegistrar.add("Snapshot.SendToFacebook", boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this));
+ mCommitCallbackRegistrar.add("Snapshot.SendToTwitter", boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this));
+ mCommitCallbackRegistrar.add("Snapshot.SendToFlickr", boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this));
LLGlobalEconomy::Singleton::getInstance()->addObserver(this);
}
@@ -84,13 +86,6 @@ LLPanelSnapshotOptions::~LLPanelSnapshotOptions()
// virtual
BOOL LLPanelSnapshotOptions::postBuild()
{
- LLTextBox* sendToFacebookTextBox = getChild<LLTextBox>("send_to_facebook_textbox");
- sendToFacebookTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this));
- LLTextBox* sendToTwitterTextBox = getChild<LLTextBox>("send_to_twitter_textbox");
- sendToTwitterTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this));
- LLTextBox* sendToFlickrTextBox = getChild<LLTextBox>("send_to_flickr_textbox");
- sendToFlickrTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this));
-
return LLPanel::postBuild();
}
diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp
index 95c443b826..8e37b1418c 100755
--- a/indra/newview/llpanelsnapshotpostcard.cpp
+++ b/indra/newview/llpanelsnapshotpostcard.cpp
@@ -72,7 +72,6 @@ private:
void onMsgFormFocusRecieved();
void onFormatComboCommit(LLUICtrl* ctrl);
void onQualitySliderCommit(LLUICtrl* ctrl);
- void onTabButtonPress(S32 btn_idx);
void onSend();
bool mHasFirstMsgFocus;
@@ -86,8 +85,6 @@ LLPanelSnapshotPostcard::LLPanelSnapshotPostcard()
{
mCommitCallbackRegistrar.add("Postcard.Send", boost::bind(&LLPanelSnapshotPostcard::onSend, this));
mCommitCallbackRegistrar.add("Postcard.Cancel", boost::bind(&LLPanelSnapshotPostcard::cancel, this));
- mCommitCallbackRegistrar.add("Postcard.Message", boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress, this, 0));
- mCommitCallbackRegistrar.add("Postcard.Settings", boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress, this, 1));
}
@@ -108,8 +105,6 @@ BOOL LLPanelSnapshotPostcard::postBuild()
getChild<LLUICtrl>("image_quality_slider")->setCommitCallback(boost::bind(&LLPanelSnapshotPostcard::onQualitySliderCommit, this, _1));
- getChild<LLButton>("message_btn")->setToggleState(TRUE);
-
return LLPanelSnapshot::postBuild();
}
@@ -218,27 +213,6 @@ void LLPanelSnapshotPostcard::onQualitySliderCommit(LLUICtrl* ctrl)
LLFloaterSnapshot::getInstance()->notify(info); // updates the "SnapshotQuality" setting
}
-void LLPanelSnapshotPostcard::onTabButtonPress(S32 btn_idx)
-{
- LLButton* buttons[2] = {
- getChild<LLButton>("message_btn"),
- getChild<LLButton>("settings_btn"),
- };
-
- // Switch between Message and Settings tabs.
- LLButton* clicked_btn = buttons[btn_idx];
- LLButton* other_btn = buttons[!btn_idx];
- LLSideTrayPanelContainer* container =
- getChild<LLSideTrayPanelContainer>("postcard_panel_container");
-
- container->selectTab(clicked_btn->getToggleState() ? btn_idx : !btn_idx);
- //clicked_btn->setEnabled(FALSE);
- other_btn->toggleState();
- //other_btn->setEnabled(TRUE);
-
- LL_DEBUGS() << "Button #" << btn_idx << " (" << clicked_btn->getName() << ") clicked" << LL_ENDL;
-}
-
void LLPanelSnapshotPostcard::onSend()
{
// Validate input.
diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp
index f61db77169..1aa7041175 100644
--- a/indra/newview/llsnapshotlivepreview.cpp
+++ b/indra/newview/llsnapshotlivepreview.cpp
@@ -151,7 +151,7 @@ F32 LLSnapshotLivePreview::getImageAspect()
void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay)
{
- lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl;
+ LL_DEBUGS() << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << LL_ENDL;
// Update snapshot if requested.
if (new_snapshot)
@@ -195,6 +195,8 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail
mSnapshotDelayTimer.start();
mSnapshotDelayTimer.setTimerExpirySec(delay);
+ mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
+
// Tell the floater container that the snapshot is in the process of updating itself
if (mViewContainer)
{
@@ -594,7 +596,7 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)
}
else
{
- llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+ LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
}
}
// Scale to a power of 2 so it can be mapped to a texture
@@ -642,7 +644,7 @@ LLViewerTexture* LLSnapshotLivePreview::getBigThumbnailImage()
}
else
{
- llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+ LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
}
}
// Scale to a power of 2 so it can be mapped to a texture
@@ -695,7 +697,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
// time to produce a snapshot
if(!previewp->getSnapshotUpToDate())
{
- lldebugs << "producing snapshot" << llendl;
+ LL_DEBUGS() << "producing snapshot" << LL_ENDL;
if (!previewp->mPreviewImage)
{
previewp->mPreviewImage = new LLImageRaw;
@@ -760,7 +762,6 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
curr_preview_image->setFilteringOption(previewp->getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT);
curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP);
- previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
}
}
@@ -775,7 +776,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->setVisible(gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview); // only show fullscreen preview when in freeze frame mode
previewp->mSnapshotDelayTimer.stop();
previewp->mSnapshotActive = FALSE;
- lldebugs << "done creating snapshot" << llendl;
+ LL_DEBUGS() << "done creating snapshot" << LL_ENDL;
}
if (!previewp->getThumbnailUpToDate())
@@ -910,13 +911,13 @@ LLPointer<LLImageFormatted> LLSnapshotLivePreview::getFormattedImage()
}
else
{
- llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl;
+ LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
}
}
// Create the new formatted image of the appropriate format.
LLFloaterSnapshot::ESnapshotFormat format = getSnapshotFormat();
- lldebugs << "Encoding new image of format " << format << llendl;
+ LL_DEBUGS() << "Encoding new image of format " << format << LL_ENDL;
switch (format)
{
@@ -975,6 +976,21 @@ void LLSnapshotLivePreview::saveTexture()
mPreviewImage->getHeight(),
mPreviewImage->getComponents());
+ // Apply the filter to mPreviewImage
+ if (getFilter() != "")
+ {
+ std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter());
+ if (filter_path != "")
+ {
+ LLImageFilter filter(filter_path);
+ filter.executeFilter(scaled);
+ }
+ else
+ {
+ LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL;
+ }
+ }
+
scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);
LL_DEBUGS() << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << LL_ENDL;
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index b1194dcd1b..a763d42a8d 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -47,23 +47,22 @@ public:
LL_DEBUGS("SyntaxLSL") << "Instantiating with file saving to: '" << filespec << "'" << LL_ENDL;
}
- virtual void errorWithContent(U32 status,
- const std::string& reason,
- const LLSD& content)
+ /* virtual */ void httpFailure()
{
- LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << status << "]: " << content << LL_ENDL;
+ LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << getStatus() << "]: " << getContent() << LL_ENDL;
}
- virtual void result(const LLSD& content_ref)
+ /* virtual */ void httpSuccess()
{
// Continue only if a valid LLSD object was returned.
- if (content_ref.isMap())
+ const LLSD& content = getContent();
+ if (content.isMap())
{
- if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content_ref))
+ if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content))
{
- LLSyntaxIdLSL::getInstance()->setKeywordsXml(content_ref);
+ LLSyntaxIdLSL::getInstance()->setKeywordsXml(content);
- cacheFile(content_ref);
+ cacheFile(content);
LLSyntaxIdLSL::getInstance()->handleFileFetched(mFileSpec);
}
else
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 9ea46cab68..d9a874be49 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -4,7 +4,7 @@
*
* $LicenseInfo:firstyear=2000&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2012-2013, Linden Research, Inc.
+ * Copyright (C) 2012-2014, 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
@@ -244,6 +244,13 @@ LLTrace::EventStatHandle<F64Milliseconds > LLTextureFetch::sCacheReadLatency("te
static const S32 HTTP_REQUESTS_IN_QUEUE_HIGH_WATER = 40; // Maximum requests to have active in HTTP
static const S32 HTTP_REQUESTS_IN_QUEUE_LOW_WATER = 20; // Active level at which to refill
+// BUG-3323/SH-4375
+// *NOTE: This is a heuristic value. Texture fetches have a habit of using a
+// value of 32MB to indicate 'get the rest of the image'. Certain ISPs and
+// network equipment get confused when they see this in a Range: header. So,
+// if the request end is beyond this value, we issue an open-ended Range:
+// request (e.g. 'Range: <start>-') which seems to fix the problem.
+static const S32 HTTP_REQUESTS_RANGE_END_MAX = 20000000;
//////////////////////////////////////////////////////////////////////////////
@@ -266,6 +273,9 @@ static const char* e_state_name[] =
"DONE"
};
+// Log scope
+static const char * const LOG_TXT = "Texture";
+
class LLTextureFetchWorker : public LLWorkerClass, public LLCore::HttpHandler
{
@@ -926,7 +936,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
calcWorkPriority();
mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
-// LL_INFOS() << "Create: " << mID << " mHost:" << host << " Discard=" << discard << LL_ENDL;
+// LL_INFOS(LOG_TXT) << "Create: " << mID << " mHost:" << host << " Discard=" << discard << LL_ENDL;
if (!mFetcher->mDebugPause)
{
U32 work_priority = mWorkPriority | LLWorkerThread::PRIORITY_HIGH;
@@ -937,7 +947,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
LLTextureFetchWorker::~LLTextureFetchWorker()
{
-// LL_INFOS() << "Destroy: " << mID
+// LL_INFOS(LOG_TXT) << "Destroy: " << mID
// << " Decoded=" << mDecodedDiscard
// << " Requested=" << mRequestedDiscard
// << " Desired=" << mDesiredDiscard << LL_ENDL;
@@ -1001,7 +1011,7 @@ void LLTextureFetchWorker::setupPacketData()
mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
{
- LL_WARNS() << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
removeFromCache();
resetFormattedData();
clearPackets();
@@ -1124,14 +1134,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)
{
- LL_DEBUGS("Texture") << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
return true; // abort
}
}
if(mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)
{
//nowhere to get data, abort.
- LL_WARNS("Texture") << mID << " abort, nowhere to get data" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " abort, nowhere to get data" << LL_ENDL;
return true ;
}
@@ -1177,8 +1187,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
setState(LOAD_FROM_TEXTURE_CACHE);
mInCache = FALSE;
mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE
- LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
- << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
+ << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
// fall through
}
@@ -1246,7 +1256,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
//
//This should never happen
//
- LL_DEBUGS("Texture") << mID << " this should never happen" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " this should never happen" << LL_ENDL;
return false;
}
}
@@ -1267,15 +1277,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
mLoadedDiscard = mDesiredDiscard;
if (mLoadedDiscard < 0)
{
- LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
- << ", should be >=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+ << ", should be >=0" << LL_ENDL;
}
setState(DECODE_IMAGE);
mInCache = TRUE;
mWriteToCacheState = NOT_WRITE ;
- LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
- << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
- << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
+ << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
+ << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
record(LLTextureFetch::sCacheHitRate, LLUnits::Ratio::fromValue(1));
}
else
@@ -1283,13 +1293,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mUrl.compare(0, 7, "file://") == 0)
{
// failed to load local file, we're done.
- LL_WARNS("Texture") << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
return true;
}
// need more data
else
{
- LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Not in Cache" << LL_ENDL;
setState(LOAD_FROM_NETWORK);
}
@@ -1306,11 +1316,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (wait_seconds <= 0.0)
{
- LL_INFOS() << mID << " retrying now" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << mID << " retrying now" << LL_ENDL;
}
else
{
- //LL_INFOS() << mID << " waiting to retry for " << wait_seconds << " seconds" << LL_ENDL;
+ //LL_INFOS(LOG_TXT) << mID << " waiting to retry for " << wait_seconds << " seconds" << LL_ENDL;
return false;
}
}
@@ -1333,20 +1343,23 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (mFTType != FTT_DEFAULT)
{
- LL_WARNS() << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
}
setUrl(http_url + "/?texture_id=" + mID.asString().c_str());
+ LL_DEBUGS("Texture") << "Texture URL " << mUrl << LL_ENDL;
mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
}
else
{
mCanUseHTTP = false ;
+ LL_DEBUGS("Texture") << "Texture not available via HTTP: no URL " << mUrl << LL_ENDL;
}
}
else
{
// This will happen if not logged in or if a region deoes not have HTTP Texture enabled
- //LL_WARNS() << "Region not found for host: " << mHost << LL_ENDL;
+ //LL_WARNS(LOG_TXT) << "Region not found for host: " << mHost << LL_ENDL;
+ LL_DEBUGS("Texture") << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
mCanUseHTTP = false;
}
}
@@ -1400,20 +1413,20 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
if (processSimulatorPackets())
{
- LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
mFetcher->removeFromNetworkQueue(this, false);
if (mFormattedImage.isNull() || !mFormattedImage->getDataSize())
{
// processSimulatorPackets() failed
-// LL_WARNS() << "processSimulatorPackets() failed to load buffer" << LL_ENDL;
- LL_WARNS("Texture") << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "processSimulatorPackets() failed to load buffer" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
return true; // failed
}
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
if (mLoadedDiscard < 0)
{
- LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
- << ", should be >=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+ << ", should be >=0" << LL_ENDL;
}
setState(DECODE_IMAGE);
mWriteToCacheState = SHOULD_WRITE;
@@ -1463,7 +1476,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (! mCanUseHTTP)
{
releaseHttpSemaphore();
- LL_WARNS("Texture") << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
return true; // abort
}
@@ -1482,8 +1495,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
if (mLoadedDiscard < 0)
{
- LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
- << ", should be >=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+ << ", should be >=0" << LL_ENDL;
}
setState(DECODE_IMAGE);
releaseHttpSemaphore();
@@ -1492,7 +1505,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
else
{
releaseHttpSemaphore();
- LL_WARNS("Texture") << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
return true; // abort.
}
}
@@ -1523,10 +1536,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
mLoaded = FALSE;
mGetStatus = LLCore::HttpStatus();
mGetReason.clear();
- LL_DEBUGS("Texture") << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
- << " Bytes: " << mRequestedSize
- << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
- << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
+ << " Bytes: " << mRequestedSize
+ << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth
+ << LL_ENDL;
// Will call callbackHttpGet when curl request completes
// Only server bake images use the returned headers currently, for getting retry-after field.
@@ -1535,14 +1548,16 @@ bool LLTextureFetchWorker::doWork(S32 param)
mWorkPriority,
mUrl,
mRequestedOffset,
- mRequestedSize,
+ (mRequestedOffset + mRequestedSize) > HTTP_REQUESTS_RANGE_END_MAX
+ ? 0
+ : mRequestedSize,
options,
mFetcher->mHttpHeaders,
this);
}
if (LLCORE_HTTP_HANDLE_INVALID == mHttpHandle)
{
- LL_WARNS() << "HTTP GET request failed for " << mID << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID << LL_ENDL;
resetFormattedData();
releaseHttpSemaphore();
return true; // failed
@@ -1570,7 +1585,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (mFTType != FTT_MAP_TILE)
{
- LL_WARNS() << "Texture missing from server (404): " << mUrl << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
}
if(mWriteToCacheState == NOT_WRITE) //map tiles or server bakes
@@ -1579,7 +1594,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
releaseHttpSemaphore();
if (mFTType != FTT_MAP_TILE)
{
- LL_WARNS("Texture") << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
}
return true;
}
@@ -1597,11 +1612,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else if (http_service_unavail == mGetStatus)
{
- LL_INFOS_ONCE("Texture") << "Texture server busy (503): " << mUrl << LL_ENDL;
- LL_INFOS() << "503: HTTP GET failed for: " << mUrl
- << " Status: " << mGetStatus.toHex()
- << " Reason: '" << mGetReason << "'"
- << LL_ENDL;
+ LL_INFOS_ONCE(LOG_TXT) << "Texture server busy (503): " << mUrl << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "503: HTTP GET failed for: " << mUrl
+ << " Status: " << mGetStatus.toHex()
+ << " Reason: '" << mGetReason << "'"
+ << LL_ENDL;
}
else if (http_not_sat == mGetStatus)
{
@@ -1610,10 +1625,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
- LL_INFOS() << "HTTP GET failed for: " << mUrl
- << " Status: " << mGetStatus.toTerseString()
- << " Reason: '" << mGetReason << "'"
- << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "HTTP GET failed for: " << mUrl
+ << " Status: " << mGetStatus.toTerseString()
+ << " Reason: '" << mGetReason << "'"
+ << LL_ENDL;
}
if (mFTType != FTT_SERVER_BAKE)
@@ -1627,8 +1642,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
if (mLoadedDiscard < 0)
{
- LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
- << ", should be >=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+ << ", should be >=0" << LL_ENDL;
}
setState(DECODE_IMAGE);
releaseHttpSemaphore();
@@ -1639,7 +1654,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
resetFormattedData();
setState(DONE);
releaseHttpSemaphore();
- LL_WARNS("Texture") << mID << " abort: fail harder" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " abort: fail harder" << LL_ENDL;
return true; // failed
}
@@ -1663,7 +1678,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
// abort.
setState(DONE);
- LL_WARNS("Texture") << mID << " abort: no data received" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " abort: no data received" << LL_ENDL;
releaseHttpSemaphore();
return true;
}
@@ -1679,8 +1694,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
// Get back into alignment.
if (mHttpReplyOffset > cur_size)
{
- LL_WARNS("Texture") << "Partial HTTP response produces break in image data for texture "
- << mID << ". Aborting load." << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Partial HTTP response produces break in image data for texture "
+ << mID << ". Aborting load." << LL_ENDL;
setState(DONE);
releaseHttpSemaphore();
return true;
@@ -1731,8 +1746,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
mLoadedDiscard = mRequestedDiscard;
if (mLoadedDiscard < 0)
{
- LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
- << ", should be >=0" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
+ << ", should be >=0" << LL_ENDL;
}
setState(DECODE_IMAGE);
if (mWriteToCacheState != NOT_WRITE)
@@ -1773,26 +1788,26 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
// We aborted, don't decode
setState(DONE);
- LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
return true;
}
if (mFormattedImage->getDataSize() <= 0)
{
- LL_WARNS() << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
//abort, don't decode
setState(DONE);
- LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
return true;
}
if (mLoadedDiscard < 0)
{
- LL_WARNS() << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
//abort, don't decode
setState(DONE);
- LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
return true;
}
@@ -1803,8 +1818,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
mDecoded = FALSE;
setState(DECODE_IMAGE_UPDATE);
- LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
- << " All Data: " << mHaveAllData << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
+ << " All Data: " << mHaveAllData << LL_ENDL;
mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
new DecodeResponder(mFetcher, mID, this));
// fall though
@@ -1821,11 +1836,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
if (mDecodedDiscard < 0)
{
- LL_DEBUGS("Texture") << mID << ": Failed to Decode." << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Failed to Decode." << LL_ENDL;
if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0)
{
// Cache file should be deleted, try again
- LL_WARNS() << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
llassert_always(mDecodeHandle == 0);
mFormattedImage = NULL;
++mRetryAttempt;
@@ -1835,15 +1850,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
-// LL_WARNS() << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << LL_ENDL;
setState(DONE); // failed
}
}
else
{
llassert_always(mRawImage.notNull());
- LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
- << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Decoded. Discard: " << mDecodedDiscard
+ << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
setState(WRITE_TO_CACHE);
}
@@ -1915,9 +1930,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
// More data was requested, return to INIT
setState(INIT);
- LL_DEBUGS("Texture") << mID << " more data requested, returning to INIT: "
- << " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
- << "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << " more data requested, returning to INIT: "
+ << " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
+ << "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
return false;
}
@@ -1957,8 +1972,8 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
F32 rate = fake_failure_rate;
if (mFTType == FTT_SERVER_BAKE && (fake_failure_rate > 0.0) && (rand_val < fake_failure_rate))
{
- LL_WARNS() << mID << " for debugging, setting fake failure status for texture " << mID
- << " (rand was " << rand_val << "/" << rate << ")" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << " for debugging, setting fake failure status for texture " << mID
+ << " (rand was " << rand_val << "/" << rate << ")" << LL_ENDL;
response->setStatus(LLCore::HttpStatus(503));
}
bool success = true;
@@ -1966,12 +1981,12 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
LLCore::HttpStatus status(response->getStatus());
if (!status && (mFTType == FTT_SERVER_BAKE))
{
- LL_INFOS() << mID << " state " << e_state_name[mState] << LL_ENDL;
+ LL_INFOS(LOG_TXT) << mID << " state " << e_state_name[mState] << LL_ENDL;
mFetchRetryPolicy.onFailure(response);
F32 retry_after;
if (mFetchRetryPolicy.shouldRetry(retry_after))
{
- LL_INFOS() << mID << " will retry after " << retry_after << " seconds, resetting state to LOAD_FROM_NETWORK" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << mID << " will retry after " << retry_after << " seconds, resetting state to LOAD_FROM_NETWORK" << LL_ENDL;
mFetcher->removeFromHTTPQueue(mID, S32Bytes(0));
std::string reason(status.toString());
setGetStatus(status, reason);
@@ -1981,7 +1996,7 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
}
else
{
- LL_INFOS() << mID << " will not retry" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << mID << " will not retry" << LL_ENDL;
}
}
else
@@ -1989,30 +2004,20 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
mFetchRetryPolicy.onSuccess();
}
- LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID
- << " status: " << status.toTerseString()
- << " '" << status.toString() << "'"
- << LL_ENDL;
-
-// unsigned int offset(0), length(0), full_length(0);
-// response->getRange(&offset, &length, &full_length);
-// LL_WARNS() << "HTTP COMPLETE: " << mID << " handle: " << handle
-// << " status: " << status.toULong() << " '" << status.toString() << "'"
-// << " req offset: " << mRequestedOffset << " req length: " << mRequestedSize
-// << " offset: " << offset << " length: " << length
-// << LL_ENDL;
-
std::string reason(status.toString());
setGetStatus(status, reason);
+ LL_DEBUGS(LOG_TXT) << "HTTP COMPLETE: " << mID
+ << " status: " << status.toTerseString()
+ << " '" << reason << "'"
+ << LL_ENDL;
+
if (! status)
{
success = false;
if (mFTType != FTT_MAP_TILE) // missing map tiles are normal, don't complain about them.
{
- std::string reason(status.toString());
- setGetStatus(status, reason);
- LL_WARNS() << "CURL GET FAILED, status: " << status.toTerseString()
- << " reason: " << reason << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "CURL GET FAILED, status: " << status.toTerseString()
+ << " reason: " << reason << LL_ENDL;
}
}
else
@@ -2223,13 +2228,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
if (mState != WAIT_HTTP_REQ)
{
- LL_WARNS() << "callbackHttpGet for unrequested fetch worker: " << mID
- << " req=" << mSentRequest << " state= " << mState << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "callbackHttpGet for unrequested fetch worker: " << mID
+ << " req=" << mSentRequest << " state= " << mState << LL_ENDL;
return data_size;
}
if (mLoaded)
{
- LL_WARNS() << "Duplicate callback for " << mID.asString() << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Duplicate callback for " << mID.asString() << LL_ENDL;
return data_size ; // ignore duplicate callback
}
if (success)
@@ -2238,7 +2243,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
LLCore::BufferArray * body(response->getBody());
data_size = body ? body->size() : 0;
- LL_DEBUGS("Texture") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
if (data_size > 0)
{
LLViewerStatsRecorder::instance().textureFetch(data_size);
@@ -2278,10 +2283,10 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
// response body becomes the entire dataset.
if (data_size <= mRequestedOffset)
{
- LL_WARNS("Texture") << "Fetched entire texture " << mID
- << " when it was expected to be marked complete. mImageSize: "
- << mFileSize << " datasize: " << mFormattedImage->getDataSize()
- << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Fetched entire texture " << mID
+ << " when it was expected to be marked complete. mImageSize: "
+ << mFileSize << " datasize: " << mFormattedImage->getDataSize()
+ << LL_ENDL;
}
mHaveAllData = TRUE;
llassert_always(mDecodeHandle == 0);
@@ -2294,7 +2299,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
else if (data_size > mRequestedSize)
{
// *TODO: This shouldn't be happening any more (REALLY don't expect this anymore)
- LL_WARNS() << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
mHaveAllData = TRUE;
llassert_always(mDecodeHandle == 0);
mFormattedImage = NULL; // discard any previous data we had
@@ -2329,7 +2334,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima
LLMutexLock lock(&mWorkMutex); // +Mw
if (mState != LOAD_FROM_TEXTURE_CACHE)
{
-// LL_WARNS() << "Read callback for " << mID << " with state = " << mState << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Read callback for " << mID << " with state = " << mState << LL_ENDL;
return;
}
if (success)
@@ -2354,7 +2359,7 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success)
LLMutexLock lock(&mWorkMutex); // +Mw
if (mState != WAIT_ON_WRITE)
{
-// LL_WARNS() << "Write callback for " << mID << " with state = " << mState << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Write callback for " << mID << " with state = " << mState << LL_ENDL;
return;
}
mWritten = TRUE;
@@ -2373,7 +2378,7 @@ void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImag
}
if (mState != DECODE_IMAGE_UPDATE)
{
-// LL_WARNS() << "Decode callback for " << mID << " with state = " << mState << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Decode callback for " << mID << " with state = " << mState << LL_ENDL;
mDecodeHandle = 0;
return;
}
@@ -2386,17 +2391,17 @@ void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImag
mRawImage = raw;
mAuxImage = aux;
mDecodedDiscard = mFormattedImage->getDiscardLevel();
- LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard
- << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << mID << ": Decode Finished. Discard: " << mDecodedDiscard
+ << " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
}
else
{
- LL_WARNS() << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
removeFromCache();
mDecodedDiscard = -1; // Redundant, here for clarity and paranoia
}
mDecoded = TRUE;
-// LL_INFOS() << mID << " : DECODE COMPLETE " << LL_ENDL;
+// LL_INFOS(LOG_TXT) << mID << " : DECODE COMPLETE " << LL_ENDL;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
mCacheReadTime = mCacheReadTimer.getElapsedTimeF32();
} // -Mw
@@ -2583,8 +2588,8 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
{
if (worker->mHost != host)
{
- LL_WARNS() << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
- << host << " != " << worker->mHost << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
+ << host << " != " << worker->mHost << LL_ENDL;
removeRequest(worker, true);
worker = NULL;
return false;
@@ -2601,13 +2606,13 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
llassert(!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C));
// Do full requests for baked textures to reduce interim blurring.
- LL_DEBUGS("Texture") << "full request for " << id << " texture is FTT_SERVER_BAKE" << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "full request for " << id << " texture is FTT_SERVER_BAKE" << LL_ENDL;
desired_size = MAX_IMAGE_DATA_SIZE;
desired_discard = 0;
}
else if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
{
- LL_DEBUGS("Texture") << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
// Only do partial requests for J2C at the moment
desired_size = MAX_IMAGE_DATA_SIZE;
desired_discard = 0;
@@ -2648,7 +2653,9 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
worker->setImagePriority(priority);
worker->setDesiredDiscard(desired_discard, desired_size);
worker->setCanUseHTTP(can_use_http);
- worker->setUrl(url);
+
+ //MAINT-4184 url is always empty. Do not set with it.
+
if (!worker->haveWork())
{
worker->setState(LLTextureFetchWorker::INIT);
@@ -2675,8 +2682,8 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const
worker->unlockWorkMutex(); // -Mw
}
- LL_DEBUGS("Texture") << "REQUESTED: " << id << " f_type " << fttype_to_string(f_type)
- << " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "REQUESTED: " << id << " f_type " << fttype_to_string(f_type)
+ << " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
return true;
}
@@ -2871,7 +2878,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
// Should only happen if we set mDebugPause...
if (!mDebugPause)
{
-// LL_WARNS() << "Adding work for inactive worker: " << id << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Adding work for inactive worker: " << id << LL_ENDL;
worker->addWork(0, LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);
}
}
@@ -2888,7 +2895,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
record(sCacheReadLatency, cache_read_time);
}
res = true;
- LL_DEBUGS("Texture") << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << id << ": Request Finished. State: " << worker->mState << " Discard: " << discard_level << LL_ENDL;
worker->unlockWorkMutex(); // -Mw
}
else
@@ -2993,9 +3000,9 @@ void LLTextureFetch::commonUpdate()
LLCore::HttpStatus status = mHttpRequest->update(0);
if (! status)
{
- LL_INFOS_ONCE("Texture") << "Problem during HTTP servicing. Reason: "
- << status.toString()
- << LL_ENDL;
+ LL_INFOS_ONCE(LOG_TXT) << "Problem during HTTP servicing. Reason: "
+ << status.toString()
+ << LL_ENDL;
}
}
@@ -3075,11 +3082,11 @@ void LLTextureFetch::startThread()
// Threads: Ttf
void LLTextureFetch::endThread()
{
- LL_INFOS("Texture") << "CacheReads: " << mTotalCacheReadCount
- << ", CacheWrites: " << mTotalCacheWriteCount
- << ", ResWaits: " << mTotalResourceWaitCount
- << ", TotalHTTPReq: " << getTotalNumHTTPRequests()
- << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "CacheReads: " << mTotalCacheReadCount
+ << ", CacheWrites: " << mTotalCacheWriteCount
+ << ", ResWaits: " << mTotalResourceWaitCount
+ << ", TotalHTTPReq: " << getTotalNumHTTPRequests()
+ << LL_ENDL;
}
// Threads: Ttf
@@ -3108,7 +3115,7 @@ void LLTextureFetch::threadedUpdate()
S32 q = mCurlGetRequest->getQueued();
if (q > 0)
{
- LL_INFOS() << "Queued gets: " << q << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Queued gets: " << q << LL_ENDL;
info_timer.reset();
}
}
@@ -3157,7 +3164,7 @@ void LLTextureFetch::sendRequestListToSimulators()
(req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR))
{
// We already received our URL, remove from the queue
- LL_WARNS() << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
mNetworkQueue.erase(curiter);
continue;
}
@@ -3225,7 +3232,7 @@ void LLTextureFetch::sendRequestListToSimulators()
gMessageSystem->addF32Fast(_PREHASH_DownloadPriority, req->mImagePriority);
gMessageSystem->addU32Fast(_PREHASH_Packet, packet);
gMessageSystem->addU8Fast(_PREHASH_Type, req->mType);
-// LL_INFOS() << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
+// LL_INFOS(LOG_TXT) << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard
// << " Packet: " << packet << " Priority: " << req->mImagePriority << LL_ENDL;
static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog", false);
@@ -3247,7 +3254,7 @@ void LLTextureFetch::sendRequestListToSimulators()
sim_request_count++;
if (sim_request_count >= IMAGES_PER_REQUEST)
{
-// LL_INFOS() << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
+// LL_INFOS(LOG_TXT) << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
gMessageSystem->sendSemiReliable(host, NULL, NULL);
sim_request_count = 0;
@@ -3256,7 +3263,7 @@ void LLTextureFetch::sendRequestListToSimulators()
}
if (gMessageSystem && sim_request_count > 0 && sim_request_count < IMAGES_PER_REQUEST)
{
-// LL_INFOS() << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
+// LL_INFOS(LOG_TXT) << "REQUESTING " << sim_request_count << " IMAGES FROM HOST: " << host.getIPString() << LL_ENDL;
gMessageSystem->sendSemiReliable(host, NULL, NULL);
sim_request_count = 0;
}
@@ -3292,7 +3299,7 @@ void LLTextureFetch::sendRequestListToSimulators()
gMessageSystem->addF32Fast(_PREHASH_DownloadPriority, 0);
gMessageSystem->addU32Fast(_PREHASH_Packet, 0);
gMessageSystem->addU8Fast(_PREHASH_Type, 0);
-// LL_INFOS() << "CANCELING IMAGE REQUEST: " << (*iter2) << LL_ENDL;
+// LL_INFOS(LOG_TXT) << "CANCELING IMAGE REQUEST: " << (*iter2) << LL_ENDL;
request_count++;
if (request_count >= IMAGES_PER_REQUEST)
@@ -3320,12 +3327,12 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)
mRequestedTimer.reset();
if (index >= mTotalPackets)
{
-// LL_WARNS() << "Received Image Packet " << index << " > max: " << mTotalPackets << " for image: " << mID << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received Image Packet " << index << " > max: " << mTotalPackets << " for image: " << mID << LL_ENDL;
return false;
}
if (index > 0 && index < mTotalPackets-1 && size != MAX_IMG_PACKET_SIZE)
{
-// LL_WARNS() << "Received bad sized packet: " << index << ", " << size << " != " << MAX_IMG_PACKET_SIZE << " for image: " << mID << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received bad sized packet: " << index << ", " << size << " != " << MAX_IMG_PACKET_SIZE << " for image: " << mID << LL_ENDL;
return false;
}
@@ -3335,7 +3342,7 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)
}
else if (mPackets[index] != NULL)
{
-// LL_WARNS() << "Received duplicate packet: " << index << " for image: " << mID << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received duplicate packet: " << index << " for image: " << mID << LL_ENDL;
return false;
}
@@ -3355,7 +3362,7 @@ void LLTextureFetchWorker::setState(e_state new_state)
// blurry images fairly frequently. Presumably this is an
// indication of some subtle timing or locking issue.
-// LL_INFOS("Texture") << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << LL_ENDL;
+// LL_INFOS(LOG_TXT) << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << LL_ENDL;
}
mState = new_state;
}
@@ -3371,13 +3378,13 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
if (!worker)
{
-// LL_WARNS() << "Received header for non active worker: " << id << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received header for non active worker: " << id << LL_ENDL;
res = false;
}
else if (worker->mState != LLTextureFetchWorker::LOAD_FROM_NETWORK ||
worker->mSentRequest != LLTextureFetchWorker::SENT_SIM)
{
-// LL_WARNS() << "receiveImageHeader for worker: " << id
+// LL_WARNS(LOG_TXT) << "receiveImageHeader for worker: " << id
// << " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState]
// << " sent: " << worker->mSentRequest << LL_ENDL;
res = false;
@@ -3385,12 +3392,12 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8
else if (worker->mLastPacket != -1)
{
// check to see if we've gotten this packet before
-// LL_WARNS() << "Received duplicate header for: " << id << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received duplicate header for: " << id << LL_ENDL;
res = false;
}
else if (!data_size)
{
-// LL_WARNS() << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
res = false;
}
if (!res)
@@ -3432,17 +3439,17 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
if (!worker)
{
-// LL_WARNS() << "Received packet " << packet_num << " for non active worker: " << id << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received packet " << packet_num << " for non active worker: " << id << LL_ENDL;
res = false;
}
else if (worker->mLastPacket == -1)
{
-// LL_WARNS() << "Received packet " << packet_num << " before header for: " << id << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Received packet " << packet_num << " before header for: " << id << LL_ENDL;
res = false;
}
else if (!data_size)
{
-// LL_WARNS() << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
+// LL_WARNS(LOG_TXT) << "Img: " << id << ":" << " Empty Image Header" << LL_ENDL;
res = false;
}
if (!res)
@@ -3470,7 +3477,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
}
else
{
-// LL_WARNS() << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
+// LL_WARNS(LOG_TXT) << "receiveImagePacket " << packet_num << "/" << worker->mLastPacket << " for worker: " << id
// << " in state: " << LLTextureFetchWorker::sStateDescs[worker->mState] << LL_ENDL;
removeFromNetworkQueue(worker, true); // failsafe
}
@@ -3563,33 +3570,33 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
void LLTextureFetch::dump()
{
- LL_INFOS() << "LLTextureFetch REQUESTS:" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "LLTextureFetch REQUESTS:" << LL_ENDL;
for (request_queue_t::iterator iter = mRequestQueue.begin();
iter != mRequestQueue.end(); ++iter)
{
LLQueuedThread::QueuedRequest* qreq = *iter;
LLWorkerThread::WorkRequest* wreq = (LLWorkerThread::WorkRequest*)qreq;
LLTextureFetchWorker* worker = (LLTextureFetchWorker*)wreq->getWorkerClass();
- LL_INFOS() << " ID: " << worker->mID
- << " PRI: " << llformat("0x%08x",wreq->getPriority())
- << " STATE: " << worker->sStateDescs[worker->mState]
- << LL_ENDL;
+ LL_INFOS(LOG_TXT) << " ID: " << worker->mID
+ << " PRI: " << llformat("0x%08x",wreq->getPriority())
+ << " STATE: " << worker->sStateDescs[worker->mState]
+ << LL_ENDL;
}
- LL_INFOS() << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
for (queue_t::const_iterator iter(mHTTPTextureQueue.begin());
mHTTPTextureQueue.end() != iter;
++iter)
{
- LL_INFOS() << " ID: " << (*iter) << LL_ENDL;
+ LL_INFOS(LOG_TXT) << " ID: " << (*iter) << LL_ENDL;
}
- LL_INFOS() << "LLTextureFetch WAIT_HTTP_RESOURCE:" << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "LLTextureFetch WAIT_HTTP_RESOURCE:" << LL_ENDL;
for (wait_http_res_queue_t::const_iterator iter(mHttpWaitResource.begin());
mHttpWaitResource.end() != iter;
++iter)
{
- LL_INFOS() << " ID: " << (*iter) << LL_ENDL;
+ LL_INFOS(LOG_TXT) << " ID: " << (*iter) << LL_ENDL;
}
}
@@ -3714,10 +3721,10 @@ void LLTextureFetch::releaseHttpWaiters()
{
// Not in expected state, remove it, try the next one
worker->unlockWorkMutex(); // -Mw
- LL_WARNS("Texture") << "Resource-waited texture " << worker->mID
- << " in unexpected state: " << worker->mState
- << ". Removing from wait list."
- << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Resource-waited texture " << worker->mID
+ << " in unexpected state: " << worker->mState
+ << ". Removing from wait list."
+ << LL_ENDL;
removeHttpWaiter(worker->mID);
continue;
}
@@ -3884,14 +3891,14 @@ public:
if (status)
{
- LL_DEBUGS("Texture") << "Successfully delivered asset metrics to grid."
- << LL_ENDL;
+ LL_DEBUGS(LOG_TXT) << "Successfully delivered asset metrics to grid."
+ << LL_ENDL;
}
else
{
- LL_WARNS("Texture") << "Error delivering asset metrics to grid. Status: "
- << status.toTerseString()
- << ", Reason: " << status.toString() << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Error delivering asset metrics to grid. Status: "
+ << status.toTerseString()
+ << ", Reason: " << status.toString() << LL_ENDL;
}
}
}; // end class AssetReportHandler
@@ -4502,14 +4509,14 @@ void LLTextureFetchDebugger::debugHTTP()
LLViewerRegion* region = gAgent.getRegion();
if (!region)
{
- LL_INFOS() << "Fetch Debugger : Current region undefined. Cannot fetch textures through HTTP." << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Fetch Debugger : Current region undefined. Cannot fetch textures through HTTP." << LL_ENDL;
return;
}
mHTTPUrl = region->getHttpUrl();
if (mHTTPUrl.empty())
{
- LL_INFOS() << "Fetch Debugger : Current region URL undefined. Cannot fetch textures through HTTP." << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Fetch Debugger : Current region URL undefined. Cannot fetch textures through HTTP." << LL_ENDL;
return;
}
@@ -4580,15 +4587,15 @@ S32 LLTextureFetchDebugger::fillCurlQueue()
// Failed to queue request, log it and mark it done.
LLCore::HttpStatus status(mFetcher->getHttpRequest().getStatus());
- LL_WARNS("Texture") << "Couldn't issue HTTP request in debugger for texture "
- << mFetchingHistory[i].mID
- << ", status: " << status.toTerseString()
- << " reason: " << status.toString()
- << LL_ENDL;
+ LL_WARNS(LOG_TXT) << "Couldn't issue HTTP request in debugger for texture "
+ << mFetchingHistory[i].mID
+ << ", status: " << status.toTerseString()
+ << " reason: " << status.toString()
+ << LL_ENDL;
mFetchingHistory[i].mCurlState = FetchEntry::CURL_DONE;
}
}
- //LL_INFOS() << "Fetch Debugger : Having " << mNbCurlRequests << " requests through the curl thread." << LL_ENDL;
+ //LL_INFOS(LOG_TXT) << "Fetch Debugger : Having " << mNbCurlRequests << " requests through the curl thread." << LL_ENDL;
return mNbCurlRequests;
}
@@ -4890,7 +4897,7 @@ void LLTextureFetchDebugger::onCompleted(LLCore::HttpHandle handle, LLCore::Http
handle_fetch_map_t::iterator iter(mHandleToFetchIndex.find(handle));
if (mHandleToFetchIndex.end() == iter)
{
- LL_INFOS() << "Fetch Debugger : Couldn't find handle " << handle << " in fetch list." << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Fetch Debugger : Couldn't find handle " << handle << " in fetch list." << LL_ENDL;
return;
}
@@ -4898,7 +4905,7 @@ void LLTextureFetchDebugger::onCompleted(LLCore::HttpHandle handle, LLCore::Http
mHandleToFetchIndex.erase(iter);
if (fetch_ind >= mFetchingHistory.size() || mFetchingHistory[fetch_ind].mHttpHandle != handle)
{
- LL_INFOS() << "Fetch Debugger : Handle and fetch object in disagreement. Punting." << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Fetch Debugger : Handle and fetch object in disagreement. Punting." << LL_ENDL;
}
else
{
@@ -4948,7 +4955,7 @@ void LLTextureFetchDebugger::callbackHTTP(FetchEntry & fetch, LLCore::HttpRespon
S32 data_size = ba ? ba->size() : 0;
fetch.mCurlReceivedSize += data_size;
- //LL_INFOS() << "Fetch Debugger : got results for " << fetch.mID << ", data_size = " << data_size << ", received = " << fetch.mCurlReceivedSize << ", requested = " << fetch.mRequestedSize << ", partial = " << partial << LL_ENDL;
+ //LL_INFOS(LOG_TXT) << "Fetch Debugger : got results for " << fetch.mID << ", data_size = " << data_size << ", received = " << fetch.mCurlReceivedSize << ", requested = " << fetch.mRequestedSize << ", partial = " << partial << LL_ENDL;
if ((fetch.mCurlReceivedSize >= fetch.mRequestedSize) || !partial || (fetch.mRequestedSize == 600))
{
U8* d_buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), data_size);
@@ -4974,9 +4981,9 @@ void LLTextureFetchDebugger::callbackHTTP(FetchEntry & fetch, LLCore::HttpRespon
}
else //failed
{
- LL_INFOS() << "Fetch Debugger : CURL GET FAILED, ID = " << fetch.mID
- << ", status: " << status.toTerseString()
- << " reason: " << status.toString() << LL_ENDL;
+ LL_INFOS(LOG_TXT) << "Fetch Debugger : CURL GET FAILED, ID = " << fetch.mID
+ << ", status: " << status.toTerseString()
+ << " reason: " << status.toString() << LL_ENDL;
}
}
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index aa1f680a1e..4f0413a2e4 100755
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -563,7 +563,7 @@ void LLGLTexMemBar::draw()
//----------------------------------------------------------------------------
- text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d RAW:%d HTP:%d DEC:%d CRE:%d",
+ text = llformat("Textures: %d Fetch: %d(%d) Pkts:%d(%d) Cache R/W: %d/%d LFS:%d RAW:%d HTP:%d DEC:%d CRE:%d ",
gTextureList.getNumImages(),
LLAppViewer::getTextureFetch()->getNumRequests(), LLAppViewer::getTextureFetch()->getNumDeletes(),
LLAppViewer::getTextureFetch()->mPacketCount, LLAppViewer::getTextureFetch()->mBadPacketCount,
@@ -585,7 +585,7 @@ void LLGLTexMemBar::draw()
color = bandwidth > max_bandwidth ? LLColor4::red : bandwidth > max_bandwidth*.75f ? LLColor4::yellow : text_color;
color[VALPHA] = text_color[VALPHA];
text = llformat("BW:%.0f/%.0f",bandwidth.value(), max_bandwidth.value());
- LLFontGL::getFontMonospace()->renderUTF8(text, 0, x_right, v_offset + line_height*2,
+ LLFontGL::getFontMonospace()->renderUTF8(text, 0, x_right, v_offset + line_height*3,
color, LLFontGL::LEFT, LLFontGL::TOP);
// Mesh status line
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9d5c3c4d4a..332d04a1f4 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5747,83 +5747,101 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
}
// some of the server notifications need special handling. This is where we do that.
-bool handle_teleport_access_blocked(LLSD& llsdBlock)
+bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notificationID, const std::string & defaultMessage)
{
- std::string notificationID("TeleportEntryAccessBlocked");
U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
LLStringUtil::toLower(regionMaturity);
llsdBlock["REGIONMATURITY"] = regionMaturity;
bool returnValue = false;
- LLNotificationPtr maturityLevelNotification;
- std::string notifySuffix = "_Notify";
- if (regionAccess == SIM_ACCESS_MATURE)
- {
- if (gAgent.isTeen())
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
- returnValue = true;
+ LLNotificationPtr tp_failure_notification;
+ std::string notifySuffix;
- notifySuffix = "_NotifyAdultsOnly";
- }
- else if (gAgent.prefersPG())
+ if (notificationID == std::string("TeleportEntryAccessBlocked"))
+ {
+ notifySuffix = "_Notify";
+ if (regionAccess == SIM_ACCESS_MATURE)
{
- if (gAgent.hasRestartableFailedTeleportRequest())
+ if (gAgent.isTeen())
{
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
returnValue = true;
+
+ notifySuffix = "_NotifyAdultsOnly";
+ }
+ else if (gAgent.prefersPG())
+ {
+ if (gAgent.hasRestartableFailedTeleportRequest())
+ {
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ returnValue = true;
+ }
+ else
+ {
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ returnValue = true;
+ }
}
else
{
gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
returnValue = true;
}
}
- else
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
- returnValue = true;
- }
- }
- else if (regionAccess == SIM_ACCESS_ADULT)
- {
- if (!gAgent.isAdult())
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
- returnValue = true;
-
- notifySuffix = "_NotifyAdultsOnly";
- }
- else if (gAgent.prefersPG() || gAgent.prefersMature())
+ else if (regionAccess == SIM_ACCESS_ADULT)
{
- if (gAgent.hasRestartableFailedTeleportRequest())
+ if (!gAgent.isAdult())
{
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
returnValue = true;
+
+ notifySuffix = "_NotifyAdultsOnly";
+ }
+ else if (gAgent.prefersPG() || gAgent.prefersMature())
+ {
+ if (gAgent.hasRestartableFailedTeleportRequest())
+ {
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ returnValue = true;
+ }
+ else
+ {
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ returnValue = true;
+ }
}
else
{
gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
returnValue = true;
}
}
- else
+ } // End of special handling for "TeleportEntryAccessBlocked"
+ else
+ { // Normal case, no message munging
+ gAgent.clearTeleportRequest();
+ if (LLNotifications::getInstance()->templateExists(notificationID))
{
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
- returnValue = true;
+ tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock);
}
+ else
+ {
+ llsdBlock["MESSAGE"] = defaultMessage;
+ tp_failure_notification = LLNotificationsUtil::add("GenericAlertOK", llsdBlock);
}
+ returnValue = true;
+ }
- if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
+ if ((tp_failure_notification == NULL) || tp_failure_notification->isIgnored())
{
- // Given a simple notification if no maturityLevelNotification is set or it is ignore
+ // Given a simple notification if no tp_failure_notification is set or it is ignore
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
}
@@ -6039,8 +6057,8 @@ void process_alert_core(const std::string& message, BOOL modal)
std::string alert_name(message.substr(ALERT_PREFIX.length()));
if (!handle_special_alerts(alert_name))
{
- LLNotificationsUtil::add(alert_name);
- }
+ LLNotificationsUtil::add(alert_name);
+ }
}
else if (message.find(NOTIFY_PREFIX) == 0)
{
@@ -6062,10 +6080,10 @@ void process_alert_core(const std::string& message, BOOL modal)
LLFloaterRegionRestarting::close();
}
- std::string new_msg =LLNotifications::instance().getGlobalString(text);
- args["MESSAGE"] = new_msg;
- LLNotificationsUtil::add("SystemMessage", args);
- }
+ std::string new_msg =LLNotifications::instance().getGlobalString(text);
+ args["MESSAGE"] = new_msg;
+ LLNotificationsUtil::add("SystemMessage", args);
+ }
else if (modal)
{
LLSD args;
@@ -6648,8 +6666,8 @@ std::string formatted_time(const time_t& the_time)
void process_teleport_failed(LLMessageSystem *msg, void**)
{
- std::string reason;
- std::string big_reason;
+ std::string message_id; // Tag from server, like "RegionEntryAccessBlocked"
+ std::string big_reason; // Actual message to display
LLSD args;
// Let the interested parties know that teleport failed.
@@ -6659,16 +6677,16 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
{
// Get the message ID
- msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason);
- big_reason = LLAgent::sTeleportErrorMessages[reason];
+ msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, message_id);
+ big_reason = LLAgent::sTeleportErrorMessages[message_id];
if ( big_reason.size() > 0 )
{ // Substitute verbose reason from the local map
args["REASON"] = big_reason;
}
else
{ // Nothing found in the map - use what the server returned in the original message block
- msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
- args["REASON"] = reason;
+ msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, big_reason);
+ args["REASON"] = big_reason;
}
LLSD llsd_block;
@@ -6684,7 +6702,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
else
{
// change notification name in this special case
- if (handle_teleport_access_blocked(llsd_block))
+ if (handle_teleport_access_blocked(llsd_block, message_id, args["REASON"]))
{
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
{
@@ -6697,17 +6715,17 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
}
else
- {
- msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
+ { // Extra message payload not found - use what the simulator sent
+ msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, message_id);
- big_reason = LLAgent::sTeleportErrorMessages[reason];
+ big_reason = LLAgent::sTeleportErrorMessages[message_id];
if ( big_reason.size() > 0 )
{ // Substitute verbose reason from the local map
args["REASON"] = big_reason;
}
else
{ // Nothing found in the map - use what the server returned
- args["REASON"] = reason;
+ args["REASON"] = message_id;
}
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index cd5f64b9ca..11cbf3fc24 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -285,8 +285,8 @@ private:
{
regionp->setCapability(iter->first, iter->second);
- LL_DEBUGS("AppInit", "Capabilities") << "got capability for "
- << iter->first << LL_ENDL;
+ LL_DEBUGS("AppInit", "Capabilities")
+ << "Capability '" << iter->first << "' is '" << iter->second << "'" << LL_ENDL;
/* HACK we're waiting for the ServerReleaseNotes */
if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested())
diff --git a/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png b/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png
index 8b58db0cba..50239c8af8 100755
--- a/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png
+++ b/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
index 9e7291d6fb..fade065ce7 100755
--- a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
+++ b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index 0ac5b72b8f..eb2f3dbaa4 100755
--- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
+++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
index d7ec04237b..4ab4bbe4af 100755
--- a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
+++ b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/down_arrow.png b/indra/newview/skins/default/textures/down_arrow.png
index 155f80c97e..21a0fc5ec0 100755
--- a/indra/newview/skins/default/textures/down_arrow.png
+++ b/indra/newview/skins/default/textures/down_arrow.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.png
index edb40b9c96..42f8466969 100755
--- a/indra/newview/skins/default/textures/icons/Edit_Wrench.png
+++ b/indra/newview/skins/default/textures/icons/Edit_Wrench.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
index 75833eccf3..46ee6dfe2c 100755
--- a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
+++ b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Generic_Person.png b/indra/newview/skins/default/textures/icons/Generic_Person.png
index 45b491ab59..e1411354af 100755
--- a/indra/newview/skins/default/textures/icons/Generic_Person.png
+++ b/indra/newview/skins/default/textures/icons/Generic_Person.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png
index 296311e797..ae8c8b4c1a 100755
--- a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png
+++ b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Link.png b/indra/newview/skins/default/textures/icons/Inv_Link.png
index c1543dacb5..26bf4086fb 100755
--- a/indra/newview/skins/default/textures/icons/Inv_Link.png
+++ b/indra/newview/skins/default/textures/icons/Inv_Link.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png
index a800217e0d..42b5c88fdd 100755
--- a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png
+++ b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png
index 8c4a1a9ac0..a52168d6c7 100755
--- a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png
+++ b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_Mesh.png b/indra/newview/skins/default/textures/icons/Inv_Mesh.png
index f1f21f7941..77e52264c3 100755
--- a/indra/newview/skins/default/textures/icons/Inv_Mesh.png
+++ b/indra/newview/skins/default/textures/icons/Inv_Mesh.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png
index dcf998449f..57eafc4047 100755
--- a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png
+++ b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png
index 0efd403c95..b080688e55 100755
--- a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png
+++ b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png
index c5201e6f9a..7a958c1ec0 100755
--- a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png
+++ b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png
index 4a886a3f37..11e6bf33bc 100755
--- a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png
+++ b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
index e0b18b2451..af65873cb6 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
index 101aaa42b1..6ceb9d3d8f 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
index c27f18e3c7..7084e2f591 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
index 956e02b14d..60d056b573 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
index 434caeda8b..d004b0f750 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
index 064687ed0f..eed28765f7 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
index 5465650d0c..e35de3c2fa 100755
--- a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Person_Check.png b/indra/newview/skins/default/textures/icons/Person_Check.png
index f8638540d4..d40eafe793 100755
--- a/indra/newview/skins/default/textures/icons/Person_Check.png
+++ b/indra/newview/skins/default/textures/icons/Person_Check.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Person_Star.png b/indra/newview/skins/default/textures/icons/Person_Star.png
index ad10580ac4..e02935672f 100755
--- a/indra/newview/skins/default/textures/icons/Person_Star.png
+++ b/indra/newview/skins/default/textures/icons/Person_Star.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png
index 8342d7cfee..5e376c72f9 100755
--- a/indra/newview/skins/default/textures/icons/SL_Logo.png
+++ b/indra/newview/skins/default/textures/icons/SL_Logo.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png
index 81c13eeabd..8977c49195 100755
--- a/indra/newview/skins/default/textures/icons/Shop.png
+++ b/indra/newview/skins/default/textures/icons/Shop.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Web_Profile_Off.png b/indra/newview/skins/default/textures/icons/Web_Profile_Off.png
index f5fb774a6f..5716dd6d22 100755
--- a/indra/newview/skins/default/textures/icons/Web_Profile_Off.png
+++ b/indra/newview/skins/default/textures/icons/Web_Profile_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_off.png b/indra/newview/skins/default/textures/icons/back_arrow_off.png
index 422f67cf83..e7cea49d73 100755
--- a/indra/newview/skins/default/textures/icons/back_arrow_off.png
+++ b/indra/newview/skins/default/textures/icons/back_arrow_off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_over.png b/indra/newview/skins/default/textures/icons/back_arrow_over.png
index b4cc170f37..4e5a93a25f 100755
--- a/indra/newview/skins/default/textures/icons/back_arrow_over.png
+++ b/indra/newview/skins/default/textures/icons/back_arrow_over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_press.png b/indra/newview/skins/default/textures/icons/back_arrow_press.png
index a9e2f326a7..289b8c20e6 100755
--- a/indra/newview/skins/default/textures/icons/back_arrow_press.png
+++ b/indra/newview/skins/default/textures/icons/back_arrow_press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/check_mark.png b/indra/newview/skins/default/textures/icons/check_mark.png
index 2c05297f4f..4d927cb29e 100755
--- a/indra/newview/skins/default/textures/icons/check_mark.png
+++ b/indra/newview/skins/default/textures/icons/check_mark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png
index 78b681cb33..8364bcc328 100755
--- a/indra/newview/skins/default/textures/icons/pop_up_caution.png
+++ b/indra/newview/skins/default/textures/icons/pop_up_caution.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/menu_separator.png b/indra/newview/skins/default/textures/menu_separator.png
index 89dcdcdff5..7bb27c499d 100755
--- a/indra/newview/skins/default/textures/menu_separator.png
+++ b/indra/newview/skins/default/textures/menu_separator.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png b/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png
index d0b213cdc5..7c6920205f 100755
--- a/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png
+++ b/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_light.png b/indra/newview/skins/default/textures/model_wizard/progress_light.png
index 019344f812..c8ab151c44 100755
--- a/indra/newview/skins/default/textures/model_wizard/progress_light.png
+++ b/indra/newview/skins/default/textures/model_wizard/progress_light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/Search.png b/indra/newview/skins/default/textures/navbar/Search.png
index 0d0e330bc7..4c29e57f7b 100755
--- a/indra/newview/skins/default/textures/navbar/Search.png
+++ b/indra/newview/skins/default/textures/navbar/Search.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/navbar/separator.png b/indra/newview/skins/default/textures/navbar/separator.png
index b93e5791a7..c1d74e5a64 100755
--- a/indra/newview/skins/default/textures/navbar/separator.png
+++ b/indra/newview/skins/default/textures/navbar/separator.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png
index 50c01062a5..4e59042e33 100755
--- a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png
+++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png
index bf2065cd37..be7b298bb8 100755
--- a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png
+++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png
index 8b48258142..1e234ff09b 100755
--- a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png
+++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png
index 09efe779fe..48c78b453d 100755
--- a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png
+++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/facebook.png b/indra/newview/skins/default/textures/toolbar_icons/facebook.png
index b960b834dc..ae524b643f 100644
--- a/indra/newview/skins/default/textures/toolbar_icons/facebook.png
+++ b/indra/newview/skins/default/textures/toolbar_icons/facebook.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png b/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png
index 9fcf46794d..9eeb1d4e09 100755
--- a/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png
+++ b/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/up_arrow.png b/indra/newview/skins/default/textures/up_arrow.png
index fe68ad49dc..76f839510e 100755
--- a/indra/newview/skins/default/textures/up_arrow.png
+++ b/indra/newview/skins/default/textures/up_arrow.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Down.png b/indra/newview/skins/default/textures/widgets/Arrow_Down.png
index e10f6472eb..cb4eea953c 100755
--- a/indra/newview/skins/default/textures/widgets/Arrow_Down.png
+++ b/indra/newview/skins/default/textures/widgets/Arrow_Down.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png
index c7c0eaa96b..3897e16801 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png
index 4a73c254fc..95a4a36c9d 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png
index 6fb5c432de..20d1ebf53d 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png
index fa18517933..63f4b503e2 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png
index bed1a701bd..d570f77f6d 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png
index 57ce9af574..28a002b118 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png
index 2c43022f0e..a195e80b0e 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png
index 6b8c1baca4..9863ee32cb 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png
index 51505e80c5..2ffbc4a16f 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png
index 9f93efbd93..ce47da169b 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png
index 3a4ec1a315..2225150983 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png
index 1f1b4c2ed5..2d541d0f70 100755
--- a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png
+++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Tooltip.png b/indra/newview/skins/default/textures/widgets/Tooltip.png
index f989ac9083..3c4d6a965d 100755
--- a/indra/newview/skins/default/textures/widgets/Tooltip.png
+++ b/indra/newview/skins/default/textures/widgets/Tooltip.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png
index 2292b79eda..3534b716fd 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png
index 1a514742d3..177c0675bb 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png
index 7478644b6a..aa21a1c789 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png
index 9f72a5422b..a98a3a98c2 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png
index 07db8be1b0..5df0e7691c 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png
index 1e753aaf1d..b4d4ef01fc 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png
index be66b05230..0d0238dc32 100755
--- a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png
+++ b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
index ddadef0978..0cb5a819ec 100755
--- a/indra/newview/skins/default/textures/windows/hint_arrow_down.png
+++ b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
index 2794b967e8..45204d9132 100755
--- a/indra/newview/skins/default/textures/windows/hint_arrow_left.png
+++ b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
index 0dfc99898d..3e3ae9f42d 100755
--- a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
+++ b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
index 7ac57f805b..3fe7a773c3 100755
--- a/indra/newview/skins/default/textures/windows/hint_arrow_right.png
+++ b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
index bb3e1c07fa..44f003dc63 100755
--- a/indra/newview/skins/default/textures/windows/hint_arrow_up.png
+++ b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
index cfac5deacb..e25f354347 100755
--- a/indra/newview/skins/default/textures/windows/hint_background.png
+++ b/indra/newview/skins/default/textures/windows/hint_background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png
index 5fd847aaef..5bd21b4297 100755
--- a/indra/newview/skins/default/textures/windows/yellow_gradient.png
+++ b/indra/newview/skins/default/textures/windows/yellow_gradient.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/world/CameraDragDot.png b/indra/newview/skins/default/textures/world/CameraDragDot.png
index 57698e1956..2ccf098e0f 100755
--- a/indra/newview/skins/default/textures/world/CameraDragDot.png
+++ b/indra/newview/skins/default/textures/world/CameraDragDot.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/world/NoEntryLines.png b/indra/newview/skins/default/textures/world/NoEntryLines.png
index 18e270bde5..d7496b8bd0 100755
--- a/indra/newview/skins/default/textures/world/NoEntryLines.png
+++ b/indra/newview/skins/default/textures/world/NoEntryLines.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index 798461c007..b98ee78685 100755
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -41,23 +41,24 @@
</string>
<button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/>
<text name="image_res_text">
- [WIDTH] x [HEIGHT] px
+ [WIDTH]px (Breite) x [HEIGHT]px (Höhe)
</text>
<text name="file_size_label">
[SIZE] KB
</text>
+ <button name="advanced_options" label="AUFNAHME OPTIONEN"/>
<panel name="advanced_options_panel">
- <text name="advanced_options_label">
- ERWEITERTE OPTIONEN
- </text>
<text name="layer_type_label">
- Aufnahme:
+ Aufnehmen:
</text>
<combo_box label="Bildebenen" name="layer_types">
<combo_box.item label="Farben" name="Colors"/>
<combo_box.item label="Tiefe" name="Depth"/>
</combo_box>
- <check_box label="Schnittstelle" name="ui_check"/>
+ <combo_box label="Filter" name="filters_combobox">
+ <combo_box.item label="Kein Filter" name="NoFilter"/>
+ </combo_box>
+ <check_box label="Benutzeroberfläche" name="ui_check"/>
<check_box label="HUDs" name="hud_check"/>
<check_box label="Standbild (Vollbild)" name="freeze_frame_check"/>
<check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/>
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
index 6eeef8af71..b34dc776de 100755
--- a/indra/newview/skins/default/xui/de/panel_postcard_message.xml
+++ b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
@@ -9,13 +9,11 @@
<text name="subject_label">
Betreff:
</text>
- <line_editor label="Betreff hier eingeben." name="subject_form"/>
+ <line_editor label="Betreff hier rein." name="subject_form"/>
<text name="msg_label">
Nachricht:
</text>
<text_editor name="msg_form">
Nachricht hier eingeben.
</text_editor>
- <button label="Abbrechen" name="cancel_btn"/>
- <button label="Senden" name="send_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
index c1a1c0cc46..e6d3b7de66 100755
--- a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
@@ -7,17 +7,10 @@
<combo_box.item label="1024x768" name="1024x768"/>
<combo_box.item label="Benutzerdefiniert" name="Custom"/>
</combo_box>
- <layout_stack name="postcard_image_params_ls">
- <layout_panel name="postcard_image_size_lp">
- <spinner label="Breite" name="postcard_snapshot_width"/>
- <spinner label="Höhe" name="postcard_snapshot_height"/>
- <check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/>
- </layout_panel>
- <layout_panel name="postcard_image_format_quality_lp">
- <slider label="Bildqualität" name="image_quality_slider"/>
- <text name="image_quality_level">
- ([QLVL])
- </text>
- </layout_panel>
- </layout_stack>
+ <spinner label="Breite x Höhe" name="postcard_snapshot_width"/>
+ <check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/>
+ <slider label="Qualität" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
index 10827ce6f2..d13f56ed3d 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_inventory">
<text name="title">
- In meinem Inventar speichern
+ Inventar
</text>
<text name="hint_lbl">
Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus.
@@ -13,8 +13,7 @@
<combo_box.item label="Groß (512x512)" name="Large(512x512)"/>
<combo_box.item label="Benutzerdefiniert" name="Custom"/>
</combo_box>
- <spinner label="Breite" name="inventory_snapshot_width"/>
- <spinner label="Höhe" name="inventory_snapshot_height"/>
+ <spinner label="Breite x Höhe" name="inventory_snapshot_width"/>
<check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/>
<button label="Abbrechen" name="cancel_btn"/>
<button label="Speichern" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
index 3aeae80388..53e78ba290 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_local">
<text name="title">
- Auf meinem Computer speichern
+ Festplatte
</text>
<combo_box label="Auflösung" name="local_size_combo">
<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
@@ -13,24 +13,17 @@
<combo_box.item label="1600x1200" name="1600x1200"/>
<combo_box.item label="Benutzerdefiniert" name="Custom"/>
</combo_box>
- <layout_stack name="local_image_params_ls">
- <layout_panel name="local_image_size_lp">
- <spinner label="Breite" name="local_snapshot_width"/>
- <spinner label="Höhe" name="local_snapshot_height"/>
- <check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/>
- </layout_panel>
- <layout_panel name="local_image_format_quality_lp">
- <combo_box label="Format" name="local_format_combo">
- <combo_box.item label="PNG (verlustfrei)" name="PNG"/>
- <combo_box.item label="JPEG" name="JPEG"/>
- <combo_box.item label="BMP (verlustfrei)" name="BMP"/>
- </combo_box>
- <slider label="Bildqualität" name="image_quality_slider"/>
- <text name="image_quality_level">
- ([QLVL])
- </text>
- </layout_panel>
- </layout_stack>
+ <spinner label="Breite x Höhe" name="local_snapshot_width"/>
+ <check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/>
+ <combo_box label="Format" name="local_format_combo">
+ <combo_box.item label="PNG (verlustfrei)" name="PNG"/>
+ <combo_box.item label="JPEG" name="JPEG"/>
+ <combo_box.item label="BMP (verlustfrei)" name="BMP"/>
+ </combo_box>
+ <slider label="Qualität" name="image_quality_slider"/>
+ <text name="image_quality_level">
+ ([QLVL])
+ </text>
<button label="Abbrechen" name="cancel_btn"/>
<flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">
<flyout_button.item label="Speichern" name="save_item"/>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
index e1d8a5dc6d..e2ba5bd4db 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_options">
- <button label="In meinem Profil posten" name="save_to_profile_btn"/>
- <button label="E-Mail" name="save_to_email_btn"/>
- <button label="In meinem Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/>
- <button label="Auf meinem Computer speichern" name="save_to_computer_btn"/>
+ <button label="Ins Profil hochladen" name="save_to_profile_btn"/>
+ <button label="Per E-Mail senden" name="save_to_email_btn"/>
+ <button label="Im Inventar speichern" name="save_to_inventory_btn"/>
+ <button label="Auf Festplatte speichern" name="save_to_computer_btn"/>
+ <button label="Zu Facebook hochladen" name="send_to_facebook_btn"/>
+ <button label="Zu Twitter hochladen" name="send_to_twitter_btn"/>
+ <button label="Zu Flickr hochladen" name="send_to_flickr_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
index c9afe86d7f..ead56f2885 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
@@ -12,6 +12,10 @@
<text name="title">
E-Mail
</text>
- <button label="Nachricht" name="message_btn"/>
- <button label="Einstellungen" name="settings_btn"/>
+ <tab_container name="postcard_tabs">
+ <panel name="panel_postcard_message" label="Nachricht"/>
+ <panel name="panel_postcard_settings" label="Einstellungen"/>
+ </tab_container>
+ <button name="cancel_btn" label="Abbrechen"/>
+ <button name="send_btn" label="Absenden"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
index 8d1c52dea8..0f21edd1b6 100755
--- a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
@@ -1,28 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_profile">
<text name="title">
- In meinem Profil posten
+ Profil
</text>
<combo_box label="Auflösung" name="profile_size_combo">
- <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
- <combo_box.item label="640x480" name="640x480"/>
- <combo_box.item label="800x600" name="800x600"/>
- <combo_box.item label="1024x768" name="1024x768"/>
- <combo_box.item label="Benutzerdefiniert" name="Custom"/>
+ <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
+ <combo_box.item label="640x480" name="640x480"/>
+ <combo_box.item label="800x600" name="800x600"/>
+ <combo_box.item label="1024x768" name="1024x768"/>
+ <combo_box.item label="Benutzerdefiniert" name="Custom"/>
</combo_box>
- <layout_stack name="profile_image_params_ls">
- <layout_panel name="profile_image_size_lp">
- <spinner label="Breite" name="profile_snapshot_width"/>
- <spinner label="Höhe" name="profile_snapshot_height"/>
- <check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/>
- </layout_panel>
- <layout_panel name="profile_image_metadata_lp">
- <text name="caption_label">
- Bildunterschrift:
- </text>
- <check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/>
- </layout_panel>
- </layout_stack>
+ <spinner label="Breite x Höhe" name="profile_snapshot_width"/>
+ <check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/>
+ <text name="caption_label">
+ Bildunterschrift:
+ </text>
+ <check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/>
<button label="Abbrechen" name="cancel_btn"/>
<button label="Posten" name="post_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/floater_facebook.xml b/indra/newview/skins/default/xui/en/floater_facebook.xml
index 4535b9084e..2ea34fb751 100644
--- a/indra/newview/skins/default/xui/en/floater_facebook.xml
+++ b/indra/newview/skins/default/xui/en/floater_facebook.xml
@@ -2,7 +2,6 @@
<floater
positioning="cascading"
can_close="true"
- can_resize="true"
help_topic="floater_facebook"
layout="topleft"
name="floater_facebook"
@@ -10,23 +9,15 @@
single_instance="true"
reuse_instance="true"
title="POST TO FACEBOOK"
- min_height="501"
+ min_height="462"
min_width="304"
- height="482"
- width="304">
- <panel
- height="482"
- width="304"
- visible="true"
- name="background"
- follows="all"
- top="0"
- left="0">
+ height="462"
+ width="272">
<tab_container
name="tabs"
tab_group="1"
- tab_min_width="70"
- tab_height="30"
+ tab_min_width="64"
+ tab_height="21"
tab_position="top"
top="7"
height="437"
@@ -57,23 +48,19 @@
follows="all"
label="FRIENDS"
name="panel_facebook_friends"/>
- <panel
+ <!--<panel
filename="panel_facebook_account.xml"
class="llfacebookaccountpanel"
follows="all"
label="ACCOUNT"
- name="panel_facebook_account"/>
+ name="panel_facebook_account"/>-->
</tab_container>
- <panel
- name="connection_status_panel"
- follows="left|bottom|right"
- height="24">
<text
name="connection_error_text"
type="string"
follows="left|bottom|right"
- top="5"
- left="9"
+ bottom="-5"
+ left="10"
width="250"
height="20"
wrap="true"
@@ -88,14 +75,14 @@
height="24"
width="24"
name="connection_loading_indicator"
- top="2"
- left="9"
+ top_delta="-2"
+ left="10"
visible="true"/>
<text
name="connection_loading_text"
type="string"
follows="left|bottom|right"
- top="5"
+ top_delta="2"
left_pad="5"
width="250"
height="20"
@@ -106,6 +93,4 @@
font="SansSerif">
Loading...
</text>
- </panel>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_flickr.xml b/indra/newview/skins/default/xui/en/floater_flickr.xml
index 1a9ffd0489..24de3ddd8d 100644
--- a/indra/newview/skins/default/xui/en/floater_flickr.xml
+++ b/indra/newview/skins/default/xui/en/floater_flickr.xml
@@ -10,11 +10,11 @@
single_instance="true"
reuse_instance="true"
title="UPLOAD TO FLICKR"
- height="622"
- width="304">
+ height="590"
+ width="272">
<panel
- height="622"
- width="304"
+ height="590"
+ width="272"
visible="true"
name="background"
follows="all"
@@ -24,10 +24,11 @@
name="tabs"
tab_group="1"
tab_min_width="70"
- tab_height="30"
+ tab_height="21"
tab_position="top"
top="7"
- height="577"
+ height="555"
+ follows="all"
halign="center"
use_highlighting_on_hover="true">
<panel
@@ -51,8 +52,8 @@
name="connection_error_text"
type="string"
follows="left|bottom|right"
- top="5"
- left="9"
+ bottom="-5"
+ left="10"
width="250"
height="20"
wrap="true"
@@ -67,14 +68,14 @@
height="24"
width="24"
name="connection_loading_indicator"
- top="2"
- left="9"
+ top_delta="-2"
+ left="10"
visible="true"/>
<text
name="connection_loading_text"
type="string"
follows="left|bottom|right"
- top="5"
+ top_delta="2"
left_pad="5"
width="250"
height="20"
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index c86ed595a7..17bc818cc1 100755
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_minimize="false"
- height="408"
+ height="440"
layout="topleft"
name="Inventory Finder"
help_topic="inventory_finder"
@@ -95,36 +95,36 @@
width="126" />
<icon
height="16"
- image_name="Inv_Mesh"
+ image_name="Inv_Notecard"
layout="topleft"
left="8"
mouse_opaque="true"
- name="icon_mesh"
- top="142"
+ name="icon_notecard"
+ top="122"
width="16" />
<check_box
height="16"
- label="Meshes"
+ label="Notecards"
layout="topleft"
left_pad="2"
- name="check_mesh"
+ name="check_notecard"
top_delta="0"
width="126" />
<icon
height="16"
- image_name="Inv_Notecard"
+ image_name="Inv_Mesh"
layout="topleft"
left="8"
mouse_opaque="true"
- name="icon_notecard"
- top="122"
+ name="icon_mesh"
+ top="142"
width="16" />
<check_box
height="16"
- label="Notecards"
+ label="Meshes"
layout="topleft"
left_pad="2"
- name="check_notecard"
+ name="check_mesh"
top_delta="0"
width="126" />
<icon
@@ -223,25 +223,33 @@
top="262"
width="100" />
<button
- follows="left|top"
height="20"
label="None"
label_selected="None"
- layout="topleft"
left_delta="0"
name="None"
- top_pad="4"
+ left_pad="10"
width="100" />
<check_box
height="16"
label="Always show folders"
layout="topleft"
- left_delta="0"
+ left="8"
name="check_show_empty"
- top_pad="4"
+ top_pad="6"
width="144" />
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="8"
+ width="260"/>
<check_box
height="16"
+ top="324"
label="Since Logoff"
layout="topleft"
left_delta="0"
@@ -257,36 +265,74 @@
layout="topleft"
left_delta="0"
name="- OR -"
- top_delta="16"
+ top="342"
width="144">
- OR -
</text>
+ <radio_group
+ height="16"
+ layout="topleft"
+ name="date_search_direction"
+ top="360"
+ left="8"
+ width="270">
+ <radio_item
+ label="Newer than"
+ layout="topleft"
+ name="newer"
+ top_pad="6"
+ left="0" />
+ <radio_item
+ label="Older than"
+ layout="topleft"
+ name="older"
+ top_delta="0"
+ left="120" />
+ </radio_group>
<spinner
follows="left|top"
height="16"
increment="1"
initial_value="0"
- label="Hours Ago"
- label_width="64"
layout="topleft"
left_delta="0"
max_val="240000"
name="spin_hours_ago"
top_pad="4"
- width="144" />
+ width="64" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="3"
+ top_delta="4"
+ width="80">
+ Hours
+ </text>
<spinner
follows="left|top"
height="16"
increment="1"
initial_value="0"
- label="Days Ago"
- label_width="64"
layout="topleft"
- left_delta="0"
max_val="10000"
name="spin_days_ago"
top_pad="4"
- width="144" />
+ left="8"
+ width="64" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="3"
+ top_delta="4"
+ width="80">
+ Days
+ </text>
<button
follows="top|right"
height="20"
@@ -295,6 +341,6 @@
layout="topleft"
name="Close"
right="-6"
- top="382"
+ top="406"
width="76" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 771035b40d..f0a175902b 100755
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -3,15 +3,17 @@
positioning="cascading"
legacy_header_height="18"
can_minimize="true"
+ can_resize="false"
can_close="true"
- height="500"
+ height="455"
layout="topleft"
name="Snapshot"
help_topic="snapshot"
save_rect="true"
save_visibility="false"
title="SNAPSHOT"
- width="470">
+ width="624"
+ min_height="455">
<floater.string
name="unknown">
unknown
@@ -57,11 +59,11 @@
Saved to Computer!
</string>
<string
- name="facebook_failed_str">
+ name="facebook_failed_str">
Failed to upload image to your Facebook timeline.
</string>
<string
- name="profile_failed_str">
+ name="profile_failed_str">
Failed to upload image to your Profile Feed.
</string>
<string
@@ -78,35 +80,231 @@
</string>
<button
follows="left|top"
- height="23"
- image_overlay="TabIcon_Close_Off"
+ height="25"
+ image_overlay="Refresh_Off"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_selected="Toolbar_Middle_Selected"
+ image_unselected="Toolbar_Middle_Off"
+ image_overlay_alignment="left"
+ imgoverlay_label_space="5"
+ pad_bottom="0"
+ halign="left"
layout="topleft"
- left="236"
- name="advanced_options_btn"
- tool_tip="Advanced options"
- top="25"
- width="23" />
- <ui_ctrl
- height="160"
- width="250"
- layout="topleft"
- name="thumbnail_placeholder"
- top="50"
- follows="left|top"
- left="10">
+ left="10"
+ label="REFRESH"
+ name="new_snapshot_btn"
+ top_pad="26"
+ width="167" />
+ <button
+ follows="left|top"
+ control_name="AdvanceSnapshot"
+ invisibility_control="AdvanceSnapshot"
+ height="25"
+ is_toggle="true"
+ layout="topleft"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_selected="Toolbar_Middle_Off"
+ image_unselected="Toolbar_Middle_Off"
+ image_overlay="Conv_toolbar_expand"
+ name="retract_btn"
+ left_pad="1"
+ top_delta="0"
+ width="31" />
+ <button
+ follows="left|top"
+ control_name="AdvanceSnapshot"
+ visibility_control="AdvanceSnapshot"
+ height="25"
+ is_toggle="true"
+ layout="topleft"
+ image_overlay="Conv_toolbar_collapse"
+ image_hover_unselected="Toolbar_Middle_Over"
+ image_selected="Toolbar_Middle_Off"
+ image_unselected="Toolbar_Middle_Off"
+ name="extend_btn"
+ left_delta="0"
+ top_delta="0"
+ width="31" />
+ <panel
+ height="154"
+ layout="topleft"
+ follows="top|left"
+ left="0"
+ name="advanced_options_panel"
+ top_pad="-6"
+ width="210">
+ <view_border
+ bevel_style="in"
+ follows="left|top|right"
+ height="1"
+ left="10"
+ layout="topleft"
+ name="advanced_options_hr"
+ right="-1"
+ top_pad="5"
+ />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="layer_type_label"
+ top_pad="10"
+ width="100">
+ Capture:
+ </text>
+ <combo_box
+ follows="left|top|right"
+ height="23"
+ label="Image Layers"
+ layout="topleft"
+ left="30"
+ name="layer_types"
+ right="-2">
+ <combo_box.item
+ label="Colors"
+ name="Colors"
+ value="colors" />
+ <combo_box.item
+ label="Depth"
+ name="Depth"
+ value="depth" />
+ </combo_box>
+ <check_box
+ label="Interface"
+ layout="topleft"
+ left="30"
+ height="16"
+ top_pad="8"
+ width="180"
+ name="ui_check" />
+ <check_box
+ label="HUDs"
+ layout="topleft"
+ height="16"
+ left="30"
+ top_pad="1"
+ width="180"
+ name="hud_check" />
+ <check_box
+ label="Freeze frame (fullscreen)"
+ layout="topleft"
+ height="16"
+ left="10"
+ top_pad="1"
+ width="180"
+ name="freeze_frame_check" />
+ <check_box
+ label="Auto-refresh"
+ layout="topleft"
+ height="16"
+ left="10"
+ top_pad="1"
+ width="180"
+ name="auto_snapshot_check" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="filter_list_label"
+ top_pad="10"
+ width="50">
+ Filter:
+ </text>
+ <combo_box
+ control_name="PhotoFilters"
+ follows="left|right|top"
+ name="filters_combobox"
+ tool_tip="Image filters"
+ top_delta="-3"
+ left="50"
+ right="-1"
+ height="21"
+ width="135">
+ <combo_box.item
+ label="No Filter"
+ name="NoFilter"
+ value="NoFilter" />
+ </combo_box>
+ <view_border
+ bevel_style="in"
+ follows="left|top|right"
+ height="1"
+ left="10"
+ layout="topleft"
+ name="advanced_options_hr"
+ right="-1"
+ top_pad="7"
+ />
+ </panel>
+ <panel_container
+ follows="left|top"
+ height="230"
+ layout="topleft"
+ left="0"
+ name="panel_container"
+ default_panel_name="panel_snapshot_options"
+ top_pad="10"
+ width="215">
+ <panel
+ class="llpanelsnapshotoptions"
+ filename="panel_snapshot_options.xml"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="panel_snapshot_options"
+ top="0" />
<panel
- background_visible="true"
- bg_alpha_color="0.9 1 0.9 1"
+ class="llpanelsnapshotprofile"
+ follows="all"
+ layout="topleft"
+ name="panel_snapshot_profile"
+ filename="panel_snapshot_profile.xml" />
+ <panel
+ class="llpanelsnapshotpostcard"
+ follows="all"
+ layout="topleft"
+ name="panel_snapshot_postcard"
+ filename="panel_snapshot_postcard.xml" />
+ <panel
+ class="llpanelsnapshotinventory"
+ follows="all"
+ layout="topleft"
+ name="panel_snapshot_inventory"
+ filename="panel_snapshot_inventory.xml" />
+ <panel
+ class="llpanelsnapshotlocal"
+ follows="all"
+ layout="topleft"
+ name="panel_snapshot_local"
+ filename="panel_snapshot_local.xml" />
+ </panel_container>
+ <view_border
+ bevel_style="in"
+ follows="left|top"
+ height="1"
+ left="10"
+ layout="topleft"
+ name="status_hr"
+ width="199"
+ top_pad="-16"/>
+ <panel
+ background_visible="false"
follows="left|top"
font="SansSerifLarge"
halign="center"
height="20"
layout="topleft"
- left="0"
+ left="10"
length="1"
name="succeeded_panel"
- right="-1"
- top="0"
+ width="198"
+ top_pad="1"
type="string"
visible="false">
<text
@@ -119,7 +317,7 @@
length="1"
name="succeeded_lbl"
right="-1"
- text_color="0.2 0.5 0.2 1"
+ text_color="0.2 0.85 0.2 1"
top="4"
translate="false"
type="string">
@@ -127,18 +325,17 @@
</text>
</panel>
<panel
- background_visible="true"
- bg_alpha_color="1 0.9 0.9 1"
+ background_visible="false"
follows="left|top"
font="SansSerifLarge"
halign="center"
height="20"
layout="topleft"
- left_delta="0"
+ left="10"
length="1"
name="failed_panel"
- right="-1"
- top="0"
+ width="198"
+ top_delta="0"
type="string"
visible="false">
<text
@@ -151,7 +348,7 @@
length="1"
name="failed_lbl"
right="-1"
- text_color="0.5 0.2 0.2 1"
+ text_color="0.95 0.4 0.4 1"
top="4"
translate="false"
type="string">
@@ -160,51 +357,39 @@
</panel>
<loading_indicator
follows="left|top"
- height="48"
+ height="24"
layout="topleft"
name="working_indicator"
- left="101"
- top="46"
+ left="10"
+ top_delta="0"
visible="false"
- width="48" />
+ width="24" />
<text
- follows="left|top|right"
+ follows="left|top"
font="SansSerifBold"
height="14"
layout="topleft"
- left="5"
+ left_pad="3"
length="1"
- halign="center"
+ halign="left"
name="working_lbl"
- right="-5"
- top="98"
+ top_delta="5"
translate="false"
type="string"
visible="false"
- width="130">
+ width="162">
Working
</text>
- <button
- follows="left|top"
- height="22"
- image_overlay="Refresh_Off"
- layout="topleft"
- left="20"
- name="new_snapshot_btn"
- bottom="-20"
- visible="false"
- width="22" />
<text
follows="left|top"
font="SansSerifBold"
halign="left"
height="18"
layout="topleft"
- left_pad="10"
+ left="10"
length="1"
name="refresh_lbl"
- right="-5"
- text_color="red"
+ text_color="0.95 0.4 0.4 1"
top_delta="0"
translate="false"
type="string"
@@ -212,37 +397,44 @@
width="130">
Refresh to save.
</text>
- </ui_ctrl>
+ <ui_ctrl
+ layout="topleft"
+ name="thumbnail_placeholder"
+ top="23"
+ left="215"
+ width="400"
+ height="400"
+ follows="top|left"/>
<view_border
bevel_style="in"
height="21"
- width="250"
layout="topleft"
name="img_info_border"
- top_pad="3"
- follows="left|top"
- left_delta="0"
- />
+ top_pad="0"
+ right="-10"
+ follows="left|top|right"
+ left_delta="0"/>
<text
type="string"
font="SansSerifSmall"
length="1"
- follows="left|top"
+ follows="left|top|right"
height="14"
layout="topleft"
- left_delta="5"
+ left="220"
+ right="-20"
halign="left"
name="image_res_text"
top_delta="5"
- width="100">
- [WIDTH] x [HEIGHT] px
+ width="200">
+ [WIDTH]px (width) x [HEIGHT]px (height)
</text>
<text
- follows="left|top"
+ follows="right|top"
font="SansSerifSmall"
height="14"
layout="topleft"
- left="200"
+ left="-65"
length="1"
halign="right"
name="file_size_label"
@@ -251,161 +443,4 @@
width="50">
[SIZE] KB
</text>
- <panel_container
- follows="left|top"
- height="260"
- layout="topleft"
- left="0"
- name="panel_container"
- default_panel_name="panel_snapshot_options"
- top_pad="10"
- width="270">
- <panel
- class="llpanelsnapshotoptions"
- filename="panel_snapshot_options.xml"
- follows="all"
- layout="topleft"
- left="0"
- name="panel_snapshot_options"
- top="0" />
- <panel
- class="llpanelsnapshotprofile"
- follows="all"
- layout="topleft"
- name="panel_snapshot_profile"
- filename="panel_snapshot_profile.xml" />
- <panel
- class="llpanelsnapshotpostcard"
- follows="all"
- layout="topleft"
- name="panel_snapshot_postcard"
- filename="panel_snapshot_postcard.xml" />
- <panel
- class="llpanelsnapshotinventory"
- follows="all"
- layout="topleft"
- name="panel_snapshot_inventory"
- filename="panel_snapshot_inventory.xml" />
- <panel
- class="llpanelsnapshotlocal"
- follows="all"
- layout="topleft"
- name="panel_snapshot_local"
- filename="panel_snapshot_local.xml" />
- </panel_container>
- <panel
- height="295"
- layout="topleft"
- left="270"
- name="advanced_options_panel"
- top="20"
- width="200">
- <text
- type="string"
- font="SansSerifSmall"
- length="1"
- follows="left|top"
- height="14"
- layout="topleft"
- left="10"
- halign="left"
- name="advanced_options_label"
- right="-10"
- top="10">
- ADVANCED OPTIONS
- </text>
- <view_border
- bevel_style="in"
- follows="left|top|right"
- height="1"
- left="10"
- layout="topleft"
- name="advanced_options_hr"
- right="-10"
- top_pad="5"
- />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="13"
- layout="topleft"
- left="10"
- name="layer_type_label"
- top_pad="10"
- width="50">
- Capture:
- </text>
- <combo_box
- follows="left|top|right"
- height="23"
- label="Image Layers"
- layout="topleft"
- left="30"
- name="layer_types"
- right="-10">
- <combo_box.item
- label="Colors"
- name="Colors"
- value="colors" />
- <combo_box.item
- label="Depth"
- name="Depth"
- value="depth" />
- </combo_box>
- <check_box
- label="Interface"
- layout="topleft"
- left="30"
- top_pad="10"
- width="180"
- name="ui_check" />
- <check_box
- label="HUDs"
- layout="topleft"
- left="30"
- top_pad="10"
- width="180"
- name="hud_check" />
- <check_box
- label="Freeze frame (fullscreen)"
- layout="topleft"
- left="10"
- top_pad="8"
- width="180"
- name="freeze_frame_check" />
- <check_box
- label="Auto-refresh"
- layout="topleft"
- left="10"
- top_pad="8"
- width="180"
- name="auto_snapshot_check" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="13"
- layout="topleft"
- left="10"
- name="filter_list_label"
- top_pad="10"
- width="50">
- Filter:
- </text>
- <combo_box
- control_name="PhotoFilters"
- follows="left|right|top"
- name="filters_combobox"
- tool_tip="Image filters"
- top_pad="8"
- left="30"
- height="21"
- width="135">
- <combo_box.item
- label="No Filter"
- name="NoFilter"
- value="NoFilter" />
- </combo_box>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
index 0b71177345..36ceddd305 100755
--- a/indra/newview/skins/default/xui/en/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml
@@ -38,6 +38,18 @@
name="none_descriptor">
None found.
</floater.string>
+ <floater.string
+ name="URLs">
+ URLs
+ </floater.string>
+ <floater.string
+ name="memory">
+ Memory (KB)
+ </floater.string>
+
+
+
+
<text
type="string"
length="1"
@@ -82,7 +94,7 @@
name="parcel"
width="120" />
<scroll_list.columns
- label="Time"
+ label="Date"
name="time"
width="130" />
<scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/floater_twitter.xml b/indra/newview/skins/default/xui/en/floater_twitter.xml
index aa5bfce2e9..3e1a91e58d 100644
--- a/indra/newview/skins/default/xui/en/floater_twitter.xml
+++ b/indra/newview/skins/default/xui/en/floater_twitter.xml
@@ -10,21 +10,13 @@
single_instance="true"
reuse_instance="true"
title="TWITTER"
- height="502"
- width="304">
- <panel
- height="502"
- width="304"
- visible="true"
- name="background"
- follows="all"
- top="0"
- left="0">
+ height="462"
+ width="272">
<tab_container
name="tabs"
tab_group="1"
tab_min_width="70"
- tab_height="30"
+ tab_height="21"
tab_position="top"
top="7"
height="457"
@@ -43,17 +35,13 @@
label="ACCOUNT"
name="panel_twitter_account"/>
</tab_container>
- <panel
- name="connection_status_panel"
- follows="left|bottom|right"
- height="24">
<text
name="connection_error_text"
type="string"
follows="left|bottom|right"
- top="5"
- left="9"
- width="250"
+ bottom="-5"
+ left="10"
+ width="252"
height="20"
wrap="true"
halign="left"
@@ -67,16 +55,16 @@
height="24"
width="24"
name="connection_loading_indicator"
- top="2"
- left="9"
+ top_delta="-2"
+ left="10"
visible="true"/>
<text
name="connection_loading_text"
type="string"
follows="left|bottom|right"
- top="5"
+ top_delta="2"
left_pad="5"
- width="250"
+ width="223"
height="20"
wrap="true"
halign="left"
@@ -85,6 +73,4 @@
font="SansSerif">
Loading...
</text>
- </panel>
- </panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index d2519a5aa4..06d0b849a3 100755
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -63,7 +63,7 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
- label="Show Filters"
+ label="Show Filters..."
layout="topleft"
name="show_filters">
<on_click
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 772d81c448..2c7dbc3c18 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -169,6 +169,16 @@ No tutorial is currently available.
<notification
icon="alertmodal.tga"
+ name="GenericAlertOK"
+ type="alertmodal">
+[MESSAGE]
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="BadInstallation"
type="alertmodal">
An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer.
@@ -4631,6 +4641,17 @@ The region you're trying to visit contains [REGIONMATURITY] content, but your cu
<notification
icon="alertmodal.tga"
+ name="RegionTPSpecialUsageBlocked"
+ type="alertmodal">
+ <tag>fail</tag>
+ Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="PreferredMaturityChanged"
type="alertmodal">
You won't receive any more notifications that you're about to visit a region with [RATING] content. You may change your content preferences in the future by using Me &gt; Preferences &gt; General from the menu bar.
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_account.xml b/indra/newview/skins/default/xui/en/panel_facebook_account.xml
deleted file mode 100644
index 122cbfb717..0000000000
--- a/indra/newview/skins/default/xui/en/panel_facebook_account.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<panel
- height="400"
- width="304"
- layout="topleft"
- follows="all"
- name="panel_facebook_account">
- <string
- name="facebook_connected"
- value="You are connected to Facebook as:" />
- <string
- name="facebook_disconnected"
- value="Not connected to Facebook" />
- <text
- layout="topleft"
- length="1"
- follows="top|left"
- font="SansSerif"
- height="16"
- left="9"
- name="account_caption_label"
- top="21"
- type="string">
- Not connected to Facebook.
- </text>
- <text
- layout="topleft"
- top_pad="2"
- length="1"
- follows="top|left"
- font="SansSerif"
- height="16"
- left="9"
- name="account_name_label"
- parse_urls="true"
- type="string"/>
- <panel
- layout="topleft"
- follows="left|top"
- name="panel_buttons"
- height="345"
- left="9">
- <button
- layout="topleft"
- follows="left|top"
- top_pad="9"
- visible="true"
- height="23"
- label="Connect..."
- name="connect_btn"
- width="210">
- <commit_callback function="SocialSharing.Connect"/>
- </button>
-
- <button
- layout="topleft"
- follows="left|top"
- top_delta="0"
- height="23"
- label="Disconnect"
- name="disconnect_btn"
- width="210"
- visible="false">
- <commit_callback function="SocialSharing.Disconnect"/>
- </button>
- <text
- layout="topleft"
- length="1"
- follows="top|left"
- height="16"
- left="0"
- name="account_learn_more_label"
- top_pad="20"
- type="string">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
index 9d21a3a293..97994fb08b 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml
@@ -1,6 +1,6 @@
<panel
height="400"
- width="304"
+ width="272"
layout="topleft"
follows="all"
name="panel_facebook_friends">
@@ -9,17 +9,17 @@
value="You currently do not have any Facebook friends who are also Second Life residents. Ask your Facebook friends to join Second Life today!" />
<string
name="facebook_friends_no_connected"
- value="You're currently not connected to Facebook. Please go to the Account tab to connect and enable this feature." />
+ value="You're currently not connected to Facebook. Please go to the Status tab to connect and enable this feature." />
<accordion
- background_visible="true"
+ background_visible="false"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
follows="all"
- height="408"
+ height="383"
layout="topleft"
- left="3"
+ left="10"
name="friends_accordion"
- right="-2"
+ right="-10"
top_pad="2">
<accordion_tab
layout="topleft"
@@ -36,7 +36,7 @@
name="second_life_friends"
show_permissions_granted="true"
top="0"
- width="307" />
+ width="272" />
</accordion_tab>
<accordion_tab
layout="topleft"
@@ -53,19 +53,20 @@
name="suggested_friends"
show_permissions_granted="true"
top="0"
- width="307" />
+ width="272" />
</accordion_tab>
</accordion>
<text
layout="topleft"
word_wrap="true"
height="64"
- width="290"
+ width="250"
follows="top|left|right"
font="SansSerif"
- left="9"
+ left="10"
+ right="-10"
name="facebook_friends_status"
- top="21"
+ top="5"
type="string">
Not connected to Facebook.
</text>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
index b5b6dee004..22e6598352 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml
@@ -1,29 +1,19 @@
<panel
height="400"
- width="304"
+ width="272"
layout="topleft"
follows="all"
name="panel_facebook_photo">
- <layout_stack
- layout="topleft"
- border_size="0"
- height="392"
- follows="all"
- orientation="vertical"
- name="stack_photo"
- top="8">
- <layout_panel
- name="snapshot_panel"
- height="367">
<combo_box
control_name="FacebookPhotoResolution"
follows="left|top"
- top="6"
- left="9"
+ layout="topleft"
+ top="7"
+ left="10"
name="resolution_combobox"
tool_tip="Image resolution"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -47,13 +37,14 @@
</combo_box>
<combo_box
control_name="FacebookPhotoFilters"
- follows="right|top"
+ follows="left|top"
+ layout="topleft"
name="filters_combobox"
tool_tip="Image filters"
- top="6"
- left="165"
+ top="7"
+ left_pad="4"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="No Filter"
name="NoFilter"
@@ -61,48 +52,62 @@
</combo_box>
<panel
height="150"
- width="250"
+ width="252"
visible="true"
+ layout="topleft"
name="thumbnail_placeholder"
- top="33"
- follows="left|top|right"
- left="9">
+ top_pad="5"
+ follows="left|top|rith"
+ right="-10"
+ left="10">
</panel>
- <button
- follows="left|top"
- height="23"
- label="Refresh"
- left="9"
- top_pad="5"
- name="new_snapshot_btn"
- tool_tip="Click to refresh"
- visible="true"
- width="100" >
- <button.commit_callback
- function="SocialSharing.RefreshPhoto" />
- </button>
- <text
+ <text
follows="left|top"
+ layout="topleft"
font="SansSerif"
text_color="EmphasisColor"
height="14"
- top_pad="-19"
- left_pad="-30"
+ top_pad="2"
+ left="10"
length="1"
halign="center"
name="working_lbl"
translate="false"
type="string"
visible="true"
- width="150">
+ width="251">
Refreshing...
</text>
+ <view_border
+ bevel_style="in"
+ follows="left|top"
+ layout="topleft"
+ height="1"
+ left="10"
+ name="refresh_border"
+ width="250"
+ top_pad="0"/>
+ <button
+ follows="left|top"
+ layout="topleft"
+ height="23"
+ label="Refresh"
+ left="10"
+ top_pad="5"
+ name="new_snapshot_btn"
+ tool_tip="Click to refresh"
+ visible="true"
+ width="100" >
+ <button.commit_callback
+ function="SocialSharing.RefreshPhoto" />
+ </button>
<button
follows="right|top"
+ layout="topleft"
height="23"
label="Preview"
- left="200"
- top_pad="-19"
+ right="-10"
+ top_delta="0"
name="big_preview_btn"
tool_tip="Click to toggle preview"
is_toggle="true"
@@ -114,9 +119,10 @@
<text
length="1"
follows="top|left|right"
+ layout="topleft"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="caption_label"
top_pad="20"
type="string">
@@ -124,23 +130,22 @@
</text>
<text_editor
follows="left|top|right|bottom"
+ layout="topleft"
height="87"
width="250"
- left="9"
+ left="10"
+ right="-10"
length="1"
max_length="700"
name="photo_caption"
type="string"
word_wrap="true">
</text_editor>
- </layout_panel>
- <layout_panel
- name="photo_button_panel"
- height="25">
<button
- follows="left|bottom"
- top="0"
- left="9"
+ follows="left|top"
+ layout="topleft"
+ top_pad="22"
+ left="10"
height="23"
label="Post"
name="post_photo_btn"
@@ -149,16 +154,15 @@
function="SocialSharing.SendPhoto" />
</button>
<button
- follows="left|bottom"
+ follows="right|top"
+ layout="topleft"
height="23"
label="Cancel"
name="cancel_photo_btn"
- left_pad="15"
+ right="-10"
top_delta="0"
width="100">
<button.commit_callback
function="SocialSharing.Cancel" />
- </button>
- </layout_panel>
- </layout_stack>
+ </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_place.xml b/indra/newview/skins/default/xui/en/panel_facebook_place.xml
index 84c87df523..f87b008c4e 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_place.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_place.xml
@@ -1,115 +1,96 @@
<panel
height="400"
- width="304"
+ width="272"
layout="topleft"
follows="all"
name="panel_facebook_place">
- <layout_stack
- layout="topleft"
- border_size="0"
- height="392"
- follows="all"
- orientation="vertical"
- name="stack_place"
- top="8">
- <layout_panel
- name="place_detail_panel"
- height="181">
<text
length="1"
follows="top|left|right"
+ layout="topleft"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="place_caption_label"
- top="13"
+ top="5"
type="string">
Say something about where you are:
</text>
<text_editor
follows="top|left|right"
- height="150"
+ layout="topleft"
+ height="70"
width="250"
- left="9"
+ left="10"
+ right="-10"
length="1"
max_length="700"
name="place_caption"
type="string"
word_wrap="true">
</text_editor>
- </layout_panel>
- <layout_panel
- name="place_map_panel"
- height="186">
+ <check_box
+ follows="left|top"
+ layout="topleft"
+ initial_value="false"
+ height="16"
+ top_pad="8"
+ width="8"
+ label="Include overhead view of location"
+ name="add_place_view_cb"
+ left="10"/>
<panel
follows="left|top"
- height="128"
- width="128"
+ layout="topleft"
+ height="243"
+ width="250"
background_visible="true"
bg_opaque_color="Black"
bg_alpha_color="Black"
- top="20"
- left="9"
+ top_pad="8"
+ left="10"
+ right="-12"
visible="true"
name="map_border">
</panel>
- <loading_indicator
- follows="left|top"
- height="24"
- width="24"
- name="map_loading_indicator"
- top="77"
- left="61"
- visible="true"/>
<icon
follows="left|top"
- height="128"
- width="128"
+ layout="topleft"
+ height="243"
+ width="250"
image_name="Map_Placeholder_Icon"
- layout="topleft"
- top="20"
- left="9"
+ top_delta="0"
+ right="-12"
+ left="10"
visible="true"
name="map_placeholder">
</icon>
<icon
follows="left|top"
- height="128"
- width="128"
+ layout="topleft"
+ height="243"
+ width="250"
image_name="Map_Placeholder_Icon"
- layout="topleft"
- top="20"
- left="9"
+ top_delta="0"
+ left="10"
+ right="-12"
visible="true"
name="map_default">
</icon>
- <check_box
+ <loading_indicator
follows="left|top"
- initial_value="false"
- top_delta="8"
- width="8"
- label=""
- name="add_place_view_cb"
- left_pad="5"/>
- <text
- follows="left|top"
- font="SansSerif"
- height="32"
- width="130"
- word_wrap="true"
- left_pad="12"
- top_delta="-8"
- type="string">
- Include overhead view of location
- </text>
- </layout_panel>
- <layout_panel
- name="place_button_panel"
- height="25">
+ layout="topleft"
+ height="24"
+ width="24"
+ name="map_loading_indicator"
+ top_delta="116"
+ left="126"
+ visible="false"/>
<button
follows="left|bottom"
- top="0"
- left="9"
+ layout="topleft"
+ top_pad="95"
+ left="10"
height="23"
label="Post"
name="post_place_btn"
@@ -118,16 +99,15 @@
function="SocialSharing.SendCheckin" />
</button>
<button
- follows="left|bottom"
+ follows="right|bottom"
+ layout="topleft"
height="23"
label="Cancel"
name="cancel_place_btn"
- left_pad="15"
+ right="-10"
top_delta="0"
width="100">
<button.commit_callback
function="SocialSharing.Cancel" />
</button>
- </layout_panel>
- </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_facebook_status.xml b/indra/newview/skins/default/xui/en/panel_facebook_status.xml
index 480abec558..fe0f3c9279 100644
--- a/indra/newview/skins/default/xui/en/panel_facebook_status.xml
+++ b/indra/newview/skins/default/xui/en/panel_facebook_status.xml
@@ -1,50 +1,113 @@
<panel
height="400"
- width="304"
+ width="272"
follows="all"
layout="topleft"
name="panel_facebook_status">
- <layout_stack
+ <string
+ name="facebook_connected"
+ value="You are connected to Facebook as:" />
+ <string
+ name="facebook_disconnected"
+ value="Not connected to Facebook" />
+ <text
+ layout="topleft"
+ length="1"
+ follows="top|left"
+ font="SansSerif"
+ height="16"
+ left="10"
+ name="account_caption_label"
+ top="5"
+ type="string">
+ Not connected to Facebook.
+ </text>
+ <text
+ layout="topleft"
+ top_pad="2"
+ length="1"
+ follows="top|left"
+ font="SansSerif"
+ height="16"
+ left="10"
+ name="account_name_label"
+ parse_urls="true"
+ type="string"/>
+ <panel
+ layout="topleft"
+ follows="left|top"
+ name="panel_buttons"
+ height="60"
+ left="0">
+ <button
+ layout="topleft"
+ follows="left|top"
+ top_pad="9"
+ left="10"
+ visible="true"
+ height="23"
+ label="Connect..."
+ name="connect_btn"
+ width="251">
+ <commit_callback function="SocialSharing.Connect"/>
+ </button>
+
+ <button
+ layout="topleft"
+ follows="left|top|right"
+ top_delta="0"
+ left="10"
+ right="-10"
+ height="23"
+ label="Disconnect"
+ name="disconnect_btn"
+ width="210"
+ visible="false">
+ <commit_callback function="SocialSharing.Disconnect"/>
+ </button>
+ <text
layout="topleft"
- border_size="0"
- height="392"
- follows="all"
- orientation="vertical"
- name="stack_status"
- top="8">
- <layout_panel
- name="status_detail_panel"
- height="367">
+ length="1"
+ follows="top|left|right"
+ left="10"
+ right="-10"
+ height="16"
+ name="account_learn_more_label"
+ top_pad="5"
+ type="string">
+ [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook]
+ </text>
+ </panel>
+
<text
length="1"
+ layout="topleft"
follows="top|left|right"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="status_caption_label"
- top="13"
+ top_pad="5"
type="string">
What's on your mind?
</text>
<text_editor
follows="left|top|right"
+ layout="topleft"
height="150"
- width="250"
- left="9"
+ width="252"
+ left="10"
length="1"
max_length="700"
name="status_message"
type="string"
word_wrap="true">
</text_editor>
- </layout_panel>
- <layout_panel
- name="status_button_panel"
- height="25">
<button
- follows="left|bottom"
- top="0"
- left="9"
+ follows="left|top"
+ layout="topleft"
+ top_pad="6"
+ left="10"
height="23"
label="Post"
name="post_status_btn"
@@ -53,16 +116,15 @@
function="SocialSharing.SendStatus" />
</button>
<button
- follows="left|bottom"
+ follows="right|top"
+ layout="topleft"
height="23"
label="Cancel"
name="cancel_status_btn"
- left_pad="15"
+ right="-10"
top_delta="0"
width="100">
<button.commit_callback
function="SocialSharing.Cancel" />
</button>
- </layout_panel>
- </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_flickr_account.xml b/indra/newview/skins/default/xui/en/panel_flickr_account.xml
index 506d2e2f74..5c2f335780 100644
--- a/indra/newview/skins/default/xui/en/panel_flickr_account.xml
+++ b/indra/newview/skins/default/xui/en/panel_flickr_account.xml
@@ -1,6 +1,6 @@
<panel
height="540"
- width="304"
+ width="272"
layout="topleft"
name="panel_flickr_account">
<string
@@ -15,9 +15,9 @@
follows="top|left"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="account_caption_label"
- top="21"
+ top="5"
type="string">
Not connected to Flickr.
</text>
@@ -28,7 +28,7 @@
follows="top|left"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="account_name_label"
parse_urls="true"
type="string"/>
@@ -36,12 +36,14 @@
layout="topleft"
name="panel_buttons"
height="345"
- left="9">
+ left="0">
<button
layout="topleft"
- follows="left|top"
+ follows="left|top|right"
top_pad="9"
visible="true"
+ left="10"
+ right="-10"
height="23"
label="Connect..."
name="connect_btn"
@@ -51,8 +53,10 @@
<button
layout="topleft"
- follows="left|top"
+ follows="left|top|right"
top_delta="0"
+ left="10"
+ right="-10"
height="23"
label="Disconnect"
name="disconnect_btn"
@@ -65,9 +69,9 @@
length="1"
follows="top|left"
height="16"
- left="0"
+ left="10"
name="account_learn_more_label"
- top_pad="20"
+ top_pad="5"
type="string">
[http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Learn about posting to Flickr]
</text>
diff --git a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
index 8d8ef45c0d..e31695645d 100644
--- a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml
@@ -1,28 +1,19 @@
<panel
height="540"
- width="304"
+ width="272"
+ follows="all"
layout="topleft"
name="panel_flickr_photo">
- <layout_stack
- layout="topleft"
- border_size="0"
- height="532"
- follows="all"
- orientation="vertical"
- name="stack_photo"
- top="8">
- <layout_panel
- name="snapshot_panel"
- height="507">
<combo_box
control_name="FlickrPhotoResolution"
follows="left|top"
- top="6"
- left="9"
+ layout="topleft"
+ top="7"
+ left="10"
name="resolution_combobox"
tool_tip="Image resolution"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -42,13 +33,14 @@
</combo_box>
<combo_box
control_name="FlickrPhotoFilters"
- follows="right|top"
+ follows="left|top"
+ layout="topleft"
name="filters_combobox"
tool_tip="Image filters"
- top="6"
- left="165"
+ top_delta="0"
+ left_pad="4"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="No Filter"
name="NoFilter"
@@ -59,45 +51,59 @@
width="250"
visible="true"
name="thumbnail_placeholder"
- top="33"
- follows="left|top"
- left="9">
+ top_pad="5"
+ follows="left|top|right"
+ layout="topleft"
+ right="-10"
+ left="10">
</panel>
- <button
- follows="left|top"
- height="23"
- label="Refresh"
- left="9"
- top_pad="5"
- name="new_snapshot_btn"
- tool_tip="Click to refresh"
- visible="true"
- width="100" >
- <button.commit_callback
- function="SocialSharing.RefreshPhoto" />
- </button>
- <text
+ <text
follows="left|top"
+ layout="topleft"
font="SansSerif"
text_color="EmphasisColor"
height="14"
- top_pad="-19"
- left_pad="-30"
+ top_pad="2"
+ left="10"
length="1"
halign="center"
name="working_lbl"
translate="false"
type="string"
visible="true"
- width="150">
+ width="251">
Refreshing...
</text>
+ <view_border
+ bevel_style="in"
+ follows="left|top"
+ layout="topleft"
+ height="1"
+ left="10"
+ name="refresh_border"
+ width="250"
+ top_pad="0"/>
+ <button
+ follows="left|top"
+ layout="topleft"
+ height="23"
+ label="Refresh"
+ left="10"
+ top_pad="5"
+ name="new_snapshot_btn"
+ tool_tip="Click to refresh"
+ visible="true"
+ width="100" >
+ <button.commit_callback
+ function="SocialSharing.RefreshPhoto" />
+ </button>
<button
follows="right|top"
+ layout="topleft"
height="23"
label="Preview"
- left="200"
- top_pad="-19"
+ right="-10"
+ top_delta="0"
name="big_preview_btn"
tool_tip="Click to toggle preview"
is_toggle="true"
@@ -109,19 +115,21 @@
<text
length="1"
follows="top|left|right"
+ layout="topleft"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="title_label"
- top_pad="15"
+ top_pad="10"
type="string">
Title:
</text>
<line_editor
follows="left|top"
+ layout="topleft"
height="20"
width="250"
- left="9"
+ left="10"
length="1"
max_length="256"
name="photo_title"
@@ -130,19 +138,23 @@
<text
length="1"
follows="top|left|right"
+ layout="topleft"
font="SansSerif"
height="16"
- left="9"
+ left="10"
+ right="-10"
name="description_label"
top_pad="10"
+ width="25"
type="string">
Description:
</text>
<text_editor
follows="left|top"
+ layout="topleft"
height="50"
- width="250"
- left="9"
+ width="249"
+ left="10"
length="1"
max_length="700"
name="photo_description"
@@ -151,6 +163,7 @@
</text_editor>
<check_box
follows="left|top"
+ layout="topleft"
initial_value="true"
label="Include SL location at end of description"
name="add_location_cb"
@@ -159,23 +172,25 @@
top_pad="8"/>
<text
length="1"
- follows="top|left|right"
+ follows="top|left"
+ layout="topleft"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="tags_label"
- top_pad="10"
+ top_pad="6"
type="string">
Tags:
</text>
<text
length="1"
follows="top|left"
+ layout="topleft"
font="SansSerifSmall"
text_color="White_50"
height="30"
name="tags_help_label"
- left="50"
+ left="51"
top_pad="-16"
type="string">
Separate tags with spaces
@@ -183,9 +198,10 @@ Use "" for multi-word tags
</text>
<text_editor
follows="left|top"
+ layout="topleft"
height="50"
- width="250"
- left="9"
+ width="249"
+ left="10"
length="1"
max_length="700"
name="photo_tags"
@@ -195,8 +211,9 @@ Use "" for multi-word tags
<combo_box
control_name="FlickrPhotoRating"
follows="left|top"
- top_pad="16"
- left="9"
+ layout="topleft"
+ top_pad="7"
+ left="10"
name="rating_combobox"
tool_tip="Flickr content rating"
height="21"
@@ -214,14 +231,11 @@ Use "" for multi-word tags
name="RestrictedRating"
value="3" />
</combo_box>
- </layout_panel>
- <layout_panel
- name="photo_button_panel"
- height="25">
<button
follows="left|top"
- top="0"
- left="9"
+ layout="topleft"
+ top_pad="7"
+ left="10"
height="23"
label="Upload"
name="post_photo_btn"
@@ -230,16 +244,15 @@ Use "" for multi-word tags
function="SocialSharing.SendPhoto" />
</button>
<button
- follows="left|top"
+ follows="right|top"
+ layout="topleft"
height="23"
label="Cancel"
name="cancel_photo_btn"
- left_pad="15"
+ right="-10"
top_delta="0"
width="100">
<button.commit_callback
function="SocialSharing.Cancel" />
- </button>
- </layout_panel>
- </layout_stack>
+ </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_message.xml b/indra/newview/skins/default/xui/en/panel_postcard_message.xml
index ab2a42ea01..331a08b4bb 100755
--- a/indra/newview/skins/default/xui/en/panel_postcard_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_message.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- height="380"
+ height="319"
layout="topleft"
name="panel_postcard_message"
width="490">
@@ -12,7 +12,7 @@
font="SansSerif"
height="16"
layout="topleft"
- left="12"
+ left="5"
name="to_label"
top="10"
width="60">
@@ -25,7 +25,7 @@
layout="topleft"
left_pad="10"
name="to_form"
- right="-10"
+ right="-3"
top_delta="-4" />
<text
type="string"
@@ -35,7 +35,7 @@
font="SansSerif"
height="16"
layout="topleft"
- left="12"
+ left="5"
name="name_label"
width="60">
From:
@@ -47,7 +47,7 @@
left_pad="10"
max_length_bytes="100"
name="name_form"
- right="-10"
+ right="-3"
top_delta="-4" />
<text
type="string"
@@ -57,7 +57,7 @@
font="SansSerif"
height="16"
layout="topleft"
- left="12"
+ left="5"
name="subject_label"
width="60">
Subject:
@@ -65,61 +65,24 @@
<line_editor
follows="left|top|right"
height="20"
- label="Type your subject here."
layout="topleft"
left_pad="10"
max_length_bytes="100"
name="subject_form"
- right="-10"
+ right="-3"
top_delta="-4" />
- <text
- type="string"
- length="1"
- bottom_delta="23"
- follows="top|left|right"
- font="SansSerif"
- layout="topleft"
- left="12"
- name="msg_label"
- right="-10">
- Message:
- </text>
<text_editor
type="string"
length="1"
follows="left|top|right"
- height="60"
+ height="48"
layout="topleft"
- left_delta="0"
+ left="5"
max_length="700"
name="msg_form"
- right="-10"
- top_pad="10"
+ right="-4"
+ top_pad="5"
word_wrap="true">
Type your message here.
</text_editor>
- <button
- follows="right|bottom"
- height="23"
- label="Cancel"
- layout="topleft"
- name="cancel_btn"
- right="-32"
- top="350"
- width="100">
- <button.commit_callback
- function="Postcard.Cancel" />
- </button>
- <button
- follows="right|bottom"
- height="23"
- label="Send"
- layout="topleft"
- left_delta="-106"
- name="send_btn"
- top_delta="0"
- width="100">
- <button.commit_callback
- function="Postcard.Send" />
- </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
index 3f67a48b14..525149d7ee 100755
--- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
+++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
@@ -9,10 +9,10 @@
height="23"
label="Resolution"
layout="topleft"
- left="10"
+ left="5"
name="postcard_size_combo"
- right="-10"
- top_pad="10">
+ right="-3"
+ top_pad="5">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -34,103 +34,55 @@
name="Custom"
value="[i-1,i-1]" />
</combo_box>
- <layout_stack
- animate="false"
- follows="all"
- height="275"
- layout="bottomleft"
- name="postcard_image_params_ls"
- left_delta="0"
- orientation="vertical"
- top_pad="10"
- right="-10">
- <layout_panel
- follows="top|left|right"
- height="60"
- layout="topleft"
- left="0"
- name="postcard_image_size_lp"
- auto_resize="false"
- top="0"
- right="-1"
- visible="true">
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Width"
- label_width="40"
- layout="topleft"
- left="10"
- max_val="6016"
- min_val="32"
- name="postcard_snapshot_width"
- top_pad="10"
- width="95" />
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Height"
- label_width="40"
- layout="topleft"
- left_pad="5"
- max_val="6016"
- min_val="32"
- name="postcard_snapshot_height"
- top_delta="0"
- width="95" />
- <check_box
- height="10"
- bottom_delta="20"
- follows="left|top"
- label="Constrain proportions"
- layout="topleft"
- left="10"
- name="postcard_keep_aspect_check" />
- </layout_panel>
- <layout_panel
- follows="top|left|right"
- height="23"
- layout="topleft"
- left="0"
- name="postcard_image_format_quality_lp"
- auto_resize="true"
- top="0"
- right="-1"
- visible="true">
- <slider
- decimal_digits="0"
- follows="left|top"
- height="15"
- increment="1"
- initial_value="75"
- label="Image quality"
- label_width="80"
- layout="topleft"
- left="0"
- max_val="100"
- name="image_quality_slider"
- top_pad="7"
- width="190" />
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- length="1"
- height="14"
- layout="topleft"
- left_pad="-5"
- halign="left"
- name="image_quality_level"
- top_delta="0"
- width="60">
- ([QLVL])
- </text>
- </layout_panel>
- </layout_stack>
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label="Width x Height"
+ label_width="90"
+ layout="topleft"
+ left="5"
+ max_val="6016"
+ min_val="32"
+ name="postcard_snapshot_width"
+ top_pad="5"
+ width="144" />
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label=""
+ label_width="0"
+ layout="topleft"
+ left_pad="0"
+ max_val="6016"
+ min_val="32"
+ name="postcard_snapshot_height"
+ top_delta="0"
+ width="52" />
+ <check_box
+ top_pad="12"
+ follows="left|top"
+ label="Constrain proportions"
+ layout="topleft"
+ left="5"
+ name="postcard_keep_aspect_check" />
+ <slider
+ decimal_digits="0"
+ follows="left|top"
+ height="15"
+ increment="1"
+ initial_value="75"
+ label="Quality:"
+ label_width="45"
+ layout="topleft"
+ left="5"
+ max_val="100"
+ name="image_quality_slider"
+ top_pad="6"
+ width="190" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
index 71d808fa4b..ea579c6dae 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
@@ -12,12 +12,12 @@
left="12"
mouse_opaque="true"
name="title_icon"
- top="5"
+ top="6"
width="18" />
<text
follows="top|left|right"
font="SansSerifBold"
- height="20"
+ height="14"
layout="topleft"
left_pad="12"
length="1"
@@ -25,46 +25,28 @@
right="-10"
text_color="white"
type="string"
- top_delta="5">
- Save to My Inventory
+ top_delta="3">
+ Inventory
</text>
<view_border
bevel_style="in"
follows="left|top|right"
height="1"
- left="10"
+ left="9"
layout="topleft"
name="hr"
- right="-10"
+ right="-5"
top_pad="5"
/>
- <text
- bottom="35"
- follows="top|left|right"
- font="SansSerif"
- height="56"
- layout="topleft"
- left="12"
- length="1"
- name="hint_lbl"
- top_pad="10"
- type="string"
- word_wrap="true">
- Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats.
- </text>
<combo_box
follows="top|left|right"
- height="23"
+ height="20"
label="Resolution"
layout="topleft"
left_delta="0"
name="texture_size_combo"
- right="-10"
- top_pad="10">
- <combo_box.item
- label="Current Window"
- name="CurrentWindow"
- value="[i0,i0]" />
+ right="-5"
+ top_pad="5">
<combo_box.item
label="Small (128x128)"
name="Small(128x128)"
@@ -88,61 +70,74 @@
follows="left|top"
height="20"
increment="32"
- label="Width"
- label_width="40"
+ label="Width x Height"
+ label_width="90"
layout="topleft"
left="10"
max_val="6016"
min_val="32"
name="inventory_snapshot_width"
- top_pad="10"
- width="95" />
+ top_pad="7"
+ width="144" />
<spinner
allow_text_entry="false"
decimal_digits="0"
follows="left|top"
height="20"
increment="32"
- label="Height"
- label_width="40"
+ label=""
+ label_width="0"
layout="topleft"
- left_pad="5"
+ left_pad="0"
max_val="6016"
min_val="32"
name="inventory_snapshot_height"
top_delta="0"
- width="95" />
+ width="54" />
<check_box
- bottom_delta="20"
- height="10"
+ top_pad="12"
follows="left|top"
label="Constrain proportions"
layout="topleft"
left="10"
name="inventory_keep_aspect_check"
visible="false" />
+ <text
+ follows="top|left"
+ font="SansSerif"
+ height="56"
+ layout="topleft"
+ left="10"
+ length="1"
+ name="hint_lbl"
+ top_pad="6"
+ width="200"
+ type="string"
+ word_wrap="true">
+ Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats.
+ </text>
<button
follows="right|bottom"
height="23"
label="Cancel"
layout="topleft"
name="cancel_btn"
- right="-32"
- top="350"
- width="100">
+ right="-5"
+ top="337"
+ width="97">
<button.commit_callback
function="Inventory.Cancel" />
</button>
<button
- follows="right|bottom"
+ follows="left|bottom"
height="23"
label="Save"
layout="topleft"
- left_delta="-106"
+ left="10"
name="save_btn"
top_delta="0"
- width="100">
+ width="97">
<button.commit_callback
function="Inventory.Save" />
</button>
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
index 781ab17403..188c9f8707 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
@@ -12,12 +12,12 @@
left="12"
mouse_opaque="true"
name="title_icon"
- top="5"
+ top="7"
width="18" />
<text
follows="top|left|right"
font="SansSerifBold"
- height="20"
+ height="14"
layout="topleft"
left_pad="12"
length="1"
@@ -25,28 +25,27 @@
right="-10"
text_color="white"
type="string"
- top_delta="4">
- Save to My Computer
+ top_delta="2">
+ Disk
</text>
<view_border
bevel_style="in"
follows="left|top|right"
height="1"
- left="10"
+ left="9"
layout="topleft"
name="hr"
- right="-10"
- top_pad="5"
- />
+ right="-5"
+ top_pad="5"/>
<combo_box
follows="left|top|right"
- height="23"
+ height="20"
label="Resolution"
layout="topleft"
left_delta="0"
name="local_size_combo"
- right="-10"
- top_pad="10">
+ right="-5"
+ top_pad="5">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -80,149 +79,114 @@
name="Custom"
value="[i-1,i-1]" />
</combo_box>
- <layout_stack
- animate="false"
- follows="all"
- height="275"
- layout="bottomleft"
- name="local_image_params_ls"
- left_delta="0"
- orientation="vertical"
- top_pad="10"
- right="-10">
- <layout_panel
- follows="top|left|right"
- height="60"
- layout="topleft"
- left="0"
- name="local_image_size_lp"
- auto_resize="false"
- top="0"
- right="-1"
- visible="true">
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Width"
- label_width="40"
- layout="topleft"
- left="10"
- max_val="6016"
- min_val="32"
- name="local_snapshot_width"
- top_pad="10"
- width="95" />
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Height"
- label_width="40"
- layout="topleft"
- left_pad="5"
- max_val="6016"
- min_val="32"
- name="local_snapshot_height"
- top_delta="0"
- width="95" />
- <check_box
- bottom_delta="20"
- height="10"
- follows="left|top"
- label="Constrain proportions"
- layout="topleft"
- left="10"
- name="local_keep_aspect_check" />
- </layout_panel>
- <layout_panel
- follows="top|left|right"
- height="23"
- layout="topleft"
- left="0"
- name="local_image_format_quality_lp"
- auto_resize="true"
- top="0"
- right="-1"
- visible="true">
- <combo_box
- follows="left|top"
- height="23"
- label="Format"
- layout="topleft"
- left_delta="0"
- name="local_format_combo"
- top_pad="0"
- width="120">
- <combo_box.item
- label="PNG (Lossless)"
- name="PNG"
- value="PNG" />
- <combo_box.item
- label="JPEG"
- name="JPEG"
- value="JPEG" />
- <combo_box.item
- label="BMP (Lossless)"
- name="BMP"
- value="BMP" />
- </combo_box>
- <slider
- decimal_digits="0"
- follows="left|top"
- height="15"
- increment="1"
- initial_value="75"
- label="Image quality"
- label_width="80"
- layout="topleft"
- left="10"
- max_val="100"
- name="image_quality_slider"
- top_pad="7"
- width="200" />
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- length="1"
- height="14"
- layout="topleft"
- left_pad="-5"
- halign="left"
- name="image_quality_level"
- top_delta="0"
- width="60">
- ([QLVL])
- </text>
- </layout_panel>
- </layout_stack>
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label="Width x Height"
+ label_width="90"
+ layout="topleft"
+ left="10"
+ max_val="6016"
+ min_val="32"
+ name="local_snapshot_width"
+ top_pad="7"
+ width="144" />
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label=""
+ label_width="0"
+ layout="topleft"
+ left_pad="0"
+ max_val="6016"
+ min_val="32"
+ name="local_snapshot_height"
+ top_delta="0"
+ width="54" />
+ <check_box
+ top_pad="12"
+ follows="left|top"
+ label="Constrain proportions"
+ layout="topleft"
+ left="10"
+ name="local_keep_aspect_check" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="13"
+ layout="topleft"
+ left="10"
+ name="local_format_label"
+ top_pad="7"
+ width="50">
+ Format:
+ </text>
+ <combo_box
+ follows="left|top|right"
+ height="20"
+ label="Format"
+ layout="topleft"
+ left="65"
+ right="-5"
+ name="local_format_combo"
+ top_delta="-3"
+ width="120">
+ <combo_box.item
+ label="PNG (Lossless)"
+ name="PNG"
+ value="PNG" />
+ <combo_box.item
+ label="JPEG"
+ name="JPEG"
+ value="JPEG" />
+ <combo_box.item
+ label="BMP (Lossless)"
+ name="BMP"
+ value="BMP" />
+ </combo_box>
+ <slider
+ decimal_digits="0"
+ follows="left|top"
+ height="15"
+ increment="1"
+ initial_value="75"
+ label="Quality:"
+ label_width="45"
+ layout="topleft"
+ left="10"
+ max_val="100"
+ name="image_quality_slider"
+ top_pad="6"
+ width="203" />
<button
follows="right|bottom"
height="23"
label="Cancel"
layout="topleft"
name="cancel_btn"
- right="-32"
- top="350"
- width="100">
+ right="-5"
+ top="337"
+ width="97">
<button.commit_callback
function="Local.Cancel" />
</button>
<flyout_button
- follows="right|bottom"
+ follows="left|bottom"
height="23"
label="Save"
layout="topleft"
- left_delta="-106"
+ left="10"
name="save_btn"
tool_tip="Save image to a file"
top_delta="0"
- width="100">
+ width="97">
<flyout_button.item
label="Save"
name="save_item"
@@ -232,4 +196,4 @@
name="saveas_item"
value="save as" />
</flyout_button>
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
index eff60f8228..265217ef60 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
@@ -4,117 +4,124 @@
height="240"
layout="topleft"
name="panel_snapshot_options"
- width="490">
+ width="208">
+ <button
+ follows="left|top"
+ font="SansSerif"
+ halign="left"
+ height="22"
+ image_overlay="Snapshot_Download"
+ image_overlay_alignment="left"
+ image_top_pad="-0"
+ imgoverlay_label_space="10"
+ label="Save to Disk"
+ layout="topleft"
+ left="9"
+ name="save_to_computer_btn"
+ top_pad="9">
+ <button.commit_callback
+ function="Snapshot.SaveToComputer" />
+ </button>
<button
- follows="left|top|right"
+ follows="left|top"
font="SansSerif"
halign="left"
- height="38"
- image_overlay="Snapshot_Profile"
+ height="22"
+ image_overlay="Snapshot_Inventory"
image_overlay_alignment="left"
- image_top_pad="-2"
+ image_top_pad="-1"
imgoverlay_label_space="10"
- label="Post to My Profile Feed"
+ label="Save to Inventory (L$[AMOUNT])"
layout="topleft"
left_delta="0"
+ name="save_to_inventory_btn"
+ top_pad="5">
+ <button.commit_callback
+ function="Snapshot.SaveToInventory" />
+ </button>
+ <button
+ follows="left|top"
+ font="SansSerif"
+ halign="left"
+ height="22"
+ image_overlay="Snapshot_Profile"
+ image_overlay_alignment="left"
+ image_top_pad="-1"
+ imgoverlay_label_space="10"
+ label="Upload to Profile"
+ layout="topleft"
name="save_to_profile_btn"
- pad_left="10"
- right="-10"
- top_pad="10">
+ left_delta="0"
+ top_pad="5">
<button.commit_callback
function="Snapshot.SaveToProfile" />
</button>
<button
- follows="left|top|right"
+ follows="left|top"
font="SansSerif"
halign="left"
- height="38"
- image_overlay="Snapshot_Email"
+ height="22"
+ image_overlay="Snapshot_Facebook"
image_overlay_alignment="left"
- image_top_pad="-2"
+ image_top_pad="0"
imgoverlay_label_space="10"
- label="Email"
+ label="Upload to Facebook"
layout="topleft"
left_delta="0"
- name="save_to_email_btn"
- pad_left="10"
- right="-10"
- top_pad="10">
+ name="send_to_facebook_btn"
+ top_pad="5">
<button.commit_callback
- function="Snapshot.SaveToEmail" />
+ function="Snapshot.SendToFacebook"/>
</button>
<button
- follows="left|top|right"
+ follows="left|top"
font="SansSerif"
halign="left"
- height="38"
- image_overlay="Snapshot_Inventory"
+ height="22"
+ image_overlay="Command_Twitter_Icon"
image_overlay_alignment="left"
- image_top_pad="-2"
+ image_top_pad="0"
imgoverlay_label_space="10"
- label="Save to My Inventory (L$[AMOUNT])"
+ label="Upload to Twitter"
layout="topleft"
left_delta="0"
- name="save_to_inventory_btn"
- pad_left="10"
- right="-10"
- top_pad="10">
+ name="send_to_twitter_btn"
+ top_pad="5">
<button.commit_callback
- function="Snapshot.SaveToInventory" />
+ function="Snapshot.SendToTwitter"/>
</button>
<button
- follows="left|top|right"
+ follows="left|top"
font="SansSerif"
halign="left"
- height="38"
- image_overlay="Snapshot_Download"
+ height="22"
+ image_overlay="Command_Flickr_Icon"
image_overlay_alignment="left"
- image_top_pad="-2"
+ image_top_pad="0"
imgoverlay_label_space="10"
- label="Save to My Computer"
+ label="Upload to Flickr"
layout="topleft"
left_delta="0"
- name="save_to_computer_btn"
- pad_left="10"
- right="-10"
- top_pad="10">
+ name="send_to_flickr_btn"
+ top_pad="5">
<button.commit_callback
- function="Snapshot.SaveToComputer" />
+ function="Snapshot.SendToFlickr"/>
+ </button>
+ <button
+ follows="left|top"
+ font="SansSerif"
+ halign="left"
+ height="22"
+ image_overlay="Snapshot_Email"
+ image_overlay_alignment="left"
+ image_top_pad="0"
+ imgoverlay_label_space="10"
+ label="Send via E-mail"
+ layout="topleft"
+ left_delta="0"
+ name="save_to_email_btn"
+ top_pad="5">
+ <button.commit_callback
+ function="Snapshot.SaveToEmail" />
</button>
- <text
- font="SansSerif"
- layout="topleft"
- length="1"
- follows="top|left"
- height="16"
- left="10"
- name="send_to_facebook_textbox"
- top_pad="10"
- type="string">
- Send to: [secondlife:/// Facebook]
- </text>
- <text
- font="SansSerif"
- layout="topleft"
- length="1"
- follows="top|left"
- height="16"
- left="140"
- name="send_to_twitter_textbox"
- top_pad="-16"
- type="string">
- [secondlife:/// Twitter]
- </text>
- <text
- font="SansSerif"
- layout="topleft"
- length="1"
- follows="top|left"
- height="16"
- left="190"
- name="send_to_flickr_textbox"
- top_pad="-16"
- type="string">
- [secondlife:/// Flickr]
- </text>
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
index ebba292a93..975b08be05 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
@@ -24,12 +24,12 @@
left="12"
mouse_opaque="true"
name="title_icon"
- top="5"
+ top="7"
width="18" />
<text
follows="top|left|right"
font="SansSerifBold"
- height="20"
+ height="14"
layout="topleft"
left_pad="12"
length="1"
@@ -37,63 +37,67 @@
right="-10"
text_color="white"
type="string"
- top_delta="3">
- Email
+ top_delta="2">
+ E-mail
</text>
- <button
- follows="right|top"
- height="23"
- is_toggle="true"
- label="Message"
- layout="topleft"
- name="message_btn"
- right="-82"
- top_delta="-7"
- width="70">
- <button.commit_callback
- function="Postcard.Message" />
- </button>
- <button
- follows="right|top"
- height="23"
- is_toggle="true"
- label="Settings"
- layout="topleft"
- name="settings_btn"
- top_delta="0"
- right="-10"
- width="70">
- <button.commit_callback
- function="Postcard.Settings" />
- </button>
<view_border
bevel_style="in"
follows="left|top|right"
height="1"
- left="10"
+ left="9"
layout="topleft"
name="hr"
- right="-10"
+ right="-5"
top_pad="5"
/>
- <panel_container
+ <tab_container
+ name="postcard_tabs"
+ tab_group="1"
+ tab_min_width="97"
+ tab_height="21"
+ tab_position="top"
+ top_pad="7"
+ left="5"
+ right="-2"
+ height="319"
follows="all"
- height="340"
- layout="topleft"
- left="0"
- name="postcard_panel_container"
- default_panel_name="panel_postcard_message"
- top_pad="10"
- width="490">
+ halign="center"
+ use_highlighting_on_hover="true">
<panel
follows="all"
layout="topleft"
+ label="Message"
name="panel_postcard_message"
filename="panel_postcard_message.xml" />
<panel
follows="all"
layout="topleft"
+ label="Settings"
name="panel_postcard_settings"
filename="panel_postcard_settings.xml" />
- </panel_container>
-</panel>
+ </tab_container>
+ <button
+ follows="right|bottom"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ name="cancel_btn"
+ right="-6"
+ bottom="-20"
+ width="97">
+ <button.commit_callback
+ function="Postcard.Cancel" />
+ </button>
+ <button
+ follows="left|bottom"
+ height="23"
+ label="Send"
+ layout="topleft"
+ left="10"
+ name="send_btn"
+ top_delta="0"
+ width="97">
+ <button.commit_callback
+ function="Postcard.Send" />
+ </button>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
index 0dd357aa1a..d86cb92981 100755
--- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
@@ -12,12 +12,12 @@
left="12"
mouse_opaque="true"
name="title_icon"
- top="5"
+ top="7"
width="18" />
<text
follows="top|left|right"
font="SansSerifBold"
- height="20"
+ height="14"
layout="topleft"
left_pad="12"
length="1"
@@ -26,27 +26,28 @@
text_color="white"
type="string"
top_delta="4">
- Post to My Profile Feed
+ Profile
</text>
<view_border
bevel_style="in"
follows="left|top|right"
height="1"
- left="10"
+ left="9"
layout="topleft"
name="hr"
- right="-10"
+ right="-5"
top_pad="5"
/>
<combo_box
- follows="left|top"
+ follows="left|top|right"
height="23"
label="Resolution"
layout="topleft"
- left_delta="0"
+ left="10"
+ right="-5"
name="profile_size_combo"
- top_pad="10"
- width="250">
+ top_pad="5"
+ width="180">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -68,132 +69,99 @@
name="Custom"
value="[i-1,i-1]" />
</combo_box>
- <layout_stack
- animate="false"
- follows="all"
- height="270"
- layout="bottomleft"
- name="profile_image_params_ls"
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label="Width x Height"
+ label_width="90"
+ layout="topleft"
+ left="10"
+ max_val="6016"
+ min_val="32"
+ name="profile_snapshot_width"
+ top_pad="7"
+ width="144" />
+ <spinner
+ allow_text_entry="false"
+ decimal_digits="0"
+ follows="left|top"
+ height="20"
+ increment="32"
+ label=""
+ label_width="0"
+ layout="topleft"
+ left_pad="0"
+ max_val="6016"
+ min_val="32"
+ name="profile_snapshot_height"
+ top_delta="0"
+ width="54" />
+ <check_box
+ top_pad="12"
+ label="Constrain proportions"
+ layout="topleft"
+ left="10"
+ name="profile_keep_aspect_check" />
+ <text
+ length="1"
+ follows="top|left|right"
+ height="16"
+ layout="topleft"
+ left="12"
+ name="caption_label"
+ right="-10"
+ top_pad="4"
+ type="string">
+ Caption:
+ </text>
+ <text_editor
+ follows="top|left|right"
+ height="35"
+ layout="topleft"
+ left="10"
+ right="-5"
+ length="1"
+ max_length="700"
+ name="caption"
+ width="200"
+ top_pad="2"
+ type="string"
+ word_wrap="true">
+ </text_editor>
+ <check_box
+ follows="left|top"
+ initial_value="true"
+ label="Include location"
+ layout="topleft"
left_delta="0"
- orientation="vertical"
- top_pad="10"
- right="-10">
- <layout_panel
- follows="top|left|right"
- height="55"
- layout="topleft"
- left="0"
- name="profile_image_size_lp"
- auto_resize="false"
- top="0"
- right="-1"
- visible="true">
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Width"
- label_width="40"
- layout="topleft"
- left="10"
- max_val="6016"
- min_val="32"
- name="profile_snapshot_width"
- top_pad="10"
- width="95" />
- <spinner
- allow_text_entry="false"
- decimal_digits="0"
- follows="left|top"
- height="20"
- increment="32"
- label="Height"
- label_width="40"
- layout="topleft"
- left_pad="5"
- max_val="6016"
- min_val="32"
- name="profile_snapshot_height"
- top_delta="0"
- width="95" />
- <check_box
- height="10"
- bottom_delta="20"
- label="Constrain proportions"
- layout="topleft"
- left="10"
- name="profile_keep_aspect_check" />
- </layout_panel>
- <layout_panel
- follows="top|left|right"
- height="200"
- layout="topleft"
- left="0"
- name="profile_image_metadata_lp"
- auto_resize="true"
- top="0"
- right="-1"
- visible="true">
- <text
- length="1"
- follows="top|left|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="0"
- name="caption_label"
- right="-10"
- top_pad="0"
- type="string">
- Caption:
- </text>
- <text_editor
- follows="all"
- height="155"
- layout="topleft"
- left_delta="0"
- length="1"
- max_length="700"
- name="caption"
- right="-10"
- top_pad="5"
- type="string"
- word_wrap="true">
- </text_editor>
- <check_box
- follows="left|bottom"
- initial_value="true"
- label="Include location"
- layout="topleft"
- left_delta="0"
- name="add_location_cb"
- top_pad="15" />
- </layout_panel>
- </layout_stack>
+ height="18"
+ name="add_location_cb"
+ top_pad="3" />
<button
follows="right|bottom"
height="23"
label="Cancel"
layout="topleft"
name="cancel_btn"
- right="-32"
- top="350"
- width="100">
+ right="-5"
+ top="337"
+ width="97">
<button.commit_callback
function="PostToProfile.Cancel" />
</button>
<button
- follows="right|bottom"
+ follows="left|bottom"
height="23"
label="Post"
layout="topleft"
- left_delta="-106"
+ left="10"
name="post_btn"
top_delta="0"
- width="100">
+ width="97">
<button.commit_callback
function="PostToProfile.Send" />
</button>
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index 426c0c4915..cb6b2fafd8 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -36,8 +36,9 @@
<color_swatch
can_apply_immediately="true"
follows="left|top"
- height="45"
+ height="22"
label=""
+ label_height="0"
layout="topleft"
left="10"
name="colorswatch"
diff --git a/indra/newview/skins/default/xui/en/panel_twitter_account.xml b/indra/newview/skins/default/xui/en/panel_twitter_account.xml
index ee4f6396e1..b9049a0bba 100644
--- a/indra/newview/skins/default/xui/en/panel_twitter_account.xml
+++ b/indra/newview/skins/default/xui/en/panel_twitter_account.xml
@@ -1,6 +1,6 @@
<panel
height="400"
- width="304"
+ width="272"
layout="topleft"
name="panel_twitter_account">
<string
@@ -15,9 +15,9 @@
follows="top|left"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="account_caption_label"
- top="21"
+ top="5"
type="string">
Not connected to Twitter.
</text>
@@ -28,19 +28,23 @@
follows="top|left"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="account_name_label"
parse_urls="true"
type="string"/>
<panel
layout="topleft"
+ follows="top|left"
name="panel_buttons"
height="345"
- left="9">
+ top_pad="3"
+ left="0">
<button
layout="topleft"
- follows="left|top"
+ follows="left|top|right"
top_pad="9"
+ left="10"
+ right="-10"
visible="true"
height="23"
label="Connect..."
@@ -51,8 +55,10 @@
<button
layout="topleft"
- follows="left|top"
+ follows="left|top|right"
top_delta="0"
+ left="10"
+ right="-10"
height="23"
label="Disconnect"
name="disconnect_btn"
@@ -65,9 +71,9 @@
length="1"
follows="top|left"
height="16"
- left="0"
+ left="10"
name="account_learn_more_label"
- top_pad="20"
+ top_pad="5"
type="string">
[http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Learn about posting to Twitter]
</text>
diff --git a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
index c2be56da21..9a460ceead 100644
--- a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
+++ b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml
@@ -3,31 +3,22 @@
width="304"
layout="topleft"
name="panel_twitter_photo">
- <layout_stack
- layout="topleft"
- border_size="0"
- height="412"
- follows="all"
- orientation="vertical"
- name="stack_photo"
- top="8">
- <layout_panel
- name="text_panel"
- height="160">
<text
length="1"
+ layout="topleft"
follows="top|left|right"
font="SansSerif"
height="16"
- left="9"
+ left="10"
name="status_label"
- top="3"
+ top="5"
type="string">
What's happening?
</text>
<text
length="1"
follows="top|left"
+ layout="topleft"
font="SansSerif"
text_color="EmphasisColor"
halign="right"
@@ -35,15 +26,16 @@
width="30"
left="227"
name="status_counter_label"
- top="3"
+ top="5"
type="string">
140
</text>
<text_editor
follows="left|top"
+ layout="topleft"
height="87"
width="250"
- left="9"
+ left="10"
length="1"
max_length="140"
name="photo_status"
@@ -52,33 +44,32 @@
</text_editor>
<check_box
follows="left|top"
+ layout="topleft"
initial_value="true"
label="Include SL location"
name="add_location_cb"
- left="9"
+ left="10"
height="16"
- top_pad="10"/>
+ top_pad="8"/>
<check_box
follows="left|top"
+ layout="topleft"
initial_value="true"
label="Include a photo"
name="add_photo_cb"
- left="9"
+ left="10"
height="16"
- top_pad="10"/>
- </layout_panel>
- <layout_panel
- name="snapshot_panel"
- height="227">
+ top_pad="1"/>
<combo_box
control_name="TwitterPhotoResolution"
follows="left|top"
- top="6"
- left="9"
+ layout="topleft"
+ top_pad="5"
+ left="10"
name="resolution_combobox"
tool_tip="Image resolution"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="Current Window"
name="CurrentWindow"
@@ -99,61 +90,76 @@
<combo_box
control_name="TwitterPhotoFilters"
follows="right|top"
+ layout="topleft"
name="filters_combobox"
tool_tip="Image filters"
- top="6"
- left="165"
+ top_delta="0"
+ right="-10"
height="21"
- width="135">
+ width="124">
<combo_box.item
label="No Filter"
name="NoFilter"
value="NoFilter" />
</combo_box>
<panel
+ layout="topleft"
height="150"
width="250"
visible="true"
name="thumbnail_placeholder"
- top="33"
- follows="left|top"
- left="9">
+ top_pad="5"
+ right="-10"
+ follows="left|top|right"
+ left="10">
</panel>
- <button
- follows="left|top"
- height="23"
- label="Refresh"
- left="9"
- top_pad="5"
- name="new_snapshot_btn"
- tool_tip="Click to refresh"
- visible="true"
- width="100" >
- <button.commit_callback
- function="SocialSharing.RefreshPhoto" />
- </button>
- <text
+ <text
follows="left|top"
+ layout="topleft"
font="SansSerif"
text_color="EmphasisColor"
height="14"
- top_pad="-19"
- left_pad="-30"
+ top_pad="2"
+ left="10"
length="1"
halign="center"
name="working_lbl"
translate="false"
type="string"
visible="true"
- width="150">
+ width="251">
Refreshing...
</text>
+ <view_border
+ bevel_style="in"
+ follows="left|top"
+ layout="topleft"
+ height="1"
+ left="10"
+ name="refresh_border"
+ width="250"
+ top_pad="0"/>
+ <button
+ follows="left|top"
+ layout="topleft"
+ height="23"
+ label="Refresh"
+ left="10"
+ top_pad="5"
+ name="new_snapshot_btn"
+ tool_tip="Click to refresh"
+ visible="true"
+ width="100" >
+ <button.commit_callback
+ function="SocialSharing.RefreshPhoto" />
+ </button>
<button
follows="right|top"
+ layout="topleft"
height="23"
label="Preview"
- left="200"
- top_pad="-19"
+ right="-10"
+ top_delta="0"
name="big_preview_btn"
tool_tip="Click to toggle preview"
is_toggle="true"
@@ -162,14 +168,11 @@
<button.commit_callback
function="SocialSharing.BigPreview" />
</button>
- </layout_panel>
- <layout_panel
- name="photo_button_panel"
- height="25">
<button
follows="left|top"
- top="0"
- left="9"
+ layout="topleft"
+ top_pad="3"
+ left="10"
height="23"
label="Tweet"
name="post_photo_btn"
@@ -178,16 +181,15 @@
function="SocialSharing.SendPhoto" />
</button>
<button
- follows="left|top"
+ follows="right|top"
+ layout="topleft"
height="23"
label="Cancel"
name="cancel_photo_btn"
- left_pad="15"
+ right="-10"
top_delta="0"
width="100">
<button.commit_callback
function="SocialSharing.Cancel" />
</button>
- </layout_panel>
- </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml
index fdf41991cd..5a9a16d344 100755
--- a/indra/newview/skins/default/xui/en/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/en/teleport_strings.xml
@@ -48,7 +48,10 @@ Go to &apos;Welcome Island Public&apos; to repeat the tutorial.
<message name="MustGetAgeRegion">
You must be age 18 or over to enter this region.
</message>
- </message_set>
+ <message name="RegionTPSpecialUsageBlocked">
+ Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+ </message>
+ </message_set>
<message_set name="progress">
<message name="sending_dest">
Sending to destination.
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index f079f31c81..7544fe1c41 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -798,15 +798,42 @@ class Darwin_i386_Manifest(ViewerManifest):
for libfile in dylibs:
symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile),
os.path.join(resource_path, libfile))
-
- # plugins
+ # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs.
+ if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"):
+ for libfile in ('libQtCore.4.dylib',
+ 'libQtCore.4.7.1.dylib',
+ 'libQtGui.4.dylib',
+ 'libQtGui.4.7.1.dylib',
+ 'libQtNetwork.4.dylib',
+ 'libQtNetwork.4.7.1.dylib',
+ 'libQtOpenGL.4.dylib',
+ 'libQtOpenGL.4.7.1.dylib',
+ 'libQtSvg.4.dylib',
+ 'libQtSvg.4.7.1.dylib',
+ 'libQtWebKit.4.dylib',
+ 'libQtWebKit.4.7.1.dylib',
+ 'libQtXml.4.dylib',
+ 'libQtXml.4.7.1.dylib'):
+ self.path2basename("../packages/lib/release", libfile)
+ self.end_prefix("SLPlugin.app/Contents/Resources")
+
+ # Qt4 codecs go to llplugin. Not certain why but this is the first
+ # location probed according to dtruss so we'll go with that.
+ if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"):
+ self.path("libq*.dylib")
+ self.end_prefix("llplugin/codecs")
+
+ # Similarly for imageformats.
+ if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"):
+ self.path("libq*.dylib")
+ self.end_prefix("llplugin/imageformats")
+
+ # SLPlugin plugins proper
if self.prefix(src="", dst="llplugin"):
self.path2basename("../media_plugins/quicktime/" + self.args['configuration'],
"media_plugin_quicktime.dylib")
self.path2basename("../media_plugins/webkit/" + self.args['configuration'],
"media_plugin_webkit.dylib")
- self.path2basename("../packages/lib/release", "libllqtwebkit.dylib")
-
self.end_prefix("llplugin")
self.end_prefix("Resources")
@@ -1011,6 +1038,7 @@ class LinuxManifest(ViewerManifest):
self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so")
self.end_prefix("bin/llplugin")
+ # llcommon
if not self.path("../llcommon/libllcommon.so", "lib/libllcommon.so"):
print "Skipping llcommon.so (assuming llcommon was linked statically)"
@@ -1076,20 +1104,9 @@ class Linux_i686_Manifest(LinuxManifest):
self.path("libaprutil-1.so")
self.path("libaprutil-1.so.0")
self.path("libaprutil-1.so.0.4.1")
- self.path("libboost_context-mt.so.*")
- self.path("libboost_filesystem-mt.so.*")
- self.path("libboost_program_options-mt.so.*")
- self.path("libboost_regex-mt.so.*")
- self.path("libboost_signals-mt.so.*")
- self.path("libboost_system-mt.so.*")
- self.path("libboost_thread-mt.so.*")
- self.path("libcollada14dom.so")
self.path("libdb*.so")
- self.path("libcrypto.so.*")
self.path("libexpat.so.*")
- self.path("libssl.so.1.0.0")
self.path("libGLOD.so")
- self.path("libminizip.so")
self.path("libuuid.so*")
self.path("libSDL-1.2.so.*")
self.path("libdirectfb-1.*.so.*")
@@ -1121,6 +1138,10 @@ class Linux_i686_Manifest(LinuxManifest):
# previous call did, without having to explicitly state the
# version number.
self.path("libfontconfig.so.*.*")
+
+ # Include libfreetype.so. but have it work as libfontconfig does.
+ self.path("libfreetype.so.*.*")
+
try:
self.path("libtcmalloc.so*") #formerly called google perf tools
pass
@@ -1129,26 +1150,55 @@ class Linux_i686_Manifest(LinuxManifest):
pass
try:
- self.path("libfmodex-*.so")
- self.path("libfmodex.so")
- pass
+ self.path("libfmodex-*.so")
+ self.path("libfmodex.so")
+ pass
except:
- print "Skipping libfmodex.so - not found"
- pass
+ print "Skipping libfmodex.so - not found"
+ pass
self.end_prefix("lib")
# Vivox runtimes
if self.prefix(src="../packages/lib/release", dst="bin"):
- self.path("SLVoice")
- self.end_prefix()
+ self.path("SLVoice")
+ self.end_prefix()
+ if self.prefix(src="../packages/lib/release", dst="lib"):
+ self.path("libortp.so")
+ self.path("libsndfile.so.1")
+ #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
+ self.path("libvivoxsdk.so")
+ self.path("libvivoxplatform.so")
+ self.end_prefix("lib")
+
+ # plugin runtime
if self.prefix(src="../packages/lib/release", dst="lib"):
- self.path("libortp.so")
- self.path("libsndfile.so.1")
- #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
- self.path("libvivoxsdk.so")
- self.path("libvivoxplatform.so")
- self.end_prefix("lib")
+ self.path("libQtCore.so*")
+ self.path("libQtGui.so*")
+ self.path("libQtNetwork.so*")
+ self.path("libQtOpenGL.so*")
+ self.path("libQtSvg.so*")
+ self.path("libQtWebKit.so*")
+ self.path("libQtXml.so*")
+ self.end_prefix("lib")
+
+ # For WebKit/Qt plugin runtimes (image format plugins)
+ if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"):
+ self.path("libqgif.so")
+ self.path("libqico.so")
+ self.path("libqjpeg.so")
+ self.path("libqmng.so")
+ self.path("libqsvg.so")
+ self.path("libqtiff.so")
+ self.end_prefix("bin/llplugin/imageformats")
+
+ # For WebKit/Qt plugin runtimes (codec/character encoding plugins)
+ if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"):
+ self.path("libqcncodecs.so")
+ self.path("libqjpcodecs.so")
+ self.path("libqkrcodecs.so")
+ self.path("libqtwcodecs.so")
+ self.end_prefix("bin/llplugin/codecs")
self.strip_binaries()
diff --git a/indra/test_apps/llfbconnecttest/CMakeLists.txt b/indra/test_apps/llfbconnecttest/CMakeLists.txt
index f56329a010..512bf202ae 100644
--- a/indra/test_apps/llfbconnecttest/CMakeLists.txt
+++ b/indra/test_apps/llfbconnecttest/CMakeLists.txt
@@ -122,32 +122,24 @@ add_custom_command(TARGET llfbconnecttest POST_BUILD
)
-if (DARWIN OR WINDOWS)
- get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
- add_custom_command(TARGET llfbconnecttest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_WEBKIT_PLUGIN}
- )
-
- # copy over bookmarks file if llfbconnecttest gets built
- get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION)
- add_custom_command(TARGET llfbconnecttest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
- DEPENDS ${BUILT_LLFBCONNECTTEST}
- )
- # also copy it to the same place as SLPlugin, which is what the mac wants...
- add_custom_command(TARGET llfbconnecttest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_LLFBCONNECTTEST}
- )
-endif (DARWIN OR WINDOWS)
+get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_WEBKIT_PLUGIN}
+)
-if (DARWIN)
- add_custom_command(TARGET llfbconnecttest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
- )
-endif (DARWIN)
+# copy over bookmarks file if llfbconnecttest gets built
+get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION)
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
+ DEPENDS ${BUILT_LLFBCONNECTTEST}
+)
+
+# also copy it to the same place as SLPlugin, which is what the mac wants...
+add_custom_command(TARGET llfbconnecttest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_LLFBCONNECTTEST}
+)
if(WINDOWS)
#********************
@@ -301,4 +293,80 @@ if(WINDOWS)
endif(WINDOWS)
+if (DARWIN)
+ set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(fbconnecttest_release_files
+ libexception_handler.dylib
+ libaprutil-1.0.dylib
+ libapr-1.0.dylib
+ libexpat.1.5.2.dylib
+ libQtCore.4.7.1.dylib
+ libQtCore.4.dylib
+ libQtGui.4.7.1.dylib
+ libQtGui.4.dylib
+ libQtNetwork.4.7.1.dylib
+ libQtNetwork.4.dylib
+ libQtOpenGL.4.7.1.dylib
+ libQtOpenGL.4.dylib
+ libQtWebKit.4.7.1.dylib
+ libQtWebKit.4.dylib
+ libQtSvg.4.7.1.dylib
+ libQtSvg.4.dylib
+ libQtXml.4.7.1.dylib
+ libQtXml.4.dylib
+ )
+ copy_if_different(
+ ${fbconnecttest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}"
+ out_targets
+ ${fbconnecttest_release_files}
+ )
+ set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins)
+ set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats")
+ set(fbconnecttest_release_files
+ libqgif.dylib
+ libqico.dylib
+ libqjpeg.dylib
+ libqmng.dylib
+ libqsvg.dylib
+ libqtiff.dylib
+ )
+ copy_if_different(
+ ${fbconnecttest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/imageformats"
+ out_targets
+ ${fbconnecttest_release_files}
+ )
+ set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins)
+ set(fbconnecttest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs")
+ set(fbconnecttest_release_files
+ libqcncodecs.dylib
+ libqjpcodecs.dylib
+ libqkrcodecs.dylib
+ libqtwcodecs.dylib
+ )
+ copy_if_different(
+ ${fbconnecttest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/codecs"
+ out_targets
+ ${fbconnecttest_release_files}
+ )
+ set(fbconnect_test_targets ${fbconnect_test_targets} ${out_targets})
+
+ add_custom_target(copy_fbconnecttest_libs ALL
+ DEPENDS
+ ${fbconnect_test_targets}
+ )
+
+ add_dependencies(llfbconnecttest copy_fbconnecttest_libs)
+endif (DARWIN)
+
+if (LINUX)
+
+endif (LINUX)
+
ll_deploy_sharedlibs_command(llfbconnecttest)
diff --git a/indra/test_apps/llfbconnecttest/README.Linden b/indra/test_apps/llfbconnecttest/README.Linden
new file mode 100644
index 0000000000..7488ce680a
--- /dev/null
+++ b/indra/test_apps/llfbconnecttest/README.Linden
@@ -0,0 +1,20 @@
+
+1. Description
+
+ Exercises SLPlugin. Specific functions and goals aren't clear
+ from the source.
+
+2. Running
+
+ 2.1 Mac
+
+ Make certain '.' is included in PATH. E.g.:
+
+ PATH=.:"$PATH" open build-darwin-i386/test_apps/llfbconnecttest/RelWithDebInfo/llfbconnecttest.app
+
+ Otherwise the program won't find SLPlugin and will timeout and
+ fail after 30 seconds and give you little information as to why.
+
+ Running 'dtruss' on plugin test applications will give you a great
+ deal of insight into why they aren't activating.
+
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index 8179be66f5..9d44563e26 100755
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -346,44 +346,44 @@ add_custom_command(TARGET llmediaplugintest POST_BUILD
DEPENDS ${BUILT_LLCOMMON}
)
+get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_WEBKIT_PLUGIN}
+)
if (DARWIN OR WINDOWS)
- get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_WEBKIT_PLUGIN}
- )
-
get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_QUICKTIME_PLUGIN}
)
-
- get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_EXAMPLE_PLUGIN}
- )
-
- # copy over bookmarks file if llmediaplugintest gets built
- get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
- DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
- )
- # also copy it to the same place as SLPlugin, which is what the mac wants...
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
- )
endif (DARWIN OR WINDOWS)
+get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_EXAMPLE_PLUGIN}
+)
+
+# copy over bookmarks file if llmediaplugintest gets built
+get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
+ DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
+# also copy it to the same place as SLPlugin, which is what the mac wants...
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
if (DARWIN)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
- )
+# add_custom_command(TARGET llmediaplugintest POST_BUILD
+# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
+# DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+# )
endif (DARWIN)
if(WINDOWS)
@@ -538,4 +538,76 @@ if(WINDOWS)
endif(WINDOWS)
+if (DARWIN)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(plugintest_release_files
+ libexception_handler.dylib
+ libaprutil-1.0.dylib
+ libapr-1.0.dylib
+ libexpat.1.5.2.dylib
+ libQtCore.4.7.1.dylib
+ libQtCore.4.dylib
+ libQtGui.4.7.1.dylib
+ libQtGui.4.dylib
+ libQtNetwork.4.7.1.dylib
+ libQtNetwork.4.dylib
+ libQtOpenGL.4.7.1.dylib
+ libQtOpenGL.4.dylib
+ libQtWebKit.4.7.1.dylib
+ libQtWebKit.4.dylib
+ libQtSvg.4.7.1.dylib
+ libQtSvg.4.dylib
+ libQtXml.4.7.1.dylib
+ libQtXml.4.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats")
+ set(plugintest_release_files
+ libqgif.dylib
+ libqico.dylib
+ libqjpeg.dylib
+ libqmng.dylib
+ libqsvg.dylib
+ libqtiff.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/imageformats"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs")
+ set(plugintest_release_files
+ libqcncodecs.dylib
+ libqjpcodecs.dylib
+ libqkrcodecs.dylib
+ libqtwcodecs.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/codecs"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ add_custom_target(copy_plugintest_libs ALL
+ DEPENDS
+ ${plugin_test_targets}
+ )
+
+ add_dependencies(llmediaplugintest copy_plugintest_libs)
+endif (DARWIN)
+
ll_deploy_sharedlibs_command(llmediaplugintest)
diff --git a/indra/test_apps/llplugintest/README.Linden b/indra/test_apps/llplugintest/README.Linden
new file mode 100644
index 0000000000..4a9f223c21
--- /dev/null
+++ b/indra/test_apps/llplugintest/README.Linden
@@ -0,0 +1,21 @@
+
+1. Description
+
+ Exercises SLPlugin. Demonstrates mediakit plugin reuse and
+ switchover as MIME type changes (web, quicktime, flash).
+
+
+2. Running
+
+ 2.1 Mac
+
+ Make certain '.' is included in PATH. E.g.:
+
+ PATH=.:"$PATH" open build-darwin-i386/test_apps/llmediaplugintest/RelWithDebInfo/llmediaplugintest.app
+
+ Otherwise the program won't find SLPlugin and will timeout and
+ fail after 30 seconds and give you little information as to why.
+
+ Running 'dtruss' on plugin test applications will give you a great
+ deal of insight into why they aren't activating.
+
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index 6f366677c9..ce80d55829 100755
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -46,6 +46,8 @@ target_link_libraries(lllogin
${LLMATH_LIBRARIES}
${LLXML_LIBRARIES}
${BOOST_CONTEXT_LIBRARY}
+ ${BOOST_COROUTINE_LIBRARY}
+ ${BOOST_SYSTEM_LIBRARY}
)
if(LL_TESTS)
@@ -55,7 +57,7 @@ if(LL_TESTS)
set_source_files_properties(
lllogin.cpp
PROPERTIES
- LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY}"
+ LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}"
)
LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt
deleted file mode 100755
index 210486c668..0000000000
--- a/indra/win_updater/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- cmake -*-
-
-project(win_updater)
-
-include(00-Common)
-include(LLCommon)
-include(Linking)
-
-# *HACK - override msvcrt implementation (intialized on 00-Common) to be
-# statically linked for the installer this relies on vc taking the last flag on
-# the command line
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
-
-include_directories(
- ${LLCOMMON_INCLUDE_DIRS}
- )
-
-set(win_updater_SOURCE_FILES updater.cpp)
-
-set(win_updater_HEADER_FILES CMakeLists.txt)
-
-set_source_files_properties(${win_updater_HEADER_FILES}
- PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND win_updater_SOURCE_FILES ${win_updater_HEADER_FILES})
-
-add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES})
-
-target_link_libraries(windows-updater
- wininet
- user32
- gdi32
- shell32
- )
-
-set_target_properties(windows-updater
- PROPERTIES
- LINK_FLAGS "/NODEFAULTLIB:MSVCRT"
- LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;MSVCRT\""
- )
-
-# The windows-updater doesn't link against anything non-system, apparently
-#ll_deploy_sharedlibs_command(windows-updater)
diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp
deleted file mode 100755
index aeab5a3b13..0000000000
--- a/indra/win_updater/updater.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-/**
- * @file updater.cpp
- * @brief Windows auto-updater
- *
- * $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$
- */
-
-//
-// Usage: updater -url <url>
-//
-
-// We use dangerous fopen, strtok, mbstowcs, sprintf
-// which generates warnings on VC2005.
-// *TODO: Switch to fopen_s, strtok_s, etc.
-#define _CRT_SECURE_NO_DEPRECATE
-
-#include <windows.h>
-#include <wininet.h>
-#include <stdio.h>
-#include <string>
-#include <iostream>
-#include <stdexcept>
-#include <sstream>
-#include <fstream>
-
-#define BUFSIZE 8192
-
-int gTotalBytesRead = 0;
-DWORD gTotalBytes = -1;
-HWND gWindow = NULL;
-WCHAR gProgress[256];
-char* gUpdateURL = NULL;
-
-#if _DEBUG
-std::ofstream logfile;
-#define DEBUG(expr) logfile << expr << std::endl
-#else
-#define DEBUG(expr) /**/
-#endif
-
-char* wchars_to_utf8chars(const WCHAR* in_chars)
-{
- int tlen = 0;
- const WCHAR* twc = in_chars;
- while (*twc++ != 0)
- {
- tlen++;
- }
- char* outchars = new char[tlen];
- char* res = outchars;
- for (int i=0; i<tlen; i++)
- {
- int cur_char = (int)(*in_chars++);
- if (cur_char < 0x80)
- {
- *outchars++ = (char)cur_char;
- }
- else
- {
- *outchars++ = '?';
- }
- }
- *outchars = 0;
- return res;
-}
-
-class Fetcher
-{
-public:
- Fetcher(const std::wstring& uri)
- {
- // These actions are broken out as separate methods not because it
- // makes the code clearer, but to avoid triggering AntiVir and
- // McAfee-GW-Edition virus scanners (DEV-31680).
- mInet = openInet();
- mDownload = openUrl(uri);
- }
-
- ~Fetcher()
- {
- DEBUG("Calling InternetCloseHandle");
- InternetCloseHandle(mDownload);
- InternetCloseHandle(mInet);
- }
-
- unsigned long read(char* buffer, size_t bufflen) const;
-
- DWORD getTotalBytes() const
- {
- DWORD totalBytes;
- DWORD sizeof_total_bytes = sizeof(totalBytes);
- HttpQueryInfo(mDownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
- &totalBytes, &sizeof_total_bytes, NULL);
- return totalBytes;
- }
-
- struct InetError: public std::runtime_error
- {
- InetError(const std::string& what): std::runtime_error(what) {}
- };
-
-private:
- // We test results from a number of different MS functions with different
- // return types -- but the common characteristic is that 0 (i.e. (! result))
- // means an error of some kind.
- template <typename RESULT>
- static RESULT check(const std::string& desc, RESULT result)
- {
- if (result)
- {
- // success, show caller
- return result;
- }
- DWORD err = GetLastError();
- std::ostringstream out;
- out << desc << " Failed: " << err;
- DEBUG(out.str());
- throw InetError(out.str());
- }
-
- HINTERNET openUrl(const std::wstring& uri) const;
- HINTERNET openInet() const;
-
- HINTERNET mInet, mDownload;
-};
-
-HINTERNET Fetcher::openInet() const
-{
- DEBUG("Calling InternetOpen");
- // Init wininet subsystem
- return check("InternetOpen",
- InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
-}
-
-HINTERNET Fetcher::openUrl(const std::wstring& uri) const
-{
- DEBUG("Calling InternetOpenUrl: " << wchars_to_utf8chars(uri.c_str()));
- return check("InternetOpenUrl",
- InternetOpenUrl(mInet, uri.c_str(), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL));
-}
-
-unsigned long Fetcher::read(char* buffer, size_t bufflen) const
-{
- unsigned long bytes_read = 0;
- DEBUG("Calling InternetReadFile");
- check("InternetReadFile",
- InternetReadFile(mDownload, buffer, bufflen, &bytes_read));
- return bytes_read;
-}
-
-int WINAPI get_url_into_file(const std::wstring& uri, const std::string& path, int *cancelled)
-{
- int success = FALSE;
- *cancelled = FALSE;
-
- DEBUG("Opening '" << path << "'");
-
- FILE* fp = fopen(path.c_str(), "wb"); /* Flawfinder: ignore */
-
- if (!fp)
- {
- DEBUG("Failed to open '" << path << "'");
- return success;
- }
-
- // Note, ctor can throw, since it uses check() function.
- Fetcher fetcher(uri);
- gTotalBytes = fetcher.getTotalBytes();
-
-/*==========================================================================*|
- // nobody uses total_bytes?!? What's this doing here?
- DWORD total_bytes = 0;
- success = check("InternetQueryDataAvailable",
- InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0));
-|*==========================================================================*/
-
- success = FALSE;
- while(!success && !(*cancelled))
- {
- char data[BUFSIZE]; /* Flawfinder: ignore */
- unsigned long bytes_read = fetcher.read(data, sizeof(data));
-
- if (!bytes_read)
- {
- DEBUG("InternetReadFile Read " << bytes_read << " bytes.");
- }
-
- DEBUG("Reading Data, bytes_read = " << bytes_read);
-
- if (bytes_read == 0)
- {
- // If InternetFileRead returns TRUE AND bytes_read == 0
- // we've successfully downloaded the entire file
- wsprintf(gProgress, L"Download complete.");
- success = TRUE;
- }
- else
- {
- // write what we've got, then continue
- fwrite(data, sizeof(char), bytes_read, fp);
-
- gTotalBytesRead += int(bytes_read);
-
- if (gTotalBytes != -1)
- wsprintf(gProgress, L"Downloaded: %d%%", 100 * gTotalBytesRead / gTotalBytes);
- else
- wsprintf(gProgress, L"Downloaded: %dK", gTotalBytesRead / 1024);
-
- }
-
- DEBUG("Calling InvalidateRect");
-
- // Mark the window as needing redraw (of the whole thing)
- InvalidateRect(gWindow, NULL, TRUE);
-
- // Do the redraw
- DEBUG("Calling UpdateWindow");
- UpdateWindow(gWindow);
-
- DEBUG("Calling PeekMessage");
- MSG msg;
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
-
- if (msg.message == WM_QUIT)
- {
- // bail out, user cancelled
- *cancelled = TRUE;
- }
- }
- }
-
- fclose(fp);
- return success;
-}
-
-LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
-{
- HDC hdc; // Drawing context
- PAINTSTRUCT ps;
-
- switch(message)
- {
- case WM_PAINT:
- {
- hdc = BeginPaint(hwnd, &ps);
-
- RECT rect;
- GetClientRect(hwnd, &rect);
- DrawText(hdc, gProgress, -1, &rect,
- DT_SINGLELINE | DT_CENTER | DT_VCENTER);
-
- EndPaint(hwnd, &ps);
- return 0;
- }
- case WM_CLOSE:
- case WM_DESTROY:
- // Get out of full screen
- // full_screen_mode(false);
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd, message, wparam, lparam);
-}
-
-#define win_class_name L"FullScreen"
-
-int parse_args(int argc, char **argv)
-{
- int j;
-
- for (j = 1; j < argc; j++)
- {
- if ((!strcmp(argv[j], "-url")) && (++j < argc))
- {
- gUpdateURL = argv[j];
- }
- }
-
- // If nothing was set, let the caller know.
- if (!gUpdateURL)
- {
- return 1;
- }
- return 0;
-}
-
-int WINAPI
-WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
-{
- // Parse the command line.
- LPSTR cmd_line_including_exe_name = GetCommandLineA();
-
- const int MAX_ARGS = 100;
- int argc = 0;
- char* argv[MAX_ARGS]; /* Flawfinder: ignore */
-
-#if _DEBUG
- logfile.open("updater.log", std::ios_base::out);
- DEBUG("Parsing command arguments");
-#endif
-
- char *token = NULL;
- if( cmd_line_including_exe_name[0] == '\"' )
- {
- // Exe name is enclosed in quotes
- token = strtok( cmd_line_including_exe_name, "\"" );
- argv[argc++] = token;
- token = strtok( NULL, " \t," );
- }
- else
- {
- // Exe name is not enclosed in quotes
- token = strtok( cmd_line_including_exe_name, " \t," );
- }
-
- while( (token != NULL) && (argc < MAX_ARGS) )
- {
- argv[argc++] = token;
- /* Get next token: */
- if (*(token + strlen(token) + 1) == '\"') /* Flawfinder: ignore */
- {
- token = strtok( NULL, "\"");
- }
- else
- {
- token = strtok( NULL, " \t," );
- }
- }
-
- gUpdateURL = NULL;
-
- /////////////////////////////////////////
- //
- // Process command line arguments
- //
-
- DEBUG("Processing command arguments");
-
- //
- // Parse the command line arguments
- //
- int parse_args_result = parse_args(argc, argv);
-
- WNDCLASSEX wndclassex = { 0 };
- //DEVMODE dev_mode = { 0 };
-
- const int WINDOW_WIDTH = 250;
- const int WINDOW_HEIGHT = 100;
-
- wsprintf(gProgress, L"Connecting...");
-
- /* Init the WNDCLASSEX */
- wndclassex.cbSize = sizeof(WNDCLASSEX);
- wndclassex.style = CS_HREDRAW | CS_VREDRAW;
- wndclassex.hInstance = hInstance;
- wndclassex.lpfnWndProc = WinProc;
- wndclassex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
- wndclassex.lpszClassName = win_class_name;
-
- RegisterClassEx(&wndclassex);
-
- // Get the size of the screen
- //EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
-
- gWindow = CreateWindowEx(NULL, win_class_name,
- L"Second Life Updater",
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- WINDOW_WIDTH,
- WINDOW_HEIGHT,
- NULL, NULL, hInstance, NULL);
-
- ShowWindow(gWindow, nShowCmd);
- UpdateWindow(gWindow);
-
- if (parse_args_result)
- {
- MessageBox(gWindow,
- L"Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]",
- L"Usage", MB_OK);
- return parse_args_result;
- }
-
- // Did we get a userserver to work with?
- if (!gUpdateURL)
- {
- MessageBox(gWindow, L"Please specify the download url from the command line",
- L"Error", MB_OK);
- return 1;
- }
-
- // Can't feed GetTempPath into GetTempFile directly
- char temp_path[MAX_PATH]; /* Flawfinder: ignore */
- if (0 == GetTempPathA(sizeof(temp_path), temp_path))
- {
- MessageBox(gWindow, L"Problem with GetTempPath()",
- L"Error", MB_OK);
- return 1;
- }
- std::string update_exec_path(temp_path);
- update_exec_path.append("Second_Life_Updater.exe");
-
- WCHAR update_uri[4096];
- mbstowcs(update_uri, gUpdateURL, sizeof(update_uri));
-
- int success = 0;
- int cancelled = 0;
-
- // Actually do the download
- try
- {
- DEBUG("Calling get_url_into_file");
- success = get_url_into_file(update_uri, update_exec_path, &cancelled);
- }
- catch (const Fetcher::InetError& e)
- {
- (void)e;
- success = FALSE;
- DEBUG("Caught: " << e.what());
- }
-
- // WinInet can't tell us if we got a 404 or not. Therefor, we check
- // for the size of the downloaded file, and assume that our installer
- // will always be greater than 1MB.
- if (gTotalBytesRead < (1024 * 1024) && ! cancelled)
- {
- MessageBox(gWindow,
- L"The Second Life auto-update has failed.\n"
- L"The problem may be caused by other software installed \n"
- L"on your computer, such as a firewall.\n"
- L"Please visit http://secondlife.com/download/ \n"
- L"to download the latest version of Second Life.\n",
- NULL, MB_OK);
- return 1;
- }
-
- if (cancelled)
- {
- // silently exit
- return 0;
- }
-
- if (!success)
- {
- MessageBox(gWindow,
- L"Second Life download failed.\n"
- L"Please try again later.",
- NULL, MB_OK);
- return 1;
- }
-
- // TODO: Make updates silent (with /S to NSIS)
- //char params[256]; /* Flawfinder: ignore */
- //sprintf(params, "/S"); /* Flawfinder: ignore */
- //MessageBox(gWindow,
- // L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete. This may take a minute...",
- // L"Download Complete",
- // MB_OK);
-
-/*==========================================================================*|
- // DEV-31680: ShellExecuteA() causes McAfee-GW-Edition and AntiVir
- // scanners to flag this executable as a probable virus vector.
- // Less than or equal to 32 means failure
- if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path.c_str(), NULL,
- "C:\\", SW_SHOWDEFAULT))
-|*==========================================================================*/
- // from http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx
- STARTUPINFOA si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- ZeroMemory(&pi, sizeof(pi));
-
- if (! CreateProcessA(update_exec_path.c_str(), // executable file
- NULL, // command line
- NULL, // process cannot be inherited
- NULL, // thread cannot be inherited
- FALSE, // do not inherit existing handles
- 0, // process creation flags
- NULL, // inherit parent's environment
- NULL, // inherit parent's current dir
- &si, // STARTUPINFO
- &pi)) // PROCESS_INFORMATION
- {
- MessageBox(gWindow, L"Update failed. Please try again later.", NULL, MB_OK);
- return 1;
- }
-
- // Give installer some time to open a window
- Sleep(1000);
-
- return 0;
-}