From b2627d927f1642bea84b92adfccd9403676e1341 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Sun, 24 May 2009 02:59:24 -0500 Subject: Second Life viewer sources 1.23.2-RC --- linden/doc/contributions.txt | 17 + linden/indra/llcharacter/lleditingmotion.cpp | 8 +- linden/indra/llcommon/llapr.cpp | 10 + linden/indra/llcommon/llapr.h | 1 + linden/indra/llcommon/llerror.cpp | 65 + linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llui/llmenugl.cpp | 5 +- linden/indra/llwindow/lldxhardware.cpp | 32 +- linden/indra/newview/app_settings/settings.xml | 21 +- .../indra/newview/installers/windows/lang_nl.nsi | Bin 7388 -> 7414 bytes linden/indra/newview/linux_tools/launch_url.sh | 76 +- linden/indra/newview/llagent.cpp | 7 +- linden/indra/newview/llappviewer.cpp | 45 +- linden/indra/newview/llappviewermacosx.cpp | 25 + linden/indra/newview/llappviewermacosx.h | 1 + linden/indra/newview/llassetuploadresponders.cpp | 3 + linden/indra/newview/llcurrencyuimanager.cpp | 3 +- linden/indra/newview/llfloaterabout.cpp | 18 + linden/indra/newview/llfloaterbuycurrency.cpp | 2 +- linden/indra/newview/llfloaterchat.cpp | 5 +- linden/indra/newview/llfloaterimagepreview.cpp | 5 +- linden/indra/newview/llfloatersnapshot.cpp | 6 +- linden/indra/newview/llinventorybridge.cpp | 3 +- linden/indra/newview/llnotify.cpp | 7 +- linden/indra/newview/llpanelclassified.cpp | 5 +- linden/indra/newview/llpaneldirfind.cpp | 2 +- linden/indra/newview/llpaneldirplaces.cpp | 3 +- linden/indra/newview/llpanelgeneral.cpp | 32 +- linden/indra/newview/llpanelplace.cpp | 3 +- linden/indra/newview/llprefsim.cpp | 8 +- linden/indra/newview/llselectmgr.cpp | 5 + linden/indra/newview/llstartup.cpp | 2 +- linden/indra/newview/lltexlayer.cpp | 70 +- linden/indra/newview/lltexlayer.h | 10 +- linden/indra/newview/llviewercamera.cpp | 2 +- linden/indra/newview/llviewerdisplay.cpp | 23 +- linden/indra/newview/llviewerimage.cpp | 22 +- linden/indra/newview/llviewermenu.cpp | 16 +- linden/indra/newview/llviewermessage.cpp | 1 + linden/indra/newview/llviewertexteditor.cpp | 62 +- linden/indra/newview/llviewertexteditor.h | 13 +- linden/indra/newview/llviewerwindow.cpp | 51 +- linden/indra/newview/llviewerwindow.h | 3 +- linden/indra/newview/llvoavatar.cpp | 17 +- linden/indra/newview/llvoavatar.h | 1 + linden/indra/newview/llvopartgroup.cpp | 4 +- linden/indra/newview/llvotree.cpp | 28 + linden/indra/newview/llvotree.h | 5 + linden/indra/newview/llworldmapview.cpp | 12 +- linden/indra/newview/pipeline.h | 1 + .../newview/skins/default/xui/de/floater_about.xml | 2 +- .../skins/default/xui/de/floater_about_land.xml | 20 +- .../skins/default/xui/de/floater_avatar_picker.xml | 14 +- .../skins/default/xui/de/floater_bulk_perms.xml | 1 + .../skins/default/xui/de/floater_chat_history.xml | 4 +- .../skins/default/xui/de/floater_customize.xml | 72 +- .../skins/default/xui/de/floater_directory.xml | 9 +- .../skins/default/xui/de/floater_sell_land.xml | 28 +- .../skins/default/xui/de/floater_sound_preview.xml | 2 +- .../newview/skins/default/xui/de/floater_tools.xml | 4 +- .../skins/default/xui/de/menu_pie_attachment.xml | 12 +- .../skins/default/xui/de/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/de/menu_viewer.xml | 12 +- .../newview/skins/default/xui/de/notifications.xml | 188 +- .../skins/default/xui/de/panel_chat_bar.xml | 4 +- .../skins/default/xui/de/panel_place_small.xml | 4 +- .../default/xui/de/panel_preferences_general.xml | 2 +- .../skins/default/xui/de/panel_region_covenant.xml | 9 +- .../indra/newview/skins/default/xui/de/strings.xml | 8 +- .../skins/default/xui/de/teleport_strings.xml | 30 +- .../skins/default/xui/en-us/floater_about.xml | 4 +- .../skins/default/xui/en-us/floater_customize.xml | 110 +- .../skins/default/xui/en-us/floater_directory.xml | 22 +- .../skins/default/xui/en-us/floater_sell_land.xml | 16 +- .../default/xui/en-us/floater_sound_preview.xml | 2 +- .../skins/default/xui/en-us/floater_tools.xml | 2 +- .../skins/default/xui/en-us/menu_inventory.xml | 3 + .../default/xui/en-us/menu_pie_attachment.xml | 34 +- .../skins/default/xui/en-us/menu_pie_object.xml | 6 +- .../skins/default/xui/en-us/menu_pie_self.xml | 11 +- .../skins/default/xui/en-us/notifications.xml | 6 +- .../xui/en-us/panel_preferences_general.xml | 2 +- .../default/xui/en-us/panel_preferences_im.xml | 4 +- .../skins/default/xui/en-us/panel_progress.xml | 2 +- .../newview/skins/default/xui/es/floater_about.xml | 2 +- .../skins/default/xui/es/floater_about_land.xml | 116 +- .../skins/default/xui/es/floater_bulk_perms.xml | 1 + .../skins/default/xui/es/floater_buy_currency.xml | 10 +- .../skins/default/xui/es/floater_customize.xml | 146 +- .../skins/default/xui/es/floater_directory.xml | 9 +- .../skins/default/xui/es/floater_sell_land.xml | 8 +- .../skins/default/xui/es/floater_sound_preview.xml | 2 +- .../newview/skins/default/xui/es/floater_tools.xml | 2 +- .../skins/default/xui/es/floater_world_map.xml | 2 +- .../skins/default/xui/es/menu_pie_attachment.xml | 12 +- .../skins/default/xui/es/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/es/notifications.xml | 21 +- .../default/xui/es/panel_preferences_general.xml | 15 +- .../newview/skins/default/xui/fr/floater_about.xml | 2 +- .../skins/default/xui/fr/floater_about_land.xml | 24 +- .../skins/default/xui/fr/floater_avatar_picker.xml | 2 +- .../skins/default/xui/fr/floater_beacons.xml | 4 +- .../skins/default/xui/fr/floater_bulk_perms.xml | 9 +- .../skins/default/xui/fr/floater_buy_contents.xml | 2 +- .../skins/default/xui/fr/floater_buy_currency.xml | 17 +- .../skins/default/xui/fr/floater_chat_history.xml | 6 +- .../skins/default/xui/fr/floater_customize.xml | 128 +- .../skins/default/xui/fr/floater_directory.xml | 15 +- .../skins/default/xui/fr/floater_god_tools.xml | 14 +- .../newview/skins/default/xui/fr/floater_html.xml | 2 +- .../newview/skins/default/xui/fr/floater_im.xml | 2 +- .../default/xui/fr/floater_live_lsleditor.xml | 2 +- .../skins/default/xui/fr/floater_perm_prefs.xml | 4 +- .../skins/default/xui/fr/floater_profile.xml | 4 +- .../skins/default/xui/fr/floater_report_abuse.xml | 2 +- .../skins/default/xui/fr/floater_sell_land.xml | 8 +- .../skins/default/xui/fr/floater_sound_preview.xml | 2 +- .../newview/skins/default/xui/fr/floater_tools.xml | 25 +- .../skins/default/xui/fr/floater_top_objects.xml | 12 +- .../skins/default/xui/fr/floater_world_map.xml | 27 +- .../newview/skins/default/xui/fr/menu_login.xml | 2 +- .../skins/default/xui/fr/menu_pie_attachment.xml | 12 +- .../skins/default/xui/fr/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/fr/menu_viewer.xml | 16 +- .../newview/skins/default/xui/fr/notifications.xml | 401 +- .../newview/skins/default/xui/fr/panel_audio.xml | 2 +- .../newview/skins/default/xui/fr/panel_avatar.xml | 71 +- .../newview/skins/default/xui/fr/panel_friends.xml | 12 +- .../skins/default/xui/fr/panel_media_controls.xml | 4 +- .../default/xui/fr/panel_media_remote_expanded.xml | 2 +- .../newview/skins/default/xui/fr/panel_place.xml | 16 +- .../skins/default/xui/fr/panel_place_small.xml | 20 +- .../default/xui/fr/panel_preferences_audio.xml | 2 +- .../default/xui/fr/panel_preferences_general.xml | 4 +- .../default/xui/fr/panel_preferences_input.xml | 2 +- .../default/xui/fr/panel_preferences_network.xml | 2 +- .../default/xui/fr/panel_preferences_voice.xml | 4 +- .../skins/default/xui/fr/panel_region_covenant.xml | 9 +- .../skins/default/xui/fr/panel_region_debug.xml | 6 +- .../skins/default/xui/fr/panel_region_general.xml | 4 +- .../skins/default/xui/fr/panel_voice_controls.xml | 2 +- .../newview/skins/default/xui/fr/role_actions.xml | 4 +- .../indra/newview/skins/default/xui/fr/strings.xml | 10 +- .../skins/default/xui/fr/teleport_strings.xml | 31 +- .../newview/skins/default/xui/ja/floater_about.xml | 2 +- .../skins/default/xui/ja/floater_about_land.xml | 22 +- .../skins/default/xui/ja/floater_bulk_perms.xml | 1 + .../skins/default/xui/ja/floater_buy_currency.xml | 4 +- .../skins/default/xui/ja/floater_customize.xml | 29 +- .../skins/default/xui/ja/floater_directory.xml | 13 +- .../skins/default/xui/ja/floater_god_tools.xml | 2 +- .../newview/skins/default/xui/ja/floater_html.xml | 2 +- .../default/xui/ja/floater_preview_gesture.xml | 4 +- .../skins/default/xui/ja/floater_report_abuse.xml | 70 +- .../skins/default/xui/ja/floater_sell_land.xml | 14 +- .../skins/default/xui/ja/floater_sound_preview.xml | 2 +- .../skins/default/xui/ja/floater_telehub.xml | 6 +- .../newview/skins/default/xui/ja/floater_tools.xml | 42 +- .../skins/default/xui/ja/floater_world_map.xml | 6 +- .../newview/skins/default/xui/ja/menu_login.xml | 2 +- .../skins/default/xui/ja/menu_pie_attachment.xml | 12 +- .../skins/default/xui/ja/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/ja/menu_viewer.xml | 12 +- .../newview/skins/default/xui/ja/notifications.xml | 945 ++- .../newview/skins/default/xui/ja/panel_avatar.xml | 18 +- .../skins/default/xui/ja/panel_group_general.xml | 4 +- .../skins/default/xui/ja/panel_group_notices.xml | 2 +- .../skins/default/xui/ja/panel_group_voting.xml | 8 +- .../skins/default/xui/ja/panel_media_controls.xml | 4 +- .../default/xui/ja/panel_media_remote_expanded.xml | 4 +- .../newview/skins/default/xui/ja/panel_place.xml | 4 +- .../skins/default/xui/ja/panel_place_small.xml | 11 +- .../skins/default/xui/ja/panel_region_covenant.xml | 13 +- .../newview/skins/default/xui/ja/role_actions.xml | 92 +- .../indra/newview/skins/default/xui/ja/strings.xml | 8 +- .../skins/default/xui/ja/teleport_strings.xml | 26 +- .../skins/default/xui/ko/menu_pie_attachment.xml | 11 +- .../skins/default/xui/ko/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/ko/notifications.xml | 2 +- .../skins/default/xui/pl/floater_about_land.xml | 34 +- .../default/xui/pl/floater_animation_preview.xml | 26 +- .../skins/default/xui/pl/floater_auction.xml | 2 +- .../default/xui/pl/floater_avatar_textures.xml | 4 +- .../skins/default/xui/pl/floater_beacons.xml | 2 +- .../skins/default/xui/pl/floater_build_options.xml | 2 +- .../skins/default/xui/pl/floater_bulk_perms.xml | 5 +- .../newview/skins/default/xui/pl/floater_bumps.xml | 2 +- .../skins/default/xui/pl/floater_buy_currency.xml | 18 +- .../skins/default/xui/pl/floater_buy_land.xml | 12 +- .../skins/default/xui/pl/floater_camera.xml | 2 +- .../skins/default/xui/pl/floater_critical.xml | 2 +- .../skins/default/xui/pl/floater_customize.xml | 28 +- .../skins/default/xui/pl/floater_directory.xml | 10 +- .../skins/default/xui/pl/floater_god_tools.xml | 41 +- .../skins/default/xui/pl/floater_group_info.xml | 16 +- .../newview/skins/default/xui/pl/floater_html.xml | 5 +- .../newview/skins/default/xui/pl/floater_im.xml | 2 +- .../default/xui/pl/floater_instant_message.xml | 2 +- .../xui/pl/floater_instant_message_group.xml | 2 +- .../skins/default/xui/pl/floater_land_holdings.xml | 4 +- .../skins/default/xui/pl/floater_landmark_ctrl.xml | 2 +- .../newview/skins/default/xui/pl/floater_mute.xml | 2 +- .../skins/default/xui/pl/floater_mute_object.xml | 7 +- .../default/xui/pl/floater_new_outfit_dialog.xml | 17 +- .../skins/default/xui/pl/floater_post_process.xml | 2 +- .../default/xui/pl/floater_preview_notecard.xml | 2 +- .../pl/floater_preview_notecard_keep_discard.xml | 2 +- .../default/xui/pl/floater_price_for_listing.xml | 18 +- .../skins/default/xui/pl/floater_report_abuse.xml | 2 +- .../skins/default/xui/pl/floater_script_search.xml | 6 +- .../skins/default/xui/pl/floater_sound_preview.xml | 2 +- .../skins/default/xui/pl/floater_telehub.xml | 27 +- .../skins/default/xui/pl/floater_texture_ctrl.xml | 2 +- .../newview/skins/default/xui/pl/floater_tools.xml | 8 +- .../newview/skins/default/xui/pl/floater_tos.xml | 4 +- .../default/xui/pl/floater_windlight_options.xml | 2 +- .../skins/default/xui/pl/floater_world_map.xml | 8 +- .../skins/default/xui/pl/menu_pie_attachment.xml | 12 +- .../skins/default/xui/pl/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/pl/notifications.xml | 56 +- .../skins/default/xui/pl/panel_audio_device.xml | 2 +- .../newview/skins/default/xui/pl/panel_avatar.xml | 6 +- .../newview/skins/default/xui/pl/panel_event.xml | 2 +- .../newview/skins/default/xui/pl/panel_friends.xml | 2 +- .../skins/default/xui/pl/panel_group_general.xml | 6 +- .../skins/default/xui/pl/panel_group_invite.xml | 2 +- .../default/xui/pl/panel_group_land_money.xml | 2 +- .../skins/default/xui/pl/panel_group_roles.xml | 2 +- .../default/xui/pl/panel_media_remote_expanded.xml | 2 +- .../skins/default/xui/pl/panel_overlaybar.xml | 4 +- .../newview/skins/default/xui/pl/panel_place.xml | 2 +- .../default/xui/pl/panel_preferences_audio.xml | 2 +- .../default/xui/pl/panel_preferences_chat.xml | 6 +- .../default/xui/pl/panel_preferences_general.xml | 13 +- .../default/xui/pl/panel_preferences_graphics1.xml | 2 +- .../skins/default/xui/pl/panel_region_covenant.xml | 23 +- .../default/xui/pl/panel_speaker_controls.xml | 2 +- .../skins/default/xui/pl/panel_status_bar.xml | 30 +- .../newview/skins/default/xui/pl/role_actions.xml | 44 +- .../indra/newview/skins/default/xui/pl/strings.xml | 4 +- .../skins/default/xui/pl/teleport_strings.xml | 16 +- .../newview/skins/default/xui/pt/floater_about.xml | 2 +- .../skins/default/xui/pt/floater_about_land.xml | 175 +- .../skins/default/xui/pt/floater_avatar_picker.xml | 43 +- .../skins/default/xui/pt/floater_bulk_perms.xml | 44 + .../skins/default/xui/pt/floater_buy_currency.xml | 6 +- .../skins/default/xui/pt/floater_buy_land.xml | 36 +- .../skins/default/xui/pt/floater_customize.xml | 140 +- .../skins/default/xui/pt/floater_directory.xml | 136 +- .../skins/default/xui/pt/floater_font_test.xml | 6 + .../default/xui/pt/floater_instant_message.xml | 5 +- .../skins/default/xui/pt/floater_joystick.xml | 2 + .../skins/default/xui/pt/floater_land_holdings.xml | 5 +- .../skins/default/xui/pt/floater_mini_map.xml | 4 + .../newview/skins/default/xui/pt/floater_mute.xml | 2 +- .../skins/default/xui/pt/floater_mute_object.xml | 4 +- .../default/xui/pt/floater_object_im_info.xml | 16 + .../skins/default/xui/pt/floater_perm_prefs.xml | 16 + .../skins/default/xui/pt/floater_profile.xml | 4 +- .../skins/default/xui/pt/floater_report_abuse.xml | 18 +- .../skins/default/xui/pt/floater_sell_land.xml | 15 +- .../skins/default/xui/pt/floater_sound_preview.xml | 2 +- .../skins/default/xui/pt/floater_statistics.xml | 2 + .../newview/skins/default/xui/pt/floater_tools.xml | 84 +- .../skins/default/xui/pt/floater_world_map.xml | 42 +- .../skins/default/xui/pt/menu_inventory.xml | 5 +- .../newview/skins/default/xui/pt/menu_mini_map.xml | 8 + .../skins/default/xui/pt/menu_pie_attachment.xml | 17 +- .../skins/default/xui/pt/menu_pie_avatar.xml | 3 +- .../skins/default/xui/pt/menu_pie_object.xml | 16 +- .../newview/skins/default/xui/pt/menu_viewer.xml | 16 +- .../newview/skins/default/xui/pt/notifications.xml | 8038 +++++++------------- .../newview/skins/default/xui/pt/panel_avatar.xml | 67 +- .../default/xui/pt/panel_avatar_classified.xml | 12 +- .../skins/default/xui/pt/panel_classified.xml | 12 +- .../newview/skins/default/xui/pt/panel_event.xml | 10 +- .../skins/default/xui/pt/panel_group_general.xml | 12 +- .../skins/default/xui/pt/panel_group_invite.xml | 8 +- .../default/xui/pt/panel_group_land_money.xml | 8 +- .../skins/default/xui/pt/panel_group_roles.xml | 2 +- .../skins/default/xui/pt/panel_mini_map.xml | 27 + .../skins/default/xui/pt/panel_overlaybar.xml | 1 + .../newview/skins/default/xui/pt/panel_place.xml | 2 +- .../skins/default/xui/pt/panel_place_small.xml | 7 +- .../default/xui/pt/panel_preferences_general.xml | 39 +- .../default/xui/pt/panel_preferences_input.xml | 15 +- .../default/xui/pt/panel_preferences_voice.xml | 1 + .../skins/default/xui/pt/panel_region_covenant.xml | 86 +- .../skins/default/xui/pt/panel_region_general.xml | 21 +- .../default/xui/pt/panel_speaker_controls.xml | 2 +- .../indra/newview/skins/default/xui/pt/strings.xml | 73 +- .../newview/skins/default/xui/pt/ui_strings.xml | 28 + .../skins/default/xui/ru/floater_about_land.xml | 89 +- .../skins/default/xui/ru/floater_bulk_perms.xml | 1 + .../skins/default/xui/ru/floater_customize.xml | 176 +- .../skins/default/xui/ru/floater_directory.xml | 9 +- .../skins/default/xui/ru/floater_sound_preview.xml | 2 +- .../skins/default/xui/ru/menu_pie_attachment.xml | 12 +- .../skins/default/xui/ru/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/ru/notifications.xml | 2 +- .../skins/default/xui/uk/floater_about_land.xml | 79 +- .../skins/default/xui/uk/floater_bulk_perms.xml | 1 + .../skins/default/xui/uk/floater_customize.xml | 200 +- .../skins/default/xui/uk/floater_directory.xml | 9 +- .../skins/default/xui/uk/floater_sound_preview.xml | 2 +- .../skins/default/xui/uk/menu_pie_attachment.xml | 12 +- .../skins/default/xui/uk/menu_pie_object.xml | 12 +- .../newview/skins/default/xui/uk/notifications.xml | 2 +- .../skins/default/xui/zh/menu_pie_attachment.xml | 11 +- .../skins/default/xui/zh/menu_pie_object.xml | 12 +- .../skins/silver/xui/en-us/floater_directory.xml | 22 +- .../skins/silver/xui/en-us/floater_tools.xml | 2 +- 312 files changed, 6667 insertions(+), 8104 deletions(-) create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pt/ui_strings.xml diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt index e84eac1..1b880bb 100644 --- a/linden/doc/contributions.txt +++ b/linden/doc/contributions.txt @@ -14,6 +14,8 @@ Adam Marker VWR-2755 Agathos Frascati CT-246 + CT-317 + CT-352 Aimee Trescothick VWR-1813 VWR-3321 @@ -101,6 +103,8 @@ Biancaluce Robbiani CT-229 CT-230 CT-231 + CT-321 + CT-352 Blakar Ogre VWR-418 VWR-881 @@ -121,6 +125,9 @@ Bulli Schumann CT-222 CT-223 CT-224 + CT-319 + CT-350 + CT-352 bushing Spatula VWR-119 VWR-424 @@ -172,6 +179,7 @@ EponymousDylan Ra VWR-1465 Eva Nowicka CT-324 + CT-352 Farallon Greyskin VWR-2036 Feep Larsson @@ -245,6 +253,7 @@ Ian Kas CT-325 Irene Muni CT-324 + CT-352 Iskar Ariantho VWR-1223 VWR-11759 @@ -280,6 +289,7 @@ Lisa Lowe CT-222 CT-223 CT-224 + CT-319 Lockhart Cordoso VWR-108 maciek marksman @@ -429,9 +439,12 @@ Pf Shan CT-229 CT-230 CT-231 + CT-321 princess niven VWR-5733 CT-85 + CT-320 + CT-352 Renault Clio VWR-1976 Ringo Tuxing @@ -442,6 +455,7 @@ Ringo Tuxing CT-229 CT-230 CT-231 + CT-321 Robin Cornelius VWR-2488 VWR-9557 @@ -456,6 +470,7 @@ Salahzar Stenvaag CT-229 CT-230 CT-231 + CT-321 Sammy Frederix VWR-6186 Scrippy Scofield @@ -476,6 +491,7 @@ Sergen Davies CT-229 CT-230 CT-231 + CT-321 SignpostMarv Martin VWR-153 VWR-154 @@ -547,6 +563,7 @@ Vadim Bigbear VWR-2681 Vixen Heron VWR-2710 + CT-88 Whoops Babii VWR-631 VWR-1640 diff --git a/linden/indra/llcharacter/lleditingmotion.cpp b/linden/indra/llcharacter/lleditingmotion.cpp index 913be27..4a2de62 100644 --- a/linden/indra/llcharacter/lleditingmotion.cpp +++ b/linden/indra/llcharacter/lleditingmotion.cpp @@ -187,13 +187,7 @@ BOOL LLEditingMotion::onUpdate(F32 time, U8* joint_mask) } focus_pt += mCharacter->getCharacterPosition(); - if (!llfinite(focus_pt.magVecSquared())) - { - LLVector3 tmp = mCharacter->getCharacterPosition() ; - llerrs << "Non finite focus point in editing motion. focus point: " << focus_pt << " and character position: " << - tmp << " and pointAtPt: " << *pointAtPt << llendl; - } - + // propagate joint positions to kinematic chain mParentJoint.setPosition( mParentState->getJoint()->getWorldPosition() ); mShoulderJoint.setPosition( mShoulderState->getJoint()->getPosition() ); diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp index 82530b1..669afc5 100644 --- a/linden/indra/llcommon/llapr.cpp +++ b/linden/indra/llcommon/llapr.cpp @@ -38,6 +38,7 @@ apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. apr_thread_mutex_t *gLogMutexp = NULL; +apr_thread_mutex_t *gCallStacksLogMutexp = NULL; const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool @@ -51,6 +52,7 @@ void ll_init_apr() // Initialize the logging mutex apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); + apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); } if(!LLAPRFile::sAPRFilePoolp) @@ -72,6 +74,14 @@ void ll_cleanup_apr() apr_thread_mutex_destroy(gLogMutexp); gLogMutexp = NULL; } + if (gCallStacksLogMutexp) + { + // Clean up the logging mutex + + // All other threads NEED to be done before we clean up APR, so this is okay. + apr_thread_mutex_destroy(gCallStacksLogMutexp); + gCallStacksLogMutexp = NULL; + } if (gAPRPoolp) { apr_pool_destroy(gAPRPoolp); diff --git a/linden/indra/llcommon/llapr.h b/linden/indra/llcommon/llapr.h index 44ad2dd..63130a8 100644 --- a/linden/indra/llcommon/llapr.h +++ b/linden/indra/llcommon/llapr.h @@ -49,6 +49,7 @@ #include "llstring.h" extern apr_thread_mutex_t* gLogMutexp; +extern apr_thread_mutex_t* gCallStacksLogMutexp; /** * @brief initialize the common apr constructs -- apr itself, the diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp index 5e520af..a0e42c1 100644 --- a/linden/indra/llcommon/llerror.cpp +++ b/linden/indra/llcommon/llerror.cpp @@ -1242,9 +1242,62 @@ namespace LLError char** LLCallStacks::sBuffer = NULL ; S32 LLCallStacks::sIndex = 0 ; + class CallStacksLogLock + { + public: + CallStacksLogLock(); + ~CallStacksLogLock(); + bool ok() const { return mOK; } + private: + bool mLocked; + bool mOK; + }; + + CallStacksLogLock::CallStacksLogLock() + : mLocked(false), mOK(false) + { + if (!gCallStacksLogMutexp) + { + mOK = true; + return; + } + + const int MAX_RETRIES = 5; + for (int attempts = 0; attempts < MAX_RETRIES; ++attempts) + { + apr_status_t s = apr_thread_mutex_trylock(gCallStacksLogMutexp); + if (!APR_STATUS_IS_EBUSY(s)) + { + mLocked = true; + mOK = true; + return; + } + + ms_sleep(1); + } + + // We're hosed, we can't get the mutex. Blah. + std::cerr << "CallStacksLogLock::CallStacksLogLock: failed to get mutex for log" + << std::endl; + } + + CallStacksLogLock::~CallStacksLogLock() + { + if (mLocked) + { + apr_thread_mutex_unlock(gCallStacksLogMutexp); + } + } + //static void LLCallStacks::push(const char* function, const int line) { + CallStacksLogLock lock; + if (!lock.ok()) + { + return; + } + if(!sBuffer) { sBuffer = new char*[512] ; @@ -1280,6 +1333,12 @@ namespace LLError //static void LLCallStacks::end(std::ostringstream* _out) { + CallStacksLogLock lock; + if (!lock.ok()) + { + return; + } + if(!sBuffer) { sBuffer = new char*[512] ; @@ -1302,6 +1361,12 @@ namespace LLError //static void LLCallStacks::print() { + CallStacksLogLock lock; + if (!lock.ok()) + { + return; + } + if(sIndex > 0) { llinfos << " ************* PRINT OUT LL CALL STACKS ************* " << llendl ; diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index a393a4e..e18befc 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 23; -const S32 LL_VERSION_PATCH = 1; +const S32 LL_VERSION_PATCH = 2; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp index 253b30b..e04e970 100644 --- a/linden/indra/llui/llmenugl.cpp +++ b/linden/indra/llui/llmenugl.cpp @@ -2193,13 +2193,12 @@ void LLMenuGL::arrange( void ) mSpilloverMenu->appendNoArrange(itemp); // *NOTE:Mani Favor addChild() in merge with skinning } mSpilloverMenu->arrange(); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch + mSpilloverMenu->updateParent(LLMenuGL::sMenuContainer); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch mItems.erase(item_iter, mItems.end()); - mItems.push_back(mSpilloverBranch); addChild(mSpilloverBranch); height = llmax(height, mSpilloverBranch->getNominalHeight()); width += mSpilloverBranch->getNominalWidth(); - break; } else @@ -2233,12 +2232,12 @@ void LLMenuGL::arrange( void ) mSpilloverMenu->appendNoArrange(itemp); // *NOTE:Mani Favor addChild() in merge with skinning } mSpilloverMenu->arrange(); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch + mSpilloverMenu->updateParent(LLMenuGL::sMenuContainer); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch mItems.erase(item_iter, mItems.end()); mItems.push_back(mSpilloverBranch); addChild(mSpilloverBranch); height += mSpilloverBranch->getNominalHeight(); width = llmax( width, mSpilloverBranch->getNominalWidth() ); - break; } else diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp index beab131..e0cb82d 100644 --- a/linden/indra/llwindow/lldxhardware.cpp +++ b/linden/indra/llwindow/lldxhardware.cpp @@ -624,7 +624,37 @@ LLSD LLDXHardware::getDisplayInfo() ret["DeviceName"] = device_name; std::string device_driver= get_string(device_containerp, L"szDriverVersion"); ret["DriverVersion"] = device_driver; - } + + // ATI has a slightly different version string + if(device_name.length() >= 4 && device_name.substr(0,4) == "ATI ") + { + // get the key + HKEY hKey; + const DWORD RV_SIZE = 100; + WCHAR release_version[RV_SIZE]; + + // Hard coded registry entry. Using this since it's simpler for now. + // And using EnumDisplayDevices to get a registry key also requires + // a hard coded Query value. + if(ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\ATI Technologies\\CBT"), &hKey)) + { + // get the value + DWORD dwType = REG_SZ; + DWORD dwSize = sizeof(WCHAR) * RV_SIZE; + if(ERROR_SUCCESS == RegQueryValueEx(hKey, TEXT("ReleaseVersion"), + NULL, &dwType, (LPBYTE)release_version, &dwSize)) + { + // print the value + // windows doesn't guarantee to be null terminated + release_version[RV_SIZE - 1] = NULL; + ret["DriverVersion"] = utf16str_to_utf8str(release_version); + + } + RegCloseKey(hKey); + } + } + } + LCleanup: SAFE_RELEASE(file_containerp); SAFE_RELEASE(driver_containerp); diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 108ce86..7ae9212 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -4801,16 +4801,16 @@ 1.0 - IMInChatHistory + IMInChatConsole Comment - Copy IM into chat history + Copy IM into background chat console Persist 1 Type Boolean Value - 0 + 1 IMShowTimestamps @@ -6501,8 +6501,8 @@ Value 0 - 550 - 500 + 586 + 576 0 @@ -7383,6 +7383,17 @@ Value 0 + RenderHUDParticles + + Comment + Display particle systems in HUD attachments (experimental) + Persist + 1 + Type + Boolean + Value + 0 + RenderHiddenSelections Comment diff --git a/linden/indra/newview/installers/windows/lang_nl.nsi b/linden/indra/newview/installers/windows/lang_nl.nsi index c8ffa8b..8884b1e 100644 Binary files a/linden/indra/newview/installers/windows/lang_nl.nsi and b/linden/indra/newview/installers/windows/lang_nl.nsi differ diff --git a/linden/indra/newview/linux_tools/launch_url.sh b/linden/indra/newview/linux_tools/launch_url.sh index d2c8919..404ea36 100755 --- a/linden/indra/newview/linux_tools/launch_url.sh +++ b/linden/indra/newview/linux_tools/launch_url.sh @@ -7,17 +7,15 @@ # # On Unixoids we try, in order of decreasing priority: # - $BROWSER if set (preferred) -# - kfmclient openURL +# - Default GNOME browser +# - Default KDE browser # - x-www-browser -# - opera -# - firefox -# - mozilla -# - netscape +# - The first browser in $BROWSER_COMMANDS that is found. URL="$1" if [ -z "$URL" ]; then - echo "Usage: $0 URL" + echo "Usage: $(basename "$0") URL" exit fi @@ -47,46 +45,42 @@ if [ ! -z "$XBROWSER" ]; then echo "$0: Trying some others..." fi -# else kfmclient -# (embodies KDE concept of 'preferred browser') -if which kfmclient >/dev/null; then - kfmclient openURL "$URL" & - exit -fi - -# else x-www-browser -# (Debianesque idea of a working X browser) -if which x-www-browser >/dev/null; then - x-www-browser "$URL" & - exit -fi - -# else opera -# (if user has opera in their path, they probably went to the -# trouble of installing it -> prefer it) -if which opera >/dev/null; then - opera "$URL" & +# Launcher the default GNOME browser. +if [ ! -z "$GNOME_DESKTOP_SESSION_ID" ] && which gnome-open >/dev/null; then + gnome-open "$URL" & exit fi -# else firefox -if which firefox >/dev/null; then - firefox "$URL" & +# Launch the default KDE browser. +if [ ! -z "$KDE_FULL_SESSION" ] && which kfmclient >/dev/null; then + kfmclient openURL "$URL" & exit fi -# else mozilla -if which mozilla >/dev/null; then - mozilla "$URL" & - exit -fi - -# else netscape -if which netscape >/dev/null; then - netscape "$URL" & - exit -fi +# List of browser commands that will be tried in the order listed. x-www-browser +# will be tried first, which is a debian alternative. +BROWSER_COMMANDS=" \ + x-www-browser \ + firefox \ + mozilla-firefox \ + iceweasel \ + iceape \ + opera \ + epiphany-browser \ + epiphany-gecko \ + epiphany-webkit \ + epiphany \ + mozilla \ + seamonkey \ + galeon \ + dillo \ + netscape" +for browser_cmd in $BROWSER_COMMANDS; do + if which $browser_cmd >/dev/null; then + $browser_cmd "$URL" & + exit + fi +done echo '$0: Failed to find a known browser. Please consider setting the $BROWSER environment variable.' - -# end. +exit 1 diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index cf50ec8..c722b89 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -1320,9 +1320,10 @@ LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 original_fo BOOL is_avatar = object->isAvatar(); // since the animation system allows the avatars facing and position to deviate from its nominal LLViewerObject/LLDrawable transform // calculate the focus-specific orientation for avatars based off the pelvis joint - LLMatrix4 obj_matrix = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldMatrix() : object->getRenderMatrix(); - LLQuaternion obj_rot = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldRotation() : object->getRenderRotation(); - LLVector3 obj_pos = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldPosition() : object->getRenderPosition(); + // NOTE: pelvis no longer good candidate, removed. DEV-30589 + LLMatrix4 obj_matrix = object->getRenderMatrix(); + LLQuaternion obj_rot = object->getRenderRotation(); + LLVector3 obj_pos = object->getRenderPosition(); LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation LLVector3 object_extents = object->getScale(); // make sure they object extents are non-zero diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index a956555..8fc2578 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -2042,8 +2042,18 @@ bool LLAppViewer::initConfiguration() void LLAppViewer::checkForCrash(void) { -#if LL_SEND_CRASH_REPORTS - if (gLastExecEvent == LAST_EXEC_FROZE || gLastExecEvent == LAST_EXEC_OTHER_CRASH) +#if 1 //*REMOVE:Mani LL_SEND_CRASH_REPORTS + //*NOTE:Mani The current state of the crash handler has the MacOSX + // sending all crash reports as freezes, in order to let + // the MacOSX CrashRepoter generate stacks before spawning the + // SL crash logger. + // The Linux and Windows clients generate their own stacks and + // spawn the SL crash logger immediately. This may change in the future. +#if LL_DARWIN + if(gLastExecEvent != LAST_EXEC_NORMAL) +#else + if (gLastExecEvent == LAST_EXEC_FROZE || gLastExecEvent == LAST_EXEC_OTHER_CRASH) +#endif { llinfos << "Last execution froze, requesting to send crash report." << llendl; // @@ -2286,7 +2296,7 @@ void LLAppViewer::handleViewerCrash() llinfos << "Handle viewer crash entry." << llendl; //print out recorded call stacks if there are any. - LLError::LLCallStacks::print() ; + LLError::LLCallStacks::print(); LLAppViewer* pApp = LLAppViewer::instance(); if (pApp->beingDebugged()) @@ -3729,6 +3739,35 @@ void LLAppViewer::disconnectViewer() { gFloaterView->restoreAll(); } + + + std::list floaters_to_close; + for(LLView::child_list_const_iter_t it = gFloaterView->getChildList()->begin(); + it != gFloaterView->getChildList()->end(); + ++it) + { + // The following names are defined in the + // floater_image_preview.xml + // floater_sound_preview.xml + // floater_animation_preview.xml + // files. + LLFloater* fl = static_cast(*it); + if(fl + && (fl->getName() == "Image Preview" + || fl->getName() == "Sound Preview" + || fl->getName() == "Animation Preview" + )) + { + floaters_to_close.push_back(fl); + } + } + + while(!floaters_to_close.empty()) + { + LLFloater* fl = floaters_to_close.front(); + floaters_to_close.pop_front(); + fl->close(); + } } if (LLSelectMgr::getInstance()) diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp index 3cdcb35..4a37503 100644 --- a/linden/indra/newview/llappviewermacosx.cpp +++ b/linden/indra/newview/llappviewermacosx.cpp @@ -135,6 +135,31 @@ bool LLAppViewerMacOSX::init() return LLAppViewer::init(); } +bool LLAppViewerMacOSX::initLogging() +{ + // Remove the crash stack log from previous executions. + // Since we've started logging a new instance of the app, we can assume + // The old crash stack is invalid for the next crash report. + char path[MAX_PATH]; + FSRef folder; + if(FSFindFolder(kUserDomain, kLogsFolderType, false, &folder) == noErr) + { + // folder is an FSRef to ~/Library/Logs/ + if(FSRefMakePath(&folder, (UInt8*)&path, sizeof(path)) == noErr) + { + std::string pathname = std::string(path) + std::string("/CrashReporter/"); + std::string mask = "Second Life*"; + std::string file_name; + while(gDirUtilp->getNextFileInDir(pathname, mask, file_name, false)) + { + LLFile::remove(pathname + file_name); + } + } + } + + return LLAppViewer::initLogging(); +} + // MacOSX may add and addition command line arguement for the process serial number. // The option takes a form like '-psn_0_12345'. The following method should be able to recognize // and either ignore or return a pair of values for the option. diff --git a/linden/indra/newview/llappviewermacosx.h b/linden/indra/newview/llappviewermacosx.h index bc841fc..0928916 100644 --- a/linden/indra/newview/llappviewermacosx.h +++ b/linden/indra/newview/llappviewermacosx.h @@ -55,6 +55,7 @@ protected: virtual void handleSyncCrashTrace(); std::string generateSerialNumber(); + virtual bool initLogging(); virtual bool initParseCommandLine(LLCommandLineParser& clp); }; diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp index 5b04e24..4fca9b1 100644 --- a/linden/indra/newview/llassetuploadresponders.cpp +++ b/linden/indra/newview/llassetuploadresponders.cpp @@ -171,6 +171,9 @@ void LLAssetUploadResponder::uploadUpload(const LLSD& content) void LLAssetUploadResponder::uploadFailure(const LLSD& content) { + // remove the "Uploading..." message + LLUploadDialog::modalUploadFinished(); + std::string reason = content["state"]; // deal with L$ errors if (reason == "insufficient funds") diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp index 71ecca5..8682124 100644 --- a/linden/indra/newview/llcurrencyuimanager.cpp +++ b/linden/indra/newview/llcurrencyuimanager.cpp @@ -121,7 +121,8 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog) : mPanel(dialog), mHidden(false), mError(false), - mUserCurrencyBuy(1000), mUserEnteredCurrencyBuy(false), + mUserCurrencyBuy(2000), // note, this is a default, real value set in llfloaterbuycurrency.cpp + mUserEnteredCurrencyBuy(false), mSiteCurrencyEstimated(false), mSiteCurrencyEstimatedCost(0), mBought(false), diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp index 2652387..810799d 100644 --- a/linden/indra/newview/llfloaterabout.cpp +++ b/linden/indra/newview/llfloaterabout.cpp @@ -59,7 +59,11 @@ #include "llappviewer.h" #include "llglheaders.h" #include "llmediamanager.h" +#include "llwindow.h" +#if LL_WINDOWS +#include "lldxhardware.h" +#endif extern LLCPUInfo gSysCPU; extern LLMemoryInfo gSysMemory; @@ -193,6 +197,20 @@ LLFloaterAbout::LLFloaterAbout() support.append( (const char*) glGetString(GL_RENDERER) ); support.append("\n"); +#if LL_WINDOWS + getWindow()->incBusyCount(); + getWindow()->setCursor(UI_CURSOR_ARROW); + support.append("Windows Graphics Driver Version: "); + LLSD driver_info = gDXHardware.getDisplayInfo(); + if (driver_info.has("DriverVersion")) + { + support.append(driver_info["DriverVersion"]); + } + support.append("\n"); + getWindow()->decBusyCount(); + getWindow()->setCursor(UI_CURSOR_ARROW); +#endif + support.append("OpenGL Version: "); support.append( (const char*) glGetString(GL_VERSION) ); support.append("\n"); diff --git a/linden/indra/newview/llfloaterbuycurrency.cpp b/linden/indra/newview/llfloaterbuycurrency.cpp index 37cac9e..cfbc5da 100644 --- a/linden/indra/newview/llfloaterbuycurrency.cpp +++ b/linden/indra/newview/llfloaterbuycurrency.cpp @@ -46,7 +46,7 @@ #include "llwindow.h" #include "llappviewer.h" -static const S32 STANDARD_BUY_AMOUNT = 1000; +static const S32 STANDARD_BUY_AMOUNT = 2000; static const S32 MINIMUM_BALANCE_AMOUNT = 0; class LLFloaterBuyCurrencyUI diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp index 682ed8e..ea529d1 100644 --- a/linden/indra/newview/llfloaterchat.cpp +++ b/linden/indra/newview/llfloaterchat.cpp @@ -398,7 +398,7 @@ void LLFloaterChat::addChat(const LLChat& chat, size = INSTANT_MSG_SIZE; } // We display anything if it's not an IM. If it's an IM, check pref... - if ( !from_instant_message || gSavedSettings.getBOOL("IMInChatHistory") ) + if ( !from_instant_message || gSavedSettings.getBOOL("IMInChatConsole") ) { gConsole->addLine(chat.mText, size, text_color); } @@ -406,9 +406,6 @@ void LLFloaterChat::addChat(const LLChat& chat, if(from_instant_message && gSavedPerAccountSettings.getBOOL("LogChatIM")) log_chat_text(chat); - - if(from_instant_message && gSavedSettings.getBOOL("IMInChatHistory")) - addChatHistory(chat,false); LLTextParser* highlight = LLTextParser::getInstance(); highlight->triggerAlerts(gAgent.getID(), gAgent.getPositionGlobal(), chat.mText, gViewerWindow->getWindow()); diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp index d2038de..7dce9a5 100644 --- a/linden/indra/newview/llfloaterimagepreview.cpp +++ b/linden/indra/newview/llfloaterimagepreview.cpp @@ -52,6 +52,7 @@ #include "llui.h" #include "llviewercamera.h" #include "llviewerwindow.h" +#include "llviewerobjectlist.h" #include "llvoavatar.h" #include "pipeline.h" #include "lluictrlfactory.h" @@ -107,7 +108,7 @@ BOOL LLFloaterImagePreview::postBuild() childHide("bad_image_text"); - if (mRawImagep.notNull()) + if (mRawImagep.notNull() && gAgent.getRegion() != NULL) { mAvatarPreview = new LLImagePreviewAvatar(256, 256); mAvatarPreview->setPreviewTarget("mPelvis", "mUpperBodyMesh0", mRawImagep, 2.f, FALSE); @@ -609,7 +610,7 @@ LLImagePreviewAvatar::LLImagePreviewAvatar(S32 width, S32 height) : LLDynamicTex mCameraPitch = 0.f; mCameraZoom = 1.f; - mDummyAvatar = new LLVOAvatar(LLUUID::null, LL_PCODE_LEGACY_AVATAR, gAgent.getRegion()); + mDummyAvatar = (LLVOAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion()); mDummyAvatar->createDrawable(&gPipeline); mDummyAvatar->mIsDummy = TRUE; mDummyAvatar->mSpecialRenderMode = 2; diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp index 41eeb88..569f575 100644 --- a/linden/indra/newview/llfloatersnapshot.cpp +++ b/linden/indra/newview/llfloatersnapshot.cpp @@ -236,7 +236,7 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) : mImageScaled[0] = FALSE; mImageScaled[1] = FALSE; - mMaxImageSize = MAX_IMAGE_SIZE ; + mMaxImageSize = MAX_SNAPSHOT_IMAGE_SIZE ; mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; mThumbnailUpdateLock = FALSE ; mThumbnailUpToDate = FALSE ; @@ -255,13 +255,13 @@ LLSnapshotLivePreview::~LLSnapshotLivePreview() void LLSnapshotLivePreview::setMaxImageSize(S32 size) { - if(size < MAX_IMAGE_SIZE) + if(size < MAX_SNAPSHOT_IMAGE_SIZE) { mMaxImageSize = size; } else { - mMaxImageSize = MAX_IMAGE_SIZE ; + mMaxImageSize = MAX_SNAPSHOT_IMAGE_SIZE ; } } diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp index a5197d9..5d40760 100644 --- a/linden/indra/newview/llinventorybridge.cpp +++ b/linden/indra/newview/llinventorybridge.cpp @@ -3452,7 +3452,8 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Object Wear")); items.push_back(std::string("Attach To")); items.push_back(std::string("Attach To HUD")); - items.push_back(std::string("Restore to Last Position")); + // commented out for DEV-32347 + //items.push_back(std::string("Restore to Last Position")); LLMenuGL* attach_menu = menu.getChildMenuByName("Attach To", TRUE); LLMenuGL* attach_hud_menu = menu.getChildMenuByName("Attach To HUD", TRUE); diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp index da0029a..a119dc4 100644 --- a/linden/indra/newview/llnotify.cpp +++ b/linden/indra/newview/llnotify.cpp @@ -308,6 +308,11 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, sNotifyBoxCount++; + if (sNotifyBoxCount <= 0) + { + llwarns << "A notification was mishandled. sNotifyBoxCount = " << sNotifyBoxCount << llendl; + } + // If this is the only notify box, don't show the next button if (sNotifyBoxCount == 1 && mNextBtn) @@ -723,8 +728,6 @@ void LLNotifyBox::onClickButton(void* data) response[button_name] = true; } self->mNotification->respond(response); - - self->close(); } diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp index a3ee93c..9e4f970 100644 --- a/linden/indra/newview/llpanelclassified.cpp +++ b/linden/indra/newview/llpanelclassified.cpp @@ -754,6 +754,7 @@ void LLPanelClassified::refresh() mDescEditor->setEnabled(is_self); //mPriceEditor->setEnabled(is_self); mCategoryCombo->setEnabled(is_self); + mMatureCombo->setEnabled(is_self); if( is_self ) { @@ -765,10 +766,6 @@ void LLPanelClassified::refresh() setDefaultAccessCombo(); } } - else - { - mMatureCombo->setEnabled( FALSE ); - } if (mAutoRenewCheck) { diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp index 0f46aeb..dca29ae 100644 --- a/linden/indra/newview/llpaneldirfind.cpp +++ b/linden/indra/newview/llpaneldirfind.cpp @@ -306,9 +306,9 @@ std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const url.replace(where, substring.length(), collection); } - llinfos << "url " << url << llendl; } url += getSearchURLSuffix(inc_pg, inc_mature, inc_adult); + llinfos << "search url " << url << llendl; return url; } // static diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp index 67414e7..ccffc02 100644 --- a/linden/indra/newview/llpaneldirplaces.cpp +++ b/linden/indra/newview/llpaneldirplaces.cpp @@ -182,7 +182,8 @@ void LLPanelDirPlaces::performQuery() bool adult_enabled = gAgent.canAccessAdult(); bool mature_enabled = gAgent.canAccessMature(); - if( gSavedSettings.getBOOL("ShowPGSims")) + if (gSavedSettings.getBOOL("ShowPGSims") || + (!adult_enabled && !mature_enabled)) // if they can't have either of the others checked, force this one true { flags |= DFQ_INC_PG; } diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp index 7bc60d9..ddd3781 100644 --- a/linden/indra/newview/llpanelgeneral.cpp +++ b/linden/indra/newview/llpanelgeneral.cpp @@ -79,30 +79,30 @@ BOOL LLPanelGeneral::postBuild() // if we have no agent, we can't let them choose anything // if we have an agent, then we only let them choose if they have a choice - bool canChoose = gAgent.getID().notNull() && + bool can_choose = gAgent.getID().notNull() && (gAgent.isMature() || gAgent.isGodlike()); - if (canChoose) + if (can_choose) { // if they're not adult or a god, they shouldn't see the adult selection, so delete it if (!gAgent.isAdult() && !gAgent.isGodlike()) { - LLComboBox* pMaturityCombo = getChild("maturity_desired_combobox"); + LLComboBox* maturity_combo = getChild("maturity_desired_combobox"); // we're going to remove the adult entry from the combo. This obviously depends // on the order of items in the XML file, but there doesn't seem to be a reasonable // way to depend on the field in XML called 'name'. - pMaturityCombo->remove(0); + maturity_combo->remove(0); } } - U32 preferredMaturity = gSavedSettings.getU32("PreferredMaturity"); - childSetValue("maturity_desired_combobox", int(preferredMaturity)); - std::string selectedItemLabel = getChild("maturity_desired_combobox")->getSelectedItemLabel(); - childSetValue("maturity_desired_textbox", selectedItemLabel); + U32 preferred_maturity = gSavedSettings.getU32("PreferredMaturity"); + childSetValue("maturity_desired_combobox", int(preferred_maturity)); + std::string selected_item_label = getChild("maturity_desired_combobox")->getSelectedItemLabel(); + childSetValue("maturity_desired_textbox", selected_item_label); - childSetVisible("maturity_desired_combobox", canChoose); - childSetVisible("maturity_desired_textbox", !canChoose); + childSetVisible("maturity_desired_combobox", can_choose); + childSetVisible("maturity_desired_textbox", !can_choose); return TRUE; } @@ -138,17 +138,17 @@ void LLPanelGeneral::apply() // if we have no agent, we can't let them choose anything // if we have an agent, then we only let them choose if they have a choice - bool canChoose = gAgent.getID().notNull() && + bool can_choose = gAgent.getID().notNull() && (gAgent.isMature() || gAgent.isGodlike()); - if (canChoose) + if (can_choose) { - int preferredMaturity = childGetValue("maturity_desired_combobox").asInteger(); + int preferred_maturity = childGetValue("maturity_desired_combobox").asInteger(); - if (preferredMaturity != gSavedSettings.getU32("PreferredMaturity")) + if (preferred_maturity != gSavedSettings.getU32("PreferredMaturity")) { - gSavedSettings.setU32("PreferredMaturity", preferredMaturity); - gAgent.sendMaturityPreferenceToServer(preferredMaturity); + gSavedSettings.setU32("PreferredMaturity", preferred_maturity); + gAgent.sendMaturityPreferenceToServer(preferred_maturity); } } } diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp index 815152c..7ca3622 100644 --- a/linden/indra/newview/llpanelplace.cpp +++ b/linden/indra/newview/llpanelplace.cpp @@ -466,7 +466,8 @@ bool LLPanelPlace::callbackAuctionWebPage(const LLSD& notification, const LLSD& if (0 == option) { std::string url; - url = AUCTION_URL + llformat("%010d", response["auction_id"].asInteger()); + S32 auction_id = notification["payload"]["auction_id"].asInteger(); + url = AUCTION_URL + llformat("%010d", auction_id ); llinfos << "Loading auction page " << url << llendl; diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index e1e9740..0548287 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp @@ -97,7 +97,7 @@ BOOL LLPrefsIMImpl::postBuild() childSetLabelArg("send_im_to_email", "[EMAIL]", getString("log_in_to_change")); // Don't enable this until we get personal data - childDisable("include_im_in_chat_history"); + childDisable("include_im_in_chat_console"); childDisable("show_timestamps_check"); childDisable("friends_online_notify_checkbox"); @@ -115,7 +115,7 @@ BOOL LLPrefsIMImpl::postBuild() childSetText("busy_response", getString("log_in_to_change")); - childSetValue("include_im_in_chat_history", gSavedSettings.getBOOL("IMInChatHistory")); + childSetValue("include_im_in_chat_console", gSavedSettings.getBOOL("IMInChatConsole")); childSetValue("show_timestamps_check", gSavedSettings.getBOOL("IMShowTimestamps")); childSetValue("friends_online_notify_checkbox", gSavedSettings.getBOOL("ChatOnlineNotification")); @@ -164,7 +164,7 @@ void LLPrefsIMImpl::apply() gSavedPerAccountSettings.setString("BusyModeResponse", std::string(wstring_to_utf8str(busy_response))); - gSavedSettings.setBOOL("IMInChatHistory", childGetValue("include_im_in_chat_history").asBoolean()); + gSavedSettings.setBOOL("IMInChatConsole", childGetValue("include_im_in_chat_console").asBoolean()); gSavedSettings.setBOOL("IMShowTimestamps", childGetValue("show_timestamps_check").asBoolean()); gSavedSettings.setBOOL("ChatOnlineNotification", childGetValue("friends_online_notify_checkbox").asBoolean()); @@ -235,7 +235,7 @@ void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_e mOriginalHideOnlineStatus = true; } - childEnable("include_im_in_chat_history"); + childEnable("include_im_in_chat_console"); childEnable("show_timestamps_check"); childEnable("friends_online_notify_checkbox"); diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index 9aa5c37..808eb07 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -5398,6 +5398,11 @@ void dialog_refresh_all() gPieObject->arrange(); } + if( gPieAttachment->getVisible() ) + { + gPieAttachment->arrange(); + } + LLFloaterProperties::dirtyAll(); LLFloaterInspect::dirty(); } diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index aeb313f..64f84fe 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -3427,7 +3427,7 @@ void LLStartUp::multimediaInit() { LL_DEBUGS("AppInit") << "Initializing Multimedia...." << LL_ENDL; std::string msg = LLTrans::getString("LoginInitializingMultimedia"); - set_startup_status(0.50f, msg.c_str(), gAgent.mMOTD.c_str()); + set_startup_status(0.42f, msg.c_str(), gAgent.mMOTD.c_str()); display_startup(); LLViewerMedia::initClass(); diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp index eea4acf..b05da8c 100644 --- a/linden/indra/newview/lltexlayer.cpp +++ b/linden/indra/newview/lltexlayer.cpp @@ -68,8 +68,12 @@ S32 LLTexLayerSetBuffer::sGLBumpByteCount = 0; //----------------------------------------------------------------------------- // LLBakedUploadData() //----------------------------------------------------------------------------- -LLBakedUploadData::LLBakedUploadData( LLVOAvatar* avatar, LLTexLayerSetBuffer* layerset_buffer, const LLUUID & id ) : +LLBakedUploadData::LLBakedUploadData( LLVOAvatar* avatar, + LLTexLayerSet* layerset, + LLTexLayerSetBuffer* layerset_buffer, + const LLUUID & id ) : mAvatar( avatar ), + mLayerSet( layerset ), mLayerSetBuffer( layerset_buffer ), mID(id) { @@ -485,7 +489,8 @@ void LLTexLayerSetBuffer::readBackAndUpload(U8* baked_bump_data) if( valid ) { // baked_upload_data is owned by the responder and deleted after the request completes - LLBakedUploadData* baked_upload_data = new LLBakedUploadData( gAgent.getAvatarObject(), this, asset_id ); + LLBakedUploadData* baked_upload_data = + new LLBakedUploadData( gAgent.getAvatarObject(), this->mTexLayerSet, this, asset_id ); mUploadID = asset_id; // upload the image @@ -547,40 +552,51 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, void* user // Sanity check: only the user's avatar should be uploading textures. if( baked_upload_data->mAvatar == avatar ) { - // Because the avatar is still valid, it's layerset buffers should be valid also. - LLTexLayerSetBuffer* layerset_buffer = baked_upload_data->mLayerSetBuffer; - layerset_buffer->mUploadPending = FALSE; - - if (layerset_buffer->mUploadID.isNull()) + // Composite may have changed since the pointer was stored - need to do some checking. + LLTexLayerSetBuffer* prev_layerset_buffer = baked_upload_data->mLayerSetBuffer; + // Can't just call getComposite() because this will trigger creation if none exists. + LLTexLayerSetBuffer* curr_layerset_buffer = + baked_upload_data->mLayerSet->hasComposite()?baked_upload_data->mLayerSet->getComposite():NULL; + + if (prev_layerset_buffer != curr_layerset_buffer) { - // The upload got canceled, we should be in the process of baking a new texture - // so request an upload with the new data - layerset_buffer->requestUpload(); + llinfos << "Baked texture out of date, composite no longer valid, ignored" << llendl; } - else if( baked_upload_data->mID == layerset_buffer->mUploadID ) + else { - // This is the upload we're currently waiting for. - layerset_buffer->mUploadID.setNull(); - - if( result >= 0 ) + curr_layerset_buffer->mUploadPending = FALSE; + + if (curr_layerset_buffer->mUploadID.isNull()) + { + // The upload got canceled, we should be in the process of baking a new texture + // so request an upload with the new data + curr_layerset_buffer->requestUpload(); + } + else if( baked_upload_data->mID == curr_layerset_buffer->mUploadID ) { - ETextureIndex baked_te = avatar->getBakedTE( layerset_buffer->mTexLayerSet ); - U64 now = LLFrameTimer::getTotalTime(); // Record starting time - llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl; - avatar->setNewBakedTexture( baked_te, uuid ); + // This is the upload we're currently waiting for. + curr_layerset_buffer->mUploadID.setNull(); + + if( result >= 0 ) + { + ETextureIndex baked_te = avatar->getBakedTE( curr_layerset_buffer->mTexLayerSet ); + U64 now = LLFrameTimer::getTotalTime(); // Record starting time + llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl; + avatar->setNewBakedTexture( baked_te, uuid ); + } + else + { + llinfos << "Baked upload failed. Reason: " << result << llendl; + // *FIX: retry upload after n seconds, asset server could be busy + } } else { - llinfos << "Baked upload failed. Reason: " << result << llendl; - // *FIX: retry upload after n seconds, asset server could be busy + llinfos << "Received baked texture out of date, ignored." << llendl; } - } - else - { - llinfos << "Received baked texture out of date, ignored." << llendl; - } - avatar->dirtyMesh(); + avatar->dirtyMesh(); + } } } else diff --git a/linden/indra/newview/lltexlayer.h b/linden/indra/newview/lltexlayer.h index 18e6d6b..1924d0b 100644 --- a/linden/indra/newview/lltexlayer.h +++ b/linden/indra/newview/lltexlayer.h @@ -534,14 +534,22 @@ public: }; // Used by LLTexLayerSetBuffer for a callback. + +// For DEV-DEV-31590, "Heap corruption and crash after outfit +// changes", added the mLayerSet member. The current +// LLTexLayerSetBuffer can be found by querying mLayerSet->mComposite, +// but we still store the original mLayerSetBuffer here so we can +// detect when an upload is out of date. This prevents a memory +// stomp. See LLTexLayerSetBuffer::onTextureUploadComplete() for usage. class LLBakedUploadData { public: - LLBakedUploadData( LLVOAvatar* avatar, LLTexLayerSetBuffer* layerset_buffer, const LLUUID & id); + LLBakedUploadData( LLVOAvatar* avatar, LLTexLayerSet* layerset, LLTexLayerSetBuffer* layerset_buffer, const LLUUID & id); ~LLBakedUploadData() {} LLUUID mID; LLVOAvatar* mAvatar; // just backlink, don't LLPointer + LLTexLayerSet* mLayerSet; LLTexLayerSetBuffer* mLayerSetBuffer; LLUUID mWearableAssets[WT_COUNT]; U64 mStartTime; // Used to measure time baked texture upload requires diff --git a/linden/indra/newview/llviewercamera.cpp b/linden/indra/newview/llviewercamera.cpp index f54830f..72d1494 100644 --- a/linden/indra/newview/llviewercamera.cpp +++ b/linden/indra/newview/llviewercamera.cpp @@ -772,7 +772,7 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) // changes local camera and broadcasts change /* virtual */ void LLViewerCamera::setView(F32 vertical_fov_rads) { - F32 old_fov = LLViewerCamera::getInstance()->getDefaultFOV(); + F32 old_fov = LLViewerCamera::getInstance()->getView(); // cap the FoV vertical_fov_rads = llclamp(vertical_fov_rads, getMinView(), getMaxView()); diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp index 54c6f0a..977582b 100644 --- a/linden/indra/newview/llviewerdisplay.cpp +++ b/linden/indra/newview/llviewerdisplay.cpp @@ -514,7 +514,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) { //don't draw hud objects in this frame gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD); } - + + if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD_PARTICLES)) + { //don't draw hud particles in this frame + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD_PARTICLES); + } + //upkeep gl name pools LLGLNamePool::upkeepPools(); @@ -884,16 +889,26 @@ void render_hud_attachments() hud_cam.setOrigin(-1.f,0,0); hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1)); LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE); + + bool render_particles = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_PARTICLES) && gSavedSettings.getBOOL("RenderHUDParticles"); //only render hud objects U32 mask = gPipeline.getRenderTypeMask(); + // turn off everything gPipeline.setRenderTypeMask(0); - if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) + // turn on HUD + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD); + // turn on HUD particles + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD_PARTICLES); + + // if particles are off, turn off hud-particles as well + if (!render_particles) { - gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD); + // turn back off HUD particles + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD_PARTICLES); } - BOOL has_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI); + bool has_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI); if (has_ui) { gPipeline.toggleRenderDebugFeature((void*) LLPipeline::RENDER_DEBUG_FEATURE_UI); diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp index 5a042f2..ca8ed26 100644 --- a/linden/indra/newview/llviewerimage.cpp +++ b/linden/indra/newview/llviewerimage.cpp @@ -398,20 +398,34 @@ BOOL LLViewerImage::createTexture(S32 usename/*= 0*/) mOrigHeight = mFullHeight; } - - if (LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight())) + bool size_okay = true; + + U32 raw_width = mRawImage->getWidth() << mRawDiscardLevel; + U32 raw_height = mRawImage->getHeight() << mRawDiscardLevel; + if( raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE ) { - res = LLImageGL::createGLTexture(mRawDiscardLevel, mRawImage, usename); + llinfos << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << llendl; + size_okay = false; } - else + + if (!LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight())) { // A non power-of-two image was uploaded (through a non standard client) + llinfos << "Non power of two width or height: (" << mRawImage->getWidth() << "," << mRawImage->getHeight() << ")" << llendl; + size_okay = false; + } + + if( !size_okay ) + { + // An inappropriately-sized image was uploaded (through a non standard client) // We treat these images as missing assets which causes them to // be renderd as 'missing image' and to stop requesting data setIsMissingAsset(); destroyRawImage(); return FALSE; } + + res = LLImageGL::createGLTexture(mRawDiscardLevel, mRawImage, usename); } // diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 85ca5d0..0a53466 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -1035,7 +1035,8 @@ void init_debug_ui_menu(LLMenuGL* menu) menu->appendSeparator(); menu->append(new LLMenuItemCallGL("Web Browser Test", &handle_web_browser_test)); - menu->append(new LLMenuItemCallGL("Buy Currency Test", &handle_buy_currency_test)); + // commented out until work is complete: DEV-32268 + // menu->append(new LLMenuItemCallGL("Buy Currency Test", &handle_buy_currency_test)); menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); @@ -1600,15 +1601,20 @@ class LLObjectEnableTouch : public view_listener_t // Update label based on the node touch name if available. LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); + + std::string touch_text; if (node && node->mValid && !node->mTouchName.empty()) { - gMenuHolder->childSetText("Object Touch", node->mTouchName); + touch_text = node->mTouchName; } else { - gMenuHolder->childSetText("Object Touch", userdata["data"].asString()); + touch_text = userdata["data"].asString(); } + gMenuHolder->childSetText("Object Touch", touch_text); + gMenuHolder->childSetText("Attachment Object Touch", touch_text); + return true; } }; @@ -2878,7 +2884,9 @@ class LLEditEnableCustomizeAvatar : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - bool new_value = gAgent.areWearablesLoaded(); + bool new_value = (gAgent.getAvatarObject() && + gAgent.getAvatarObject()->isFullyLoaded() && + gAgent.areWearablesLoaded()); gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); return true; } diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index b69585f..b20695c 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -5267,6 +5267,7 @@ void process_script_dialog(LLMessageSystem* msg, void**) S32 button_count = msg->getNumberOfBlocks("Buttons"); if (button_count > SCRIPT_DIALOG_MAX_BUTTONS) { + llwarns << "Too many script dialog buttons - omitting some" << llendl; button_count = SCRIPT_DIALOG_MAX_BUTTONS; } diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp index 1fd31a0..46908f5 100644 --- a/linden/indra/newview/llviewertexteditor.cpp +++ b/linden/indra/newview/llviewertexteditor.cpp @@ -569,6 +569,7 @@ LLViewerTextEditor::LLViewerTextEditor(const std::string& name, const LLFontGL* font, BOOL allow_embedded_items) : LLTextEditor(name, rect, max_length, default_text, font, allow_embedded_items), + mDragItemChar(0), mDragItemSaved(FALSE), mInventoryCallback(new LLEmbeddedNotecardOpener) { @@ -694,6 +695,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) if (item_at_pos) { mDragItem = item_at_pos; + mDragItemChar = wc; mDragItemSaved = LLEmbeddedItems::getEmbeddedItemSaved(wc); gFocusMgr.setMouseCapture( this ); mMouseDownX = x; @@ -949,8 +951,9 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask) { if(mDragItemSaved) { - openEmbeddedItem(mDragItem); - }else + openEmbeddedItem(mDragItem, mDragItemChar); + } + else { showUnsavedAlertDialog(mDragItem); } @@ -1075,7 +1078,15 @@ BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask, std::string& tooltip_msg) { BOOL handled = FALSE; - + + LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); + if (LLToolDragAndDrop::SOURCE_NOTECARD == source) + { + // We currently do not handle dragging items from one notecard to another + // since items in a notecard must be in Inventory to be verified. See DEV-2891. + return FALSE; + } + if (mTakesNonScrollClicks) { if (getEnabled() && acceptsTextInput()) @@ -1111,7 +1122,7 @@ BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask, case DAD_GESTURE: { LLInventoryItem *item = (LLInventoryItem *)cargo_data; - if( allowsEmbeddedItems() ) + if( item && allowsEmbeddedItems() ) { U32 mask_next = item->getPermissions().getMaskNextOwner(); if((mask_next & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) @@ -1317,13 +1328,14 @@ BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos) { if( pos < getLength()) { - LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItem( getWChar(pos) ); + llwchar wc = getWChar(pos); + LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItem( wc ); if( item ) { - BOOL saved = LLEmbeddedItems::getEmbeddedItemSaved( getWChar(pos) ); + BOOL saved = LLEmbeddedItems::getEmbeddedItemSaved( wc ); if (saved) { - return openEmbeddedItem(item); + return openEmbeddedItem(item, wc); } else { @@ -1335,25 +1347,25 @@ BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos) } -BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item) +BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item, llwchar wc) { switch( item->getType() ) { case LLAssetType::AT_TEXTURE: - openEmbeddedTexture( item ); + openEmbeddedTexture( item, wc ); return TRUE; case LLAssetType::AT_SOUND: - openEmbeddedSound( item ); + openEmbeddedSound( item, wc ); return TRUE; case LLAssetType::AT_NOTECARD: - openEmbeddedNotecard( item ); + openEmbeddedNotecard( item, wc ); return TRUE; case LLAssetType::AT_LANDMARK: - openEmbeddedLandmark( item ); + openEmbeddedLandmark( item, wc ); return TRUE; case LLAssetType::AT_LSL_TEXT: @@ -1362,7 +1374,7 @@ BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item) case LLAssetType::AT_BODYPART: case LLAssetType::AT_ANIMATION: case LLAssetType::AT_GESTURE: - showCopyToInvDialog( item ); + showCopyToInvDialog( item, wc ); return TRUE; default: return FALSE; @@ -1371,7 +1383,7 @@ BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item) } -void LLViewerTextEditor::openEmbeddedTexture( LLInventoryItem* item ) +void LLViewerTextEditor::openEmbeddedTexture( LLInventoryItem* item, llwchar wc ) { // See if we can bring an existing preview to the front // *NOTE: Just for embedded Texture , we should use getAssetUUID(), @@ -1399,7 +1411,7 @@ void LLViewerTextEditor::openEmbeddedTexture( LLInventoryItem* item ) } } -void LLViewerTextEditor::openEmbeddedSound( LLInventoryItem* item ) +void LLViewerTextEditor::openEmbeddedSound( LLInventoryItem* item, llwchar wc ) { // Play sound locally LLVector3d lpos_global = gAgent.getPositionGlobal(); @@ -1408,18 +1420,18 @@ void LLViewerTextEditor::openEmbeddedSound( LLInventoryItem* item ) { gAudiop->triggerSound(item->getAssetUUID(), gAgentID, SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_UI, lpos_global); } - showCopyToInvDialog( item ); + showCopyToInvDialog( item, wc ); } -void LLViewerTextEditor::openEmbeddedLandmark( LLInventoryItem* item ) +void LLViewerTextEditor::openEmbeddedLandmark( LLInventoryItem* item, llwchar wc ) { std::string title = std::string(" ") + LLLandmarkBridge::prefix() + item->getName(); open_landmark((LLViewerInventoryItem*)item, title, FALSE, item->getUUID(), TRUE); } -void LLViewerTextEditor::openEmbeddedNotecard( LLInventoryItem* item ) +void LLViewerTextEditor::openEmbeddedNotecard( LLInventoryItem* item, llwchar wc ) { copyInventory(item, gInventoryCallbacks.registerCB(mInventoryCallback)); } @@ -1447,11 +1459,12 @@ bool LLViewerTextEditor::onNotecardDialog(const LLSD& notification, const LLSD& -void LLViewerTextEditor::showCopyToInvDialog( LLInventoryItem* item ) +void LLViewerTextEditor::showCopyToInvDialog( LLInventoryItem* item, llwchar wc ) { LLSD payload; - payload["item_id"] = item->getUUID(); - payload["notecard_id"] = mNotecardInventoryID; + LLUUID item_id = item->getUUID(); + payload["item_id"] = item_id; + payload["item_wc"] = LLSD::Integer(wc); LLNotifications::instance().add( "ConfirmItemCopy", LLSD(), payload, boost::bind(&LLViewerTextEditor::onCopyToInvDialog, this, _1, _2)); } @@ -1461,8 +1474,11 @@ bool LLViewerTextEditor::onCopyToInvDialog(const LLSD& notification, const LLSD& S32 option = LLNotification::getSelectedOption(notification, response); if( 0 == option ) { - LLInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID()); - copyInventory(itemp); + LLUUID item_id = notification["payload"]["item_id"].asUUID(); + llwchar wc = llwchar(notification["payload"]["item_wc"].asInteger()); + LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItem(wc); + if (itemp) + copyInventory(itemp); } return false; } diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h index 0aa9164..ae672d8 100644 --- a/linden/indra/newview/llviewertexteditor.h +++ b/linden/indra/newview/llviewertexteditor.h @@ -103,21 +103,22 @@ private: BOOL getEmbeddedItemToolTipAtPos(S32 pos, LLWString &wmsg) const; BOOL openEmbeddedItemAtPos( S32 pos ); - BOOL openEmbeddedItem(LLInventoryItem* item); + BOOL openEmbeddedItem(LLInventoryItem* item, llwchar wc); S32 insertEmbeddedItem(S32 pos, LLInventoryItem* item); - void openEmbeddedTexture( LLInventoryItem* item ); - void openEmbeddedSound( LLInventoryItem* item ); - void openEmbeddedLandmark( LLInventoryItem* item ); - void openEmbeddedNotecard( LLInventoryItem* item); - void showCopyToInvDialog( LLInventoryItem* item ); + void openEmbeddedTexture( LLInventoryItem* item, llwchar wc ); + void openEmbeddedSound( LLInventoryItem* item, llwchar wc ); + void openEmbeddedLandmark( LLInventoryItem* item, llwchar wc ); + void openEmbeddedNotecard( LLInventoryItem* item, llwchar wc); + void showCopyToInvDialog( LLInventoryItem* item, llwchar wc ); void showUnsavedAlertDialog( LLInventoryItem* item ); bool onCopyToInvDialog(const LLSD& notification, const LLSD& response ); static bool onNotecardDialog(const LLSD& notification, const LLSD& response ); LLPointer mDragItem; + llwchar mDragItemChar; BOOL mDragItemSaved; class LLEmbeddedItems* mEmbeddedItemList; diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index 8b40908..cb7dd57 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -1668,29 +1668,10 @@ void LLViewerWindow::initBase() // Console llassert( !gConsole ); - LLRect console_rect = full_window; - console_rect.mTop -= 24; - - console_rect.mBottom += getChatConsoleBottomPad(); - - // TODO: Eliminate magic constants - please used named constants if changing this - don't be a programmer hater - console_rect.mLeft += 24; //gSavedSettings.getS32("StatusBarButtonWidth") + gSavedSettings.getS32("StatusBarPad"); - - if (gSavedSettings.getBOOL("ChatFullWidth")) - { - console_rect.mRight -= 10; - } - else - { - // Make console rect somewhat narrow so having inventory open is - // less of a problem. - console_rect.mRight = console_rect.mLeft + 2 * width / 3; - } - gConsole = new LLConsole( "console", gSavedSettings.getS32("ConsoleBufferSize"), - console_rect, + getChatConsoleRect(), gSavedSettings.getS32("ChatFontSize"), gSavedSettings.getF32("ChatPersistTime") ); gConsole->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_BOTTOM); @@ -2452,6 +2433,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) // Debugging view for unified notifications: CTRL-SHIFT-5 // *FIXME: Having this special-cased right here (just so this can be invoked from the login screen) sucks. if ((MASK_SHIFT & mask) + && (!(MASK_ALT & mask)) && (MASK_CONTROL & mask) && ('5' == key)) { @@ -3054,7 +3036,7 @@ BOOL LLViewerWindow::handlePerFrameHover() } // Always update console - LLRect console_rect = gConsole->getRect(); + LLRect console_rect = getChatConsoleRect(); console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad(); gConsole->reshape(console_rect.getWidth(), console_rect.getHeight()); gConsole->setRect(console_rect); @@ -5066,6 +5048,33 @@ S32 LLViewerWindow::getChatConsoleBottomPad() return offset; } +LLRect LLViewerWindow::getChatConsoleRect() +{ + LLRect full_window(0, getWindowHeight(), getWindowWidth(), 0); + LLRect console_rect = full_window; + + const S32 CONSOLE_PADDING_TOP = 24; + const S32 CONSOLE_PADDING_LEFT = 24; + const S32 CONSOLE_PADDING_RIGHT = 10; + + console_rect.mTop -= CONSOLE_PADDING_TOP; + console_rect.mBottom += getChatConsoleBottomPad(); + + console_rect.mLeft += CONSOLE_PADDING_LEFT; + + if (gSavedSettings.getBOOL("ChatFullWidth")) + { + console_rect.mRight -= CONSOLE_PADDING_RIGHT; + } + else + { + // Make console rect somewhat narrow so having inventory open is + // less of a problem. + console_rect.mRight = console_rect.mLeft + 2 * getWindowWidth() / 3; + } + + return console_rect; +} //---------------------------------------------------------------------------- diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index 1520e77..512a8a8 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h @@ -125,7 +125,7 @@ private: }; -#define MAX_IMAGE_SIZE 6144 //6 * 1024, max snapshot image size 6144 * 6144 +static const U32 MAX_SNAPSHOT_IMAGE_SIZE = 6 * 1024; // max snapshot image size 6144 * 6144 class LLViewerWindow : public LLWindowCallbacks { @@ -369,6 +369,7 @@ private: void initFonts(F32 zoom_factor = 1.f); void schedulePick(LLPickInfo& pick_info); S32 getChatConsoleBottomPad(); // Vertical padding for child console rect, varied by bottom clutter + LLRect getChatConsoleRect(); // Get optimal cosole rect. public: LLWindow* mWindow; // graphical window object diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index 3491dd3..168b005 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp @@ -769,6 +769,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mBakedTextureData[i].mLastTextureIndex = IMG_DEFAULT_AVATAR; mBakedTextureData[i].mTexLayerSet = NULL; mBakedTextureData[i].mIsLoaded = false; + mBakedTextureData[i].mIsUsed = false; mBakedTextureData[i].mMaskTexName = 0; mBakedTextureData[i].mTextureIndex = getTextureIndex((EBakedTextureIndex)i); } @@ -4151,8 +4152,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (pass == AVATAR_RENDER_PASS_SINGLE) { const bool should_alpha_mask = mHasBakedHair && isTextureDefined(TEX_HEAD_BAKED) && isTextureDefined(TEX_UPPER_BAKED) - && isTextureDefined(TEX_LOWER_BAKED) && mBakedTextureData[BAKED_HEAD].mIsLoaded + && isTextureDefined(TEX_LOWER_BAKED) + && mBakedTextureData[BAKED_HEAD].mIsLoaded && mBakedTextureData[BAKED_UPPER].mIsLoaded && mBakedTextureData[BAKED_LOWER].mIsLoaded + && mBakedTextureData[BAKED_HEAD].mIsUsed + && mBakedTextureData[BAKED_UPPER].mIsUsed && mBakedTextureData[BAKED_LOWER].mIsUsed && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked && !(isSelf() && gAgent.cameraCustomizeAvatar()); // don't alpha mask if in customize mode @@ -4270,7 +4274,11 @@ U32 LLVOAvatar::renderRigid() if (isTextureVisible(TEX_EYES_BAKED) || mIsDummy) { // If the meshes need to be drawn, enable alpha masking but not blending - bool should_alpha_mask = mHasBakedHair && mBakedTextureData[BAKED_EYES].mIsLoaded && !(isSelf() && gAgent.cameraCustomizeAvatar()); + bool should_alpha_mask = mHasBakedHair + && mBakedTextureData[BAKED_EYES].mIsLoaded + && mBakedTextureData[BAKED_EYES].mIsUsed + && !(isSelf() && gAgent.cameraCustomizeAvatar()); + LLGLState test(GL_ALPHA_TEST, should_alpha_mask); if (should_alpha_mask) @@ -6905,6 +6913,7 @@ void LLVOAvatar::updateMeshTextures() if (use_lkg_baked_layer[i] && !self_customizing ) { LLViewerImage* baked_img = gImageList.getImageFromHost( mBakedTextureData[i].mLastTextureIndex, target_host ); + mBakedTextureData[i].mIsUsed = TRUE; for (U32 k=0; k < mBakedTextureData[i].mMeshes.size(); k++) { mBakedTextureData[i].mMeshes[k]->setTexture( baked_img ); @@ -6934,6 +6943,7 @@ void LLVOAvatar::updateMeshTextures() { mBakedTextureData[i].mTexLayerSet->createComposite(); mBakedTextureData[i].mTexLayerSet->setUpdatesEnabled( TRUE ); + mBakedTextureData[i].mIsUsed = FALSE; for (U32 k=0; k < mBakedTextureData[i].mMeshes.size(); k++) { mBakedTextureData[i].mMeshes[k]->setLayerSet( mBakedTextureData[i].mTexLayerSet ); @@ -6944,7 +6954,7 @@ void LLVOAvatar::updateMeshTextures() // ! BACKWARDS COMPATIBILITY ! // Workaround for viewing avatars from old viewers that haven't baked hair textures. // if (!isTextureDefined(mBakedTextureData[BAKED_HAIR].mTextureIndex)) - if (!is_layer_baked[BAKED_HAIR]) + if (!is_layer_baked[BAKED_HAIR] || self_customizing) { const LLColor4 color = mTexHairColor ? mTexHairColor->getColor() : LLColor4(1,1,1,1); LLViewerImage* hair_img = getTEImage( TEX_HAIR ); @@ -8096,6 +8106,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) if (id == image_baked->getID()) { mBakedTextureData[i].mIsLoaded = true; + mBakedTextureData[i].mIsUsed = true; mBakedTextureData[i].mLastTextureIndex = id; for (U32 k = 0; k < mBakedTextureData[i].mMeshes.size(); k++) { diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h index 50eec80..f8b2c06 100644 --- a/linden/indra/newview/llvoavatar.h +++ b/linden/indra/newview/llvoavatar.h @@ -699,6 +699,7 @@ private: LLUUID mLastTextureIndex; LLTexLayerSet* mTexLayerSet; bool mIsLoaded; + bool mIsUsed; LLVOAvatarDefines::ETextureIndex mTextureIndex; U32 mMaskTexName; // Stores pointers to the joint meshes that this baked texture deals with diff --git a/linden/indra/newview/llvopartgroup.cpp b/linden/indra/newview/llvopartgroup.cpp index 82003da..29036f4 100644 --- a/linden/indra/newview/llvopartgroup.cpp +++ b/linden/indra/newview/llvopartgroup.cpp @@ -365,7 +365,7 @@ LLParticlePartition::LLParticlePartition() LLHUDParticlePartition::LLHUDParticlePartition() : LLParticlePartition() { - mDrawableType = LLPipeline::RENDER_TYPE_HUD; + mDrawableType = LLPipeline::RENDER_TYPE_HUD_PARTICLES; mPartitionType = LLViewerRegion::PARTITION_HUD_PARTICLE; } @@ -509,7 +509,7 @@ LLDrawable* LLVOHUDPartGroup::createDrawable(LLPipeline *pipeline) { pipeline->allocDrawable(this); mDrawable->setLit(FALSE); - mDrawable->setRenderType(LLPipeline::RENDER_TYPE_HUD); + mDrawable->setRenderType(LLPipeline::RENDER_TYPE_HUD_PARTICLES); return mDrawable; } diff --git a/linden/indra/newview/llvotree.cpp b/linden/indra/newview/llvotree.cpp index 3b76127..3fd5054 100644 --- a/linden/indra/newview/llvotree.cpp +++ b/linden/indra/newview/llvotree.cpp @@ -329,6 +329,9 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys, mBillboardRatio = sSpeciesTable[mSpecies]->mBillboardRatio; mTrunkAspect = sSpeciesTable[mSpecies]->mTrunkAspect; mBranchAspect = sSpeciesTable[mSpecies]->mBranchAspect; + + // position change not caused by us, etc. make sure to rebuild. + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL); return retval; } @@ -397,6 +400,31 @@ BOOL LLVOTree::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) { gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, FALSE); } + else + { + // we're not animating but we may *still* need to + // regenerate the mesh if we moved, since position + // and rotation are baked into the mesh. + // *TODO: I don't know what's so special about trees + // that they don't get REBUILD_POSITION automatically + // at a higher level. + const LLVector3 &this_position = getPositionAgent(); + if (this_position != mLastPosition) + { + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); + mLastPosition = this_position; + } + else + { + const LLQuaternion &this_rotation = getRotation(); + + if (this_rotation != mLastRotation) + { + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_POSITION); + mLastRotation = this_rotation; + } + } + } } mTrunkLOD = trunk_LOD; diff --git a/linden/indra/newview/llvotree.h b/linden/indra/newview/llvotree.h index 473f1c3..42a6d54 100644 --- a/linden/indra/newview/llvotree.h +++ b/linden/indra/newview/llvotree.h @@ -179,6 +179,11 @@ protected: F32 mTrunkAspect; // Ratio between width/length of trunk F32 mBranchAspect; // Ratio between width/length of branch F32 mRandomLeafRotate; // How much to randomly rotate leaves about arbitrary axis + + // cache last position+rotation so we can detect the need for a + // complete rebuild when not animating + LLVector3 mLastPosition; + LLQuaternion mLastRotation; U32 mFrameCount; diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp index 08a6118..4c40957 100644 --- a/linden/indra/newview/llworldmapview.cpp +++ b/linden/indra/newview/llworldmapview.cpp @@ -305,8 +305,8 @@ void LLWorldMapView::draw() const S32 width = getRect().getWidth(); const S32 height = getRect().getHeight(); - const S32 half_width = width / 2; - const S32 half_height = height / 2; + const F32 half_width = F32(width) / 2.0f; + const F32 half_height = F32(height) / 2.0f; LLVector3d camera_global = gAgent.getCameraPositionGlobal(); LLLocalClipRect clip(getLocalRect()); @@ -350,8 +350,8 @@ void LLWorldMapView::draw() // Find x and y position relative to camera's center. LLVector3d rel_region_pos = origin_global - camera_global; - S32 relative_x = lltrunc((rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale); - S32 relative_y = lltrunc((rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale); + F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; + F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; F32 pix_width = gMapScale*(layer->LayerExtents.getWidth() + 1); F32 pix_height = gMapScale*(layer->LayerExtents.getHeight() + 1); @@ -456,8 +456,8 @@ void LLWorldMapView::draw() // Find x and y position relative to camera's center. LLVector3d rel_region_pos = origin_global - camera_global; - S32 relative_x = lltrunc((rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale); - S32 relative_y = lltrunc((rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale); + F32 relative_x = (rel_region_pos.mdV[0] / REGION_WIDTH_METERS) * gMapScale; + F32 relative_y = (rel_region_pos.mdV[1] / REGION_WIDTH_METERS) * gMapScale; // When the view isn't panned, 0,0 = center of rectangle F32 bottom = sPanY + half_height + relative_y; diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h index 0ec4e43..1a32b30 100644 --- a/linden/indra/newview/pipeline.h +++ b/linden/indra/newview/pipeline.h @@ -323,6 +323,7 @@ public: RENDER_TYPE_VOLUME, RENDER_TYPE_PARTICLES, RENDER_TYPE_CLOUDS, + RENDER_TYPE_HUD_PARTICLES }; enum LLRenderDebugFeatureMask diff --git a/linden/indra/newview/skins/default/xui/de/floater_about.xml b/linden/indra/newview/skins/default/xui/de/floater_about.xml index b9bd98b..c393588 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about.xml @@ -27,7 +27,7 @@ Alle Rechte vorbehalten. Details siehe licenses.txt. Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) -I get by with a little help from my friends. (etwa: Ich überlebe mit ein bisschen Unterstützung von meinen Freunden.) --Richard Starkey +Um im Geschäftsleben erfolreich zu sein, sei kühn, sei schnell, sei anders. --Henry Marchant Sie befinden sich in [POSITION] diff --git a/linden/indra/newview/skins/default/xui/de/floater_about_land.xml b/linden/indra/newview/skins/default/xui/de/floater_about_land.xml index 6c33843..93e7297 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -33,7 +33,7 @@