From 811454f47ea1f3c5cb8971f0fed0959b18bd0747 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Sun, 24 May 2009 02:59:02 -0500 Subject: Second Life viewer sources 1.23.1-RC --- linden/doc/contributions.txt | 14 +- linden/indra/llcommon/lldate.h | 8 + linden/indra/llcommon/llversionviewer.h | 2 +- linden/indra/llmedia/llmediaimplllmozlib.cpp | 20 +- linden/indra/llui/llmenugl.cpp | 23 +- linden/indra/llui/llmenugl.h | 4 + linden/indra/llui/llnotifications.cpp | 9 +- linden/indra/llui/llpanel.cpp | 8 +- linden/indra/llxml/llcontrol.cpp | 25 +- linden/indra/newview/CMakeLists.txt | 1 + linden/indra/newview/app_settings/settings.xml | 2 +- linden/indra/newview/llagent.cpp | 164 +- linden/indra/newview/llfloaterbulkpermission.cpp | 6 + linden/indra/newview/llfloaterbulkpermission.h | 1 + linden/indra/newview/llgroupnotify.cpp | 4 +- linden/indra/newview/llmutelist.cpp | 36 +- linden/indra/newview/llnotify.cpp | 7 +- linden/indra/newview/llnotify.h | 2 +- linden/indra/newview/llpanelclassified.cpp | 28 +- linden/indra/newview/llpanelclassified.h | 2 +- linden/indra/newview/llviewermenu.cpp | 17 + linden/indra/newview/llviewermessage.cpp | 10 +- linden/indra/newview/llviewerwindow.cpp | 9 +- linden/indra/newview/llvoavatar.cpp | 56 +- .../newview/skins/default/xui/de/floater_about.xml | 1 + .../skins/default/xui/de/floater_about_land.xml | 201 +- .../skins/default/xui/de/floater_avatar_picker.xml | 56 +- .../default/xui/de/floater_avatar_textures.xml | 47 +- .../skins/default/xui/de/floater_bulk_perms.xml | 43 + .../skins/default/xui/de/floater_buy_land.xml | 205 +- .../skins/default/xui/de/floater_chat_history.xml | 43 +- .../skins/default/xui/de/floater_customize.xml | 530 +- .../skins/default/xui/de/floater_directory.xml | 307 +- .../skins/default/xui/de/floater_font_test.xml | 6 + .../skins/default/xui/de/floater_group_info.xml | 89 +- .../default/xui/de/floater_instant_message.xml | 43 +- .../xui/de/floater_instant_message_group.xml | 2 +- .../skins/default/xui/de/floater_joystick.xml | 44 +- .../skins/default/xui/de/floater_land_holdings.xml | 21 +- .../skins/default/xui/de/floater_mini_map.xml | 4 + .../default/xui/de/floater_name_description.xml | 2 +- .../skins/default/xui/de/floater_notification.xml | 7 + .../xui/de/floater_notifications_console.xml | 5 + .../default/xui/de/floater_object_im_info.xml | 19 + .../skins/default/xui/de/floater_perm_prefs.xml | 16 + .../skins/default/xui/de/floater_profile.xml | 4 +- .../skins/default/xui/de/floater_report_abuse.xml | 24 +- .../skins/default/xui/de/floater_snapshot.xml | 4 +- .../skins/default/xui/de/floater_sound_preview.xml | 2 +- .../skins/default/xui/de/floater_statistics.xml | 2 + .../newview/skins/default/xui/de/floater_tools.xml | 427 +- .../skins/default/xui/de/floater_world_map.xml | 38 +- .../skins/default/xui/de/menu_inventory.xml | 119 +- .../newview/skins/default/xui/de/menu_mini_map.xml | 8 + .../skins/default/xui/de/menu_pie_attachment.xml | 17 +- .../skins/default/xui/de/menu_pie_avatar.xml | 27 +- .../skins/default/xui/de/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/de/menu_viewer.xml | 27 +- .../newview/skins/default/xui/de/notifications.xml | 7330 ++++++------------ .../newview/skins/default/xui/de/panel_avatar.xml | 54 +- .../default/xui/de/panel_avatar_classified.xml | 51 +- .../skins/default/xui/de/panel_classified.xml | 40 +- .../newview/skins/default/xui/de/panel_event.xml | 33 +- .../skins/default/xui/de/panel_group_general.xml | 14 +- .../skins/default/xui/de/panel_group_invite.xml | 8 +- .../default/xui/de/panel_group_land_money.xml | 44 +- .../skins/default/xui/de/panel_group_roles.xml | 2 +- .../skins/default/xui/de/panel_mini_map.xml | 27 + .../default/xui/de/panel_notifications_channel.xml | 15 + .../skins/default/xui/de/panel_overlaybar.xml | 18 +- .../newview/skins/default/xui/de/panel_place.xml | 4 +- .../skins/default/xui/de/panel_place_small.xml | 27 +- .../default/xui/de/panel_preferences_general.xml | 45 +- .../default/xui/de/panel_preferences_input.xml | 13 +- .../default/xui/de/panel_preferences_voice.xml | 7 +- .../skins/default/xui/de/panel_region_covenant.xml | 93 +- .../skins/default/xui/de/panel_region_general.xml | 72 +- .../indra/newview/skins/default/xui/de/strings.xml | 91 +- .../newview/skins/default/xui/de/ui_strings.xml | 28 + .../default/xui/en-us/floater_avatar_picker.xml | 28 +- .../skins/default/xui/en-us/floater_bulk_perms.xml | 6 +- .../skins/default/xui/en-us/floater_perm_prefs.xml | 2 +- .../skins/default/xui/en-us/notifications.xml | 165 +- .../newview/skins/default/xui/en-us/panel_bars.xml | 4 +- .../xui/en-us/panel_notifications_channel.xml | 2 +- .../default/xui/en-us/panel_region_covenant.xml | 32 +- .../newview/skins/default/xui/en-us/strings.xml | 10 +- .../skins/default/xui/es/floater_about_land.xml | 149 +- .../skins/default/xui/es/floater_avatar_picker.xml | 43 +- .../skins/default/xui/es/floater_bulk_perms.xml | 43 + .../skins/default/xui/es/floater_buy_land.xml | 28 +- .../skins/default/xui/es/floater_customize.xml | 79 +- .../skins/default/xui/es/floater_directory.xml | 118 +- .../skins/default/xui/es/floater_font_test.xml | 6 + .../default/xui/es/floater_instant_message.xml | 3 + .../skins/default/xui/es/floater_joystick.xml | 2 + .../skins/default/xui/es/floater_land_holdings.xml | 5 +- .../skins/default/xui/es/floater_mini_map.xml | 4 + .../default/xui/es/floater_object_im_info.xml | 16 + .../skins/default/xui/es/floater_perm_prefs.xml | 16 + .../skins/default/xui/es/floater_profile.xml | 4 +- .../skins/default/xui/es/floater_report_abuse.xml | 18 +- .../skins/default/xui/es/floater_statistics.xml | 2 + .../newview/skins/default/xui/es/floater_tools.xml | 88 +- .../skins/default/xui/es/floater_world_map.xml | 37 +- .../skins/default/xui/es/menu_inventory.xml | 1 + .../newview/skins/default/xui/es/menu_mini_map.xml | 8 + .../skins/default/xui/es/menu_pie_attachment.xml | 15 +- .../skins/default/xui/es/menu_pie_avatar.xml | 1 + .../skins/default/xui/es/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/es/menu_viewer.xml | 14 +- .../newview/skins/default/xui/es/notifications.xml | 8076 +++++++------------ .../newview/skins/default/xui/es/panel_avatar.xml | 75 +- .../default/xui/es/panel_avatar_classified.xml | 12 +- .../skins/default/xui/es/panel_classified.xml | 12 +- .../newview/skins/default/xui/es/panel_event.xml | 9 + .../skins/default/xui/es/panel_group_general.xml | 13 +- .../skins/default/xui/es/panel_group_invite.xml | 4 +- .../default/xui/es/panel_group_land_money.xml | 10 +- .../skins/default/xui/es/panel_group_roles.xml | 2 +- .../skins/default/xui/es/panel_mini_map.xml | 27 + .../skins/default/xui/es/panel_overlaybar.xml | 1 + .../newview/skins/default/xui/es/panel_place.xml | 4 +- .../skins/default/xui/es/panel_place_small.xml | 5 +- .../default/xui/es/panel_preferences_general.xml | 40 +- .../default/xui/es/panel_preferences_input.xml | 12 +- .../default/xui/es/panel_preferences_voice.xml | 1 + .../skins/default/xui/es/panel_region_covenant.xml | 86 +- .../skins/default/xui/es/panel_region_general.xml | 21 +- .../indra/newview/skins/default/xui/es/strings.xml | 73 +- .../skins/default/xui/es/teleport_strings.xml | 6 +- .../newview/skins/default/xui/es/ui_strings.xml | 28 + .../newview/skins/default/xui/fr/floater_about.xml | 3 +- .../skins/default/xui/fr/floater_about_land.xml | 249 +- .../skins/default/xui/fr/floater_avatar_picker.xml | 53 +- .../default/xui/fr/floater_avatar_textures.xml | 55 +- .../skins/default/xui/fr/floater_bulk_perms.xml | 3 + .../skins/default/xui/fr/floater_buy_land.xml | 22 +- .../skins/default/xui/fr/floater_customize.xml | 185 +- .../skins/default/xui/fr/floater_directory.xml | 214 +- .../skins/default/xui/fr/floater_font_test.xml | 14 +- .../skins/default/xui/fr/floater_group_info.xml | 2 +- .../default/xui/fr/floater_instant_message.xml | 23 +- .../xui/fr/floater_instant_message_group.xml | 2 +- .../skins/default/xui/fr/floater_land_holdings.xml | 21 +- .../skins/default/xui/fr/floater_mini_map.xml | 4 + .../xui/fr/floater_notifications_console.xml | 4 +- .../skins/default/xui/fr/floater_report_abuse.xml | 18 +- .../skins/default/xui/fr/floater_statistics.xml | 2 + .../newview/skins/default/xui/fr/floater_tools.xml | 14 +- .../skins/default/xui/fr/floater_world_map.xml | 49 +- .../newview/skins/default/xui/fr/menu_mini_map.xml | 8 + .../skins/default/xui/fr/menu_pie_avatar.xml | 1 + .../skins/default/xui/fr/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/fr/menu_viewer.xml | 2 +- .../newview/skins/default/xui/fr/notifications.xml | 7284 ++++++------------ .../default/xui/fr/panel_avatar_classified.xml | 17 +- .../skins/default/xui/fr/panel_classified.xml | 14 +- .../newview/skins/default/xui/fr/panel_event.xml | 19 +- .../skins/default/xui/fr/panel_group_general.xml | 52 +- .../default/xui/fr/panel_group_land_money.xml | 18 +- .../skins/default/xui/fr/panel_mini_map.xml | 27 + .../default/xui/fr/panel_notifications_channel.xml | 2 +- .../newview/skins/default/xui/fr/panel_place.xml | 2 +- .../skins/default/xui/fr/panel_place_small.xml | 6 +- .../default/xui/fr/panel_preferences_audio.xml | 24 +- .../default/xui/fr/panel_preferences_general.xml | 29 + .../default/xui/fr/panel_preferences_voice.xml | 7 +- .../skins/default/xui/fr/panel_region_covenant.xml | 92 +- .../skins/default/xui/fr/panel_region_general.xml | 26 +- .../indra/newview/skins/default/xui/fr/strings.xml | 18 + .../newview/skins/default/xui/ja/floater_about.xml | 3 +- .../skins/default/xui/ja/floater_about_land.xml | 164 +- .../skins/default/xui/ja/floater_avatar_picker.xml | 59 +- .../default/xui/ja/floater_avatar_textures.xml | 49 +- .../skins/default/xui/ja/floater_buy_land.xml | 22 +- .../skins/default/xui/ja/floater_customize.xml | 479 +- .../skins/default/xui/ja/floater_directory.xml | 293 +- .../skins/default/xui/ja/floater_font_test.xml | 6 + .../skins/default/xui/ja/floater_group_info.xml | 92 +- .../default/xui/ja/floater_instant_message.xml | 46 +- .../skins/default/xui/ja/floater_land_holdings.xml | 5 +- .../skins/default/xui/ja/floater_mini_map.xml | 4 + .../skins/default/xui/ja/floater_profile.xml | 4 +- .../skins/default/xui/ja/floater_report_abuse.xml | 18 +- .../skins/default/xui/ja/floater_sell_land.xml | 2 +- .../skins/default/xui/ja/floater_statistics.xml | 2 + .../newview/skins/default/xui/ja/floater_tools.xml | 26 +- .../skins/default/xui/ja/floater_world_map.xml | 96 +- .../newview/skins/default/xui/ja/menu_mini_map.xml | 8 + .../skins/default/xui/ja/menu_pie_avatar.xml | 28 +- .../skins/default/xui/ja/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/ja/menu_viewer.xml | 4 +- .../newview/skins/default/xui/ja/notifications.xml | 7298 ++++++------------ .../newview/skins/default/xui/ja/panel_avatar.xml | 52 +- .../default/xui/ja/panel_avatar_classified.xml | 50 +- .../skins/default/xui/ja/panel_classified.xml | 39 +- .../newview/skins/default/xui/ja/panel_event.xml | 47 +- .../skins/default/xui/ja/panel_group_general.xml | 14 +- .../default/xui/ja/panel_group_land_money.xml | 8 +- .../skins/default/xui/ja/panel_mini_map.xml | 27 + .../default/xui/ja/panel_notifications_channel.xml | 2 +- .../skins/default/xui/ja/panel_place_small.xml | 27 +- .../default/xui/ja/panel_preferences_chat.xml | 2 +- .../default/xui/ja/panel_preferences_general.xml | 29 + .../default/xui/ja/panel_preferences_voice.xml | 9 +- .../skins/default/xui/ja/panel_region_covenant.xml | 86 +- .../skins/default/xui/ja/panel_region_general.xml | 78 +- .../indra/newview/skins/default/xui/ja/strings.xml | 18 + .../skins/default/xui/pl/floater_about_land.xml | 158 +- .../default/xui/pl/floater_animation_preview.xml | 6 +- .../skins/default/xui/pl/floater_avatar_picker.xml | 49 +- .../skins/default/xui/pl/floater_bulk_perms.xml | 43 + .../skins/default/xui/pl/floater_buy_land.xml | 62 +- .../skins/default/xui/pl/floater_customize.xml | 446 +- .../skins/default/xui/pl/floater_directory.xml | 131 +- .../skins/default/xui/pl/floater_font_test.xml | 6 + .../default/xui/pl/floater_instant_message.xml | 17 +- .../skins/default/xui/pl/floater_land_holdings.xml | 21 +- .../skins/default/xui/pl/floater_mini_map.xml | 4 + .../default/xui/pl/floater_object_im_info.xml | 16 + .../skins/default/xui/pl/floater_perm_prefs.xml | 16 + .../default/xui/pl/floater_preview_gesture.xml | 37 +- .../skins/default/xui/pl/floater_report_abuse.xml | 18 +- .../xui/pl/floater_skin_preview_template.xml | 26 +- .../skins/default/xui/pl/floater_statistics.xml | 2 + .../newview/skins/default/xui/pl/floater_tools.xml | 88 +- .../skins/default/xui/pl/floater_top_objects.xml | 32 +- .../skins/default/xui/pl/floater_world_map.xml | 78 +- .../skins/default/xui/pl/menu_inventory.xml | 119 +- .../newview/skins/default/xui/pl/menu_mini_map.xml | 8 + .../skins/default/xui/pl/menu_pie_attachment.xml | 17 +- .../skins/default/xui/pl/menu_pie_avatar.xml | 27 +- .../skins/default/xui/pl/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/pl/menu_viewer.xml | 402 +- .../newview/skins/default/xui/pl/notifications.xml | 8003 +++++++------------ .../default/xui/pl/panel_avatar_classified.xml | 38 +- .../skins/default/xui/pl/panel_chat_bar.xml | 9 +- .../skins/default/xui/pl/panel_classified.xml | 32 +- .../newview/skins/default/xui/pl/panel_event.xml | 20 +- .../skins/default/xui/pl/panel_group_general.xml | 51 +- .../skins/default/xui/pl/panel_group_invite.xml | 6 +- .../default/xui/pl/panel_group_land_money.xml | 33 +- .../skins/default/xui/pl/panel_group_roles.xml | 2 +- .../skins/default/xui/pl/panel_mini_map.xml | 27 + .../skins/default/xui/pl/panel_overlaybar.xml | 1 + .../newview/skins/default/xui/pl/panel_place.xml | 4 +- .../skins/default/xui/pl/panel_place_small.xml | 15 +- .../default/xui/pl/panel_preferences_general.xml | 60 +- .../default/xui/pl/panel_preferences_input.xml | 15 +- .../default/xui/pl/panel_preferences_voice.xml | 1 + .../skins/default/xui/pl/panel_region_covenant.xml | 74 +- .../skins/default/xui/pl/panel_region_general.xml | 73 +- .../indra/newview/skins/default/xui/pl/strings.xml | 97 +- .../skins/default/xui/pl/teleport_strings.xml | 4 +- .../newview/skins/default/xui/pl/ui_strings.xml | 28 + .../newview/skins/default/xui/ru/floater_about.xml | 36 +- .../skins/default/xui/ru/floater_about_land.xml | 470 +- .../default/xui/ru/floater_animation_preview.xml | 4 +- .../skins/default/xui/ru/floater_avatar_picker.xml | 51 +- .../skins/default/xui/ru/floater_beacons.xml | 15 + .../skins/default/xui/ru/floater_bulk_perms.xml | 43 + .../skins/default/xui/ru/floater_buy_land.xml | 67 +- .../skins/default/xui/ru/floater_camera.xml | 12 +- .../skins/default/xui/ru/floater_chat_history.xml | 103 +- .../skins/default/xui/ru/floater_customize.xml | 502 +- .../skins/default/xui/ru/floater_directory.xml | 217 +- .../skins/default/xui/ru/floater_font_test.xml | 6 + .../newview/skins/default/xui/ru/floater_im.xml | 8 +- .../default/xui/ru/floater_instant_message.xml | 22 +- .../xui/ru/floater_instant_message_ad_hoc.xml | 8 +- .../xui/ru/floater_instant_message_group.xml | 17 +- .../skins/default/xui/ru/floater_joystick.xml | 38 +- .../skins/default/xui/ru/floater_land_holdings.xml | 22 +- .../default/xui/ru/floater_live_lsleditor.xml | 7 +- .../skins/default/xui/ru/floater_mini_map.xml | 4 + .../newview/skins/default/xui/ru/floater_mute.xml | 2 +- .../default/xui/ru/floater_object_im_info.xml | 16 + .../skins/default/xui/ru/floater_perm_prefs.xml | 16 + .../skins/default/xui/ru/floater_postcard.xml | 13 +- .../default/xui/ru/floater_preview_gesture.xml | 45 +- .../ru/floater_preview_notecard_keep_discard.xml | 18 +- .../skins/default/xui/ru/floater_profile.xml | 4 +- .../skins/default/xui/ru/floater_report_abuse.xml | 140 +- .../skins/default/xui/ru/floater_snapshot.xml | 66 +- .../skins/default/xui/ru/floater_statistics.xml | 2 + .../newview/skins/default/xui/ru/floater_tools.xml | 336 +- .../skins/default/xui/ru/floater_top_objects.xml | 32 +- .../newview/skins/default/xui/ru/floater_tos.xml | 19 +- .../skins/default/xui/ru/floater_world_map.xml | 90 +- .../skins/default/xui/ru/menu_inventory.xml | 121 +- .../newview/skins/default/xui/ru/menu_mini_map.xml | 8 + .../skins/default/xui/ru/menu_pie_attachment.xml | 17 +- .../skins/default/xui/ru/menu_pie_avatar.xml | 27 +- .../skins/default/xui/ru/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/ru/menu_viewer.xml | 407 +- .../newview/skins/default/xui/ru/mime_types.xml | 7 +- .../newview/skins/default/xui/ru/notifications.xml | 8106 +++++++------------- .../newview/skins/default/xui/ru/panel_avatar.xml | 152 +- .../default/xui/ru/panel_avatar_classified.xml | 39 +- .../skins/default/xui/ru/panel_chat_bar.xml | 29 +- .../skins/default/xui/ru/panel_classified.xml | 32 +- .../newview/skins/default/xui/ru/panel_event.xml | 20 +- .../skins/default/xui/ru/panel_group_general.xml | 56 +- .../skins/default/xui/ru/panel_group_invite.xml | 7 +- .../default/xui/ru/panel_group_land_money.xml | 33 +- .../skins/default/xui/ru/panel_group_roles.xml | 2 +- .../newview/skins/default/xui/ru/panel_login.xml | 12 +- .../skins/default/xui/ru/panel_mini_map.xml | 27 + .../skins/default/xui/ru/panel_overlaybar.xml | 28 +- .../newview/skins/default/xui/ru/panel_place.xml | 4 +- .../skins/default/xui/ru/panel_place_small.xml | 15 +- .../default/xui/ru/panel_preferences_chat.xml | 70 +- .../default/xui/ru/panel_preferences_general.xml | 149 +- .../skins/default/xui/ru/panel_preferences_im.xml | 48 +- .../default/xui/ru/panel_preferences_input.xml | 45 +- .../default/xui/ru/panel_preferences_network.xml | 28 +- .../default/xui/ru/panel_preferences_popups.xml | 25 +- .../default/xui/ru/panel_preferences_voice.xml | 35 +- .../skins/default/xui/ru/panel_progress.xml | 15 + .../skins/default/xui/ru/panel_region_covenant.xml | 96 +- .../skins/default/xui/ru/panel_region_debug.xml | 61 +- .../skins/default/xui/ru/panel_region_estate.xml | 71 +- .../skins/default/xui/ru/panel_region_general.xml | 75 +- .../default/xui/ru/panel_speaker_controls.xml | 4 +- .../skins/default/xui/ru/panel_status_bar.xml | 3 +- .../skins/default/xui/ru/panel_voice_controls.xml | 5 +- .../skins/default/xui/ru/panel_voice_remote.xml | 5 +- .../default/xui/ru/panel_voice_remote_expanded.xml | 1 + .../indra/newview/skins/default/xui/ru/strings.xml | 591 +- .../skins/default/xui/ru/teleport_strings.xml | 28 +- .../newview/skins/default/xui/ru/ui_strings.xml | 28 + .../newview/skins/default/xui/uk/floater_about.xml | 38 +- .../skins/default/xui/uk/floater_about_land.xml | 467 +- .../default/xui/uk/floater_animation_preview.xml | 4 +- .../skins/default/xui/uk/floater_avatar_picker.xml | 49 +- .../skins/default/xui/uk/floater_beacons.xml | 15 + .../skins/default/xui/uk/floater_bulk_perms.xml | 43 + .../skins/default/xui/uk/floater_buy_land.xml | 66 +- .../skins/default/xui/uk/floater_camera.xml | 14 +- .../skins/default/xui/uk/floater_chat_history.xml | 103 +- .../skins/default/xui/uk/floater_customize.xml | 514 +- .../skins/default/xui/uk/floater_directory.xml | 216 +- .../skins/default/xui/uk/floater_font_test.xml | 6 + .../default/xui/uk/floater_hardware_settings.xml | 23 +- .../newview/skins/default/xui/uk/floater_im.xml | 8 +- .../default/xui/uk/floater_instant_message.xml | 22 +- .../xui/uk/floater_instant_message_ad_hoc.xml | 8 +- .../xui/uk/floater_instant_message_group.xml | 17 +- .../skins/default/xui/uk/floater_joystick.xml | 38 +- .../skins/default/xui/uk/floater_land_holdings.xml | 22 +- .../default/xui/uk/floater_live_lsleditor.xml | 7 +- .../skins/default/xui/uk/floater_mini_map.xml | 4 + .../newview/skins/default/xui/uk/floater_mute.xml | 2 +- .../default/xui/uk/floater_object_im_info.xml | 16 + .../skins/default/xui/uk/floater_perm_prefs.xml | 16 + .../skins/default/xui/uk/floater_postcard.xml | 13 +- .../default/xui/uk/floater_preview_gesture.xml | 44 +- .../uk/floater_preview_notecard_keep_discard.xml | 18 +- .../skins/default/xui/uk/floater_profile.xml | 4 +- .../skins/default/xui/uk/floater_report_abuse.xml | 143 +- .../skins/default/xui/uk/floater_snapshot.xml | 65 +- .../skins/default/xui/uk/floater_statistics.xml | 2 + .../newview/skins/default/xui/uk/floater_tools.xml | 337 +- .../skins/default/xui/uk/floater_top_objects.xml | 31 +- .../newview/skins/default/xui/uk/floater_tos.xml | 19 +- .../skins/default/xui/uk/floater_world_map.xml | 90 +- .../skins/default/xui/uk/menu_inventory.xml | 121 +- .../newview/skins/default/xui/uk/menu_mini_map.xml | 8 + .../skins/default/xui/uk/menu_pie_attachment.xml | 17 +- .../skins/default/xui/uk/menu_pie_avatar.xml | 27 +- .../skins/default/xui/uk/menu_pie_object.xml | 2 +- .../newview/skins/default/xui/uk/menu_viewer.xml | 407 +- .../newview/skins/default/xui/uk/mime_types.xml | 7 +- .../newview/skins/default/xui/uk/notifications.xml | 8084 +++++++------------ .../newview/skins/default/xui/uk/panel_avatar.xml | 155 +- .../default/xui/uk/panel_avatar_classified.xml | 38 +- .../skins/default/xui/uk/panel_chat_bar.xml | 29 +- .../skins/default/xui/uk/panel_classified.xml | 32 +- .../newview/skins/default/xui/uk/panel_event.xml | 20 +- .../skins/default/xui/uk/panel_group_general.xml | 55 +- .../skins/default/xui/uk/panel_group_invite.xml | 7 +- .../default/xui/uk/panel_group_land_money.xml | 33 +- .../skins/default/xui/uk/panel_group_roles.xml | 2 +- .../newview/skins/default/xui/uk/panel_login.xml | 12 +- .../skins/default/xui/uk/panel_mini_map.xml | 27 + .../skins/default/xui/uk/panel_overlaybar.xml | 30 +- .../newview/skins/default/xui/uk/panel_place.xml | 4 +- .../skins/default/xui/uk/panel_place_small.xml | 15 +- .../default/xui/uk/panel_preferences_chat.xml | 70 +- .../default/xui/uk/panel_preferences_general.xml | 149 +- .../skins/default/xui/uk/panel_preferences_im.xml | 46 +- .../default/xui/uk/panel_preferences_input.xml | 44 +- .../default/xui/uk/panel_preferences_network.xml | 27 +- .../default/xui/uk/panel_preferences_popups.xml | 24 +- .../default/xui/uk/panel_preferences_voice.xml | 35 +- .../skins/default/xui/uk/panel_progress.xml | 15 + .../skins/default/xui/uk/panel_region_covenant.xml | 96 +- .../skins/default/xui/uk/panel_region_debug.xml | 61 +- .../skins/default/xui/uk/panel_region_estate.xml | 71 +- .../skins/default/xui/uk/panel_region_general.xml | 76 +- .../default/xui/uk/panel_speaker_controls.xml | 4 +- .../skins/default/xui/uk/panel_status_bar.xml | 3 +- .../skins/default/xui/uk/panel_voice_controls.xml | 5 +- .../skins/default/xui/uk/panel_voice_remote.xml | 5 +- .../default/xui/uk/panel_voice_remote_expanded.xml | 1 + .../indra/newview/skins/default/xui/uk/strings.xml | 590 +- .../skins/default/xui/uk/teleport_strings.xml | 28 +- .../newview/skins/default/xui/uk/ui_strings.xml | 28 + linden/indra/win_updater/updater.cpp | 273 +- linden/install.xml | 4 +- 411 files changed, 29630 insertions(+), 45169 deletions(-) create mode 100644 linden/indra/newview/skins/default/xui/de/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_notification.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_notifications_console.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/de/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/de/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/de/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/de/panel_notifications_channel.xml create mode 100644 linden/indra/newview/skins/default/xui/de/ui_strings.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/es/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/es/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/es/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/es/ui_strings.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/fr/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ja/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/ja/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ja/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/ja/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ja/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/pl/ui_strings.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_beacons.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/panel_progress.xml create mode 100644 linden/indra/newview/skins/default/xui/ru/ui_strings.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_beacons.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_bulk_perms.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_font_test.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_object_im_info.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_perm_prefs.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/floater_statistics.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/menu_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/panel_mini_map.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/panel_progress.xml create mode 100644 linden/indra/newview/skins/default/xui/uk/ui_strings.xml (limited to 'linden') diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt index 2b55e5e..e84eac1 100644 --- a/linden/doc/contributions.txt +++ b/linden/doc/contributions.txt @@ -170,6 +170,8 @@ Eddy Stryker EponymousDylan Ra VWR-1289 VWR-1465 +Eva Nowicka + CT-324 Farallon Greyskin VWR-2036 Feep Larsson @@ -238,7 +240,11 @@ Hoze Menges VWR-255 Ian Kas VWR-8780 (Russian localization) - [NO JIRA] (Ukranian localization) + [NO JIRA] (Ukranian localization) + CT-322 + CT-325 +Irene Muni + CT-324 Iskar Ariantho VWR-1223 VWR-11759 @@ -278,6 +284,10 @@ Lockhart Cordoso VWR-108 maciek marksman CT-86 +Magnus Balczo + CT-138 +Malwina Dollinger + CT-138 march Korda SVC-1020 Matthew Dowd @@ -524,6 +534,8 @@ Thraxis Epsilon VWR-383 tiamat bingyi CT-246 +TraductoresAnonimos Alter + CT-324 Tue Torok CT-68 CT-69 diff --git a/linden/indra/llcommon/lldate.h b/linden/indra/llcommon/lldate.h index 32825b1..7cc9c8a 100644 --- a/linden/indra/llcommon/lldate.h +++ b/linden/indra/llcommon/lldate.h @@ -140,6 +140,14 @@ public: bool operator!=(const LLDate& rhs) const { return (*this < rhs) || (rhs < *this); } bool operator==(const LLDate& rhs) const { return !(*this != rhs); } + /** + * @brief Compare to epoch UTC. + */ + + bool isNull() const { return mSecondsSinceEpoch == 0.0; } + bool notNull() const { return mSecondsSinceEpoch != 0.0; } + + private: F64 mSecondsSinceEpoch; }; diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index ad3886c..a393a4e 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 23; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/linden/indra/llmedia/llmediaimplllmozlib.cpp b/linden/indra/llmedia/llmediaimplllmozlib.cpp index 689d4b4..7222d19 100644 --- a/linden/indra/llmedia/llmediaimplllmozlib.cpp +++ b/linden/indra/llmedia/llmediaimplllmozlib.cpp @@ -50,9 +50,9 @@ #include "GL/gl.h" #endif -#if LL_LINUX +#if defined(LL_LINUX) || defined(WIN32) #include -#endif +#endif // defined(LL_LINUX) || defined(WIN32) #include @@ -90,23 +90,23 @@ LLMediaImplLLMozLib::LLMediaImplLLMozLib() : // (static) super-initialization - called once at application startup bool LLMediaImplLLMozLib::startup( LLMediaManagerData* init_data ) { -#if LL_LINUX +#if defined(LL_LINUX) || defined(WIN32) // Yuck, Mozilla's GTK callbacks play with the locale - push/pop // the locale to protect it, as exotic/non-C locales // causes our code lots of general critical weirdness // and crashness. (SL-35450) static std::string saved_locale; saved_locale = setlocale(LC_ALL, NULL); -#endif // LL_LINUX +#endif // defined(LL_LINUX) || defined(WIN32) bool result = LLMozLib::getInstance()->init( init_data->getBrowserApplicationDir(), init_data->getBrowserComponentDir(), init_data->getBrowserProfileDir(), init_data->getBrowserParentWindow() ); -#if LL_LINUX +#if defined(LL_LINUX) || defined(WIN32) setlocale(LC_ALL, saved_locale.c_str() ); -#endif // LL_LINUX +#endif // defined(LL_LINUX) || defined(WIN32) return result; } @@ -139,10 +139,10 @@ bool LLMediaImplLLMozLib::init() if ( mWindowId ) return false; -#if LL_LINUX +#if defined(LL_LINUX) || defined(WIN32) static std::string saved_locale; saved_locale = setlocale(LC_ALL, NULL); -#endif // LL_LINUX +#endif // defined(LL_LINUX) || defined(WIN32) mWindowId = LLMozLib::getInstance()->createBrowserWindow( mBrowserWindowWidth, mBrowserWindowHeight ); @@ -162,9 +162,9 @@ bool LLMediaImplLLMozLib::init() // set media depth now we have created a browser window and know what it is setMediaDepth( LLMozLib::getInstance()->getBrowserDepth( mWindowId ) ); -#if LL_LINUX +#if defined(LL_LINUX) || defined(WIN32) setlocale(LC_ALL, saved_locale.c_str() ); -#endif // LL_LINUX +#endif // defined(LL_LINUX) || defined(WIN32) return true; } diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp index f2f2aae..253b30b 100644 --- a/linden/indra/llui/llmenugl.cpp +++ b/linden/indra/llui/llmenugl.cpp @@ -2178,7 +2178,9 @@ void LLMenuGL::arrange( void ) { if ((*item_iter)->getVisible()) { - if (!getTornOff() && width + (*item_iter)->getNominalWidth() > max_width - spillover_item_width) + if (!getTornOff() + && item_iter != mItems.begin() // Don't spillover the first item! + && width + (*item_iter)->getNominalWidth() > max_width - spillover_item_width) { // no room for any more items createSpilloverBranch(); @@ -2188,8 +2190,9 @@ void LLMenuGL::arrange( void ) { LLMenuItemGL* itemp = (*spillover_iter); removeChild(itemp); - mSpilloverMenu->append(itemp); + mSpilloverMenu->appendNoArrange(itemp); // *NOTE:Mani Favor addChild() in merge with skinning } + mSpilloverMenu->arrange(); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch mItems.erase(item_iter, mItems.end()); mItems.push_back(mSpilloverBranch); @@ -2215,7 +2218,9 @@ void LLMenuGL::arrange( void ) { if ((*item_iter)->getVisible()) { - if (!getTornOff() && height + (*item_iter)->getNominalHeight() > max_height - spillover_item_height) + if (!getTornOff() + && item_iter != mItems.begin() // Don't spillover the first item! + && height + (*item_iter)->getNominalHeight() > max_height - spillover_item_height) { // no room for any more items createSpilloverBranch(); @@ -2225,8 +2230,9 @@ void LLMenuGL::arrange( void ) { LLMenuItemGL* itemp = (*spillover_iter); removeChild(itemp); - mSpilloverMenu->append(itemp); + mSpilloverMenu->appendNoArrange(itemp); // *NOTE:Mani Favor addChild() in merge with skinning } + mSpilloverMenu->arrange(); // *NOTE: Mani Remove line in merge with skinning/viewer2.0 branch mItems.erase(item_iter, mItems.end()); mItems.push_back(mSpilloverBranch); addChild(mSpilloverBranch); @@ -2477,6 +2483,15 @@ BOOL LLMenuGL::append( LLMenuItemGL* item ) return TRUE; } +// *NOTE:Mani - appendNoArrange() should be removed when merging to skinning/viewer2.0 +// Its added as a fix to a viewer 1.23 bug that has already been address by skinning work. +BOOL LLMenuGL::appendNoArrange( LLMenuItemGL* item ) +{ + mItems.push_back( item ); + addChild( item ); + return TRUE; +} + // add a separator to this menu BOOL LLMenuGL::appendSeparator( const std::string &separator_name ) { diff --git a/linden/indra/llui/llmenugl.h b/linden/indra/llui/llmenugl.h index a2ef968..030b81b 100644 --- a/linden/indra/llui/llmenugl.h +++ b/linden/indra/llui/llmenugl.h @@ -439,6 +439,10 @@ public: // Add the menu item to this menu. virtual BOOL append( LLMenuItemGL* item ); + // *NOTE:Mani - appendNoArrange() should be removed when merging to skinning/viewer2.0 + // Its added as a fix to a viewer 1.23 bug that has already been address by skinning work. + virtual BOOL appendNoArrange( LLMenuItemGL* item ); + // add a separator to this menu virtual BOOL appendSeparator( const std::string &separator_name = LLStringUtil::null ); diff --git a/linden/indra/llui/llnotifications.cpp b/linden/indra/llui/llnotifications.cpp index 2ae9672..6b7dd0a 100644 --- a/linden/indra/llui/llnotifications.cpp +++ b/linden/indra/llui/llnotifications.cpp @@ -310,7 +310,7 @@ void LLNotificationForm::addElement(const std::string& type, const std::string& LLSD element; element["type"] = type; element["name"] = name; - element["label"] = name; + element["text"] = name; element["value"] = value; element["index"] = mFormData.size(); mFormData.append(element); @@ -525,7 +525,12 @@ std::string LLNotification::getSelectedOptionName(const LLSD& response) void LLNotification::respond(const LLSD& response) { mRespondedTo = true; - LLNotificationFunctorRegistry::instance().getFunctor(mResponseFunctorName)(asLLSD(), response); + // look up the functor + LLNotificationFunctorRegistry::ResponseFunctor functor = + LLNotificationFunctorRegistry::instance().getFunctor(mResponseFunctorName); + // and then call it + functor(asLLSD(), response); + if (mTemporaryResponder) { LLNotificationFunctorRegistry::instance().unregisterFunctor(mResponseFunctorName); diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp index 92d045d..28780c7 100644 --- a/linden/indra/llui/llpanel.cpp +++ b/linden/indra/llui/llpanel.cpp @@ -1085,11 +1085,15 @@ struct LLLayoutStack::LLEmbeddedPanel { if (mOrientation == HORIZONTAL) { - return mVisibleAmt * clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinWidth / (F32)mPanel->getRect().getWidth()); + F32 collapse_amt = + clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinWidth / (F32)llmax(1, mPanel->getRect().getWidth())); + return mVisibleAmt * collapse_amt; } else { - return mVisibleAmt * clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinHeight / (F32)mPanel->getRect().getHeight()); + F32 collapse_amt = + clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinHeight / (F32)llmax(1, mPanel->getRect().getHeight()))); + return mVisibleAmt * collapse_amt; } } diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp index d9ed45a..8bd04d7 100644 --- a/linden/indra/llxml/llcontrol.cpp +++ b/linden/indra/llxml/llcontrol.cpp @@ -309,10 +309,13 @@ BOOL LLControlGroup::declareControl(const std::string& name, eControlType type, { if (persist && existing_control->isType(type)) { - // Sometimes we need to declare a control *after* it has been loaded from a settings file. - LLSD cur_value = existing_control->getValue(); // get the current value - existing_control->setDefaultValue(initial_val); // set the default to the declared value - existing_control->setValue(cur_value); // now set to the loaded value + if (!existing_control->llsd_compare(existing_control->getDefault(), initial_val)) + { + // Sometimes we need to declare a control *after* it has been loaded from a settings file. + LLSD cur_value = existing_control->getValue(); // get the current value + existing_control->setDefaultValue(initial_val); // set the default to the declared value + existing_control->setValue(cur_value); // now set to the loaded value + } } else { @@ -1059,10 +1062,10 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v } U32 validitems = 0; - bool persist = true; bool hidefromsettingseditor = false; for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr) { + bool persist = true; name = (*itr).first; control_map = (*itr).second; @@ -1171,13 +1174,13 @@ static std::string get_warn_name(const std::string& name) void LLControlGroup::addWarning(const std::string& name) { + // Note: may get called more than once per warning + // (e.g. if allready loaded from a settings file), + // but that is OK, declareBOOL will handle it std::string warnname = get_warn_name(name); - if(mNameTable.find(warnname) == mNameTable.end()) - { - std::string comment = std::string("Enables ") + name + std::string(" warning dialog"); - declareBOOL(warnname, TRUE, comment); - mWarnings.insert(warnname); - } + std::string comment = std::string("Enables ") + name + std::string(" warning dialog"); + declareBOOL(warnname, TRUE, comment); + mWarnings.insert(warnname); } BOOL LLControlGroup::getWarning(const std::string& name) diff --git a/linden/indra/newview/CMakeLists.txt b/linden/indra/newview/CMakeLists.txt index a7d6c8f..5fe7de3 100644 --- a/linden/indra/newview/CMakeLists.txt +++ b/linden/indra/newview/CMakeLists.txt @@ -1200,6 +1200,7 @@ set(viewer_XUI_FILES skins/default/xui/en-us/panel_preferences_input.xml skins/default/xui/en-us/panel_preferences_network.xml skins/default/xui/en-us/panel_preferences_popups.xml + skins/default/xui/en-us/panel_preferences_skins.xml skins/default/xui/en-us/panel_preferences_voice.xml skins/default/xui/en-us/panel_preferences_web.xml skins/default/xui/en-us/panel_progress.xml diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 0081893..108ce86 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -11629,7 +11629,7 @@ Type Boolean Value - 1 + 0 WaterEditPresets diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index b0bb2a9..cf50ec8 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -1314,167 +1314,165 @@ LLQuaternion LLAgent::getQuat() const //----------------------------------------------------------------------------- // calcFocusOffset() //----------------------------------------------------------------------------- -LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y) +LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 original_focus_point, S32 x, S32 y) { // calculate offset based on view direction BOOL is_avatar = object->isAvatar(); + // since the animation system allows the avatars facing and position to deviate from its nominal LLViewerObject/LLDrawable transform + // calculate the focus-specific orientation for avatars based off the pelvis joint LLMatrix4 obj_matrix = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldMatrix() : object->getRenderMatrix(); LLQuaternion obj_rot = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldRotation() : object->getRenderRotation(); LLVector3 obj_pos = is_avatar ? ((LLVOAvatar*)object)->mPelvisp->getWorldPosition() : object->getRenderPosition(); - LLQuaternion inv_obj_rot = ~obj_rot; - - LLVector3 obj_dir_abs = obj_pos - LLViewerCamera::getInstance()->getOrigin(); - obj_dir_abs.rotVec(inv_obj_rot); - obj_dir_abs.normalize(); - obj_dir_abs.abs(); - + LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation LLVector3 object_extents = object->getScale(); // make sure they object extents are non-zero object_extents.clamp(0.001f, F32_MAX); - LLVector3 object_half_extents = object_extents * 0.5f; - obj_dir_abs.mV[VX] = obj_dir_abs.mV[VX] / object_extents.mV[VX]; - obj_dir_abs.mV[VY] = obj_dir_abs.mV[VY] / object_extents.mV[VY]; - obj_dir_abs.mV[VZ] = obj_dir_abs.mV[VZ] / object_extents.mV[VZ]; + // obj_to_cam_ray is unit vector pointing from object center to camera, in the coordinate frame of the object + LLVector3 obj_to_cam_ray = obj_pos - LLViewerCamera::getInstance()->getOrigin(); + obj_to_cam_ray.rotVec(inv_obj_rot); + obj_to_cam_ray.normalize(); - LLVector3 normal; - if (obj_dir_abs.mV[VX] > obj_dir_abs.mV[VY] && obj_dir_abs.mV[VX] > obj_dir_abs.mV[VZ]) + // obj_to_cam_ray_proportions are the (positive) ratios of + // the obj_to_cam_ray x,y,z components with the x,y,z object dimensions. + LLVector3 obj_to_cam_ray_proportions; + obj_to_cam_ray_proportions.mV[VX] = llabs(obj_to_cam_ray.mV[VX] / object_extents.mV[VX]); + obj_to_cam_ray_proportions.mV[VY] = llabs(obj_to_cam_ray.mV[VY] / object_extents.mV[VY]); + obj_to_cam_ray_proportions.mV[VZ] = llabs(obj_to_cam_ray.mV[VZ] / object_extents.mV[VZ]); + + // find the largest ratio stored in obj_to_cam_ray_proportions + // this corresponds to the object's local axial plane (XY, YZ, XZ) that is *most* facing the camera + LLVector3 longest_object_axis; + // is x-axis longest? + if (obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VY] + && obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VZ]) { - normal.setVec(obj_matrix.getFwdRow4()); + // then grab it + longest_object_axis.setVec(obj_matrix.getFwdRow4()); } - else if (obj_dir_abs.mV[VY] > obj_dir_abs.mV[VZ]) + // is y-axis longest? + else if (obj_to_cam_ray_proportions.mV[VY] > obj_to_cam_ray_proportions.mV[VZ]) { - normal.setVec(obj_matrix.getLeftRow4()); + // then grab it + longest_object_axis.setVec(obj_matrix.getLeftRow4()); } + // otherwise, use z axis else { - normal.setVec(obj_matrix.getUpRow4()); + longest_object_axis.setVec(obj_matrix.getUpRow4()); } - normal.normalize(); + + // Use this axis as the normal to project mouse click on to plane with that normal, at the object center. + // This generates a point behind the mouse cursor that is approximately in the middle of the object in + // terms of depth. + // We do this to allow the camera rotation tool to "tumble" the object by rotating the camera. + // If the focus point were the object surface under the mouse, camera rotation would introduce an undesirable + // eccentricity to the object orientation + LLVector3 focus_plane_normal(longest_object_axis); + focus_plane_normal.normalize(); LLVector3d focus_pt_global; - // RN: should we check return value for valid pick? - gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), normal); + gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), focus_plane_normal); LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global); - // find vector from camera to focus point in object coordinates - LLVector3 camera_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin(); - // convert to object-local space - camera_focus_vec.rotVec(inv_obj_rot); + + // find vector from camera to focus point in object space + LLVector3 camera_to_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin(); + camera_to_focus_vec.rotVec(inv_obj_rot); // find vector from object origin to focus point in object coordinates - LLVector3 focus_delta = focus_pt - obj_pos; + LLVector3 focus_offset_from_object_center = focus_pt - obj_pos; // convert to object-local space - focus_delta.rotVec(inv_obj_rot); + focus_offset_from_object_center.rotVec(inv_obj_rot); - // calculate clip percentage needed to get focus offset back in bounds along the camera_focus axis + // We need to project the focus point back into the bounding box of the focused object. + // Do this by calculating the XYZ scale factors needed to get focus offset back in bounds along the camera_focus axis LLVector3 clip_fraction; + // for each axis... for (U32 axis = VX; axis <= VZ; axis++) { - F32 clip_amt; - if (focus_delta.mV[axis] > 0.f) + //...calculate distance that focus offset sits outside of bounding box along that axis... + //NOTE: dist_out_of_bounds keeps the sign of focus_offset_from_object_center + F32 dist_out_of_bounds; + if (focus_offset_from_object_center.mV[axis] > 0.f) { - clip_amt = llmax(0.f, focus_delta.mV[axis] - object_half_extents.mV[axis]); + dist_out_of_bounds = llmax(0.f, focus_offset_from_object_center.mV[axis] - (object_extents.mV[axis] * 0.5f)); } else { - clip_amt = llmin(0.f, focus_delta.mV[axis] + object_half_extents.mV[axis]); + dist_out_of_bounds = llmin(0.f, focus_offset_from_object_center.mV[axis] + (object_extents.mV[axis] * 0.5f)); } - // don't divide by very small nunber - if (llabs(camera_focus_vec.mV[axis]) < 0.0001f) + //...then calculate the scale factor needed to push camera_to_focus_vec back in bounds along current axis + if (llabs(camera_to_focus_vec.mV[axis]) < 0.0001f) { + // don't divide by very small number clip_fraction.mV[axis] = 0.f; } else { - clip_fraction.mV[axis] = clip_amt / camera_focus_vec.mV[axis]; + clip_fraction.mV[axis] = dist_out_of_bounds / camera_to_focus_vec.mV[axis]; } } LLVector3 abs_clip_fraction = clip_fraction; abs_clip_fraction.abs(); - // find greatest shrinkage factor and + // find axis of focus offset that is *most* outside the bounding box and use that to // rescale focus offset to inside object extents - if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY] && - abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ]) + if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY] + && abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ]) { - focus_delta -= clip_fraction.mV[VX] * camera_focus_vec; + focus_offset_from_object_center -= clip_fraction.mV[VX] * camera_to_focus_vec; } else if (abs_clip_fraction.mV[VY] > abs_clip_fraction.mV[VZ]) { - focus_delta -= clip_fraction.mV[VY] * camera_focus_vec; + focus_offset_from_object_center -= clip_fraction.mV[VY] * camera_to_focus_vec; } else { - focus_delta -= clip_fraction.mV[VZ] * camera_focus_vec; + focus_offset_from_object_center -= clip_fraction.mV[VZ] * camera_to_focus_vec; } // convert back to world space - focus_delta.rotVec(obj_rot); + focus_offset_from_object_center.rotVec(obj_rot); + // now, based on distance of camera from object relative to object size + // push the focus point towards the near surface of the object when (relatively) close to the objcet + // or keep the focus point in the object middle when (relatively) far + // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars + // is almost always "tumble about middle" and not "spin around surface point" if (!is_avatar) { - //unproject relative clicked coordinate from window coordinate using GL - /*GLint viewport[4]; - GLdouble modelview[16]; - GLdouble projection[16]; - GLfloat winX, winY, winZ; - GLdouble posX, posY, posZ; - - // convert our matrices to something that has a multiply that works - glh::matrix4f newModel((F32*)LLViewerCamera::getInstance()->getModelview().mMatrix); - glh::matrix4f tmpObjMat((F32*)obj_matrix.mMatrix); - newModel *= tmpObjMat; - - for(U32 i = 0; i < 16; ++i) - { - modelview[i] = newModel.m[i]; - projection[i] = LLViewerCamera::getInstance()->getProjection().mMatrix[i/4][i%4]; - } - glGetIntegerv( GL_VIEWPORT, viewport ); - - winX = ((F32)x) * gViewerWindow->getDisplayScale().mV[VX]; - winY = ((F32)y) * gViewerWindow->getDisplayScale().mV[VY]; - glReadPixels( llfloor(winX), llfloor(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); - - gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);*/ - - LLVector3 obj_rel = pos_agent - object->getRenderPosition(); + LLVector3 obj_rel = original_focus_point - object->getRenderPosition(); - LLVector3 obj_center = LLVector3(0, 0, 0) * object->getRenderMatrix(); - //now that we have the object relative position, we should bias toward the center of the object //based on the distance of the camera to the focus point vs. the distance of the camera to the focus F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis()); - F32 viewDist = dist_vec(obj_center + obj_rel, LLViewerCamera::getInstance()->getOrigin()); + F32 viewDist = dist_vec(obj_pos + obj_rel, LLViewerCamera::getInstance()->getOrigin()); LLBBox obj_bbox = object->getBoundingBoxAgent(); F32 bias = 0.f; + // virtual_camera_pos is the camera position we are simulating by backing the camera off + // and adjusting the FOV LLVector3 virtual_camera_pos = gAgent.getPosAgentFromGlobal(mFocusTargetGlobal + (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor)); - if(obj_bbox.containsPointAgent(virtual_camera_pos)) - { - // if the camera is inside the object (large, hollow objects, for example) - // force focus point all the way to destination depth, away from object center - bias = 1.f; - } - else + // if the camera is inside the object (large, hollow objects, for example) + // leave focus point all the way to destination depth, away from object center + if(!obj_bbox.containsPointAgent(virtual_camera_pos)) { // perform magic number biasing of focus point towards surface vs. planar center bias = clamp_rescale(relDist/viewDist, 0.1f, 0.7f, 0.0f, 1.0f); + obj_rel = lerp(focus_offset_from_object_center, obj_rel, bias); } - - obj_rel = lerp(focus_delta, obj_rel, bias); - - return LLVector3(obj_rel); + + focus_offset_from_object_center = obj_rel; } - return LLVector3(focus_delta.mV[VX], focus_delta.mV[VY], focus_delta.mV[VZ]); + return focus_offset_from_object_center; } //----------------------------------------------------------------------------- diff --git a/linden/indra/newview/llfloaterbulkpermission.cpp b/linden/indra/newview/llfloaterbulkpermission.cpp index 4697296..d4e1e98 100644 --- a/linden/indra/newview/llfloaterbulkpermission.cpp +++ b/linden/indra/newview/llfloaterbulkpermission.cpp @@ -61,6 +61,7 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed) : mDone(FALSE mID.generate(); LLUICtrlFactory::getInstance()->buildFloater(this,"floater_bulk_perms.xml"); childSetEnabled("next_owner_transfer", gSavedSettings.getBOOL("BulkChangeNextOwnerCopy")); + childSetAction("help", onHelpBtn, this); childSetAction("apply", onApplyBtn, this); childSetAction("close", onCloseBtn, this); childSetAction("check_all", onCheckAll, this); @@ -149,6 +150,11 @@ void LLFloaterBulkPermission::onApplyBtn(void* user_data) self->doApply(); } +void LLFloaterBulkPermission::onHelpBtn(void* user_data) +{ + LLNotifications::instance().add("HelpBulkPermission"); +} + void LLFloaterBulkPermission::onCloseBtn(void* user_data) { LLFloaterBulkPermission* self = static_cast(user_data); diff --git a/linden/indra/newview/llfloaterbulkpermission.h b/linden/indra/newview/llfloaterbulkpermission.h index 09af270..a26b5b4 100644 --- a/linden/indra/newview/llfloaterbulkpermission.h +++ b/linden/indra/newview/llfloaterbulkpermission.h @@ -76,6 +76,7 @@ private: U8 key, bool is_new); + static void onHelpBtn(void* user_data); static void onCloseBtn(void* user_data); static void onApplyBtn(void* user_data); static void onCommitCopy(LLUICtrl* ctrl, void* data); diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp index 5358699..b2a7587 100644 --- a/linden/indra/newview/llgroupnotify.cpp +++ b/linden/indra/newview/llgroupnotify.cpp @@ -184,7 +184,9 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif")); text->appendStyledText(subject + "\n",false,false,headerstyle); - text->appendStyledText(time_stamp.asRFC1123(),false,false,datestyle); + + LLDate notice_date = time_stamp.notNull() ? time_stamp : LLDate::now(); + text->appendStyledText(notice_date.asRFC1123(),false,false,datestyle); // Sadly, our LLTextEditor can't handle both styled and unstyled text // at the same time. Hence this space must be styled. JC text->appendColoredText(std::string(" "),false,false,LLColor4::grey4); diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp index 8413304..40b1c64 100644 --- a/linden/indra/newview/llmutelist.cpp +++ b/linden/indra/newview/llmutelist.cpp @@ -67,7 +67,6 @@ #include "llfloaterchat.h" #include "llimpanel.h" #include "llimview.h" -#include "lltrans.h" #include "llnotifications.h" #include "lluistring.h" #include "llviewerobject.h" @@ -507,35 +506,42 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n U32 temp_data = (U32) (uintptr_t) user_data; LLMuteList::EAutoReason reason = (LLMuteList::EAutoReason)temp_data; - std::string auto_message; + std::string notif_name; switch (reason) { default: case LLMuteList::AR_IM: - auto_message = LLTrans::getString("AutoUnmuteByIM"); + notif_name = "AutoUnmuteByIM"; break; case LLMuteList::AR_INVENTORY: - auto_message = LLTrans::getString("AutoUnmuteByInventory"); + notif_name = "AutoUnmuteByInventory"; break; case LLMuteList::AR_MONEY: - auto_message = LLTrans::getString("AutoUnmuteByMoney"); + notif_name = "AutoUnmuteByMoney"; break; } - std::string message = LLNotification::format(auto_message, - LLSD().insert("FIRST", first_name).insert("LAST", last_name)); - - if (reason == LLMuteList::AR_IM) + LLSD args; + args["FIRST"] = first_name; + args["LAST"] = last_name; + + LLNotificationPtr notif_ptr = LLNotifications::instance().add(notif_name, args); + if (notif_ptr) { - LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id); - if (timp) + std::string message = notif_ptr->getMessage(); + + if (reason == LLMuteList::AR_IM) { - timp->addHistoryLine(message); + LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id); + if (timp) + { + timp->addHistoryLine(message); + } } - } - LLChat auto_chat(message); - LLFloaterChat::addChat(auto_chat, FALSE, FALSE); + LLChat auto_chat(message); + LLFloaterChat::addChat(auto_chat, FALSE, FALSE); + } } diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp index 3c3f824..da0029a 100644 --- a/linden/indra/newview/llnotify.cpp +++ b/linden/indra/newview/llnotify.cpp @@ -297,12 +297,12 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, continue; } - addButton(form_element["name"].asString(), TRUE, form_element["default"].asBoolean()); + addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean()); } if (mNumButtons == 0) { - addButton("OK", FALSE, TRUE); + addButton("OK", "OK", FALSE, TRUE); mAddedDefaultBtn = TRUE; } @@ -324,7 +324,7 @@ LLNotifyBox::~LLNotifyBox() } // virtual -LLButton* LLNotifyBox::addButton(const std::string& name, BOOL is_option, BOOL is_default) +LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, BOOL is_option, BOOL is_default) { // make caution notification buttons slightly narrower // so that 3 of them can fit without overlapping the "next" button @@ -365,6 +365,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, BOOL is_option, BOOL i btn = new LLButton(name, btn_rect, "", onClickButton, userdata); + btn->setLabel(label); btn->setFont(font); if (mIsCaution) diff --git a/linden/indra/newview/llnotify.h b/linden/indra/newview/llnotify.h index fb345d5..0e29046 100644 --- a/linden/indra/newview/llnotify.h +++ b/linden/indra/newview/llnotify.h @@ -72,7 +72,7 @@ protected: /*virtual*/ ~LLNotifyBox(); - LLButton* addButton(std::string const &name, BOOL is_option, BOOL is_default); + LLButton* addButton(std::string const &name, const std::string& label, BOOL is_option, BOOL is_default); /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp index afaaea2..a3ee93c 100644 --- a/linden/indra/newview/llpanelclassified.cpp +++ b/linden/indra/newview/llpanelclassified.cpp @@ -760,10 +760,9 @@ void LLPanelClassified::refresh() if( mMatureCombo->getCurrentIndex() == 0 ) { // It's a new panel. - // PG regions must have PG classifieds. AO must have mature. - // Only Mature can be PG or Mature. + // PG regions should have PG classifieds. AO should have mature. - constrainAccessCombo(); + setDefaultAccessCombo(); } } else @@ -1007,7 +1006,7 @@ void LLPanelClassified::onClickSet(void* data) self->mLocationEditor->setText(location_text); self->mLocationChanged = true; - self->constrainAccessCombo(); + self->setDefaultAccessCombo(); // Set this to null so it updates on the next save. self->mParcelID.setNull(); @@ -1137,35 +1136,22 @@ void LLFloaterPriceForListing::buttonCore(S32 button, void* data) } } -void LLPanelClassified::constrainAccessCombo() +void LLPanelClassified::setDefaultAccessCombo() { - // Location changed. - // PG regions must have PG classifieds. AO must have mature. - // Only Mature can be PG or Mature. + // PG regions should have PG classifieds. AO should have mature. - bool pref_visible = TRUE; - - S32 force_access = MATURE_UNDEFINED; LLViewerRegion *regionp = gAgent.getRegion(); switch( regionp->getSimAccess() ) { case SIM_ACCESS_PG: - force_access = PG_CONTENT; + mMatureCombo->setCurrentByIndex(PG_CONTENT); break; case SIM_ACCESS_ADULT: - force_access = MATURE_CONTENT; + mMatureCombo->setCurrentByIndex(MATURE_CONTENT); break; default: // You are free to move about the cabin. break; } - - if ( force_access != MATURE_UNDEFINED ) - { - pref_visible = FALSE; - mMatureCombo->setCurrentByIndex(force_access); - } - - mMatureCombo->setEnabled(pref_visible); } diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h index 68a5a33..417eddf 100644 --- a/linden/indra/newview/llpanelclassified.h +++ b/linden/indra/newview/llpanelclassified.h @@ -120,7 +120,7 @@ protected: static void focusReceived(LLFocusableElement* ctrl, void* data); static void onCommitAny(LLUICtrl* ctrl, void* data); - void constrainAccessCombo(); // Force AO and PG regions to proper classified access + void setDefaultAccessCombo(); // Default AO and PG regions to proper classified access BOOL checkDirty(); // Update and return mDirty diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 26a8c02..85ca5d0 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -212,6 +212,7 @@ #include "llwlanimator.h" #include "llwlparammanager.h" #include "llwaterparammanager.h" +#include "llfloaternotificationsconsole.h" #include "lltexlayer.h" @@ -297,6 +298,8 @@ void handle_dump_group_info(void *); void handle_dump_capabilities_info(void *); void handle_dump_focus(void*); +// Advanced->Consoles menu +void handle_show_notifications_console(void*); void handle_region_dump_settings(void*); void handle_region_dump_temp_asset_data(void*); void handle_region_clear_temp_asset_data(void*); @@ -746,7 +749,16 @@ void init_client_menu(LLMenuGL* menu) (void*)gDebugView->mMemoryView, '0', MASK_CONTROL|MASK_SHIFT ) ); #endif + + sub->appendSeparator(); + + // Debugging view for unified notifications + sub->append(new LLMenuItemCallGL("Notifications Console...", + &handle_show_notifications_console, NULL, NULL, '5', MASK_CONTROL|MASK_SHIFT )); + + sub->appendSeparator(); + sub->append(new LLMenuItemCallGL("Region Info to Debug Console", &handle_region_dump_settings, NULL)); sub->append(new LLMenuItemCallGL("Group Info to Debug Console", @@ -2601,6 +2613,11 @@ void handle_region_dump_settings(void*) } } +void handle_show_notifications_console(void *) +{ + LLFloaterNotificationConsole::showInstance(); +} + void handle_dump_group_info(void *) { llinfos << "group " << gAgent.mGroupName << llendl; diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index de1d6dd..b69585f 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -5475,7 +5475,15 @@ void process_covenant_reply(LLMessageSystem* msg, void**) LLFloaterBuyLand::updateEstateName(estate_name); // standard message, not from system - std::string last_modified = std::string("Last Modified ") + formatted_time((time_t)covenant_timestamp); + std::string last_modified; + if (covenant_timestamp == 0) + { + last_modified = LLTrans::getString("covenant_never_modified"); + } + else + { + last_modified = LLTrans::getString("covenant_modified") + " " + formatted_time((time_t)covenant_timestamp); + } LLPanelEstateCovenant::updateLastModified(last_modified); LLPanelLandCovenant::updateLastModified(last_modified); diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index def1ecc..8b40908 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -2449,12 +2449,11 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) } } - // Debugging view for unified notifications -- we need Ctrl+Shift+Alt to get it - // since Ctrl+Shift maps to Nighttime under windlight. + // Debugging view for unified notifications: CTRL-SHIFT-5 + // *FIXME: Having this special-cased right here (just so this can be invoked from the login screen) sucks. if ((MASK_SHIFT & mask) - && (MASK_CONTROL & mask) - && (MASK_ALT & mask) - && ('N' == key || 'n' == key)) + && (MASK_CONTROL & mask) + && ('5' == key)) { LLFloaterNotificationConsole::showInstance(); return TRUE; diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index b06652a..3491dd3 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp @@ -1451,6 +1451,7 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) LLVector3 pos = getRenderPosition(); newMin = pos - buffer; newMax = pos + buffer; + float max_attachment_span = DEFAULT_MAX_PRIM_SCALE * 5.0f; //stretch bounding box by joint positions for (polymesh_map_t::iterator i = mMeshes.begin(); i != mMeshes.end(); ++i) @@ -1487,8 +1488,18 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax) if (bridge) { const LLVector3* ext = bridge->getSpatialExtents(); - update_min_max(newMin,newMax,ext[0]); - update_min_max(newMin,newMax,ext[1]); + LLVector3 distance = (ext[1] - ext[0]); + + // Only add the prim to spatial extents calculations if it isn't a megaprim. + // max_attachment_span calculated at the start of the function + // (currently 5 times our max prim size) + if (distance.mV[0] < max_attachment_span + && distance.mV[1] < max_attachment_span + && distance.mV[2] < max_attachment_span) + { + update_min_max(newMin,newMax,ext[0]); + update_min_max(newMin,newMax,ext[1]); + } } } } @@ -4142,7 +4153,8 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) const bool should_alpha_mask = mHasBakedHair && isTextureDefined(TEX_HEAD_BAKED) && isTextureDefined(TEX_UPPER_BAKED) && isTextureDefined(TEX_LOWER_BAKED) && mBakedTextureData[BAKED_HEAD].mIsLoaded && mBakedTextureData[BAKED_UPPER].mIsLoaded && mBakedTextureData[BAKED_LOWER].mIsLoaded - && !LLDrawPoolAlpha::sShowDebugAlpha; // Don't alpha mask if "Highlight Transparent" checked + && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked + && !(isSelf() && gAgent.cameraCustomizeAvatar()); // don't alpha mask if in customize mode LLGLState test(GL_ALPHA_TEST, should_alpha_mask); @@ -4179,11 +4191,8 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender) { - if (!mIsDummy) - { - LLGLEnable blend(GL_BLEND); - LLGLEnable test(GL_ALPHA_TEST); - } + LLGLState blend(GL_BLEND, !mIsDummy); + LLGLState test(GL_ALPHA_TEST, !mIsDummy); num_indices += renderTransparent(first_pass); } } @@ -4261,7 +4270,7 @@ U32 LLVOAvatar::renderRigid() if (isTextureVisible(TEX_EYES_BAKED) || mIsDummy) { // If the meshes need to be drawn, enable alpha masking but not blending - bool should_alpha_mask = mHasBakedHair && mBakedTextureData[BAKED_EYES].mIsLoaded; + bool should_alpha_mask = mHasBakedHair && mBakedTextureData[BAKED_EYES].mIsLoaded && !(isSelf() && gAgent.cameraCustomizeAvatar()); LLGLState test(GL_ALPHA_TEST, should_alpha_mask); if (should_alpha_mask) @@ -6948,10 +6957,6 @@ void LLVOAvatar::updateMeshTextures() } else { - for (U32 i = 0; i < mBakedTextureData[BAKED_HAIR].mMeshes.size(); i++) - { - mBakedTextureData[BAKED_HAIR].mMeshes[i]->setColor( 1.f, 1.f, 1.f, 1.f ); - } mHasBakedHair = TRUE; } @@ -7761,7 +7766,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } LLMemType mt(LLMemType::MTYPE_AVATAR); - + // llinfos << "processAvatarAppearance start " << mID << llendl; BOOL is_first_appearance_message = !mFirstAppearanceMessageReceived; @@ -7789,6 +7794,18 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) unpackTEMessage(mesgsys, _PREHASH_ObjectData); // dumpAvatarTEs( "POST processAvatarAppearance()" ); + // prevent the overwriting of valid baked textures with invalid baked textures + for (U8 baked_index = 0; baked_index < mBakedTextureData.size(); baked_index++) + { + if (!isTextureDefined(mBakedTextureData[baked_index].mTextureIndex) + && mBakedTextureData[baked_index].mLastTextureIndex != IMG_DEFAULT + && baked_index != BAKED_SKIRT) + { + setTEImage(mBakedTextureData[baked_index].mTextureIndex, gImageList.getImage(mBakedTextureData[baked_index].mLastTextureIndex)); + } + } + + //llinfos << "Received AvatarAppearance: " << (mIsSelf ? "(self): " : "(other): ") << std::endl << // (isTextureDefined(TEX_HEAD_BAKED) ? "HEAD " : "head " ) << (getTEImage(TEX_HEAD_BAKED)->getID()) << std::endl << // (isTextureDefined(TEX_UPPER_BAKED) ? "UPPER " : "upper " ) << (getTEImage(TEX_UPPER_BAKED)->getID()) << std::endl << @@ -8095,6 +8112,17 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) { setLocalTexture(*local_tex_iter, getTEImage(*local_tex_iter), TRUE); } + + // ! BACKWARDS COMPATIBILITY ! + // Workaround for viewing avatars from old viewers that haven't baked hair textures. + // This is paired with similar code in updateMeshTextures that sets hair mesh color. + if (i == BAKED_HAIR) + { + for (U32 i = 0; i < mBakedTextureData[BAKED_HAIR].mMeshes.size(); i++) + { + mBakedTextureData[BAKED_HAIR].mMeshes[i]->setColor( 1.f, 1.f, 1.f, 1.f ); + } + } } } diff --git a/linden/indra/newview/skins/default/xui/de/floater_about.xml b/linden/indra/newview/skins/default/xui/de/floater_about.xml index 238dfd5..b9bd98b 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about.xml @@ -20,6 +20,7 @@ SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) xmlrpc-epi Copyright (C) 2000 Epinions, Inc. zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. Alle Rechte vorbehalten. Details siehe licenses.txt. diff --git a/linden/indra/newview/skins/default/xui/de/floater_about_land.xml b/linden/indra/newview/skins/default/xui/de/floater_about_land.xml index c2b22ca..6c33843 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -8,6 +8,18 @@ Beschreibung: + + Typ: + + + Mainland / Homestead + + + Einstufung: + + + Adult + Eigentümer: @@ -21,7 +33,7 @@