From cc92525b0df952659102d2e5adcc4140fea7f371 Mon Sep 17 00:00:00 2001 From: Adam Moss Date: Mon, 4 May 2009 17:43:26 +0000 Subject: QAR-1476 Combo-merge to trunk: Viewer 1.23 RC0 and Simulator 1.26.3 svn merge -r118927:118939 svn+ssh://svn.lindenlab.com/svn/linden/branches/viewer/viewer-1.23.0-merge-2-combo-QAR-1476 this is a composite of... svn merge -r115088:118182 svn+ssh://svn.lindenlab.com/svn/linden/branches/viewer/viewer_1-23 conflicts resolved: C doc/contributions.txt C indra/llaudio/audioengine.cpp C indra/newview/CMakeLists.txt C indra/newview/llfloaterlandholdings.cpp C indra/newview/llpaneldirbrowser.cpp C indra/newview/llpanelgrouplandmoney.cpp C indra/newview/llpreviewscript.cpp C indra/newview/llviewermenu.cpp C indra/newview/skins/default/xui/en-us/notifications.xml and... svn merge -r116937:118673 svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.26 minor-to-trivial conflicts resolved: C indra/llcommon/llversionserver.h C indra/newsim/llrezdata.cpp C indra/newsim/llstate.cpp C indra/upgrade/schema_version/sequence/3/index_log_paypal.sql --- doc/contributions.txt | 70 + etc/message.xml | 18 +- indra/cmake/PNG.cmake | 8 +- indra/cmake/ZLIB.cmake | 2 +- indra/llcharacter/CMakeLists.txt | 1 + indra/llcharacter/llbvhconsts.h | 52 + indra/llcharacter/llbvhloader.h | 8 +- indra/llcharacter/llkeyframemotion.cpp | 107 +- indra/llcharacter/llkeyframemotion.h | 17 +- indra/llcommon/imageids.h | 2 +- indra/llcommon/llversionserver.h | 2 +- indra/llimage/CMakeLists.txt | 1 + indra/llinventory/llinventory.h | 10 + indra/llinventory/llparcel.cpp | 5 +- indra/llmath/lloctree.h | 10 + indra/llmessage/lldispatcher.cpp | 47 +- indra/llmessage/llmessagereader.h | 6 + indra/llmessage/llregionpresenceverifier.cpp | 31 +- indra/llmessage/llregionpresenceverifier.h | 2 + indra/llmessage/lltemplatemessagereader.cpp | 44 +- indra/llmessage/message_prehash.cpp | 5 +- indra/llmessage/message_prehash.h | 4 +- indra/llrender/llfontgl.cpp | 4 +- indra/llui/llnotifications.cpp | 27 +- indra/llui/llnotifications.h | 40 +- indra/llui/lltextbox.cpp | 2 +- indra/llui/lltextparser.cpp | 2 +- indra/llui/llview.cpp | 2 - indra/llvfs/llvfs.cpp | 104 +- indra/llvfs/llvfs.h | 18 +- indra/newview/CMakeLists.txt | 4 +- indra/newview/app_settings/settings.xml | 13 +- indra/newview/gpu_table.txt | 20 +- .../installers/windows/installer_template.nsi | 8 +- indra/newview/llagent.cpp | 36 +- indra/newview/llagent.h | 5 +- indra/newview/llappviewer.cpp | 115 +- indra/newview/llappviewer.h | 3 +- indra/newview/lldrawpool.h | 6 +- indra/newview/lldrawpoolavatar.cpp | 61 - indra/newview/llface.cpp | 6 - indra/newview/llfloaterbuyland.cpp | 6 +- indra/newview/llfloaterimagepreview.cpp | 30 + indra/newview/llfloaterimagepreview.h | 3 + indra/newview/llfloaterland.cpp | 35 +- indra/newview/llfloaterlandholdings.cpp | 41 +- indra/newview/llfloaternotificationsconsole.cpp | 2 +- indra/newview/llfloaterregioninfo.cpp | 49 +- indra/newview/llfloatersnapshot.cpp | 3 +- indra/newview/llfloaterurldisplay.cpp | 4 +- indra/newview/llimpanel.cpp | 4 + indra/newview/llmenucommands.cpp | 7 - indra/newview/llmenucommands.h | 1 - indra/newview/llpanelclassified.cpp | 73 +- indra/newview/llpanelclassified.h | 2 + indra/newview/llpanelgrouplandmoney.cpp | 51 +- indra/newview/llpanelgrouproles.cpp | 2 +- indra/newview/llpanellandmedia.cpp | 106 +- indra/newview/llpanellandmedia.h | 6 +- indra/newview/llpanelplace.cpp | 41 +- indra/newview/llpanelplace.h | 5 +- indra/newview/llproductinforequest.cpp | 92 + indra/newview/llproductinforequest.h | 60 + indra/newview/llprogressview.cpp | 12 +- indra/newview/llspatialpartition.cpp | 54 +- indra/newview/llstartup.cpp | 6 + indra/newview/lltexlayer.cpp | 6 + indra/newview/lltoolbar.cpp | 12 - indra/newview/lltoolbar.h | 1 - indra/newview/llviewerjoint.cpp | 22 +- indra/newview/llviewerjoint.h | 4 +- indra/newview/llviewerjointattachment.cpp | 2 +- indra/newview/llviewerjointattachment.h | 2 +- indra/newview/llviewerjointmesh.cpp | 13 +- indra/newview/llviewerjointmesh.h | 2 +- indra/newview/llviewermenu.cpp | 41 +- indra/newview/llviewermessage.cpp | 23 +- indra/newview/llviewerobject.cpp | 9 +- indra/newview/llviewerparcelmgr.cpp | 23 +- indra/newview/llviewerregion.cpp | 9 +- indra/newview/llviewerwindow.cpp | 5 +- indra/newview/llvoavatar.cpp | 91 +- indra/newview/llvoavatar.h | 8 +- indra/newview/llvovolume.cpp | 15 +- indra/newview/llworldmapview.cpp | 83 +- indra/newview/pipeline.h | 2 + .../newview/skins/default/xui/da/floater_about.xml | 1 + .../skins/default/xui/da/floater_about_land.xml | 450 +- .../default/xui/da/floater_animation_preview.xml | 80 +- .../skins/default/xui/da/floater_auction.xml | 6 +- .../skins/default/xui/da/floater_avatar_picker.xml | 4 +- .../default/xui/da/floater_avatar_textures.xml | 22 +- .../skins/default/xui/da/floater_beacons.xml | 23 +- .../skins/default/xui/da/floater_build_options.xml | 10 +- .../newview/skins/default/xui/da/floater_bumps.xml | 6 +- .../skins/default/xui/da/floater_buy_contents.xml | 12 +- .../skins/default/xui/da/floater_buy_currency.xml | 34 +- .../skins/default/xui/da/floater_buy_land.xml | 90 +- .../skins/default/xui/da/floater_buy_object.xml | 18 +- .../skins/default/xui/da/floater_camera.xml | 2 +- .../skins/default/xui/da/floater_choose_group.xml | 2 +- .../skins/default/xui/da/floater_color_picker.xml | 6 +- .../skins/default/xui/da/floater_critical.xml | 2 +- .../skins/default/xui/da/floater_customize.xml | 320 +- .../default/xui/da/floater_day_cycle_options.xml | 43 +- .../skins/default/xui/da/floater_env_settings.xml | 26 + .../skins/default/xui/da/floater_gesture.xml | 16 + .../default/xui/da/floater_hardware_settings.xml | 40 + indra/newview/skins/default/xui/da/floater_hud.xml | 2 + indra/newview/skins/default/xui/da/floater_im.xml | 45 + .../skins/default/xui/da/floater_image_preview.xml | 52 + .../skins/default/xui/da/floater_inspect.xml | 13 + .../skins/default/xui/da/floater_inventory.xml | 68 +- .../xui/da/floater_inventory_item_properties.xml | 18 +- .../xui/da/floater_inventory_view_finder.xml | 24 + .../skins/default/xui/da/floater_joystick.xml | 60 +- .../skins/default/xui/da/floater_lagmeter.xml | 41 +- .../skins/default/xui/da/floater_land_holdings.xml | 20 +- .../default/xui/da/floater_live_lsleditor.xml | 12 +- .../skins/default/xui/da/floater_lsl_guide.xml | 2 +- .../skins/default/xui/da/floater_media_browser.xml | 4 +- .../skins/default/xui/da/floater_mem_leaking.xml | 18 + .../skins/default/xui/da/floater_mute_object.xml | 10 +- .../skins/default/xui/da/floater_openobject.xml | 6 +- indra/newview/skins/default/xui/da/floater_pay.xml | 6 +- .../skins/default/xui/da/floater_pay_object.xml | 10 +- .../skins/default/xui/da/floater_postcard.xml | 16 +- .../skins/default/xui/da/floater_preferences.xml | 8 +- .../default/xui/da/floater_preview_animation.xml | 8 +- .../default/xui/da/floater_preview_classified.xml | 2 +- .../skins/default/xui/da/floater_preview_event.xml | 2 +- .../default/xui/da/floater_preview_gesture.xml | 21 +- .../default/xui/da/floater_preview_notecard.xml | 7 +- .../skins/default/xui/da/floater_preview_sound.xml | 4 +- .../default/xui/da/floater_preview_texture.xml | 2 +- .../skins/default/xui/da/floater_region_info.xml | 2 + .../skins/default/xui/da/floater_report_abuse.xml | 94 +- .../skins/default/xui/da/floater_script_debug.xml | 4 +- .../default/xui/da/floater_script_preview.xml | 2 +- .../skins/default/xui/da/floater_script_queue.xml | 2 +- .../skins/default/xui/da/floater_script_search.xml | 6 +- .../skins/default/xui/da/floater_select_key.xml | 4 +- .../skins/default/xui/da/floater_sell_land.xml | 20 +- .../default/xui/da/floater_settings_debug.xml | 8 +- .../skins/default/xui/da/floater_snapshot.xml | 70 +- .../skins/default/xui/da/floater_sound_preview.xml | 6 +- .../skins/default/xui/da/floater_telehub.xml | 18 +- .../skins/default/xui/da/floater_texture_ctrl.xml | 8 +- .../newview/skins/default/xui/da/floater_tools.xml | 476 +- .../skins/default/xui/da/floater_top_objects.xml | 55 + indra/newview/skins/default/xui/da/floater_tos.xml | 10 +- .../skins/default/xui/da/floater_url_entry.xml | 12 + .../newview/skins/default/xui/da/floater_water.xml | 103 + .../default/xui/da/floater_wearable_save_as.xml | 4 +- .../default/xui/da/floater_windlight_options.xml | 228 + .../skins/default/xui/da/floater_world_map.xml | 61 +- .../skins/default/xui/da/menu_inventory.xml | 108 +- indra/newview/skins/default/xui/da/menu_login.xml | 2 +- indra/newview/skins/default/xui/da/menu_slurl.xml | 4 +- indra/newview/skins/default/xui/da/menu_viewer.xml | 372 +- indra/newview/skins/default/xui/da/mime_types.xml | 230 + .../newview/skins/default/xui/da/notifications.xml | 1782 ++++++ .../skins/default/xui/da/panel_audio_device.xml | 25 + .../newview/skins/default/xui/da/panel_friends.xml | 26 + .../skins/default/xui/da/panel_group_general.xml | 79 + .../skins/default/xui/da/panel_group_invite.xml | 30 + .../default/xui/da/panel_group_land_money.xml | 80 + .../skins/default/xui/da/panel_group_notices.xml | 73 + .../skins/default/xui/da/panel_group_roles.xml | 161 + .../newview/skins/default/xui/da/panel_groups.xml | 18 + indra/newview/skins/default/xui/da/panel_login.xml | 28 +- .../default/xui/da/panel_preferences_chat.xml | 94 +- .../default/xui/da/panel_preferences_general.xml | 106 +- .../default/xui/da/panel_preferences_graphics1.xml | 70 +- .../skins/default/xui/da/panel_region_covenant.xml | 50 + .../skins/default/xui/da/panel_region_debug.xml | 51 + .../skins/default/xui/da/panel_region_estate.xml | 71 + .../skins/default/xui/da/panel_region_general.xml | 46 + .../skins/default/xui/da/panel_region_terrain.xml | 30 + .../skins/default/xui/da/panel_region_texture.xml | 57 + .../skins/default/xui/da/panel_scrolling_param.xml | 12 + .../skins/default/xui/da/panel_status_bar.xml | 44 + .../newview/skins/default/xui/da/role_actions.xml | 201 + indra/newview/skins/default/xui/da/strings.xml | 391 +- .../skins/default/xui/da/teleport_strings.xml | 88 + .../skins/default/xui/de/floater_about_land.xml | 8 +- .../skins/default/xui/de/floater_report_abuse.xml | 18 +- .../skins/default/xui/de/floater_sell_land.xml | 1 + .../skins/default/xui/de/floater_world_map.xml | 6 +- .../newview/skins/default/xui/de/notifications.xml | 5770 +++++++++++++++++++ .../skins/default/xui/de/panel_group_general.xml | 12 +- .../default/xui/de/panel_group_land_money.xml | 2 +- .../skins/default/xui/de/panel_group_notices.xml | 2 +- indra/newview/skins/default/xui/de/panel_login.xml | 2 +- .../skins/default/xui/de/panel_region_general.xml | 10 +- .../newview/skins/default/xui/es/floater_about.xml | 36 +- .../skins/default/xui/es/floater_about_land.xml | 565 +- .../default/xui/es/floater_animation_preview.xml | 143 +- .../skins/default/xui/es/floater_auction.xml | 21 +- .../skins/default/xui/es/floater_avatar_picker.xml | 24 +- .../default/xui/es/floater_avatar_textures.xml | 54 +- .../skins/default/xui/es/floater_beacons.xml | 15 + .../skins/default/xui/es/floater_build_options.xml | 13 +- .../newview/skins/default/xui/es/floater_bumps.xml | 16 +- .../skins/default/xui/es/floater_buy_contents.xml | 21 +- .../skins/default/xui/es/floater_buy_currency.xml | 54 +- .../skins/default/xui/es/floater_buy_land.xml | 292 +- .../skins/default/xui/es/floater_buy_object.xml | 27 +- .../skins/default/xui/es/floater_camera.xml | 12 + .../skins/default/xui/es/floater_choose_group.xml | 6 +- .../skins/default/xui/es/floater_color_picker.xml | 17 +- .../skins/default/xui/es/floater_critical.xml | 8 +- .../skins/default/xui/es/floater_customize.xml | 619 +- .../default/xui/es/floater_day_cycle_options.xml | 94 + .../default/xui/es/floater_device_settings.xml | 2 + .../skins/default/xui/es/floater_env_settings.xml | 23 + .../skins/default/xui/es/floater_gesture.xml | 23 +- .../default/xui/es/floater_hardware_settings.xml | 38 + indra/newview/skins/default/xui/es/floater_hud.xml | 2 + indra/newview/skins/default/xui/es/floater_im.xml | 50 +- .../skins/default/xui/es/floater_image_preview.xml | 32 +- .../skins/default/xui/es/floater_inspect.xml | 11 + .../skins/default/xui/es/floater_inventory.xml | 65 +- .../xui/es/floater_inventory_item_properties.xml | 46 +- .../xui/es/floater_inventory_view_finder.xml | 42 +- .../skins/default/xui/es/floater_joystick.xml | 83 + .../skins/default/xui/es/floater_lagmeter.xml | 152 + .../skins/default/xui/es/floater_land_holdings.xml | 35 +- .../default/xui/es/floater_live_lsleditor.xml | 15 +- .../skins/default/xui/es/floater_lsl_guide.xml | 7 + .../skins/default/xui/es/floater_media_browser.xml | 19 + .../skins/default/xui/es/floater_mem_leaking.xml | 18 + .../skins/default/xui/es/floater_moveview.xml | 22 +- .../skins/default/xui/es/floater_mute_object.xml | 12 + .../skins/default/xui/es/floater_my_friends.xml | 7 + .../skins/default/xui/es/floater_openobject.xml | 10 +- indra/newview/skins/default/xui/es/floater_pay.xml | 26 +- .../skins/default/xui/es/floater_pay_object.xml | 36 +- .../skins/default/xui/es/floater_post_process.xml | 53 + .../skins/default/xui/es/floater_postcard.xml | 32 +- .../skins/default/xui/es/floater_preferences.xml | 11 +- .../default/xui/es/floater_preview_animation.xml | 10 +- .../default/xui/es/floater_preview_classified.xml | 2 + .../skins/default/xui/es/floater_preview_event.xml | 2 + .../default/xui/es/floater_preview_gesture.xml | 64 +- .../default/xui/es/floater_preview_notecard.xml | 14 +- .../skins/default/xui/es/floater_preview_sound.xml | 12 +- .../default/xui/es/floater_preview_texture.xml | 8 +- .../skins/default/xui/es/floater_region_info.xml | 2 + .../skins/default/xui/es/floater_report_abuse.xml | 190 +- .../skins/default/xui/es/floater_script_debug.xml | 6 +- .../default/xui/es/floater_script_preview.xml | 6 +- .../skins/default/xui/es/floater_script_queue.xml | 6 +- .../skins/default/xui/es/floater_script_search.xml | 18 +- .../skins/default/xui/es/floater_select_key.xml | 7 + .../skins/default/xui/es/floater_sell_land.xml | 38 +- .../default/xui/es/floater_settings_debug.xml | 19 +- .../skins/default/xui/es/floater_snapshot.xml | 85 +- .../skins/default/xui/es/floater_sound_preview.xml | 23 +- .../skins/default/xui/es/floater_telehub.xml | 30 +- .../skins/default/xui/es/floater_texture_ctrl.xml | 33 +- .../newview/skins/default/xui/es/floater_tools.xml | 546 +- .../skins/default/xui/es/floater_top_objects.xml | 71 +- indra/newview/skins/default/xui/es/floater_tos.xml | 24 +- .../skins/default/xui/es/floater_url_entry.xml | 12 + .../newview/skins/default/xui/es/floater_water.xml | 88 + .../default/xui/es/floater_wearable_save_as.xml | 10 +- .../default/xui/es/floater_windlight_options.xml | 189 + .../skins/default/xui/es/floater_world_map.xml | 85 +- .../skins/default/xui/es/menu_inventory.xml | 119 +- indra/newview/skins/default/xui/es/menu_login.xml | 13 + indra/newview/skins/default/xui/es/menu_slurl.xml | 6 + indra/newview/skins/default/xui/es/menu_viewer.xml | 380 +- indra/newview/skins/default/xui/es/mime_types.xml | 230 + .../newview/skins/default/xui/es/notifications.xml | 5759 +++++++++++++++++++ .../skins/default/xui/es/panel_audio_device.xml | 25 + .../newview/skins/default/xui/es/panel_friends.xml | 20 + .../skins/default/xui/es/panel_group_general.xml | 100 +- .../skins/default/xui/es/panel_group_invite.xml | 37 +- .../default/xui/es/panel_group_land_money.xml | 87 +- .../skins/default/xui/es/panel_group_notices.xml | 65 +- .../skins/default/xui/es/panel_group_roles.xml | 165 +- .../newview/skins/default/xui/es/panel_groups.xml | 15 + indra/newview/skins/default/xui/es/panel_login.xml | 36 +- .../default/xui/es/panel_preferences_chat.xml | 73 +- .../default/xui/es/panel_preferences_general.xml | 144 +- .../default/xui/es/panel_preferences_graphics1.xml | 187 +- .../skins/default/xui/es/panel_region_covenant.xml | 32 +- .../skins/default/xui/es/panel_region_debug.xml | 64 +- .../skins/default/xui/es/panel_region_estate.xml | 87 +- .../skins/default/xui/es/panel_region_general.xml | 72 +- .../skins/default/xui/es/panel_region_terrain.xml | 43 +- .../skins/default/xui/es/panel_region_texture.xml | 46 +- .../skins/default/xui/es/panel_scrolling_param.xml | 10 +- .../skins/default/xui/es/panel_status_bar.xml | 54 +- indra/newview/skins/default/xui/es/strings.xml | 421 ++ .../skins/default/xui/es/teleport_strings.xml | 74 + .../skins/default/xui/fr/floater_about_land.xml | 9 +- .../skins/default/xui/fr/floater_bulk_perms.xml | 40 + .../skins/default/xui/fr/floater_buy_land.xml | 173 +- .../skins/default/xui/fr/floater_customize.xml | 20 +- .../skins/default/xui/fr/floater_joystick.xml | 32 +- .../skins/default/xui/fr/floater_media_browser.xml | 4 +- .../skins/default/xui/fr/floater_notification.xml | 7 + .../xui/fr/floater_notifications_console.xml | 5 + .../skins/default/xui/fr/floater_perm_prefs.xml | 16 + .../skins/default/xui/fr/floater_report_abuse.xml | 18 +- .../skins/default/xui/fr/floater_script_search.xml | 16 +- .../skins/default/xui/fr/floater_snapshot.xml | 4 +- .../skins/default/xui/fr/floater_sound_preview.xml | 2 +- .../newview/skins/default/xui/fr/floater_tools.xml | 148 +- .../skins/default/xui/fr/floater_world_map.xml | 17 +- .../skins/default/xui/fr/menu_inventory.xml | 7 +- indra/newview/skins/default/xui/fr/menu_viewer.xml | 24 +- .../newview/skins/default/xui/fr/notifications.xml | 5732 +++++++++++++++++++ .../skins/default/xui/fr/panel_group_general.xml | 13 +- .../skins/default/xui/fr/panel_group_invite.xml | 9 +- .../default/xui/fr/panel_group_land_money.xml | 2 +- .../skins/default/xui/fr/panel_group_roles.xml | 2 +- indra/newview/skins/default/xui/fr/panel_login.xml | 2 +- .../default/xui/fr/panel_notifications_channel.xml | 15 + .../default/xui/fr/panel_preferences_general.xml | 12 +- .../skins/default/xui/fr/panel_region_general.xml | 11 +- indra/newview/skins/default/xui/fr/strings.xml | 55 +- .../newview/skins/default/xui/it/floater_about.xml | 36 + .../skins/default/xui/it/floater_about_land.xml | 428 ++ .../default/xui/it/floater_animation_preview.xml | 163 + .../skins/default/xui/it/floater_auction.xml | 9 + .../skins/default/xui/it/floater_avatar_picker.xml | 15 + .../default/xui/it/floater_avatar_textures.xml | 30 + .../skins/default/xui/it/floater_beacons.xml | 15 + .../skins/default/xui/it/floater_build_options.xml | 8 + .../newview/skins/default/xui/it/floater_bumps.xml | 21 + .../skins/default/xui/it/floater_buy_contents.xml | 21 + .../skins/default/xui/it/floater_buy_currency.xml | 66 + .../skins/default/xui/it/floater_buy_land.xml | 228 + .../skins/default/xui/it/floater_buy_object.xml | 26 + .../skins/default/xui/it/floater_camera.xml | 12 + .../skins/default/xui/it/floater_choose_group.xml | 8 + .../skins/default/xui/it/floater_color_picker.xml | 30 + .../skins/default/xui/it/floater_critical.xml | 11 + .../skins/default/xui/it/floater_customize.xml | 427 ++ .../default/xui/it/floater_day_cycle_options.xml | 94 + .../default/xui/it/floater_device_settings.xml | 2 + .../skins/default/xui/it/floater_env_settings.xml | 23 + .../skins/default/xui/it/floater_gesture.xml | 15 + .../default/xui/it/floater_hardware_settings.xml | 38 + indra/newview/skins/default/xui/it/floater_hud.xml | 2 + indra/newview/skins/default/xui/it/floater_im.xml | 45 + .../skins/default/xui/it/floater_image_preview.xml | 52 + .../skins/default/xui/it/floater_inspect.xml | 11 + .../skins/default/xui/it/floater_inventory.xml | 47 + .../xui/it/floater_inventory_item_properties.xml | 85 + .../xui/it/floater_inventory_view_finder.xml | 24 + .../skins/default/xui/it/floater_joystick.xml | 83 + .../skins/default/xui/it/floater_lagmeter.xml | 152 + .../skins/default/xui/it/floater_land_holdings.xml | 38 + .../default/xui/it/floater_live_lsleditor.xml | 12 + .../skins/default/xui/it/floater_lsl_guide.xml | 7 + .../skins/default/xui/it/floater_media_browser.xml | 19 + .../skins/default/xui/it/floater_mem_leaking.xml | 18 + .../skins/default/xui/it/floater_moveview.xml | 11 + .../skins/default/xui/it/floater_mute_object.xml | 12 + .../skins/default/xui/it/floater_my_friends.xml | 7 + .../skins/default/xui/it/floater_openobject.xml | 8 + indra/newview/skins/default/xui/it/floater_pay.xml | 21 + .../skins/default/xui/it/floater_pay_object.xml | 30 + .../skins/default/xui/it/floater_post_process.xml | 53 + .../skins/default/xui/it/floater_postcard.xml | 36 + .../skins/default/xui/it/floater_preferences.xml | 8 + .../default/xui/it/floater_preview_animation.xml | 8 + .../default/xui/it/floater_preview_classified.xml | 2 + .../skins/default/xui/it/floater_preview_event.xml | 2 + .../default/xui/it/floater_preview_gesture.xml | 61 + .../default/xui/it/floater_preview_notecard.xml | 16 + .../skins/default/xui/it/floater_preview_sound.xml | 8 + .../default/xui/it/floater_preview_texture.xml | 9 + .../skins/default/xui/it/floater_region_info.xml | 2 + .../skins/default/xui/it/floater_report_abuse.xml | 180 + .../skins/default/xui/it/floater_script_debug.xml | 6 + .../default/xui/it/floater_script_preview.xml | 6 + .../skins/default/xui/it/floater_script_queue.xml | 4 + .../skins/default/xui/it/floater_script_search.xml | 13 + .../skins/default/xui/it/floater_select_key.xml | 7 + .../skins/default/xui/it/floater_sell_land.xml | 68 + .../default/xui/it/floater_settings_debug.xml | 17 + .../skins/default/xui/it/floater_snapshot.xml | 137 + .../skins/default/xui/it/floater_sound_preview.xml | 11 + .../skins/default/xui/it/floater_telehub.xml | 28 + .../skins/default/xui/it/floater_texture_ctrl.xml | 23 + .../newview/skins/default/xui/it/floater_tools.xml | 611 ++ .../skins/default/xui/it/floater_top_objects.xml | 55 + indra/newview/skins/default/xui/it/floater_tos.xml | 16 + .../skins/default/xui/it/floater_url_entry.xml | 12 + .../newview/skins/default/xui/it/floater_water.xml | 88 + .../default/xui/it/floater_wearable_save_as.xml | 11 + .../default/xui/it/floater_windlight_options.xml | 189 + .../skins/default/xui/it/floater_world_map.xml | 63 + .../skins/default/xui/it/menu_inventory.xml | 65 + indra/newview/skins/default/xui/it/menu_login.xml | 13 + indra/newview/skins/default/xui/it/menu_slurl.xml | 6 + indra/newview/skins/default/xui/it/menu_viewer.xml | 203 + indra/newview/skins/default/xui/it/mime_types.xml | 230 + .../newview/skins/default/xui/it/notifications.xml | 5795 +++++++++++++++++++ .../skins/default/xui/it/panel_audio_device.xml | 25 + .../newview/skins/default/xui/it/panel_friends.xml | 20 + .../skins/default/xui/it/panel_group_general.xml | 70 + .../skins/default/xui/it/panel_group_invite.xml | 23 + .../default/xui/it/panel_group_land_money.xml | 74 + .../skins/default/xui/it/panel_group_notices.xml | 71 + .../skins/default/xui/it/panel_group_roles.xml | 143 + .../newview/skins/default/xui/it/panel_groups.xml | 15 + indra/newview/skins/default/xui/it/panel_login.xml | 43 + .../default/xui/it/panel_preferences_chat.xml | 57 + .../default/xui/it/panel_preferences_general.xml | 114 + .../default/xui/it/panel_preferences_graphics1.xml | 176 + .../skins/default/xui/it/panel_region_covenant.xml | 50 + .../skins/default/xui/it/panel_region_debug.xml | 40 + .../skins/default/xui/it/panel_region_estate.xml | 69 + .../skins/default/xui/it/panel_region_general.xml | 43 + .../skins/default/xui/it/panel_region_terrain.xml | 27 + .../skins/default/xui/it/panel_region_texture.xml | 57 + .../skins/default/xui/it/panel_scrolling_param.xml | 10 + .../skins/default/xui/it/panel_status_bar.xml | 38 + indra/newview/skins/default/xui/it/strings.xml | 421 ++ .../skins/default/xui/it/teleport_strings.xml | 73 + .../skins/default/xui/ja/floater_about_land.xml | 16 +- .../skins/default/xui/ja/floater_bulk_perms.xml | 43 + .../skins/default/xui/ja/floater_buy_land.xml | 182 +- .../skins/default/xui/ja/floater_joystick.xml | 112 +- .../skins/default/xui/ja/floater_media_browser.xml | 4 +- .../skins/default/xui/ja/floater_notification.xml | 7 + .../xui/ja/floater_notifications_console.xml | 5 + .../skins/default/xui/ja/floater_perm_prefs.xml | 16 + .../skins/default/xui/ja/floater_report_abuse.xml | 18 +- .../skins/default/xui/ja/floater_snapshot.xml | 4 +- .../skins/default/xui/ja/floater_sound_preview.xml | 3 +- .../newview/skins/default/xui/ja/floater_tools.xml | 431 +- .../default/xui/ja/floater_windlight_options.xml | 4 +- .../skins/default/xui/ja/floater_world_map.xml | 8 +- .../skins/default/xui/ja/menu_inventory.xml | 120 +- indra/newview/skins/default/xui/ja/menu_viewer.xml | 32 +- .../newview/skins/default/xui/ja/notifications.xml | 5947 ++++++++++++++++++++ .../newview/skins/default/xui/ja/panel_friends.xml | 2 +- .../skins/default/xui/ja/panel_group_general.xml | 12 +- .../skins/default/xui/ja/panel_group_invite.xml | 8 +- .../skins/default/xui/ja/panel_group_roles.xml | 4 +- indra/newview/skins/default/xui/ja/panel_login.xml | 2 +- .../default/xui/ja/panel_notifications_channel.xml | 15 + .../default/xui/ja/panel_preferences_general.xml | 9 +- .../skins/default/xui/ja/panel_region_general.xml | 12 +- indra/newview/skins/default/xui/ja/strings.xml | 73 +- .../newview/skins/default/xui/nl/floater_about.xml | 35 + .../skins/default/xui/nl/floater_about_land.xml | 424 ++ .../skins/default/xui/nl/floater_auction.xml | 9 + .../skins/default/xui/nl/floater_beacons.xml | 15 + .../newview/skins/default/xui/nl/floater_bumps.xml | 21 + .../skins/default/xui/nl/floater_buy_contents.xml | 21 + .../skins/default/xui/nl/floater_buy_currency.xml | 66 + .../skins/default/xui/nl/floater_buy_land.xml | 224 + .../skins/default/xui/nl/floater_buy_object.xml | 26 + .../skins/default/xui/nl/floater_camera.xml | 12 + .../skins/default/xui/nl/floater_choose_group.xml | 8 + .../skins/default/xui/nl/floater_color_picker.xml | 30 + .../skins/default/xui/nl/floater_critical.xml | 11 + .../skins/default/xui/nl/floater_customize.xml | 427 ++ .../skins/default/xui/nl/floater_env_settings.xml | 23 + .../skins/default/xui/nl/floater_gesture.xml | 15 + indra/newview/skins/default/xui/nl/floater_hud.xml | 2 + indra/newview/skins/default/xui/nl/floater_im.xml | 45 + .../skins/default/xui/nl/floater_inspect.xml | 11 + .../skins/default/xui/nl/floater_inventory.xml | 47 + .../skins/default/xui/nl/floater_joystick.xml | 83 + .../skins/default/xui/nl/floater_lagmeter.xml | 152 + .../skins/default/xui/nl/floater_lsl_guide.xml | 7 + .../skins/default/xui/nl/floater_mem_leaking.xml | 18 + .../skins/default/xui/nl/floater_moveview.xml | 11 + .../skins/default/xui/nl/floater_mute_object.xml | 11 + .../skins/default/xui/nl/floater_my_friends.xml | 7 + .../skins/default/xui/nl/floater_openobject.xml | 8 + indra/newview/skins/default/xui/nl/floater_pay.xml | 21 + .../skins/default/xui/nl/floater_pay_object.xml | 30 + .../skins/default/xui/nl/floater_post_process.xml | 53 + .../skins/default/xui/nl/floater_postcard.xml | 36 + .../skins/default/xui/nl/floater_preferences.xml | 8 + .../skins/default/xui/nl/floater_region_info.xml | 2 + .../skins/default/xui/nl/floater_report_abuse.xml | 179 + .../skins/default/xui/nl/floater_script_debug.xml | 6 + .../skins/default/xui/nl/floater_script_queue.xml | 4 + .../skins/default/xui/nl/floater_select_key.xml | 7 + .../skins/default/xui/nl/floater_sell_land.xml | 68 + .../skins/default/xui/nl/floater_snapshot.xml | 137 + .../skins/default/xui/nl/floater_telehub.xml | 25 + .../skins/default/xui/nl/floater_texture_ctrl.xml | 23 + .../newview/skins/default/xui/nl/floater_tools.xml | 610 ++ .../skins/default/xui/nl/floater_top_objects.xml | 55 + indra/newview/skins/default/xui/nl/floater_tos.xml | 15 + .../skins/default/xui/nl/floater_url_entry.xml | 12 + .../newview/skins/default/xui/nl/floater_water.xml | 88 + .../skins/default/xui/nl/floater_world_map.xml | 63 + .../skins/default/xui/nl/menu_inventory.xml | 65 + indra/newview/skins/default/xui/nl/menu_login.xml | 13 + indra/newview/skins/default/xui/nl/menu_slurl.xml | 6 + indra/newview/skins/default/xui/nl/menu_viewer.xml | 203 + indra/newview/skins/default/xui/nl/mime_types.xml | 230 + .../newview/skins/default/xui/nl/notifications.xml | 5791 +++++++++++++++++++ .../skins/default/xui/nl/panel_audio_device.xml | 25 + .../newview/skins/default/xui/nl/panel_friends.xml | 20 + .../skins/default/xui/nl/panel_group_general.xml | 67 + .../skins/default/xui/nl/panel_group_invite.xml | 21 + .../skins/default/xui/nl/panel_group_notices.xml | 61 + .../skins/default/xui/nl/panel_group_roles.xml | 135 + .../newview/skins/default/xui/nl/panel_groups.xml | 15 + indra/newview/skins/default/xui/nl/panel_login.xml | 43 + .../skins/default/xui/nl/panel_region_debug.xml | 40 + .../skins/default/xui/nl/panel_region_estate.xml | 68 + .../skins/default/xui/nl/panel_region_general.xml | 46 + .../skins/default/xui/nl/panel_region_terrain.xml | 27 + .../skins/default/xui/nl/panel_region_texture.xml | 57 + .../skins/default/xui/nl/panel_status_bar.xml | 38 + indra/newview/skins/default/xui/nl/strings.xml | 421 ++ .../skins/default/xui/nl/teleport_strings.xml | 73 + .../newview/skins/default/xui/pl/floater_about.xml | 6 +- .../skins/default/xui/pl/floater_about_land.xml | 6 +- .../skins/default/xui/pl/floater_buy_land.xml | 2 +- .../skins/default/xui/pl/floater_report_abuse.xml | 18 +- .../skins/default/xui/pl/floater_snapshot.xml | 4 +- .../skins/default/xui/pl/floater_sound_preview.xml | 2 +- .../newview/skins/default/xui/pl/floater_tools.xml | 2 +- .../skins/default/xui/pl/floater_world_map.xml | 4 +- indra/newview/skins/default/xui/pl/menu_viewer.xml | 10 +- .../newview/skins/default/xui/pl/notifications.xml | 5718 +++++++++++++++++++ .../skins/default/xui/pl/panel_group_general.xml | 13 +- indra/newview/skins/default/xui/pl/panel_login.xml | 2 +- .../skins/default/xui/pl/panel_region_general.xml | 11 +- .../newview/skins/default/xui/pt/floater_about.xml | 30 + .../skins/default/xui/pt/floater_about_land.xml | 133 +- .../default/xui/pt/floater_animation_preview.xml | 17 +- .../skins/default/xui/pt/floater_auction.xml | 18 +- .../skins/default/xui/pt/floater_avatar_picker.xml | 6 +- .../default/xui/pt/floater_avatar_textures.xml | 2 +- .../skins/default/xui/pt/floater_beacons.xml | 4 +- .../newview/skins/default/xui/pt/floater_bumps.xml | 4 +- .../skins/default/xui/pt/floater_buy_currency.xml | 14 +- .../skins/default/xui/pt/floater_buy_land.xml | 60 +- .../skins/default/xui/pt/floater_buy_object.xml | 2 +- .../skins/default/xui/pt/floater_color_picker.xml | 16 +- .../skins/default/xui/pt/floater_critical.xml | 11 +- .../skins/default/xui/pt/floater_customize.xml | 50 +- .../default/xui/pt/floater_day_cycle_options.xml | 14 +- .../default/xui/pt/floater_device_settings.xml | 2 + .../skins/default/xui/pt/floater_gesture.xml | 11 +- .../skins/default/xui/pt/floater_god_tools.xml | 120 +- indra/newview/skins/default/xui/pt/floater_im.xml | 8 +- .../skins/default/xui/pt/floater_image_preview.xml | 4 +- .../skins/default/xui/pt/floater_inspect.xml | 19 +- .../skins/default/xui/pt/floater_inventory.xml | 4 +- .../xui/pt/floater_inventory_item_properties.xml | 6 +- .../xui/pt/floater_inventory_view_finder.xml | 44 +- .../skins/default/xui/pt/floater_joystick.xml | 1 - .../skins/default/xui/pt/floater_lagmeter.xml | 4 +- .../skins/default/xui/pt/floater_land_holdings.xml | 17 +- .../skins/default/xui/pt/floater_media_browser.xml | 12 +- .../skins/default/xui/pt/floater_moveview.xml | 20 +- .../skins/default/xui/pt/floater_my_friends.xml | 7 + .../skins/default/xui/pt/floater_openobject.xml | 10 +- .../skins/default/xui/pt/floater_post_process.xml | 53 + .../skins/default/xui/pt/floater_postcard.xml | 2 +- .../skins/default/xui/pt/floater_preferences.xml | 12 +- .../default/xui/pt/floater_preview_animation.xml | 10 +- .../default/xui/pt/floater_preview_classified.xml | 2 +- .../skins/default/xui/pt/floater_preview_event.xml | 2 +- .../default/xui/pt/floater_preview_gesture.xml | 16 +- .../skins/default/xui/pt/floater_preview_sound.xml | 12 +- .../skins/default/xui/pt/floater_report_abuse.xml | 31 +- .../skins/default/xui/pt/floater_script_debug.xml | 6 +- .../skins/default/xui/pt/floater_script_queue.xml | 6 +- .../skins/default/xui/pt/floater_script_search.xml | 16 +- .../skins/default/xui/pt/floater_select_key.xml | 7 + .../skins/default/xui/pt/floater_sell_land.xml | 20 +- .../default/xui/pt/floater_settings_debug.xml | 18 +- .../skins/default/xui/pt/floater_snapshot.xml | 12 +- .../skins/default/xui/pt/floater_sound_preview.xml | 23 +- .../skins/default/xui/pt/floater_telehub.xml | 15 +- .../skins/default/xui/pt/floater_texture_ctrl.xml | 1 - .../newview/skins/default/xui/pt/floater_tools.xml | 72 +- .../skins/default/xui/pt/floater_top_objects.xml | 12 +- indra/newview/skins/default/xui/pt/floater_tos.xml | 2 +- .../skins/default/xui/pt/floater_url_entry.xml | 2 +- .../default/xui/pt/floater_wearable_save_as.xml | 10 +- .../skins/default/xui/pt/floater_world_map.xml | 65 +- .../skins/default/xui/pt/menu_inventory.xml | 116 +- indra/newview/skins/default/xui/pt/menu_viewer.xml | 66 +- .../newview/skins/default/xui/pt/notifications.xml | 5748 +++++++++++++++++++ .../skins/default/xui/pt/panel_audio_device.xml | 10 + .../newview/skins/default/xui/pt/panel_friends.xml | 16 +- .../skins/default/xui/pt/panel_group_general.xml | 38 +- .../skins/default/xui/pt/panel_group_invite.xml | 8 +- .../default/xui/pt/panel_group_land_money.xml | 17 +- .../skins/default/xui/pt/panel_group_notices.xml | 47 +- .../skins/default/xui/pt/panel_group_roles.xml | 65 +- .../newview/skins/default/xui/pt/panel_groups.xml | 16 + indra/newview/skins/default/xui/pt/panel_login.xml | 4 +- .../default/xui/pt/panel_preferences_chat.xml | 15 +- .../default/xui/pt/panel_preferences_general.xml | 17 +- .../default/xui/pt/panel_preferences_graphics1.xml | 39 +- .../skins/default/xui/pt/panel_region_covenant.xml | 29 +- .../skins/default/xui/pt/panel_region_debug.xml | 18 +- .../skins/default/xui/pt/panel_region_estate.xml | 24 +- .../skins/default/xui/pt/panel_region_general.xml | 20 +- .../skins/default/xui/pt/panel_region_terrain.xml | 43 +- .../skins/default/xui/pt/panel_scrolling_param.xml | 10 +- .../skins/default/xui/pt/panel_status_bar.xml | 20 +- indra/newview/skins/default/xui/pt/strings.xml | 16 +- .../skins/default/xui/pt/teleport_strings.xml | 26 +- indra/newview/viewer_manifest.py | 5 +- install.xml | 32 +- scripts/messages/message_template.msg | 11 +- 618 files changed, 71384 insertions(+), 6194 deletions(-) create mode 100644 indra/llcharacter/llbvhconsts.h create mode 100644 indra/newview/llproductinforequest.cpp create mode 100644 indra/newview/llproductinforequest.h create mode 100644 indra/newview/skins/default/xui/da/floater_env_settings.xml create mode 100644 indra/newview/skins/default/xui/da/floater_gesture.xml create mode 100644 indra/newview/skins/default/xui/da/floater_hardware_settings.xml create mode 100644 indra/newview/skins/default/xui/da/floater_hud.xml create mode 100644 indra/newview/skins/default/xui/da/floater_im.xml create mode 100644 indra/newview/skins/default/xui/da/floater_image_preview.xml create mode 100644 indra/newview/skins/default/xui/da/floater_inspect.xml create mode 100644 indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml create mode 100644 indra/newview/skins/default/xui/da/floater_mem_leaking.xml create mode 100644 indra/newview/skins/default/xui/da/floater_region_info.xml create mode 100644 indra/newview/skins/default/xui/da/floater_top_objects.xml create mode 100644 indra/newview/skins/default/xui/da/floater_url_entry.xml create mode 100644 indra/newview/skins/default/xui/da/floater_water.xml create mode 100644 indra/newview/skins/default/xui/da/floater_windlight_options.xml create mode 100644 indra/newview/skins/default/xui/da/mime_types.xml create mode 100644 indra/newview/skins/default/xui/da/notifications.xml create mode 100644 indra/newview/skins/default/xui/da/panel_audio_device.xml create mode 100644 indra/newview/skins/default/xui/da/panel_friends.xml create mode 100644 indra/newview/skins/default/xui/da/panel_group_general.xml create mode 100644 indra/newview/skins/default/xui/da/panel_group_invite.xml create mode 100644 indra/newview/skins/default/xui/da/panel_group_land_money.xml create mode 100644 indra/newview/skins/default/xui/da/panel_group_notices.xml create mode 100644 indra/newview/skins/default/xui/da/panel_group_roles.xml create mode 100644 indra/newview/skins/default/xui/da/panel_groups.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_covenant.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_debug.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_estate.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_general.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_terrain.xml create mode 100644 indra/newview/skins/default/xui/da/panel_region_texture.xml create mode 100644 indra/newview/skins/default/xui/da/panel_scrolling_param.xml create mode 100644 indra/newview/skins/default/xui/da/panel_status_bar.xml create mode 100644 indra/newview/skins/default/xui/da/role_actions.xml create mode 100644 indra/newview/skins/default/xui/da/teleport_strings.xml create mode 100644 indra/newview/skins/default/xui/de/notifications.xml create mode 100644 indra/newview/skins/default/xui/es/floater_beacons.xml create mode 100644 indra/newview/skins/default/xui/es/floater_camera.xml create mode 100644 indra/newview/skins/default/xui/es/floater_day_cycle_options.xml create mode 100644 indra/newview/skins/default/xui/es/floater_device_settings.xml create mode 100644 indra/newview/skins/default/xui/es/floater_env_settings.xml create mode 100644 indra/newview/skins/default/xui/es/floater_hardware_settings.xml create mode 100644 indra/newview/skins/default/xui/es/floater_hud.xml create mode 100644 indra/newview/skins/default/xui/es/floater_inspect.xml create mode 100644 indra/newview/skins/default/xui/es/floater_joystick.xml create mode 100644 indra/newview/skins/default/xui/es/floater_lagmeter.xml create mode 100644 indra/newview/skins/default/xui/es/floater_lsl_guide.xml create mode 100644 indra/newview/skins/default/xui/es/floater_media_browser.xml create mode 100644 indra/newview/skins/default/xui/es/floater_mem_leaking.xml create mode 100644 indra/newview/skins/default/xui/es/floater_mute_object.xml create mode 100644 indra/newview/skins/default/xui/es/floater_my_friends.xml create mode 100644 indra/newview/skins/default/xui/es/floater_post_process.xml create mode 100644 indra/newview/skins/default/xui/es/floater_preview_classified.xml create mode 100644 indra/newview/skins/default/xui/es/floater_preview_event.xml create mode 100644 indra/newview/skins/default/xui/es/floater_region_info.xml create mode 100644 indra/newview/skins/default/xui/es/floater_select_key.xml create mode 100644 indra/newview/skins/default/xui/es/floater_url_entry.xml create mode 100644 indra/newview/skins/default/xui/es/floater_water.xml create mode 100644 indra/newview/skins/default/xui/es/floater_windlight_options.xml create mode 100644 indra/newview/skins/default/xui/es/menu_login.xml create mode 100644 indra/newview/skins/default/xui/es/menu_slurl.xml create mode 100644 indra/newview/skins/default/xui/es/mime_types.xml create mode 100644 indra/newview/skins/default/xui/es/notifications.xml create mode 100644 indra/newview/skins/default/xui/es/panel_audio_device.xml create mode 100644 indra/newview/skins/default/xui/es/panel_friends.xml create mode 100644 indra/newview/skins/default/xui/es/panel_groups.xml create mode 100644 indra/newview/skins/default/xui/es/strings.xml create mode 100644 indra/newview/skins/default/xui/es/teleport_strings.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_bulk_perms.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_notification.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_notifications_console.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_perm_prefs.xml create mode 100644 indra/newview/skins/default/xui/fr/notifications.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_notifications_channel.xml create mode 100644 indra/newview/skins/default/xui/it/floater_about.xml create mode 100644 indra/newview/skins/default/xui/it/floater_about_land.xml create mode 100644 indra/newview/skins/default/xui/it/floater_animation_preview.xml create mode 100644 indra/newview/skins/default/xui/it/floater_auction.xml create mode 100644 indra/newview/skins/default/xui/it/floater_avatar_picker.xml create mode 100644 indra/newview/skins/default/xui/it/floater_avatar_textures.xml create mode 100644 indra/newview/skins/default/xui/it/floater_beacons.xml create mode 100644 indra/newview/skins/default/xui/it/floater_build_options.xml create mode 100644 indra/newview/skins/default/xui/it/floater_bumps.xml create mode 100644 indra/newview/skins/default/xui/it/floater_buy_contents.xml create mode 100644 indra/newview/skins/default/xui/it/floater_buy_currency.xml create mode 100644 indra/newview/skins/default/xui/it/floater_buy_land.xml create mode 100644 indra/newview/skins/default/xui/it/floater_buy_object.xml create mode 100644 indra/newview/skins/default/xui/it/floater_camera.xml create mode 100644 indra/newview/skins/default/xui/it/floater_choose_group.xml create mode 100644 indra/newview/skins/default/xui/it/floater_color_picker.xml create mode 100644 indra/newview/skins/default/xui/it/floater_critical.xml create mode 100644 indra/newview/skins/default/xui/it/floater_customize.xml create mode 100644 indra/newview/skins/default/xui/it/floater_day_cycle_options.xml create mode 100644 indra/newview/skins/default/xui/it/floater_device_settings.xml create mode 100644 indra/newview/skins/default/xui/it/floater_env_settings.xml create mode 100644 indra/newview/skins/default/xui/it/floater_gesture.xml create mode 100644 indra/newview/skins/default/xui/it/floater_hardware_settings.xml create mode 100644 indra/newview/skins/default/xui/it/floater_hud.xml create mode 100644 indra/newview/skins/default/xui/it/floater_im.xml create mode 100644 indra/newview/skins/default/xui/it/floater_image_preview.xml create mode 100644 indra/newview/skins/default/xui/it/floater_inspect.xml create mode 100644 indra/newview/skins/default/xui/it/floater_inventory.xml create mode 100644 indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml create mode 100644 indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml create mode 100644 indra/newview/skins/default/xui/it/floater_joystick.xml create mode 100644 indra/newview/skins/default/xui/it/floater_lagmeter.xml create mode 100644 indra/newview/skins/default/xui/it/floater_land_holdings.xml create mode 100644 indra/newview/skins/default/xui/it/floater_live_lsleditor.xml create mode 100644 indra/newview/skins/default/xui/it/floater_lsl_guide.xml create mode 100644 indra/newview/skins/default/xui/it/floater_media_browser.xml create mode 100644 indra/newview/skins/default/xui/it/floater_mem_leaking.xml create mode 100644 indra/newview/skins/default/xui/it/floater_moveview.xml create mode 100644 indra/newview/skins/default/xui/it/floater_mute_object.xml create mode 100644 indra/newview/skins/default/xui/it/floater_my_friends.xml create mode 100644 indra/newview/skins/default/xui/it/floater_openobject.xml create mode 100644 indra/newview/skins/default/xui/it/floater_pay.xml create mode 100644 indra/newview/skins/default/xui/it/floater_pay_object.xml create mode 100644 indra/newview/skins/default/xui/it/floater_post_process.xml create mode 100644 indra/newview/skins/default/xui/it/floater_postcard.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preferences.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_animation.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_classified.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_event.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_gesture.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_notecard.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_sound.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_texture.xml create mode 100644 indra/newview/skins/default/xui/it/floater_region_info.xml create mode 100644 indra/newview/skins/default/xui/it/floater_report_abuse.xml create mode 100644 indra/newview/skins/default/xui/it/floater_script_debug.xml create mode 100644 indra/newview/skins/default/xui/it/floater_script_preview.xml create mode 100644 indra/newview/skins/default/xui/it/floater_script_queue.xml create mode 100644 indra/newview/skins/default/xui/it/floater_script_search.xml create mode 100644 indra/newview/skins/default/xui/it/floater_select_key.xml create mode 100644 indra/newview/skins/default/xui/it/floater_sell_land.xml create mode 100644 indra/newview/skins/default/xui/it/floater_settings_debug.xml create mode 100644 indra/newview/skins/default/xui/it/floater_snapshot.xml create mode 100644 indra/newview/skins/default/xui/it/floater_sound_preview.xml create mode 100644 indra/newview/skins/default/xui/it/floater_telehub.xml create mode 100644 indra/newview/skins/default/xui/it/floater_texture_ctrl.xml create mode 100644 indra/newview/skins/default/xui/it/floater_tools.xml create mode 100644 indra/newview/skins/default/xui/it/floater_top_objects.xml create mode 100644 indra/newview/skins/default/xui/it/floater_tos.xml create mode 100644 indra/newview/skins/default/xui/it/floater_url_entry.xml create mode 100644 indra/newview/skins/default/xui/it/floater_water.xml create mode 100644 indra/newview/skins/default/xui/it/floater_wearable_save_as.xml create mode 100644 indra/newview/skins/default/xui/it/floater_windlight_options.xml create mode 100644 indra/newview/skins/default/xui/it/floater_world_map.xml create mode 100644 indra/newview/skins/default/xui/it/menu_inventory.xml create mode 100644 indra/newview/skins/default/xui/it/menu_login.xml create mode 100644 indra/newview/skins/default/xui/it/menu_slurl.xml create mode 100644 indra/newview/skins/default/xui/it/menu_viewer.xml create mode 100644 indra/newview/skins/default/xui/it/mime_types.xml create mode 100644 indra/newview/skins/default/xui/it/notifications.xml create mode 100644 indra/newview/skins/default/xui/it/panel_audio_device.xml create mode 100644 indra/newview/skins/default/xui/it/panel_friends.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_general.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_invite.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_land_money.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_notices.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_roles.xml create mode 100644 indra/newview/skins/default/xui/it/panel_groups.xml create mode 100644 indra/newview/skins/default/xui/it/panel_login.xml create mode 100644 indra/newview/skins/default/xui/it/panel_preferences_chat.xml create mode 100644 indra/newview/skins/default/xui/it/panel_preferences_general.xml create mode 100644 indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_covenant.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_debug.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_estate.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_general.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_terrain.xml create mode 100644 indra/newview/skins/default/xui/it/panel_region_texture.xml create mode 100644 indra/newview/skins/default/xui/it/panel_scrolling_param.xml create mode 100644 indra/newview/skins/default/xui/it/panel_status_bar.xml create mode 100644 indra/newview/skins/default/xui/it/strings.xml create mode 100644 indra/newview/skins/default/xui/it/teleport_strings.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_bulk_perms.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_notification.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_notifications_console.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_perm_prefs.xml create mode 100644 indra/newview/skins/default/xui/ja/notifications.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_notifications_channel.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_about.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_about_land.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_auction.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_beacons.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_bumps.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_buy_contents.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_buy_currency.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_buy_land.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_buy_object.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_camera.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_choose_group.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_color_picker.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_critical.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_customize.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_env_settings.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_gesture.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_hud.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_im.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_inspect.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_inventory.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_joystick.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_lagmeter.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_lsl_guide.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_mem_leaking.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_moveview.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_mute_object.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_my_friends.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_openobject.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_pay.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_pay_object.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_post_process.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_postcard.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_preferences.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_region_info.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_report_abuse.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_script_debug.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_script_queue.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_select_key.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_sell_land.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_snapshot.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_telehub.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_tools.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_top_objects.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_tos.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_url_entry.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_water.xml create mode 100644 indra/newview/skins/default/xui/nl/floater_world_map.xml create mode 100644 indra/newview/skins/default/xui/nl/menu_inventory.xml create mode 100644 indra/newview/skins/default/xui/nl/menu_login.xml create mode 100644 indra/newview/skins/default/xui/nl/menu_slurl.xml create mode 100644 indra/newview/skins/default/xui/nl/menu_viewer.xml create mode 100644 indra/newview/skins/default/xui/nl/mime_types.xml create mode 100644 indra/newview/skins/default/xui/nl/notifications.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_audio_device.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_friends.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_group_general.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_group_invite.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_group_notices.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_group_roles.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_groups.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_login.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_region_debug.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_region_estate.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_region_general.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_region_terrain.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_region_texture.xml create mode 100644 indra/newview/skins/default/xui/nl/panel_status_bar.xml create mode 100644 indra/newview/skins/default/xui/nl/strings.xml create mode 100644 indra/newview/skins/default/xui/nl/teleport_strings.xml create mode 100644 indra/newview/skins/default/xui/pl/notifications.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_device_settings.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_my_friends.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_post_process.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_select_key.xml create mode 100644 indra/newview/skins/default/xui/pt/notifications.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_groups.xml diff --git a/doc/contributions.txt b/doc/contributions.txt index 71423bda9c..98c80288da 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -12,6 +12,8 @@ Able Whitman VWR-1813 Adam Marker VWR-2755 +Agathos Frascati + CT-246 Aimee Trescothick VWR-1813 VWR-3321 @@ -86,6 +88,8 @@ Alissa Sabre VWR-10728 Angus Boyd VWR-592 +Ann Congrejo + CT-193 Argent Stonecutter VWR-68 Armin Weatherwax @@ -97,6 +101,14 @@ Balp Allen VWR-4157 Benja Kepler VWR-746 +Biancaluce Robbiani + CT-225 + CT-226 + CT-227 + CT-228 + CT-229 + CT-230 + CT-231 Blakar Ogre VWR-418 VWR-881 @@ -109,6 +121,14 @@ blino Nakamura Boroondas Gupte VWR-233 WEB-262 +Bulli Schumann + CT-218 + CT-219 + CT-220 + CT-221 + CT-222 + CT-223 + CT-224 bushing Spatula VWR-119 VWR-424 @@ -165,6 +185,8 @@ Feep Larsson VWR-447 VWR-1314 VWR-4444 +Flemming Congrejo + CT-193 Fluf Fredriksson VWR-3450 Fremont Cunningham @@ -204,6 +226,8 @@ Gudmund Shepherd VWR-1873 Hamncheese Omlet VWR-333 +HappySmurf Papp + CT-193 Henri Beauchamp VWR-1320 VWR-1406 @@ -243,6 +267,8 @@ Joghert LeSabre VWR-64 Kage Pixel VWR-11 +Ken March + CT-245 Kerutsen Sellery VWR-1350 Khyota Wulluf @@ -254,6 +280,14 @@ Kunnis Basiat VWR-102 Latif Khalifa VWR-5370 +Lisa Lowe + CT-218 + CT-219 + CT-220 + CT-221 + CT-222 + CT-223 + CT-224 Lockhart Cordoso VWR-108 maciek marksman @@ -392,11 +426,27 @@ Peekay Semyorka VWR-79 Peter Lameth VWR-7331 +Pf Shan + CT-225 + CT-226 + CT-227 + CT-228 + CT-229 + CT-230 + CT-231 princess niven VWR-5733 CT-85 Renault Clio VWR-1976 +Ringo Tuxing + CT-225 + CT-226 + CT-227 + CT-228 + CT-229 + CT-230 + CT-231 Robin Cornelius VWR-2488 VWR-9557 @@ -404,6 +454,14 @@ Robin Cornelius Ryozu Kojima VWR-53 VWR-287 +Salahzar Stenvaag + CT-225 + CT-226 + CT-227 + CT-228 + CT-229 + CT-230 + CT-231 Sammy Frederix VWR-6186 Scrippy Scofield @@ -416,6 +474,14 @@ Seg Baphomet VWR-2662 VWR-3206 VWR-2488 +Sergen Davies + CT-225 + CT-226 + CT-227 + CT-228 + CT-229 + CT-230 + CT-231 SignpostMarv Martin VWR-153 VWR-154 @@ -472,6 +538,8 @@ Thickbrick Sleaford Thraxis Epsilon SVC-371 VWR-383 +tiamat bingyi + CT-246 Tue Torok CT-68 CT-69 @@ -481,6 +549,8 @@ Tue Torok CT-74 Vadim Bigbear VWR-2681 +Vixen Heron + VWR-2710 Whoops Babii VWR-631 VWR-1640 diff --git a/etc/message.xml b/etc/message.xml index d8fb06b060..4af5bd5296 100644 --- a/etc/message.xml +++ b/etc/message.xml @@ -402,7 +402,23 @@ true - avatarnotesrequest + PlacesReply + + flavor + llsd + trusted-sender + true + + + DirLandReply + + flavor + llsd + trusted-sender + true + + + avatarnotesrequest service_name avatar-notes diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake index cf10c2dda5..4d0b7b2d8d 100644 --- a/indra/cmake/PNG.cmake +++ b/indra/cmake/PNG.cmake @@ -8,12 +8,6 @@ if (STANDALONE) include(FindPNG) else (STANDALONE) use_prebuilt_binary(libpng) - if (WINDOWS) - set(PNG_LIBRARIES - debug libpngd - optimized libpng) - else (WINDOWS) - set(PNG_LIBRARIES png12) - endif (WINDOWS) + set(PNG_LIBRARIES png12) set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) endif (STANDALONE) diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake index c133248bed..48e5130ad5 100644 --- a/indra/cmake/ZLIB.cmake +++ b/indra/cmake/ZLIB.cmake @@ -17,6 +17,6 @@ else (STANDALONE) set(ZLIB_LIBRARIES z) endif (WINDOWS) if (WINDOWS OR LINUX) - set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/zlib) + set(ZLIB_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/zlib) endif (WINDOWS OR LINUX) endif (STANDALONE) diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt index 63010626e1..612229d16b 100644 --- a/indra/llcharacter/CMakeLists.txt +++ b/indra/llcharacter/CMakeLists.txt @@ -46,6 +46,7 @@ set(llcharacter_HEADER_FILES llanimationstates.h llbvhloader.h + llbvhconsts.h llcharacter.h lleditingmotion.h llgesture.h diff --git a/indra/llcharacter/llbvhconsts.h b/indra/llcharacter/llbvhconsts.h new file mode 100644 index 0000000000..d5876aa077 --- /dev/null +++ b/indra/llcharacter/llbvhconsts.h @@ -0,0 +1,52 @@ +/** + * @file llbvhconsts.h + * @brief Consts and types useful to BVH files and LindenLabAnimation format. + * + * $LicenseInfo:firstyear=2004&license=viewergpl$ + * + * Copyright (c) 2004-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLBVHCONSTS_H +#define LL_LLBVHCONSTS_H + +const F32 MAX_ANIM_DURATION = 30.f; + +typedef enum e_constraint_type + { + CONSTRAINT_TYPE_POINT, + CONSTRAINT_TYPE_PLANE, + NUM_CONSTRAINT_TYPES + } EConstraintType; + +typedef enum e_constraint_target_type + { + CONSTRAINT_TARGET_TYPE_BODY, + CONSTRAINT_TARGET_TYPE_GROUND, + NUM_CONSTRAINT_TARGET_TYPES + } EConstraintTargetType; + +#endif // LL_LLBVHCONSTS_H diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h index 13801939db..6937b9d835 100644 --- a/indra/llcharacter/llbvhloader.h +++ b/indra/llcharacter/llbvhloader.h @@ -37,9 +37,9 @@ #include "m3math.h" #include "llmath.h" #include "llapr.h" +#include "llbvhconsts.h" const S32 BVH_PARSER_LINE_SIZE = 2048; -const F32 MAX_ANIM_DURATION = 30.f; class LLDataPacker; //------------------------------------------------------------------------ @@ -132,12 +132,6 @@ struct Joint }; -typedef enum e_constraint_type -{ - CONSTRAINT_TYPE_POINT, - CONSTRAINT_TYPE_PLANE -} EConstraintType; - struct Constraint { char mSourceJointName[16]; /* Flawfinder: ignore */ diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 19d8386255..5a2e3f73f9 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -862,7 +862,7 @@ void LLKeyframeMotion::activateConstraint(JointConstraint* constraint) S32 joint_num; // grab ground position if we need to - if (shared_data->mConstraintTargetType == TYPE_GROUND) + if (shared_data->mConstraintTargetType == CONSTRAINT_TARGET_TYPE_GROUND) { LLVector3 source_pos = mCharacter->getVolumePos(shared_data->mSourceConstraintVolume, shared_data->mSourceConstraintOffset); LLVector3 ground_pos_agent; @@ -889,7 +889,7 @@ void LLKeyframeMotion::deactivateConstraint(JointConstraint *constraintp) constraintp->mSourceVolume->mUpdateXform = FALSE; } - if (!constraintp->mSharedData->mConstraintTargetType == TYPE_GROUND) + if (!constraintp->mSharedData->mConstraintTargetType == CONSTRAINT_TARGET_TYPE_GROUND) { if (constraintp->mTargetVolume) { @@ -959,11 +959,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8 switch(shared_data->mConstraintTargetType) { - case TYPE_GROUND: + case CONSTRAINT_TARGET_TYPE_GROUND: target_pos = mCharacter->getPosAgentFromGlobal(constraint->mGroundPos); // llinfos << "Target Pos " << constraint->mGroundPos << " on " << mCharacter->findCollisionVolume(shared_data->mSourceConstraintVolume)->getName() << llendl; break; - case TYPE_BODY: + case CONSTRAINT_TARGET_TYPE_BODY: target_pos = mCharacter->getVolumePos(shared_data->mTargetConstraintVolume, shared_data->mTargetConstraintOffset); break; default: @@ -974,14 +974,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8 LLJoint *source_jointp = NULL; LLJoint *target_jointp = NULL; - if (shared_data->mConstraintType == TYPE_PLANE) + if (shared_data->mConstraintType == CONSTRAINT_TYPE_PLANE) { switch(shared_data->mConstraintTargetType) { - case TYPE_GROUND: + case CONSTRAINT_TARGET_TYPE_GROUND: norm = constraint->mGroundNorm; break; - case TYPE_BODY: + case CONSTRAINT_TARGET_TYPE_BODY: target_jointp = mCharacter->findCollisionVolume(shared_data->mTargetConstraintVolume); if (target_jointp) { @@ -1227,6 +1227,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) llwarns << "can't read duration" << llendl; return FALSE; } + + if (mJointMotionList->mDuration > MAX_ANIM_DURATION ) + { + llwarns << "invalid animation duration" << llendl; + return FALSE; + } //------------------------------------------------------------------------- // get emote (optional) @@ -1282,6 +1288,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) llwarns << "can't read hand pose" << llendl; return FALSE; } + + if(word > LLHandMotion::NUM_HAND_POSES) + { + llwarns << "invalid LLHandMotion::eHandPose index: " << word << llendl; + return FALSE; + } + mJointMotionList->mHandPose = (LLHandMotion::eHandPose)word; //------------------------------------------------------------------------- @@ -1325,7 +1338,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) llwarns << "can't read joint name" << llendl; return FALSE; } - + + if (joint_name == "mScreen" || joint_name == "mRoot") + { + llwarns << "attempted to animate special " << joint_name << " joint" << llendl; + return FALSE; + } + //--------------------------------------------------------------------- // find the corresponding joint //--------------------------------------------------------------------- @@ -1409,6 +1428,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) } time = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); + + if (time < 0 || time > mJointMotionList->mDuration) + { + llwarns << "invalid frame time" << llendl; + return FALSE; + } } RotationKey rot_key; @@ -1438,6 +1463,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) rot_key.mRotation.unpackFromVector3(rot_vec); } + if( !(rot_key.mRotation.isFinite()) ) + { + llwarns << "non-finite angle in rotation key" << llendl; + success = FALSE; + } + if (!success) { llwarns << "can't read rotation key (" << k << ")" << llendl; @@ -1509,7 +1540,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) pos_key.mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); pos_key.mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); } - + + if( !(pos_key.mPosition.isFinite()) ) + { + llwarns << "non-finite position in key" << llendl; + success = FALSE; + } + if (!success) { llwarns << "can't read position key (" << k << ")" << llendl; @@ -1539,7 +1576,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (num_constraints > MAX_CONSTRAINTS) { - llwarns << "Too many constraints...ignoring" << llendl; + llwarns << "Too many constraints... ignoring" << llendl; } else { @@ -1561,12 +1598,26 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) } constraintp->mChainLength = (S32) byte; + if((U32)constraintp->mChainLength > mJointMotionList->getNumJointMotions()) + { + llwarns << "invalid constraint chain length" << llendl; + delete constraintp; + return FALSE; + } + if (!dp.unpackU8(byte, "constraint_type")) { llwarns << "can't read constraint type" << llendl; delete constraintp; return FALSE; } + + if( byte >= NUM_CONSTRAINT_TYPES ) + { + llwarns << "invalid constraint type" << llendl; + delete constraintp; + return FALSE; + } constraintp->mConstraintType = (EConstraintType)byte; const S32 BIN_DATA_LENGTH = 16; @@ -1588,7 +1639,14 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) delete constraintp; return FALSE; } - + + if( !(constraintp->mSourceConstraintOffset.isFinite()) ) + { + llwarns << "non-finite constraint source offset" << llendl; + delete constraintp; + return FALSE; + } + if (!dp.unpackBinaryDataFixed(bin_data, BIN_DATA_LENGTH, "target_volume")) { llwarns << "can't read target volume name" << llendl; @@ -1601,11 +1659,11 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (str == "GROUND") { // constrain to ground - constraintp->mConstraintTargetType = TYPE_GROUND; + constraintp->mConstraintTargetType = CONSTRAINT_TARGET_TYPE_GROUND; } else { - constraintp->mConstraintTargetType = TYPE_BODY; + constraintp->mConstraintTargetType = CONSTRAINT_TARGET_TYPE_BODY; constraintp->mTargetConstraintVolume = mCharacter->getCollisionVolumeID(str); } @@ -1616,6 +1674,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } + if( !(constraintp->mTargetConstraintOffset.isFinite()) ) + { + llwarns << "non-finite constraint target offset" << llendl; + delete constraintp; + return FALSE; + } + if (!dp.unpackVector3(constraintp->mTargetConstraintDir, "target_dir")) { llwarns << "can't read constraint target direction" << llendl; @@ -1623,6 +1688,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } + if( !(constraintp->mTargetConstraintDir.isFinite()) ) + { + llwarns << "non-finite constraint target direction" << llendl; + delete constraintp; + return FALSE; + } + if (!constraintp->mTargetConstraintDir.isExactlyZero()) { constraintp->mUseTargetOffset = TRUE; @@ -1686,8 +1758,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) break; } } + if (constraintp->mJointStateIndices[i] < 0 ) + { + llwarns << "No joint index for constraint " << i << llendl; + delete constraintp; + return FALSE; + } } - } } @@ -1777,7 +1854,7 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str()); success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume"); success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset"); - if (shared_constraintp->mConstraintTargetType == TYPE_GROUND) + if (shared_constraintp->mConstraintTargetType == CONSTRAINT_TARGET_TYPE_GROUND) { snprintf(volume_name,sizeof(volume_name), "%s", "GROUND"); /* Flawfinder: ignore */ } diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h index 298b5f6be6..7e8c84488c 100644 --- a/indra/llcharacter/llkeyframemotion.h +++ b/indra/llcharacter/llkeyframemotion.h @@ -48,6 +48,7 @@ #include "v3dmath.h" #include "v3math.h" #include "llapr.h" +#include "llbvhconsts.h" class LLKeyframeDataCache; class LLVFS; @@ -198,18 +199,6 @@ public: static void flushKeyframeCache(); - typedef enum e_constraint_type - { - TYPE_POINT, - TYPE_PLANE - } EConstraintType; - - typedef enum e_constraint_target_type - { - TYPE_BODY, - TYPE_GROUND - } EConstraintTargetType; - protected: //------------------------------------------------------------------------- // JointConstraintSharedData @@ -224,8 +213,8 @@ protected: mEaseOutStartTime(0.f), mEaseOutStopTime(0.f), mUseTargetOffset(FALSE), - mConstraintType(TYPE_POINT), - mConstraintTargetType(TYPE_BODY), + mConstraintType(CONSTRAINT_TYPE_POINT), + mConstraintTargetType(CONSTRAINT_TARGET_TYPE_BODY), mSourceConstraintVolume(0), mTargetConstraintVolume(0), mJointStateIndices(NULL) diff --git a/indra/llcommon/imageids.h b/indra/llcommon/imageids.h index d65701e376..832708c782 100644 --- a/indra/llcommon/imageids.h +++ b/indra/llcommon/imageids.h @@ -56,7 +56,7 @@ const LLUUID IMG_SPARK ("d2e75ac1-d0fb-4532-820e-a20034ac814d"); // dataserver const LLUUID IMG_FIRE ("aca40aa8-44cf-44ca-a0fa-93e1a2986f82"); // dataserver const LLUUID IMG_FACE_SELECT ("a85ac674-cb75-4af6-9499-df7c5aaf7a28"); // face selector const LLUUID IMG_DEFAULT_AVATAR ("c228d1cf-4b5d-4ba8-84f4-899a0796aa97"); // dataserver -const LLUUID IMG_INVISIBLE ("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"); // dataserver +const LLUUID IMG_INVISIBLE ("3a367d1c-bef1-6d43-7595-e88c1e3aadb3"); // dataserver const LLUUID IMG_EXPLOSION ("68edcf47-ccd7-45b8-9f90-1649d7f12806"); // On dataserver const LLUUID IMG_EXPLOSION_2 ("21ce046c-83fe-430a-b629-c7660ac78d7c"); // On dataserver diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index f191f8b4f5..c840688a7c 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 27; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 116936; +const S32 LL_VERSION_BUILD = 118914; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt index a155d19407..0635ddd5f5 100644 --- a/indra/llimage/CMakeLists.txt +++ b/indra/llimage/CMakeLists.txt @@ -14,6 +14,7 @@ include_directories( ${LLMATH_INCLUDE_DIRS} ${LLVFS_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS} ) set(llimage_SOURCE_FILES diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index 53a52cd324..d34046c310 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -200,6 +200,16 @@ public: // EWearableType enumeration found in newview/llwearable.h // II_FLAGS_WEARABLES_MASK = 0xff, + + // these bits need to be cleared whenever the asset_id is updated + // on a pre-existing inventory item (DEV-28098 and DEV-30997) + II_FLAGS_PERM_OVERWRITE_MASK = II_FLAGS_OBJECT_SLAM_PERM + | II_FLAGS_OBJECT_SLAM_SALE + | II_FLAGS_OBJECT_PERM_OVERWRITE_BASE + | II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER + | II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP + | II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE + | II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER, }; protected: diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 2689ada80c..9c27476b0a 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -58,8 +58,11 @@ static const std::string PARCEL_OWNERSHIP_STATUS_STRING[LLParcel::OS_COUNT+1] = }; // NOTE: Adding parcel categories also requires updating: -// * newview/app_settings/floater_directory.xml category combobox +// * floater_directory.xml category combobox +// * floater_about_land.xml category combobox // * Web site "create event" tools +// DO NOT DELETE ITEMS FROM THIS LIST WITHOUT DEEPLY UNDERSTANDING WHAT YOU'RE DOING. +// static const std::string PARCEL_CATEGORY_STRING[LLParcel::C_COUNT] = { "none", diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index c4e230b492..bced84cb1c 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -331,6 +331,16 @@ public: //push center in direction of data LLOctreeNode::pushCenter(center, size, data); + // handle case where floating point number gets too small + if( llabs(center.mdV[0] - getCenter().mdV[0]) < F_APPROXIMATELY_ZERO && + llabs(center.mdV[1] - getCenter().mdV[1]) < F_APPROXIMATELY_ZERO && + llabs(center.mdV[2] - getCenter().mdV[2]) < F_APPROXIMATELY_ZERO) + { + mData.insert(data); + BaseType::insert(data); + return true; + } + #if LL_OCTREE_PARANOIA_CHECK if (getChildCount() == 8) { diff --git a/indra/llmessage/lldispatcher.cpp b/indra/llmessage/lldispatcher.cpp index bb7c833b49..6632fbb67e 100644 --- a/indra/llmessage/lldispatcher.cpp +++ b/indra/llmessage/lldispatcher.cpp @@ -121,29 +121,32 @@ bool LLDispatcher::unpackMessage( // we treat the SParam as binary data (since it might be an // LLUUID in compressed form which may have embedded \0's,) size = msg->getSizeFast(_PREHASH_ParamList, i, _PREHASH_Parameter); - msg->getBinaryDataFast( - _PREHASH_ParamList, _PREHASH_Parameter, - buf, size, i, MAX_STRING-1); - - // If the last byte of the data is 0x0, this is either a normally - // packed string, or a binary packed UUID (which for these messages - // are packed with a 17th byte 0x0). Unpack into a std::string - // without the trailing \0, so "abc\0" becomes std::string("abc", 3) - // which matches const char* "abc". - if (size > 0 - && buf[size-1] == 0x0) - { - // special char*/size constructor because UUIDs may have embedded - // 0x0 bytes. - std::string binary_data(buf, size-1); - parameters.push_back(binary_data); - } - else + if (size >= 0) { - // This is either a NULL string, or a string that was packed - // incorrectly as binary data, without the usual trailing '\0'. - std::string string_data(buf, size); - parameters.push_back(string_data); + msg->getBinaryDataFast( + _PREHASH_ParamList, _PREHASH_Parameter, + buf, size, i, MAX_STRING-1); + + // If the last byte of the data is 0x0, this is either a normally + // packed string, or a binary packed UUID (which for these messages + // are packed with a 17th byte 0x0). Unpack into a std::string + // without the trailing \0, so "abc\0" becomes std::string("abc", 3) + // which matches const char* "abc". + if (size > 0 + && buf[size-1] == 0x0) + { + // special char*/size constructor because UUIDs may have embedded + // 0x0 bytes. + std::string binary_data(buf, size-1); + parameters.push_back(binary_data); + } + else + { + // This is either a NULL string, or a string that was packed + // incorrectly as binary data, without the usual trailing '\0'. + std::string string_data(buf, size); + parameters.push_back(string_data); + } } } return true; diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h index 167313b9b9..6edc2f34af 100644 --- a/indra/llmessage/llmessagereader.h +++ b/indra/llmessage/llmessagereader.h @@ -44,6 +44,12 @@ class LLVector3; class LLVector3d; class LLVector4; +// Error return values for getSize() functions +const S32 LL_BLOCK_NOT_IN_MESSAGE = -1; +const S32 LL_VARIABLE_NOT_IN_BLOCK = -2; +const S32 LL_MESSAGE_ERROR = -3; + + class LLMessageReader { public: diff --git a/indra/llmessage/llregionpresenceverifier.cpp b/indra/llmessage/llregionpresenceverifier.cpp index f206a40b0b..552cf4cbdb 100644 --- a/indra/llmessage/llregionpresenceverifier.cpp +++ b/indra/llmessage/llregionpresenceverifier.cpp @@ -41,7 +41,7 @@ void LLRegionPresenceVerifier::RegionResponder::result(const LLSD& content) llinfos << "Verifying " << destination.getString() << " is region " << id << llendl; std::stringstream uri; - uri << "http://" << destination.getString() << "/state/basic"; + uri << "http://" << destination.getString() << "/state/basic/"; mSharedData->getHttpClient().get(uri.str(), new VerifiedDestinationResponder(mSharedData, content)); } @@ -68,20 +68,35 @@ void LLRegionPresenceVerifier::VerifiedDestinationResponder::result(const LLSD& LLUUID actual_region_id = content["region_id"]; LLUUID expected_region_id = mContent["region_id"]; - if (mSharedData->checkValidity(content)) + lldebugs << "Actual region: " << content << llendl; + lldebugs << "Expected region: " << mContent << llendl; + + if (mSharedData->checkValidity(content) && + (actual_region_id == expected_region_id)) { mSharedData->onRegionVerified(mContent); } - else if ((mSharedData->shouldRetry()) && (actual_region_id != expected_region_id)) // If the region is correct, then it means we've deliberately changed the data + else if (mSharedData->shouldRetry()) { - LLSD headers; - headers["Cache-Control"] = "no-cache, max-age=0"; - llinfos << "Requesting region information, get uncached for region " << mSharedData->getRegionUri() << llendl; - mSharedData->decrementRetries(); - mSharedData->getHttpClient().get(mSharedData->getRegionUri(), new RegionResponder(mSharedData), headers); + retry(); } else { llwarns << "Could not correctly look up region from region presence service. Region: " << mSharedData->getRegionUri() << llendl; } } + +void LLRegionPresenceVerifier::VerifiedDestinationResponder::retry() +{ + LLSD headers; + headers["Cache-Control"] = "no-cache, max-age=0"; + llinfos << "Requesting region information, get uncached for region " << mSharedData->getRegionUri() << llendl; + mSharedData->decrementRetries(); + mSharedData->getHttpClient().get(mSharedData->getRegionUri(), new RegionResponder(mSharedData), headers); +} + +void LLRegionPresenceVerifier::VerifiedDestinationResponder::error(U32 status, const std::string& reason) +{ + retry(); +} + diff --git a/indra/llmessage/llregionpresenceverifier.h b/indra/llmessage/llregionpresenceverifier.h index 41c53762b6..d1de608ec6 100644 --- a/indra/llmessage/llregionpresenceverifier.h +++ b/indra/llmessage/llregionpresenceverifier.h @@ -71,7 +71,9 @@ public: public: VerifiedDestinationResponder(ResponsePtr data, const LLSD& content); virtual void result(const LLSD& content); + virtual void error(U32 status, const std::string& reason); private: + void retry(); ResponsePtr mSharedData; LLSD mContent; }; diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index 40e46b0ce9..80ea6ce96b 100644 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -182,15 +182,15 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) { // is there a message ready to go? if (mReceiveSize == -1) - { + { // This is a serious error - crash llerrs << "No message waiting for decode 4!" << llendl; - return -1; + return LL_MESSAGE_ERROR; } if (!mCurrentRMessageData) - { + { // This is a serious error - crash llerrs << "Invalid mCurrentRMessageData in getData!" << llendl; - return -1; + return LL_MESSAGE_ERROR; } char *bnamep = (char *)blockname; @@ -198,10 +198,10 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) - { - llerrs << "Block " << bnamep << " not in message " + { // don't crash + llinfos << "Block " << bnamep << " not in message " << mCurrentRMessageData->mName << llendl; - return -1; + return LL_BLOCK_NOT_IN_MESSAGE; } char *vnamep = (char *)varname; @@ -210,17 +210,17 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep]; if (!vardata.getName()) - { - llerrs << "Variable " << varname << " not in message " + { // don't crash + llinfos << "Variable " << varname << " not in message " << mCurrentRMessageData->mName << " block " << bnamep << llendl; - return -1; + return LL_VARIABLE_NOT_IN_BLOCK; } if (mCurrentRMessageTemplate->mMemberBlocks[bnamep]->mType != MBT_SINGLE) - { + { // This is a serious error - crash llerrs << "Block " << bnamep << " isn't type MBT_SINGLE," " use getSize with blocknum argument!" << llendl; - return -1; + return LL_MESSAGE_ERROR; } return vardata.getSize(); @@ -230,15 +230,15 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const { // is there a message ready to go? if (mReceiveSize == -1) - { + { // This is a serious error - crash llerrs << "No message waiting for decode 5!" << llendl; - return -1; + return LL_MESSAGE_ERROR; } if (!mCurrentRMessageData) - { + { // This is a serious error - crash llerrs << "Invalid mCurrentRMessageData in getData!" << llendl; - return -1; + return LL_MESSAGE_ERROR; } char *bnamep = (char *)blockname + blocknum; @@ -247,20 +247,20 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) - { - llerrs << "Block " << bnamep << " not in message " + { // don't crash + llinfos << "Block " << bnamep << " not in message " << mCurrentRMessageData->mName << llendl; - return -1; + return LL_BLOCK_NOT_IN_MESSAGE; } LLMsgBlkData* msg_data = iter->second; LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep]; if (!vardata.getName()) - { - llerrs << "Variable " << vnamep << " not in message " + { // don't crash + llinfos << "Variable " << vnamep << " not in message " << mCurrentRMessageData->mName << " block " << bnamep << llendl; - return -1; + return LL_VARIABLE_NOT_IN_BLOCK; } return vardata.getSize(); diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 716d895334..43b5f8e224 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -631,6 +631,8 @@ char* _PREHASH_OfferCallingCard = LLMessageStringTable::getInstance()->getString char* _PREHASH_AcceptCallingCard = LLMessageStringTable::getInstance()->getString("AcceptCallingCard"); char* _PREHASH_DeclineCallingCard = LLMessageStringTable::getInstance()->getString("DeclineCallingCard"); char* _PREHASH_AgentAccess = LLMessageStringTable::getInstance()->getString("AgentAccess"); +char* _PREHASH_AgentLegacyAccess = LLMessageStringTable::getInstance()->getString("AgentLegacyAccess"); +char* _PREHASH_AgentMaxAccess = LLMessageStringTable::getInstance()->getString("AgentMaxAccess"); char* _PREHASH_DataHomeLocationReply = LLMessageStringTable::getInstance()->getString("DataHomeLocationReply"); char* _PREHASH_EventLocationReply = LLMessageStringTable::getInstance()->getString("EventLocationReply"); char* _PREHASH_TerseDateID = LLMessageStringTable::getInstance()->getString("TerseDateID"); @@ -1377,5 +1379,4 @@ char* _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord") char* _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord"); char* _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex"); char* _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData"); - - +char* _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index c7bb7fff26..f8ef610408 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -631,6 +631,8 @@ extern char * _PREHASH_OfferCallingCard; extern char * _PREHASH_AcceptCallingCard; extern char * _PREHASH_DeclineCallingCard; extern char * _PREHASH_AgentAccess; +extern char * _PREHASH_AgentLegacyAccess; +extern char * _PREHASH_AgentMaxAccess; extern char * _PREHASH_DataHomeLocationReply; extern char * _PREHASH_EventLocationReply; extern char * _PREHASH_TerseDateID; @@ -1377,5 +1379,5 @@ extern char * _PREHASH_UCoord; extern char * _PREHASH_VCoord; extern char * _PREHASH_FaceIndex; extern char * _PREHASH_StatusData; - +extern char * _PREHASH_ProductSKU; #endif diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index e0c3ec3c24..beecb6b7c1 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -131,7 +131,6 @@ LLFontGL::~LLFontGL() void LLFontGL::reset() { - resetBitmapCache(); if (!mIsFallback) { // This is the head of the list - need to rebuild ourself and all fallbacks. @@ -150,6 +149,7 @@ void LLFontGL::reset() } } } + resetBitmapCache(); } // static @@ -679,8 +679,6 @@ S32 LLFontGL::render(const LLWString &wstr, gGL.popMatrix(); - gGL.getTexUnit(0)->disable(); - return chars_drawn; } diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 2fd1056f20..2ae96726af 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -49,7 +49,7 @@ class LLNotificationHistoryChannel : public LLNotificationChannel LOG_CLASS(LLNotificationHistoryChannel); public: LLNotificationHistoryChannel(const std::string& filename) : - LLNotificationChannel("History", "Visible", &historyFilter), + LLNotificationChannel("History", "Visible", &historyFilter, LLNotificationComparators::orderByUUID()), mFileName(filename) { connectChanged(boost::bind(&LLNotificationHistoryChannel::historyHandler, this, _1)); @@ -858,6 +858,20 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt return abortProcessing; } +/* static */ +LLNotificationChannelPtr LLNotificationChannel::buildChannel(const std::string& name, + const std::string& parent, + LLNotificationFilter filter, + LLNotificationComparator comparator) +{ + // note: this is not a leak; notifications are self-registering. + // This factory helps to prevent excess deletions by making sure all smart + // pointers to notification channels come from the same source + new LLNotificationChannel(name, parent, filter, comparator); + return LLNotifications::instance().getChannel(name); +} + + LLNotificationChannel::LLNotificationChannel(const std::string& name, const std::string& parent, LLNotificationFilter filter, @@ -1054,21 +1068,22 @@ void LLNotifications::createDefaultChannels() { // now construct the various channels AFTER loading the notifications, // because the history channel is going to rewrite the stored notifications file - new LLNotificationChannel("Expiration", "", + LLNotificationChannel::buildChannel("Expiration", "", boost::bind(&LLNotifications::expirationFilter, this, _1)); - new LLNotificationChannel("Unexpired", "", + LLNotificationChannel::buildChannel("Unexpired", "", !boost::bind(&LLNotifications::expirationFilter, this, _1)); // use negated bind - new LLNotificationChannel("Unique", "Unexpired", + LLNotificationChannel::buildChannel("Unique", "Unexpired", boost::bind(&LLNotifications::uniqueFilter, this, _1)); - new LLNotificationChannel("Ignore", "Unique", + LLNotificationChannel::buildChannel("Ignore", "Unique", filterIgnoredNotifications); - new LLNotificationChannel("Visible", "Ignore", + LLNotificationChannel::buildChannel("Visible", "Ignore", &LLNotificationFilters::includeEverything); // create special history channel //std::string notifications_log_file = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml" ); // use ^^^ when done debugging notifications serialization std::string notifications_log_file = gDirUtilp->getExpandedFilename ( LL_PATH_USER_SETTINGS, "open_notifications.xml" ); + // this isn't a leak, don't worry about the empty "new" new LLNotificationHistoryChannel(notifications_log_file); // connect action methods to these channels diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index cb5d2f6f34..bb379121cc 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -735,6 +735,13 @@ protected: LLNotificationFilter mFilter; }; +// The type of the pointers that we're going to manage in the NotificationQueue system +// Because LLNotifications is a singleton, we don't actually expect to ever +// destroy it, but if it becomes necessary to do so, the shared_ptr model +// will ensure that we don't leak resources. +class LLNotificationChannel; +typedef boost::shared_ptr LLNotificationChannelPtr; + // manages a list of notifications // Note that if this is ever copied around, we might find ourselves with multiple copies // of a queue with notifications being added to different nonequivalent copies. So we @@ -742,8 +749,9 @@ protected: // // NOTE: LLNotificationChannel is self-registering. The *correct* way to create one is to // do something like: -// new LLNotificationChannel("name", "parent"...); -// You can then retrieve the channel by using the registry: +// LLNotificationChannel::buildChannel("name", "parent"...); +// This returns an LLNotificationChannelPtr, which you can store, or +// you can then retrieve the channel by using the registry: // LLNotifications::instance().getChannel("name")... // class LLNotificationChannel : @@ -754,13 +762,6 @@ class LLNotificationChannel : public: virtual ~LLNotificationChannel() {} - // Notification Channels have a filter, which determines which notifications - // will be added to this channel. - // Channel filters cannot change. - LLNotificationChannel(const std::string& name, const std::string& parent, - LLNotificationFilter filter=LLNotificationFilters::includeEverything, - LLNotificationComparator comparator=LLNotificationComparators::orderByUUID()); - typedef LLNotificationSet::iterator Iterator; std::string getName() const { return mName; } @@ -777,6 +778,21 @@ public: std::string summarize(); + // factory method for constructing these channels; since they're self-registering, + // we want to make sure that you can't use new to make them + static LLNotificationChannelPtr buildChannel(const std::string& name, const std::string& parent, + LLNotificationFilter filter=LLNotificationFilters::includeEverything, + LLNotificationComparator comparator=LLNotificationComparators::orderByUUID()); + +protected: + // Notification Channels have a filter, which determines which notifications + // will be added to this channel. + // Channel filters cannot change. + // Channels have a protected constructor so you can't make smart pointers that don't + // come from our internal reference; call NotificationChannel::build(args) + LLNotificationChannel(const std::string& name, const std::string& parent, + LLNotificationFilter filter, LLNotificationComparator comparator); + private: std::string mName; std::string mParent; @@ -785,12 +801,6 @@ private: -// The type of the pointers that we're going to manage in the NotificationQueue system -// Because LLNotifications is a singleton, we don't actually expect to ever -// destroy it, but if it becomes necessary to do so, the shared_ptr model -// will ensure that we don't leak resources. -typedef boost::shared_ptr LLNotificationChannelPtr; - class LLNotifications : public LLSingleton, public LLNotificationChannelBase diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index 2348ef314c..89893bcf8d 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -431,7 +431,7 @@ LLView* LLTextBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *f std::string font_style; if (node->getAttributeString("font-style", font_style)) { - text_box->mFontStyle |= LLFontGL::getStyleFromString(font_style); + text_box->mFontStyle = LLFontGL::getStyleFromString(font_style); } BOOL mouse_opaque = text_box->getMouseOpaque(); diff --git a/indra/llui/lltextparser.cpp b/indra/llui/lltextparser.cpp index cc3fcd4d84..227d24a865 100644 --- a/indra/llui/lltextparser.cpp +++ b/indra/llui/lltextparser.cpp @@ -121,7 +121,7 @@ S32 LLTextParser::findPattern(const std::string &text, LLSD highlight) pattern= utf8str_tolower(pattern); } - S32 found=std::string::npos; + size_t found=std::string::npos; switch ((S32)highlight["condition"]) { diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 699c76a09d..2350ea6050 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1370,8 +1370,6 @@ void LLView::draw() { drawDebugRect(); } - - gGL.getTexUnit(0)->disable(); } //Draw a box for debugging. diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index 97632b3496..ef8c4d6c7f 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -234,7 +234,9 @@ const S32 LLVFSFileBlock::SERIAL_SIZE = 34; LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash) -: mRemoveAfterCrash(remove_after_crash) +: mRemoveAfterCrash(remove_after_crash), + mDataFP(NULL), + mIndexFP(NULL) { mDataMutex = new LLMutex(0); @@ -250,17 +252,21 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename const char *file_mode = mReadOnly ? "rb" : "r+b"; - if (! (mDataFP = openAndLock(mDataFilename, file_mode, mReadOnly))) + LL_INFOS("VFS") << "Attempting to open VFS index file " << mIndexFilename << LL_ENDL; + LL_INFOS("VFS") << "Attempting to open VFS data file " << mDataFilename << LL_ENDL; + + mDataFP = openAndLock(mDataFilename, file_mode, mReadOnly); + if (!mDataFP) { - if (mReadOnly) { LL_WARNS("VFS") << "Can't find " << mDataFilename << " to open read-only VFS" << LL_ENDL; mValid = VFSVALID_BAD_CANNOT_OPEN_READONLY; return; } - - if((mDataFP = openAndLock(mDataFilename, "w+b", FALSE))) + + mDataFP = openAndLock(mDataFilename, "w+b", FALSE); + if (mDataFP) { // Since we're creating this data file, assume any index file is bogus // remove the index, since this vfs is now blank @@ -268,41 +274,12 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename } else { - LL_WARNS("VFS") << "Can't open VFS data file " << mDataFilename << " attempting to use alternate" << LL_ENDL; - - std::string temp_index; - std::string temp_data; - - for (U32 count = 0; count < 256; count++) - { - temp_index = mIndexFilename + llformat(".%u",count); - temp_data = mDataFilename + llformat(".%u", count); - - // try just opening, then creating, each alternate - if ((mDataFP = openAndLock(temp_data, "r+b", FALSE))) - { - break; - } - - if ((mDataFP = openAndLock(temp_data, "w+b", FALSE))) - { - // we're creating the datafile, so nuke the indexfile - LLFile::remove(temp_index); - break; - } - } - - if (! mDataFP) - { - LL_WARNS("VFS") << "Couldn't open vfs data file after trying many alternates" << LL_ENDL; - mValid = VFSVALID_BAD_CANNOT_CREATE; - return; - } - - mIndexFilename = temp_index; - mDataFilename = temp_data; + LL_WARNS("VFS") << "Couldn't open vfs data file " + << mDataFilename << LL_ENDL; + mValid = VFSVALID_BAD_CANNOT_CREATE; + return; } - + if (presize) { presizeDataFile(presize); @@ -351,7 +328,7 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename llstat fbuf; if (! LLFile::stat(mIndexFilename, &fbuf) && fbuf.st_size >= LLVFSFileBlock::SERIAL_SIZE && - (mIndexFP = openAndLock(mIndexFilename, file_mode, mReadOnly)) + (mIndexFP = openAndLock(mIndexFilename, file_mode, mReadOnly)) // Yes, this is an assignment and not '==' ) { std::vector buffer(fbuf.st_size); @@ -539,7 +516,7 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename addFreeBlock(new LLVFSBlock(0, data_size)); } } - else + else // Pre-existing index file wasn't opened { if (mReadOnly) { @@ -579,8 +556,8 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename } } - LL_WARNS("VFS") << "Using index file " << mIndexFilename << LL_ENDL; - LL_WARNS("VFS") << "Using data file " << mDataFilename << LL_ENDL; + LL_INFOS("VFS") << "Using VFS index file " << mIndexFilename << LL_ENDL; + LL_INFOS("VFS") << "Using VFS data file " << mDataFilename << LL_ENDL; mValid = VFSVALID_OK; } @@ -619,6 +596,47 @@ LLVFS::~LLVFS() delete mDataMutex; } + +// Use this function normally to create LLVFS files. +// Will append digits to the end of the filename with multiple re-trys +// static +LLVFS * LLVFS::createLLVFS(const std::string& index_filename, + const std::string& data_filename, + const BOOL read_only, + const U32 presize, + const BOOL remove_after_crash) +{ + LLVFS * new_vfs = new LLVFS(index_filename, data_filename, read_only, presize, remove_after_crash); + + if( !new_vfs->isValid() ) + { // First name failed, retry with new names + std::string retry_vfs_index_name; + std::string retry_vfs_data_name; + S32 count = 0; + while (!new_vfs->isValid() && + count < 256) + { // Append '.' to end of filenames + retry_vfs_index_name = index_filename + llformat(".%u",count); + retry_vfs_data_name = data_filename + llformat(".%u", count); + + delete new_vfs; // Delete bad VFS and try again + new_vfs = new LLVFS(retry_vfs_index_name, retry_vfs_data_name, read_only, presize, remove_after_crash); + + count++; + } + } + + if( !new_vfs->isValid() ) + { + delete new_vfs; // Delete bad VFS + new_vfs = NULL; // Total failure + } + + return new_vfs; +} + + + void LLVFS::presizeDataFile(const U32 size) { if (!mDataFP) diff --git a/indra/llvfs/llvfs.h b/indra/llvfs/llvfs.h index a68c8f4ef9..2acda7ae29 100644 --- a/indra/llvfs/llvfs.h +++ b/indra/llvfs/llvfs.h @@ -77,11 +77,25 @@ public: class LLVFS { -public: +private: + // Use createLLVFS() to open a VFS file // Pass 0 to not presize - LLVFS(const std::string& index_filename, const std::string& data_filename, const BOOL read_only, const U32 presize, const BOOL remove_after_crash); + LLVFS(const std::string& index_filename, + const std::string& data_filename, + const BOOL read_only, + const U32 presize, + const BOOL remove_after_crash); +public: ~LLVFS(); + // Use this function normally to create LLVFS files + // Pass 0 to not presize + static LLVFS * createLLVFS(const std::string& index_filename, + const std::string& data_filename, + const BOOL read_only, + const U32 presize, + const BOOL remove_after_crash); + BOOL isValid() const { return (VFSVALID_OK == mValid); } EVFSValid getValidState() const { return mValid; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index fa7d226f16..668b710c22 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -141,7 +141,6 @@ set(viewer_SOURCE_FILES llfloaterchat.cpp llfloaterchatterbox.cpp llfloaterclassified.cpp - llfloaterclothing.cpp llfloatercolorpicker.cpp llfloatercustomize.cpp llfloaterdaycycle.cpp @@ -311,6 +310,7 @@ set(viewer_SOURCE_FILES llpreviewscript.cpp llpreviewsound.cpp llpreviewtexture.cpp + llproductinforequest.cpp llprogressview.cpp llregionposition.cpp llremoteparcelrequest.cpp @@ -545,7 +545,6 @@ set(viewer_HEADER_FILES llfloaterchat.h llfloaterchatterbox.h llfloaterclassified.h - llfloaterclothing.h llfloatercolorpicker.h llfloatercustomize.h llfloaterdaycycle.h @@ -715,6 +714,7 @@ set(viewer_HEADER_FILES llpreviewscript.h llpreviewsound.h llpreviewtexture.h + llproductinforequest.h llprogressview.h llregionposition.h llremoteparcelrequest.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index d90882fb96..0081893869 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1451,17 +1451,6 @@ Value 1 - ClothingBtnState - - Comment - - Persist - 0 - Type - Boolean - Value - 0 - CmdLineDisableVoice Comment @@ -11640,7 +11629,7 @@ Type Boolean Value - 0 + 1 WaterEditPresets diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 748400532f..56de9c610a 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -90,14 +90,15 @@ ATI Radeon HD 2300 .*ATI.*Radeon HD 23.* 0 1 ATI Radeon HD 2400 .*ATI.*Radeon HD.*24.* 1 1 ATI Radeon HD 2600 .*ATI.*Radeon HD 26.* 2 1 ATI Radeon HD 2900 .*ATI.*Radeon HD 29.* 3 1 -ATI Radeon HD 3200 .*ATI.*Radeon HD.*32.* 1 1 +ATI Radeon HD 3200 .*ATI.*Radeon.*HD.*32.* 1 1 ATI Radeon HD 3300 .*ATI.*Radeon HD.*33.* 1 1 ATI Radeon HD 3400 .*ATI.*Radeon HD.*34.* 1 1 ATI Radeon HD 3600 .*ATI.*Radeon HD.*36.* 3 1 ATI Radeon HD 3800 .*ATI.*Radeon HD.*38.* 3 1 ATI Radeon HD 4300 .*ATI.*Radeon HD 43.* 1 1 +ATI Radeon HD 4500 .*ATI.*Radeon HD 45.* 2 1 ATI Radeon HD 4600 .*ATI.*Radeon HD 46.* 3 1 -ATI Radeon HD 4800 .*ATI.*Radeon HD.*48.* 3 1 +ATI Radeon HD 4800 .*ATI.*Radeon.*HD.*48.* 3 1 ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 ATI Radeon 2100 .*ATI.*Radeon 21.* 0 1 ATI Radeon 3100 .*ATI.*Radeon 31.* 1 1 @@ -135,6 +136,7 @@ ATI Radeon X900 .*ATI.*Radeon X9.* 2 1 ATI Radeon Xpress .*ATI.*Radeon Xpress.* 0 0 ATI Rage 128 .*ATI.*Rage 128.* 0 1 ATI RV250 .*ATI.*RV250.* 0 1 +ATI RV380 .*ATI.*RV380.* 0 1 ATI RV530 .*ATI.*RV530.* 1 1 ATI RX700 .*ATI.*RX700.* 1 1 Intel X3100 .*Intel.*X3100.* 0 1 @@ -160,8 +162,9 @@ Intel Montara .*Intel.*Montara.* 0 0 Intel Springdale .*Intel.*Springdale.* 0 0 Matrox .*Matrox.* 0 0 Mesa .*Mesa.* 0 0 -NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*260.* 3 1 -NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*280.* 3 1 +NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*26.* 3 1 +NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*28.* 3 1 +NVIDIA GTX 290 .*NVIDIA.*GeForce.*GTX.*29.* 3 1 NVIDIA C51 .*NVIDIA.*C51.* 0 1 NVIDIA G72 .*NVIDIA.*G72.* 1 1 NVIDIA G73 .*NVIDIA.*G73.* 1 1 @@ -187,7 +190,7 @@ NVIDIA GeForce 7300 .*NVIDIA.*GeForce 73.* 1 1 NVIDIA GeForce 7500 .*NVIDIA.*GeForce 75.* 1 1 NVIDIA GeForce 7600 .*NVIDIA.*GeForce 76.* 2 1 NVIDIA GeForce 7800 .*NVIDIA.*GeForce.*78.* 2 1 -NVIDIA GeForce 7900 .*NVIDIA.*GeForce 79.* 2 1 +NVIDIA GeForce 7900 .*NVIDIA.*GeForce.*79.* 2 1 NVIDIA GeForce 8100 .*NVIDIA.*GeForce 81.* 1 1 NVIDIA GeForce 8200 .*NVIDIA.*GeForce 82.* 1 1 NVIDIA GeForce 8300 .*NVIDIA.*GeForce 83.* 1 1 @@ -205,8 +208,8 @@ NVIDIA GeForce 9700M .*NVIDIA.*GeForce 9700M.* 2 1 NVIDIA GeForce 9300 .*NVIDIA.*GeForce 93.* 1 1 NVIDIA GeForce 9400 .*GeForce 94.* 1 1 NVIDIA GeForce 9500 .*NVIDIA.*GeForce 95.* 2 1 -NVIDIA GeForce 9600 .*NVIDIA.*GeForce 96.* 3 1 -NVIDIA GeForce 9800 .*NVIDIA.*GeForce 98.* 3 1 +NVIDIA GeForce 9600 .*NVIDIA.*GeForce.*96.* 3 1 +NVIDIA GeForce 9800 .*NVIDIA.*GeForce.*98.* 3 1 NVIDIA GeForce FX 5100 .*NVIDIA.*GeForce FX 51.* 0 1 NVIDIA GeForce FX 5200 .*NVIDIA.*GeForce FX 52.* 0 1 NVIDIA GeForce FX 5500 .*NVIDIA.*GeForce FX 55.* 0 1 @@ -236,8 +239,6 @@ NVIDIA GeForce Go 7600 .*NVIDIA.*GeForce Go 76.* 2 1 NVIDIA GeForce Go 7700 .*NVIDIA.*GeForce Go 77.* 2 1 NVIDIA GeForce Go 7800 .*NVIDIA.*GeForce Go 78.* 2 1 NVIDIA GeForce Go 7900 .*NVIDIA.*GeForce Go 79.* 2 1 -NVIDIA GeForce GTX 260 .*NVIDIA.*GeForce GTX 26.* 3 1 -NVIDIA GeForce GTX 280 .*NVIDIA.*GeForce GTX 28.* 3 1 NVIDIA D9M .*D9M.* 1 1 NVIDIA G84 .*G84.* 1 1 NVIDIA G92 .*G92.* 3 1 @@ -249,6 +250,7 @@ NVIDIA GeForce PCX .*GeForce PCX.* 0 1 NVIDIA Generic .*NVIDIA.*Unknown.* 0 0 NVIDIA NV17 .*GeForce NV17.* 0 1 NVIDIA NV34 .*NVIDIA.*NV34.* 0 1 +NVIDIA NV35 .*NVIDIA.*NV35.* 0 1 NVIDIA NV36 .*GeForce NV36.* 1 1 NVIDIA NV43 .*NVIDIA.*NV43.* 1 1 NVIDIA NV44 .*NVIDIA.*NV44.* 1 1 diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 483568f974..87218008bd 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -228,13 +228,18 @@ FunctionEnd Function CheckNetworkConnection Push $0 Push $1 + Push $2 # Option value for GetOptions DetailPrint $(CheckNetworkConnectionDP) + ; Look for a tag value from the stub installer, used for statistics + ; to correlate installs. Default to "" if not found on command line. + StrCpy $2 "" + ${GetOptions} $COMMANDLINE "/STUBTAG=" $2 GetTempFileName $0 !define HTTP_TIMEOUT 5000 ; milliseconds ; Don't show secondary progress bar, this will be quick. NSISdl::download_quiet \ /TIMEOUT=${HTTP_TIMEOUT} \ - "http://install.secondlife.com/check/?v=${VERSION_LONG}" \ + "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \ $0 Pop $1 ; Return value, either "success", "cancel" or an error message ; MessageBox MB_OK "Download result: $1" @@ -242,6 +247,7 @@ Function CheckNetworkConnection ; StrCmp $1 "success" +2 ; DetailPrint "Connection failed: $1" Delete $0 ; temporary file + Pop $2 Pop $1 Pop $0 Return diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 3b534ce5a7..9785940ff6 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -217,7 +217,6 @@ LLAgent gAgent; // // Statics // -BOOL LLAgent::sDebugDisplayTarget = FALSE; const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; @@ -4428,7 +4427,8 @@ void LLAgent::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id) // for attachments, make offset relative to avatar, not the attachment if (mFocusObject->isAttachment()) { - while (!mFocusObject->isAvatar()) + while (mFocusObject.notNull() // DEV-29123 - can crash with a messed-up attachment + && !mFocusObject->isAvatar()) { mFocusObject = (LLViewerObject*) mFocusObject->getParent(); } @@ -4842,6 +4842,36 @@ bool LLAgent::canAccessAdult() const return mAgentAccess.canAccessAdult(); } +bool LLAgent::canAccessMaturityInRegion( U64 region_handle ) const +{ + LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle( region_handle ); + if( regionp ) + { + switch( regionp->getSimAccess() ) + { + case SIM_ACCESS_MATURE: + if( !canAccessMature() ) + return false; + break; + case SIM_ACCESS_ADULT: + if( !canAccessAdult() ) + return false; + break; + default: + // Oh, go on and hear the silly noises. + break; + } + } + + return true; +} + +bool LLAgent::canAccessMaturityAtGlobal( LLVector3d pos_global ) const +{ + U64 region_handle = to_region_handle_global( pos_global.mdV[0], pos_global.mdV[1] ); + return canAccessMaturityInRegion( region_handle ); +} + bool LLAgent::prefersPG() const { return mAgentAccess.prefersPG(); @@ -6431,6 +6461,8 @@ void LLAgent::saveWearable( EWearableType type, BOOL send_update ) addWearableToAgentInventory(cb, new_wearable); return; } + + getAvatarObject()->wearableUpdated( type ); if( send_update ) { diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index fefb2a1d0b..226c78e631 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -208,7 +208,7 @@ public: void heardChat(const LLUUID& id); void lookAtLastChat(); - F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); } + F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); } void setAFK(); void clearAFK(); @@ -258,6 +258,8 @@ public: bool wantsPGOnly() const; bool canAccessMature() const; bool canAccessAdult() const; + bool canAccessMaturityInRegion( U64 region_handle ) const; + bool canAccessMaturityAtGlobal( LLVector3d pos_global ) const; bool prefersPG() const; bool prefersMature() const; bool prefersAdult() const; @@ -743,7 +745,6 @@ public: BOOL mInitialized; - static BOOL sDebugDisplayTarget; S32 mNumPendingQueries; S32* mActiveCacheQueries; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 43800c67fa..f2154a05dc 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -848,7 +848,6 @@ bool LLAppViewer::mainLoop() try { LLFastTimer t(LLFastTimer::FTM_FRAME); - pingMainloopTimeout("Main:MiscNativeWindowEvents"); { @@ -1999,38 +1998,9 @@ bool LLAppViewer::initConfiguration() } initMarkerFile(); - -#if LL_SEND_CRASH_REPORTS - if (gLastExecEvent == LAST_EXEC_FROZE) - { - llinfos << "Last execution froze, requesting to send crash report." << llendl; - // - // Pop up a freeze or crash warning dialog - // - std::ostringstream msg; - msg << gSecondLife - << " appears to have frozen or crashed on the previous run.\n" - << "Would you like to send a crash report?"; - std::string alert; - alert = gSecondLife; - alert += " Alert"; - S32 choice = OSMessageBox(msg.str(), - alert, - OSMB_YESNO); - if (OSBTN_YES == choice) - { - llinfos << "Sending crash report." << llendl; - - bool report_freeze = true; - handleCrashReporting(report_freeze); - } - else - { - llinfos << "Not sending crash report." << llendl; - } - } -#endif // #if LL_SEND_CRASH_REPORTS - } + + checkForCrash(); + } else { mSecondInstance = anotherInstanceRunning(); @@ -2048,6 +2018,11 @@ bool LLAppViewer::initConfiguration() } initMarkerFile(); + + if(!mSecondInstance) + { + checkForCrash(); + } } // need to do this here - need to have initialized global settings first @@ -2062,6 +2037,43 @@ bool LLAppViewer::initConfiguration() return true; // Config was successful. } + +void LLAppViewer::checkForCrash(void) +{ + +#if LL_SEND_CRASH_REPORTS + if (gLastExecEvent == LAST_EXEC_FROZE || gLastExecEvent == LAST_EXEC_OTHER_CRASH) + { + llinfos << "Last execution froze, requesting to send crash report." << llendl; + // + // Pop up a freeze or crash warning dialog + // + std::ostringstream msg; + msg << gSecondLife + << " appears to have frozen or crashed on the previous run.\n" + << "Would you like to send a crash report?"; + std::string alert; + alert = gSecondLife; + alert += " Alert"; + S32 choice = OSMessageBox(msg.str(), + alert, + OSMB_YESNO); + if (OSBTN_YES == choice) + { + llinfos << "Sending crash report." << llendl; + + bool report_freeze = true; + handleCrashReporting(report_freeze); + } + else + { + llinfos << "Not sending crash report." << llendl; + } + } +#endif // LL_SEND_CRASH_REPORTS + +} + bool LLAppViewer::initWindow() { LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL; @@ -2397,6 +2409,10 @@ void LLAppViewer::handleViewerCrash() LLError::logToFile(""); +// On Mac, we send the report on the next run, since we need macs crash report +// for a stack trace, so we have to let it the app fail. +#if !LL_DARWIN + // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked if(gDebugInfo["LastExecEvent"].asInteger() == LAST_EXEC_LOGOUT_CRASH) { @@ -2410,6 +2426,8 @@ void LLAppViewer::handleViewerCrash() // Call to pure virtual, handled by platform specific llappviewer instance. pApp->handleCrashReporting(); +#endif //!LL_DARWIN + return; } @@ -2465,6 +2483,13 @@ void LLAppViewer::initMarkerFile() std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME); std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME); + + if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB) && !anotherInstanceRunning()) + { + gLastExecEvent = LAST_EXEC_FROZE; + LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL; + } + if(LLAPRFile::isExist(logout_marker_file, NULL, LL_APR_RB)) { LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << LL_ENDL; @@ -2487,18 +2512,12 @@ void LLAppViewer::initMarkerFile() LLAPRFile::remove(llerror_marker_file); LLAPRFile::remove(error_marker_file); - //Freeze case checks + // No new markers if another instance is running. if(anotherInstanceRunning()) { return; } - if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB)) - { - gLastExecEvent = LAST_EXEC_FROZE; - LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL; - } - // Create the marker file for this execution & lock it apr_status_t s; s = mMarkerFile.open(mMarkerFileName, LL_APR_W, gAPRPoolp); @@ -2873,17 +2892,17 @@ bool LLAppViewer::initCache() gSavedSettings.setU32("VFSSalt", new_salt); // Don't remove VFS after viewer crashes. If user has corrupt data, they can reinstall. JC - gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); - if( VFSVALID_BAD_CORRUPT == gVFS->getValidState() ) + gVFS = LLVFS::createLLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); + if( !gVFS ) { - // Try again with fresh files - // (The constructor deletes corrupt files when it finds them.) - LL_WARNS("AppCache") << "VFS corrupt, deleted. Making new VFS." << LL_ENDL; - delete gVFS; - gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); + return false; } - gStaticVFS = new LLVFS(static_vfs_index_file, static_vfs_data_file, true, 0, false); + gStaticVFS = LLVFS::createLLVFS(static_vfs_index_file, static_vfs_data_file, true, 0, false); + if( !gStaticVFS ) + { + return false; + } BOOL success = gVFS->isValid() && gStaticVFS->isValid(); if( !success ) diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index fc88c76aaf..a3b84759f5 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -85,7 +85,8 @@ public: virtual void handleSyncCrashTrace() = 0; // any low-level crash-prep that has to happen in the context of the crashing thread before the crash report is delivered. static void handleViewerCrash(); // Hey! The viewer crashed. Do this, soon. static void handleSyncViewerCrash(); // Hey! The viewer crashed. Do this right NOW in the context of the crashing thread. - + void checkForCrash(); + // Thread accessors static LLTextureCache* getTextureCache() { return sTextureCache; } static LLWorkerThread* getImageDecodeThread() { return sImageDecodeThread; } diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index b75de02ffc..87c3ccaffe 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -58,12 +58,12 @@ public: POOL_SKY, POOL_WL_SKY, POOL_GROUND, - POOL_INVISIBLE, - POOL_AVATAR, - POOL_WATER, POOL_GRASS, POOL_FULLBRIGHT, POOL_BUMP, + POOL_INVISIBLE, + POOL_AVATAR, + POOL_WATER, POOL_GLOW, POOL_ALPHA, NUM_POOL_TYPES, diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 0de21f03f2..80c7d73e6a 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -752,67 +752,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) if( !single_avatar || (avatarp == single_avatar) ) { - if (LLVOAvatar::sShowCollisionVolumes) - { - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - avatarp->renderCollisionVolumes(); - } - - if (avatarp->isSelf() && LLAgent::sDebugDisplayTarget) - { - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLVector3 pos = avatarp->getPositionAgent(); - - gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f); - gGL.begin(LLRender::LINES); - { - gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV); - }gGL.end(); - - pos = avatarp->mDrawable->getPositionAgent(); - gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f); - gGL.begin(LLRender::LINES); - { - gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV); - }gGL.end(); - - pos = avatarp->mRoot.getWorldPosition(); - gGL.color4f(1.0f, 1.0f, 1.0f, 0.8f); - gGL.begin(LLRender::LINES); - { - gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV); - }gGL.end(); - - pos = avatarp->mPelvisp->getWorldPosition(); - gGL.color4f(0.0f, 0.0f, 1.0f, 0.8f); - gGL.begin(LLRender::LINES); - { - gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV); - gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV); - gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV); - }gGL.end(); - - color.setColor(1.0f, 1.0f, 1.0f, 1.0f); - } - avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); } } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index e096bc07bd..3dfe6a2820 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -932,12 +932,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { clearState(TEXTURE_ANIM); } - //else if (getVirtualSize() <= 512.f) - //{ - // //vobj->mTextureAnimp->animateTextures(os, ot, ms, mt, r); - // //cos_ang = cos(r); - // //sin_ang = sin(r); - //} else { os = ot = 0.f; diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 8e2d44911c..29506e21d5 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -1174,7 +1174,7 @@ void LLFloaterBuyLandUI::refreshUI() else if (mParcelBillableArea == mParcelActualArea) { LLStringUtil::format_map_t string_args; - string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea); + string_args["[AMOUNT]"] = llformat("%d ", mParcelActualArea); message += getString("parcel_meters", string_args); } else @@ -1183,13 +1183,13 @@ void LLFloaterBuyLandUI::refreshUI() if (mParcelBillableArea > mParcelActualArea) { LLStringUtil::format_map_t string_args; - string_args["[AMOUNT]"] = llformat("%d", mParcelBillableArea); + string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea); message += getString("premium_land", string_args); } else { LLStringUtil::format_map_t string_args; - string_args["[AMOUNT]"] = llformat("%d", mParcelBillableArea); + string_args["[AMOUNT]"] = llformat("%d ", mParcelBillableArea); message += getString("discounted_land", string_args); } } diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 3606f7ccbe..c8a76cbe55 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -138,6 +138,8 @@ BOOL LLFloaterImagePreview::postBuild() //----------------------------------------------------------------------------- LLFloaterImagePreview::~LLFloaterImagePreview() { + clearAllPreviewTextures(); + mRawImagep = NULL; delete mAvatarPreview; delete mSculptedPreview; @@ -205,6 +207,21 @@ void LLFloaterImagePreview::onPreviewTypeCommit(LLUICtrl* ctrl, void* userdata) fp->mSculptedPreview->refresh(); } + +//----------------------------------------------------------------------------- +// clearAllPreviewTextures() +//----------------------------------------------------------------------------- +void LLFloaterImagePreview::clearAllPreviewTextures() +{ + mAvatarPreview->clearPreviewTexture("mHairMesh0"); + mAvatarPreview->clearPreviewTexture("mUpperBodyMesh0"); + mAvatarPreview->clearPreviewTexture("mLowerBodyMesh0"); + mAvatarPreview->clearPreviewTexture("mHeadMesh0"); + mAvatarPreview->clearPreviewTexture("mUpperBodyMesh0"); + mAvatarPreview->clearPreviewTexture("mLowerBodyMesh0"); + mAvatarPreview->clearPreviewTexture("mSkirtMesh0"); +} + //----------------------------------------------------------------------------- // draw() //----------------------------------------------------------------------------- @@ -648,6 +665,19 @@ void LLImagePreviewAvatar::setPreviewTarget(const std::string& joint_name, const mCameraOffset.clearVec(); } +//----------------------------------------------------------------------------- +// clearPreviewTexture() +//----------------------------------------------------------------------------- +void LLImagePreviewAvatar::clearPreviewTexture(const std::string& mesh_name) +{ + LLViewerJointMesh *mesh = (LLViewerJointMesh*)mDummyAvatar->mRoot.findJoint(mesh_name); + // clear out existing test mesh + if (mesh) + { + mesh->setTestTexture(0); + } +} + //----------------------------------------------------------------------------- // update() //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterimagepreview.h b/indra/newview/llfloaterimagepreview.h index e639544f48..6a4de3d3cc 100644 --- a/indra/newview/llfloaterimagepreview.h +++ b/indra/newview/llfloaterimagepreview.h @@ -81,6 +81,7 @@ public: void setPreviewTarget(const std::string& joint_name, const std::string& mesh_name, LLImageRaw* imagep, F32 distance, BOOL male); void setTexture(U32 name) { mTextureName = name; } + void clearPreviewTexture(const std::string& mesh_name); BOOL render(); void refresh(); @@ -118,6 +119,8 @@ public: static void onMouseCaptureLostImagePreview(LLMouseHandler*); static void setUploadAmount(S32 amount) { sUploadAmount = amount; } + void clearAllPreviewTextures(); + protected: static void onPreviewTypeCommit(LLUICtrl*,void*); void draw(); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index dc18369bb6..94a834502f 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -896,7 +896,7 @@ void LLPanelLandGeneral::onClickStartAuction(void* data) { if(parcelp->getForSale()) { - LLNotifications::instance().add("CannotStartAuctionAlreadForSale"); + LLNotifications::instance().add("CannotStartAuctionAlreadyForSale"); } else { @@ -1770,8 +1770,24 @@ BOOL LLPanelLandOptions::postBuild() childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this); - mCategoryCombo = getChild( "land category"); - childSetCommitCallback("land category", onCommitAny, this); + if (gAgent.getAgentAccess().isInTransition()) + { + // during the AO transition, this combo has an Adult item. + // Post-transition, it goes away. We can remove this conditional + // after the transition and just use the "else" clause. + mCategoryCombo = getChild( "land category with adult"); + childSetCommitCallback("land category with adult", onCommitAny, this); + } + else + { + // this is the code that should be preserved post-transition + // you could also change the XML to set visibility and enabled true. + mCategoryCombo = getChild( "land category"); + childSetCommitCallback("land category", onCommitAny, this); + } + mCategoryCombo->setVisible(true); + mCategoryCombo->setEnabled(true); + mMatureCtrl = getChild( "MatureCheck"); childSetCommitCallback("MatureCheck", onCommitAny, this); @@ -1788,14 +1804,6 @@ BOOL LLPanelLandOptions::postBuild() mMatureCtrl->setEnabled(FALSE); } - if (!gAgent.getAgentAccess().isInTransition()) - { - // remove category for adult if we're post-transition - // (this code can go away, and the category can be removed from the xml, - // once we've completed the transition period for adult) - mCategoryCombo->remove(getString("adult_land_category_label")); - } - mSnapshotCtrl = getChild("snapshot_ctrl"); if (mSnapshotCtrl) @@ -1982,6 +1990,7 @@ void LLPanelLandOptions::refresh() // not teen so fill in the data for the maturity control mMatureCtrl->setVisible(TRUE); mMatureCtrl->setLabel(getString("mature_check_mature")); + mMatureCtrl->setToolTip(getString("mature_check_mature_tooltip")); // they can see the checkbox, but its disposition depends on the // state of the region LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion(); @@ -2002,6 +2011,7 @@ void LLPanelLandOptions::refresh() mMatureCtrl->setEnabled(FALSE); mMatureCtrl->set(TRUE); mMatureCtrl->setLabel(getString("mature_check_adult")); + mMatureCtrl->setToolTip(getString("mature_check_adult_tooltip")); } } } @@ -2140,7 +2150,8 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata) BOOL mature_publish = self->mMatureCtrl->get(); BOOL push_restriction = self->mPushRestrictionCtrl->get(); BOOL show_directory = self->mCheckShowDirectory->get(); - S32 category_index = self->mCategoryCombo->getCurrentIndex(); + // we have to get the index from a lookup, not from the position in the dropdown! + S32 category_index = LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue()); S32 landing_type_index = self->mLandingTypeCombo->getCurrentIndex(); LLUUID snapshot_id = self->mSnapshotCtrl->getImageAssetID(); LLViewerRegion* region; diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 3edc7133a0..bd1186b151 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -41,13 +41,14 @@ #include "message.h" #include "llagent.h" +#include "llbutton.h" #include "llfloatergroupinfo.h" #include "llfloaterworldmap.h" -//#include "llinventoryview.h" // for mOpenNextNewItem +#include "llproductinforequest.h" +#include "llscrolllistctrl.h" #include "llstatusbar.h" #include "lltextbox.h" -#include "llscrolllistctrl.h" -#include "llbutton.h" +#include "lltrans.h" #include "lluiconstants.h" #include "llviewermessage.h" #include "lluictrlfactory.h" @@ -192,7 +193,9 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) F32 global_x; F32 global_y; std::string sim_name; - + std::string land_sku; + std::string land_type; + S32 i; S32 count = msg->getNumberOfBlocks("QueryData"); for (i = 0; i < count; i++) @@ -206,6 +209,18 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) msg->getF32("QueryData", "GlobalX", global_x, i); msg->getF32("QueryData", "GlobalY", global_y, i); msg->getString("QueryData", "SimName", sim_name, i); + + if ( msg->getSizeFast(_PREHASH_QueryData, i, _PREHASH_ProductSKU) > 0 ) + { + msg->getStringFast( _PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i); + llinfos << "Land sku: " << land_sku << llendl; + land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku); + } + else + { + land_sku.clear(); + land_type = LLTrans::getString("land_type_unknown"); + } self->mActualArea += actual_area; self->mBillableArea += billable_area; @@ -225,7 +240,7 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) { area = llformat("%d / %d", billable_area, actual_area); } - + std::string hidden; hidden = llformat("%f %f", global_x, global_y); @@ -233,19 +248,26 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) element["columns"][0]["column"] = "name"; element["columns"][0]["value"] = name; element["columns"][0]["font"] = "SANSSERIF"; + element["columns"][1]["column"] = "location"; element["columns"][1]["value"] = location; element["columns"][1]["font"] = "SANSSERIF"; + element["columns"][2]["column"] = "area"; element["columns"][2]["value"] = area; element["columns"][2]["font"] = "SANSSERIF"; - element["columns"][3]["column"] = "hidden"; - element["columns"][3]["value"] = hidden; + + element["columns"][3]["column"] = "type"; + element["columns"][3]["value"] = land_type; element["columns"][3]["font"] = "SANSSERIF"; + + // hidden is always last column + element["columns"][4]["column"] = "hidden"; + element["columns"][4]["value"] = hidden; list->addElement(element); } - + self->refreshAggregates(); } @@ -257,7 +279,8 @@ void LLFloaterLandHoldings::buttonCore(S32 which) S32 index = list->getFirstSelectedIndex(); if (index < 0) return; - std::string location = list->getSelectedItemLabel(3); + // hidden is always last column + std::string location = list->getSelectedItemLabel(list->getNumColumns()-1); F32 global_x = 0.f; F32 global_y = 0.f; diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index 09af36dfe6..e6250063f7 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -63,7 +63,7 @@ LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channe { mChannelPtr = LLNotifications::instance().getChannel(channel_name); mChannelRejectsPtr = LLNotificationChannelPtr( - new LLNotificationChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(), !boost::bind(mChannelPtr->getFilter(), _1))); + LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(), !boost::bind(mChannelPtr->getFilter(), _1))); LLUICtrlFactory::instance().buildPanel(this, "panel_notifications_channel.xml"); } diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 2b418b4caa..06c1b2c12b 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -70,6 +70,7 @@ #include "lltextbox.h" #include "llinventory.h" #include "lltexturectrl.h" +#include "lltrans.h" #include "llviewercontrol.h" #include "lluictrlfactory.h" #include "llviewerimage.h" @@ -129,9 +130,12 @@ void unpack_request_params( // LLUUID in compressed form which may have embedded \0's,) str_buf[0] = '\0'; S32 data_size = msg->getSizeFast(_PREHASH_StringData, i, _PREHASH_SParam); - msg->getBinaryDataFast(_PREHASH_StringData, _PREHASH_SParam, - str_buf, data_size, i, MAX_STRING - 1); - strings.push_back(std::string(str_buf, data_size)); + if (data_size >= 0) + { + msg->getBinaryDataFast(_PREHASH_StringData, _PREHASH_SParam, + str_buf, data_size, i, MAX_STRING - 1); + strings.push_back(std::string(str_buf, data_size)); + } } U32 int_buf; @@ -295,7 +299,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) // extract message std::string sim_name; - std::string sim_type = "(unknown)"; + std::string sim_type = LLTrans::getString("land_type_unknown"); U32 region_flags; U8 agent_limit; F32 object_bonus_factor; @@ -318,8 +322,8 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) msg->getF32("RegionInfo", "SunHour", sun_hour); // the only reasonable way to decide if we actually have any data is to // check to see if any of these fields have nonzero sizes - if (msg->getSize("RegionInfo2", "ProductSKU") || - msg->getSize("RegionInfo2", "ProductName")) + if (msg->getSize("RegionInfo2", "ProductSKU") > 0 || + msg->getSize("RegionInfo2", "ProductName") > 0) { msg->getString("RegionInfo2", "ProductName", sim_type); } @@ -746,8 +750,6 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() body["allow_land_resell"] = childGetValue("allow_land_resell_check"); body["agent_limit"] = childGetValue("agent_limit_spin"); body["prim_bonus"] = childGetValue("object_bonus_spin"); - // the combo box stores strings "Mature" and "PG", but we have to convert back to a number, - // because the sim doesn't know from strings for this stuff body["sim_access"] = childGetValue("access_combo"); body["restrict_pushobject"] = childGetValue("restrict_pushobject"); body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check"); @@ -780,8 +782,7 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() buffer = llformat("%f", value); strings.push_back(strings_t::value_type(buffer)); - U8 access = childGetValue("access_combo").asInteger(); - buffer = llformat("%d", (S32)access); + buffer = llformat("%d", childGetValue("access_combo").asInteger()); strings.push_back(strings_t::value_type(buffer)); buffer = llformat("%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); @@ -792,17 +793,14 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings); - - LLViewerRegion* region = gAgent.getRegion(); - if (region && access != region->getSimAccess() ) - { - LLNotifications::instance().add("RegionMaturityChange"); - } } - - //integers_t integers; - + // if we changed access levels, tell user about it + LLViewerRegion* region = gAgent.getRegion(); + if (region && (childGetValue("access_combo").asInteger() != region->getSimAccess()) ) + { + LLNotifications::instance().add("RegionMaturityChange"); + } return TRUE; } @@ -2702,6 +2700,19 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region) } } + LLTextBox* region_maturity = getChild("region_maturity_text"); + if (region_maturity) + { + region_maturity->setText(region->getSimAccessString()); + } + + LLTextBox* region_landtype = getChild("region_landtype_text"); + if (region_landtype) + { + region_landtype->setText(region->getSimProductName()); + } + + // let the parent class handle the general data collection. bool rv = LLPanelRegionInfo::refreshFromRegion(region); LLMessageSystem *msg = gMessageSystem; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index d45d9c052f..34dbce67c2 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -508,7 +508,8 @@ void LLSnapshotLivePreview::draw() gGL.end(); } - if (mShineAnimTimer.getElapsedTimeF32() > SHINE_TIME) + // if we're at the end of the animation, stop + if (shine_interp >= 1.f) { mShineAnimTimer.stop(); } diff --git a/indra/newview/llfloaterurldisplay.cpp b/indra/newview/llfloaterurldisplay.cpp index 38e524c4e0..c265c6169a 100644 --- a/indra/newview/llfloaterurldisplay.cpp +++ b/indra/newview/llfloaterurldisplay.cpp @@ -88,8 +88,8 @@ void LLFloaterURLDisplay::setSnapshotDisplay(const LLUUID& snapshot_id) } void LLFloaterURLDisplay::setName(const std::string& name) -{ - mPlacePanel->setName(name); +{ // Set the name and also clear description + mPlacePanel->resetName(name); } void LLFloaterURLDisplay::setLocationString(const std::string& name) diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 66c2e4fe21..0586409283 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -1092,6 +1092,10 @@ LLFloaterIMPanel::LLFloaterIMPanel( mNumUnreadMessages(0), mShowSpeakersOnConnect(TRUE), mAutoConnect(FALSE), + mTextIMPossible(TRUE), + mProfileButtonEnabled(TRUE), + mCallBackEnabled(TRUE), + mSpeakers(NULL), mSpeakerPanel(NULL), mFirstKeystrokeTimer(), mLastKeystrokeTimer() diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp index 6775cbf29e..ac77a920a5 100644 --- a/indra/newview/llmenucommands.cpp +++ b/indra/newview/llmenucommands.cpp @@ -47,7 +47,6 @@ #include "llviewercontrol.h" #include "llfirstuse.h" #include "llfloaterchat.h" -#include "llfloaterclothing.h" #include "llfloaterdirectory.h" #include "llfloatermap.h" #include "llfloaterworldmap.h" @@ -122,12 +121,6 @@ void handle_inventory(void*) } -void handle_clothing(void*) -{ - LLFloaterClothing::toggleVisibility(); -} - - void handle_chat(void*) { // give focus to chatbar if it's open but not focused diff --git a/indra/newview/llmenucommands.h b/indra/newview/llmenucommands.h index e17a572a3b..03f7a2571c 100644 --- a/indra/newview/llmenucommands.h +++ b/indra/newview/llmenucommands.h @@ -43,7 +43,6 @@ void handle_mini_map(void*); void handle_find(void*); void handle_events(void*); void handle_inventory(void*); -void handle_clothing(void*); void handle_chat(void*); void handle_return_key(void*); void handle_slash_key(void*); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index e6639a2da5..afaaea28f0 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -72,8 +72,9 @@ #include "llappviewer.h" // abortQuit() const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$ +const S32 MATURE_UNDEFINED = -1; const S32 MATURE_CONTENT = 1; -const S32 NON_MATURE_CONTENT = 2; +const S32 PG_CONTENT = 2; const S32 DECLINE_TO_STATE = 0; //static @@ -290,7 +291,7 @@ BOOL LLPanelClassified::postBuild() { // Teens don't get to set mature flag. JC mMatureCombo->setVisible(FALSE); - mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); + mMatureCombo->setCurrentByIndex(PG_CONTENT); } if (!mInFinder) @@ -408,6 +409,9 @@ void LLPanelClassified::initNewClassified() } mUpdateBtn->setLabel(getString("publish_txt")); + + // simulate clicking the "location" button + LLPanelClassified::onClickSet(this); } @@ -663,7 +667,7 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void ** } else { - self->mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); + self->mMatureCombo->setCurrentByIndex(PG_CONTENT); } if (self->mAutoRenewCheck) { @@ -751,8 +755,22 @@ void LLPanelClassified::refresh() //mPriceEditor->setEnabled(is_self); mCategoryCombo->setEnabled(is_self); - mMatureCombo->setEnabled(is_self); - + if( is_self ) + { + 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. + + constrainAccessCombo(); + } + } + else + { + mMatureCombo->setEnabled( FALSE ); + } + if (mAutoRenewCheck) { mAutoRenewCheck->setEnabled(is_self); @@ -813,7 +831,7 @@ bool LLPanelClassified::confirmMature(const LLSD& notification, const LLSD& resp mMatureCombo->setCurrentByIndex(MATURE_CONTENT); break; case 1: - mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT); + mMatureCombo->setCurrentByIndex(PG_CONTENT); break; default: return false; @@ -970,7 +988,13 @@ void LLPanelClassified::onClickSet(void* data) self->mPosGlobal = gAgent.getPositionGlobal(); std::string location_text; - location_text.assign("(will update after publish)"); + std::string regionName = "(will update after publish)"; + LLViewerRegion* pRegion = gAgent.getRegion(); + if (pRegion) + { + regionName = pRegion->getName(); + } + location_text.assign(regionName); location_text.append(", "); S32 region_x = llround((F32)self->mPosGlobal.mdV[VX]) % REGION_WIDTH_UNITS; @@ -982,6 +1006,8 @@ void LLPanelClassified::onClickSet(void* data) self->mLocationEditor->setText(location_text); self->mLocationChanged = true; + + self->constrainAccessCombo(); // Set this to null so it updates on the next save. self->mParcelID.setNull(); @@ -1110,3 +1136,36 @@ void LLFloaterPriceForListing::buttonCore(S32 button, void* data) self->close(); } } + +void LLPanelClassified::constrainAccessCombo() +{ + // Location changed. + // PG regions must have PG classifieds. AO must have mature. + // Only Mature can be PG or 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; + break; + case SIM_ACCESS_ADULT: + force_access = 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/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index 3820dae281..68a5a33321 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -120,6 +120,8 @@ 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 + BOOL checkDirty(); // Update and return mDirty protected: diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 6ff09e56f8..73a9868962 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -43,9 +43,11 @@ #include "llagent.h" #include "lliconctrl.h" #include "lllineeditor.h" +#include "llproductinforequest.h" #include "llscrolllistctrl.h" #include "lltextbox.h" #include "lltabcontainer.h" +#include "lltrans.h" #include "lltransactiontypes.h" #include "lluictrlfactory.h" @@ -232,10 +234,7 @@ void LLPanelGroupLandMoney::impl::onMapButton() if (!itemp) return; const LLScrollListCell* cellp; - // name - // location - // area - cellp = itemp->getColumn(3); // hidden + cellp = itemp->getColumn(itemp->getNumColumns() - 1); // hidden column is last F32 global_x = 0.f; F32 global_y = 0.f; @@ -414,6 +413,9 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) F32 global_x; F32 global_y; std::string sim_name; + std::string land_sku; + std::string land_type; + for(S32 i = first_block; i < count; ++i) { msg->getUUID("QueryData", "OwnerID", owner_id, i); @@ -426,6 +428,18 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) msg->getF32("QueryData", "GlobalY", global_y, i); msg->getString("QueryData", "SimName", sim_name, i); + if ( msg->getSizeFast(_PREHASH_QueryData, i, _PREHASH_ProductSKU) > 0 ) + { + msg->getStringFast( _PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i); + llinfos << "Land sku: " << land_sku << llendl; + land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku); + } + else + { + land_sku.clear(); + land_type = LLTrans::getString("land_type_unknown"); + } + S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y); @@ -438,6 +452,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) { area = llformat("%d / %d", billable_area, actual_area); } + std::string hidden; hidden = llformat("%f %f", global_x, global_y); @@ -455,8 +470,13 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) row["columns"][2]["value"] = area; row["columns"][2]["font"] = "SANSSERIFSMALL"; - row["columns"][3]["column"] = "hidden"; - row["columns"][3]["value"] = hidden; + row["columns"][3]["column"] = "type"; + row["columns"][3]["value"] = land_type; + row["columns"][3]["font"] = "SANSSERIFSMALL"; + + // hidden is always last column + row["columns"][4]["column"] = "hidden"; + row["columns"][4]["value"] = hidden; mGroupParcelsp->addElement(row, ADD_SORTED); } @@ -706,7 +726,7 @@ BOOL LLPanelGroupLandMoney::postBuild() textp = getChild("group_money_planning_text", true); panelp = getChild("group_money_planning_tab", true); - if ( 1 ) //!can_view + if ( !can_view ) { textp->setText(mImplementationp->mCantViewAccountsText); } @@ -1412,11 +1432,18 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg, text.append(1, '\n'); } - text.append( " Group Individual Share\n"); - text.append(llformat( "%-24s %6d %6d \n", "Credits", total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members))); - text.append(llformat( "%-24s %6d %6d \n", "Debits", total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members))); - text.append(llformat( "%-24s %6d %6d \n", "Total", total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members))); - + // [DEV-29503] Hide the individual info since + // non_exempt_member here is a wrong choice to calculate individual shares. + // text.append( " Group Individual Share\n"); + // text.append(llformat( "%-24s %6d %6d \n", "Credits", total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members))); + // text.append(llformat( "%-24s %6d %6d \n", "Debits", total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members))); + // text.append(llformat( "%-24s %6d %6d \n", "Total", total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members))); + + text.append( " Group\n"); + text.append(llformat( "%-24s %6d\n", "Credits", total_credits)); + text.append(llformat( "%-24s %6d\n", "Debits", total_debits)); + text.append(llformat( "%-24s %6d\n", "Total", total_credits + total_debits)); + if ( mImplementationp->mTextEditorp ) { mImplementationp->mTextEditorp->setText(text); diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 343269e1f6..6e65181f99 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -2397,7 +2397,7 @@ void LLPanelGroupRolesSubTab::handleDeleteRole() { LLSD args; args["MESSAGE"] = mRemoveEveryoneTxt; - LLNotifications::instance().add("GenericNotify", args); + LLNotifications::instance().add("GenericAlert", args); return; } diff --git a/indra/newview/llpanellandmedia.cpp b/indra/newview/llpanellandmedia.cpp index 332344a952..b8886c9493 100644 --- a/indra/newview/llpanellandmedia.cpp +++ b/indra/newview/llpanellandmedia.cpp @@ -38,6 +38,7 @@ // viewer includes #include "llmimetypes.h" #include "llviewerparcelmgr.h" +#include "llviewerregion.h" #include "lluictrlfactory.h" // library includes @@ -54,20 +55,32 @@ #include "lltexturectrl.h" #include "roles_constants.h" -// Values for the parcel voice settings radio group -enum -{ - kRadioVoiceChatEstate = 0, - kRadioVoiceChatPrivate = 1, - kRadioVoiceChatDisable = 2 -}; - //--------------------------------------------------------------------------- // LLPanelLandMedia //--------------------------------------------------------------------------- LLPanelLandMedia::LLPanelLandMedia(LLParcelSelectionHandle& parcel) -: LLPanel(std::string("land_media_panel")), mParcel(parcel) +: LLPanel(std::string("land_media_panel")), + + mParcel(parcel), + mCheckSoundLocal(NULL), + mSoundHelpButton(NULL), + mCheckEnableVoiceChat(NULL), + mCheckEnableVoiceChatIsEstateDisabled(NULL), + mCheckEnableVoiceChatParcel(NULL), + mMusicURLEdit(NULL), + mMediaURLEdit(NULL), + mMediaDescEdit(NULL), + mMediaTypeCombo(NULL), + mSetURLButton(NULL), + mMediaHeightCtrl(NULL), + mMediaWidthCtrl(NULL), + mMediaSizeCtrlLabel(NULL), + mMediaTextureCtrl(NULL), + mMediaAutoScaleCheck(NULL), + mMediaLoopCheck(NULL), + mMediaUrlCheck(NULL), + mMusicUrlCheck(NULL) { } @@ -79,13 +92,27 @@ LLPanelLandMedia::~LLPanelLandMedia() } +// static +void LLPanelLandMedia::onClickSoundHelp(void*) +{ + LLNotifications::instance().add("ClickSoundHelpLand"); +} + + BOOL LLPanelLandMedia::postBuild() { mCheckSoundLocal = getChild("check sound local"); childSetCommitCallback("check sound local", onCommitAny, this); - mRadioVoiceChat = getChild("parcel_voice_channel"); - childSetCommitCallback("parcel_voice_channel", onCommitAny, this); + mSoundHelpButton = getChild("?"); + mSoundHelpButton->setClickedCallback(onClickSoundHelp, this); + + mCheckEnableVoiceChat = getChild("parcel_enable_voice_channel"); + childSetCommitCallback("parcel_enable_voice_channel", onCommitAny, this); + mCheckEnableVoiceChatIsEstateDisabled = getChild("parcel_enable_voice_channel_is_estate_disabled"); + childSetCommitCallback("parcel_enable_voice_channel_is_estate_disabled", onCommitAny, this); + mCheckEnableVoiceChatParcel = getChild("parcel_enable_voice_channel_parcel"); + childSetCommitCallback("parcel_enable_voice_channel_parcel", onCommitAny, this); mMusicURLEdit = getChild("music_url"); childSetCommitCallback("music_url", onCommitAny, this); @@ -151,19 +178,36 @@ void LLPanelLandMedia::refresh() mCheckSoundLocal->set( parcel->getSoundLocal() ); mCheckSoundLocal->setEnabled( can_change_media ); - if(parcel->getParcelFlagAllowVoice()) + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (!region) { - if(parcel->getParcelFlagUseEstateVoiceChannel()) - mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatEstate); - else - mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatPrivate); + // never seen this happen, but log it + llwarns << "Couldn't get selected region." << llendl; } - else + + if (region && region->isVoiceEnabled()) // estate-wide voice-disable overrides all { - mRadioVoiceChat->setSelectedIndex(kRadioVoiceChatDisable); + bool allow_voice = parcel->getParcelFlagAllowVoice(); + + mCheckEnableVoiceChatIsEstateDisabled->setVisible(false); + + mCheckEnableVoiceChat->setVisible(true); + mCheckEnableVoiceChat->setEnabled( can_change_media ); + mCheckEnableVoiceChat->set(allow_voice); + + mCheckEnableVoiceChatParcel->setEnabled( can_change_media && allow_voice ); + } + else // disabled at region level + { + mCheckEnableVoiceChatIsEstateDisabled->setVisible(true); // always disabled + mCheckEnableVoiceChat->setVisible(false); + mCheckEnableVoiceChat->setEnabled(false); + mCheckEnableVoiceChat->set(false); + + mCheckEnableVoiceChatParcel->setEnabled(false); } - mRadioVoiceChat->setEnabled( can_change_media ); + mCheckEnableVoiceChatParcel->set(!parcel->getParcelFlagUseEstateVoiceChannel()); mMusicURLEdit->setText(parcel->getMusicURL()); mMusicURLEdit->setEnabled( can_change_media ); @@ -339,7 +383,6 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) // Extract data from UI BOOL sound_local = self->mCheckSoundLocal->get(); - int voice_setting = self->mRadioVoiceChat->getSelectedIndex(); std::string music_url = self->mMusicURLEdit->getText(); std::string media_url = self->mMediaURLEdit->getText(); std::string media_desc = self->mMediaDescEdit->getText(); @@ -352,27 +395,10 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) S32 media_height = (S32)self->mMediaHeightCtrl->get(); LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID(); - self->childSetText("mime_type", mime_type); - - BOOL voice_enabled; - BOOL voice_estate_chan; + BOOL voice_enabled = self->mCheckEnableVoiceChat->get(); + BOOL voice_estate_chan = ! self->mCheckEnableVoiceChatParcel->get(); - switch(voice_setting) - { - default: - case kRadioVoiceChatEstate: - voice_enabled = TRUE; - voice_estate_chan = TRUE; - break; - case kRadioVoiceChatPrivate: - voice_enabled = TRUE; - voice_estate_chan = FALSE; - break; - case kRadioVoiceChatDisable: - voice_enabled = FALSE; - voice_estate_chan = FALSE; - break; - } + self->childSetText("mime_type", mime_type); // Remove leading/trailing whitespace (common when copying/pasting) LLStringUtil::trim(music_url); diff --git a/indra/newview/llpanellandmedia.h b/indra/newview/llpanellandmedia.h index 459193f0dd..6a53dd42a5 100644 --- a/indra/newview/llpanellandmedia.h +++ b/indra/newview/llpanellandmedia.h @@ -56,10 +56,14 @@ private: static void onCommitAny(LLUICtrl* ctrl, void *userdata); static void onCommitType(LLUICtrl* ctrl, void *userdata); static void onSetBtn(void* userdata); + static void onClickSoundHelp(void*); private: LLCheckBoxCtrl* mCheckSoundLocal; - LLRadioGroup* mRadioVoiceChat; + LLButton* mSoundHelpButton; + LLCheckBoxCtrl* mCheckEnableVoiceChat; + LLCheckBoxCtrl* mCheckEnableVoiceChatIsEstateDisabled; + LLCheckBoxCtrl* mCheckEnableVoiceChatParcel; LLLineEditor* mMusicURLEdit; LLLineEditor* mMediaURLEdit; LLLineEditor* mMediaDescEdit; diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp index 47ed72aa77..815152c69f 100644 --- a/indra/newview/llpanelplace.cpp +++ b/indra/newview/llpanelplace.cpp @@ -97,8 +97,9 @@ BOOL LLPanelPlace::postBuild() mDescEditor = getChild("desc_editor"); mInfoEditor = getChild("info_editor"); + mLandTypeEditor = getChild("land_type_display"); - mLocationEditor = getChild("location_editor"); + mLocationDisplay = getChild("location_editor"); mTeleportBtn = getChild( "teleport_btn"); mTeleportBtn->setClickedCallback(onClickTeleport); @@ -148,7 +149,32 @@ void LLPanelPlace::resetLocation() mNameEditor->setText( LLStringUtil::null ); mDescEditor->setText( LLStringUtil::null ); mInfoEditor->setText( LLStringUtil::null ); - mLocationEditor->setText( LLStringUtil::null ); + mLandTypeEditor->setText( LLStringUtil::null ); + mLocationDisplay->setText( LLStringUtil::null ); +} + + +// Set the name and clear other bits of info. Used for SLURL clicks +void LLPanelPlace::resetName(const std::string& name) +{ + setName(name); + if(mDescEditor) + { + mDescEditor->setText( LLStringUtil::null ); + } + if(mNameEditor) + { + llinfos << "Clearing place name" << llendl; + mNameEditor->setText( LLStringUtil::null ); + } + if(mInfoEditor) + { + mInfoEditor->setText( LLStringUtil::null ); + } + if(mLandTypeEditor) + { + mLandTypeEditor->setText( LLStringUtil::null ); + } } void LLPanelPlace::setParcelID(const LLUUID& parcel_id) @@ -165,7 +191,12 @@ void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id) void LLPanelPlace::setLocationString(const std::string& location) { - mLocationEditor->setText(location); + mLocationDisplay->setText(location); +} + +void LLPanelPlace::setLandTypeString(const std::string& land_type) +{ + mLandTypeEditor->setText(land_type); } void LLPanelPlace::sendParcelInfoRequest() @@ -326,9 +357,9 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) std::string location = llformat("%s %d, %d, %d (%s)", sim_name.c_str(), region_x, region_y, region_z, rating.c_str()); - if (self->mLocationEditor) + if (self->mLocationDisplay) { - self->mLocationEditor->setText(location); + self->mLocationDisplay->setText(location); } BOOL show_auction = (auction_id > 0); diff --git a/indra/newview/llpanelplace.h b/indra/newview/llpanelplace.h index 051d63b743..b11290493a 100644 --- a/indra/newview/llpanelplace.h +++ b/indra/newview/llpanelplace.h @@ -66,7 +66,9 @@ public: void setRegionID(const LLUUID& region_id) { mRegionID = region_id; } void setSnapshot(const LLUUID& snapshot_id); void setLocationString(const std::string& location); + void setLandTypeString(const std::string& land_type); void setErrorStatus(U32 status, const std::string& reason); + void resetName(const std::string& name); void sendParcelInfoRequest(); void displayParcelInfo(const LLVector3& pos_region, @@ -104,7 +106,8 @@ protected: LLTextBox* mNameEditor; LLTextEditor* mDescEditor; LLTextBox* mInfoEditor; - LLTextBox* mLocationEditor; + LLTextBox* mLandTypeEditor; + LLTextBox* mLocationDisplay; //not calling it "editor" because it isn't LLButton* mTeleportBtn; LLButton* mMapBtn; diff --git a/indra/newview/llproductinforequest.cpp b/indra/newview/llproductinforequest.cpp new file mode 100644 index 0000000000..eda8cb659e --- /dev/null +++ b/indra/newview/llproductinforequest.cpp @@ -0,0 +1,92 @@ +/** + * @file llproductinforequest.cpp + * @author Kent Quirk + * @brief Get region type descriptions (translation from SKU to description) + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llproductinforequest.h" + +#include "llagent.h" // for gAgent +#include "lltrans.h" +#include "llviewerregion.h" + +class LLProductInfoRequestResponder : public LLHTTPClient::Responder +{ +public: + //If we get back a normal response, handle it here + virtual void result(const LLSD& content) + { + LLProductInfoRequestManager::instance().setSkuDescriptions(content); + } + + //If we get back an error (not found, etc...), handle it here + virtual void error(U32 status, const std::string& reason) + { + llwarns << "LLProductInfoRequest::error(" + << status << ": " << reason << ")" << llendl; + } +}; + +LLProductInfoRequestManager::LLProductInfoRequestManager() : mSkuDescriptions() +{ +} + +void LLProductInfoRequestManager::initSingleton() +{ + std::string url = gAgent.getRegion()->getCapability("ProductInfoRequest"); + if (!url.empty()) + { + LLHTTPClient::get(url, new LLProductInfoRequestResponder()); + } +} + +void LLProductInfoRequestManager::setSkuDescriptions(const LLSD& content) +{ + mSkuDescriptions = content; +} + +std::string LLProductInfoRequestManager::getDescriptionForSku(const std::string& sku) +{ + // The description LLSD is an array of maps; each array entry + // has a map with 3 fields -- description, name, and sku + for (LLSD::array_const_iterator it = mSkuDescriptions.beginArray(); + it != mSkuDescriptions.endArray(); + ++it) + { + // llwarns << (*it)["sku"].asString() << " = " << (*it)["description"].asString() << llendl; + if ((*it)["sku"].asString() == sku) + { + return (*it)["description"].asString(); + } + } + return LLTrans::getString("land_type_unknown"); +} diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h new file mode 100644 index 0000000000..354f04e8cf --- /dev/null +++ b/indra/newview/llproductinforequest.h @@ -0,0 +1,60 @@ +/** + * @file llproductinforequest.h + * @author Kent Quirk + * @brief Get region type descriptions (translation from SKU to description) + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLPRODUCTINFOREQUEST_H +#define LL_LLPRODUCTINFOREQUEST_H + +#include "llhttpclient.h" +#include "llmemory.h" + +/* + This is a singleton to manage a cache of information about land types. + The land system provides a capability to get information about the + set of possible land sku, name, and description information. + We use description in the UI, but the sku is provided in the various + messages; this tool provides translation between the systems. + */ + +class LLProductInfoRequestManager : public LLSingleton +{ +public: + LLProductInfoRequestManager(); + void setSkuDescriptions(const LLSD& content); + std::string getDescriptionForSku(const std::string& sku); +private: + friend class LLSingleton; + /* virtual */ void initSingleton(); + LLSD mSkuDescriptions; +}; + +#endif // LL_LLPRODUCTINFOREQUEST_H diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index 86f590a0f0..bfd14f709a 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -207,7 +207,9 @@ void LLProgressView::setPercent(const F32 percent) void LLProgressView::setMessage(const std::string& msg) { mMessage = msg; - mURLInMessage = mMessage.find( "http://" ) != std::string::npos; + mURLInMessage = (mMessage.find( "https://" ) != std::string::npos || + mMessage.find( "http://" ) != std::string::npos || + mMessage.find( "ftp://" ) != std::string::npos); getChild("message_text")->setWrappedText(LLStringExplicit(mMessage)); getChild("message_text")->setHoverActive(mURLInMessage); @@ -244,7 +246,13 @@ void LLProgressView::onClickMessage(void* data) { std::string url_to_open( "" ); - size_t start_pos = viewp->mMessage.find( "http://" ); + size_t start_pos; + start_pos = viewp->mMessage.find( "https://" ); + if (start_pos == std::string::npos) + start_pos = viewp->mMessage.find( "http://" ); + if (start_pos == std::string::npos) + start_pos = viewp->mMessage.find( "ftp://" ); + if ( start_pos != std::string::npos ) { size_t end_pos = viewp->mMessage.find_first_of( " \n\r\t", start_pos ); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 6e5231bddd..f8b824732f 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2234,6 +2234,22 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera) } } +void renderCrossHairs(LLVector3 position, F32 size, LLColor4 color) +{ + gGL.color4fv(color.mV); + gGL.begin(LLRender::LINES); + { + gGL.vertex3fv((position - LLVector3(size, 0.f, 0.f)).mV); + gGL.vertex3fv((position + LLVector3(size, 0.f, 0.f)).mV); + gGL.vertex3fv((position - LLVector3(0.f, size, 0.f)).mV); + gGL.vertex3fv((position + LLVector3(0.f, size, 0.f)).mV); + gGL.vertex3fv((position - LLVector3(0.f, 0.f, size)).mV); + gGL.vertex3fv((position + LLVector3(0.f, 0.f, size)).mV); + } + gGL.end(); +} + + void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) { if (set_color) @@ -2405,7 +2421,7 @@ void renderTextureAnim(LLDrawInfo* params) } LLGLEnable blend(GL_BLEND); - gGL.color4f(1,1,0,0.5f); + glColor4f(1,1,0,0.5f); pushVerts(params, LLVertexBuffer::MAP_VERTEX); } @@ -2507,6 +2523,25 @@ void renderRaycast(LLDrawable* drawablep) } } + +void renderAvatarCollisionVolumes(LLVOAvatar* avatar) +{ + avatar->renderCollisionVolumes(); +} + +void renderAgentTarget(LLVOAvatar* avatar) +{ + // render these for self only (why, i don't know) + if (avatar->isSelf()) + { + renderCrossHairs(avatar->getPositionAgent(), 0.2f, LLColor4(1, 0, 0, 0.8f)); + renderCrossHairs(avatar->mDrawable->getPositionAgent(), 0.2f, LLColor4(1, 0, 0, 0.8f)); + renderCrossHairs(avatar->mRoot.getWorldPosition(), 0.2f, LLColor4(1, 1, 1, 0.8f)); + renderCrossHairs(avatar->mPelvisp->getWorldPosition(), 0.2f, LLColor4(0, 0, 1, 0.8f)); + } +} + + class LLOctreeRenderNonOccluded : public LLOctreeTraveler { public: @@ -2591,6 +2626,19 @@ public: { renderRaycast(drawable); } + + LLVOAvatar* avatar = dynamic_cast(drawable->getVObj().get()); + + if (avatar && gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AVATAR_VOLUME)) + { + renderAvatarCollisionVolumes(avatar); + } + + if (avatar && gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AGENT_TARGET)) + { + renderAgentTarget(avatar); + } + } for (LLSpatialGroup::draw_map_t::iterator i = group->mDrawMap.begin(); i != group->mDrawMap.end(); ++i) @@ -2667,7 +2715,9 @@ void LLSpatialPartition::renderDebug() LLPipeline::RENDER_DEBUG_POINTS | LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY | LLPipeline::RENDER_DEBUG_TEXTURE_ANIM | - LLPipeline::RENDER_DEBUG_RAYCAST)) + LLPipeline::RENDER_DEBUG_RAYCAST | + LLPipeline::RENDER_DEBUG_AVATAR_VOLUME | + LLPipeline::RENDER_DEBUG_AGENT_TARGET)) { return; } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a145e965fb..984646e959 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -130,6 +130,7 @@ #include "llpanelgroupnotices.h" #include "llpreview.h" #include "llpreviewscript.h" +#include "llproductinforequest.h" #include "llsecondlifeurls.h" #include "llselectmgr.h" #include "llsky.h" @@ -2511,6 +2512,11 @@ bool idle_startup() // If we've got a startup URL, dispatch it LLStartUp::dispatchURL(); + // Retrieve information about the land data + // (just accessing this the first time will fetch it, + // then the data is cached for the viewer's lifetime) + LLProductInfoRequestManager::instance(); + // Clean up the userauth stuff. LLUserAuth::getInstance()->reset(); diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index b376eed814..eea4acf053 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -1336,6 +1336,12 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) LLColor4 net_color; color_specified = findNetColor( &net_color ); + if (mTexLayerSet->getAvatar()->mIsDummy) + { + color_specified = true; + net_color = LLVOAvatar::getDummyColor(); + } + // If you can't see the layer, don't render it. if( is_approx_zero( net_color.mV[VW] ) ) { diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp index 3874a11317..33edb3ef27 100644 --- a/indra/newview/lltoolbar.cpp +++ b/indra/newview/lltoolbar.cpp @@ -128,9 +128,6 @@ BOOL LLToolBar::postBuild() childSetAction("appearance_btn", onClickAppearance, this); childSetControlName("appearance_btn", ""); - childSetAction("clothing_btn", onClickClothing, this); - childSetControlName("clothing_btn", "ClothingBtnState"); - childSetAction("fly_btn", onClickFly, this); childSetControlName("fly_btn", "FlyBtnState"); @@ -287,8 +284,6 @@ void LLToolBar::refresh() BOOL mouselook = gAgent.cameraMouselook(); setVisible(show && !mouselook); - // Clothing button updated inside LLFloaterClothing - BOOL sitting = FALSE; if (gAgent.getAvatarObject()) { @@ -455,13 +450,6 @@ void LLToolBar::onClickAppearance(void*) } -// static -void LLToolBar::onClickClothing(void*) -{ - handle_clothing(NULL); -} - - // static void LLToolBar::onClickFly(void*) { diff --git a/indra/newview/lltoolbar.h b/indra/newview/lltoolbar.h index 49d5ab343d..094d016e39 100644 --- a/indra/newview/lltoolbar.h +++ b/indra/newview/lltoolbar.h @@ -74,7 +74,6 @@ public: static void onClickCommunicate(LLUICtrl*, void*); static void onClickChat(void* data); static void onClickAppearance(void* data); - static void onClickClothing(void* data); static void onClickFly(void*); static void onClickSit(void*); static void onClickSnapshot(void* data); diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp index 1cc062dbd2..c2591ac8d7 100644 --- a/indra/newview/llviewerjoint.cpp +++ b/indra/newview/llviewerjoint.cpp @@ -242,7 +242,7 @@ void LLViewerJoint::setValid( BOOL valid, BOOL recursive ) //-------------------------------------------------------------------- // render() //-------------------------------------------------------------------- -U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) +U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass, BOOL is_dummy ) { stop_glerror(); @@ -259,13 +259,13 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) // if object is transparent, defer it, otherwise // give the joint subclass a chance to draw itself //---------------------------------------------------------------- - if ( gRenderForSelect ) + if ( gRenderForSelect || is_dummy ) { - triangle_count += drawShape( pixelArea, first_pass ); + triangle_count += drawShape( pixelArea, first_pass, is_dummy ); } else if (LLPipeline::sShadowRender) { - triangle_count += drawShape(pixelArea, first_pass); + triangle_count += drawShape(pixelArea, first_pass, is_dummy ); } else if ( isTransparent() && !LLPipeline::sReflectionRender) { @@ -277,18 +277,18 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) // first pass renders without writing to the z buffer { LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - triangle_count += drawShape( pixelArea, first_pass); + triangle_count += drawShape( pixelArea, first_pass, is_dummy ); } // second pass writes to z buffer only gGL.setColorMask(false, false); { - triangle_count += drawShape( pixelArea, FALSE ); + triangle_count += drawShape( pixelArea, FALSE, is_dummy ); } // third past respects z buffer and writes color gGL.setColorMask(true, false); { LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - triangle_count += drawShape( pixelArea, FALSE ); + triangle_count += drawShape( pixelArea, FALSE, is_dummy ); } } else @@ -297,12 +297,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) glCullFace(GL_FRONT); { LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - triangle_count += drawShape( pixelArea, first_pass ); + triangle_count += drawShape( pixelArea, first_pass, is_dummy ); } // Render Outside (write to the Z buffer) glCullFace(GL_BACK); { - triangle_count += drawShape( pixelArea, FALSE ); + triangle_count += drawShape( pixelArea, FALSE, is_dummy ); } } } @@ -323,7 +323,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass ) F32 jointLOD = joint->getLOD(); if (pixelArea >= jointLOD || sDisableLOD) { - triangle_count += joint->render( pixelArea ); + triangle_count += joint->render( pixelArea, TRUE, is_dummy ); if (jointLOD != DEFAULT_LOD) { @@ -404,7 +404,7 @@ BOOL LLViewerJoint::isTransparent() //-------------------------------------------------------------------- // drawShape() //-------------------------------------------------------------------- -U32 LLViewerJoint::drawShape( F32 pixelArea, BOOL first_pass ) +U32 LLViewerJoint::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy ) { return 0; } diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h index a07902e582..0e993a2ebe 100644 --- a/indra/newview/llviewerjoint.h +++ b/indra/newview/llviewerjoint.h @@ -73,7 +73,7 @@ public: // Traverses the entire joint hierarchy, setting up // transforms and calling the drawShape(). // Derived classes may add text/graphic output. - virtual U32 render( F32 pixelArea, BOOL first_pass = TRUE ); // Returns triangle count + virtual U32 render( F32 pixelArea, BOOL first_pass = TRUE, BOOL is_dummy = FALSE ); // Returns triangle count // Returns true if this object is transparent. // This is used to determine in which order to draw objects. @@ -84,7 +84,7 @@ public: // Draws the shape attached to a joint. // Called by render(). - virtual U32 drawShape( F32 pixelArea, BOOL first_pass = TRUE ); + virtual U32 drawShape( F32 pixelArea, BOOL first_pass = TRUE, BOOL is_dummy = FALSE ); virtual void drawNormals() {} enum Components diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp index 5bd8c93d6a..63c63e5546 100644 --- a/indra/newview/llviewerjointattachment.cpp +++ b/indra/newview/llviewerjointattachment.cpp @@ -85,7 +85,7 @@ BOOL LLViewerJointAttachment::isTransparent() //----------------------------------------------------------------------------- // drawShape() //----------------------------------------------------------------------------- -U32 LLViewerJointAttachment::drawShape( F32 pixelArea, BOOL first_pass ) +U32 LLViewerJointAttachment::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy ) { if (LLVOAvatar::sShowAttachmentPoints) { diff --git a/indra/newview/llviewerjointattachment.h b/indra/newview/llviewerjointattachment.h index 498226c79b..4847ac7a72 100644 --- a/indra/newview/llviewerjointattachment.h +++ b/indra/newview/llviewerjointattachment.h @@ -61,7 +61,7 @@ public: // Draws the shape attached to a joint. // Called by render(). - /*virtual*/ U32 drawShape( F32 pixelArea, BOOL first_pass ); + /*virtual*/ U32 drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy ); /*virtual*/ BOOL updateLOD(F32 pixel_area, BOOL activate); diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index c0e02921cf..b6f0dafae6 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -505,7 +505,7 @@ int compare_int(const void *a, const void *b) //-------------------------------------------------------------------- // LLViewerJointMesh::drawShape() //-------------------------------------------------------------------- -U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) +U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy) { if (!mValid || !mMesh || !mFace || !mVisible || mFace->mVertexBuffer.isNull() || @@ -523,7 +523,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) //---------------------------------------------------------------- if (!gRenderForSelect) { - glColor4fv(mColor.mV); + if (is_dummy) + glColor4fv(LLVOAvatar::getDummyColor().mV); + else + glColor4fv(mColor.mV); } stop_glerror(); @@ -550,7 +553,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR); } } - else if( mLayerSet ) + else if( !is_dummy && mLayerSet ) { if( mLayerSet->hasComposite() ) { @@ -568,7 +571,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) } } else - if ( mTexture.notNull() ) + if ( !is_dummy && mTexture.notNull() ) { old_mode = mTexture->getAddressMode(); gGL.getTexUnit(0)->bind(mTexture.get()); @@ -628,7 +631,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass) gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } - if (mTexture.notNull()) + if (mTexture.notNull() && !is_dummy) { gGL.getTexUnit(0)->bind(mTexture.get()); gGL.getTexUnit(0)->setTextureAddressMode(old_mode); diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h index 7dce044d90..0cae48df93 100644 --- a/indra/newview/llviewerjointmesh.h +++ b/indra/newview/llviewerjointmesh.h @@ -138,7 +138,7 @@ public: // overloaded from base class /*virtual*/ void drawBone(); /*virtual*/ BOOL isTransparent(); - /*virtual*/ U32 drawShape( F32 pixelArea, BOOL first_pass ); + /*virtual*/ U32 drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy ); /*virtual*/ void updateFaceSizes(U32 &num_vertices, U32& num_indices, F32 pixel_area); /*virtual*/ void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 4fd0c8dc8a..a50ff1df9f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -953,13 +953,6 @@ void init_client_menu(LLMenuGL* menu) &menu_check_control, (void*)"SaveMinidump")); - // TomY Temporary menu item so we can test this floater - menu->append(new LLMenuItemCheckGL("Clothing...", - &handle_clothing, - NULL, - NULL, - NULL)); - menu->append(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL)); menu->append(new LLMenuItemCheckGL("View Admin Options", &handle_admin_override_toggle, NULL, &check_admin_override, NULL, 'V', MASK_CONTROL | MASK_ALT)); @@ -1369,8 +1362,14 @@ void init_debug_avatar_menu(LLMenuGL* menu) //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); //diabling collision plane due to DEV-14477 -brad //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); - menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes)); - menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); + menu->append(new LLMenuItemCheckGL("Show Collision Skeleton", + &LLPipeline::toggleRenderDebug, NULL, + &LLPipeline::toggleRenderDebugControl, + (void*)LLPipeline::RENDER_DEBUG_AVATAR_VOLUME)); + menu->append(new LLMenuItemCheckGL("Display Agent Target", + &LLPipeline::toggleRenderDebug, NULL, + &LLPipeline::toggleRenderDebugControl, + (void*)LLPipeline::RENDER_DEBUG_AGENT_TARGET)); menu->append(new LLMenuItemToggleGL( "Debug Rotation", &LLVOAvatar::sDebugAvatarRotation)); menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); menu->append(new LLMenuItemCallGL("Rebake Textures", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); @@ -4032,18 +4031,6 @@ BOOL sitting_on_selection() return (avatar->mIsSitting && avatar->getRoot() == root_object); } -class LLToolsSaveToInventory : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - if(enable_save_into_inventory(NULL)) - { - derez_objects(DRD_SAVE_INTO_AGENT_INVENTORY, LLUUID::null); - } - return true; - } -}; - class LLToolsSaveToObjectInventory : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -6423,16 +6410,6 @@ BOOL enable_save_into_inventory(void*) return FALSE; } -class LLToolsEnableSaveToInventory : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - bool new_value = enable_save_into_inventory(NULL); - gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); - return true; - } -}; - BOOL enable_save_into_task_inventory(void*) { LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); @@ -7547,7 +7524,6 @@ void initialize_menus() addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection"); addMenu(new LLToolsBuyOrTake(), "Tools.BuyOrTake"); addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy"); - addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory"); addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory"); addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction"); @@ -7556,7 +7532,6 @@ void initialize_menus() addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink"); addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake"); addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy"); - addMenu(new LLToolsEnableSaveToInventory(), "Tools.EnableSaveToInventory"); addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.EnableSaveToObjectInventory"); /*addMenu(new LLToolsVisibleBuyObject(), "Tools.VisibleBuyObject"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 088ba62d0c..520de0e403 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3359,6 +3359,12 @@ void process_sound_trigger(LLMessageSystem *msg, void **) return; } + // Don't play sounds from a region with maturity above current agent maturity + if( !gAgent.canAccessMaturityInRegion( region_handle ) ) + { + return; + } + gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); } @@ -3392,6 +3398,13 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) // audio data into a buffer at this point, as it won't actually // help us out. + // Don't play sounds from a region with maturity above current agent maturity + LLVector3d pos_global = objectp->getPositionGlobal(); + if( !gAgent.canAccessMaturityAtGlobal( pos_global ) ) + { + return; + } + // Add audioData starts a transfer internally. sourcep->addAudioData(datap, FALSE); } @@ -3421,6 +3434,14 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data) if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; + + // Don't play sounds from a region with maturity above current agent maturity + LLVector3d pos = objectp->getPositionGlobal(); + if( !gAgent.canAccessMaturityAtGlobal(pos) ) + { + return; + } + objectp->setAttachedSound(sound_id, owner_id, gain, flags); } @@ -4839,7 +4860,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**) LLSD args; // if we have additional alert data - if (msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0) + if (msg->getNumberOfBlocksFast(_PREHASH_AlertInfo) > 0) { // Get the message ID msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 32c89e158c..d4e594656b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4372,8 +4372,13 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow { mAudioSourcep->play(LLUUID::null); } - //llinfos << "Playing attached sound " << audio_uuid << llendl; - mAudioSourcep->play(audio_uuid); + + // Play this sound if region maturity permits + if( gAgent.canAccessMaturityAtGlobal(this->getPositionGlobal()) ) + { + //llinfos << "Playing attached sound " << audio_uuid << llendl; + mAudioSourcep->play(audio_uuid); + } } } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 07203ce0f4..193dfaae96 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1324,9 +1324,9 @@ void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user) // Extract the packed overlay information S32 packed_overlay_size = msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_Data); - if (packed_overlay_size == 0) + if (packed_overlay_size <= 0) { - llwarns << "Overlay size 0" << llendl; + llwarns << "Overlay size " << packed_overlay_size << llendl; return; } @@ -2027,6 +2027,25 @@ bool LLViewerParcelMgr::canAgentBuyParcel(LLParcel* parcel, bool forGroup) const return true; // change this if want to make it gods only } + LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + if (regionp) + { + U8 sim_access = regionp->getSimAccess(); + const LLAgentAccess& agent_access = gAgent.getAgentAccess(); + // if the region is PG, we're happy already, so do nothing + // but if we're set to avoid either mature or adult, get us outta here + if ((sim_access == SIM_ACCESS_MATURE) && + !agent_access.canAccessMature()) + { + return false; + } + else if ((sim_access == SIM_ACCESS_ADULT) && + !agent_access.canAccessAdult()) + { + return false; + } + } + bool isForSale = parcel->getForSale() && ((parcel->getSalePrice() > 0) || (authorizeBuyer.notNull())); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 44d0304533..12d9c1a992 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1304,10 +1304,10 @@ void LLViewerRegion::unpackRegionHandshake() std::string productName; // the only reasonable way to decide if we actually have any data is to - // check to see if any of these fields have nonzero sizes - if (msg->getSize("RegionInfo3", "ColoName") || - msg->getSize("RegionInfo3", "ProductSKU") || - msg->getSize("RegionInfo3", "ProductName")) + // check to see if any of these fields have positive sizes + if (msg->getSize("RegionInfo3", "ColoName") > 0 || + msg->getSize("RegionInfo3", "ProductSKU") > 0 || + msg->getSize("RegionInfo3", "ProductName") > 0) { msg->getS32 ("RegionInfo3", "CPUClassID", classID); msg->getS32 ("RegionInfo3", "CPURatio", cpuRatio); @@ -1416,6 +1416,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("NewFileAgentInventory"); capabilityNames.append("ParcelPropertiesUpdate"); capabilityNames.append("ParcelVoiceInfoRequest"); + capabilityNames.append("ProductInfoRequest"); capabilityNames.append("ProvisionVoiceAccountRequest"); capabilityNames.append("RemoteParcelRequest"); capabilityNames.append("RequestTextureDownload"); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 26ddf213d2..c827d3fcf4 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1219,9 +1219,8 @@ LLViewerWindow::LLViewerWindow( mIsFullscreenChecked(false), mCurrResolutionIndex(0) { - // these are self registering so they don't need to be retained here - new LLNotificationChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "alert")); - new LLNotificationChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "alertmodal")); + LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "alert")); + LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "alertmodal")); LLNotifications::instance().getChannel("VW_alerts")->connectChanged(&LLViewerWindow::onAlert); LLNotifications::instance().getChannel("VW_alertmodal")->connectChanged(&LLViewerWindow::onAlert); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e5507dfacb..b06652a5dc 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -163,6 +163,8 @@ const S32 MAX_BUBBLE_CHAT_UTTERANCES = 12; const F32 CHAT_FADE_TIME = 8.0; const F32 BUBBLE_CHAT_TIME = CHAT_FADE_TIME * 3.f; +const LLColor4 DUMMY_COLOR = LLColor4(0.5,0.5,0.5,1.0); + enum ERenderName { RENDER_NAME_NEVER, @@ -681,7 +683,6 @@ BOOL LLVOAvatar::sDebugInvisible = FALSE; BOOL LLVOAvatar::sShowAttachmentPoints = FALSE; BOOL LLVOAvatar::sShowAnimationDebug = FALSE; BOOL LLVOAvatar::sShowFootPlane = FALSE; -BOOL LLVOAvatar::sShowCollisionVolumes = FALSE; BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE; F32 LLVOAvatar::sLODFactor = 1.f; BOOL LLVOAvatar::sUseImpostors = FALSE; @@ -4138,9 +4139,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (pass == AVATAR_RENDER_PASS_SINGLE) { - 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; + 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 + LLGLState test(GL_ALPHA_TEST, should_alpha_mask); if (should_alpha_mask) @@ -4153,21 +4156,21 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) { if (!mIsSelf || gAgent.needsRenderHead() || LLPipeline::sShadowRender) { - if (isTextureVisible(TEX_HEAD_BAKED)) + if (isTextureVisible(TEX_HEAD_BAKED) || mIsDummy) { - num_indices += mMeshLOD[MESH_ID_HEAD]->render(mAdjustedPixelArea); + num_indices += mMeshLOD[MESH_ID_HEAD]->render(mAdjustedPixelArea, TRUE, mIsDummy); first_pass = FALSE; } } - if (isTextureVisible(TEX_UPPER_BAKED)) + if (isTextureVisible(TEX_UPPER_BAKED) || mIsDummy) { - num_indices += mMeshLOD[MESH_ID_UPPER_BODY]->render(mAdjustedPixelArea, first_pass); + num_indices += mMeshLOD[MESH_ID_UPPER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy); first_pass = FALSE; } - if (isTextureVisible(TEX_LOWER_BAKED)) + if (isTextureVisible(TEX_LOWER_BAKED) || mIsDummy) { - num_indices += mMeshLOD[MESH_ID_LOWER_BODY]->render(mAdjustedPixelArea, first_pass); + num_indices += mMeshLOD[MESH_ID_LOWER_BODY]->render(mAdjustedPixelArea, first_pass, mIsDummy); first_pass = FALSE; } } @@ -4176,8 +4179,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender) { - LLGLEnable blend(GL_BLEND); - LLGLEnable test(GL_ALPHA_TEST); + if (!mIsDummy) + { + LLGLEnable blend(GL_BLEND); + LLGLEnable test(GL_ALPHA_TEST); + } num_indices += renderTransparent(first_pass); } } @@ -4194,7 +4200,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) U32 LLVOAvatar::renderTransparent(BOOL first_pass) { U32 num_indices = 0; - if( isWearingWearableType( WT_SKIRT ) && isTextureVisible(TEX_SKIRT_BAKED) ) + if( isWearingWearableType( WT_SKIRT ) && (mIsDummy || isTextureVisible(TEX_SKIRT_BAKED)) ) { gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f); num_indices += mMeshLOD[MESH_ID_SKIRT]->render(mAdjustedPixelArea, FALSE); @@ -4211,12 +4217,14 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass) if (isTextureVisible(TEX_HEAD_BAKED)) { - num_indices += mMeshLOD[MESH_ID_EYELASH]->render(mAdjustedPixelArea, first_pass); + num_indices += mMeshLOD[MESH_ID_EYELASH]->render(mAdjustedPixelArea, first_pass, mIsDummy); first_pass = FALSE; } - if (isTextureVisible(TEX_HAIR_BAKED)) + // Can't test for baked hair being defined, since that won't always be the case (not all viewers send baked hair) + // TODO: 1.25 will be able to switch this logic back to calling isTextureVisible(); + if (getTEImage(TEX_HAIR_BAKED)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha) { - num_indices += mMeshLOD[MESH_ID_HAIR]->render(mAdjustedPixelArea, first_pass); + num_indices += mMeshLOD[MESH_ID_HAIR]->render(mAdjustedPixelArea, first_pass, mIsDummy); first_pass = FALSE; } if (LLPipeline::sImpostorRender) @@ -4250,7 +4258,7 @@ U32 LLVOAvatar::renderRigid() return 0; } - if (isTextureVisible(TEX_EYES_BAKED)) + 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; @@ -4261,8 +4269,8 @@ U32 LLVOAvatar::renderRigid() gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); } - num_indices += mMeshLOD[MESH_ID_EYEBALL_LEFT]->render(mAdjustedPixelArea); - num_indices += mMeshLOD[MESH_ID_EYEBALL_RIGHT]->render(mAdjustedPixelArea); + num_indices += mMeshLOD[MESH_ID_EYEBALL_LEFT]->render(mAdjustedPixelArea, TRUE, mIsDummy); + num_indices += mMeshLOD[MESH_ID_EYEBALL_RIGHT]->render(mAdjustedPixelArea, TRUE, mIsDummy); gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } @@ -6882,10 +6890,10 @@ void LLVOAvatar::updateMeshTextures() { llwarns << "updateMeshTextures: invalid host for object: " << getID() << llendl; } - + for (U32 i=0; i < mBakedTextureData.size(); i++) { - if (use_lkg_baked_layer[i]) + if (use_lkg_baked_layer[i] && !self_customizing ) { LLViewerImage* baked_img = gImageList.getImageFromHost( mBakedTextureData[i].mLastTextureIndex, target_host ); for (U32 k=0; k < mBakedTextureData[i].mMeshes.size(); k++) @@ -7181,6 +7189,7 @@ void LLVOAvatar::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid ) updateMeshTextures(); dirtyMesh(); + LLVOAvatar::cullAvatarsByPixelArea(); /* switch(te) @@ -7190,6 +7199,7 @@ void LLVOAvatar::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid ) if (text_dict->mIsBakedTexture) { llinfos << "New baked texture: " << text_dict->mName << " UUID: " << uuid <mBakedTextureIndex].mTexLayerSet->requestUpdate(); } else { @@ -7519,6 +7529,11 @@ void LLVOAvatar::setInvisible(BOOL newvalue) } } +LLColor4 LLVOAvatar::getDummyColor() +{ + return DUMMY_COLOR; +} + // Given a texture entry, determine which wearable type owns it. // static EWearableType LLVOAvatar::getTEWearableType(ETextureIndex index ) @@ -7598,6 +7613,40 @@ BOOL LLVOAvatar::isWearingWearableType( EWearableType type ) return FALSE; } +//----------------------------------------------------------------------------- +// updatedWearable( EWearableType type ) +// forces an update to any baked textures relevant to type. +// Should be called only on saving the wearable +//----------------------------------------------------------------------------- +void LLVOAvatar::wearableUpdated( EWearableType type ) +{ + for (LLVOAvatarDictionary::wearable_map_t::const_iterator wearable_iter = LLVOAvatarDictionary::getInstance()->getWearables().begin(); + wearable_iter != LLVOAvatarDictionary::getInstance()->getWearables().end(); + wearable_iter++) + { + const LLVOAvatarDictionary::WearableDictionaryEntry *wearable_dict = wearable_iter->second; + const LLVOAvatarDefines::EBakedTextureIndex index = wearable_iter->first; + if (wearable_dict) + { + for (LLVOAvatarDefines::wearables_vec_t::const_iterator type_iter = wearable_dict->mWearablesVec.begin(); + type_iter != wearable_dict->mWearablesVec.end(); + type_iter++) + { + const EWearableType comp_type = *type_iter; + if (comp_type == type) + { + if (mBakedTextureData[index].mTexLayerSet) + { + mBakedTextureData[index].mTexLayerSet->requestUpdate(); + mBakedTextureData[index].mTexLayerSet->requestUpload(); + } + break; + } + } + } + } +} + //----------------------------------------------------------------------------- // clampAttachmentPositions() diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index bdb32319f8..50eec80ba7 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -40,6 +40,7 @@ #include #include "llchat.h" +#include "lldrawpoolalpha.h" #include "llviewerobject.h" #include "llcharacter.h" #include "llviewerjointmesh.h" @@ -325,6 +326,7 @@ public: static LLUUID getDefaultTEImageID(LLVOAvatarDefines::ETextureIndex te ); static void onChangeSelfInvisible(BOOL newvalue); void setInvisible(BOOL newvalue); + static LLColor4 getDummyColor(); @@ -337,6 +339,7 @@ public: BOOL teToColorParams( LLVOAvatarDefines::ETextureIndex te, const char* param_name[3] ); BOOL isWearingWearableType( EWearableType type ); + void wearableUpdated( EWearableType type ); //-------------------------------------------------------------------- // texture compositing @@ -510,7 +513,6 @@ public: static BOOL sShowAnimationDebug; // show animation debug info static BOOL sUseImpostors; //use impostors for far away avatars static BOOL sShowFootPlane; // show foot collision plane reported by server - static BOOL sShowCollisionVolumes; // show skeletal collision volumes static BOOL sVisibleInFirstPerson; static S32 sNumLODChangesThisFrame; static S32 sNumVisibleChatBubbles; @@ -755,7 +757,9 @@ inline BOOL LLVOAvatar::isTextureDefined(U8 te) const inline BOOL LLVOAvatar::isTextureVisible(U8 te) const { - return (!isTextureDefined(te) || getTEImage(te)->getID() != IMG_INVISIBLE); + return ((isTextureDefined(te) || isSelf()) + && (getTEImage(te)->getID() != IMG_INVISIBLE + || LLDrawPoolAlpha::sShowDebugAlpha)); } #endif // LL_VO_AVATAR_H diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 9d6fb6ebd5..8f11661b30 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2271,6 +2271,14 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) const LLTextureEntry* te = facep->getTextureEntry(); LLViewerImage* tex = facep->getTexture(); + if (facep->isState(LLFace::TEXTURE_ANIM)) + { + if (!vobj->mTexAnimMode) + { + facep->clearState(LLFace::TEXTURE_ANIM); + } + } + BOOL force_simple = (facep->mPixelArea < FORCE_SIMPLE_RENDER_AREA); U32 type = gPipeline.getPoolTypeFromTE(te, tex); if (type != LLDrawPool::POOL_ALPHA && force_simple) @@ -2333,6 +2341,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) } else { //doesn't need normal + facep->setState(LLFace::FULLBRIGHT); fullbright_faces.push_back(facep); } } @@ -2349,6 +2358,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) } else { //doesn't need normal + facep->setState(LLFace::FULLBRIGHT); fullbright_faces.push_back(facep); } } @@ -2678,6 +2688,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } else { + llassert(mask & LLVertexBuffer::MAP_NORMAL); registerFace(group, facep, LLRenderPass::PASS_SIMPLE); } } @@ -2708,6 +2719,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } else { + llassert(mask & LLVertexBuffer::MAP_NORMAL); registerFace(group, facep, LLRenderPass::PASS_SIMPLE); } } @@ -2720,7 +2732,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: if (!is_alpha && !LLPipeline::sRenderDeferred) { - facep->setPoolType(LLDrawPool::POOL_SIMPLE); + llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright); + facep->setPoolType((fullbright) ? LLDrawPool::POOL_FULLBRIGHT : LLDrawPool::POOL_SIMPLE); if (!force_simple && te->getBumpmap()) { diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 62c4d832cf..99f559cc79 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -765,7 +765,9 @@ void LLWorldMapView::draw() } } - if (gSavedSettings.getBOOL("MapShowEvents")) + if (gSavedSettings.getBOOL("MapShowEvents") || + gSavedSettings.getBOOL("ShowMatureEvents") || + gSavedSettings.getBOOL("ShowAdultEvents") ) { drawEvents(); } @@ -965,18 +967,22 @@ void LLWorldMapView::drawEvents() bool mature_enabled = gAgent.canAccessMature(); bool adult_enabled = gAgent.canAccessAdult(); + BOOL show_pg = gSavedSettings.getBOOL("MapShowEvents"); BOOL show_mature = mature_enabled && gSavedSettings.getBOOL("ShowMatureEvents"); BOOL show_adult = adult_enabled && gSavedSettings.getBOOL("ShowAdultEvents"); // First the non-selected events LLWorldMap::item_info_list_t::const_iterator e; - for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) - { - if (!e->mSelected) - { - drawGenericItem(*e, sEventImage); - } - } + if (show_pg) + { + for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) + { + if (!e->mSelected) + { + drawGenericItem(*e, sEventImage); + } + } + } if (show_mature) { for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e) @@ -998,13 +1004,16 @@ void LLWorldMapView::drawEvents() } } // Then the selected events - for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) - { - if (e->mSelected) - { - drawGenericItem(*e, sEventImage); - } - } + if (show_pg) + { + for (e = LLWorldMap::getInstance()->mPGEvents.begin(); e != LLWorldMap::getInstance()->mPGEvents.end(); ++e) + { + if (e->mSelected) + { + drawGenericItem(*e, sEventImage); + } + } + } if (show_mature) { for (e = LLWorldMap::getInstance()->mMatureEvents.begin(); e != LLWorldMap::getInstance()->mMatureEvents.end(); ++e) @@ -1638,34 +1647,34 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask, return; } } - if (gSavedSettings.getBOOL("ShowMatureEvents")) + } + if (gSavedSettings.getBOOL("ShowMatureEvents")) + { + for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it) { - for (it = LLWorldMap::getInstance()->mMatureEvents.begin(); it != LLWorldMap::getInstance()->mMatureEvents.end(); ++it) - { - LLItemInfo& event = *it; + LLItemInfo& event = *it; - if (checkItemHit(x, y, event, id, false)) - { - *hit_type = MAP_ITEM_MATURE_EVENT; - mItemPicked = TRUE; - gFloaterWorldMap->trackEvent(event); - return; - } + if (checkItemHit(x, y, event, id, false)) + { + *hit_type = MAP_ITEM_MATURE_EVENT; + mItemPicked = TRUE; + gFloaterWorldMap->trackEvent(event); + return; } } - if (gSavedSettings.getBOOL("ShowAdultEvents")) + } + if (gSavedSettings.getBOOL("ShowAdultEvents")) + { + for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it) { - for (it = LLWorldMap::getInstance()->mAdultEvents.begin(); it != LLWorldMap::getInstance()->mAdultEvents.end(); ++it) - { - LLItemInfo& event = *it; + LLItemInfo& event = *it; - if (checkItemHit(x, y, event, id, false)) - { - *hit_type = MAP_ITEM_ADULT_EVENT; - mItemPicked = TRUE; - gFloaterWorldMap->trackEvent(event); - return; - } + if (checkItemHit(x, y, event, id, false)) + { + *hit_type = MAP_ITEM_ADULT_EVENT; + mItemPicked = TRUE; + gFloaterWorldMap->trackEvent(event); + return; } } } diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index ca0f4af1ac..0ec4e43806 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -360,6 +360,8 @@ public: RENDER_DEBUG_SHAME = 0x0020000, RENDER_DEBUG_SHADOW_FRUSTA = 0x0040000, RENDER_DEBUG_SCULPTED = 0x0080000, + RENDER_DEBUG_AVATAR_VOLUME = 0x0100000, + RENDER_DEBUG_AGENT_TARGET = 0x0200000, }; public: diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml index 41f71718c8..b747bdaf53 100644 --- a/indra/newview/skins/default/xui/da/floater_about.xml +++ b/indra/newview/skins/default/xui/da/floater_about.xml @@ -21,6 +21,7 @@ Tak til følgende beboerne for at bidrage til at sikre, at dette er den bedste v 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 and Mark Adler. + google-perftools Copyright (c) 2005, Google Inc. Alle rettigheder forbeholdes. Se licenses.txt for detaljer. diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml index 3612797a7f..53be71fdd1 100644 --- a/indra/newview/skins/default/xui/da/floater_about_land.xml +++ b/indra/newview/skins/default/xui/da/floater_about_land.xml @@ -1,71 +1,80 @@ - - + + - + Navn: - + Beskrivelse: - + Ejer: - + Leyla Linden -