From 31e7c77a411d94bc87f0232588b339149bb29a49 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Sun, 28 Sep 2008 17:21:23 -0500 Subject: Second Life viewer sources 1.21.3-RC --- linden/indra/newview/app_settings/settings.xml | 8 +- linden/indra/newview/featuretable.txt | 6 + linden/indra/newview/gpu_table.txt | 2 + .../installers/windows/installer_template.nsi | 256 ++-- linden/indra/newview/llappviewer.cpp | 54 +- linden/indra/newview/llappviewer.h | 3 +- linden/indra/newview/llappviewerwin32.cpp | 4 +- linden/indra/newview/llchatbar.cpp | 22 +- linden/indra/newview/llconsole.cpp | 36 +- linden/indra/newview/lldrawpoolavatar.cpp | 2 +- linden/indra/newview/lldynamictexture.cpp | 1 + linden/indra/newview/lleventpoll.cpp | 99 +- linden/indra/newview/llface.cpp | 6 +- linden/indra/newview/llfloaterabout.cpp | 2 +- linden/indra/newview/llfloaterbump.cpp | 2 +- linden/indra/newview/llfloaterjoystick.cpp | 6 +- linden/indra/newview/llfloaterland.cpp | 2 +- linden/indra/newview/llfloaterlandholdings.cpp | 2 +- linden/indra/newview/llfloaterreporter.cpp | 5 +- linden/indra/newview/llfolderview.cpp | 106 +- linden/indra/newview/llfolderview.h | 8 +- linden/indra/newview/llgesturemgr.cpp | 12 +- linden/indra/newview/llimpanel.cpp | 19 +- linden/indra/newview/llimview.cpp | 16 +- linden/indra/newview/lllogchat.cpp | 2 +- linden/indra/newview/llpaneldirbrowser.cpp | 2 - linden/indra/newview/llpaneldisplay.cpp | 6 +- linden/indra/newview/llpanelgroupgeneral.cpp | 2 +- linden/indra/newview/llpanelgrouplandmoney.cpp | 2 +- linden/indra/newview/llpanelplace.cpp | 8 +- linden/indra/newview/llselectmgr.cpp | 2 +- linden/indra/newview/llstartup.cpp | 15 +- linden/indra/newview/llstylemap.cpp | 5 +- linden/indra/newview/lltexturecache.cpp | 71 +- linden/indra/newview/lltexturectrl.cpp | 2 +- linden/indra/newview/lltexturefetch.cpp | 32 +- linden/indra/newview/lltoolbar.cpp | 2 +- linden/indra/newview/lltoolmgr.cpp | 1 + linden/indra/newview/lltoolpie.cpp | 51 +- linden/indra/newview/lltoolpie.h | 16 +- linden/indra/newview/llviewermenu.cpp | 62 +- linden/indra/newview/llviewermessage.cpp | 8 +- linden/indra/newview/llviewerwindow.cpp | 39 +- linden/indra/newview/llviewerwindow.h | 6 +- linden/indra/newview/llvoavatar.cpp | 128 +- linden/indra/newview/llvoavatar.h | 1 + linden/indra/newview/llvoiceremotectrl.cpp | 2 +- linden/indra/newview/llvovolume.cpp | 1 + linden/indra/newview/llwindebug.cpp | 2 +- .../indra/newview/skins/default/xui/de/alerts.xml | 854 +++++-------- .../skins/default/xui/de/floater_chat_history.xml | 22 +- .../newview/skins/default/xui/de/floater_im.xml | 52 +- .../default/xui/de/floater_instant_message.xml | 8 +- .../xui/de/floater_instant_message_ad_hoc.xml | 17 +- .../xui/de/floater_instant_message_group.xml | 23 +- .../default/xui/de/floater_preview_gesture.xml | 65 +- .../skins/default/xui/de/floater_report_abuse.xml | 6 +- .../xui/de/floater_skin_preview_template.xml | 9 +- .../skins/default/xui/de/panel_chat_bar.xml | 26 +- .../newview/skins/default/xui/de/panel_login.xml | 15 +- .../default/xui/de/panel_preferences_chat.xml | 69 +- .../skins/default/xui/de/panel_preferences_im.xml | 39 +- .../default/xui/de/panel_preferences_popups.xml | 22 +- .../skins/default/xui/de/panel_region_estate.xml | 2 +- .../default/xui/de/panel_speaker_controls.xml | 10 +- .../newview/skins/default/xui/en-us/alerts.xml | 27 +- .../default/xui/en-us/floater_chat_history.xml | 3 +- .../newview/skins/default/xui/en-us/floater_im.xml | 11 +- .../default/xui/en-us/floater_mem_leaking.xml | 20 +- .../xui/en-us/floater_skin_preview_template.xml | 2 +- .../skins/default/xui/en-us/panel_chat_bar.xml | 4 +- .../newview/skins/default/xui/en-us/strings.xml | 1 + .../indra/newview/skins/default/xui/es/alerts.xml | 11 - .../skins/default/xui/es/floater_report_abuse.xml | 2 +- .../indra/newview/skins/default/xui/fr/alerts.xml | 1288 ++++++++++++++++++-- .../newview/skins/default/xui/fr/floater_about.xml | 30 + .../skins/default/xui/fr/floater_about_land.xml | 182 ++- .../default/xui/fr/floater_active_speakers.xml | 11 + .../default/xui/fr/floater_animation_preview.xml | 13 + .../skins/default/xui/fr/floater_audio_volume.xml | 4 + .../skins/default/xui/fr/floater_avatar_picker.xml | 6 + .../default/xui/fr/floater_avatar_textures.xml | 6 + .../skins/default/xui/fr/floater_build_options.xml | 1 + .../skins/default/xui/fr/floater_buy_contents.xml | 9 + .../skins/default/xui/fr/floater_buy_currency.xml | 48 +- .../skins/default/xui/fr/floater_buy_land.xml | 6 + .../skins/default/xui/fr/floater_buy_object.xml | 15 + .../skins/default/xui/fr/floater_camera.xml | 12 + .../skins/default/xui/fr/floater_chat_history.xml | 37 + .../skins/default/xui/fr/floater_chatterbox.xml | 2 + .../skins/default/xui/fr/floater_critical.xml | 2 +- .../skins/default/xui/fr/floater_customize.xml | 359 +++--- .../default/xui/fr/floater_day_cycle_options.xml | 97 ++ .../default/xui/fr/floater_device_settings.xml | 3 + .../skins/default/xui/fr/floater_directory.xml | 267 ++-- .../skins/default/xui/fr/floater_env_settings.xml | 23 + .../default/xui/fr/floater_hardware_settings.xml | 40 + .../newview/skins/default/xui/fr/floater_html.xml | 6 +- .../newview/skins/default/xui/fr/floater_hud.xml | 2 + .../newview/skins/default/xui/fr/floater_im.xml | 36 + .../skins/default/xui/fr/floater_image_preview.xml | 4 + .../skins/default/xui/fr/floater_inspect.xml | 14 + .../default/xui/fr/floater_instant_message.xml | 32 + .../xui/fr/floater_instant_message_ad_hoc.xml | 43 + .../xui/fr/floater_instant_message_group.xml | 49 + .../skins/default/xui/fr/floater_inventory.xml | 3 + .../xui/fr/floater_inventory_item_properties.xml | 12 + .../skins/default/xui/fr/floater_joystick.xml | 83 ++ .../skins/default/xui/fr/floater_lagmeter.xml | 152 +++ .../skins/default/xui/fr/floater_land_holdings.xml | 3 + .../skins/default/xui/fr/floater_landmark_ctrl.xml | 10 + .../default/xui/fr/floater_live_lsleditor.xml | 7 + .../skins/default/xui/fr/floater_lsl_guide.xml | 7 + .../skins/default/xui/fr/floater_media_browser.xml | 19 + .../skins/default/xui/fr/floater_mem_leaking.xml | 18 + .../skins/default/xui/fr/floater_mute_object.xml | 12 + .../skins/default/xui/fr/floater_my_friends.xml | 7 + .../default/xui/fr/floater_new_outfit_dialog.xml | 72 +- .../skins/default/xui/fr/floater_post_process.xml | 54 + .../skins/default/xui/fr/floater_postcard.xml | 27 +- .../skins/default/xui/fr/floater_preferences.xml | 3 +- .../default/xui/fr/floater_preview_classified.xml | 2 + .../skins/default/xui/fr/floater_preview_event.xml | 2 + .../default/xui/fr/floater_preview_notecard.xml | 6 + .../fr/floater_preview_notecard_keep_discard.xml | 8 +- .../skins/default/xui/fr/floater_preview_url.xml | 2 + .../skins/default/xui/fr/floater_region_info.xml | 2 + .../skins/default/xui/fr/floater_report_abuse.xml | 172 ++- .../skins/default/xui/fr/floater_report_bug.xml | 6 + .../default/xui/fr/floater_script_ed_panel.xml | 14 + .../skins/default/xui/fr/floater_select_key.xml | 7 + .../default/xui/fr/floater_settings_debug.xml | 2 + .../default/xui/fr/floater_sim_release_message.xml | 16 + .../xui/fr/floater_skin_preview_template.xml | 30 + .../skins/default/xui/fr/floater_snapshot.xml | 93 +- .../newview/skins/default/xui/fr/floater_test.xml | 2 + .../skins/default/xui/fr/floater_texture_ctrl.xml | 7 + .../newview/skins/default/xui/fr/floater_tools.xml | 140 ++- .../skins/default/xui/fr/floater_top_objects.xml | 1 + .../newview/skins/default/xui/fr/floater_tos.xml | 4 +- .../skins/default/xui/fr/floater_url_entry.xml | 12 + .../skins/default/xui/fr/floater_voice_wizard.xml | 9 + .../newview/skins/default/xui/fr/floater_water.xml | 88 ++ .../default/xui/fr/floater_wearable_save_as.xml | 2 +- .../default/xui/fr/floater_windlight_options.xml | 190 +++ .../skins/default/xui/fr/floater_world_map.xml | 57 +- .../skins/default/xui/fr/menu_inventory.xml | 3 + .../newview/skins/default/xui/fr/menu_login.xml | 13 + .../skins/default/xui/fr/menu_pie_attachment.xml | 4 +- .../skins/default/xui/fr/menu_pie_avatar.xml | 16 +- .../newview/skins/default/xui/fr/menu_pie_land.xml | 10 +- .../skins/default/xui/fr/menu_pie_object.xml | 11 +- .../newview/skins/default/xui/fr/menu_pie_self.xml | 14 +- .../newview/skins/default/xui/fr/menu_slurl.xml | 6 + .../newview/skins/default/xui/fr/menu_viewer.xml | 165 ++- .../newview/skins/default/xui/fr/mime_types.xml | 230 ++++ .../indra/newview/skins/default/xui/fr/notify.xml | 273 ++++- .../newview/skins/default/xui/fr/panel_audio.xml | 10 + .../skins/default/xui/fr/panel_audio_device.xml | 26 + .../newview/skins/default/xui/fr/panel_avatar.xml | 26 +- .../default/xui/fr/panel_avatar_classified.xml | 18 +- .../skins/default/xui/fr/panel_chat_bar.xml | 7 +- .../skins/default/xui/fr/panel_classified.xml | 21 +- .../newview/skins/default/xui/fr/panel_event.xml | 15 + .../newview/skins/default/xui/fr/panel_friends.xml | 28 + .../skins/default/xui/fr/panel_group_general.xml | 28 +- .../skins/default/xui/fr/panel_group_invite.xml | 14 + .../default/xui/fr/panel_group_land_money.xml | 6 + .../skins/default/xui/fr/panel_group_notices.xml | 2 + .../skins/default/xui/fr/panel_group_roles.xml | 3 + .../skins/default/xui/fr/panel_group_voting.xml | 36 + .../newview/skins/default/xui/fr/panel_groups.xml | 16 + .../newview/skins/default/xui/fr/panel_login.xml | 32 +- .../skins/default/xui/fr/panel_master_volume.xml | 6 + .../skins/default/xui/fr/panel_media_controls.xml | 38 + .../default/xui/fr/panel_media_remote_expanded.xml | 28 + .../skins/default/xui/fr/panel_overlaybar.xml | 18 + .../newview/skins/default/xui/fr/panel_place.xml | 33 + .../skins/default/xui/fr/panel_place_small.xml | 33 + .../default/xui/fr/panel_preferences_audio.xml | 27 +- .../default/xui/fr/panel_preferences_chat.xml | 40 +- .../default/xui/fr/panel_preferences_general.xml | 86 +- .../default/xui/fr/panel_preferences_graphics1.xml | 166 ++- .../skins/default/xui/fr/panel_preferences_im.xml | 42 +- .../default/xui/fr/panel_preferences_input.xml | 31 +- .../default/xui/fr/panel_preferences_network.xml | 15 +- .../default/xui/fr/panel_preferences_popups.xml | 25 +- .../default/xui/fr/panel_preferences_skins.xml | 14 + .../default/xui/fr/panel_preferences_voice.xml | 37 + .../skins/default/xui/fr/panel_preferences_web.xml | 31 + .../skins/default/xui/fr/panel_region_debug.xml | 12 + .../skins/default/xui/fr/panel_region_estate.xml | 16 + .../skins/default/xui/fr/panel_region_general.xml | 10 + .../default/xui/fr/panel_speaker_controls.xml | 41 + .../skins/default/xui/fr/panel_status_bar.xml | 12 + .../newview/skins/default/xui/fr/panel_toolbar.xml | 40 +- .../skins/default/xui/fr/panel_voice_controls.xml | 8 + .../skins/default/xui/fr/panel_voice_enable.xml | 23 + .../skins/default/xui/fr/panel_voice_options.xml | 23 + .../default/xui/fr/panel_voice_remote_expanded.xml | 4 + .../newview/skins/default/xui/fr/role_actions.xml | 391 +++--- .../indra/newview/skins/default/xui/fr/strings.xml | 414 +++++++ .../skins/default/xui/fr/teleport_strings.xml | 90 ++ .../indra/newview/skins/default/xui/ja/alerts.xml | 26 +- .../newview/skins/default/xui/ja/floater_im.xml | 15 - .../skins/default/xui/ja/floater_mem_leaking.xml | 6 +- .../skins/default/xui/ja/floater_report_abuse.xml | 2 +- .../xui/ja/floater_skin_preview_template.xml | 9 +- .../skins/default/xui/ja/floater_snapshot.xml | 6 +- .../newview/skins/default/xui/ja/floater_tools.xml | 4 +- .../newview/skins/default/xui/ja/panel_login.xml | 2 +- .../indra/newview/skins/default/xui/ko/alerts.xml | 1100 +++++++---------- .../skins/default/xui/ko/floater_chat_history.xml | 22 +- .../newview/skins/default/xui/ko/floater_im.xml | 50 +- .../xui/ko/floater_instant_message_ad_hoc.xml | 18 +- .../xui/ko/floater_instant_message_group.xml | 22 +- .../default/xui/ko/floater_preview_gesture.xml | 65 +- .../skins/default/xui/ko/floater_report_abuse.xml | 2 +- .../xui/ko/floater_skin_preview_template.xml | 9 +- .../indra/newview/skins/default/xui/ko/notify.xml | 2 +- .../skins/default/xui/ko/panel_chat_bar.xml | 27 +- .../newview/skins/default/xui/ko/panel_login.xml | 14 +- .../default/xui/ko/panel_preferences_chat.xml | 64 +- .../default/xui/ko/panel_preferences_graphics1.xml | 9 +- .../skins/default/xui/ko/panel_preferences_im.xml | 36 +- .../default/xui/ko/panel_preferences_popups.xml | 23 +- .../default/xui/ko/panel_speaker_controls.xml | 8 +- .../indra/newview/skins/default/xui/pt/alerts.xml | 15 - .../newview/skins/default/xui/pt/floater_im.xml | 9 - .../skins/default/xui/pt/floater_report_abuse.xml | 2 +- .../indra/newview/skins/default/xui/zh/alerts.xml | 11 - .../skins/default/xui/zh/floater_report_abuse.xml | 2 +- linden/indra/newview/viewer_manifest.py | 1 + 233 files changed, 7674 insertions(+), 3171 deletions(-) create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_active_speakers.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_audio_volume.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_camera.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_chatterbox.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_device_settings.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_env_settings.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_hud.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_inspect.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_joystick.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_lagmeter.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_landmark_ctrl.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_media_browser.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_mute_object.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_my_friends.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_post_process.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_preview_classified.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_preview_event.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_preview_url.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_region_info.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_select_key.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_sim_release_message.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_test.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_url_entry.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_voice_wizard.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_water.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_windlight_options.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/menu_login.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/menu_slurl.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/mime_types.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_audio.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_audio_device.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_friends.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_groups.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_master_volume.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_preferences_skins.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_preferences_web.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_voice_controls.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_voice_enable.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_voice_options.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/strings.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/teleport_strings.xml (limited to 'linden/indra/newview') diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 5543847..07fa71c 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -5052,10 +5052,10 @@ Color4 Value - 1 - 0.5 - 0.0 - 1 + 0.699999988079 + 0.899999976158 + 0.699999988079 + 1 OpenDebugStatAdvanced diff --git a/linden/indra/newview/featuretable.txt b/linden/indra/newview/featuretable.txt index 0a12958..b227043 100644 --- a/linden/indra/newview/featuretable.txt +++ b/linden/indra/newview/featuretable.txt @@ -303,6 +303,9 @@ list Intel_G33 RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +list Intel_G45 +WindLightUseAtmosShaders 0 0 + list Intel_Bear_Lake RenderTerrainDetail 1 0 RenderVBOEnable 1 0 @@ -315,6 +318,9 @@ list Intel_Brookdale RenderTerrainDetail 1 0 RenderVBOEnable 1 0 +list Intel_Eaglelake +WindLightUseAtmosShaders 0 0 + list Intel_Montara RenderTerrainDetail 1 0 RenderVBOEnable 1 0 diff --git a/linden/indra/newview/gpu_table.txt b/linden/indra/newview/gpu_table.txt index 77b75e1..48af543 100644 --- a/linden/indra/newview/gpu_table.txt +++ b/linden/indra/newview/gpu_table.txt @@ -139,9 +139,11 @@ Intel 945G .*Intel.*945G 0 1 Intel 950 .*Intel.*950.* 0 1 Intel 965 .*Intel.*965.* 0 1 Intel G33 .*Intel.*G33.* 0 0 +Intel G45 .*Intel.*G45.* 0 1 Intel Bear Lake .*Intel.*Bear Lake.* 0 0 Intel Broadwater .*Intel.*Broadwater.* 0 0 Intel Brookdale .*Intel.*Brookdale.* 0 0 +Intel Eaglelake .*Intel.*Eaglelake.* 0 1 Intel Montara .*Intel.*Montara.* 0 0 Intel Springdale .*Intel.*Springdale.* 0 0 Matrox .*Matrox.* 0 0 diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi index ec4fd85..c795507 100644 --- a/linden/indra/newview/installers/windows/installer_template.nsi +++ b/linden/indra/newview/installers/windows/installer_template.nsi @@ -69,6 +69,7 @@ DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate) DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) !endif + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -78,131 +79,9 @@ Var INSTFLAGS Var LANGFLAGS Var INSTSHORTCUT -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Sections -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Section "" ; (default section) - -SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well) - -; Start with some default values. -StrCpy $INSTFLAGS "${INSTFLAGS}" -StrCpy $INSTPROG "${INSTNAME}" -StrCpy $INSTEXE "${INSTEXE}" -StrCpy $INSTSHORTCUT "${SHORTCUT}" - -IfSilent +2 -Goto NOT_SILENT - Call CheckStartupParams ; Figure out where, what and how to install. -NOT_SILENT: -Call CheckWindowsVersion ; warn if on Windows 98/ME -Call CheckIfAdministrator ; Make sure the user can install/uninstall -Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version -Call CloseSecondLife ; Make sure we're not running -Call RemoveNSIS ; Check for old NSIS install to remove - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers. -;Call RemoveCacheFiles ; Installing over removes potentially corrupted - ; VFS and cache files. - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Need to clean out shader files from previous installs to fix DEV-5663 -Call RemoveOldShaders - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Need to clean out old XUI files that predate skinning -Call RemoveOldXUI - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Clear out old releasenotes.txt files. These are now on the public wiki. -Call RemoveOldReleaseNotes - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Files -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py -%%INSTALL_FILES%% - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; If this is a silent update, we don't need to re-create these shortcuts or registry entries. -IfSilent POST_INSTALL - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Shortcuts in start menu -CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" -SetOutPath "$INSTDIR" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$INSTEXE" "$INSTFLAGS" - -!ifdef MUSEUM -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \ - - "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \ - - "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" -!endif - -WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \ - "InternetShortcut" "URL" \ - "http://www.secondlife.com/registration/" -WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ - "InternetShortcut" "URL" \ - "http://www.secondlife.com/account/" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \ - "$INSTDIR\lsl_guide.html" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ - '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Other shortcuts -SetOutPath "$INSTDIR" -CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" -CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" -CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ - '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' - -!ifdef MUSEUM -CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" - -CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" - -CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" - -CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" - -!endif - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Write registry -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"' - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Write URL registry info -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' - -Goto WRITE_UNINST - -POST_INSTALL: -; Run a post-executable script if necessary. -Call PostInstallExe - -WRITE_UNINST: -; write out uninstaller -WriteUninstaller "$INSTDIR\uninst.exe" - -; end of default section -SectionEnd +;;; Function definitions should go before file includes, because the NSIS package +;;; is a single stream of bytecodes + file data. So if your function definitions are at +;;; the end of the file it has to decompress the whole thing before it can call a function. JC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; PostInstallExe @@ -981,4 +860,131 @@ Function un.onInit FunctionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Sections +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +Section "" ; (default section) + +SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well) + +; Start with some default values. +StrCpy $INSTFLAGS "${INSTFLAGS}" +StrCpy $INSTPROG "${INSTNAME}" +StrCpy $INSTEXE "${INSTEXE}" +StrCpy $INSTSHORTCUT "${SHORTCUT}" + +IfSilent +2 +Goto NOT_SILENT + Call CheckStartupParams ; Figure out where, what and how to install. +NOT_SILENT: +Call CheckWindowsVersion ; warn if on Windows 98/ME +Call CheckIfAdministrator ; Make sure the user can install/uninstall +Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version +Call CloseSecondLife ; Make sure we're not running +Call RemoveNSIS ; Check for old NSIS install to remove + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers. +;Call RemoveCacheFiles ; Installing over removes potentially corrupted + ; VFS and cache files. + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Need to clean out shader files from previous installs to fix DEV-5663 +Call RemoveOldShaders + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Need to clean out old XUI files that predate skinning +Call RemoveOldXUI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Clear out old releasenotes.txt files. These are now on the public wiki. +Call RemoveOldReleaseNotes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py +%%INSTALL_FILES%% + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; If this is a silent update, we don't need to re-create these shortcuts or registry entries. +IfSilent POST_INSTALL + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Shortcuts in start menu +CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" +SetOutPath "$INSTDIR" +CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ + "$INSTDIR\$INSTEXE" "$INSTFLAGS" + +!ifdef MUSEUM +CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \ + + "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" +CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \ + + "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" +!endif + +WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \ + "InternetShortcut" "URL" \ + "http://www.secondlife.com/registration/" +WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ + "InternetShortcut" "URL" \ + "http://www.secondlife.com/account/" +CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \ + "$INSTDIR\lsl_guide.html" +CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ + '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Other shortcuts +SetOutPath "$INSTDIR" +CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" +CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS" +CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ + '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"' + +!ifdef MUSEUM +CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" + +CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" + +CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple" + +CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish" + +!endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Write registry +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"' + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Write URL registry info +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' +WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' + +Goto WRITE_UNINST + +POST_INSTALL: +; Run a post-executable script if necessary. +Call PostInstallExe + +WRITE_UNINST: +; write out uninstaller +WriteUninstaller "$INSTDIR\uninst.exe" + +; end of default section +SectionEnd + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 9851e47..6c740dd 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -682,12 +682,11 @@ bool LLAppViewer::init() LLUIImageList::getInstance(), ui_audio_callback, &LLUI::sGLScaleFactor); - LLWeb::initClass(); // do this after LLUI LLTextEditor::setURLCallbacks(&LLWeb::loadURL, &LLURLDispatcher::dispatchFromTextEditor, &LLURLDispatcher::dispatchFromTextEditor); - + LLUICtrlFactory::getInstance()->setupPaths(); // update paths with correct language set ///////////////////////////////////////////////// @@ -767,6 +766,8 @@ bool LLAppViewer::init() CreateLCDDebugWindows(); #endif + LLFolderViewItem::initClass(); // SJB: Needs to happen after initWindow(), not sure why but related to fonts + gGLManager.getGLInfo(gDebugInfo); gGLManager.printGLInfoString(); @@ -941,6 +942,7 @@ bool LLAppViewer::mainLoop() LLFastTimer t3(LLFastTimer::FTM_IDLE); idle(); + if (gAres != NULL && gAres->isInitialized()) { pingMainloopTimeout("Main:ServicePump"); LLFastTimer t4(LLFastTimer::FTM_PUMP); @@ -1077,14 +1079,17 @@ bool LLAppViewer::mainLoop() } catch(std::bad_alloc) - { - llwarns << "Bad memory allocation in LLAppViewer::mainLoop()!" << llendl ; - + { //stop memory leaking simulation if(LLFloaterMemLeak::getInstance()) { LLFloaterMemLeak::getInstance()->stop() ; - } + llwarns << "Bad memory allocation in LLAppViewer::mainLoop()!" << llendl ; + } + else + { + llerrs << "Bad memory allocation in LLAppViewer::mainLoop()!" << llendl ; + } } } @@ -1279,6 +1284,7 @@ bool LLAppViewer::cleanup() //LLVolumeMgr::cleanupClass(); LLPrimitive::cleanupVolumeManager(); LLWorldMapView::cleanupClass(); + LLFolderViewItem::cleanupClass(); LLUI::cleanupClass(); // @@ -1480,7 +1486,7 @@ bool LLAppViewer::initLogging() return true; } -void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index, bool set_defaults) +bool LLAppViewer::loadSettingsFromDirectory(ELLPath path_index, bool set_defaults) { for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr) { @@ -1515,13 +1521,24 @@ void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index, bool set_default } if(!gSettings[settings_name]->loadFromFile(full_settings_path, set_defaults)) { - llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl; + // If attempting to load the default global settings (app_settings/settings.xml) + // fails, the app should error and quit. + if(path_index == LL_PATH_APP_SETTINGS && settings_name == sGlobalSettingsName) + { + llwarns << "Error: Cannot load default settings from: " << full_settings_path << llendl; + return false; + } + else + { + llwarns << "Cannot load " << full_settings_path << " - No settings found." << llendl; + } } else { llinfos << "Loaded settings file " << full_settings_path << llendl; } } + return true; } std::string LLAppViewer::getSettingsFileName(const std::string& file) @@ -1563,7 +1580,19 @@ bool LLAppViewer::initConfiguration() // - load defaults bool set_defaults = true; - loadSettingsFromDirectory(LL_PATH_APP_SETTINGS, set_defaults); + if(!loadSettingsFromDirectory(LL_PATH_APP_SETTINGS, set_defaults)) + { + std::ostringstream msg; + msg << "Second Life could not load its default settings file. \n" + << "The installation may be corrupted. \n"; + + OSMessageBox( + msg.str(), + LLStringUtil::null, + OSMB_OK); + + return false; + } // - set procedural settings gSavedSettings.setString("ClientSettingsFile", @@ -1710,7 +1739,7 @@ bool LLAppViewer::initConfiguration() OSMessageBox( msg.str().c_str(), - NULL, + LLStringUtil::null, OSMB_OK); return false; @@ -2331,6 +2360,11 @@ void LLAppViewer::handleViewerCrash() { gDebugInfo["CurrentSimHost"] = gAgent.getRegionHost().getHostName(); gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName(); + + const LLVector3& loc = gAgent.getPositionAgent(); + gDebugInfo["CurrentLocationX"] = loc.mV[0]; + gDebugInfo["CurrentLocationY"] = loc.mV[1]; + gDebugInfo["CurrentLocationZ"] = loc.mV[2]; } if(LLAppViewer::instance()->mMainloopTimeout) diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h index 68bdb24..801deb1 100644 --- a/linden/indra/newview/llappviewer.h +++ b/linden/indra/newview/llappviewer.h @@ -122,7 +122,8 @@ public: static const std::string sPerAccountSettingsName; static const std::string sCrashSettingsName; - void loadSettingsFromDirectory(ELLPath path_index, bool set_defaults = false); + // returns false if loading a *required* settings file fails. + bool loadSettingsFromDirectory(ELLPath path_index, bool set_defaults = false); std::string getSettingsFileName(const std::string& file); diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp index 07f3ece..9f37534 100644 --- a/linden/indra/newview/llappviewerwin32.cpp +++ b/linden/indra/newview/llappviewerwin32.cpp @@ -32,7 +32,9 @@ #include "llviewerprecompiledheaders.h" #if defined(_DEBUG) -# define WINDOWS_CRT_MEM_CHECKS 1 +# if _MSC_VER >= 1400 // Visual C++ 2005 or later +# define WINDOWS_CRT_MEM_CHECKS 1 +# endif #endif #include "llappviewerwin32.h" diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp index 3a6c8cf..31fa653 100644 --- a/linden/indra/newview/llchatbar.cpp +++ b/linden/indra/newview/llchatbar.cpp @@ -216,15 +216,14 @@ void LLChatBar::refresh() void LLChatBar::refreshGestures() { - LLCtrlListInterface* gestures = mGestureCombo ? mGestureCombo->getListInterface() : NULL; - if (mGestureCombo && gestures) + if (mGestureCombo) { //store current selection so we can maintain it std::string cur_gesture = mGestureCombo->getValue().asString(); - gestures->selectFirstItem(); + mGestureCombo->selectFirstItem(); std::string label = mGestureCombo->getValue().asString();; // clear - gestures->clearRows(); + mGestureCombo->clearRows(); // collect list of unique gestures std::map unique; @@ -245,20 +244,21 @@ void LLChatBar::refreshGestures() std::map ::iterator it2; for (it2 = unique.begin(); it2 != unique.end(); ++it2) { - gestures->addSimpleElement((*it2).first); + mGestureCombo->addSimpleElement((*it2).first); } - gestures->sortByColumn(LLStringUtil::null, TRUE); - // Insert label after sorting - gestures->addSimpleElement(label, ADD_TOP); + mGestureCombo->sortByName(); + // Insert label after sorting, at top, with separator below it + mGestureCombo->addSeparator(ADD_TOP); + mGestureCombo->addSimpleElement(getString("gesture_label"), ADD_TOP); if (!cur_gesture.empty()) - { - gestures->selectByValue(LLSD(cur_gesture)); + { + mGestureCombo->selectByValue(LLSD(cur_gesture)); } else { - gestures->selectFirstItem(); + mGestureCombo->selectFirstItem(); } } } diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp index b0f1988..58cda1c 100644 --- a/linden/indra/newview/llconsole.cpp +++ b/linden/indra/newview/llconsole.cpp @@ -55,8 +55,13 @@ extern void AddNewDebugConsoleToLCD(const LLWString &newLine); LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow. const F32 FADE_DURATION = 2.f; -const S32 MIN_CONSOLE_WIDTH = 200; - +const S32 MIN_CONSOLE_WIDTH = 50; + +// Why don't these match? +const S32 CONSOLE_GUTTER_LEFT = 14; +const S32 CONSOLE_GUTTER_RIGHT = 15; + + LLConsole::LLConsole(const std::string& name, const U32 max_lines, const LLRect &rect, S32 font_size_index, F32 persist_time ) : @@ -78,7 +83,7 @@ void LLConsole::setLinePersistTime(F32 seconds) void LLConsole::reshape(S32 width, S32 height, BOOL called_from_parent) { - S32 new_width = llmax(50, llmin(getRect().getWidth(), gViewerWindow->getWindowWidth())); + S32 new_width = llmax(MIN_CONSOLE_WIDTH, llmin(getRect().getWidth(), gViewerWindow->getWindowWidth())); S32 new_height = llmax(llfloor(mFont->getLineHeight()) + 15, llmin(getRect().getHeight(), gViewerWindow->getWindowHeight())); if ( mConsoleWidth == new_width @@ -185,15 +190,19 @@ void LLConsole::draw() for(paragraph_it = mParagraphs.rbegin(); paragraph_it != mParagraphs.rend(); paragraph_it++) { S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + message_spacing); - S32 target_width = llfloor( (*paragraph_it).mMaxWidth +15); + S32 target_width = llfloor( (*paragraph_it).mMaxWidth + CONSOLE_GUTTER_RIGHT); bkg_height+= target_height; - if (target_width > bkg_width) bkg_width=target_width; + if (target_width > bkg_width) + { + bkg_width=target_width; + } + // Why is this not using llfloor as above? y_pos += ((*paragraph_it).mLines.size()) * line_height; - y_pos += message_spacing; //Extra spacing between messages. + y_pos += message_spacing; //Extra spacing between messages. } - imagep->drawSolid(-14, (S32)(y_pos + line_height - bkg_height - message_spacing), bkg_width, bkg_height, color); + imagep->drawSolid(-CONSOLE_GUTTER_LEFT, (S32)(y_pos + line_height - bkg_height - message_spacing), bkg_width, bkg_height, color); y_pos = 0.f; //End screen-eating black void @@ -201,7 +210,7 @@ void LLConsole::draw() { //080813 Spatters: Dainty per-message block boxes // S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + 8); - S32 target_width = llfloor( (*paragraph_it).mMaxWidth +15); + S32 target_width = llfloor( (*paragraph_it).mMaxWidth + CONSOLE_GUTTER_RIGHT); y_pos += ((*paragraph_it).mLines.size()) * line_height; //080813 Spatters: Dainty per-message block boxes @@ -325,17 +334,17 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, LLFontGL* font, bool fo // Wrap lines that are longer than the view is wide. while( paragraph_offset < (S32)mParagraphText.length() ) { - S32 skip_chars; // skip '\n' + S32 skip_newline_chars; // skip '\n' // Figure out if a word-wrapped line fits here. LLWString::size_type line_end = mParagraphText.find_first_of(llwchar('\n'), paragraph_offset); if (line_end != LLWString::npos) { - skip_chars = 1; // skip '\n' + skip_newline_chars = 1; // skip '\n' } else { line_end = mParagraphText.size(); - skip_chars = 0; + skip_newline_chars = 0; } U32 drawable = font->maxDrawableChars(mParagraphText.c_str()+paragraph_offset, screen_width, line_end - paragraph_offset, TRUE); @@ -385,9 +394,10 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, LLFontGL* font, bool fo } else { - break; // Nothing more to print + if( !skip_newline_chars ) + break; // Nothing more to print } - paragraph_offset += (drawable + skip_chars); + paragraph_offset += (drawable + skip_newline_chars); } } diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp index 946c439..97ff072 100644 --- a/linden/indra/newview/lldrawpoolavatar.cpp +++ b/linden/indra/newview/lldrawpoolavatar.cpp @@ -664,7 +664,7 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const LLVertexBufferAvatar::LLVertexBufferAvatar() : LLVertexBuffer(sDataMask, LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 ? - GL_STATIC_DRAW_ARB : + GL_DYNAMIC_DRAW_ARB : GL_STREAM_DRAW_ARB) { diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp index a724d88..ad0cdec 100644 --- a/linden/indra/newview/lldynamictexture.cpp +++ b/linden/indra/newview/lldynamictexture.cpp @@ -141,6 +141,7 @@ void LLDynamicTexture::preRender(BOOL clear_depth) if (window_pos.mY < 0) { mOrigin.mY += window_pos.mY; + mOrigin.mY = llmax(mOrigin.mY, 0) ; } LLImageGL::unbindTexture(0, GL_TEXTURE_2D); diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp index f00c05b..083c46c 100644 --- a/linden/indra/newview/lleventpoll.cpp +++ b/linden/indra/newview/lleventpoll.cpp @@ -31,16 +31,26 @@ #include "llviewerprecompiledheaders.h" +#include "llappviewer.h" #include "llagent.h" #include "lleventpoll.h" #include "llhttpclient.h" +#include "llhttpstatuscodes.h" #include "llsdserialize.h" +#include "lltimer.h" #include "llviewerregion.h" #include "message.h" namespace { + // We will wait RETRY_SECONDS + (errorCount * RETRY_SECONDS_INC) before retrying after an error. + // This means we attempt to recover relatively quickly but back off giving more time to recover + // until we finally give up after MAX_EVENT_POLL_HTTP_ERRORS attempts. + const F32 EVENT_POLL_ERROR_RETRY_SECONDS = 15.f; // ~ half of a normal timeout. + const F32 EVENT_POLL_ERROR_RETRY_SECONDS_INC = 5.f; // ~ half of a normal timeout. + const S32 MAX_EVENT_POLL_HTTP_ERRORS = 10; // ~5 minutes, by the above rules. + class LLEventPollResponder : public LLHTTPClient::Responder { public: @@ -48,15 +58,21 @@ namespace static LLHTTPClient::ResponderPtr start(const std::string& pollURL, const LLHost& sender); void stop(); + void makeRequest(); + private: LLEventPollResponder(const std::string& pollURL, const LLHost& sender); ~LLEventPollResponder(); - void makeRequest(); + void handleMessage(const LLSD& content); virtual void error(U32 status, const std::string& reason); virtual void result(const LLSD& content); + virtual void completedRaw(U32 status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer); private: bool mDone; @@ -69,6 +85,27 @@ namespace // these are only here for debugging so we can see which poller is which static int sCount; int mCount; + S32 mErrorCount; + }; + + class LLEventPollEventTimer : public LLEventTimer + { + typedef boost::intrusive_ptr EventPollResponderPtr; + + public: + LLEventPollEventTimer(F32 period, EventPollResponderPtr responder) + : LLEventTimer(period), mResponder(responder) + { } + + virtual BOOL tick() + { + mResponder->makeRequest(); + return TRUE; // Causes this instance to be deleted. + } + + private: + + EventPollResponderPtr mResponder; }; //static @@ -94,7 +131,8 @@ namespace LLEventPollResponder::LLEventPollResponder(const std::string& pollURL, const LLHost& sender) : mDone(false), mPollURL(pollURL), - mCount(++sCount) + mCount(++sCount), + mErrorCount(0) { //extract host and port of simulator to set as sender LLViewerRegion *regionp = gAgent.getRegion(); @@ -114,6 +152,24 @@ namespace << mPollURL << llendl; } + // virtual + void LLEventPollResponder::completedRaw(U32 status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) + { + if (status == HTTP_BAD_GATEWAY) + { + // These errors are not parsable as LLSD, + // which LLHTTPClient::Responder::completedRaw will try to do. + completed(status, reason, LLSD()); + } + else + { + LLHTTPClient::Responder::completedRaw(status,reason,channels,buffer); + } + } + void LLEventPollResponder::makeRequest() { LLSD request; @@ -139,16 +195,37 @@ namespace { if (mDone) return; - if(status != 499) + // A HTTP_BAD_GATEWAY (502) error is our standard timeout response + // we get this when there are no events. + if ( status == HTTP_BAD_GATEWAY ) + { + mErrorCount = 0; + makeRequest(); + } + else if (mErrorCount < MAX_EVENT_POLL_HTTP_ERRORS) + { + ++mErrorCount; + + // The 'tick' will return TRUE causing the timer to delete this. + new LLEventPollEventTimer(EVENT_POLL_ERROR_RETRY_SECONDS + + mErrorCount * EVENT_POLL_ERROR_RETRY_SECONDS_INC + , this); + + llwarns << "Unexpected HTTP error. status: " << status << ", reason: " << reason << llendl; + } + else { llwarns << "LLEventPollResponder::error: <" << mCount << "> got " << status << ": " << reason << (mDone ? " -- done" : "") << llendl; stop(); - return; - } - makeRequest(); + // At this point we have given up and the viewer will not receive HTTP messages from the simulator. + // IMs, teleports, about land, selecing land, region crossing and more will all fail. + // They are essentially disconnected from the region even though some things may still work. + // Since things won't get better until they relog we force a disconnect now. + LLAppViewer::instance()->forceDisconnect("You have been disconnected from the region you were in."); + } } //virtual @@ -159,10 +236,13 @@ namespace if (mDone) return; + mErrorCount = 0; + if (!content.get("events") || !content.get("id")) { llwarns << "received event poll with no events or id key" << llendl; + makeRequest(); return; } @@ -192,10 +272,13 @@ namespace } } -LLEventPoll::LLEventPoll(const std::string& pollURL, const LLHost& sender) - : mImpl(LLEventPollResponder::start(pollURL, sender)) +LLEventPoll::LLEventPoll(const std::string& poll_url, const LLHost& sender) + : mImpl(LLEventPollResponder::start(poll_url, sender)) { } LLEventPoll::~LLEventPoll() { + LLHTTPClient::Responder* responderp = mImpl.get(); + LLEventPollResponder* event_poll_responder = dynamic_cast(responderp); + if (event_poll_responder) event_poll_responder->stop(); } diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp index 9a74446..5b43fcd 100644 --- a/linden/indra/newview/llface.cpp +++ b/linden/indra/newview/llface.cpp @@ -419,8 +419,6 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color) if (mGeomCount > 0 && mIndicesCount > 0) { - gGL.color4fv(color.mV); - LLViewerImage::bindTexture(imagep); gGL.pushMatrix(); @@ -433,12 +431,16 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color) glMultMatrixf((GLfloat*)mDrawablep->getRegion()->mRenderMatrix.mMatrix); } + setFaceColor(color); + renderSetColor(); + mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD); #if !LL_RELEASE_FOR_DOWNLOAD LLGLState::checkClientArrays("", LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD); #endif mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex); + unsetFaceColor(); gGL.popMatrix(); } } diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp index a90edb4..76586ed 100644 --- a/linden/indra/newview/llfloaterabout.cpp +++ b/linden/indra/newview/llfloaterabout.cpp @@ -131,7 +131,7 @@ LLFloaterAbout::LLFloaterAbout() server_link_style->setColor(gSavedSettings.getColor4("HTMLLinkColor")); const LLVector3d &pos = gAgent.getPositionGlobal(); - LLUIString pos_text = getUIString("you_are_at"); + LLUIString pos_text = getString("you_are_at"); pos_text.setArg("[POSITION]", llformat("%.1f, %.1f, %.1f ", pos.mdV[VX], pos.mdV[VY], pos.mdV[VZ])); support.append(pos_text); diff --git a/linden/indra/newview/llfloaterbump.cpp b/linden/indra/newview/llfloaterbump.cpp index 616f746..58b4ede 100644 --- a/linden/indra/newview/llfloaterbump.cpp +++ b/linden/indra/newview/llfloaterbump.cpp @@ -149,7 +149,7 @@ void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd) } // All above action strings are in XML file - LLUIString text = sInstance->getUIString(action); + LLUIString text = sInstance->getString(action); text.setArg("[TIME]", time); text.setArg("[FIRST]", mcd->mFirstName); text.setArg("[LAST]", mcd->mLastName); diff --git a/linden/indra/newview/llfloaterjoystick.cpp b/linden/indra/newview/llfloaterjoystick.cpp index e646eb5..172da1d 100644 --- a/linden/indra/newview/llfloaterjoystick.cpp +++ b/linden/indra/newview/llfloaterjoystick.cpp @@ -58,7 +58,7 @@ void LLFloaterJoystick::draw() childSetEnabled("enable_joystick", joystick_inited); childSetEnabled("joystick_type", joystick_inited); std::string desc = LLViewerJoystick::getInstance()->getDescription(); - if (desc.empty()) desc = getUIString("NoDevice"); + if (desc.empty()) desc = getString("NoDevice"); childSetText("joystick_type", desc); LLViewerJoystick* joystick(LLViewerJoystick::getInstance()); @@ -83,8 +83,8 @@ void LLFloaterJoystick::draw() BOOL LLFloaterJoystick::postBuild() { F32 range = gSavedSettings.getBOOL("Cursor3D") ? 1024.f : 2.f; - LLUIString axis = getUIString("Axis"); - LLUIString joystick = getUIString("JoystickMonitor"); + LLUIString axis = getString("Axis"); + LLUIString joystick = getString("JoystickMonitor"); // use this child to get relative positioning info; we'll place the // joystick monitor on its right, vertically aligned to it. diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp index c5beb5c..891cde7 100644 --- a/linden/indra/newview/llfloaterland.cpp +++ b/linden/indra/newview/llfloaterland.cpp @@ -2399,7 +2399,7 @@ void LLPanelLandAccess::refresh_ui() } if (override) { - childSetToolTip("Only Allow", getUIString("estate_override")); + childSetToolTip("Only Allow", getString("estate_override")); } else { diff --git a/linden/indra/newview/llfloaterlandholdings.cpp b/linden/indra/newview/llfloaterlandholdings.cpp index 6411a97..3694671 100644 --- a/linden/indra/newview/llfloaterlandholdings.cpp +++ b/linden/indra/newview/llfloaterlandholdings.cpp @@ -116,7 +116,7 @@ BOOL LLFloaterLandHoldings::postBuild() element["columns"][0]["value"] = gAgent.mGroups.get(i).mName; element["columns"][0]["font"] = "SANSSERIF"; - LLUIString areastr = getUIString("area_string"); + LLUIString areastr = getString("area_string"); areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.get(i).mContribution)); element["columns"][1]["column"] = "area"; element["columns"][1]["value"] = areastr; diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp index 3a9829d..78f5623 100644 --- a/linden/indra/newview/llfloaterreporter.cpp +++ b/linden/indra/newview/llfloaterreporter.cpp @@ -937,11 +937,12 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data, if(result < 0) { LLStringUtil::format_map_t args; - args["[REASON]"] = std::string(LLAssetStorage::getErrorString(result)); + std::string reason = std::string(LLAssetStorage::getErrorString(result)); + args["[REASON]"] = reason; gViewerWindow->alertXml("ErrorUploadingReportScreenshot", args); std::string err_msg("There was a problem uploading a report screenshot"); - err_msg += " due to the following reason: " + args["[REASON]"]; + err_msg += " due to the following reason: " + reason; llwarns << err_msg << llendl; return; } diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index 4b487ce..8cefd5b 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp @@ -116,8 +116,34 @@ LLColor4 LLFolderViewItem::sFilterBGColor; LLColor4 LLFolderViewItem::sFilterTextColor; LLColor4 LLFolderViewItem::sSuffixColor; LLColor4 LLFolderViewItem::sSearchStatusColor; +LLUIImagePtr LLFolderViewItem::sArrowImage; +LLUIImagePtr LLFolderViewItem::sBoxImage; + +//static +void LLFolderViewItem::initClass() +{ + sFont = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ); + sSmallFont = LLResMgr::getInstance()->getRes( LLFONT_SMALL ); + sFgColor = gColors.getColor( "MenuItemEnabledColor" ); + sHighlightBgColor = gColors.getColor( "MenuItemHighlightBgColor" ); + sHighlightFgColor = gColors.getColor( "MenuItemHighlightFgColor" ); + sFilterBGColor = gColors.getColor( "FilterBackgroundColor" ); + sFilterTextColor = gColors.getColor( "FilterTextColor" ); + sSuffixColor = gColors.getColor( "InventoryItemSuffixColor" ); + sSearchStatusColor = gColors.getColor( "InventorySearchStatusColor" ); + sArrowImage = LLUI::getUIImage("folder_arrow.tga"); + sBoxImage = LLUI::getUIImage("rounded_square.tga"); +} + +//static +void LLFolderViewItem::cleanupClass() +{ + sArrowImage = NULL; + sBoxImage = NULL; +} // Default constructor +// NOTE: Optimize this, we call it a *lot* when opening a large inventory LLFolderViewItem::LLFolderViewItem( const std::string& name, LLUIImagePtr icon, S32 creation_date, LLFolderView* root, @@ -132,6 +158,7 @@ LLFolderViewItem::LLFolderViewItem( const std::string& name, LLUIImagePtr icon, mIsCurSelection( FALSE ), mSelectPending(FALSE), mLabelStyle( LLFontGL::NORMAL ), + mIcon(icon), mHasVisibleChildren(FALSE), mIndentation(0), mNumDescendantsSelected(0), @@ -143,31 +170,7 @@ LLFolderViewItem::LLFolderViewItem( const std::string& name, LLUIImagePtr icon, mDragAndDropTarget(FALSE), mIsLoading(FALSE) { - setIcon(icon); - if( !LLFolderViewItem::sFont ) - { - LLFolderViewItem::sFont = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL ); - } - - if (!LLFolderViewItem::sSmallFont) - { - LLFolderViewItem::sSmallFont = LLResMgr::getInstance()->getRes( LLFONT_SMALL ); - } - - // HACK: Can't be set above because gSavedSettings might not be constructed. - LLFolderViewItem::sFgColor = gColors.getColor( "MenuItemEnabledColor" ); - LLFolderViewItem::sHighlightBgColor = gColors.getColor( "MenuItemHighlightBgColor" ); - LLFolderViewItem::sHighlightFgColor = gColors.getColor( "MenuItemHighlightFgColor" ); - LLFolderViewItem::sFilterBGColor = gColors.getColor( "FilterBackgroundColor" ); - LLFolderViewItem::sFilterTextColor = gColors.getColor( "FilterTextColor" ); - LLFolderViewItem::sSuffixColor = gColors.getColor( "InventoryItemSuffixColor" ); - LLFolderViewItem::sSearchStatusColor = gColors.getColor( "InventorySearchStatusColor" ); - - - mArrowImage = LLUI::getUIImage("folder_arrow.tga"); - mBoxImage = LLUI::getUIImage("rounded_square.tga"); - - refresh(); + refresh(); // possible opt: only call refreshFromListener() setTabStop(FALSE); } @@ -176,8 +179,6 @@ LLFolderViewItem::~LLFolderViewItem( void ) { delete mListener; mListener = NULL; - mArrowImage = NULL; - mBoxImage = NULL; } LLFolderView* LLFolderViewItem::getRoot() @@ -276,7 +277,7 @@ void LLFolderViewItem::setIcon(LLUIImagePtr icon) } // refresh information from the listener -void LLFolderViewItem::refresh() +void LLFolderViewItem::refreshFromListener() { if(mListener) { @@ -290,30 +291,35 @@ void LLFolderViewItem::refresh() } mLabelStyle = mListener->getLabelStyle(); mLabelSuffix = mListener->getLabelSuffix(); + } +} - std::string searchable_label(mLabel); - searchable_label.append(mLabelSuffix); - LLStringUtil::toUpper(searchable_label); +void LLFolderViewItem::refresh() +{ + refreshFromListener(); + + std::string searchable_label(mLabel); + searchable_label.append(mLabelSuffix); + LLStringUtil::toUpper(searchable_label); - if (mSearchableLabel.compare(searchable_label)) + if (mSearchableLabel.compare(searchable_label)) + { + mSearchableLabel.assign(searchable_label); + dirtyFilter(); + // some part of label has changed, so overall width has potentially changed + if (mParentFolder) { - mSearchableLabel.assign(searchable_label); - dirtyFilter(); - // some part of label has changed, so overall width has potentially changed - if (mParentFolder) - { - mParentFolder->requestArrange(); - } + mParentFolder->requestArrange(); } + } - S32 label_width = sFont->getWidth(mLabel); - if( mLabelSuffix.size() ) - { - label_width += sFont->getWidth( mLabelSuffix ); - } + S32 label_width = sFont->getWidth(mLabel); + if( mLabelSuffix.size() ) + { + label_width += sFont->getWidth( mLabelSuffix ); + } - mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + label_width; - } + mLabelWidth = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + label_width; } void LLFolderViewItem::applyListenerFunctorRecursively(LLFolderViewListenerFunctor& functor) @@ -798,10 +804,10 @@ void LLFolderViewItem::draw() } if(/*mControlLabel[0] != '\0' && */possibly_has_children) { - if (mArrowImage) + if (sArrowImage) { gl_draw_scaled_rotated_image(mIndentation, getRect().getHeight() - ARROW_SIZE - TEXT_PAD, - ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, mArrowImage->getImage(), sFgColor); + ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, sArrowImage->getImage(), sFgColor); } } @@ -937,7 +943,7 @@ void LLFolderViewItem::draw() S32_MAX, S32_MAX, &right_x, FALSE ); } - if (mBoxImage.notNull() && mStringMatchOffset != std::string::npos) + if (sBoxImage.notNull() && mStringMatchOffset != std::string::npos) { // don't draw backgrounds for zero-length strings S32 filter_string_length = mRoot->getFilterSubString().size(); @@ -950,7 +956,7 @@ void LLFolderViewItem::draw() S32 top = getRect().getHeight(); LLRect box_rect(left, top, right, bottom); - mBoxImage->draw(box_rect, sFilterBGColor); + sBoxImage->draw(box_rect, sFilterBGColor); F32 match_string_left = text_left + sFont->getWidthF32(combined_string, 0, mStringMatchOffset); F32 y = (F32)getRect().getHeight() - sFont->getLineHeight() - (F32)TEXT_PAD; sFont->renderUTF8( combined_string, mStringMatchOffset, match_string_left, y, diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h index 6369120..7978386 100644 --- a/linden/indra/newview/llfolderview.h +++ b/linden/indra/newview/llfolderview.h @@ -327,6 +327,8 @@ protected: static LLColor4 sFilterTextColor; static LLColor4 sSuffixColor; static LLColor4 sSearchStatusColor; + static LLUIImagePtr sArrowImage; + static LLUIImagePtr sBoxImage; std::string mLabel; std::string mSearchableLabel; @@ -351,8 +353,6 @@ protected: F32 mControlLabelRotation; LLFolderView* mRoot; BOOL mDragAndDropTarget; - LLUIImagePtr mArrowImage; - LLUIImagePtr mBoxImage; BOOL mIsLoading; LLTimer mTimeSinceRequestStart; @@ -375,6 +375,9 @@ protected: virtual BOOL addFolder(LLFolderViewFolder*) { return FALSE; } public: + static void initClass(); + static void cleanupClass(); + // This function is called when the folder view is dirty. It's // implemented here but called by derived classes when folding the // views. @@ -500,6 +503,7 @@ public: void setIcon(LLUIImagePtr icon); // refresh information from the object being viewed. + void refreshFromListener(); virtual void refresh(); virtual void applyListenerFunctorRecursively(LLFolderViewListenerFunctor& functor); diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp index 86b2242..06c8a66 100644 --- a/linden/indra/newview/llgesturemgr.cpp +++ b/linden/indra/newview/llgesturemgr.cpp @@ -507,9 +507,6 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s // Only pay attention to the first gesture in the string. if( !found_gestures ) { - std::string cur_token_lower = cur_token; - LLStringUtil::toLower(cur_token_lower); - // collect gestures that match std::vector matching; item_map_t::iterator it; @@ -520,7 +517,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s // Gesture asset data might not have arrived yet if (!gesture) continue; - if (gesture->mTrigger == cur_token_lower) + if (LLStringUtil::compareInsensitive(gesture->mTrigger, cur_token) == 0) { matching.push_back(gesture); } @@ -548,10 +545,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s } // Don't muck with the user's capitalization if we don't have to. - std::string output = gesture->mReplaceText; - std::string output_lower = output; - LLStringUtil::toLower(output_lower); - if( cur_token_lower == output_lower ) + if( LLStringUtil::compareInsensitive(cur_token, gesture->mReplaceText) == 0) { if (revised_string) revised_string->append( cur_token ); @@ -559,7 +553,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s else { if (revised_string) - revised_string->append( output ); + revised_string->append( gesture->mReplaceText ); } } found_gestures = TRUE; diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp index c2b54f3..a6693a3 100644 --- a/linden/indra/newview/llimpanel.cpp +++ b/linden/indra/newview/llimpanel.cpp @@ -2172,7 +2172,7 @@ void LLFloaterIMPanel::removeTypingIndicator(const LLIMInfo* im_info) void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string line, void* userdata) { LLFloaterIMPanel* self = (LLFloaterIMPanel*)userdata; - LLUIString message = line; + std::string message = line; switch (type) { @@ -2180,14 +2180,14 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string // add warning log enabled message if (gSavedPerAccountSettings.getBOOL("LogInstantMessages")) { - message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); + message = LLFloaterChat::getInstance()->getString("IM_logging_string"); } break; case LLLogChat::LOG_END: // add log end message if (gSavedPerAccountSettings.getBOOL("LogInstantMessages")) { - message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); + message = LLFloaterChat::getInstance()->getString("IM_logging_string"); } break; case LLLogChat::LOG_LINE: @@ -2232,11 +2232,16 @@ void LLFloaterIMPanel::showSessionEventError( const std::string& error_string) { LLStringUtil::format_map_t args; - args["[REASON]"] = - LLFloaterIM::sErrorStringsMap[error_string]; - args["[EVENT]"] = - LLFloaterIM::sEventStringsMap[event_string]; + std::string event; + + event = LLFloaterIM::sEventStringsMap[event_string]; args["[RECIPIENT]"] = getTitle(); + LLStringUtil::format(event, args); + + + args = LLStringUtil::format_map_t(); + args["[REASON]"] = LLFloaterIM::sErrorStringsMap[error_string]; + args["[EVENT]"] = event; gViewerWindow->alertXml( "ChatterBoxSessionEventError", diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp index 309e479..21d8e1f 100644 --- a/linden/indra/newview/llimview.cpp +++ b/linden/indra/newview/llimview.cpp @@ -157,10 +157,10 @@ BOOL LLFloaterIM::postBuild() { // IM session initiation warnings sOnlyUserMessage = getString("only_user_message"); - sOfflineMessage = getUIString("offline_message"); - sMutedMessage = getUIString("muted_message"); + sOfflineMessage = getString("offline_message"); + sMutedMessage = getString("muted_message"); - sInviteMessage = getUIString("invite_message"); + sInviteMessage = getString("invite_message"); if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() ) { @@ -216,12 +216,6 @@ BOOL LLFloaterIM::postBuild() } - if ( sEventStringsMap.end() == sEventStringsMap.find("mute") ) - { - sEventStringsMap["mute"] = - getString("mute_agent_event"); - } - if ( sForceCloseSessionMap.end() == sForceCloseSessionMap.find("removed") ) { @@ -525,7 +519,7 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess { LLFloaterChat* floaterp = LLFloaterChat::getInstance(); - message = floaterp->getUIString(message_name); + message = floaterp->getString(message_name); message.setArgList(args); LLChat chat(message); @@ -537,7 +531,7 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess LLFloaterIMPanel* floaterp = findFloaterBySession(session_id); if (floaterp) { - message = floaterp->getUIString(message_name); + message = floaterp->getString(message_name); message.setArgList(args); gIMMgr->addMessage(session_id, LLUUID::null, SYSTEM_FROM, message.getString()); diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp index 030b357..ea686af 100644 --- a/linden/indra/newview/lllogchat.cpp +++ b/linden/indra/newview/lllogchat.cpp @@ -112,7 +112,7 @@ void LLLogChat::loadHistory(std::string filename , void (*callback)(ELogLineType LLFILE* fptr = LLFile::fopen(makeLogFileName(filename), "r"); /*Flawfinder: ignore*/ if (!fptr) { - //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); + //LLUIString message = LLFloaterChat::getInstance()->getString("IM_logging_string"); //callback(LOG_EMPTY,"IM_logging_string",userdata); callback(LOG_EMPTY,LLStringUtil::null,userdata); return; //No previous conversation with this name. diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp index b37d9fa..732a919 100644 --- a/linden/indra/newview/llpaneldirbrowser.cpp +++ b/linden/indra/newview/llpaneldirbrowser.cpp @@ -985,8 +985,6 @@ void LLPanelDirBrowser::processDirLandReply(LLMessageSystem *msg, void**) // So figure out the next button here, when we know how many aren't auctions count = self->showNextButton(non_auction_count); - // Empty string will sort by current sort options. - list->sortByColumn(LLStringUtil::null,FALSE); self->updateResultCount(); // Poke the result received timer diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index 23379cf..3e60745 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -125,7 +125,7 @@ BOOL LLPanelDisplay::postBuild() mCtrlFullScreen = getChild( "fullscreen combo"); - LLUIString resolution_label = getUIString("resolution_format"); + LLUIString resolution_label = getString("resolution_format"); for (S32 i = 0; i < num_resolutions; i++) { @@ -181,7 +181,7 @@ BOOL LLPanelDisplay::postBuild() S32 denominator = 0; fractionFromDecimal(mAspectRatio, numerator, denominator); - LLUIString aspect_ratio_text = getUIString("aspect_ratio_text"); + LLUIString aspect_ratio_text = getString("aspect_ratio_text"); if (numerator != 0) { aspect_ratio_text.setArg("[NUM]", llformat("%d", numerator)); @@ -347,7 +347,7 @@ void LLPanelDisplay::initWindowSizeControls() } } // ...otherwise, add a new entry with the current window height/width. - LLUIString resolution_label = getUIString("resolution_format"); + LLUIString resolution_label = getString("resolution_format"); resolution_label.setArg("[RES_X]", llformat("%d", width)); resolution_label.setArg("[RES_Y]", llformat("%d", height)); mCtrlWindowSize->add(resolution_label, ADD_TOP); diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp index bb2c096..166cc04 100644 --- a/linden/indra/newview/llpanelgroupgeneral.cpp +++ b/linden/indra/newview/llpanelgroupgeneral.cpp @@ -396,7 +396,7 @@ void LLPanelGroupGeneral::openProfile(void* data) bool LLPanelGroupGeneral::needsApply(std::string& mesg) { - mesg = getUIString("group_info_unchanged"); + mesg = getString("group_info_unchanged"); return mChanged || mGroupID.isNull(); } diff --git a/linden/indra/newview/llpanelgrouplandmoney.cpp b/linden/indra/newview/llpanelgrouplandmoney.cpp index 1914901..b8c9e69 100644 --- a/linden/indra/newview/llpanelgrouplandmoney.cpp +++ b/linden/indra/newview/llpanelgrouplandmoney.cpp @@ -571,7 +571,7 @@ bool LLPanelGroupLandMoney::apply(std::string& mesg) { if (!mImplementationp->applyContribution() ) { - mesg.assign(getUIString("land_contrib_error")); + mesg = getString("land_contrib_error"); return false; } diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp index 37ad05e..d8813b3 100644 --- a/linden/indra/newview/llpanelplace.cpp +++ b/linden/indra/newview/llpanelplace.cpp @@ -270,21 +270,21 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) } std::string info_text; - LLUIString traffic = self->getUIString("traffic_text"); + LLUIString traffic = self->getString("traffic_text"); traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell)); info_text = traffic; - LLUIString area = self->getUIString("area_text"); + LLUIString area = self->getString("area_text"); area.setArg("[AREA]", llformat("%d", actual_area)); info_text += area; if (flags & DFQ_FOR_SALE) { - LLUIString forsale = self->getUIString("forsale_text"); + LLUIString forsale = self->getString("forsale_text"); forsale.setArg("[PRICE]", llformat("%d", sale_price)); info_text += forsale; } if (auction_id != 0) { - LLUIString auction = self->getUIString("auction_text"); + LLUIString auction = self->getString("auction_text"); auction.setArg("[ID]", llformat("%010d ", auction_id)); info_text += auction; } diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index ebfdd39..78b921b 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -1102,7 +1102,7 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 & switch (mSelectedObjects->mSelectType) { case SELECT_TYPE_ATTACHMENT: - if (first_object) + if (first_object && first_object->getRootEdit()->mDrawable.notNull()) { // this means this object *has* to be an attachment LLXform* attachment_point_xform = first_object->getRootEdit()->mDrawable->mXform.getParent(); diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index d018eaa..cb819df 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -431,9 +431,11 @@ bool idle_startup() // Load the throttle settings gViewerThrottle.load(); - if (ll_init_ares() == NULL) + if (ll_init_ares() == NULL || !gAres->isInitialized()) { - LL_ERRS("AppInit") << "Could not start address resolution system" << LL_ENDL; + LL_WARNS("AppInit") << "Could not start address resolution system" << LL_ENDL; + std::string msg = LLTrans::getString("LoginFailedNoNetwork"); + LLAppViewer::instance()->earlyExit(msg); } // @@ -479,7 +481,8 @@ bool idle_startup() FALSE, std::string())) { - std::string msg = llformat("Unable to start networking, error %d", gMessageSystem->getErrorCode()); + std::string msg = LLTrans::getString("LoginFailedNoNetwork"); + msg.append(llformat(" Error: %d", gMessageSystem->getErrorCode())); LLAppViewer::instance()->earlyExit(msg); } @@ -567,6 +570,8 @@ bool idle_startup() } } + LL_INFOS("AppInit") << "Message System Initialized." << LL_ENDL; + //------------------------------------------------- // Init audio, which may be needed for prefs dialog // or audio cues in connection UI. @@ -597,7 +602,9 @@ bool idle_startup() gAudiop->setMuted(TRUE); } } - + + LL_INFOS("AppInit") << "Audio Engine Initialized." << LL_ENDL; + if (LLTimer::knownBadTimer()) { LL_WARNS("AppInit") << "Unreliable timers detected (may be bad PCI chipset)!!" << LL_ENDL; diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp index 365de2f..89fa3cd 100644 --- a/linden/indra/newview/llstylemap.cpp +++ b/linden/indra/newview/llstylemap.cpp @@ -61,14 +61,17 @@ const LLStyleSP &LLStyleMap::lookup(const LLUUID &source) LLStyleSP style(new LLStyle); style->setVisible(true); style->setFontName(LLStringUtil::null); - if (source != LLUUID::null) + if (source != LLUUID::null && source != gAgent.getID() ) { style->setColor(gSavedSettings.getColor4("HTMLLinkColor")); std::string link = llformat("secondlife:///app/agent/%s/about",source.asString().c_str()); style->setLinkHREF(link); } else + { + // Make the resident's own name white and don't make the name clickable. style->setColor(LLColor4::white); + } (*this)[source] = style; } return (*this)[source]; diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index c9ad5a3..cf4304b 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp @@ -186,7 +186,7 @@ bool LLTextureCacheLocalFileWorker::doRead() if (mImageFormat == IMG_CODEC_INVALID) { - llwarns << "Unrecognized file extension " << extension << " for local texture " << mFileName << llendl; +// llwarns << "Unrecognized file extension " << extension << " for local texture " << mFileName << llendl; mDataSize = 0; // no data return true; } @@ -227,9 +227,9 @@ bool LLTextureCacheLocalFileWorker::doRead() { if (mBytesRead != mBytesToRead) { - llwarns << "Error reading file from local cache: " << local_filename - << " Bytes: " << mDataSize << " Offset: " << mOffset - << " / " << mDataSize << llendl; +// llwarns << "Error reading file from local cache: " << local_filename +// << " Bytes: " << mDataSize << " Offset: " << mOffset +// << " / " << mDataSize << llendl; mDataSize = 0; // failed delete[] mReadData; mReadData = NULL; @@ -251,9 +251,9 @@ bool LLTextureCacheLocalFileWorker::doRead() mReadData, mOffset, mDataSize); if (bytes_read != mDataSize) { - llwarns << "Error reading file from local cache: " << mFileName - << " Bytes: " << mDataSize << " Offset: " << mOffset - << " / " << mDataSize << llendl; +// llwarns << "Error reading file from local cache: " << mFileName +// << " Bytes: " << mDataSize << " Offset: " << mOffset +// << " / " << mDataSize << llendl; mDataSize = 0; delete[] mReadData; mReadData = NULL; @@ -368,9 +368,9 @@ bool LLTextureCacheRemoteWorker::doRead() { if (mBytesRead != mBytesToRead) { - llwarns << "Error reading file from local cache: " << local_filename - << " Bytes: " << mDataSize << " Offset: " << mOffset - << " / " << mDataSize << llendl; +// llwarns << "Error reading file from local cache: " << local_filename +// << " Bytes: " << mDataSize << " Offset: " << mOffset +// << " / " << mDataSize << llendl; mDataSize = 0; // failed delete[] mReadData; mReadData = NULL; @@ -392,9 +392,9 @@ bool LLTextureCacheRemoteWorker::doRead() mReadData, mOffset, mDataSize); if (bytes_read != mDataSize) { - llwarns << "Error reading file from local cache: " << local_filename - << " Bytes: " << mDataSize << " Offset: " << mOffset - << " / " << mDataSize << llendl; +// llwarns << "Error reading file from local cache: " << local_filename +// << " Bytes: " << mDataSize << " Offset: " << mOffset +// << " / " << mDataSize << llendl; mDataSize = 0; delete[] mReadData; mReadData = NULL; @@ -455,9 +455,9 @@ bool LLTextureCacheRemoteWorker::doRead() { if (mBytesRead != mBytesToRead) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes read from header: " << mBytesRead - << " != " << mBytesToRead << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes read from header: " << mBytesRead +// << " != " << mBytesToRead << llendl; mDataSize = -1; // failed return true; } @@ -486,9 +486,9 @@ bool LLTextureCacheRemoteWorker::doRead() mReadData, offset, size); if (bytes_read != size) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes read from header: " << bytes_read - << " / " << size << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes read from header: " << bytes_read +// << " / " << size << llendl; mDataSize = -1; // failed return true; } @@ -554,9 +554,9 @@ bool LLTextureCacheRemoteWorker::doRead() { if (mBytesRead != mBytesToRead) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes read from body: " << mBytesRead - << " != " << mBytesToRead << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes read from body: " << mBytesRead +// << " != " << mBytesToRead << llendl; mDataSize = -1; // failed } return true; @@ -593,9 +593,9 @@ bool LLTextureCacheRemoteWorker::doRead() file_offset, file_size); if (bytes_read != file_size) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes read from body: " << bytes_read - << " / " << file_size << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes read from body: " << bytes_read +// << " / " << file_size << llendl; mDataSize = -1; // failed return true; } @@ -632,7 +632,7 @@ bool LLTextureCacheRemoteWorker::doWrite() { if(cur_imagesize > 0 && mImageSize != cur_imagesize) { - llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl; +// llwarns << "Header cache entry size: " << cur_imagesize << " != mImageSize: " << mImageSize << llendl; offset = 0; // re-write header } mState = offset < TEXTURE_CACHE_ENTRY_SIZE ? HEADER : BODY; @@ -667,9 +667,9 @@ bool LLTextureCacheRemoteWorker::doWrite() { if (mBytesRead != mBytesToRead) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes written to header: " << mBytesRead - << " != " << mBytesToRead << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes written to header: " << mBytesRead +// << " != " << mBytesToRead << llendl; mDataSize = -1; // failed return true; } @@ -698,7 +698,7 @@ bool LLTextureCacheRemoteWorker::doWrite() if (bytes_written <= 0) { - llwarns << "LLTextureCacheWorker: missing entry: " << mID << llendl; +// llwarns << "LLTextureCacheWorker: missing entry: " << mID << llendl; mDataSize = -1; // failed return true; } @@ -747,9 +747,9 @@ bool LLTextureCacheRemoteWorker::doWrite() { if (mBytesRead != mBytesToRead) { - llwarns << "LLTextureCacheWorker: " << mID - << " incorrect number of bytes written to body: " << mBytesRead - << " != " << mBytesToRead << llendl; +// llwarns << "LLTextureCacheWorker: " << mID +// << " incorrect number of bytes written to body: " << mBytesRead +// << " != " << mBytesToRead << llendl; mDataSize = -1; // failed } return true; @@ -839,7 +839,10 @@ void LLTextureCacheWorker::finishWork(S32 param, bool completed) { delete[] mReadData; mReadData = NULL; - + if (mDataSize != 0) + { + llinfos << "Read Failed. mDataSize = " << mDataSize << llendl; + } } } else diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp index 48cacf8..382a4f3 100644 --- a/linden/indra/newview/lltexturectrl.cpp +++ b/linden/indra/newview/lltexturectrl.cpp @@ -1047,7 +1047,7 @@ void LLTextureCtrl::setEnabled( BOOL enabled ) if( enabled ) { std::string tooltip; - if (floaterp) tooltip = floaterp->getUIString("choose_picture"); + if (floaterp) tooltip = floaterp->getString("choose_picture"); setToolTip( tooltip ); } else diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index e945102..80b8b4d 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -71,7 +71,7 @@ private: LLTextureFetchWorker* worker = mFetcher->getWorker(mID); if (worker) { - llinfos << "LLTextureFetchWorker::URLResponder::error " << status << ": " << reason << llendl; +// llwarns << "LLTextureFetchWorker::URLResponder::error " << status << ": " << reason << llendl; worker->callbackURLReceived(LLSD(), false); } mFetcher->unlockQueue(); @@ -121,7 +121,7 @@ private: } else { - llinfos << "LLTextureFetchWorker::HTTPGetResponder::error " << status << ": " << cstr << llendl; +// llinfos << "LLTextureFetchWorker::HTTPGetResponder::error " << status << ": " << cstr << llendl; worker->callbackHttpGet(NULL, -1, true); } } @@ -679,7 +679,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1; if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size) { - llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl; +// llwarns << "Bad CACHED TEXTURE size: " << data_size << " removing." << llendl; removeFromCache(); resetFormattedData(); clearPackets(); @@ -711,7 +711,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if (!mFormattedImage->getDataSize()) { // processSimulatorPackets() failed - llwarns << "processSimulatorPackets() failed to load buffer" << llendl; +// llwarns << "processSimulatorPackets() failed to load buffer" << llendl; return true; // failed } setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); @@ -747,7 +747,7 @@ bool LLTextureFetchWorker::doWork(S32 param) } else { - llwarns << mID << ": HTTP get url failed, requesting from simulator" << llendl; +// llwarns << mID << ": HTTP get url failed, requesting from simulator" << llendl; mSentRequest = FALSE; mState = LOAD_FROM_SIMULATOR; return false; @@ -765,7 +765,7 @@ bool LLTextureFetchWorker::doWork(S32 param) } else { - llwarns << mID << ": HTTP get url is empty, requesting from simulator" << llendl; +// llwarns << mID << ": HTTP get url is empty, requesting from simulator" << llendl; mSentRequest = FALSE; mState = LOAD_FROM_SIMULATOR; return false; @@ -816,7 +816,7 @@ bool LLTextureFetchWorker::doWork(S32 param) S32 cur_size = mFormattedImage->getDataSize(); if (mRequestedSize < 0) { - llwarns << "http get failed for: " << mID << llendl; +// llwarns << "http get failed for: " << mID << llendl; if (cur_size == 0) { resetFormattedData(); @@ -882,7 +882,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0) { // Cache file should be deleted, try again - llwarns << mID << ": Decode of cached file failed (removed), retrying" << llendl; +// llwarns << mID << ": Decode of cached file failed (removed), retrying" << llendl; mFormattedImage = NULL; ++mRetryAttempt; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); @@ -891,7 +891,7 @@ bool LLTextureFetchWorker::doWork(S32 param) } else { - llwarns << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << llendl; +// llwarns << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << llendl; mState = DONE; // failed } } @@ -1148,7 +1148,7 @@ void LLTextureFetchWorker::callbackHttpGet(U8* data, S32 data_size, bool last_bl else if (data_size > mRequestedSize) { // *TODO: This will happen until we fix LLCurl::getByteRange() - llinfos << "HUH?" << llendl; +// llinfos << "HUH?" << llendl; mHaveAllData = TRUE; mFormattedImage->deleteData(); mBufferSize = data_size; @@ -1179,7 +1179,7 @@ void LLTextureFetchWorker::callbackCacheRead(bool success, LLImageFormatted* ima LLMutexLock lock(&mWorkMutex); if (mState != LOAD_FROM_TEXTURE_CACHE) { - llwarns << "Read callback for " << mID << " with state = " << mState << llendl; +// llwarns << "Read callback for " << mID << " with state = " << mState << llendl; return; } if (success) @@ -1203,7 +1203,7 @@ void LLTextureFetchWorker::callbackCacheWrite(bool success) LLMutexLock lock(&mWorkMutex); if (mState != WAIT_ON_WRITE) { - llwarns << "Write callback for " << mID << " with state = " << mState << llendl; +// llwarns << "Write callback for " << mID << " with state = " << mState << llendl; return; } mWritten = TRUE; @@ -1216,7 +1216,7 @@ void LLTextureFetchWorker::callbackDecoded(bool success) { if (mState != DECODE_IMAGE_UPDATE) { - llwarns << "Decode callback for " << mID << " with state = " << mState << llendl; +// llwarns << "Decode callback for " << mID << " with state = " << mState << llendl; return; } // llinfos << mID << " : DECODE COMPLETE " << llendl; @@ -1259,7 +1259,7 @@ bool LLTextureFetchWorker::decodeImage() } else { - llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl; +// llwarns << "DECODE FAILED: " << mID << " Discard: " << (S32)mFormattedImage->getDiscardLevel() << llendl; removeFromCache(); } mImageWorker->scheduleDelete(); @@ -1780,7 +1780,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 } else if (!data_size) { - llwarns << "Img: " << id << ":" << " Empty Image Header" << llendl; +// llwarns << "Img: " << id << ":" << " Empty Image Header" << llendl; res = false; } if (!res) @@ -1825,7 +1825,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 } else if (!data_size) { - llwarns << "Img: " << id << ":" << " Empty Image Header" << llendl; +// llwarns << "Img: " << id << ":" << " Empty Image Header" << llendl; res = false; } if (!res) diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp index fb23567..98ad5ff 100644 --- a/linden/indra/newview/lltoolbar.cpp +++ b/linden/indra/newview/lltoolbar.cpp @@ -340,7 +340,7 @@ void LLToolBar::updateCommunicateList() } } communicate_button->addSeparator(ADD_TOP); - communicate_button->add(getUIString("Redock Windows"), LLSD("redock"), ADD_TOP); + communicate_button->add(getString("Redock Windows"), LLSD("redock"), ADD_TOP); communicate_button->addSeparator(ADD_TOP); communicate_button->add(LLFloaterMute::getInstance()->getShortTitle(), LLSD("mute list"), ADD_TOP); diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp index 19ebe28..89407f7 100644 --- a/linden/indra/newview/lltoolmgr.cpp +++ b/linden/indra/newview/lltoolmgr.cpp @@ -36,6 +36,7 @@ #include "lltool.h" // tools and manipulators #include "llmanipscale.h" +#include "llselectmgr.h" #include "lltoolbrush.h" #include "lltoolcomp.h" #include "lltooldraganddrop.h" diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp index 0e8ba56..de10045 100644 --- a/linden/indra/newview/lltoolpie.cpp +++ b/linden/indra/newview/lltoolpie.cpp @@ -67,10 +67,6 @@ #include "llui.h" #include "llweb.h" -LLPointer LLToolPie::sClickActionObject; -LLSafeHandle LLToolPie::sLeftClickSelection = NULL; -U8 LLToolPie::sClickAction = 0; - extern void handle_buy(void*); extern BOOL gDebugClicks; @@ -84,7 +80,8 @@ LLToolPie::LLToolPie() : LLTool(std::string("Select")), mPieMouseButtonDown( FALSE ), mGrabMouseButtonDown( FALSE ), - mMouseOutsideSlop( FALSE ) + mMouseOutsideSlop( FALSE ), + mClickAction(0) { } @@ -168,17 +165,17 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) // If it's a left-click, and we have a special action, do it. if (useClickAction(always_show, mask, object, parent)) { - sClickAction = 0; + mClickAction = 0; if (object && object->getClickAction()) { - sClickAction = object->getClickAction(); + mClickAction = object->getClickAction(); } else if (parent && parent->getClickAction()) { - sClickAction = parent->getClickAction(); + mClickAction = parent->getClickAction(); } - switch(sClickAction) + switch(mClickAction) { case CLICK_ACTION_TOUCH: default: @@ -196,27 +193,27 @@ BOOL LLToolPie::pickAndShowMenu(BOOL always_show) || parent && parent->flagTakesMoney()) { // pay event goes to object actually clicked on - sClickActionObject = object; - sLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE); + mClickActionObject = object; + mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE); return TRUE; } break; case CLICK_ACTION_BUY: - sClickActionObject = parent; - sLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); + mClickActionObject = parent; + mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); return TRUE; case CLICK_ACTION_OPEN: if (parent && parent->allowOpen()) { - sClickActionObject = parent; - sLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); + mClickActionObject = parent; + mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); } return TRUE; case CLICK_ACTION_PLAY: handle_click_action_play(); return TRUE; case CLICK_ACTION_OPEN_MEDIA: - // sClickActionObject = object; + // mClickActionObject = object; handle_click_action_open_media(object); return TRUE; } @@ -471,8 +468,16 @@ ECursorType cursor_from_object(LLViewerObject* object) return cursor; } +void LLToolPie::resetSelection() +{ + mLeftClickSelection = NULL; + mClickActionObject = NULL; + mClickAction = 0; +} + // When we get object properties after left-clicking on an object // with left-click = buy, if it's the same object, do the buy. + // static void LLToolPie::selectionPropertiesReceived() { @@ -483,14 +488,16 @@ void LLToolPie::selectionPropertiesReceived() return; } - if (!sLeftClickSelection->isEmpty()) + LLObjectSelection* selection = LLToolPie::getInstance()->getLeftClickSelection(); + if (selection) { - LLViewerObject* selected_object = sLeftClickSelection->getPrimaryObject(); + LLViewerObject* selected_object = selection->getPrimaryObject(); // since we don't currently have a way to lock a selection, it could have changed // after we initially clicked on the object - if (selected_object == sClickActionObject) + if (selected_object == LLToolPie::getInstance()->getClickActionObject()) { - switch (sClickAction) + U8 click_action = LLToolPie::getInstance()->getClickAction(); + switch (click_action) { case CLICK_ACTION_BUY: handle_buy(NULL); @@ -506,9 +513,7 @@ void LLToolPie::selectionPropertiesReceived() } } } - sLeftClickSelection = NULL; - sClickActionObject = NULL; - sClickAction = 0; + LLToolPie::getInstance()->resetSelection(); } BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) diff --git a/linden/indra/newview/lltoolpie.h b/linden/indra/newview/lltoolpie.h index 9f9ccd0..f336001 100644 --- a/linden/indra/newview/lltoolpie.h +++ b/linden/indra/newview/lltoolpie.h @@ -60,27 +60,31 @@ public: virtual LLTool* getOverrideTool(MASK mask); LLPickInfo& getPick() { return mPick; } - + U8 getClickAction() { return mClickAction; } + LLViewerObject* getClickActionObject() { return mClickActionObject; } + LLObjectSelection* getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; } + void resetSelection(); + static void leftMouseCallback(const LLPickInfo& pick_info); static void rightMouseCallback(const LLPickInfo& pick_info); static void selectionPropertiesReceived(); -protected: +private: BOOL outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y); BOOL pickAndShowMenu(BOOL edit_menu); BOOL useClickAction(BOOL always_show, MASK mask, LLViewerObject* object, LLViewerObject* parent); -protected: +private: BOOL mPieMouseButtonDown; BOOL mGrabMouseButtonDown; BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region LLPickInfo mPick; - static LLPointer sClickActionObject; - static U8 sClickAction; - static LLSafeHandle sLeftClickSelection; + LLPointer mClickActionObject; + U8 mClickAction; + LLSafeHandle mLeftClickSelection; }; diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index b1cd9b6..c7207ba 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -1513,7 +1513,7 @@ class LLObjectReportAbuse : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (objectp) { LLFloaterReporter::showFromObject(objectp->getID()); @@ -1537,7 +1537,7 @@ class LLObjectTouch : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (!object) return true; LLPickInfo pick = LLToolPie::getInstance()->getPick(); @@ -1588,7 +1588,7 @@ class LLObjectEnableTouch : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); bool new_value = obj && obj->flagHandleTouch(); gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); @@ -1622,7 +1622,7 @@ void label_touch(std::string& label, void*) bool handle_object_open() { - LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if(!obj) return true; LLFloaterOpenObject::show(); @@ -1643,7 +1643,7 @@ class LLObjectEnableOpen : public view_listener_t { // Look for contents in root object, which is all the LLFloaterOpenObject // understands. - LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); bool new_value = (obj != NULL); if (new_value) { @@ -1684,7 +1684,7 @@ bool toggle_build_mode() gViewerWindow->showCursor(); } // avoid spurious avatar movements pulling out of edit mode - LLViewerJoystick::getInstance()->moveAvatar(true); + LLViewerJoystick::getInstance()->setNeedsReset(); } else { @@ -1723,7 +1723,7 @@ bool toggle_build_mode() gAgent.resetView(false); // avoid spurious avatar movements - LLViewerJoystick::getInstance()->moveAvatar(true); + LLViewerJoystick::getInstance()->setNeedsReset(); } return true; @@ -1996,7 +1996,7 @@ BOOL enable_has_attachments(void*) void handle_follow(void *userdata) { // follow a given avatar by ID - LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (objectp) { gAgent.startFollowPilot(objectp->getID()); @@ -2007,7 +2007,7 @@ class LLObjectEnableMute : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); bool new_value = (object != NULL); if (new_value) { @@ -2030,7 +2030,7 @@ class LLObjectMute : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (!object) return true; LLUUID id; @@ -2160,7 +2160,7 @@ class LLAvatarFreeze : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if( avatar ) { LLUUID* avatar_id = new LLUUID( avatar->getID() ); @@ -2210,7 +2210,7 @@ class LLAvatarDebug : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if( avatar ) { avatar->dumpLocalTextures(); @@ -2262,7 +2262,7 @@ class LLAvatarEject : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if( avatar ) { LLUUID* avatar_id = new LLUUID( avatar->getID() ); @@ -2292,7 +2292,7 @@ class LLAvatarEnableFreezeEject : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); bool new_value = (avatar != NULL); if (new_value) @@ -2317,7 +2317,7 @@ class LLAvatarGiveCard : public view_listener_t bool handleEvent(LLPointer event, const LLSD& userdata) { llinfos << "handle_give_card()" << llendl; - LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if(dest && dest->isAvatar()) { bool found_name = false; @@ -2774,7 +2774,7 @@ class LLAvatarEnableAddFriend : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getFirstObject()); + LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); bool new_value = avatar && !is_agent_friend(avatar->getID()); gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); return true; @@ -3289,7 +3289,7 @@ class LLEditEnableDuplicate : public view_listener_t void disabled_duplicate(void*) { - if (LLSelectMgr::getInstance()->getSelection()->getFirstObject()) + if (LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()) { LLNotifyBox::showXml("CopyFailed"); } @@ -4905,11 +4905,11 @@ class LLToolsLookAtSelection : public view_listener_t if (zoom) { - gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getFirstObject()->mID ); + gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()->mID ); } else { - gAgent.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getFirstObject()->mID ); + gAgent.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()->mID ); } } return true; @@ -4944,7 +4944,7 @@ class LLAvatarInviteToGroup : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if(avatar) { invite_to_group(avatar->getID()); @@ -4957,7 +4957,7 @@ class LLAvatarAddFriend : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if(avatar && !is_agent_friend(avatar->getID())) { request_friendship(avatar->getID()); @@ -5030,11 +5030,11 @@ class LLEnablePayObject : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getFirstObject()); + LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); bool new_value = (avatar != NULL); if (!new_value) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if( object ) { LLViewerObject *parent = (LLViewerObject *)object->getParent(); @@ -5054,7 +5054,7 @@ class LLObjectEnableSitOrStand : public view_listener_t bool handleEvent(LLPointer event, const LLSD& userdata) { bool new_value = false; - LLViewerObject* dest_object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* dest_object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if(dest_object) { @@ -5419,7 +5419,7 @@ class LLShowAgentProfile : public view_listener_t } else if (userdata.asString() == "hit object") { - LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (objectp) { agent_id = objectp->getID(); @@ -5640,7 +5640,7 @@ class LLAttachmentDrop : public view_listener_t { // Called when the user clicked on an object attached to them // and selected "Drop". - LLViewerObject *object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject *object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (!object) { llwarns << "handle_drop_attachment() - no object to drop" << llendl; @@ -5740,7 +5740,7 @@ class LLAttachmentDetach : public view_listener_t { // Called when the user clicked on an object attached to them // and selected "Detach". - LLViewerObject *object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject *object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (!object) { llwarns << "handle_detach() - no object to detach" << llendl; @@ -5820,7 +5820,7 @@ class LLAttachmentEnableDrop : public view_listener_t // in your inventory. Therefore, we disable the drop option until the // item is in your inventory - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); LLViewerJointAttachment* attachment_pt = NULL; LLInventoryItem* item = NULL; @@ -5862,7 +5862,7 @@ class LLAttachmentEnableDrop : public view_listener_t BOOL enable_detach(void*) { - LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (!object) return FALSE; if (!object->isAttachment()) return FALSE; @@ -5969,7 +5969,7 @@ class LLAvatarSendIM : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getFirstObject() ); + LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); if(avatar) { std::string name("IM"); @@ -6781,7 +6781,7 @@ void handle_dump_avatar_local_textures(void*) void handle_debug_avatar_textures(void*) { - LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if (objectp) { LLFloaterAvatarTextures::show(objectp->getID()); diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index f79730b..f6cefce 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -539,9 +539,9 @@ void process_places_reply(LLMessageSystem* msg, void** data) void send_sound_trigger(const LLUUID& sound_id, F32 gain) { - if (sound_id.isNull()) + if (sound_id.isNull() || gAgent.getRegion() == NULL) { - // zero guids don't get sent (no sound) + // disconnected agent or zero guids don't get sent (no sound) return; } @@ -861,7 +861,9 @@ void open_offer(const std::vector& items, const std::string& from_name) } if(gSavedSettings.getBOOL("ShowInInventory") && - asset_type != LLAssetType::AT_CALLINGCARD) + asset_type != LLAssetType::AT_CALLINGCARD && + item->getInventoryType() != LLInventoryType::IT_ATTACHMENT && + !from_name.empty()) { LLInventoryView::showAgentInventory(TRUE); } diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index d90b33a..64c042a 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -237,8 +237,6 @@ const F32 FAST_FRAME_INCREMENT = 0.1f; const F32 MIN_DISPLAY_SCALE = 0.75f; -const S32 CONSOLE_BOTTOM_PAD = 40; - std::string LLViewerWindow::sSnapshotBaseName; std::string LLViewerWindow::sSnapshotDir; @@ -1375,6 +1373,18 @@ void LLViewerWindow::handlePingWatchdog(LLWindow *window, const char * msg) LLAppViewer::instance()->pingMainloopTimeout(msg); } + +void LLViewerWindow::handleResumeWatchdog(LLWindow *window) +{ + LLAppViewer::instance()->resumeMainloopTimeout(); +} + +void LLViewerWindow::handlePauseWatchdog(LLWindow *window) +{ + LLAppViewer::instance()->pauseMainloopTimeout(); +} + + // // Classes // @@ -1583,6 +1593,8 @@ void LLViewerWindow::initBase() LLRect floater_view_rect = full_window; // make space for menu bar if we have one floater_view_rect.mTop -= MENU_BAR_HEIGHT; + + // TODO: Eliminate magic constants - please used named constants if changing this floater_view_rect.mBottom += STATUS_BAR_HEIGHT + 12 + 16 + 2; // Check for non-first startup @@ -1601,7 +1613,10 @@ void LLViewerWindow::initBase() llassert( !gConsole ); LLRect console_rect = full_window; console_rect.mTop -= 24; - console_rect.mBottom += STATUS_BAR_HEIGHT + 12 + 16 + 12; + + 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")) @@ -2967,7 +2982,7 @@ BOOL LLViewerWindow::handlePerFrameHover() // Always update console LLRect console_rect = gConsole->getRect(); - console_rect.mBottom = gHUDView->getRect().mBottom + CONSOLE_BOTTOM_PAD; + console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad(); gConsole->reshape(console_rect.getWidth(), console_rect.getHeight()); gConsole->setRect(console_rect); } @@ -4232,6 +4247,13 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei - output_buffer_offset_x // ...minus buffer padding x... - (output_buffer_offset_y * (raw->getWidth())) // ...minus buffer padding y... ) * raw->getComponents(); + + // Ping the wathdog thread every 100 lines to keep us alive (arbitrary number, feel free to change) + if (out_y % 100 == 0) + { + LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot"); + } + if (type == SNAPSHOT_TYPE_OBJECT_ID || type == SNAPSHOT_TYPE_COLOR) { glReadPixels( @@ -4873,6 +4895,15 @@ void LLViewerWindow::calcDisplayScale() } } +S32 LLViewerWindow::getChatConsoleBottomPad() +{ + S32 offset = 0; + if( gToolBar && gToolBar->getVisible() ) + offset += TOOL_BAR_HEIGHT; + + return offset; +} + //---------------------------------------------------------------------------- // static diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index 9262e61..21df0d5 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h @@ -174,7 +174,10 @@ public: /*virtual*/ void handleDataCopy(LLWindow *window, S32 data_type, void *data); /*virtual*/ BOOL handleTimerEvent(LLWindow *window); /*virtual*/ BOOL handleDeviceChange(LLWindow *window); + /*virtual*/ void handlePingWatchdog(LLWindow *window, const char * msg); + /*virtual*/ void handlePauseWatchdog(LLWindow *window); + /*virtual*/ void handleResumeWatchdog(LLWindow *window); // @@ -368,7 +371,8 @@ private: void restoreGL(const std::string& progress_message = LLStringUtil::null); void initFonts(F32 zoom_factor = 1.f); void schedulePick(LLPickInfo& pick_info); - + S32 getChatConsoleBottomPad(); // Vertical padding for child console rect, varied by bottom clutter + public: LLWindow* mWindow; // graphical window object diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index 8adb910..e480eb3 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp @@ -2155,6 +2155,12 @@ void LLVOAvatar::releaseMeshData() { LLFace* facep = mDrawable->getFace(0); facep->setSize(0, 0); + + for(S32 i = mNumInitFaces ; i < mDrawable->getNumFaces(); i++) + { + facep = mDrawable->getFace(i); + facep->setSize(0, 0); + } } for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); @@ -2211,50 +2217,97 @@ void LLVOAvatar::updateMeshData() if (mDrawable.notNull()) { stop_glerror(); - LLFace* facep = mDrawable->getFace(0); - U32 num_vertices = 0; - U32 num_indices = 0; + LLViewerJoint* av_parts[8] ; + av_parts[0] = &mEyeBallLeftLOD ; + av_parts[1] = &mEyeBallRightLOD ; + av_parts[2] = &mEyeLashLOD ; + av_parts[3] = &mHeadLOD ; + av_parts[4] = &mLowerBodyLOD ; + av_parts[5] = &mSkirtLOD ; + av_parts[6] = &mUpperBodyLOD ; + av_parts[7] = &mHairLOD ; + + S32 f_num = 0 ; + const U32 VERTEX_NUMBER_THRESHOLD = 128 ;//small number of this means each part of an avatar has its own vertex buffer. // this order is determined by number of LODS // if a mesh earlier in this list changed LODs while a later mesh doesn't, // the later mesh's index offset will be inaccurate - mEyeBallLeftLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mEyeBallRightLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mEyeLashLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mHeadLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mLowerBodyLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mSkirtLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mUpperBodyLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - mHairLOD.updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); - - // resize immediately - facep->setSize(num_vertices, num_indices); - - facep->mVertexBuffer = new LLVertexBufferAvatar(); - facep->mVertexBuffer->allocateBuffer(num_vertices, num_indices, TRUE); - - facep->setGeomIndex(0); - facep->setIndicesIndex(0); - - // This is a hack! Avatars have their own pool, so we are detecting - // the case of more than one avatar in the pool (thus > 0 instead of >= 0) - if (facep->getGeomIndex() > 0) + for(S32 part_index = 0 ; part_index < 8 ;) { - llerrs << "non-zero geom index: " << facep->getGeomIndex() << " in LLVOAvatar::restoreMeshData" << llendl; - } + S32 j = part_index ; + U32 last_v_num = 0, num_vertices = 0 ; + U32 last_i_num = 0, num_indices = 0 ; - mEyeBallLeftLOD.updateFaceData(facep, mAdjustedPixelArea); - mEyeBallRightLOD.updateFaceData(facep, mAdjustedPixelArea); - mEyeLashLOD.updateFaceData(facep, mAdjustedPixelArea); - mHeadLOD.updateFaceData(facep, mAdjustedPixelArea); - mLowerBodyLOD.updateFaceData(facep, mAdjustedPixelArea); - mSkirtLOD.updateFaceData(facep, mAdjustedPixelArea); - mUpperBodyLOD.updateFaceData(facep, mAdjustedPixelArea); - mHairLOD.updateFaceData(facep, mAdjustedPixelArea, TRUE); + while(part_index < 8 && num_vertices < VERTEX_NUMBER_THRESHOLD) + { + last_v_num = num_vertices ; + last_i_num = num_indices ; - stop_glerror(); - facep->mVertexBuffer->setBuffer(0); + av_parts[part_index++]->updateFaceSizes(num_vertices, num_indices, mAdjustedPixelArea); + } + if(num_vertices < 1)//skip empty meshes + { + break ; + } + if(last_v_num > 0)//put the last inserted part into next vertex buffer. + { + num_vertices = last_v_num ; + num_indices = last_i_num ; + part_index-- ; + } + + LLFace* facep ; + if(f_num < mDrawable->getNumFaces()) + { + facep = mDrawable->getFace(f_num); + } + else + { + facep = mDrawable->addFace(mDrawable->getFace(0)->getPool(), mDrawable->getFace(0)->getTexture()) ; + } + + // resize immediately + facep->setSize(num_vertices, num_indices); + + if(facep->mVertexBuffer.isNull()) + { + facep->mVertexBuffer = new LLVertexBufferAvatar(); + facep->mVertexBuffer->allocateBuffer(num_vertices, num_indices, TRUE); + } + else + { + facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ; + } + + facep->setGeomIndex(0); + facep->setIndicesIndex(0); + + // This is a hack! Avatars have their own pool, so we are detecting + // the case of more than one avatar in the pool (thus > 0 instead of >= 0) + if (facep->getGeomIndex() > 0) + { + llerrs << "non-zero geom index: " << facep->getGeomIndex() << " in LLVOAvatar::restoreMeshData" << llendl; + } + + for(S32 k = j ; k < part_index ; k++) + { + av_parts[k]->updateFaceData(facep, mAdjustedPixelArea, (k == 7)); + } + + stop_glerror(); + facep->mVertexBuffer->setBuffer(0); + + if(!f_num) + { + f_num += mNumInitFaces ; + } + else + { + f_num++ ; + } + } } } @@ -5852,6 +5905,7 @@ LLDrawable *LLVOAvatar::createDrawable(LLPipeline *pipeline) LLDrawPoolAvatar *poolp = (LLDrawPoolAvatar*) gPipeline.getPool(LLDrawPool::POOL_AVATAR); // Only a single face (one per avatar) + //this face will be splitted into several if its vertex buffer is too long. mDrawable->setState(LLDrawable::ACTIVE); mDrawable->addFace(poolp, NULL); mDrawable->setRenderType(LLPipeline::RENDER_TYPE_AVATAR); @@ -5865,6 +5919,8 @@ LLDrawable *LLVOAvatar::createDrawable(LLPipeline *pipeline) facep = mDrawable->addFace((LLFacePool*) NULL, mShadowImagep); mShadow1Facep = facep; + mNumInitFaces = mDrawable->getNumFaces() ; + dirtyMesh(); return mDrawable; } diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h index d4c5e8a..d66ddfc 100644 --- a/linden/indra/newview/llvoavatar.h +++ b/linden/indra/newview/llvoavatar.h @@ -693,6 +693,7 @@ public: typedef std::multimap mesh_map_t; mesh_map_t mMeshes; + S32 mNumInitFaces ; //number of faces generated when creating the avatar drawable, does not inculde splitted faces due to long vertex buffer. //-------------------------------------------------------------------- // true if this avatar is for this viewers agent //-------------------------------------------------------------------- diff --git a/linden/indra/newview/llvoiceremotectrl.cpp b/linden/indra/newview/llvoiceremotectrl.cpp index 6a11471..1f6edd4 100644 --- a/linden/indra/newview/llvoiceremotectrl.cpp +++ b/linden/indra/newview/llvoiceremotectrl.cpp @@ -176,7 +176,7 @@ void LLVoiceRemoteCtrl::draw() LLIconCtrl* voice_channel_icon = getChild("voice_channel_icon"); if (voice_channel_icon && voice_floater) { - voice_channel_icon->setImage(voice_floater->getUIString("voice_icon")); + voice_channel_icon->setImage(voice_floater->getString("voice_icon")); } LLButton* voice_channel_bg = getChild("voice_channel_bg"); diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index b70dd23..9d8369f 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp @@ -2236,6 +2236,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) } LLVOVolume* vobj = drawablep->getVOVolume(); + llassert_always(vobj); vobj->updateTextures(); vobj->preRebuild(); diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp index 7607315..d2f6748 100644 --- a/linden/indra/newview/llwindebug.cpp +++ b/linden/indra/newview/llwindebug.cpp @@ -696,7 +696,7 @@ void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop // Since there is exception info... Release the hounds. gEmergencyMemoryReserve.release(); - if(gSavedSettings.getControl("SaveMinidump").isNull() && gSavedSettings.getBOOL("SaveMinidump")) + if(gSavedSettings.getControl("SaveMinidump").notNull() && gSavedSettings.getBOOL("SaveMinidump")) { _MINIDUMP_EXCEPTION_INFORMATION ExInfo; diff --git a/linden/indra/newview/skins/default/xui/de/alerts.xml b/linden/indra/newview/skins/default/xui/de/alerts.xml index fce0456..be828a4 100644 --- a/linden/indra/newview/skins/default/xui/de/alerts.xml +++ b/linden/indra/newview/skins/default/xui/de/alerts.xml @@ -24,11 +24,6 @@ OK - - - [MOTD] - - Derzeit ist kein Tutorial verfรผgbar. @@ -729,7 +724,7 @@ Der Outfit-Ordner enthรคlt keine Kleidung, Kรถrperteile oder Anhรคnge. Hoppla! Da fehlt noch etwas. Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein. -Sie benรถtigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu kรถnnen.Mรถchten Sie jetzt ein Benutzerkonto anlegen? +Sie benรถtigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu kรถnnen. Mรถchten Sie jetzt ein Benutzerkonto anlegen? - - - Die neue Haut wird nach dem erneuten Start von [SECOND_LIFE] angezeigt. - - - - - Ihr Computer entspricht nicht den Hardwareanforderungen von Second Life. Second Life setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstรผtzung voraus. Falls Ihre Grafikkarte diese Funktion unterstรผtzt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches fรผr Ihr Betriebssystem. - -Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://www.secondlife.com/support - - - - - Achtung: Ihr System erfรผllt nicht die Mindestanforderungen von Second Life. Dies kann eine schlechte Darstellungsleistung in Second Life zur Folge haben. Fรผr nicht unterstรผtzte Systemkonfigurationen bieten wir keinen technischen Support. - -MINDESTANF. -Die Seite [_URL] fรผr weitere Informationen รถffnen? - - - Nicht unterstรผtzte Hardware ignorieren - - - - - - - - Ihre Grafikkarte entspricht nicht den Mindestanforderungen. - - - - - - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen. - - - - - 796 - - - - - - Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen. - - - - - 510 - - - - - Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte. -Dies ist hรคufig der Fall bei neuer Hardware, die wir noch nicht testen konnten. -Second Life funktioniert aller Voraussicht nach normal, mรถglicherweise -mรผssen Sie aber die Grafikeinstellungen anpassen. -(Bearbeiten > Einstellungen > Grafik). - - - Unbekannte Grafikkarte ignorieren - - - - - [AVATAR_NAME] einfrieren? -Der Avatar wird auรŸer Gefecht gesetzt und kann -sich nicht mehr bewegen, chatten oder mit der Welt interagieren. - - - - - - - - [AVATAR_NAME] von Ihrem Land werfen? - - - - - - - - Ihre Suchanfrage wurde geรคndert. -Zu kurze Begriffe wurden entfernt. - -Ihre Suchanfrage: [FINALQUERY] - - - - - Ihre Suchbegriffe sind zu kurz. -Es wurde keine Suche durchgefรผhrt. - - - - - Das Fenster 'Land kaufen' kann erst geschlossen werden, -nachdem Second Life den Transaktionspreis geschรคtzt hat. - - - - - QuickTime wurde deaktiviert, weil Sie eine alte Version verwenden - - - Streaming-Video wurde deaktiviert, weil die QuickTime-Version -auf Ihrem Computer nicht mehr aktuell ist. - -Laden Sie ein Update von http://www.apple.com/quicktime/ herunter. - - Anzeigen erscheinen fรผr eine Woche unter 'Anzeigen' @@ -970,7 +838,7 @@ Die ร„nderungen รผbernehmen und das Programm beenden? - Alle 'Nรคchstes Mal zeigen'-Dialoge zurรผcksetzen? + Mรถchten Sie alle Popups wieder aktivieren, die Sie zuvor auf โ€šNicht mehr anzeigen' gesetzt haben? - Alle 'Nรคchstes Mal zeigen'-Dialoge deaktivieren? + Mรถchten Sie alle Popups, die รผbersprungen werden kรถnnen, deaktivieren? + + + Die neue Haut wird nach dem erneuten Start von [SECOND_LIFE] angezeigt. + + Zur [SECOND_LIFE]-Webseite, um Auktionen anzuzeigen oder @@ -1139,6 +1012,70 @@ Mรถchten Sie diese Objekte lรถschen? da die Option -safe verwendet wurde. + + + Ihr Computer entspricht nicht den Hardwareanforderungen von Second Life. Second Life setzt eine OpenGL-Grafikkarte mit Multitextur-Unterstรผtzung voraus. Falls Ihre Grafikkarte diese Funktion unterstรผtzt, installieren Sie die neuesten Treiber sowie die aktuellen Service Packs und Patches fรผr Ihr Betriebssystem. + +Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter: http://www.secondlife.com/support + + + + + Achtung: Ihr System erfรผllt nicht die Mindestanforderungen von Second Life. Dies kann eine schlechte Darstellungsleistung in Second Life zur Folge haben. Fรผr nicht unterstรผtzte Systemkonfigurationen bieten wir keinen technischen Support. + +MINDESTANF. +Die Seite [_URL] fรผr weitere Informationen รถffnen? + + + Bei Entdeckung nicht unterstรผtzter Hardware + + + + + http://www.secondlife.com/corporate/sysreqs.php + + + + + - Ihre Grafikkarte entspricht nicht den Mindestanforderungen. + + + + + - Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen. + + + + + 796 + + + + + - Ihr Arbeitsspeicher entspricht nicht den Mindestanforderungen. + + + + + 510 + + + + + Ihr System verwendet eine uns zurzeit unbekannte Grafikkarte. +Dies ist hรคufig der Fall bei neuer Hardware, die wir noch nicht testen konnten. +Second Life funktioniert aller Voraussicht nach normal, mรถglicherweise +mรผssen Sie aber die Grafikeinstellungen anpassen. +(Bearbeiten > Einstellungen > Grafik). + + + Bei Entdeckung einer unbekannten Grafikkarte + + Es wurden die fรผr Ihre Systemkonfiguration empfohlenen @@ -1309,21 +1246,6 @@ Folgende Domรคne konnte nicht aufgelรถst werden: [DOMAIN] Bitte รผberprรผfen Sie Ihre Netzwerkverbindung. - - - Verbindung nicht mรถglich. Anmeldeserver hat das Anmeldepaket -nie erhalten. - -Bitte versuchen Sie es in einigen Minuten erneut oder klicken Sie -fรผr Unterstรผtzung und einen Link auf die Systemstatus-Webseite auf 'Hilfe'. - - - - Willkommen bei [SECOND_LIFE]! @@ -1353,173 +1275,6 @@ Bitte wรคhlen Sie einen mรคnnlichen oder weiblichen Avatar. Weiblich - - - Mรถchten Sie wirklich alle Objekte zurรผckgeben, die [USER_NAME] gehรถren? - - - - - - - Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufรผgen: -รœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS]. - - - - - Den System-Webbrowser รถffnen, um diesen Inhalt anzuzeigen? - - - Wenn der System-Webbrowser zur Anzeige einer Webseite geรถffnet wird - - - - - - - Besuchen Sie das [SECOND_LIFE] QA-Wiki. - - - Beim Starten eines Browsers, um das QA-Wiki anzuzeigen - - - - - - - Mรถchten Sie sich wirklich teleportieren? - - - Beim Teleportieren von einer Landmarke im Inventar - - - - - - - Es gibt Probleme beim Hinzufรผgen eines neuen Grundstรผcksverwalters. Bei mindestens einem Grundstรผck ist die Verwalterliste voll. - - - - - Problem beim Hinzufรผgen zu dieser Grundstรผcksliste. Bei mindestens einem Grundstรผck ist die Liste voll. - - - - - Enthรคlt diese Anzeige nicht jugendfreie Inhalte? - - - - - - - - Beschรคftigt sich diese Gruppe mit nicht jugendfreien Inhalten? - - - - - - - - Wenn Sie diese Option auswรคhlen, kรถnnen Parzelleneigentรผmer ihre Parzellen nicht in der Suche anzeigen lassen -Standard: aus - - - - - Dieses Kontrollkรคstchen zeigt Folgendes an: -- diese Parzelle in den Suchergebnissen -- die รถffentlichen Objekte dieser Parzelle - - - - - Geben Sie hier eine E-Mail-Adresse ein, an die -Missbrauchsmeldungen von diesem Grundstรผck gesendet werden. -Wenn dieses Feld leer ist, werden Missbrauchsmeldungen -nur an Linden Lab gesendet. - - - - - Die Parzellen auf diesem Grundstรผck kรถnnen รผber eigene Voice- -Channel verfรผgen, die es Einwohnern ermรถglichen, sich mit -anderen Personen in der Nรคhe zu unterhalten. - -Standard: aus - - - - - Diese Version von Second ist mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, mรผssen Sie Second Life aktualisieren. - - - - - Zeitรผberschreitung bei Inventarabfrage vom Server. Wiederholen? - - - Inventarobjekt-Abfrage wiederholen - - - - - - - Wirklich beenden? - - - - - Beim Beenden von Second Life. - - - - Die Region [REGION] erlaubt kein Terraforming. @@ -1595,6 +1350,22 @@ sich nicht mehr bewegen, chatten oder mit der Welt interagieren. Abbrechen + + + [AVATAR_NAME] einfrieren? +Der Avatar wird auรŸer Gefecht gesetzt und kann +sich nicht mehr bewegen, chatten oder mit der Welt interagieren. + + + + + Diesen Avatar aus Ihrem Land werfen? @@ -1609,6 +1380,20 @@ sich nicht mehr bewegen, chatten oder mit der Welt interagieren. Abbrechen + + + [AVATAR_NAME] von Ihrem Land werfen? + + + + + Ungรผltige UUID. @@ -1875,6 +1660,20 @@ Sie bearbeiten dรผrfen. Kein vorderster Floater zum Speichern. + + + Ihre Suchanfrage wurde geรคndert. +Zu kurze Begriffe wurden entfernt. + +Ihre Suchanfrage: [FINALQUERY] + + + + + Ihre Suchbegriffe sind zu kurz. +Es wurde keine Suche durchgefรผhrt. + + Collada-Export fehlgeschlagen: Unbekannter Serverfehler. @@ -1972,6 +1771,12 @@ Keine Parzelle ausgewรคhlt. Kann die Region nicht finden, in der sich dieses Land befindet. + + + Das Fenster 'Land kaufen' kann erst geschlossen werden, +nachdem Second Life den Transaktionspreis geschรคtzt hat. + + Land kann nicht รผbertragen werden: @@ -1991,27 +1796,6 @@ Kann die Region nicht finden, in der sich dieses Land befindet. Bitte melden Sie dies รผber 'Hilfe' -> 'Fehler melden'. - - - Landeigentรผmer kann nicht festgelegt werden: -Keine Parzelle ausgewรคhlt. - - - - - Landkauf nicht mรถglich, da die Auswahl mehrere Regionen umfasst. - -Wรคhlen Sie ein kleineres Gebiet und versuchen Sie es erneut. - - - - - Land kann nicht gekauft werden: -Mehrere Parzellen ausgewรคhlt. - -Wรคhlen Sie eine einzelne Parzelle. - - Land kann nicht รผbertragen werden: @@ -2025,21 +1809,6 @@ Wรคhlen Sie eine einzelne Parzelle. Region nicht gefunden - - - Dieser Ort kann Streaming-Musik abspielen. -Musik erfordert eine Internetverbindung -mit mindestens 768 kbit/s. - -Musik abspielen, wenn verfรผgbar? - - - - Dieser Ort kann Streaming-Medien abspielen. @@ -2056,14 +1825,6 @@ Streaming-Medien abspielen, wenn verfรผgbar? Deaktivieren - - - Land kann nicht gekauft werden: -Warte auf Server fรผr Preisinformationen. - -Bitte versuchen Sie es erneut. - - Land kann nicht รผbertragen werden: @@ -2072,59 +1833,12 @@ Warte auf Server fรผr Eigentรผmerinformationen. Bitte versuchen Sie es erneut. - - - Land kann nicht gekauft werden: -Die Auswahl enthรคlt kein รถffentliches Land. - - - - - Land kann nicht gekauft werden: -Sie haben eine Parzelle ausgewรคhlt, -die einem anderen Einwohner gehรถrt. - - - - - Land kann nicht gekauft werden: -Kann die Region nicht finden, in der sich dieses Land befindet. - -Bitte melden Sie dies รผber 'Hilfe' -> 'Fehler melden'. - - - - - Land kann nicht gekauft werden: -Die Region [REGION] erlaubt keine Landรผbertragung. - - Land kann nicht รผbertragen werden: Die Region [REGION] erlaubt keine Landรผbertragung. - - - Landkauf fรผr Gruppe nicht mรถglich: -Sie sind kein Officer in Ihrer aktuellen Gruppe. - -Wรคhlen Sie รผber 'Bearbeiten' -> 'Gruppen...' eine andere Gruppe aus. - - - - - [AREA] qm von diesem Land kosten [PRICE] L$. -Sie haben nur [BALANCE] L$. - - - - - Land kann nicht aufgegeben werden: -Keine Parzelle ausgewรคhlt. - - Land kann nicht aufgegeben werden: @@ -2369,20 +2083,36 @@ Klicken Sie auf 'IM & Chat anzeigen', um vorhandene Nachrichten un Sie sind nicht berechtigt, Land fรผr die aktive Gruppe zu kaufen. - + + + Freunde kรถnnen sich gegenseitig die Berechtigung +erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen. + +[NAME] Freundschaft anbieten? + + + + + - Freunde kรถnnen sich gegenseitig die Berechtigung -erteilen, sich auf der Karte zu verfolgen und den jeweiligen Online-Status einzusehen. + Freunde kรถnnen sich gegenseitig die Berechtigung +erteilen, sich auf der Karte zu verfolgen und Online-Status Benachrichtigungen zu empfangen. -[NAME] die Freundschaft anbieten? +[NAME] Freundschaft anbieten? + + Mรถchtest du mein Freunde sein? + - Wollen wir Freunde sein? @@ -2451,11 +2181,6 @@ auf ALLEN Lร„NDERN in diesem Sim Lร–SCHEN? Im Web verรถffentlichen - - - Fehler beim Erstellen des Fotos! - - Geben Sie einen Namen fรผr die Anzeige ein. @@ -2720,6 +2445,17 @@ fรผr Unterstรผtzung und einen Link auf die Systemstatus-Webseite auf 'Hilfe [ERROR_MESSAGE] + + + QuickTime wurde deaktiviert, weil Sie eine alte Version verwenden + + + Streaming-Video wurde deaktiviert, weil die QuickTime-Version +auf Ihrem Computer nicht mehr aktuell ist. + +Laden Sie ein Update von http://www.apple.com/quicktime/ herunter. + + Ihr [TYPE]-Ort ist zurzeit nicht verfรผgbar. [HELP] @@ -2852,24 +2588,9 @@ Wรคhlen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. Abbrechen - - - Mรถchten Sie alle geskripteten Objekte von -** [USER_NAME] ** -auf allen Lรคndern in dieser Region, die ihnen nicht gehรถren, zurรผckgeben? - - - - - + - Mรถchten Sie ALLE geskripteten Objekte von -** [USER_NAME] ** -auf ALLEN Lร„NDERN in dieser Region zurรผckgeben? + Mรถchten Sie wirklich alle Objekte zurรผckgeben, die [USER_NAME] gehรถren? + + + Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt. + + + + + Fehler beim Versuch, [NUM_ADDED] Agenten hinzuzufรผgen: +รœberschreitet den Grenzwert [MAX_AGENTS] [LIST_TYPE] um [NUM_EXCESS]. + + Es sind maximal [MAX_GROUPS] zulรคssige Gruppen erlaubt. @@ -2931,11 +2663,6 @@ und zum Standard des 'Zurรผcksetzen'-Tools machen? Abbrechen - - - Es sind maximal [MAX_BANNED] verbannte Einwohner erlaubt. - - Es sind maximal [MAX_MANAGER] verbannte Einwohner erlaub. @@ -3068,22 +2795,14 @@ In Ihren Anwendungsordner herunterladen? Abbrechen - + - Anzeigen erscheinen eine Woche lang auf der Registerkarte 'Anzeigen' -im Suchverzeichnis. - -Fรผllen Sie Ihre Anzeige aus und klicken Sie auf 'Verรถffentlichen...', um sie zum -Verzeichnis hinzuzufรผgen. - -Sie werden gebeten, einen Preis zu bezahlen, wenn Sie auf 'Verรถffentlichen' klicken. -Wenn Sie mehr bezahlen oder ein Benutzer nach Ihren Suchbegriffen sucht, -erscheint Ihre Anzeige weiter oben in der Liste. + Den System-Webbrowser รถffnen, um diesen Inhalt anzuzeigen? - Beim Hinzufรผgen einer neuen Anzeige + Wenn der System-Webbrowser zur Anzeige einer Webseite geรถffnet wird - + + + Besuchen Sie das [SECOND_LIFE] QA-Wiki. + + + Beim Starten eines Browsers, um das QA-Wiki anzuzeigen + + + + Im [SECOND_LIFE] Allgemeine-Fragen-Tracker kรถnnen Sie Fehler und andere Probleme melden. @@ -3248,20 +2981,6 @@ Objekte werden ihren frรผheren Eigentรผmern zurรผckgegeben. Abbrechen - - - Die Release-Hinweise von Second Life anzeigen? - - - Beim Anzeigen der Versionshinweise - - - - Sie sind Officer der Gruppe [GROUP]. @@ -3305,21 +3024,6 @@ Diese Gruppe verlassen? OK - - - Stummschalten nach Name betrifft nur Chat und IM, keine Sounds. -Sie mรผssen den Objektnamen exakt angeben. - - - Objektname - - - - Dieser Name ist bereits stummgeschaltet. @@ -3533,6 +3237,20 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter Abbrechen + + + Mรถchten Sie sich wirklich teleportieren? + + + Beim Teleportieren von einer Landmarke im Inventar + + + + Geben Sie eine kurze Nachricht ein, die @@ -3737,6 +3455,16 @@ Spaceserver wird dadurch stark belastet. OK + + + Es gibt Probleme beim Hinzufรผgen eines neuen Grundstรผcksverwalters. Bei mindestens einem Grundstรผck ist die Verwalterliste voll. + + + + + Problem beim Hinzufรผgen zu dieser Grundstรผcksliste. Bei mindestens einem Grundstรผck ist die Liste voll. + + Notizkarten-Asset konnte nicht geladen werden. @@ -3774,6 +3502,34 @@ Anzeige fรผr [AMOUNT] L$ verรถffentlichen? Abbrechen + + + Enthรคlt diese Anzeige nicht jugendfreie Inhalte? + + + + + + + + Beschรคftigt sich diese Gruppe mit nicht jugendfreien Inhalten? + + + + + Mรถchten Sie diese Region in 2 Minuten neu starten? @@ -3879,6 +3635,19 @@ Wenn aktiviert: Standard: aktiviert + + + Wenn Sie diese Option auswรคhlen, kรถnnen Parzelleneigentรผmer ihre Parzellen nicht in der Suche anzeigen lassen +Standard: aus + + + + + Dieses Kontrollkรคstchen zeigt Folgendes an: +- diese Parzelle in den Suchergebnissen +- die รถffentlichen Objekte dieser Parzelle + + Die Alterseinstufung dieser Region wurde aktualisiert. @@ -4111,12 +3880,34 @@ nur verfรผgbar, wenn 'ร–ffentlich' deaktiviert ist. + + + Geben Sie hier eine E-Mail-Adresse ein, an die +Missbrauchsmeldungen von diesem Grundstรผck gesendet werden. +Wenn dieses Feld leer ist, werden Missbrauchsmeldungen +nur an Linden Lab gesendet. + + Einwohnern auf dieser Liste wird der Zugang zum Grundstรผck verwehrt, unabhรคngig von etwaigen anderen Einstellungen. + + + Die Parzellen auf diesem Grundstรผck kรถnnen รผber eigene Voice- +Channel verfรผgen, die es Einwohnern ermรถglichen, sich mit +anderen Personen in der Nรคhe zu unterhalten. + +Standard: aus + + + + + Diese Version von Second ist mit dem Voice-Chat-Feature in dieser Region nicht kompatibel. Damit Voice-Chat funktioniert, mรผssen Sie Second Life aktualisieren. + + Ein Grundstรผcksvertrag ermรถglicht es Ihnen, Grundstรผcksparzellen zu verkaufen. Ohne Vertrag kรถnnen Sie kein Land verkaufen. Wenn Sie keine Regeln festlegen oder Kรคufern vor dem Kauf keine anderen Informationen รผber das Land bereitstellen mรถchten, kรถnnen Sie die Vertrags-Notizkarte auch leer lassen. Ein Vertrag kann Regeln und Richtlinien, kulturelle Informationen oder einfach nur Ihre eigenen Erwartungen bezรผglich der Landnutzung durch den Kรคufer enthalten. Das kann Zoning, Baubeschrรคnkungen, Zahloptionen und alle mรถglichen anderen Informationen betreffen, die der neue Eigentรผmer Ihrer Meinung nach kennen und akzeptieren sollte. Der Kรคufer muss dem Vertrag durch Auswahl dieses Kontrollkรคstchens zustimmen, bevor der Kauf abgeschlossen werden kann. Grundstรผcksvertrรคge sind jederzeit unter 'Land-Info' fรผr jede Parzelle einsehbar, fรผr die ein Vertrag definiert wurde. @@ -4362,6 +4153,34 @@ funktioniert aber nur, wenn ein Skript mit einem money() Ereignis hinzugefรผgt w Abbrechen + + + Zeitรผberschreitung bei Inventarabfrage vom Server. Wiederholen? + + + Inventarobjekt-Abfrage wiederholen + + + + + + + Wirklich beenden? + + + Beim Beenden von Second Life. + + + + Verwenden Sie dieses Tool, um Verletzungen der Servicebedingungen @@ -4480,16 +4299,13 @@ Linden Lab An dieser Kรถrperstelle ist bereits ein Objekt angebracht. Mรถchten Sie es mit dem ausgewรคhlten Objekt ersetzen? - - Beim Wechseln von Anhรคngen - Beim Wechseln von Anhรคngen - - @@ -4502,16 +4318,13 @@ Objekte erhalten kรถnnen. Mรถchten Sie den Bechรคftigt-Modus verlassen, bevor Sie diese Transaktion abschlieรŸen? - - Beim Bezahlen einer Person oder eines Objekts im Beschรคftigt-Modus - Beim Bezahlen einer Person oder eines Objekts im Beschรคftigt-Modus - - @@ -4590,42 +4403,6 @@ zu erleichtern, oder testen Sie sie, indem Sie sie in die Adressleiste Ihres Bro Beim Kopieren einer SLURL in die Zwischenablage - - - Fehler beim Starten einer neuen IM-Sitzung mit [RECIPIENT]. - [REASON] - - - - - - Fehler beim Starten einer neuen IM-Sitzung mit [RECIPIENT]. - [REASON] - - - - - - Fehler [EVENT] [RECIPIENT]. - [REASON] - - - - - - Ihre IM-Sitzung mit [NAME] muss beendet werden. - [REASON] - - - Die Optionen in diesem Dialog steuern FenstergrรถรŸe und Auflรถsung sowie die Qualitรคt der Grafikdarstellung im Client. Im Fenster 'Einstellungen' > 'Grafik' stehen vier Grafikeinstellungen zur Wahl: Niedrig, Mittel, Hoch und Ultra. Die Grafikeinstellungen lassen sich auch individuell anpassen; aktivieren Sie das Kontrollkรคstchen 'Benutzerdefiniert', um die folgenden Einstellungen zu bearbeiten: @@ -4981,16 +4758,7 @@ Wolkendichte. - Fehler beim Starten einer neuen Chat-Sitzung mit [RECIPIENT]. -[REASON] - - - - - - Fehler beim Starten einer neuen Chat-Sitzung mit [RECIPIENT]. + Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden. [REASON] - Fehler [EVENT] [RECIPIENT]. + [EVENT] [REASON] - - Ihre Chat-Sitzung mit [NAME] muss beendet werden. - [REASON] - Ihre Chat-Sitzung mit [NAME] muss beendet werden. [REASON] @@ -5075,6 +4839,9 @@ Mรถchten Sie auf der Second Life Website eine Altersรผberprรผfung durchfรผhren? + + https://secondlife.com/account/verification.php + @@ -5092,6 +4859,9 @@ Mรถchten Sie die Second Life Website รถffnen, um diese Angaben zu hinterlegen? + + https://secondlife.com/account/ + diff --git a/linden/indra/newview/skins/default/xui/de/floater_chat_history.xml b/linden/indra/newview/skins/default/xui/de/floater_chat_history.xml index ed484fe..731b079 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_chat_history.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_chat_history.xml @@ -1,8 +1,5 @@ -