summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorTofu Linden <tofu.linden@lindenlab.com>2010-03-11 09:19:20 +0000
committerTofu Linden <tofu.linden@lindenlab.com>2010-03-11 09:19:20 +0000
commit1b1dd127a4329cc7fed9d36608f4fc04ff056843 (patch)
tree7c998ab7f4037aee8446817293bedafffd7958c2 /indra
parent6d738f25d9be0f4b576c8a55e9091ced589daf71 (diff)
parenta618a3913af506878adf59a2c5b5fb12e665e35b (diff)
merge.
Diffstat (limited to 'indra')
-rw-r--r--indra/llaudio/llaudioengine.cpp2
-rw-r--r--indra/llcommon/llsys.h1
-rw-r--r--indra/llcommon/llworkerthread.cpp36
-rw-r--r--indra/llcommon/llworkerthread.h3
-rw-r--r--indra/llimage/llimage.cpp3
-rw-r--r--indra/llui/CMakeLists.txt10
-rw-r--r--indra/llui/llaccordionctrl.cpp8
-rw-r--r--indra/llui/llaccordionctrltab.cpp299
-rw-r--r--indra/llui/llaccordionctrltab.h31
-rw-r--r--indra/llui/llbutton.h1
-rw-r--r--indra/llui/llcombobox.cpp91
-rw-r--r--indra/llui/llcombobox.h37
-rw-r--r--indra/llui/llflatlistview.cpp6
-rw-r--r--indra/llui/llfloater.cpp24
-rw-r--r--indra/llui/llfloater.h4
-rw-r--r--indra/llui/llfocusmgr.cpp51
-rw-r--r--indra/llui/llfocusmgr.h10
-rw-r--r--indra/llui/llhandle.h7
-rw-r--r--indra/llui/llmodaldialog.cpp6
-rw-r--r--indra/llui/llscrolllistcell.cpp4
-rw-r--r--indra/llui/llscrolllistcell.h5
-rw-r--r--indra/llui/llscrolllistctrl.cpp4
-rw-r--r--indra/llui/llscrolllistctrl.h5
-rw-r--r--indra/llui/lltabcontainer.cpp2
-rw-r--r--indra/llui/llui.cpp38
-rw-r--r--indra/llui/llui.h12
-rw-r--r--indra/llui/llurlentry.cpp17
-rw-r--r--indra/llui/llurlentry.h3
-rw-r--r--indra/llui/llurlregistry.cpp2
-rw-r--r--indra/llui/llview.cpp13
-rw-r--r--indra/llui/llview.h4
-rw-r--r--indra/llwindow/llwindow.cpp27
-rw-r--r--indra/llwindow/llwindow.h15
-rw-r--r--indra/llwindow/llwindowmacosx-objc.h3
-rw-r--r--indra/llwindow/llwindowmacosx-objc.mm19
-rw-r--r--indra/llwindow/llwindowmacosx.cpp48
-rw-r--r--indra/llwindow/llwindowmacosx.h2
-rw-r--r--indra/llwindow/llwindowsdl.cpp202
-rw-r--r--indra/llwindow/llwindowsdl.h3
-rw-r--r--indra/llwindow/llwindowwin32.cpp11
-rw-r--r--indra/llwindow/llwindowwin32.h3
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp28
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml4
-rw-r--r--indra/newview/installers/windows/install_icon.icobin25214 -> 367958 bytes
-rw-r--r--indra/newview/installers/windows/uninstall_icon.icobin25214 -> 367958 bytes
-rwxr-xr-xindra/newview/linux_tools/wrapper.sh10
-rw-r--r--indra/newview/llagent.cpp21
-rw-r--r--indra/newview/llagentwearables.cpp134
-rw-r--r--indra/newview/llappearancemgr.cpp150
-rw-r--r--indra/newview/llappearancemgr.h3
-rw-r--r--indra/newview/llappviewer.cpp51
-rw-r--r--indra/newview/llappviewermacosx.cpp7
-rw-r--r--indra/newview/llavatarlist.cpp9
-rw-r--r--indra/newview/llavatarlist.h2
-rw-r--r--indra/newview/llclassifiedstatsresponder.cpp24
-rw-r--r--indra/newview/llclassifiedstatsresponder.h3
-rw-r--r--indra/newview/lldebugview.cpp2
-rw-r--r--indra/newview/llexpandabletextbox.cpp8
-rw-r--r--indra/newview/llexpandabletextbox.h1
-rw-r--r--indra/newview/llfasttimerview.cpp29
-rw-r--r--indra/newview/llfasttimerview.h4
-rw-r--r--indra/newview/llfloaterland.cpp98
-rw-r--r--indra/newview/llfloatermediasettings.cpp6
-rw-r--r--indra/newview/llfloaterpreference.cpp17
-rw-r--r--indra/newview/llfloaterscriptlimits.cpp2
-rw-r--r--indra/newview/llfloaterworldmap.cpp4
-rw-r--r--indra/newview/llfolderview.cpp25
-rw-r--r--indra/newview/llfolderview.h2
-rw-r--r--indra/newview/llfolderviewitem.cpp82
-rw-r--r--indra/newview/llfolderviewitem.h10
-rw-r--r--indra/newview/llfriendcard.cpp26
-rw-r--r--indra/newview/llfriendcard.h2
-rw-r--r--indra/newview/llgrouplist.cpp2
-rw-r--r--indra/newview/llgrouplist.h5
-rw-r--r--indra/newview/llimfloater.cpp15
-rw-r--r--indra/newview/llimfloatercontainer.cpp27
-rw-r--r--indra/newview/llimview.cpp39
-rw-r--r--indra/newview/llinventorybridge.cpp14
-rw-r--r--indra/newview/llinventorymodel.cpp2
-rw-r--r--indra/newview/llinventorypanel.cpp15
-rw-r--r--indra/newview/llinventorypanel.h25
-rw-r--r--indra/newview/lllocationinputctrl.cpp59
-rw-r--r--indra/newview/lllocationinputctrl.h1
-rw-r--r--indra/newview/llloginhandler.cpp8
-rw-r--r--indra/newview/llmediactrl.cpp17
-rw-r--r--indra/newview/llmediactrl.h1
-rw-r--r--indra/newview/llnamelistctrl.cpp27
-rw-r--r--indra/newview/llnamelistctrl.h2
-rw-r--r--indra/newview/llnotificationhandler.h9
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp77
-rw-r--r--indra/newview/llnotificationtiphandler.cpp17
-rw-r--r--indra/newview/llpanelclassified.cpp554
-rw-r--r--indra/newview/llpanelclassified.h109
-rw-r--r--indra/newview/llpanelmaininventory.cpp4
-rw-r--r--indra/newview/llpanelnearbymedia.cpp58
-rw-r--r--indra/newview/llpanelnearbymedia.h2
-rw-r--r--indra/newview/llpanelobjectinventory.cpp6
-rw-r--r--indra/newview/llpanelpeople.cpp17
-rw-r--r--indra/newview/llpanelpicks.cpp173
-rw-r--r--indra/newview/llpanelpicks.h50
-rw-r--r--indra/newview/llpanelprofile.cpp10
-rw-r--r--indra/newview/llpanelvolumepulldown.cpp14
-rw-r--r--indra/newview/llpanelvolumepulldown.h2
-rw-r--r--indra/newview/llpopupview.cpp246
-rw-r--r--indra/newview/llpopupview.h67
-rw-r--r--indra/newview/llprogressview.cpp6
-rw-r--r--indra/newview/llscreenchannel.cpp5
-rw-r--r--indra/newview/llscriptfloater.cpp9
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp16
-rw-r--r--indra/newview/llsidepaneltaskinfo.h2
-rw-r--r--indra/newview/llsplitbutton.cpp7
-rw-r--r--indra/newview/llstatusbar.cpp53
-rw-r--r--indra/newview/lltexlayer.cpp19
-rw-r--r--indra/newview/lltexturecache.cpp92
-rw-r--r--indra/newview/lltexturecache.h6
-rw-r--r--indra/newview/lltexturectrl.h2
-rw-r--r--indra/newview/lltexturefetch.cpp26
-rw-r--r--indra/newview/lltexturefetch.h2
-rw-r--r--indra/newview/lltextureview.cpp20
-rw-r--r--indra/newview/lltoastnotifypanel.cpp15
-rw-r--r--indra/newview/lltoastnotifypanel.h12
-rw-r--r--indra/newview/lltoolpie.cpp27
-rw-r--r--indra/newview/lluploaddialog.cpp2
-rw-r--r--indra/newview/llviewercamera.cpp10
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp3
-rw-r--r--indra/newview/llviewermedia.cpp31
-rw-r--r--indra/newview/llviewermedia.h4
-rw-r--r--indra/newview/llviewermenu.cpp62
-rw-r--r--indra/newview/llviewermessage.cpp7
-rw-r--r--indra/newview/llviewertexture.cpp14
-rw-r--r--indra/newview/llviewertexture.h3
-rw-r--r--indra/newview/llviewertexturelist.cpp10
-rw-r--r--indra/newview/llviewerwindow.cpp103
-rw-r--r--indra/newview/llviewerwindow.h9
-rw-r--r--indra/newview/llvoavatarself.cpp20
-rw-r--r--indra/newview/llvoavatarself.h1
-rw-r--r--indra/newview/llwearablelist.cpp5
-rw-r--r--indra/newview/res/ll_icon.icobin364590 -> 367958 bytes
-rw-r--r--indra/newview/secondlife.icnsbin135209 -> 180809 bytes
-rw-r--r--indra/newview/skins/default/colors.xml4
-rw-r--r--indra/newview/skins/default/textures/navbar/BuyArrow_Over.pngbin689 -> 508 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_about.xml10
-rw-r--r--indra/newview/skins/default/xui/da/floater_about_land.xml19
-rw-r--r--indra/newview/skins/default/xui/da/floater_animation_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/da/floater_avatar_textures.xml55
-rw-r--r--indra/newview/skins/default/xui/da/floater_beacons.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_bulk_perms.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_buy_land.xml258
-rw-r--r--indra/newview/skins/default/xui/da/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_customize.xml115
-rw-r--r--indra/newview/skins/default/xui/da/floater_event.xml48
-rw-r--r--indra/newview/skins/default/xui/da/floater_god_tools.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_help_browser.xml7
-rw-r--r--indra/newview/skins/default/xui/da/floater_im.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_incoming_call.xml6
-rw-r--r--indra/newview/skins/default/xui/da/floater_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_media_browser.xml18
-rw-r--r--indra/newview/skins/default/xui/da/floater_moveview.xml7
-rw-r--r--indra/newview/skins/default/xui/da/floater_outfit_save_as.xml11
-rw-r--r--indra/newview/skins/default/xui/da/floater_outgoing_call.xml12
-rw-r--r--indra/newview/skins/default/xui/da/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_gesture.xml3
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_notecard.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_texture.xml7
-rw-r--r--indra/newview/skins/default/xui/da/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_settings_debug.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_snapshot.xml20
-rw-r--r--indra/newview/skins/default/xui/da/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_top_objects.xml63
-rw-r--r--indra/newview/skins/default/xui/da/floater_tos.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_voice_controls.xml17
-rw-r--r--indra/newview/skins/default/xui/da/floater_wearable_save_as.xml8
-rw-r--r--indra/newview/skins/default/xui/da/floater_whitelist_entry.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/da/floater_world_map.xml59
-rw-r--r--indra/newview/skins/default/xui/da/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/da/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/da/menu_inventory.xml9
-rw-r--r--indra/newview/skins/default/xui/da/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/da/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/da/menu_object.xml12
-rw-r--r--indra/newview/skins/default/xui/da/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/da/menu_profile_overflow.xml6
-rw-r--r--indra/newview/skins/default/xui/da/menu_viewer.xml78
-rw-r--r--indra/newview/skins/default/xui/da/notifications.xml189
-rw-r--r--indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/da/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/da/panel_classified_info.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/da/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_general.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml43
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_invite.xml11
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_land_money.xml107
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_notices.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_notify.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/da/panel_landmark_info.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_media_settings_general.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_media_settings_security.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/da/panel_navigation_bar.xml9
-rw-r--r--indra/newview/skins/default/xui/da/panel_nearby_media.xml60
-rw-r--r--indra/newview/skins/default/xui/da/panel_notes.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_people.xml18
-rw-r--r--indra/newview/skins/default/xui/da/panel_place_profile.xml57
-rw-r--r--indra/newview/skins/default/xui/da/panel_places.xml11
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_advanced.xml37
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_alerts.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_chat.xml12
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_general.xml19
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_privacy.xml5
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_setup.xml22
-rw-r--r--indra/newview/skins/default/xui/da/panel_preferences_sound.xml19
-rw-r--r--indra/newview/skins/default/xui/da/panel_prim_media_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/da/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_estate.xml9
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_texture.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/da/panel_side_tray.xml23
-rw-r--r--indra/newview/skins/default/xui/da/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/da/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_item_info.xml55
-rw-r--r--indra/newview/skins/default/xui/da/sidepanel_task_info.xml97
-rw-r--r--indra/newview/skins/default/xui/da/strings.xml433
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml15
-rw-r--r--indra/newview/skins/default/xui/de/floater_avatar_textures.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_bulk_perms.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_buy_currency.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_buy_land.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/de/floater_customize.xml38
-rw-r--r--indra/newview/skins/default/xui/de/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/de/floater_god_tools.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_im_session.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/de/floater_pay.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/de/floater_report_abuse.xml8
-rw-r--r--indra/newview/skins/default/xui/de/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml18
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/de/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_windlight_options.xml6
-rw-r--r--indra/newview/skins/default/xui/de/floater_world_map.xml14
-rw-r--r--indra/newview/skins/default/xui/de/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml11
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml57
-rw-r--r--indra/newview/skins/default/xui/de/panel_classified_info.xml38
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_classified.xml27
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_jacket.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_skin.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_invite.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_place_profile.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_places.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_chat.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_general.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_sound.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_general.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_general_layout.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_texture.xml24
-rw-r--r--indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml35
-rw-r--r--indra/newview/skins/default/xui/de/teleport_strings.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml25
-rw-r--r--indra/newview/skins/default/xui/en/floater_buy_land.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_customize.xml90
-rw-r--r--indra/newview/skins/default/xui/en/floater_event.xml106
-rw-r--r--indra/newview/skins/default/xui/en/floater_god_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_container.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_inspect.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_live_lsleditor.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_publish_classified.xml82
-rw-r--r--indra/newview/skins/default/xui/en/floater_script.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml10
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml40
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml17
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml13
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml19
-rw-r--r--indra/newview/skins/default/xui/en/menu_picks.xml15
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml19
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml260
-rw-r--r--indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_classified.xml152
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml66
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_invite.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general.xml46
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_general_layout.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_texture.xml232
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_ed.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml12
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml14
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml10
-rw-r--r--indra/newview/skins/default/xui/en/teleport_strings.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/slider_bar.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_avatar_textures.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_customize.xml30
-rw-r--r--indra/newview/skins/default/xui/es/floater_event.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_im.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_outfit_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_outgoing_call.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_tos.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_world_map.xml48
-rw-r--r--indra/newview/skins/default/xui/es/menu_avatar_self.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_object.xml4
-rw-r--r--indra/newview/skins/default/xui/es/menu_participant_list.xml12
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_groups.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml8
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml30
-rw-r--r--indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_invite.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_land_money.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_notices.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_roles.xml12
-rw-r--r--indra/newview/skins/default/xui/es/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_media_settings_general.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_media_settings_security.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_my_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_nearby_media.xml14
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_inventory.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_place_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_general.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml21
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_privacy.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_sound.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_prim_media_controls.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_profile.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_general_layout.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_texture.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_status_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_teleport_history_item.xml2
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_item_info.xml2
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_task_info.xml31
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml24
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml31
-rw-r--r--indra/newview/skins/default/xui/fr/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/floater_god_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preview_texture.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/floater_snapshot.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/floater_water.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_windlight_options.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_world_map.xml51
-rw-r--r--indra/newview/skins/default/xui/fr/menu_attachment_other.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_avatar_other.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_land.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_profile_overflow.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml41
-rw-r--r--indra/newview/skins/default/xui/fr/panel_classified_info.xml36
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_classified.xml27
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_roles.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_my_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/panel_place_profile.xml60
-rw-r--r--indra/newview/skins/default/xui/fr/panel_places.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_chat.xml10
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_general.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_setup.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_sound.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/panel_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_general.xml28
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_general_layout.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_texture.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/role_actions.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_task_info.xml39
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml9
-rw-r--r--indra/newview/skins/default/xui/fr/teleport_strings.xml5
-rw-r--r--indra/newview/skins/default/xui/it/floater_world_map.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_place_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_task_info.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_land.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_camera.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/floater_event.xml21
-rw-r--r--indra/newview/skins/default/xui/ja/floater_god_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_im.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_moveview.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_gesture.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_publish_classified.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/floater_report_abuse.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/floater_snapshot.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_controls.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/floater_water.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/floater_world_map.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/menu_object.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml19
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml83
-rw-r--r--indra/newview/skins/default/xui/ja/panel_classified_info.xml40
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_classified.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_general.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/ja/panel_place_profile.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/panel_places.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_chat.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_general.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_sound.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_general.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_general_layout.xml22
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_texture.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_side_tray.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/panel_teleport_history.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_task_info.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml45
-rw-r--r--indra/newview/skins/default/xui/ja/teleport_strings.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/floater_auction.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_camera.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/floater_color_picker.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/floater_hud.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_im_session.xml9
-rw-r--r--indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/floater_mem_leaking.xml16
-rw-r--r--indra/newview/skins/default/xui/pl/floater_my_friends.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_animation.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_preview_classified.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/floater_select_key.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_sound_preview.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_avatar.xml21
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_group.xml22
-rw-r--r--indra/newview/skins/default/xui/pl/inspect_remote_object.xml13
-rw-r--r--indra/newview/skins/default/xui/pl/mime_types_mac.xml217
-rw-r--r--indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml25
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_shirt.xml10
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_list_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/panel_group_roles.xml12
-rw-r--r--indra/newview/skins/default/xui/pl/panel_landmark_info.xml37
-rw-r--r--indra/newview/skins/default/xui/pl/panel_login.xml54
-rw-r--r--indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml7
-rw-r--r--indra/newview/skins/default/xui/pl/panel_people.xml53
-rw-r--r--indra/newview/skins/default/xui/pl/panel_picks.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml49
-rw-r--r--indra/newview/skins/default/xui/pl/panel_profile.xml37
-rw-r--r--indra/newview/skins/default/xui/pl/panel_region_covenant.xml20
-rw-r--r--indra/newview/skins/default/xui/pl/panel_script_ed.xml43
-rw-r--r--indra/newview/skins/default/xui/pl/panel_side_tray.xml26
-rw-r--r--indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/panel_teleport_history.xml14
-rw-r--r--indra/newview/skins/default/xui/pl/sidepanel_item_info.xml70
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/floater_animation_preview.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_avatar_textures.xml55
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_land.xml252
-rw-r--r--indra/newview/skins/default/xui/pt/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_customize.xml115
-rw-r--r--indra/newview/skins/default/xui/pt/floater_event.xml48
-rw-r--r--indra/newview/skins/default/xui/pt/floater_god_tools.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/floater_help_browser.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_im_container.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_incoming_call.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_inventory.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_map.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_media_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_moveview.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/floater_outgoing_call.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_gesture.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_notecard.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_texture.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_report_abuse.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_limits.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_settings_debug.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/floater_snapshot.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/floater_sys_well.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_top_objects.xml67
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tos.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_controls.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_window_size.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/floater_world_map.xml32
-rw-r--r--indra/newview/skins/default/xui/pt/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_avatar_self.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_im_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_notification_well_button.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_object.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/menu_participant_list.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_profile_overflow.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml74
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml183
-rw-r--r--indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_classified_info.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_profile.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_control_panel.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_general.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml43
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_invite.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_land_money.xml106
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_notices.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_im_control_panel.xml36
-rw-r--r--indra/newview/skins/default/xui/pt/panel_landmark_info.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_me.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_media_settings_security.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_my_profile.xml58
-rw-r--r--indra/newview/skins/default/xui/pt/panel_navigation_bar.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/panel_nearby_media.xml60
-rw-r--r--indra/newview/skins/default/xui/pt/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_online_status.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_online_status_toast.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_people.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/panel_place_profile.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/panel_places.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml35
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_chat.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_general.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_setup.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_sound.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/pt/panel_profile.xml64
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_covenant.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_general_layout.xml43
-rw-r--r--indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_side_tray.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_status_bar.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_teleport_history.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_appearance.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_item_info.xml55
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_task_info.xml76
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml411
-rw-r--r--indra/newview/tests/llviewerhelputil_test.cpp2
-rw-r--r--indra/test/llpermissions_tut.cpp106
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.cpp271
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.h9
669 files changed, 9390 insertions, 4714 deletions
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index ed06c85e1a..b92ccd1d77 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -592,7 +592,7 @@ LLAudioBuffer * LLAudioEngine::getFreeBuffer()
if (buffer_id >= 0)
{
- llinfos << "Taking over unused buffer " << buffer_id << llendl;
+ lldebugs << "Taking over unused buffer " << buffer_id << llendl;
//llinfos << "Flushing unused buffer!" << llendl;
mBuffers[buffer_id]->mAudioDatap->mBufferp = NULL;
delete mBuffers[buffer_id];
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index c2c45bec9a..f1dda1b2e2 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -122,7 +122,6 @@ public:
U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes
};
-
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLOSInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLCPUInfo& info);
LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info);
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 1b0e03cb2a..411977474b 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -65,6 +65,27 @@ LLWorkerThread::~LLWorkerThread()
// ~LLQueuedThread() will be called here
}
+//called only in destructor.
+void LLWorkerThread::clearDeleteList()
+{
+ // Delete any workers in the delete queue (should be safe - had better be!)
+ if (!mDeleteList.empty())
+ {
+ llwarns << "Worker Thread: " << mName << " destroyed with " << mDeleteList.size()
+ << " entries in delete list." << llendl;
+
+ mDeleteMutex->lock();
+ for (delete_list_t::iterator iter = mDeleteList.begin(); iter != mDeleteList.end(); ++iter)
+ {
+ (*iter)->mRequestHandle = LLWorkerThread::nullHandle();
+ (*iter)->clearFlags(LLWorkerClass::WCF_HAVE_WORK);
+ delete *iter ;
+ }
+ mDeleteList.clear() ;
+ mDeleteMutex->unlock() ;
+ }
+}
+
// virtual
S32 LLWorkerThread::update(U32 max_time_ms)
{
@@ -320,7 +341,20 @@ bool LLWorkerClass::checkWork(bool aborting)
if (mRequestHandle != LLWorkerThread::nullHandle())
{
LLWorkerThread::WorkRequest* workreq = (LLWorkerThread::WorkRequest*)mWorkerThread->getRequest(mRequestHandle);
- llassert_always(workreq);
+ if(!workreq)
+ {
+ if(mWorkerThread->isQuitting() || mWorkerThread->isStopped()) //the mWorkerThread is not running
+ {
+ mRequestHandle = LLWorkerThread::nullHandle();
+ clearFlags(WCF_HAVE_WORK);
+ return true ;
+ }
+ else
+ {
+ llassert_always(workreq);
+ }
+ }
+
LLQueuedThread::status_t status = workreq->getStatus();
if (status == LLWorkerThread::STATUS_ABORTED)
{
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index a1e85d2ecc..1756ebab6b 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -80,6 +80,9 @@ public:
S32 mParam;
};
+protected:
+ void clearDeleteList() ;
+
private:
typedef std::list<LLWorkerClass*> delete_list_t;
delete_list_t mDeleteList;
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 5649b4cab7..7d0de18c7c 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -157,8 +157,9 @@ U8* LLImageBase::allocateData(S32 size)
llerrs << llformat("LLImageBase::allocateData called with bad dimensions: %dx%dx%d",mWidth,mHeight,mComponents) << llendl;
}
}
- else if (size <= 0 || (size > 4096*4096*16 && sSizeOverride == FALSE))
+ if (size < 1 || (size > 4096*4096*16 && sSizeOverride == FALSE))
{
+ llinfos << "width: " << mWidth << " height: " << mHeight << " components: " << mComponents << llendl ;
llerrs << "LLImageBase::allocateData: bad size: " << size << llendl;
}
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 853f6f173d..532b6b6524 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -209,6 +209,16 @@ set(llui_HEADER_FILES
set_source_files_properties(${llui_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
+SET(llurlentry_TEST_DEPENDENCIES
+ llurlmatch.cpp
+ llurlregistry.cpp
+ )
+
+set_source_files_properties(llurlentry.cpp
+ PROPERTIES LL_TEST_ADDITIONAL_SOURCE_FILES
+ "${llurlentry_TEST_DEPENDENCIES}"
+ )
+
list(APPEND llui_SOURCE_FILES ${llui_HEADER_FILES})
add_library (llui ${llui_SOURCE_FILES})
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index aa69dfe0cc..2ed1082f56 100644
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -103,13 +103,6 @@ void LLAccordionCtrl::draw()
LLLocalClipRect clip(local_rect);
LLPanel::draw();
- /*
- S32 width = getRect().getWidth();
- S32 height = getRect().getHeight();
-
- gl_rect_2d(0, 0 , width - 1 ,height - 1,LLColor4::green,true);
- gl_line_2d(0, 0 , width - 1 ,height - 1,LLColor4::black);
- */
}
@@ -125,7 +118,6 @@ BOOL LLAccordionCtrl::postBuild()
scrollbar_size,
getRect().getHeight() - 1);
-
LLScrollbar::Params sbparams;
sbparams.name("scrollable vertical");
sbparams.rect(scroll_rect);
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index daa9e08f14..1067c3f1d5 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -33,8 +33,9 @@
#include "linden_common.h"
#include "lluictrl.h"
-
+#include "llscrollbar.h"
#include "llaccordionctrltab.h"
+#include "lllocalcliprect.h"
#include "lltextbox.h"
@@ -46,6 +47,8 @@ static const S32 HEADER_HEIGHT = 20;
static const S32 HEADER_IMAGE_LEFT_OFFSET = 5;
static const S32 HEADER_TEXT_LEFT_OFFSET = 30;
static const F32 AUTO_OPEN_TIME = 1.f;
+static const S32 VERTICAL_MULTIPLE = 16;
+static const S32 PARENT_BORDER_MARGIN = 5;
static LLDefaultChildRegistry::Register<LLAccordionCtrlTab> t1("accordion_tab");
@@ -277,6 +280,7 @@ LLAccordionCtrlTab::Params::Params()
,header_image_pressed("header_image_pressed")
,header_image_focused("header_image_focused")
,header_text_color("header_text_color")
+ ,fit_panel("fit_panel",true)
{
mouse_opaque(false);
}
@@ -293,6 +297,9 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p)
,mPaddingTop(p.padding_top)
,mPaddingBottom(p.padding_bottom)
,mCanOpenClose(true)
+ ,mFitPanel(p.fit_panel)
+ ,mContainerPanel(NULL)
+ ,mScrollbar(NULL)
{
mStoredOpenCloseState = false;
mWasStateStored = false;
@@ -321,54 +328,42 @@ void LLAccordionCtrlTab::setDisplayChildren(bool display)
mExpandedHeight : HEADER_HEIGHT);
setRect(rect);
- for(child_list_const_iter_t it = getChildList()->begin();
- getChildList()->end() != it; ++it)
- {
- LLView* child = *it;
- if(DD_HEADER_NAME == child->getName())
- continue;
+ if(mContainerPanel)
+ mContainerPanel->setVisible(getDisplayChildren());
- child->setVisible(getDisplayChildren());
+ if(mDisplayChildren)
+ {
+ adjustContainerPanel();
}
+ else
+ {
+ if(mScrollbar)
+ mScrollbar->setVisible(false);
+ }
+
}
void LLAccordionCtrlTab::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
{
LLRect headerRect;
- LLUICtrl::reshape(width, height, TRUE);
-
headerRect.setLeftTopAndSize(
0,height,width,HEADER_HEIGHT);
mHeader->setRect(headerRect);
mHeader->reshape(headerRect.getWidth(), headerRect.getHeight());
- for(child_list_const_iter_t it = getChildList()->begin();
- getChildList()->end() != it; ++it)
- {
- LLView* child = *it;
- if(DD_HEADER_NAME == child->getName())
- continue;
- if(!child->getVisible())
- continue;
-
- LLRect childRect = child->getRect();
- S32 childWidth = width - getPaddingLeft() - getPaddingRight();
- S32 childHeight = height - getHeaderHeight() - getPaddingTop() - getPaddingBottom();
+ if(!mDisplayChildren)
+ return;
- child->reshape(childWidth,childHeight);
-
- childRect.setLeftTopAndSize(
- getPaddingLeft(),
- childHeight + getPaddingBottom(),
- childWidth,
- childHeight);
+ LLRect childRect;
- child->setRect(childRect);
-
- break;//suppose that there is only one panel
- }
+ childRect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+ adjustContainerPanel(childRect);
}
void LLAccordionCtrlTab::changeOpenClose(bool is_open)
@@ -439,7 +434,7 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel)
}
-LLView* LLAccordionCtrlTab::getAccordionView()
+LLView* LLAccordionCtrlTab::findContainerView()
{
for(child_list_const_iter_t it = getChildList()->begin();
getChildList()->end() != it; ++it)
@@ -474,6 +469,43 @@ void LLAccordionCtrlTab::setHeaderVisible(bool value)
BOOL LLAccordionCtrlTab::postBuild()
{
mHeader->setVisible(mHeaderVisible);
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+
+ LLRect scroll_rect;
+ scroll_rect.setOriginAndSize(
+ getRect().getWidth() - scrollbar_size,
+ 1,
+ scrollbar_size,
+ getRect().getHeight() - 1);
+
+ mContainerPanel = findContainerView();
+
+ if(!mFitPanel)
+ {
+ LLScrollbar::Params sbparams;
+ sbparams.name("scrollable vertical");
+ sbparams.rect(scroll_rect);
+ sbparams.orientation(LLScrollbar::VERTICAL);
+ sbparams.doc_size(getRect().getHeight());
+ sbparams.doc_pos(0);
+ sbparams.page_size(getRect().getHeight());
+ sbparams.step_size(VERTICAL_MULTIPLE);
+ sbparams.follows.flags(FOLLOWS_RIGHT | FOLLOWS_TOP | FOLLOWS_BOTTOM);
+ sbparams.change_callback(boost::bind(&LLAccordionCtrlTab::onScrollPosChangeCallback, this, _1, _2));
+
+
+ mScrollbar = LLUICtrlFactory::create<LLScrollbar> (sbparams);
+ LLView::addChild( mScrollbar );
+ mScrollbar->setFollowsRight();
+ mScrollbar->setFollowsTop();
+ mScrollbar->setFollowsBottom();
+
+ mScrollbar->setVisible(false);
+ }
+
+ mContainerPanel->setVisible(mDisplayChildren);
+
return LLUICtrl::postBuild();
}
bool LLAccordionCtrlTab::notifyChildren (const LLSD& info)
@@ -562,6 +594,12 @@ BOOL LLAccordionCtrlTab::handleKey(KEY key, MASK mask, BOOL called_from_parent)
if( !header->hasFocus() )
return LLUICtrl::handleKey(key, mask, called_from_parent);
+ if ( (key == KEY_RETURN )&& mask == MASK_NONE)
+ {
+ changeOpenClose(getDisplayChildren());
+ return TRUE;
+ }
+
if ( (key == KEY_ADD || key == KEY_RIGHT)&& mask == MASK_NONE)
{
if(getDisplayChildren() == false)
@@ -622,6 +660,7 @@ void LLAccordionCtrlTab::storeOpenCloseState()
mStoredOpenCloseState = getDisplayChildren();
mWasStateStored = true;
}
+
void LLAccordionCtrlTab::restoreOpenCloseState()
{
if(!mWasStateStored)
@@ -632,3 +671,195 @@ void LLAccordionCtrlTab::restoreOpenCloseState()
}
mWasStateStored = false;
}
+
+void LLAccordionCtrlTab::adjustContainerPanel ()
+{
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ LLRect child_rect;
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ adjustContainerPanel(child_rect);
+}
+
+void LLAccordionCtrlTab::adjustContainerPanel(const LLRect& child_rect)
+{
+ if(!mContainerPanel)
+ return;
+
+ if(!mFitPanel)
+ {
+ show_hide_scrollbar(child_rect);
+ updateLayout(child_rect);
+ }
+ else
+ {
+ mContainerPanel->reshape(child_rect.getWidth(),child_rect.getHeight());
+ mContainerPanel->setRect(child_rect);
+ }
+}
+
+S32 LLAccordionCtrlTab::getChildViewHeight()
+{
+ if(!mContainerPanel)
+ return 0;
+ return mContainerPanel->getRect().getHeight();
+}
+
+void LLAccordionCtrlTab::show_hide_scrollbar(const LLRect& child_rect)
+{
+ if(getChildViewHeight() > child_rect.getHeight() )
+ showScrollbar(child_rect);
+ else
+ hideScrollbar(child_rect);
+}
+void LLAccordionCtrlTab::showScrollbar(const LLRect& child_rect)
+{
+ if(!mContainerPanel || !mScrollbar)
+ return;
+ bool was_visible = mScrollbar->getVisible();
+ mScrollbar->setVisible(true);
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+
+ {
+ ctrlSetLeftTopAndSize(mScrollbar,child_rect.getWidth()-scrollbar_size,
+ child_rect.getHeight()-PARENT_BORDER_MARGIN,
+ scrollbar_size,
+ child_rect.getHeight()-2*PARENT_BORDER_MARGIN);
+ }
+
+ LLRect orig_rect = mContainerPanel->getRect();
+
+ mScrollbar->setPageSize(child_rect.getHeight());
+ mScrollbar->setDocParams(orig_rect.getHeight(),mScrollbar->getDocPos());
+
+ if(was_visible)
+ {
+ S32 scroll_pos = llmin(mScrollbar->getDocPos(), orig_rect.getHeight() - child_rect.getHeight() - 1);
+ mScrollbar->setDocPos(scroll_pos);
+ }
+ else//shrink child panel
+ {
+ updateLayout(child_rect);
+ }
+
+}
+
+void LLAccordionCtrlTab::hideScrollbar( const LLRect& child_rect )
+{
+ if(!mContainerPanel || !mScrollbar)
+ return;
+
+ if(mScrollbar->getVisible() == false)
+ return;
+ mScrollbar->setVisible(false);
+ mScrollbar->setDocPos(0);
+
+ //shrink child panel
+ updateLayout(child_rect);
+}
+
+void LLAccordionCtrlTab::onScrollPosChangeCallback(S32, LLScrollbar*)
+{
+ LLRect child_rect;
+
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ updateLayout(child_rect);
+}
+
+void LLAccordionCtrlTab::drawChild(const LLRect& root_rect,LLView* child)
+{
+ if (child && child->getVisible() && child->getRect().isValid())
+ {
+ LLRect screen_rect;
+ localRectToScreen(child->getRect(),&screen_rect);
+
+ if ( root_rect.overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
+ {
+ glMatrixMode(GL_MODELVIEW);
+ LLUI::pushMatrix();
+ {
+ LLUI::translate((F32)child->getRect().mLeft, (F32)child->getRect().mBottom, 0.f);
+ child->draw();
+
+ }
+ LLUI::popMatrix();
+ }
+ }
+}
+
+void LLAccordionCtrlTab::draw()
+{
+ if(mFitPanel)
+ LLUICtrl::draw();
+ else
+ {
+ LLRect root_rect = getRootView()->getRect();
+ drawChild(root_rect,mHeader);
+ drawChild(root_rect,mScrollbar );
+ {
+ LLRect child_rect;
+
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
+
+ child_rect.setLeftTopAndSize(
+ getPaddingLeft(),
+ height - getHeaderHeight() - getPaddingTop(),
+ width - getPaddingLeft() - getPaddingRight(),
+ height - getHeaderHeight() - getPaddingTop() - getPaddingBottom() );
+
+ LLLocalClipRect clip(child_rect);
+ drawChild(root_rect,mContainerPanel);
+ }
+
+
+ gGL.getTexUnit(0)->disable();
+ }
+}
+
+void LLAccordionCtrlTab::updateLayout ( const LLRect& child_rect )
+{
+ LLView* child = getAccordionView();
+ if(!mContainerPanel)
+ return;
+
+ S32 panel_top = child_rect.getHeight();
+ S32 panel_width = child_rect.getWidth();
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+ if(mScrollbar->getVisible() != false)
+ {
+ panel_top+=mScrollbar->getDocPos();
+ panel_width-=scrollbar_size;
+ }
+
+ //set sizes for first panels and dragbars
+ LLRect panel_rect = child->getRect();
+ ctrlSetLeftTopAndSize(mContainerPanel,child_rect.mLeft,panel_top,panel_width,panel_rect.getHeight());
+}
+void LLAccordionCtrlTab::ctrlSetLeftTopAndSize(LLView* panel, S32 left, S32 top, S32 width, S32 height)
+{
+ if(!panel)
+ return;
+ LLRect panel_rect = panel->getRect();
+ panel_rect.setLeftTopAndSize( left, top, width, height);
+ panel->reshape( width, height, 1);
+ panel->setRect(panel_rect);
+}
+
+
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
index 2e0260ab16..462ccc6d53 100644
--- a/indra/llui/llaccordionctrltab.h
+++ b/indra/llui/llaccordionctrltab.h
@@ -41,6 +41,7 @@ class LLUICtrlFactory;
class LLUIImage;
class LLButton;
class LLTextBox;
+class LLScrollbar;
@@ -84,6 +85,8 @@ public:
Optional<bool> header_visible;
+ Optional<bool> fit_panel;
+
Optional<S32> padding_left;
Optional<S32> padding_right;
Optional<S32> padding_top;
@@ -107,7 +110,7 @@ public:
//set LLAccordionCtrlTab panel
void setAccordionView(LLView* panel);
- LLView* getAccordionView();
+ LLView* getAccordionView() { return mContainerPanel; };
bool getCollapsible() {return mCollapsible;};
@@ -123,6 +126,8 @@ public:
S32 notify(const LLSD& info);
bool notifyChildren(const LLSD& info);
+ void draw();
+
void storeOpenCloseState ();
void restoreOpenCloseState ();
@@ -164,9 +169,26 @@ public:
void showAndFocusHeader();
-private:
+ void setFitPanel( bool fit ) { mFitPanel = true; }
-
+protected:
+ void adjustContainerPanel (const LLRect& child_rect);
+ void adjustContainerPanel ();
+ S32 getChildViewHeight ();
+
+ void onScrollPosChangeCallback(S32, LLScrollbar*);
+
+ void show_hide_scrollbar (const LLRect& child_rect);
+ void showScrollbar (const LLRect& child_rect);
+ void hideScrollbar (const LLRect& child_rect);
+
+ void updateLayout ( const LLRect& child_rect );
+ void ctrlSetLeftTopAndSize (LLView* panel, S32 left, S32 top, S32 width, S32 height);
+
+ void drawChild(const LLRect& root_rect,LLView* child);
+
+ LLView* findContainerView ();
+private:
class LLAccordionCtrlTabHeader;
LLAccordionCtrlTabHeader* mHeader; //Header
@@ -176,6 +198,7 @@ private:
bool mHeaderVisible;
bool mCanOpenClose;
+ bool mFitPanel;
S32 mPaddingLeft;
S32 mPaddingRight;
@@ -185,6 +208,8 @@ private:
bool mStoredOpenCloseState;
bool mWasStateStored;
+ LLScrollbar* mScrollbar;
+ LLView* mContainerPanel;
LLUIColor mDropdownBGColor;
};
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 6a0d8ef3d6..59b551a16d 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -216,6 +216,7 @@ public:
void setImageOverlay(const std::string& image_name, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
void setImageOverlay(const LLUUID& image_id, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
LLPointer<LLUIImage> getImageOverlay() { return mImageOverlay; }
+ LLFontGL::HAlign getImageOverlayHAlign() const { return mImageOverlayAlignment; }
void autoResize(); // resize with label of current btn state
void resize(LLUIString label); // resize with label input
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 9d23daf56d..c1d512e148 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -160,7 +160,7 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
createLineEditor(p);
- setTopLostCallback(boost::bind(&LLComboBox::hideList, this));
+ mTopLostSignalConnection = setTopLostCallback(boost::bind(&LLComboBox::hideList, this));
}
void LLComboBox::initFromParams(const LLComboBox::Params& p)
@@ -187,6 +187,9 @@ BOOL LLComboBox::postBuild()
LLComboBox::~LLComboBox()
{
// children automatically deleted, including mMenu, mButton
+
+ // explicitly disconect this signal, since base class destructor might fire top lost
+ mTopLostSignalConnection.disconnect();
}
@@ -320,15 +323,19 @@ void LLComboBox::setValue(const LLSD& value)
LLScrollListItem* item = mList->getFirstSelected();
if (item)
{
- setLabel( mList->getSelectedItemLabel() );
+ setLabel(getSelectedItemLabel());
}
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
+ else
+ {
+ mLastSelectedIndex = -1;
+ }
}
const std::string LLComboBox::getSimple() const
{
- const std::string res = mList->getSelectedItemLabel();
+ const std::string res = getSelectedItemLabel();
if (res.empty() && mAllowTextEntry)
{
return mTextEntry->getText();
@@ -407,7 +414,7 @@ BOOL LLComboBox::remove(S32 index)
if (index < mList->getItemCount())
{
mList->deleteSingleItem(index);
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
return TRUE;
}
return FALSE;
@@ -448,7 +455,7 @@ BOOL LLComboBox::setCurrentByIndex( S32 index )
BOOL found = mList->selectNthItem( index );
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
mLastSelectedIndex = index;
}
return found;
@@ -612,16 +619,14 @@ void LLComboBox::showList()
mList->setFocus(TRUE);
- // register ourselves as a "top" control
- // effectively putting us into a special draw layer
- // and not affecting the bounding rectangle calculation
- gFocusMgr.setTopCtrl(this);
-
// Show the list and push the button down
mButton->setToggleState(TRUE);
mList->setVisible(TRUE);
+ LLUI::addPopup(this);
+
setUseBoundingRect(TRUE);
+// updateBoundingRect();
}
void LLComboBox::hideList()
@@ -644,10 +649,8 @@ void LLComboBox::hideList()
mList->mouseOverHighlightNthItem(-1);
setUseBoundingRect(FALSE);
- if( gFocusMgr.getTopCtrl() == this )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
+// updateBoundingRect();
}
}
@@ -703,19 +706,12 @@ void LLComboBox::onListMouseUp()
void LLComboBox::onItemSelected(const LLSD& data)
{
- const std::string name = mList->getSelectedItemLabel();
+ setValue(data);
- S32 cur_id = getCurrentIndex();
- mLastSelectedIndex = cur_id;
- if (cur_id != -1)
+ if (mAllowTextEntry && mLastSelectedIndex != -1)
{
- setLabel(name);
-
- if (mAllowTextEntry)
- {
- gFocusMgr.setKeyboardFocus(mTextEntry);
- mTextEntry->selectAll();
- }
+ gFocusMgr.setKeyboardFocus(mTextEntry);
+ mTextEntry->selectAll();
}
// hiding the list reasserts the old value stored in the text editor/dropdown button
@@ -912,7 +908,7 @@ void LLComboBox::updateSelection()
}
else if (mList->selectItemByPrefix(left_wstring, FALSE))
{
- LLWString selected_item = utf8str_to_wstring(mList->getSelectedItemLabel());
+ LLWString selected_item = utf8str_to_wstring(getSelectedItemLabel());
LLWString wtext = left_wstring + selected_item.substr(left_wstring.size(), selected_item.size());
mTextEntry->setText(wstring_to_utf8str(wtext));
mTextEntry->setSelection(left_wstring.size(), mTextEntry->getWText().size());
@@ -1014,7 +1010,7 @@ BOOL LLComboBox::setCurrentByID(const LLUUID& id)
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
mLastSelectedIndex = mList->getFirstSelectedIndex();
}
@@ -1030,7 +1026,7 @@ BOOL LLComboBox::setSelectedByValue(const LLSD& value, BOOL selected)
BOOL found = mList->setSelectedByValue(value, selected);
if (found)
{
- setLabel(mList->getSelectedItemLabel());
+ setLabel(getSelectedItemLabel());
}
return found;
}
@@ -1069,3 +1065,42 @@ BOOL LLComboBox::selectItemRange( S32 first, S32 last )
{
return mList->selectItemRange(first, last);
}
+
+
+static LLDefaultChildRegistry::Register<LLIconsComboBox> register_icons_combo_box("icons_combo_box");
+
+LLIconsComboBox::Params::Params()
+: icon_column("icon_column", ICON_COLUMN),
+ label_column("label_column", LABEL_COLUMN)
+{}
+
+LLIconsComboBox::LLIconsComboBox(const LLIconsComboBox::Params& p)
+: LLComboBox(p),
+ mIconColumnIndex(p.icon_column),
+ mLabelColumnIndex(p.label_column)
+{}
+
+void LLIconsComboBox::setValue(const LLSD& value)
+{
+ BOOL found = mList->selectByValue(value);
+ if (found)
+ {
+ LLScrollListItem* item = mList->getFirstSelected();
+ if (item)
+ {
+ setLabel(getSelectedItemLabel());
+ }
+ mLastSelectedIndex = mList->getFirstSelectedIndex();
+ }
+ else
+ {
+ mLastSelectedIndex = -1;
+ }
+}
+
+const std::string LLIconsComboBox::getSelectedItemLabel(S32 column) const
+{
+ mButton->setImageOverlay(LLComboBox::getSelectedItemLabel(mIconColumnIndex), mButton->getImageOverlayHAlign());
+
+ return LLComboBox::getSelectedItemLabel(mLabelColumnIndex);
+}
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
index 4f27588467..965061ead2 100644
--- a/indra/llui/llcombobox.h
+++ b/indra/llui/llcombobox.h
@@ -150,7 +150,7 @@ public:
// Get name of current item. Returns an empty string if not found.
const std::string getSimple() const;
// Get contents of column x of selected row
- const std::string getSelectedItemLabel(S32 column = 0) const;
+ virtual const std::string getSelectedItemLabel(S32 column = 0) const;
// Sets the label, which doesn't have to exist in the label.
// This is probably a UI abuse.
@@ -221,6 +221,7 @@ protected:
LLPointer<LLUIImage> mArrowImage;
LLUIString mLabel;
BOOL mHasAutocompletedText;
+ S32 mLastSelectedIndex;
private:
BOOL mAllowTextEntry;
@@ -230,6 +231,38 @@ private:
commit_callback_t mPrearrangeCallback;
commit_callback_t mTextEntryCallback;
commit_callback_t mSelectionCallback;
- S32 mLastSelectedIndex;
+ boost::signals2::connection mTopLostSignalConnection;
+};
+
+// A combo box with icons for the list of items.
+class LLIconsComboBox
+: public LLComboBox
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLComboBox::Params>
+ {
+ Optional<S32> icon_column,
+ label_column;
+ Params();
+ };
+
+ /*virtual*/ void setValue(const LLSD& value);
+ /*virtual*/ const std::string getSelectedItemLabel(S32 column = 0) const;
+
+private:
+ enum EColumnIndex
+ {
+ ICON_COLUMN = 0,
+ LABEL_COLUMN
+ };
+
+ friend class LLUICtrlFactory;
+ LLIconsComboBox(const Params&);
+ virtual ~LLIconsComboBox() {};
+
+ S32 mIconColumnIndex;
+ S32 mLabelColumnIndex;
};
+
#endif
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 2481249f91..2e5aeec41d 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -492,6 +492,12 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)
{
if (!item_pair) return;
+ if (!item_pair->first)
+ {
+ llwarning("Attempt to selet an item pair containing null panel item", 0);
+ return;
+ }
+
setFocus(TRUE);
bool select_item = !isSelected(item_pair);
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index b6d73cda3c..4cb336f7ea 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -527,10 +527,7 @@ void LLFloater::setVisible( BOOL visible )
if( !visible )
{
- if( gFocusMgr.childIsTopCtrl( this ) )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
if( gFocusMgr.childHasMouseCapture( this ) )
{
@@ -704,10 +701,7 @@ void LLFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
void LLFloater::releaseFocus()
{
- if( gFocusMgr.childIsTopCtrl( this ) )
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ LLUI::removePopup(this);
setFocus(FALSE);
@@ -1360,7 +1354,7 @@ void LLFloater::bringToFront( S32 x, S32 y )
// virtual
void LLFloater::setVisibleAndFrontmost(BOOL take_focus)
{
- gFocusMgr.setTopCtrl(NULL);
+ LLUI::clearPopups();
setVisible(TRUE);
setFrontmost(take_focus);
}
@@ -1554,7 +1548,12 @@ void LLFloater::onClickClose( LLFloater* self )
{
if (!self)
return;
- self->closeFloater(false);
+ self->onClickCloseBtn();
+}
+
+void LLFloater::onClickCloseBtn()
+{
+ closeFloater(false);
}
@@ -2503,10 +2502,7 @@ void LLFloaterView::syncFloaterTabOrder()
if (modal_dialog)
{
// If we have a visible modal dialog, make sure that it has focus
- if( gFocusMgr.getTopCtrl() != modal_dialog )
- {
- gFocusMgr.setTopCtrl( modal_dialog );
- }
+ LLUI::addPopup(modal_dialog);
if( !gFocusMgr.childHasKeyboardFocus( modal_dialog ) )
{
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 19e8288807..c1e8813f87 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -307,6 +307,8 @@ protected:
void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater()
+ virtual void onClickCloseBtn();
+
private:
void setForeground(BOOL b); // called only by floaterview
void cleanupHandles(); // remove handles to dead floaters
@@ -346,6 +348,7 @@ protected:
LLResizeBar* mResizeBar[4];
LLResizeHandle* mResizeHandle[4];
+ LLButton* mButtons[BUTTON_COUNT];
private:
LLRect mExpandedRect;
@@ -379,7 +382,6 @@ private:
handle_set_t mDependents;
bool mButtonsEnabled[BUTTON_COUNT];
- LLButton* mButtons[BUTTON_COUNT];
F32 mButtonScale;
BOOL mAutoFocus;
LLHandle<LLFloater> mSnappedTo;
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 35fbc7b0a8..b3af258456 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -38,8 +38,6 @@
const F32 FOCUS_FADE_TIME = 0.3f;
-// NOTE: the LLFocusableElement implementation has been moved here from lluictrl.cpp.
-
LLFocusableElement::LLFocusableElement()
: mFocusLostCallback(NULL),
mFocusReceivedCallback(NULL),
@@ -124,8 +122,7 @@ boost::signals2::connection LLFocusableElement::setTopLostCallback(const focus_s
LLFocusMgr gFocusMgr;
LLFocusMgr::LLFocusMgr()
- :
- mLockedView( NULL ),
+: mLockedView( NULL ),
mMouseCaptor( NULL ),
mKeyboardFocus( NULL ),
mLastKeyboardFocus( NULL ),
@@ -133,16 +130,11 @@ LLFocusMgr::LLFocusMgr()
mKeystrokesOnly(FALSE),
mTopCtrl( NULL ),
mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true
- #ifdef _DEBUG
- , mMouseCaptorName("none")
- , mKeyboardFocusName("none")
- , mTopCtrlName("none")
- #endif
{
}
-void LLFocusMgr::releaseFocusIfNeeded( const LLView* view )
+void LLFocusMgr::releaseFocusIfNeeded( LLView* view )
{
if( childHasMouseCapture( view ) )
{
@@ -162,10 +154,7 @@ void LLFocusMgr::releaseFocusIfNeeded( const LLView* view )
}
}
- if( childIsTopCtrl( view ) )
- {
- setTopCtrl( NULL );
- }
+ LLUI::removePopup(view);
}
@@ -248,11 +237,6 @@ void LLFocusMgr::setKeyboardFocus(LLFocusableElement* new_focus, BOOL lock, BOOL
return;
}
- #ifdef _DEBUG
- LLUICtrl* focus_ctrl = dynamic_cast<LLUICtrl*>(new_focus);
- mKeyboardFocusName = focus_ctrl ? focus_ctrl->getName() : std::string("none");
- #endif
-
// If we've got a default keyboard focus, and the caller is
// releasing keyboard focus, move to the default.
if (mDefaultKeyboardFocus != NULL && mKeyboardFocus == NULL)
@@ -334,20 +318,12 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
if( mKeyboardFocus == focus )
{
mKeyboardFocus = NULL;
- #ifdef _DEBUG
- mKeyboardFocusName = std::string("none");
- #endif
}
}
void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
{
- //if (mFocusLocked)
- //{
- // return;
- //}
-
if( new_captor != mMouseCaptor )
{
LLMouseHandler* old_captor = mMouseCaptor;
@@ -370,24 +346,14 @@ void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
old_captor->onMouseCaptureLost();
}
- #ifdef _DEBUG
- mMouseCaptorName = new_captor ? new_captor->getName() : std::string("none");
- #endif
}
}
void LLFocusMgr::removeMouseCaptureWithoutCallback( const LLMouseHandler* captor )
{
- //if (mFocusLocked)
- //{
- // return;
- //}
if( mMouseCaptor == captor )
{
mMouseCaptor = NULL;
- #ifdef _DEBUG
- mMouseCaptorName = std::string("none");
- #endif
}
}
@@ -416,10 +382,6 @@ void LLFocusMgr::setTopCtrl( LLUICtrl* new_top )
{
mTopCtrl = new_top;
- #ifdef _DEBUG
- mTopCtrlName = new_top ? new_top->getName() : std::string("none");
- #endif
-
if (old_top)
{
old_top->onTopLost();
@@ -432,9 +394,6 @@ void LLFocusMgr::removeTopCtrlWithoutCallback( const LLUICtrl* top_view )
if( mTopCtrl == top_view )
{
mTopCtrl = NULL;
- #ifdef _DEBUG
- mTopCtrlName = std::string("none");
- #endif
}
}
@@ -478,9 +437,9 @@ void LLFocusMgr::setAppHasFocus(BOOL focus)
}
// release focus from "top ctrl"s, which generally hides them
- if (!focus && mTopCtrl)
+ if (!focus)
{
- setTopCtrl(NULL);
+ LLUI::clearPopups();
}
mAppHasFocus = focus;
}
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index 83ecd1d301..86d3ccf111 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -65,10 +65,10 @@ public:
virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
+ virtual void onTopLost(); // called when registered as top ctrl and user clicks elsewhere
protected:
virtual void onFocusReceived();
virtual void onFocusLost();
- virtual void onTopLost(); // called when registered as top ctrl and user clicks elsewhere
focus_signal_t* mFocusLostCallback;
focus_signal_t* mFocusReceivedCallback;
focus_signal_t* mFocusChangedCallback;
@@ -119,7 +119,7 @@ public:
BOOL childIsTopCtrl( const LLView* parent ) const;
// All Three
- void releaseFocusIfNeeded( const LLView* top_view );
+ void releaseFocusIfNeeded( LLView* top_view );
void lockFocus();
void unlockFocus();
BOOL focusLocked() const { return mLockedView != NULL; }
@@ -149,12 +149,6 @@ private:
typedef std::map<LLHandle<LLView>, LLHandle<LLView> > focus_history_map_t;
focus_history_map_t mFocusHistory;
-
- #ifdef _DEBUG
- std::string mMouseCaptorName;
- std::string mKeyboardFocusName;
- std::string mTopCtrlName;
- #endif
};
extern LLFocusMgr gFocusMgr;
diff --git a/indra/llui/llhandle.h b/indra/llui/llhandle.h
index 899f6b9326..8ade327044 100644
--- a/indra/llui/llhandle.h
+++ b/indra/llui/llhandle.h
@@ -67,6 +67,13 @@ public:
return *this;
}
+ template<typename Subclass>
+ LLHandle<T>& operator =(const LLHandle<Subclass>& other)
+ {
+ mTombStone = other.mTombStone;
+ return *this;
+ }
+
bool isDead() const
{
return mTombStone->getTarget() == NULL;
diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp
index 387af05935..6cff68c20b 100644
--- a/indra/llui/llmodaldialog.cpp
+++ b/indra/llui/llmodaldialog.cpp
@@ -111,7 +111,7 @@ void LLModalDialog::onOpen(const LLSD& key)
// This is a modal dialog. It sucks up all mouse and keyboard operations.
gFocusMgr.setMouseCapture( this );
- gFocusMgr.setTopCtrl( this );
+ LLUI::addPopup(this);
setFocus(TRUE);
sModalStack.push_front( this );
@@ -153,7 +153,7 @@ void LLModalDialog::setVisible( BOOL visible )
gFocusMgr.setMouseCapture( this );
// The dialog view is a root view
- gFocusMgr.setTopCtrl( this );
+ LLUI::addPopup(this);
setFocus( TRUE );
}
else
@@ -291,7 +291,7 @@ void LLModalDialog::onAppFocusGained()
// This is a modal dialog. It sucks up all mouse and keyboard operations.
gFocusMgr.setMouseCapture( instance );
instance->setFocus(TRUE);
- gFocusMgr.setTopCtrl( instance );
+ LLUI::addPopup(instance);
instance->centerOnScreen();
}
diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
index 3cc92baa8d..d17be8b94a 100644
--- a/indra/llui/llscrolllistcell.cpp
+++ b/indra/llui/llscrolllistcell.cpp
@@ -185,6 +185,8 @@ LLScrollListText::LLScrollListText(const LLScrollListCell::Params& p)
{
sCount++;
+ mTextWidth = getWidth();
+
// initialize rounded rect image
if (!mRoundedRectImage)
{
@@ -340,7 +342,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col
0,
LLFontGL::NO_SHADOW,
string_chars,
- getWidth(),
+ getTextWidth(),
&right_x,
TRUE);
}
diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h
index 5fecf5aade..b1c8901fc4 100644
--- a/indra/llui/llscrolllistcell.h
+++ b/indra/llui/llscrolllistcell.h
@@ -151,11 +151,16 @@ public:
/*virtual*/ const std::string & getToolTip() const;
/*virtual*/ BOOL needsToolTip() const;
+ S32 getTextWidth() const { return mTextWidth;}
+ void setTextWidth(S32 value) { mTextWidth = value;}
+ virtual void setWidth(S32 width) { LLScrollListCell::setWidth(width); mTextWidth = width; }
+
void setText(const LLStringExplicit& text);
void setFontStyle(const U8 font_style);
private:
LLUIString mText;
+ S32 mTextWidth;
const LLFontGL* mFont;
LLColor4 mColor;
U8 mUseColor;
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 77caaaa425..18ec5b51dd 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -630,7 +630,9 @@ void LLScrollListCtrl::calcColumnWidths()
LLScrollListCell* cellp = (*iter)->getColumn(column->mIndex);
if (!cellp) continue;
- column->mMaxContentWidth = llmax(LLFontGL::getFontSansSerifSmall()->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth);
+ // get text value width only for text cells
+ column->mMaxContentWidth = cellp->isText() ?
+ llmax(LLFontGL::getFontSansSerifSmall()->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth) : column->mMaxContentWidth;
}
max_item_width += column->mMaxContentWidth;
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index e819c5fdea..ebdc82115f 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -219,7 +219,10 @@ public:
void deselectAllItems(BOOL no_commit_on_change = FALSE); // by default, go ahead and commit on selection change
void clearHighlightedItems();
- void mouseOverHighlightNthItem( S32 index );
+
+ virtual void mouseOverHighlightNthItem( S32 index );
+
+ S32 getHighlightedItemInx() const { return mHighlightedItem; }
void setDoubleClickCallback( callback_t cb ) { mOnDoubleClickCallback = cb; }
void setMaximumSelectCallback( callback_t cb) { mOnMaximumSelectCallback = cb; }
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index 85ae13a889..30fc7babae 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -1649,7 +1649,7 @@ void LLTabContainer::reshapeTuple(LLTabTuple* tuple)
if(mCustomIconCtrlUsed)
{
LLCustomButtonIconCtrl* button = dynamic_cast<LLCustomButtonIconCtrl*>(tuple->mButton);
- LLIconCtrl* icon_ctrl = button->getIconCtrl();
+ LLIconCtrl* icon_ctrl = button ? button->getIconCtrl() : NULL;
image_overlay_width = icon_ctrl ? icon_ctrl->getRect().getWidth() : 0;
}
else
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index b348ec2d29..5121ef5351 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -86,6 +86,9 @@ std::list<std::string> gUntranslated;
/*static*/ LLHelp* LLUI::sHelpImpl = NULL;
/*static*/ std::vector<std::string> LLUI::sXUIPaths;
/*static*/ LLFrameTimer LLUI::sMouseIdleTimer;
+/*static*/ LLUI::add_popup_t LLUI::sAddPopupFunc;
+/*static*/ LLUI::remove_popup_t LLUI::sRemovePopupFunc;
+/*static*/ LLUI::clear_popups_t LLUI::sClearPopupsFunc;
// register filtereditor here
static LLDefaultChildRegistry::Register<LLFilterEditor> register_filter_editor("filter_editor");
@@ -1607,6 +1610,13 @@ void LLUI::cleanupClass()
sImageProvider->cleanUp();
}
+void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& remove_popup, const clear_popups_t& clear_popups)
+{
+ sAddPopupFunc = add_popup;
+ sRemovePopupFunc = remove_popup;
+ sClearPopupsFunc = clear_popups;
+}
+
//static
void LLUI::dirtyRect(LLRect rect)
{
@@ -1877,6 +1887,34 @@ LLControlGroup& LLUI::getControlControlGroup (const std::string& controlname)
return *sSettingGroups["config"]; // default group
}
+//static
+void LLUI::addPopup(LLView* viewp)
+{
+ if (sAddPopupFunc)
+ {
+ sAddPopupFunc(viewp);
+ }
+}
+
+//static
+void LLUI::removePopup(LLView* viewp)
+{
+ if (sRemovePopupFunc)
+ {
+ sRemovePopupFunc(viewp);
+ }
+}
+
+//static
+void LLUI::clearPopups()
+{
+ if (sClearPopupsFunc)
+ {
+ sClearPopupsFunc();
+ }
+}
+
+
//static
// spawn_x and spawn_y are top left corner of view in screen GL coordinates
void LLUI::positionViewNearMouse(LLView* view, S32 spawn_x, S32 spawn_y)
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index af8d4ea03b..30f3623ded 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -160,12 +160,17 @@ public:
// Methods
//
typedef std::map<std::string, LLControlGroup*> settings_map_t;
+ typedef boost::function<void(LLView*)> add_popup_t;
+ typedef boost::function<void(LLView*)> remove_popup_t;
+ typedef boost::function<void(void)> clear_popups_t;
+
static void initClass(const settings_map_t& settings,
LLImageProviderInterface* image_provider,
LLUIAudioCallback audio_callback = NULL,
const LLVector2 *scale_factor = NULL,
const std::string& language = LLStringUtil::null);
static void cleanupClass();
+ static void setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t&, const clear_popups_t& );
static void pushMatrix();
static void popMatrix();
@@ -208,6 +213,10 @@ public:
static void resetMouseIdleTimer() { sMouseIdleTimer.reset(); }
static LLWindow* getWindow() { return sWindow; }
+ static void addPopup(LLView*);
+ static void removePopup(LLView*);
+ static void clearPopups();
+
// Ensures view does not overlap mouse cursor, but is inside
// the view's parent rectangle. Used for tooltips, inspectors.
// Optionally override the view's default X/Y, which are relative to the
@@ -227,6 +236,9 @@ private:
static LLImageProviderInterface* sImageProvider;
static std::vector<std::string> sXUIPaths;
static LLFrameTimer sMouseIdleTimer;
+ static add_popup_t sAddPopupFunc;
+ static remove_popup_t sRemovePopupFunc;
+ static clear_popups_t sClearPopupsFunc;
};
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 20c939874b..35428e4227 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -34,6 +34,8 @@
#include "linden_common.h"
#include "llurlentry.h"
#include "lluri.h"
+#include "llurlmatch.h"
+#include "llurlregistry.h"
#include "llcachename.h"
#include "lltrans.h"
@@ -308,6 +310,7 @@ LLUrlEntryAgent::LLUrlEntryAgent()
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_agent.xml";
mIcon = "Generic_Person";
+ mTooltip = LLTrans::getString("TooltipAgentUrl");
mColor = LLUIColorTable::instance().getColor("AgentLinkColor");
}
@@ -602,6 +605,20 @@ std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const
return getUrlFromWikiLink(string);
}
+std::string LLUrlEntrySLLabel::getTooltip(const std::string &string) const
+{
+ // return a tooltip corresponding to the URL type instead of the generic one (EXT-4574)
+ std::string url = getUrl(string);
+ LLUrlMatch match;
+ if (LLUrlRegistry::instance().findUrl(url, match))
+ {
+ return match.getTooltip();
+ }
+
+ // unrecognized URL? should not happen
+ return LLUrlEntryBase::getTooltip(string);
+}
+
//
// LLUrlEntryWorldMap Describes secondlife:///<location> URLs
//
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 3abada0f24..c947ef7259 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -83,7 +83,7 @@ public:
LLUIColor getColor() const { return mColor; }
/// Given a matched Url, return a tooltip string for the hyperlink
- std::string getTooltip() const { return mTooltip; }
+ virtual std::string getTooltip(const std::string &string) const { return mTooltip; }
/// Return the name of a XUI file containing the context menu items
std::string getMenuName() const { return mMenuName; }
@@ -257,6 +257,7 @@ public:
LLUrlEntrySLLabel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getTooltip(const std::string &string) const;
};
///
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index 722dbe41b3..faa02e1904 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -174,7 +174,7 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
match.setValues(match_start, match_end,
match_entry->getUrl(url),
match_entry->getLabel(url, cb),
- match_entry->getTooltip(),
+ match_entry->getTooltip(url),
match_entry->getIcon(),
match_entry->getColor(),
match_entry->getMenuName(),
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 63e627ceb5..d34083a384 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -73,9 +73,9 @@ S32 LLView::sLastBottomXML = S32_MIN;
std::vector<LLViewDrawContext*> LLViewDrawContext::sDrawContextStack;
-#if LL_DEBUG
+//#if LL_DEBUG
BOOL LLView::sIsDrawing = FALSE;
-#endif
+//#endif
// Compiler optimization, generate extern template
template class LLView* LLView::getChild<class LLView>(
@@ -150,6 +150,10 @@ LLView::~LLView()
{
dirtyRect();
//llinfos << "Deleting view " << mName << ":" << (void*) this << llendl;
+ if (LLView::sIsDrawing)
+ {
+ llwarns << "Deleting view " << mName << " during UI draw() phase" << llendl;
+ }
// llassert(LLView::sIsDrawing == FALSE);
// llassert_always(sDepth == 0); // avoid deleting views while drawing! It can subtly break list iterators
@@ -592,11 +596,6 @@ void LLView::setVisible(BOOL visible)
{
if ( mVisible != visible )
{
- if( !visible && (gFocusMgr.getTopCtrl() == this) )
- {
- gFocusMgr.setTopCtrl( NULL );
- }
-
mVisible = visible;
// notify children of visibility change if root, or part of visible hierarchy
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index c4d7313743..efae00f0e5 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -171,9 +171,9 @@ private:
// widgets in general are not copyable
LLView(const LLView& other) {};
public:
-#if LL_DEBUG
+//#if LL_DEBUG
static BOOL sIsDrawing;
-#endif
+//#endif
enum ESoundFlags
{
SILENT = 0,
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
index 1c6c9e6e9d..b77deb003f 100644
--- a/indra/llwindow/llwindow.cpp
+++ b/indra/llwindow/llwindow.cpp
@@ -407,3 +407,30 @@ BOOL LLWindowManager::isWindowValid(LLWindow *window)
{
return sWindowList.find(window) != sWindowList.end();
}
+
+S32 LLDisplayInfo::getDisplayWidth() const
+{
+#if LL_WINDOWS
+ return LLWindowWin32::getDisplayWidth();
+#elif LL_DARWIN
+ return LLWindowMacOSX::getDisplayWidth();
+#elif LL_SDL
+ return LLWindowSDL::getDisplayWidth();
+#else
+ return 1024; //*FIXME
+#endif
+}
+
+S32 LLDisplayInfo::getDisplayHeight() const
+{
+#if LL_WINDOWS
+ return LLWindowWin32::getDisplayHeight();
+#elif LL_DARWIN
+ return LLWindowMacOSX::getDisplayHeight();
+#elif LL_SDL
+ return LLWindowSDL::getDisplayHeight();
+#else
+ return 768; //*FIXME
+#endif
+}
+
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index 55b221e716..b769f5071b 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -281,4 +281,19 @@ extern const std::string gURLProtocolWhitelistHandler[];
void simpleEscapeString ( std::string& stringIn );
+//=============================================================================
+//
+// CLASS LLDisplayInfo
+class LLDisplayInfo
+
+/*! @brief Class to query the information about some display settings
+*/
+{
+public:
+ LLDisplayInfo(){}; ///< Default constructor
+
+ S32 getDisplayWidth() const; ///< display width
+ S32 getDisplayHeight() const; ///< display height
+};
+
#endif // _LL_window_h_
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index ed5d7b1e74..ed8c874dcb 100644
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -40,4 +40,5 @@ void setupCocoa();
CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY);
OSErr releaseImageCursor(CursorRef ref);
OSErr setImageCursor(CursorRef ref);
-
+void getScreenSize(int* width, int* height);
+void getVisibleScreen(int *x, int *y, int* width, int* height);
diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm
index 59b25e1726..5cab2619fd 100644
--- a/indra/llwindow/llwindowmacosx-objc.mm
+++ b/indra/llwindow/llwindowmacosx-objc.mm
@@ -116,3 +116,22 @@ OSErr setImageCursor(CursorRef ref)
return noErr;
}
+void getScreenSize(int* width, int* height)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSRect screen_rect = [[NSScreen mainScreen] frame];
+ if (width) *width = (int)(screen_rect.size.width);
+ if (height) *height = (int)(screen_rect.size.height);
+ [pool release];
+}
+
+void getVisibleScreen(int *x, int *y, int* width, int* height)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSRect visible_rect = [[NSScreen mainScreen] visibleFrame];
+ if (width) *width = (int)(visible_rect.size.width);
+ if (height) *height = (int)(visible_rect.size.height);
+ if (x) *x = (int)(visible_rect.origin.x);
+ if (y) *y = (int)(visible_rect.origin.y);
+ [pool release];
+}
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index ad97bc45fc..924acaf148 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -1122,7 +1122,33 @@ BOOL LLWindowMacOSX::getMaximized()
BOOL LLWindowMacOSX::maximize()
{
- // TODO
+ if (mWindow)
+ {
+ // *HACK: Because Mac OSX doesn't have a concept of a "maximized" window, we just
+ // stretch it out to the visible screen size.
+ Rect win_rect;
+
+ int visible_x;
+ int visible_y;
+ int visible_width;
+ int visible_height;
+ int screen_width;
+ int screen_height;
+
+ getScreenSize(&screen_width, &screen_height);
+ getVisibleScreen(&visible_x, &visible_y, &visible_width, &visible_height);
+
+ int mac_os_menu_bar_height = screen_height - (visible_height + visible_y);
+ ::SetRect(&win_rect,
+ visible_x,
+ mac_os_menu_bar_height,
+ visible_width + visible_x,
+ visible_height + mac_os_menu_bar_height);
+
+ ::SetWindowBounds(mWindow, kWindowStructureRgn, &win_rect);
+
+ return TRUE;
+ }
return FALSE;
}
@@ -3464,6 +3490,26 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers)
return mask;
}
+// static
+S32 LLWindowMacOSX::getDisplayWidth()
+{
+ S32 width = 1024;
+ // Need to invoke cocoa before use getScreenSize()
+ setupCocoa();
+ getScreenSize(&width, NULL);
+ return width;
+}
+
+// static
+S32 LLWindowMacOSX::getDisplayHeight()
+{
+ S32 height = 768;
+ // Need to invoke cocoa before use getScreenSize()
+ setupCocoa();
+ getScreenSize(NULL, &height);
+ return height;
+}
+
#if LL_OS_DRAGDROP_ENABLED
OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow,
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 7c6b324029..86036a261c 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -123,6 +123,8 @@ public:
// Provide native key event data
/*virtual*/ LLSD getNativeKeyData();
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
protected:
LLWindowMacOSX(LLWindowCallbacks* callbacks,
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 1f705f9e60..cb4e04511c 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -187,6 +187,47 @@ Display* LLWindowSDL::get_SDL_Display(void)
}
#endif // LL_X11
+// static
+S32 LLWindowSDL::getDisplayWidth()
+{
+#if LL_GTK
+ if (LLWindowSDL::ll_try_gtk_init())
+ {
+ return gdk_screen_width();
+ }
+#endif // LL_GTK
+
+#if LL_X11
+ Display *display = XOpenDisplay(NULL);
+ int screen_num = DefaultScreen(display);
+ S32 width = DisplayWidth(display, screen_num);
+ XCloseDisplay(display);
+ return width;
+#endif //LL_X11
+
+ return 1024;
+}
+
+// static
+S32 LLWindowSDL::getDisplayHeight()
+{
+#if LL_GTK
+ if (LLWindowSDL::ll_try_gtk_init())
+ {
+ return gdk_screen_height();
+ }
+#endif // LL_GTK
+
+#if LL_X11
+ Display *display = XOpenDisplay(NULL);
+ int screen_num = DefaultScreen(display);
+ S32 height = DisplayHeight(display, screen_num);
+ XCloseDisplay(display);
+ return height;
+#endif //LL_X11
+
+ return 768;
+}
LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, S32 x, S32 y, S32 width,
@@ -909,7 +950,68 @@ BOOL LLWindowSDL::getMaximized()
if (mWindow)
{
- // TODO
+#if LL_X11
+ if (mSDL_Display)
+ {
+ maybe_lock_display();
+
+ // Return data in the specified format, XA_ATOM.
+ U8* prop;
+ // Actual format of the property.
+ int format;
+ // Actual number of items stored in the prop return data.
+ unsigned long nitems;
+ // Number of bytes remaining to be read in the property if a partial read was performed.
+ unsigned long bytes_after;
+ // Atom identifier that defines the actual type of the property.
+ Atom type;
+
+ // Atom used to obtain list of hints describing the window state.
+ Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False);
+
+ // Atoms indicates that the window is vertically/horizontally maximized.
+ Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
+ Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
+
+ // How many atoms in which we interested are present in list of hints.
+ U32 pass = 0;
+
+ do
+ {
+ nitems = 0;
+ bytes_after = 0;
+ type = None;
+ if ( (XGetWindowProperty (mSDL_Display,
+ mSDL_XWindowID,
+ wm_state,
+ 0, UINT_MAX,
+ False, XA_ATOM,
+ &type, &format,
+ &nitems, &bytes_after,
+ &prop) == Success)
+ && type != None )
+ {
+ Atom *atoms = (Atom *)prop;
+ for (unsigned long i=0; i<nitems; ++i)
+ {
+ if (atoms[i] == max_horz)
+ ++pass;
+ else if (atoms[i] == max_vert)
+ ++pass;
+ }
+ XFree (atoms);
+ }
+ else
+ {
+ break;
+ }
+ } while (bytes_after > 0);
+
+ result = (pass == 2);
+
+ maybe_unlock_display();
+ }
+#endif // LL_X11
}
return(result);
@@ -917,7 +1019,103 @@ BOOL LLWindowSDL::getMaximized()
BOOL LLWindowSDL::maximize()
{
- // TODO
+#if LL_X11
+ if (mSDL_Display && !mFullscreen)
+ {
+ maybe_lock_display();
+
+ BOOL is_maximize_allowed = FALSE;
+
+ // Check if maximize is allowed
+ {
+ // Return data in the specified format, XA_ATOM.
+ U8* prop;
+ // Actual format of the property.
+ int format;
+ // Actual number of items stored in the prop return data.
+ unsigned long nitems;
+ // Number of bytes remaining to be read in the property if a partial read was performed.
+ unsigned long bytes_after;
+ // Atom identifier that defines the actual type of the property.
+ Atom type;
+
+ // Atom used to obtain a list of atoms indicating user operations that the Window Manager supports for this window.
+ Atom allowed_act = XInternAtom(mSDL_Display, "_NET_WM_ALLOWED_ACTIONS", False);
+
+ // Atoms that indicates that the window may be vertically/horizontally maximized.
+ Atom max_vert_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_HORZ", False);
+ Atom max_horz_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_VERT", False);
+
+ // How many atoms in which we interested are present in list of hints.
+ U32 pass = 0;
+
+ do
+ {
+ nitems = 0;
+ bytes_after = 0;
+ type = None;
+ if ( (XGetWindowProperty (mSDL_Display,
+ mSDL_XWindowID,
+ allowed_act,
+ 0, UINT_MAX,
+ False, XA_ATOM,
+ &type, &format,
+ &nitems, &bytes_after,
+ &prop) == Success)
+ && type != None )
+ {
+ Atom *atoms = (Atom *)prop;
+ for (unsigned long i=0; i<nitems; ++i)
+ {
+ if (atoms[i] == max_vert_act)
+ ++pass;
+ else if (atoms[i] == max_horz_act)
+ ++pass;
+ }
+ XFree (atoms);
+ }
+ else
+ {
+ break;
+ }
+ } while (bytes_after > 0);
+
+ is_maximize_allowed = (pass == 2);
+ }
+
+ // Send maximize event to X11 system
+ if (is_maximize_allowed)
+ {
+ XEvent xev;
+
+ // Atom describing the window state.
+ Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False);
+
+ // Atoms indicates that the window is vertically/horizontally maximized.
+ Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
+ Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
+
+ memset(&xev, 0, sizeof(xev));
+ xev.type = ClientMessage;
+ xev.xclient.window = mSDL_XWindowID;
+ xev.xclient.message_type = wm_state;
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = 1; // add/set property
+ xev.xclient.data.l[1] = max_vert;
+ xev.xclient.data.l[2] = max_horz;
+ xev.xclient.data.l[3] = 0;
+ xev.xclient.data.l[4] = 0;
+
+ XSendEvent(mSDL_Display,
+ DefaultRootWindow(mSDL_Display),
+ False,
+ SubstructureNotifyMask, &xev);
+ }
+
+ maybe_unlock_display();
+ return is_maximize_allowed;
+ }
+#endif // LL_X11
return FALSE;
}
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index e6bdd46a77..2311a361fa 100644
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -148,6 +148,9 @@ public:
static Display* get_SDL_Display(void);
#endif // LL_X11
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
+
protected:
LLWindowSDL(LLWindowCallbacks* callbacks,
const std::string& title, int x, int y, int width, int height, U32 flags,
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index c80392ad45..4be5d06c2b 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -3714,5 +3714,16 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()
return std::vector<std::string>();
}
+// static
+S32 LLWindowWin32::getDisplayWidth()
+{
+ return ::GetSystemMetrics(SM_CXVIRTUALSCREEN);
+}
+
+// static
+S32 LLWindowWin32::getDisplayHeight()
+{
+ return ::GetSystemMetrics(SM_CYVIRTUALSCREEN);
+}
#endif // LL_WINDOWS
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 9d57735772..c221ec0192 100644
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -120,6 +120,9 @@ public:
static std::vector<std::string> getDynamicFallbackFontList();
+ static S32 getDisplayWidth();
+ static S32 getDisplayHeight();
+
protected:
LLWindowWin32(LLWindowCallbacks* callbacks,
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index c7aba04492..e66ac3049f 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -43,6 +43,13 @@
#include "llpluginmessageclasses.h"
#include "media_plugin_base.h"
+// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified
+#if LL_LINUX
+# define LL_QTWEBKIT_USES_PIXMAPS 1
+#else
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+#endif // LL_LINUX
+
#if LL_LINUX
# include "linux_volume_catcher.h"
#endif // LL_LINUX
@@ -142,7 +149,11 @@ private:
{
const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
- unsigned int buffer_size = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId ) * LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
+ unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId );
+ unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
+#if !LL_QTWEBKIT_USES_PIXMAPS
+ unsigned int buffer_size = rowspan * height;
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
// std::cerr << "webkit plugin: updating" << std::endl;
@@ -150,7 +161,16 @@ private:
if ( mPixels && browser_pixels )
{
// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl;
+
+#if LL_QTWEBKIT_USES_PIXMAPS
+ // copy the pixel data upside-down because of the co-ord system
+ for (int y=0; y<height; ++y)
+ {
+ memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
+ }
+#else
memcpy( mPixels, browser_pixels, buffer_size );
+#endif // LL_QTWEBKIT_USES_PIXMAPS
}
if ( mWidth > 0 && mHeight > 0 )
@@ -258,8 +278,10 @@ private:
// append details to agent string
LLQtWebKit::getInstance()->setBrowserAgentId( "LLPluginMedia Web Browser" );
+#if !LL_QTWEBKIT_USES_PIXMAPS
// don't flip bitmap
LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
// set background color
// convert background color channels from [0.0, 1.0] to [0, 255];
@@ -677,7 +699,11 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
message.setValueS32("default_height", 1024);
message.setValueS32("depth", mDepth);
message.setValueU32("internalformat", GL_RGBA);
+#if LL_QTWEBKIT_USES_PIXMAPS
+ message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck.
+#else
message.setValueU32("format", GL_RGBA);
+#endif // LL_QTWEBKIT_USES_PIXMAPS
message.setValueU32("type", GL_UNSIGNED_BYTE);
message.setValueBoolean("coords_opengl", true);
sendMessage(message);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 14eb75e457..8ad3b2085d 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -347,6 +347,7 @@ set(viewer_SOURCE_FILES
llpatchvertexarray.cpp
llplacesinventorybridge.cpp
llplacesinventorypanel.cpp
+ llpopupview.cpp
llpolymesh.cpp
llpolymorph.cpp
llpreview.cpp
@@ -844,6 +845,7 @@ set(viewer_HEADER_FILES
llplacesinventorypanel.h
llpolymesh.h
llpolymorph.h
+ llpopupview.h
llpreview.h
llpreviewanim.h
llpreviewgesture.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f87cdbc43e..8edf766132 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -4334,7 +4334,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>home</string>
+ <string>last</string>
</map>
<key>LoginPage</key>
<map>
@@ -5492,7 +5492,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>1.0</real>
+ <real>0.9</real>
</map>
<key>PlainTextChatHistory</key>
diff --git a/indra/newview/installers/windows/install_icon.ico b/indra/newview/installers/windows/install_icon.ico
index 1e00530c90..efe6c4f323 100644
--- a/indra/newview/installers/windows/install_icon.ico
+++ b/indra/newview/installers/windows/install_icon.ico
Binary files differ
diff --git a/indra/newview/installers/windows/uninstall_icon.ico b/indra/newview/installers/windows/uninstall_icon.ico
index c4ec6c70bd..05e1546860 100644
--- a/indra/newview/installers/windows/uninstall_icon.ico
+++ b/indra/newview/installers/windows/uninstall_icon.ico
Binary files differ
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index f84102e1fb..d2df968544 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -41,16 +41,8 @@
## driver bug, try enabling this option and report whether it helps:
#export LL_ATI_MOUSE_CURSOR_BUG=x
-## - If you experience crashes with streaming video and music, you can
-## disable these by enabling this option:
-#export LL_DISABLE_GSTREAMER=x
-
-## - GStreamer is automatically disabled - for now - on 64-bit systems due
-## to common fatal incompatibilities; remove/comment these lines if you want
-## to try anyway.
if [ "`uname -m`" = "x86_64" ]; then
- export LL_DISABLE_GSTREAMER=x
- echo '64-bit Linux detected: Disabling GStreamer (streaming video and music) by default; edit ./secondlife to re-enable.'
+ echo '64-bit Linux detected.'
fi
## Everything below this line is just for advanced troubleshooters.
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 1da7d450c9..c5d7f6f118 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -5845,15 +5845,22 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *
mesgsys->getUUIDFast(_PREHASH_WearableData, _PREHASH_TextureID, texture_id, texture_block);
mesgsys->getU8Fast(_PREHASH_WearableData, _PREHASH_TextureIndex, texture_index, texture_block);
- if (texture_id.notNull()
- && (S32)texture_index < BAKED_NUM_INDICES
+ if ((S32)texture_index < BAKED_NUM_INDICES
&& gAgentQueryManager.mActiveCacheQueries[texture_index] == query_id)
{
- //llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl;
- avatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id);
- //avatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id );
- gAgentQueryManager.mActiveCacheQueries[texture_index] = 0;
- num_results++;
+ if (texture_id.notNull())
+ {
+ //llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl;
+ avatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id);
+ //avatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id );
+ gAgentQueryManager.mActiveCacheQueries[texture_index] = 0;
+ num_results++;
+ }
+ else
+ {
+ // no cache of this bake. request upload.
+ avatarp->requestLayerSetUpload((EBakedTextureIndex)texture_index);
+ }
}
}
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 11ac103b3a..7b55282ee5 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -119,9 +119,9 @@ protected:
void importedFolderDone(void);
void contentsDone(void);
enum ELibraryOutfitFetchStep mCurrFetchStep;
- typedef std::vector< std::pair< LLUUID, std::string > > cloth_folder_vec_t;
- cloth_folder_vec_t mLibraryClothingFolders;
- cloth_folder_vec_t mImportedClothingFolders;
+ typedef std::vector<LLUUID> clothing_folder_vec_t;
+ clothing_folder_vec_t mLibraryClothingFolders;
+ clothing_folder_vec_t mImportedClothingFolders;
bool mOutfitsPopulated;
LLUUID mClothingID;
LLUUID mLibraryClothingID;
@@ -2240,7 +2240,7 @@ void LLAgentWearables::updateServer()
void LLAgentWearables::populateMyOutfitsFolder(void)
{
- llinfos << "starting outfit populate" << llendl;
+ llinfos << "starting outfit population" << llendl;
LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch();
@@ -2312,17 +2312,28 @@ void LLLibraryOutfitsFetch::folderDone(void)
LLInventoryModel::item_array_t wearable_array;
gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,
LLInventoryModel::EXCLUDE_TRASH);
-
// Early out if we already have items in My Outfits.
if (cat_array.count() > 0 || wearable_array.count() > 0)
{
mOutfitsPopulated = true;
return;
}
-
+
mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING);
mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true);
-
+
+ // If Library->Clothing->Initial Outfits exists, use that.
+ LLNameCategoryCollector matchFolderFunctor("Initial Outfits");
+ gInventory.collectDescendentsIf(mLibraryClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.count() > 0)
+ {
+ const LLViewerInventoryCategory *cat = cat_array.get(0);
+ mLibraryClothingID = cat->getUUID();
+ }
+
mCompleteFolders.clear();
// Get the complete information on the items in the inventory.
@@ -2353,31 +2364,28 @@ void LLLibraryOutfitsFetch::outfitsDone(void)
{
const LLViewerInventoryCategory *cat = iter->get();
- // Get the names and id's of every outfit in the library, except for ruth and other "misc" outfits.
- if (cat->getName() != "More Outfits" && cat->getName() != "Ruth")
+ // Get the names and id's of every outfit in the library, skip "Ruth"
+ // because it's a low quality legacy outfit
+ if (cat->getName() != "Ruth")
{
// Get the name of every outfit in the library
folders.push_back(cat->getUUID());
- mLibraryClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
+ mLibraryClothingFolders.push_back(cat->getUUID());
}
}
-
- // Collect the contents of your Inventory Clothing folder
cat_array.clear();
wearable_array.clear();
- gInventory.collectDescendents(mClothingID, cat_array, wearable_array,
- LLInventoryModel::EXCLUDE_TRASH);
// Check if you already have an "Imported Library Clothing" folder
- for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
- iter != cat_array.end();
- ++iter)
+ LLNameCategoryCollector matchFolderFunctor(mImportedClothingName);
+ gInventory.collectDescendentsIf(mClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.size() > 0)
{
- const LLViewerInventoryCategory *cat = iter->get();
- if (cat->getName() == mImportedClothingName)
- {
- mImportedClothingID = cat->getUUID();
- }
+ const LLViewerInventoryCategory *cat = cat_array.get(0);
+ mImportedClothingID = cat->getUUID();
}
mCompleteFolders.clear();
@@ -2415,31 +2423,59 @@ private:
LLLibraryOutfitsFetch * mLibraryOutfitsFetcher;
};
+// Copy the clothing folders from the library into the imported clothing folder
void LLLibraryOutfitsFetch::libraryDone(void)
{
- // Copy the clothing folders from the library into the imported clothing folder if necessary.
- if (mImportedClothingID == LLUUID::null)
+ if (mImportedClothingID != LLUUID::null)
{
- gInventory.removeObserver(this);
- LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this);
- mImportedClothingID = gInventory.createNewCategory(mClothingID,
- LLFolderType::FT_NONE,
- mImportedClothingName);
+ // Skip straight to fetching the contents of the imported folder
+ importedFolderFetch();
+ return;
+ }
+
+ // Remove observer; next autopopulation step will be triggered externally by LLLibraryOutfitsCopyDone.
+ gInventory.removeObserver(this);
+
+ LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this);
+ mImportedClothingID = gInventory.createNewCategory(mClothingID,
+ LLFolderType::FT_NONE,
+ mImportedClothingName);
+ // Copy each folder from library into clothing unless it already exists.
+ for (clothing_folder_vec_t::const_iterator iter = mLibraryClothingFolders.begin();
+ iter != mLibraryClothingFolders.end();
+ ++iter)
+ {
+ const LLUUID& src_folder_id = (*iter); // Library clothing folder ID
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(src_folder_id);
+ if (!cat)
+ {
+ llwarns << "Library folder import for uuid:" << src_folder_id << " failed to find folder." << llendl;
+ continue;
+ }
- for (cloth_folder_vec_t::const_iterator iter = mLibraryClothingFolders.begin();
- iter != mLibraryClothingFolders.end();
- ++iter)
+ if (!LLAppearanceManager::getInstance()->getCanMakeFolderIntoOutfit(src_folder_id))
{
- LLUUID folder_id = gInventory.createNewCategory(mImportedClothingID,
- LLFolderType::FT_NONE,
- iter->second);
- LLAppearanceManager::getInstance()->shallowCopyCategoryContents(iter->first, folder_id, copy_waiter);
+ llinfos << "Skipping non-outfit folder name:" << cat->getName() << llendl;
+ continue;
}
- }
- else
- {
- // Skip straight to fetching the contents of the imported folder
- importedFolderFetch();
+
+ // Don't copy the category if it already exists.
+ LLNameCategoryCollector matchFolderFunctor(cat->getName());
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t wearable_array;
+ gInventory.collectDescendentsIf(mImportedClothingID,
+ cat_array, wearable_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ matchFolderFunctor);
+ if (cat_array.size() > 0)
+ {
+ continue;
+ }
+
+ LLUUID dst_folder_id = gInventory.createNewCategory(mImportedClothingID,
+ LLFolderType::FT_NONE,
+ cat->getName());
+ LLAppearanceManager::getInstance()->shallowCopyCategoryContents(src_folder_id, dst_folder_id, copy_waiter);
}
}
@@ -2476,7 +2512,7 @@ void LLLibraryOutfitsFetch::importedFolderDone(void)
// Get the name of every imported outfit
folders.push_back(cat->getUUID());
- mImportedClothingFolders.push_back(std::make_pair(cat->getUUID(), cat->getName()));
+ mImportedClothingFolders.push_back(cat->getUUID());
}
mCompleteFolders.clear();
@@ -2492,17 +2528,25 @@ void LLLibraryOutfitsFetch::contentsDone(void)
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t wearable_array;
- for (cloth_folder_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin();
+ for (clothing_folder_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin();
folder_iter != mImportedClothingFolders.end();
++folder_iter)
{
+ const LLUUID &folder_id = (*folder_iter);
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
+ if (!cat)
+ {
+ llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl;
+ continue;
+ }
+
// First, make a folder in the My Outfits directory.
- LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, folder_iter->second);
+ LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName());
cat_array.clear();
wearable_array.clear();
// Collect the contents of each imported clothing folder, so we can create new outfit links for it
- gInventory.collectDescendents(folder_iter->first, cat_array, wearable_array,
+ gInventory.collectDescendents(folder_id, cat_array, wearable_array,
LLInventoryModel::EXCLUDE_TRASH);
for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin();
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 71df064236..f686eccf37 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -494,11 +494,12 @@ bool LLWearableHoldingPattern::pollFetchCompletion()
bool completed = isFetchCompleted();
bool timed_out = isTimedOut();
bool done = completed || timed_out;
-
- llinfos << "polling, done status: " << completed << " timed out " << timed_out << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
if (done)
{
+ llinfos << "polling, done status: " << completed << " timed out " << timed_out
+ << " elapsed " << mWaitTime.getElapsedTimeF32() << llendl;
+
mFired = true;
if (timed_out)
@@ -528,22 +529,29 @@ public:
LLViewerInventoryItem *item = gInventory.getItem(item_id);
LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
- gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
-
- if (item && linked_item)
+ if (linked_item)
{
- LLFoundData found(linked_item->getUUID(),
- linked_item->getAssetUUID(),
- linked_item->getName(),
- linked_item->getType(),
- linked_item->isWearableType() ? linked_item->getWearableType() : WT_INVALID
- );
- found.mWearable = mWearable;
- mHolder->mFoundList.push_front(found);
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
+
+ if (item)
+ {
+ LLFoundData found(linked_item->getUUID(),
+ linked_item->getAssetUUID(),
+ linked_item->getName(),
+ linked_item->getType(),
+ linked_item->isWearableType() ? linked_item->getWearableType() : WT_INVALID
+ );
+ found.mWearable = mWearable;
+ mHolder->mFoundList.push_front(found);
+ }
+ else
+ {
+ llwarns << "inventory item not found for recovered wearable" << llendl;
+ }
}
else
{
- llwarns << "inventory item or link not found for recovered wearable" << llendl;
+ llwarns << "inventory link not found for recovered wearable" << llendl;
}
}
private:
@@ -568,12 +576,16 @@ public:
mWearable->setItemID(item_id);
LLPointer<LLInventoryCallback> cb = new RecoveredItemLinkCB(mType,mWearable,mHolder);
mHolder->mTypesToRecover.erase(mType);
- link_inventory_item( gAgent.getID(),
- item_id,
- LLAppearanceManager::instance().getCOF(),
- itemp->getName(),
- LLAssetType::AT_LINK,
- cb);
+ llassert(itemp);
+ if (itemp)
+ {
+ link_inventory_item( gAgent.getID(),
+ item_id,
+ LLAppearanceManager::instance().getCOF(),
+ itemp->getName(),
+ LLAssetType::AT_LINK,
+ cb);
+ }
}
private:
LLWearableHoldingPattern* mHolder;
@@ -796,47 +808,91 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
void LLAppearanceManager::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb)
{
- LLInventoryModel::cat_array_t cats;
- LLInventoryModel::item_array_t items;
- gInventory.collectDescendents(src_id, cats, items,
- LLInventoryModel::EXCLUDE_TRASH);
- for (S32 i = 0; i < items.count(); ++i)
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(src_id, cats, items);
+ for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
+ iter != items->end();
+ ++iter)
{
- const LLViewerInventoryItem* item = items.get(i).get();
- if (item->getActualType() == LLAssetType::AT_LINK)
+ const LLViewerInventoryItem* item = (*iter);
+ switch (item->getActualType())
{
- link_inventory_item(gAgent.getID(),
- item->getLinkedUUID(),
- dst_id,
- item->getName(),
- LLAssetType::AT_LINK, cb);
- }
- else if (item->getActualType() == LLAssetType::AT_LINK_FOLDER)
- {
- LLViewerInventoryCategory *catp = item->getLinkedCategory();
- // Skip copying outfit links.
- if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
+ case LLAssetType::AT_LINK:
{
link_inventory_item(gAgent.getID(),
item->getLinkedUUID(),
dst_id,
item->getName(),
- LLAssetType::AT_LINK_FOLDER, cb);
+ LLAssetType::AT_LINK, cb);
+ break;
+ }
+ case LLAssetType::AT_LINK_FOLDER:
+ {
+ LLViewerInventoryCategory *catp = item->getLinkedCategory();
+ // Skip copying outfit links.
+ if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT)
+ {
+ link_inventory_item(gAgent.getID(),
+ item->getLinkedUUID(),
+ dst_id,
+ item->getName(),
+ LLAssetType::AT_LINK_FOLDER, cb);
+ }
+ break;
}
+ case LLAssetType::AT_CLOTHING:
+ case LLAssetType::AT_OBJECT:
+ case LLAssetType::AT_BODYPART:
+ case LLAssetType::AT_GESTURE:
+ {
+ copy_inventory_item(gAgent.getID(),
+ item->getPermissions().getOwner(),
+ item->getUUID(),
+ dst_id,
+ item->getName(),
+ cb);
+ break;
+ }
+ default:
+ // Ignore non-outfit asset types
+ break;
}
- else
+ }
+}
+
+BOOL LLAppearanceManager::getCanMakeFolderIntoOutfit(const LLUUID& folder_id)
+{
+ // These are the wearable items that are required for considering this
+ // folder as containing a complete outfit.
+ U32 required_wearables = 0;
+ required_wearables |= 1LL << WT_SHAPE;
+ required_wearables |= 1LL << WT_SKIN;
+ required_wearables |= 1LL << WT_HAIR;
+ required_wearables |= 1LL << WT_EYES;
+
+ // These are the wearables that the folder actually contains.
+ U32 folder_wearables = 0;
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(folder_id, cats, items);
+ for (LLInventoryModel::item_array_t::const_iterator iter = items->begin();
+ iter != items->end();
+ ++iter)
+ {
+ const LLViewerInventoryItem* item = (*iter);
+ if (item->isWearableType())
{
- copy_inventory_item(
- gAgent.getID(),
- item->getPermissions().getOwner(),
- item->getUUID(),
- dst_id,
- item->getName(),
- cb);
+ const EWearableType wearable_type = item->getWearableType();
+ folder_wearables |= 1LL << wearable_type;
}
}
+
+ // If the folder contains the required wearables, return TRUE.
+ return ((required_wearables & folder_wearables) == required_wearables);
}
+
void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category)
{
LLInventoryModel::cat_array_t cats;
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index e7e2f33520..9d6cd34ad7 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -60,6 +60,9 @@ public:
void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb);
+ // Return whether this folder contains minimal contents suitable for making a full outfit.
+ BOOL getCanMakeFolderIntoOutfit(const LLUUID& folder_id);
+
// Copy all items in a category.
void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,
LLPointer<LLInventoryCallback> cb);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 948d38befb..bdfe0d9142 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -304,7 +304,8 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
-
+static const S32 FIRST_RUN_WINDOW_WIDTH = 1024;
+static const S32 FIRST_RUN_WINDOW_HIGHT = 768;
//----------------------------------------------------------------------------
// List of entries from strings.xml to always replace
@@ -702,9 +703,9 @@ bool LLAppViewer::init()
settings_map["account"] = &gSavedPerAccountSettings;
LLUI::initClass(settings_map,
- LLUIImageList::getInstance(),
- ui_audio_callback,
- &LLUI::sGLScaleFactor);
+ LLUIImageList::getInstance(),
+ ui_audio_callback,
+ &LLUI::sGLScaleFactor);
// Setup paths and LLTrans after LLUI::initClass has been called
LLUI::setupPaths();
@@ -1515,7 +1516,7 @@ bool LLAppViewer::cleanup()
LLAvatarIconIDCache::getInstance()->save();
llinfos << "Shutting down Threads" << llendflush;
-
+
// Let threads finish
LLTimer idleTimer;
idleTimer.reset();
@@ -1529,19 +1530,26 @@ bool LLAppViewer::cleanup()
pending += LLVFSThread::updateClass(0);
pending += LLLFSThread::updateClass(0);
F64 idle_time = idleTimer.getElapsedTimeF64();
- if (!pending || idle_time >= max_idle_time)
+ if(!pending)
+ {
+ break ; //done
+ }
+ else if(idle_time >= max_idle_time)
{
llwarns << "Quitting with pending background tasks." << llendl;
break;
}
}
-
+
// Delete workers first
// shotdown all worker threads before deleting them in case of co-dependencies
sTextureCache->shutdown();
sTextureFetch->shutdown();
sImageDecodeThread->shutdown();
+ sTextureFetch->shutDownTextureCacheThread() ;
+ sTextureFetch->shutDownImageDecodeThread() ;
+
delete sTextureCache;
sTextureCache = NULL;
delete sTextureFetch;
@@ -2362,12 +2370,35 @@ bool LLAppViewer::initWindow()
// store setting in a global for easy access and modification
gNoRender = gSavedSettings.getBOOL("DisableRendering");
+ S32 window_x = gSavedSettings.getS32("WindowX");
+ S32 window_y = gSavedSettings.getS32("WindowY");
+ S32 window_width = gSavedSettings.getS32("WindowWidth");
+ S32 window_height = gSavedSettings.getS32("WindowHeight");
+
+ bool show_maximized = gSavedSettings.getBOOL("WindowMaximized");
+
+ bool first_run = gSavedSettings.getBOOL("FirstLoginThisInstall");
+
+ if (first_run)//for first login
+ {
+ window_width = FIRST_RUN_WINDOW_WIDTH;//yep hardcoded
+ window_height = FIRST_RUN_WINDOW_HIGHT;
+
+ //if screen resolution is lower then 1024*768 then show maximized
+ LLDisplayInfo display_info;
+ if(display_info.getDisplayWidth() <= FIRST_RUN_WINDOW_WIDTH
+ || display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HIGHT)
+ {
+ show_maximized = true;
+ }
+ }
+
// always start windowed
BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
gViewerWindow = new LLViewerWindow(gWindowTitle,
VIEWER_WINDOW_CLASSNAME,
- gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"),
- gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"),
+ window_x, window_y,
+ window_width, window_height,
FALSE, ignorePixelDepth);
LLNotificationsUI::LLNotificationManager::getInstance();
@@ -2378,7 +2409,7 @@ bool LLAppViewer::initWindow()
gViewerWindow->toggleFullscreen(FALSE);
}
- if (gSavedSettings.getBOOL("WindowMaximized"))
+ if (show_maximized)
{
gViewerWindow->mWindow->maximize();
gViewerWindow->getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio"));
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index f8f8f50cd6..80d9b14345 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -392,7 +392,12 @@ void LLAppViewerMacOSX::handleCrashReporting(bool reportFreeze)
_exit(1);
}
- // TODO:palmer REMOVE THIS VERY SOON. THIS WILL NOT BE IN VIEWER 2.0
+ // TODO from palmer: Find a better way to handle managing old crash logs
+ // when this is a separate imbedable module. Ideally just sort crash stack
+ // logs based on date, and grab the latest one as opposed to deleting them
+ // for thoughts on what the module would look like.
+ // See: https://wiki.lindenlab.com/wiki/Viewer_Crash_Reporter_Round_4
+
// Remove the crash stack log from previous executions.
// Since we've started logging a new instance of the app, we can assume
// The old crash stack is invalid for the next crash report.
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 50d8672083..45c540b3a3 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -183,6 +183,15 @@ void LLAvatarList::sortByName()
sort();
}
+void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)
+{
+ mDirty = val;
+ if(mDirty && force_refresh)
+ {
+ refresh();
+ }
+}
+
//////////////////////////////////////////////////////////////////////////
// PROTECTED SECTION
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 0e4215e91a..00c72f1f9d 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -73,7 +73,7 @@ public:
virtual void clear();
void setNameFilter(const std::string& filter);
- void setDirty(bool val = true) { mDirty = val; }
+ void setDirty(bool val = true, bool force_refresh = false);
uuid_vector_t& getIDs() { return mIDs; }
bool contains(const LLUUID& id);
diff --git a/indra/newview/llclassifiedstatsresponder.cpp b/indra/newview/llclassifiedstatsresponder.cpp
index ecd1879090..95f17aa7ba 100644
--- a/indra/newview/llclassifiedstatsresponder.cpp
+++ b/indra/newview/llclassifiedstatsresponder.cpp
@@ -43,11 +43,12 @@
#include "llview.h"
#include "message.h"
-LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLHandle<LLView> classified_panel_handle, LLUUID classified_id)
-: mClassifiedPanelHandle(classified_panel_handle),
+LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLUUID classified_id)
+:
mClassifiedID(classified_id)
{
}
+
/*virtual*/
void LLClassifiedStatsResponder::result(const LLSD& content)
{
@@ -58,17 +59,12 @@ void LLClassifiedStatsResponder::result(const LLSD& content)
S32 search_map = content["search_map_clicks"].asInteger();
S32 search_profile = content["search_profile_clicks"].asInteger();
- LLPanelClassified* classified_panelp = (LLPanelClassified*)mClassifiedPanelHandle.get();
-
- if(classified_panelp)
- {
- classified_panelp->setClickThrough(mClassifiedID,
- teleport + search_teleport,
- map + search_map,
- profile + search_profile,
- true);
- }
-
+ LLPanelClassifiedInfo::setClickThrough(
+ mClassifiedID,
+ teleport + search_teleport,
+ map + search_map,
+ profile + search_profile,
+ true);
}
/*virtual*/
@@ -77,5 +73,3 @@ void LLClassifiedStatsResponder::error(U32 status, const std::string& reason)
llinfos << "LLClassifiedStatsResponder::error("
<< status << ": " << reason << ")" << llendl;
}
-
-
diff --git a/indra/newview/llclassifiedstatsresponder.h b/indra/newview/llclassifiedstatsresponder.h
index 9c52ed5ae1..4a74f7b129 100644
--- a/indra/newview/llclassifiedstatsresponder.h
+++ b/indra/newview/llclassifiedstatsresponder.h
@@ -40,7 +40,7 @@
class LLClassifiedStatsResponder : public LLHTTPClient::Responder
{
public:
- LLClassifiedStatsResponder(LLHandle<LLView> classified_panel_handle, LLUUID classified_id);
+ LLClassifiedStatsResponder(LLUUID classified_id);
//If we get back a normal response, handle it here
virtual void result(const LLSD& content);
//If we get back an error (not found, etc...), handle it here
@@ -48,7 +48,6 @@ public:
virtual void error(U32 status, const std::string& reason);
protected:
- LLHandle<LLView> mClassifiedPanelHandle;
LLUUID mClassifiedID;
};
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index 169a963d0d..f113cc49d4 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -81,11 +81,13 @@ void LLDebugView::init()
r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f),
(S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
+
mFastTimerView = new LLFastTimerView(r);
mFastTimerView->setFollowsTop();
mFastTimerView->setFollowsLeft();
mFastTimerView->setVisible(FALSE); // start invisible
addChild(mFastTimerView);
+ mFastTimerView->setRect(rect);
r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f),
(S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f));
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 3818ee6f78..362010d65a 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -35,6 +35,7 @@
#include "llscrollcontainer.h"
#include "llwindow.h"
+#include "llviewerwindow.h"
static LLDefaultChildRegistry::Register<LLExpandableTextBox> t1("expandable_text");
@@ -382,7 +383,7 @@ void LLExpandableTextBox::expandTextBox()
setFocus(TRUE);
// this lets us receive top_lost event(needed to collapse text box)
// it also draws text box above all other ui elements
- gFocusMgr.setTopCtrl(this);
+ gViewerWindow->addPopup(this);
mExpanded = true;
}
@@ -401,10 +402,7 @@ void LLExpandableTextBox::collapseTextBox()
updateTextBoxRect();
- if(gFocusMgr.getTopCtrl() == this)
- {
- gFocusMgr.setTopCtrl(NULL);
- }
+ gViewerWindow->removePopup(this);
}
void LLExpandableTextBox::onFocusLost()
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index 58316ddb98..9d4a8aef76 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -144,6 +144,7 @@ public:
*/
/*virtual*/ void onTopLost();
+
/**
* Draws text box, collapses text box if its expanded and its parent's position changed
*/
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 4fa97e789b..8bc3b5a75f 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -44,6 +44,7 @@
#include "llfontgl.h"
#include "llsdserialize.h"
#include "lltooltip.h"
+#include "llbutton.h"
#include "llappviewer.h"
#include "llviewertexturelist.h"
@@ -99,6 +100,8 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect)
FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount();
mPrintStats = -1;
mAverageCyclesPerTimer = 0;
+ setCanMinimize(false);
+ setCanClose(true);
}
@@ -139,6 +142,18 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y)
BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
{
+
+ {
+ S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft;
+ S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom;
+ if(mButtons[BUTTON_CLOSE]->getVisible()
+ && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) )
+ {
+ return LLFloater::handleMouseDown(x, y, mask);;
+ }
+ }
+
+
if (x < mBarRect.mLeft)
{
LLFastTimer::NamedTimer* idp = getLegendID(y);
@@ -188,6 +203,15 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask)
{
+ {
+ S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft;
+ S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom;
+ if(mButtons[BUTTON_CLOSE]->getVisible()
+ && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) )
+ {
+ return LLFloater::handleMouseUp(x, y, mask);;
+ }
+ }
return FALSE;
}
@@ -1191,5 +1215,8 @@ void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std::
return ;
}
}
-
+void LLFastTimerView::onClickCloseBtn()
+{
+ setVisible(false);
+}
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index f5c8f23818..ac06990913 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -63,7 +63,9 @@ public:
LLFastTimer::NamedTimer* getLegendID(S32 y);
F64 getTime(const std::string& name);
-
+
+protected:
+ virtual void onClickCloseBtn();
private:
typedef std::vector<std::vector<S32> > bar_positions_t;
bar_positions_t mBarStart;
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 26c6db9652..26a179074d 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -86,6 +86,7 @@
static std::string OWNER_ONLINE = "0";
static std::string OWNER_OFFLINE = "1";
static std::string OWNER_GROUP = "2";
+static std::string MATURITY = "[MATURITY]";
// constants used in callbacks below - syntactic sugar.
static const BOOL BUY_GROUP_LAND = TRUE;
@@ -102,6 +103,22 @@ public:
virtual void changed() { LLFloaterLand::refreshAll(); }
};
+// class needed to get full access to textbox inside checkbox, because LLCheckBoxCtrl::setLabel() has string as its argument.
+// It was introduced while implementing EXT-4706
+class LLCheckBoxWithTBAcess : public LLCheckBoxCtrl
+{
+public:
+ LLTextBox* getTextBox()
+ {
+ return mLabel;
+ }
+};
+
+// inserts maturity info(icon and text) into target textbox
+// names_floater - pointer to floater which contains strings with maturity icons filenames
+// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
+void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse);
+
//---------------------------------------------------------------------------
// LLFloaterLand
//---------------------------------------------------------------------------
@@ -554,7 +571,7 @@ void LLPanelLandGeneral::refresh()
if (regionp)
{
- mContentRating->setText(regionp->getSimAccessString());
+ insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
mLandType->setText(regionp->getSimProductName());
}
@@ -2058,8 +2075,14 @@ 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"));
+ LLStyle::Params style;
+ style.image(LLUI::getUIImage(gFloaterView->getParentFloater(this)->getString("maturity_icon_moderate")));
+ LLCheckBoxWithTBAcess* fullaccess_mature_ctrl = (LLCheckBoxWithTBAcess*)mMatureCtrl;
+ fullaccess_mature_ctrl->getTextBox()->setText(std::string("icon"),style);
+ fullaccess_mature_ctrl->getTextBox()->appendText(getString("mature_check_mature"), false);
+ fullaccess_mature_ctrl->setToolTip(getString("mature_check_mature_tooltip"));
+ fullaccess_mature_ctrl->reshape(fullaccess_mature_ctrl->getRect().getWidth(), fullaccess_mature_ctrl->getRect().getHeight(), FALSE);
+
// they can see the checkbox, but its disposition depends on the
// state of the region
LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
@@ -2460,19 +2483,26 @@ void LLPanelLandAccess::refresh()
}
}
+ LLCheckBoxWithTBAcess* maturity_checkbox = (LLCheckBoxWithTBAcess*) getChild<LLCheckBoxCtrl>( "public_access");
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(region)
{
- std::string region_access = "(";
- region_access += region->getSimAccessString();
- region_access += ")";
- childSetLabelArg( "public_access", "[MATURITY]", region_access );
+ LLTextBox* maturity_textbox = maturity_checkbox->getTextBox();
+ insert_maturity_into_textbox(maturity_textbox, gFloaterView->getParentFloater(this), getString("allow_public_access"));
+ maturity_checkbox->reshape(maturity_checkbox->getRect().getWidth(), maturity_checkbox->getRect().getHeight(), FALSE);
}
else
{
- childSetLabelArg( "public_access", "[MATURITY]", std::string() );
- }
+ std::string maturity_string = getString("allow_public_access");
+ size_t maturity_pos = maturity_string.find(MATURITY);
+ if (maturity_pos != std::string::npos)
+ {
+ maturity_string.replace(maturity_pos, MATURITY.length(), std::string(""));
+ }
+
+ maturity_checkbox->setLabel(maturity_string);
+ }
if(parcel->getRegionDenyAnonymousOverride())
{
@@ -2858,7 +2888,7 @@ void LLPanelLandCovenant::refresh()
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
if (region_maturity)
{
- region_maturity->setText(region->getSimAccessString());
+ insert_maturity_into_textbox(region_maturity, gFloaterView->getParentFloater(this), MATURITY);
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@@ -2939,3 +2969,51 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name)
if (editor) editor->setText(name);
}
}
+
+// inserts maturity info(icon and text) into target textbox
+// names_floater - pointer to floater which contains strings with maturity icons filenames
+// str_to_parse is string in format "txt1[MATURITY]txt2" where maturity icon and text will be inserted instead of [MATURITY]
+void insert_maturity_into_textbox(LLTextBox* target_textbox, LLFloater* names_floater, std::string str_to_parse)
+{
+ LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ if (!region)
+ return;
+
+ LLStyle::Params style;
+
+ U8 sim_access = region->getSimAccess();
+
+ switch(sim_access)
+ {
+ case SIM_ACCESS_PG:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_general")));
+ break;
+
+ case SIM_ACCESS_ADULT:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_adult")));
+ break;
+
+ case SIM_ACCESS_MATURE:
+ style.image(LLUI::getUIImage(names_floater->getString("maturity_icon_moderate")));
+ break;
+
+ default:
+ break;
+ }
+
+ size_t maturity_pos = str_to_parse.find(MATURITY);
+
+ if (maturity_pos == std::string::npos)
+ {
+ return;
+ }
+
+ std::string text_before_rating = str_to_parse.substr(0, maturity_pos);
+ std::string text_after_rating = str_to_parse.substr(maturity_pos + MATURITY.length());
+
+ target_textbox->setText(text_before_rating);
+ // any text may be here instead of "icon" except ""
+ target_textbox->appendText(std::string("icon"), false, style);
+ target_textbox->appendText(LLViewerParcelMgr::getInstance()->getSelectionRegion()->getSimAccessString(), false);
+ target_textbox->appendText(text_after_rating, false);
+}
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index 62ec17f89a..ee68faf84b 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -242,6 +242,12 @@ void LLFloaterMediaSettings::onBtnApply( void* userdata )
sInstance->commitFields();
sInstance->apply();
+
+ sInstance->mInitialValues.clear();
+ sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
+ sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
+
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 780393a9c0..8bffe9bf57 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -537,10 +537,10 @@ void LLFloaterPreference::onOpen(const LLSD& key)
{
childSetText("maturity_desired_textbox", maturity_combo->getSelectedItemLabel());
childSetVisible("maturity_desired_combobox", false);
-
- // Display selected maturity icons.
- onChangeMaturity();
}
+
+ // Display selected maturity icons.
+ onChangeMaturity();
// Enabled/disabled popups, might have been changed by user actions
// while preferences floater was closed.
@@ -985,7 +985,8 @@ void LLFloaterPreference::cleanupBadSetting()
if (gSavedPerAccountSettings.getString("BusyModeResponse2") == "|TOKEN COPY BusyModeResponse|")
{
llwarns << "cleaning old BusyModeResponse" << llendl;
- gSavedPerAccountSettings.setString("BusyModeResponse2", gSavedPerAccountSettings.getText("BusyModeResponse"));
+ //LLTrans::getString("BusyModeResponseDefault") is used here for localization (EXT-5885)
+ gSavedPerAccountSettings.setString("BusyModeResponse2", LLTrans::getString("BusyModeResponseDefault"));
}
}
@@ -1288,7 +1289,7 @@ BOOL LLPanelPreference::postBuild()
if (hasChild("media_enabled"))
{
bool media_enabled = gSavedSettings.getBOOL("AudioStreamingMedia");
- getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
+
getChild<LLCheckBoxCtrl>("media_enabled")->set(media_enabled);
getChild<LLCheckBoxCtrl>("autoplay_enabled")->setEnabled(media_enabled);
}
@@ -1296,7 +1297,11 @@ BOOL LLPanelPreference::postBuild()
{
getChild<LLCheckBoxCtrl>("music_enabled")->set(gSavedSettings.getBOOL("AudioStreamingMusic"));
}
-
+ if (hasChild("voice_call_friends_only_check"))
+ {
+ getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
+ }
+
apply();
return true;
}
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index fdf128945e..122bdc8bc7 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -557,7 +557,7 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
// virtual
void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::string& reason)
{
- llerrs << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
+ llwarns << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
}
// callback from the name cache with an owner name to add to the list
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp