summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/llfasttimer.h85
-rw-r--r--indra/llrender/llimagegl.cpp69
-rw-r--r--indra/llrender/llimagegl.h2
-rw-r--r--indra/llui/llaccordionctrltab.cpp3
-rw-r--r--indra/llui/llflatlistview.cpp9
-rw-r--r--indra/llui/llfloater.cpp21
-rw-r--r--indra/llui/llfloater.h3
-rw-r--r--indra/llui/lllayoutstack.h2
-rw-r--r--indra/llui/llmenugl.cpp2
-rw-r--r--indra/llui/llresizehandle.cpp81
-rw-r--r--indra/llui/llscrollcontainer.cpp5
-rw-r--r--indra/llui/lltextbase.cpp14
-rw-r--r--indra/llui/lluictrl.cpp16
-rw-r--r--indra/llui/llurlentry.cpp2
-rw-r--r--indra/llui/tests/llurlentry_test.cpp20
-rw-r--r--indra/llvfs/lldir.cpp15
-rw-r--r--indra/llvfs/lldir.h2
-rw-r--r--indra/llvfs/lldir_linux.cpp3
-rw-r--r--indra/llvfs/lldir_solaris.cpp2
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp9
-rw-r--r--indra/newview/CMakeLists.txt22
-rw-r--r--indra/newview/app_settings/settings.xml20
-rw-r--r--indra/newview/llagent.cpp12
-rw-r--r--indra/newview/llagentwearables.cpp16
-rw-r--r--indra/newview/llappearancemgr.cpp16
-rw-r--r--indra/newview/llappearancemgr.h1
-rw-r--r--indra/newview/llappviewer.cpp53
-rw-r--r--indra/newview/llavataractions.cpp18
-rw-r--r--indra/newview/llavatariconctrl.cpp4
-rw-r--r--indra/newview/llavatarlist.cpp12
-rw-r--r--indra/newview/llavatarlist.h4
-rw-r--r--indra/newview/llavatarlistitem.cpp15
-rw-r--r--indra/newview/llavatarlistitem.h2
-rw-r--r--indra/newview/llbottomtray.cpp101
-rw-r--r--indra/newview/llbottomtray.h17
-rw-r--r--indra/newview/llcallfloater.cpp27
-rw-r--r--indra/newview/llchatbar.cpp3
-rw-r--r--indra/newview/llchathistory.cpp20
-rw-r--r--indra/newview/llchathistory.h1
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp37
-rw-r--r--indra/newview/llchiclet.cpp63
-rw-r--r--indra/newview/llchiclet.h21
-rw-r--r--indra/newview/llcompilequeue.cpp5
-rw-r--r--indra/newview/llfavoritesbar.cpp36
-rw-r--r--indra/newview/llfavoritesbar.h11
-rw-r--r--indra/newview/llfirstuse.cpp15
-rw-r--r--indra/newview/llfirstuse.h7
-rw-r--r--indra/newview/llfloaterbulkpermission.cpp1
-rw-r--r--indra/newview/llfloaterchat.cpp2
-rw-r--r--indra/newview/llfloaterchatterbox.cpp28
-rw-r--r--indra/newview/llfloatergesture.cpp10
-rw-r--r--indra/newview/llfloatergesture.h2
-rw-r--r--indra/newview/llfloaterinventory.cpp4
-rw-r--r--indra/newview/llfloatermediasettings.cpp10
-rw-r--r--indra/newview/llfloaterpreference.cpp56
-rw-r--r--indra/newview/llfloaterpreference.h5
-rw-r--r--indra/newview/llfloaterregioninfo.cpp2
-rw-r--r--indra/newview/llfloatersettingsdebug.cpp2
-rw-r--r--indra/newview/llfloatersnapshot.cpp4
-rw-r--r--indra/newview/llfloatertools.cpp3
-rw-r--r--indra/newview/llfloaterworldmap.cpp9
-rw-r--r--indra/newview/llfolderview.cpp15
-rw-r--r--indra/newview/llfolderviewitem.cpp1
-rw-r--r--indra/newview/llimfloater.cpp14
-rw-r--r--indra/newview/llimpanel.cpp1
-rw-r--r--indra/newview/llimview.cpp11
-rw-r--r--indra/newview/llinventorybridge.cpp116
-rw-r--r--indra/newview/llinventoryfunctions.cpp3
-rw-r--r--indra/newview/llinventorymodel.cpp98
-rw-r--r--indra/newview/llinventorymodel.h33
-rw-r--r--indra/newview/lllocationhistory.cpp6
-rw-r--r--indra/newview/lllogchat.cpp1
-rw-r--r--indra/newview/llmenucommands.cpp3
-rw-r--r--indra/newview/llmorphview.cpp4
-rw-r--r--indra/newview/llmutelist.cpp6
-rw-r--r--indra/newview/llnamebox.cpp13
-rw-r--r--indra/newview/llnamebox.h1
-rw-r--r--indra/newview/llnamelistctrl.cpp80
-rw-r--r--indra/newview/llnamelistctrl.h5
-rw-r--r--indra/newview/llnearbychathandler.cpp10
-rw-r--r--indra/newview/llpanelgroup.cpp12
-rw-r--r--indra/newview/llpanelgroupnotices.cpp2
-rw-r--r--indra/newview/llpanellandmarks.cpp4
-rw-r--r--indra/newview/llpanelmaininventory.cpp6
-rw-r--r--indra/newview/llpanelobject.cpp4
-rw-r--r--indra/newview/llpanelobjectinventory.cpp2
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp96
-rw-r--r--indra/newview/llpaneloutfitsinventory.h4
-rw-r--r--indra/newview/llpanelpeople.cpp19
-rw-r--r--indra/newview/llpanelpeople.h2
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp16
-rw-r--r--indra/newview/llpanelprimmediacontrols.h2
-rw-r--r--indra/newview/llpanelteleporthistory.cpp3
-rw-r--r--indra/newview/llpanelvolume.cpp4
-rw-r--r--indra/newview/llparticipantlist.cpp15
-rw-r--r--indra/newview/llparticipantlist.h2
-rw-r--r--indra/newview/llpreviewgesture.cpp6
-rw-r--r--indra/newview/llpreviewnotecard.cpp1
-rw-r--r--indra/newview/llpreviewscript.cpp1
-rw-r--r--indra/newview/llscreenchannel.cpp33
-rw-r--r--indra/newview/llscriptfloater.cpp26
-rw-r--r--indra/newview/llscriptfloater.h4
-rw-r--r--indra/newview/llsidepanelappearance.cpp14
-rw-r--r--indra/newview/llsidepanelappearance.h2
-rw-r--r--indra/newview/llsidetray.cpp15
-rw-r--r--indra/newview/llsidetray.h10
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp4
-rw-r--r--indra/newview/llstartup.cpp16
-rw-r--r--indra/newview/llstatusbar.cpp23
-rw-r--r--indra/newview/llstatusbar.h2
-rw-r--r--indra/newview/lltexlayer.cpp2
-rw-r--r--indra/newview/lltexturectrl.cpp8
-rw-r--r--indra/newview/lltexturefetch.cpp6
-rw-r--r--indra/newview/lltoastnotifypanel.cpp228
-rw-r--r--indra/newview/lltoastnotifypanel.h7
-rw-r--r--indra/newview/lltoolbar.cpp21
-rw-r--r--indra/newview/lltooldraganddrop.cpp12
-rw-r--r--indra/newview/lltoolmgr.cpp4
-rw-r--r--indra/newview/lltoolpie.cpp4
-rw-r--r--indra/newview/lltoolplacer.cpp6
-rw-r--r--indra/newview/llurlhistory.cpp2
-rw-r--r--indra/newview/llurlwhitelist.cpp6
-rw-r--r--indra/newview/llviewerdisplay.cpp4
-rw-r--r--indra/newview/llviewerfloaterreg.cpp3
-rw-r--r--indra/newview/llviewerhelputil.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp35
-rw-r--r--indra/newview/llviewerinventory.h13
-rw-r--r--indra/newview/llviewermedia.cpp57
-rw-r--r--indra/newview/llviewermedia.h6
-rw-r--r--indra/newview/llviewermenu.cpp107
-rw-r--r--indra/newview/llviewermessage.cpp170
-rw-r--r--indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--indra/newview/llviewerparcelmgr.cpp33
-rw-r--r--indra/newview/llviewertexteditor.cpp1
-rw-r--r--indra/newview/llviewertexture.cpp37
-rw-r--r--indra/newview/llviewertexture.h2
-rw-r--r--indra/newview/llviewertexturelist.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp3
-rw-r--r--indra/newview/llvoavatar.cpp4
-rw-r--r--indra/newview/llvoiceclient.cpp7
-rw-r--r--indra/newview/llvovolume.cpp10
-rw-r--r--indra/newview/skins/default/colors.xml60
-rw-r--r--indra/newview/skins/default/textures/textures.xml33
-rw-r--r--indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.pngbin0 -> 311 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.pngbin0 -> 330 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.pngbin0 -> 311 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.pngbin0 -> 324 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/jump_left_in.pngbin0 -> 342 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/jump_left_out.pngbin0 -> 321 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/jump_right_in.pngbin0 -> 320 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/jump_right_out.pngbin0 -> 315 bytes
-rw-r--r--indra/newview/skins/default/textures/world/BeaconArrow.pngbin0 -> 1965 bytes
-rw-r--r--indra/newview/skins/default/xui/de/floater_build_options.xml8
-rw-r--r--indra/newview/skins/default/xui/de/floater_preferences.xml6
-rw-r--r--indra/newview/skins/default/xui/de/menu_hide_navbar.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_navbar.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml10
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml18
-rw-r--r--indra/newview/skins/default/xui/de/panel_media_settings_general.xml34
-rw-r--r--indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml12
-rw-r--r--indra/newview/skins/default/xui/de/panel_media_settings_security.xml8
-rw-r--r--indra/newview/skins/default/xui/de/panel_navigation_bar.xml13
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_general.xml22
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_privacy.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_setup.xml24
-rw-r--r--indra/newview/skins/default/xui/de/panel_prim_media_controls.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_teleport_history.xml6
-rw-r--r--indra/newview/skins/default/xui/en/alert_button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_aaa.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml213
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_container.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_outfit_save_as.xml58
-rw-r--r--indra/newview/skins/default/xui/en/floater_script.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml8
-rw-r--r--indra/newview/skins/default/xui/en/floater_wearable_save_as.xml18
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml4
-rw-r--r--indra/newview/skins/default/xui/en/menu_gesture_gear.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_participant_list.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml33
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml22
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_separator.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_classified.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml42
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_alerts.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml29
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_toast.xml3
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml3
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chat_history.xml23
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml13
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml16
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml15
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml14
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_script.xml14
-rw-r--r--indra/newview/skins/default/xui/en/widgets/menu.xml2
-rw-r--r--indra/newview/tests/llviewerhelputil_test.cpp16
213 files changed, 2275 insertions, 1278 deletions
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index 5058a2e772..cd76bfe709 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -39,46 +39,81 @@
#define TIME_FAST_TIMERS 0
#if LL_WINDOWS
+#define LL_INLINE __forceinline
+
+//
+// NOTE: put back in when we aren't using platform sdk anymore
+//
// because MS has different signatures for these functions in winnt.h
// need to rename them to avoid conflicts
-#define _interlockedbittestandset _renamed_interlockedbittestandset
-#define _interlockedbittestandreset _renamed_interlockedbittestandreset
-#include <intrin.h>
-#undef _interlockedbittestandset
-#undef _interlockedbittestandreset
+//#define _interlockedbittestandset _renamed_interlockedbittestandset
+//#define _interlockedbittestandreset _renamed_interlockedbittestandreset
+//#include <intrin.h>
+//#undef _interlockedbittestandset
+//#undef _interlockedbittestandreset
+
+//inline U32 get_cpu_clock_count_32()
+//{
+// U64 time_stamp = __rdtsc();
+// return (U32)(time_stamp >> 8);
+//}
+//
+//// return full timer value, *not* shifted by 8 bits
+//inline U64 get_cpu_clock_count_64()
+//{
+// return __rdtsc();
+//}
-#define LL_INLINE __forceinline
// shift off lower 8 bits for lower resolution but longer term timing
// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
inline U32 get_cpu_clock_count_32()
{
- U64 time_stamp = __rdtsc();
- return (U32)(time_stamp >> 8);
+ U32 ret_val;
+ __asm
+ {
+ _emit 0x0f
+ _emit 0x31
+ shr eax,8
+ shl edx,24
+ or eax, edx
+ mov dword ptr [ret_val], eax
+ }
+ return ret_val;
}
// return full timer value, *not* shifted by 8 bits
inline U64 get_cpu_clock_count_64()
{
- return __rdtsc();
+ U64 ret_val;
+ __asm
+ {
+ _emit 0x0f
+ _emit 0x31
+ mov eax,eax
+ mov edx,edx
+ mov dword ptr [ret_val+4], edx
+ mov dword ptr [ret_val], eax
+ }
+ return ret_val;
}
#else
#define LL_INLINE
-#endif // LL_WINDOWS
-
-#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
-inline U32 get_cpu_clock_count_32()
-{
- U64 x;
- __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
- return (U32)x >> 8;
-}
-
-inline U32 get_cpu_clock_count_64()
-{
- U64 x;
- __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
- return x >> 8;
-}
+#endif
+
+#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
+inline U32 get_cpu_clock_count_32()
+{
+ U64 x;
+ __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
+ return (U32)x >> 8;
+}
+
+inline U32 get_cpu_clock_count_64()
+{
+ U64 x;
+ __asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
+ return x >> 8;
+}
#endif
#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index f8d7ea00e0..d873005fd9 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -428,49 +428,56 @@ LLImageGL::~LLImageGL()
void LLImageGL::init(BOOL usemipmaps)
{
-#ifdef DEBUG_MISS
- mMissed = FALSE;
-#endif
+ // keep these members in the same order as declared in llimagehl.h
+ // so that it is obvious by visual inspection if we forgot to
+ // init a field.
+
+ mTextureMemory = 0;
+ mLastBindTime = 0.f;
+
+ mPickMask = NULL;
+ mUseMipMaps = usemipmaps;
+ mHasExplicitFormat = FALSE;
+ mAutoGenMips = FALSE;
+
+ mIsMask = FALSE;
+ mNeedsAlphaAndPickMask = TRUE ;
+ mAlphaStride = 0 ;
+ mAlphaOffset = 0 ;
+
+ mGLTextureCreated = FALSE ;
+ mTexName = 0;
+ mWidth = 0;
+ mHeight = 0;
+ mCurrentDiscardLevel = -1;
- mPickMask = NULL;
- mTextureMemory = 0;
- mLastBindTime = 0.f;
+ mDiscardLevelInAtlas = -1 ;
+ mTexelsInAtlas = 0 ;
+ mTexelsInGLTexture = 0 ;
- mTarget = GL_TEXTURE_2D;
- mBindTarget = LLTexUnit::TT_TEXTURE;
- mUseMipMaps = usemipmaps;
- mHasMipMaps = false;
- mAutoGenMips = FALSE;
- mTexName = 0;
- mIsResident = 0;
+ mTarget = GL_TEXTURE_2D;
+ mBindTarget = LLTexUnit::TT_TEXTURE;
+ mHasMipMaps = false;
+
+ mIsResident = 0;
+
+ mComponents = 0;
+ mMaxDiscardLevel = MAX_DISCARD_LEVEL;
mTexOptionsDirty = true;
mAddressMode = LLTexUnit::TAM_WRAP;
mFilterOption = LLTexUnit::TFO_ANISOTROPIC;
- mWidth = 0;
- mHeight = 0;
- mComponents = 0;
-
- mMaxDiscardLevel = MAX_DISCARD_LEVEL;
- mCurrentDiscardLevel = -1;
mFormatInternal = -1;
mFormatPrimary = (LLGLenum) 0;
mFormatType = GL_UNSIGNED_BYTE;
mFormatSwapBytes = FALSE;
- mHasExplicitFormat = FALSE;
-
- mGLTextureCreated = FALSE ;
- mIsMask = FALSE;
- mCategory = -1 ;
- mAlphaStride = 0 ;
- mAlphaOffset = 0 ;
- mNeedsAlphaAndPickMask = TRUE ;
+#ifdef DEBUG_MISS
+ mMissed = FALSE;
+#endif
- mDiscardLevelInAtlas = -1 ;
- mTexelsInAtlas = 0 ;
- mTexelsInGLTexture = 0 ;
+ mCategory = -1;
}
void LLImageGL::cleanup()
@@ -1669,7 +1676,7 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)
}
if (mFormatType != GL_UNSIGNED_BYTE ||
- mFormatPrimary != GL_RGBA)
+ mFormatPrimary != GL_RGBA)
{
//cannot generate a pick mask for this texture
delete [] mPickMask;
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
index 937065043c..facfb7bd62 100644
--- a/indra/llrender/llimagegl.h
+++ b/indra/llrender/llimagegl.h
@@ -224,7 +224,7 @@ protected:
bool mTexOptionsDirty;
LLTexUnit::eTextureAddressMode mAddressMode; // Defaults to TAM_WRAP
- LLTexUnit::eTextureFilterOptions mFilterOption; // Defaults to TFO_TRILINEAR
+ LLTexUnit::eTextureFilterOptions mFilterOption; // Defaults to TFO_ANISOTROPIC
LLGLint mFormatInternal; // = GL internalformat
LLGLenum mFormatPrimary; // = GL format (pixel data format)
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 9d6ba57c29..4bfe44135a 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -157,7 +157,8 @@ void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::draw()
// because the user's mental model of focus is that it goes away after
// the accordion is closed.
if (getParent()->hasFocus()
- && !(collapsible && !expanded))
+ /*&& !(collapsible && !expanded)*/ // WHY??
+ )
{
mImageHeaderFocused->draw(0,0,width,height);
}
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 9cfc67af14..3694ecd4f4 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -711,19 +711,12 @@ void LLFlatListView::selectLastItem ()
void LLFlatListView::ensureSelectedVisible()
{
- LLRect visible_rc = getVisibleContentRect();
LLRect selected_rc = getLastSelectedItemRect();
- if ( !visible_rc.contains (selected_rc) )
+ if ( selected_rc.isValid() )
{
- // But scroll in Items panel coordinates
scrollToShowRect(selected_rc);
}
-
- // In case we are in accordion tab notify parent to show selected rectangle
- LLRect screen_rc;
- localRectToScreen(selected_rc, &screen_rc);
- notifyParent(LLSD().with("scrollToShowRect",screen_rc.getValue()));
}
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index a17e306325..3734a22f7e 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -233,6 +233,7 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
mAutoFocus(TRUE), // automatically take focus when opened
mCanDock(false),
mDocked(false),
+ mTornOff(false),
mHasBeenDraggedWhileMinimized(FALSE),
mPreviousMinimizedBottom(0),
mPreviousMinimizedLeft(0)
@@ -1456,6 +1457,7 @@ void LLFloater::onClickTearOff(LLFloater* self)
}
self->setTornOff(false);
}
+ self->updateButtons();
}
// static
@@ -1748,8 +1750,8 @@ void LLFloater::updateButtons()
if (i == BUTTON_HELP)
{
// don't show the help button if the floater is minimized
- // or if it is a tear-off hosted floater
- if (isMinimized() || mButtonsEnabled[BUTTON_TEAR_OFF])
+ // or if it is a docked tear-off floater
+ if (isMinimized() || (mButtonsEnabled[BUTTON_TEAR_OFF] && ! mTornOff))
{
enabled = false;
}
@@ -2360,7 +2362,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
LLRect::tCoordType screen_width = getSnapRect().getWidth();
LLRect::tCoordType screen_height = getSnapRect().getHeight();
-
+
// only automatically resize non-minimized, resizable floaters
if( floater->isResizable() && !floater->isMinimized() )
{
@@ -2385,16 +2387,11 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
new_width = llmax(new_width, min_width);
new_height = llmax(new_height, min_height);
- floater->reshape( new_width, new_height, TRUE );
- if (floater->followsRight())
- {
- floater->translate(old_width - new_width, 0);
- }
+ LLRect new_rect;
+ new_rect.setLeftTopAndSize(view_rect.mTop,view_rect.mLeft,new_width, new_height);
- if (floater->followsTop())
- {
- floater->translate(0, old_height - new_height);
- }
+ floater->reshape( new_width, new_height, TRUE );
+ floater->setRect(new_rect);
}
}
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index daf558de24..f70495c0f0 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -256,7 +256,7 @@ public:
bool isDocked() const { return mDocked; }
virtual void setDocked(bool docked, bool pop_on_undock = true);
- virtual void setTornOff(bool torn_off) {}
+ virtual void setTornOff(bool torn_off) { mTornOff = torn_off; }
// Return a closeable floater, if any, given the current focus.
static LLFloater* getClosableFloaterFromFocus();
@@ -387,6 +387,7 @@ private:
bool mCanDock;
bool mDocked;
+ bool mTornOff;
static LLMultiFloater* sHostp;
static BOOL sQuitting;
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index aba35773ee..c4f10038f8 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -93,6 +93,8 @@ public:
void updateLayout(BOOL force_resize = FALSE);
S32 getPanelSpacing() const { return mPanelSpacing; }
+ BOOL getAnimate () const { return mAnimate; }
+ void setAnimate (BOOL animate) { mAnimate = animate; }
static void updateClass();
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 21f3f15739..c172a2b714 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -99,7 +99,7 @@ const S32 TEAROFF_SEPARATOR_HEIGHT_PIXELS = 10;
const S32 MENU_ITEM_PADDING = 4;
const std::string BOOLEAN_TRUE_PREFIX( "\xE2\x9C\x94" ); // U+2714 HEAVY CHECK MARK
-const std::string BRANCH_SUFFIX( ">" );
+const std::string BRANCH_SUFFIX( "\xE2\x96\xB6" ); // U+25B6 BLACK RIGHT-POINTING TRIANGLE
const std::string ARROW_UP ("^^^^^^^");
const std::string ARROW_DOWN("vvvvvvv");
diff --git a/indra/llui/llresizehandle.cpp b/indra/llui/llresizehandle.cpp
index 6239a8f721..3df09d124a 100644
--- a/indra/llui/llresizehandle.cpp
+++ b/indra/llui/llresizehandle.cpp
@@ -124,7 +124,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
{
// Make sure the mouse in still over the application. We don't want to make the parent
// so big that we can't see the resize handle any more.
-
+
S32 screen_x;
S32 screen_y;
localPointToScreen(x, y, &screen_x, &screen_y);
@@ -146,68 +146,61 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
LLRect scaled_rect = orig_rect;
S32 delta_x = screen_x - mDragLastScreenX;
S32 delta_y = screen_y - mDragLastScreenY;
+
+ if(delta_x == 0 && delta_y == 0)
+ return FALSE;
+
LLCoordGL mouse_dir;
// use hysteresis on mouse motion to preserve user intent when mouse stops moving
mouse_dir.mX = (screen_x == mLastMouseScreenX) ? mLastMouseDir.mX : screen_x - mLastMouseScreenX;
mouse_dir.mY = (screen_y == mLastMouseScreenY) ? mLastMouseDir.mY : screen_y - mLastMouseScreenY;
+
mLastMouseScreenX = screen_x;
mLastMouseScreenY = screen_y;
mLastMouseDir = mouse_dir;
- S32 x_multiple = 1;
- S32 y_multiple = 1;
- switch( mCorner )
- {
- case LEFT_TOP:
- x_multiple = -1;
- y_multiple = 1;
- break;
- case LEFT_BOTTOM:
- x_multiple = -1;
- y_multiple = -1;
- break;
- case RIGHT_TOP:
- x_multiple = 1;
- y_multiple = 1;
- break;
- case RIGHT_BOTTOM:
- x_multiple = 1;
- y_multiple = -1;
- break;
- }
+ S32 new_width = orig_rect.getWidth();
+ S32 new_height = orig_rect.getHeight();
- S32 new_width = orig_rect.getWidth() + x_multiple * delta_x;
- if( new_width < mMinWidth )
- {
- new_width = mMinWidth;
- delta_x = x_multiple * (mMinWidth - orig_rect.getWidth());
- }
-
- S32 new_height = orig_rect.getHeight() + y_multiple * delta_y;
- if( new_height < mMinHeight )
- {
- new_height = mMinHeight;
- delta_y = y_multiple * (mMinHeight - orig_rect.getHeight());
- }
+ S32 new_pos_x = orig_rect.mLeft;
+ S32 new_pos_y = orig_rect.mTop;
switch( mCorner )
{
- case LEFT_TOP:
- scaled_rect.translate(delta_x, 0);
+ case LEFT_TOP:
+ new_width-=delta_x;
+ new_height+=delta_y;
+ new_pos_x+=delta_x;
+ new_pos_y+=delta_y;
break;
case LEFT_BOTTOM:
- scaled_rect.translate(delta_x, delta_y);
+ new_width-=delta_x;
+ new_height-=delta_y;
+ new_pos_x+=delta_x;
break;
case RIGHT_TOP:
+ new_width+=delta_x;
+ new_height+=delta_y;
+ new_pos_y+=delta_y;
break;
case RIGHT_BOTTOM:
- scaled_rect.translate(0, delta_y);
+ new_width+=delta_x;
+ new_height-=delta_y;
break;
}
+ new_width = llmax(new_width,mMinWidth);
+ new_height = llmax(new_height,mMinHeight);
+
+ LLRect::tCoordType screen_width = resizing_view->getParent()->getSnapRect().getWidth();
+ LLRect::tCoordType screen_height = resizing_view->getParent()->getSnapRect().getHeight();
+
+ new_width = llmin(new_width, screen_width);
+ new_height = llmin(new_height, screen_height);
+
// temporarily set new parent rect
- scaled_rect.mRight = scaled_rect.mLeft + new_width;
- scaled_rect.mTop = scaled_rect.mBottom + new_height;
+ scaled_rect.setLeftTopAndSize(new_pos_x,new_pos_y,new_width,new_height);
+
resizing_view->setRect(scaled_rect);
LLView* snap_view = NULL;
@@ -258,7 +251,11 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
resizing_view->setRect(orig_rect);
// translate and scale to new shape
- resizing_view->setShape(scaled_rect, true);
+ resizing_view->reshape(scaled_rect.getWidth(),scaled_rect.getHeight());
+ resizing_view->setRect(scaled_rect);
+ //set shape to handle dependent floaters...
+ resizing_view->handleReshape(scaled_rect, false);
+
// update last valid mouse cursor position based on resized view's actual size
LLRect new_rect = resizing_view->getRect();
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index a5e47e8547..94465a67ce 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -668,6 +668,11 @@ void LLScrollContainer::scrollToShowRect(const LLRect& rect, const LLRect& const
// propagate scroll to document
updateScroll();
+
+ // In case we are in accordion tab notify parent to show selected rectangle
+ LLRect screen_rc;
+ localRectToScreen(rect_to_constrain, &screen_rc);
+ notifyParent(LLSD().with("scrollToShowRect",screen_rc.getValue()));
}
void LLScrollContainer::pageUp(S32 overlap)
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 5ebf49c488..17aecaf32f 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -346,7 +346,8 @@ void LLTextBase::drawSelectionBackground()
S32 segment_line_start = segmentp->getStart() + segment_offset;
S32 segment_line_end = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd);
- S32 segment_width, segment_height;
+ S32 segment_width = 0;
+ S32 segment_height = 0;
// if selection after beginning of segment
if(selection_left >= segment_line_start)
@@ -433,7 +434,8 @@ void LLTextBase::drawCursor()
if (LL_KIM_OVERWRITE == gKeyboard->getInsertMode() && !hasSelection())
{
- S32 segment_width, segment_height;
+ S32 segment_width = 0;
+ S32 segment_height = 0;
segmentp->getDimensions(mCursorPos - segmentp->getStart(), 1, segment_width, segment_height);
S32 width = llmax(CURSOR_THICKNESS, segment_width);
cursor_rect.mRight = cursor_rect.mLeft + width;
@@ -2443,10 +2445,12 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip)
bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
- height = mFontHeight;
+ height = 0;
+ width = 0;
bool force_newline = false;
if (num_chars > 0)
{
+ height = mFontHeight;
LLWString text = mEditor.getWText();
// if last character is a newline, then return true, forcing line break
llwchar last_char = text[mStart + first_char + num_chars - 1];
@@ -2461,10 +2465,6 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt
width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
}
}
- else
- {
- width = 0;
- }
LLUIImagePtr image = mStyle->getImage();
if( image.notNull())
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index f016c0af89..3ade46d367 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -868,14 +868,6 @@ bool LLUICtrl::findHelpTopic(std::string& help_topic_out)
if (panel)
{
- // does the panel have an active tab with a help topic?
- LLPanel *tab = panel->childGetVisibleTabWithHelp();
- if (tab)
- {
- help_topic_out = tab->getHelpTopic();
- return true; // success (tab)
- }
-
// does the panel have a sub-panel with a help topic?
LLPanel *subpanel = panel->childGetVisiblePanelWithHelp();
if (subpanel)
@@ -884,6 +876,14 @@ bool LLUICtrl::findHelpTopic(std::string& help_topic_out)
return true; // success (subpanel)
}
+ // does the panel have an active tab with a help topic?
+ LLPanel *tab = panel->childGetVisibleTabWithHelp();
+ if (tab)
+ {
+ help_topic_out = tab->getHelpTopic();
+ return true; // success (tab)
+ }
+
// otherwise, does the panel have a help topic itself?
if (!panel->getHelpTopic().empty())
{
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 1b6dd1b264..4927e57a52 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -204,7 +204,7 @@ LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
mPattern = boost::regex("("
"\\bwww\\.\\S+\\.\\S+" // i.e. www.FOO.BAR
"|" // or
- "\\b[^ \\t\\n\\r\\f\\v:/]+\\.(?:com|net|edu|org)[^[:space:][:alnum:]]*\\>" // i.e. FOO.net
+ "(?<!@)\\b[^[:space:]:@/]+\\.(?:com|net|edu|org)([/:]\\S*)?\\b" // i.e. FOO.net
")",
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_http.xml";
diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp
index 38cf7124ce..80be8fcbf7 100644
--- a/indra/llui/tests/llurlentry_test.cpp
+++ b/indra/llui/tests/llurlentry_test.cpp
@@ -571,6 +571,26 @@ namespace tut
"MIT web site is at web.mit.edu and also www.mit.edu",
"web.mit.edu");
+ testRegex("don't match e-mail addresses", r,
+ "test@lindenlab.com",
+ "");
+
+ testRegex(".com URL with path", r,
+ "see secondlife.com/status for grid status",
+ "secondlife.com/status");
+
+ testRegex(".com URL with port", r,
+ "secondlife.com:80",
+ "secondlife.com:80");
+
+ testRegex(".com URL with port and path", r,
+ "see secondlife.com:80/status",
+ "secondlife.com:80/status");
+
+ testRegex("www.*.com URL with port and path", r,
+ "see www.secondlife.com:80/status",
+ "www.secondlife.com:80/status");
+
testRegex("invalid .com URL [1]", r,
"..com",
"");
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index b2b17fdd56..da4abde451 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -200,6 +200,11 @@ const std::string &LLDir::getOSUserAppDir() const
const std::string &LLDir::getLindenUserDir() const
{
+ if (mLindenUserDir.empty())
+ {
+ lldebugs << "getLindenUserDir() called early, we don't have the user name yet - returning empty string to caller" << llendl;
+ }
+
return mLindenUserDir;
}
@@ -337,7 +342,7 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd
break;
case LL_PATH_CACHE:
- prefix = getCacheDir();
+ prefix = getCacheDir();
break;
case LL_PATH_USER_SETTINGS:
@@ -348,6 +353,11 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd
case LL_PATH_PER_SL_ACCOUNT:
prefix = getLindenUserDir();
+ if (prefix.empty())
+ {
+ // if we're asking for the per-SL-account directory but we haven't logged in yet (or otherwise don't know the account name from which to build this string), then intentionally return a blank string to the caller and skip the below warning about a blank prefix.
+ return std::string();
+ }
break;
case LL_PATH_CHAT_LOGS:
@@ -557,7 +567,7 @@ std::string LLDir::getForbiddenFileChars()
void LLDir::setLindenUserDir(const std::string &first, const std::string &last)
{
- // if both first and last aren't set, assume we're grabbing the cached dir
+ // if both first and last aren't set, that's bad.
if (!first.empty() && !last.empty())
{
// some platforms have case-sensitive filesystems, so be
@@ -571,6 +581,7 @@ void LLDir::setLindenUserDir(const std::string &first, const std::string &last)
mLindenUserDir += firstlower;
mLindenUserDir += "_";
mLindenUserDir += lastlower;
+ llinfos << "Got name for LLDir::setLindenUserDir(first='" << first << "', last='" << last << "')" << llendl;
}
else
{
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
index 206e3223e3..9067d75bac 100644
--- a/indra/llvfs/lldir.h
+++ b/indra/llvfs/lldir.h
@@ -44,7 +44,7 @@ typedef enum ELLPath
LL_PATH_NONE = 0,
LL_PATH_USER_SETTINGS = 1,
LL_PATH_APP_SETTINGS = 2,
- LL_PATH_PER_SL_ACCOUNT = 3,
+ LL_PATH_PER_SL_ACCOUNT = 3, // returns/expands to blank string if we don't know the account name yet
LL_PATH_CACHE = 4,
LL_PATH_CHARACTER = 5,
LL_PATH_HELP = 6,
diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp
index ee902d1de7..a9736560ec 100644
--- a/indra/llvfs/lldir_linux.cpp
+++ b/indra/llvfs/lldir_linux.cpp
@@ -112,9 +112,10 @@ LLDir_Linux::LLDir_Linux()
// ...normal installation running
mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
}
+
mOSUserDir = getCurrentUserHome(tmp_str);
mOSUserAppDir = "";
- mLindenUserDir = tmp_str;
+ mLindenUserDir = "";
char path [32]; /* Flawfinder: ignore */
diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp
index a8fad8e5bd..8ac5a41e93 100644
--- a/indra/llvfs/lldir_solaris.cpp
+++ b/indra/llvfs/lldir_solaris.cpp
@@ -100,7 +100,7 @@ LLDir_Solaris::LLDir_Solaris()
mAppRODataDir = strdup(tmp_str);
mOSUserDir = getCurrentUserHome(tmp_str);
mOSUserAppDir = "";
- mLindenUserDir = tmp_str;
+ mLindenUserDir = "";
char path [LL_MAX_PATH]; /* Flawfinder: ignore */
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 084cdd9561..42d680ade6 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -175,6 +175,15 @@ private:
}
std::string application_dir = std::string( cwd );
+#if LL_DARWIN
+ // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
+ // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
+ // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it
+ // which gets hit when the plugin is probed by webkit.
+ // Unsetting the environment variable here works around this issue.
+ unsetenv("USERBREAK");
+#endif
+
#if LL_WINDOWS
//*NOTE:Mani - On windows, at least, the component path is the
// location of this dll's image file.
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 0bfc0db351..5373556c20 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -156,7 +156,6 @@ set(viewer_SOURCE_FILES
llfloaterbuycurrency.cpp
llfloaterbuyland.cpp
llfloatercamera.cpp
- llfloaterchat.cpp
llfloaterchatterbox.cpp
llfloatercolorpicker.cpp
llfloatercustomize.cpp
@@ -665,7 +664,6 @@ set(viewer_HEADER_FILES
llfloaterbuycurrency.h
llfloaterbuyland.h
llfloatercamera.h
- llfloaterchat.h
llfloaterchatterbox.h
llfloatercolorpicker.h
llfloatercustomize.h
@@ -1407,11 +1405,11 @@ if (WINDOWS)
# Note the need to specify multiple names explicitly.
set(GOOGLE_PERF_TOOLS_SOURCE
${SHARED_LIB_STAGING_DIR}/Release/libtcmalloc_minimal.dll
- ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/libtcmalloc_minimal.dll
- ${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll
- )
+ ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/libtcmalloc_minimal.dll
+ ${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll
+ )
endif(USE_GOOGLE_PERFTOOLS)
-
+
set(COPY_INPUT_DEPENDECIES
# The following commented dependencies are determined at variably at build time. Can't do this here.
@@ -1505,11 +1503,11 @@ if (WINDOWS)
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
- --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
+ --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
DEPENDS
- ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
- stage_third_party_libs
- ${COPY_INPUT_DEPENDECIES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+ stage_third_party_libs
+ ${COPY_INPUT_DEPENDECIES}
COMMENT "Performing viewer_manifest copy"
)
@@ -1761,7 +1759,6 @@ if (INSTALL)
endif (INSTALL)
if (LL_TESTS)
-else (LL_TESTS)
# To add a viewer unit test, just add the test .cpp file below
# This creates a separate test project per file listed.
include(LLAddBuildTest)
@@ -1769,9 +1766,10 @@ else (LL_TESTS)
llagentaccess.cpp
lldateutil.cpp
llmediadataclient.cpp
- llviewerhelputil.cpp
lllogininstance.cpp
+ llviewerhelputil.cpp
)
+
##################################################
# DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
##################################################
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 184606d495..69336243da 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -285,7 +285,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>AudioStreamingMusic</key>
<map>
@@ -296,7 +296,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>AudioStreamingVideo</key>
<map>
@@ -307,7 +307,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>AuditTexture</key>
<map>
@@ -3607,7 +3607,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC]</string>
+ <string>http://viewer-help.secondlife.com/[LANGUAGE]/[CHANNEL]/[VERSION]/[TOPIC][DEBUG_MODE]</string>
</map>
<key>HomeSidePanelURL</key>
<map>
@@ -5062,6 +5062,18 @@
<key>Value</key>
<integer>5</integer>
</map>
+ <key>ToastButtonWidth</key>
+ <map>
+ <key>Comment</key>
+ <string>Default width of buttons in the toast.
+ Note if required width will be less then this one, a button will be reshaped to default size , otherwise to required</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>90</integer>
+ </map>
<key>ChannelBottomPanelMargin</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 5ea253709c..da0e9238d6 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -43,7 +43,7 @@
#include "llcallingcard.h"
#include "llchannelmanager.h"
#include "llconsole.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloatercamera.h"
#include "llfloatercustomize.h"
#include "llfloaterreg.h"
@@ -2806,6 +2806,7 @@ void LLAgent::endAnimationUpdateUI()
gStatusBar->setVisibleForMouselook(true);
LLBottomTray::getInstance()->setVisible(TRUE);
+ LLBottomTray::getInstance()->onMouselookModeOut();
LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
LLSideTray::getInstance()->updateSidetrayVisibility();
@@ -2904,6 +2905,7 @@ void LLAgent::endAnimationUpdateUI()
LLNavigationBar::getInstance()->setVisible(FALSE);
gStatusBar->setVisibleForMouselook(false);
+ LLBottomTray::getInstance()->onMouselookModeIn();
LLBottomTray::getInstance()->setVisible(FALSE);
LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
@@ -5697,10 +5699,10 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **)
}
// Any control taken? If so, might be first time.
- if (total_count > 0)
- {
- LLFirstUse::useOverrideKeys();
- }
+ //if (total_count > 0)
+ //{
+ //LLFirstUse::useOverrideKeys();
+ //}
}
else
{
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 10a2dd132a..c21cdf9508 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -1364,15 +1364,15 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,
}
}
-class LLAutoRenameFolder: public LLInventoryCallback
+class LLShowCreatedOutfit: public LLInventoryCallback
{
public:
- LLAutoRenameFolder(LLUUID& folder_id):
+ LLShowCreatedOutfit(LLUUID& folder_id):
mFolderID(folder_id)
{
}
- virtual ~LLAutoRenameFolder()
+ virtual ~LLShowCreatedOutfit()
{
LLSD key;
LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
@@ -1382,13 +1382,15 @@ public:
{
outfit_panel->getRootFolder()->clearSelection();
outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE);
- outfit_panel->getRootFolder()->setNeedsAutoRename(TRUE);
}
LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0;
if (tab_outfits && !tab_outfits->getDisplayChildren())
{
tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
}
+
+ LLAppearanceManager::instance().updateIsDirty();
+ LLAppearanceManager::instance().updatePanelOutfitName("");
}
virtual void fire(const LLUUID&)
@@ -1413,10 +1415,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
LLFolderType::FT_OUTFIT,
new_folder_name);
- LLPointer<LLInventoryCallback> cb = new LLAutoRenameFolder(folder_id);
+ LLPointer<LLInventoryCallback> cb = new LLShowCreatedOutfit(folder_id);
LLAppearanceManager::instance().shallowCopyCategory(LLAppearanceManager::instance().getCOF(),folder_id, cb);
- LLAppearanceManager::instance().createBaseOutfitLink(folder_id, NULL);
-
+ LLAppearanceManager::instance().createBaseOutfitLink(folder_id, cb);
+
return folder_id;
}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 4d4a89bcd4..748d8bdfbf 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -392,6 +392,21 @@ const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink()
return NULL;
}
+bool LLAppearanceManager::getBaseOutfitName(std::string& name)
+{
+ const LLViewerInventoryItem* outfit_link = getBaseOutfitLink();
+ if(outfit_link)
+ {
+ const LLViewerInventoryCategory *cat = outfit_link->getLinkedCategory();
+ if (cat)
+ {
+ name = cat->getName();
+ return true;
+ }
+ }
+ return false;
+}
+
// Update appearance from outfit folder.
void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append)
{
@@ -630,6 +645,7 @@ void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer
LLAssetType::AT_LINK_FOLDER, link_waiter);
new_outfit_name = catp->getName();
}
+
updatePanelOutfitName(new_outfit_name);
}
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index b954968998..20745b70e4 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -63,6 +63,7 @@ public:
// Finds the folder link to the currently worn outfit
const LLViewerInventoryItem *getBaseOutfitLink();
+ bool getBaseOutfitName(std::string &name);
// Update the displayed outfit name in UI.
void updatePanelOutfitName(const std::string& name);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index fb1bded795..638a8f759d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -71,7 +71,7 @@
#include "lluicolortable.h"
#include "llurldispatcher.h"
#include "llurlhistory.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llrender.h"
#include "llteleporthistory.h"
#include "lllocationhistory.h"
@@ -1376,7 +1376,7 @@ bool LLAppViewer::cleanup()
if( gViewerWindow)
gViewerWindow->shutdownViews();
- llinfos << "Cleaning up Inevntory" << llendflush;
+ llinfos << "Cleaning up Inventory" << llendflush;
// Cleanup Inventory after the UI since it will delete any remaining observers
// (Deleted observers should have already removed themselves)
@@ -1478,10 +1478,17 @@ bool LLAppViewer::cleanup()
LLUIColorTable::instance().saveUserSettings();
- // PerAccountSettingsFile should be empty if no use has been logged on.
+ // PerAccountSettingsFile should be empty if no user has been logged on.
// *FIX:Mani This should get really saved in a "logoff" mode.
- gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE);
- llinfos << "Saved settings" << llendflush;
+ if (gSavedSettings.getString("PerAccountSettingsFile").empty())
+ {
+ llinfos << "Not saving per-account settings; don't know the account name yet." << llendl;
+ }
+ else
+ {
+ gSavedPerAccountSettings.saveToFile(gSavedSettings.getString("PerAccountSettingsFile"), TRUE);
+ llinfos << "Saved settings" << llendflush;
+ }
std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
// save all settings, even if equals defaults
@@ -1915,25 +1922,25 @@ bool LLAppViewer::initConfiguration()
// These are warnings that appear on the first experience of that condition.
// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
// for disable/reset ability
- LLFirstUse::addConfigVariable("FirstBalanceIncrease");
- LLFirstUse::addConfigVariable("FirstBalanceDecrease");
- LLFirstUse::addConfigVariable("FirstSit");
- LLFirstUse::addConfigVariable("FirstMap");
- LLFirstUse::addConfigVariable("FirstGoTo");
- LLFirstUse::addConfigVariable("FirstBuild");
+// LLFirstUse::addConfigVariable("FirstBalanceIncrease");
+// LLFirstUse::addConfigVariable("FirstBalanceDecrease");
+// LLFirstUse::addConfigVariable("FirstSit");
+// LLFirstUse::addConfigVariable("FirstMap");
+// LLFirstUse::addConfigVariable("FirstGoTo");
+// LLFirstUse::addConfigVariable("FirstBuild");
// LLFirstUse::addConfigVariable("FirstLeftClickNoHit");
- LLFirstUse::addConfigVariable("FirstTeleport");
- LLFirstUse::addConfigVariable("FirstOverrideKeys");
- LLFirstUse::addConfigVariable("FirstAttach");
- LLFirstUse::addConfigVariable("FirstAppearance");
- LLFirstUse::addConfigVariable("FirstInventory");
- LLFirstUse::addConfigVariable("FirstSandbox");
- LLFirstUse::addConfigVariable("FirstFlexible");
- LLFirstUse::addConfigVariable("FirstDebugMenus");
- LLFirstUse::addConfigVariable("FirstStreamingMedia");
- LLFirstUse::addConfigVariable("FirstSculptedPrim");
- LLFirstUse::addConfigVariable("FirstVoice");
- LLFirstUse::addConfigVariable("FirstMedia");
+// LLFirstUse::addConfigVariable("FirstTeleport");
+// LLFirstUse::addConfigVariable("FirstOverrideKeys");
+// LLFirstUse::addConfigVariable("FirstAttach");
+// LLFirstUse::addConfigVariable("FirstAppearance");
+// LLFirstUse::addConfigVariable("FirstInventory");
+// LLFirstUse::addConfigVariable("FirstSandbox");
+// LLFirstUse::addConfigVariable("FirstFlexible");
+// LLFirstUse::addConfigVariable("FirstDebugMenus");
+// LLFirstUse::addConfigVariable("FirstStreamingMedia");
+// LLFirstUse::addConfigVariable("FirstSculptedPrim");
+// LLFirstUse::addConfigVariable("FirstVoice");
+// LLFirstUse::addConfigVariable("FirstMedia");
// - read command line settings.
LLControlGroupCLP clp;
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index c3deb602ee..40c9bb6afa 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -172,24 +172,6 @@ void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids)
return;
handle_lure(ids);
-
- // Record the offer.
- for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++)
- {
- LLUUID target_id = *it;
- std::string target_name;
-
- gCacheName->getFullName(target_id, target_name);
-
- LLSD args;
- args["TO_NAME"] = target_name;
-
- LLSD payload;
- payload["from_id"] = target_id;
- payload["SESSION_NAME"] = target_name;
- payload["SUPPRESS_TOAST"] = true;
- LLNotificationsUtil::add("TeleportOfferSent", args, payload);
- }
}
// static
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index 42ae122ff9..87b8d807c4 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -64,7 +64,7 @@ void LLAvatarIconIDCache::load ()
llinfos << "Loading avatar icon id cache." << llendl;
// build filename for each user
- std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);
llifstream file(resolved_filename);
if (!file.is_open())
@@ -97,7 +97,7 @@ void LLAvatarIconIDCache::load ()
void LLAvatarIconIDCache::save ()
{
- std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);
// open a file for writing
llofstream file (resolved_filename);
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 19e9e52ddf..6784e6693b 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -320,6 +320,11 @@ boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commi
return mRefreshCompleteSignal.connect(cb);
}
+boost::signals2::connection LLAvatarList::setItemDoubleClickCallback(const mouse_signal_t::slot_type& cb)
+{
+ return mItemDoubleClickSignal.connect(cb);
+}
+
void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
{
LLAvatarListItem* item = new LLAvatarListItem();
@@ -333,6 +338,8 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
item->setShowProfileBtn(mShowProfileBtn);
item->showSpeakingIndicator(mShowSpeakingIndicator);
+ item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoucleClicked, this, _1, _2, _3, _4));
+
addItem(item, id, pos);
}
@@ -400,6 +407,11 @@ void LLAvatarList::updateLastInteractionTimes()
}
}
+void LLAvatarList::onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask)
+{
+ mItemDoubleClickSignal(ctrl, x, y, mask);
+}
+
bool LLAvatarItemComparator::compare(const LLPanel* item1, const LLPanel* item2) const
{
const LLAvatarListItem* avatar_item1 = dynamic_cast<const LLAvatarListItem*>(item1);
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 0d2ce884ae..a58a562378 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -92,6 +92,8 @@ public:
boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
+ boost::signals2::connection setItemDoubleClickCallback(const mouse_signal_t::slot_type& cb);
+
protected:
void refresh();
@@ -101,6 +103,7 @@ protected:
std::vector<LLUUID>& vadded,
std::vector<LLUUID>& vremoved);
void updateLastInteractionTimes();
+ void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
private:
@@ -120,6 +123,7 @@ private:
LLAvatarListItem::ContextMenu* mContextMenu;
commit_signal_t mRefreshCompleteSignal;
+ mouse_signal_t mItemDoubleClickSignal;
};
/** Abstract comparator for avatar items */
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 1043858373..66ab32f3e8 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -258,6 +258,21 @@ void LLAvatarListItem::onProfileBtnClick()
LLAvatarActions::showProfile(mAvatarId);
}
+BOOL LLAvatarListItem::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+ if(mInfoBtn->getRect().pointInRect(x, y))
+ {
+ onInfoBtnClick();
+ return TRUE;
+ }
+ if(mProfileBtn->getRect().pointInRect(x, y))
+ {
+ onProfileBtnClick();
+ return TRUE;
+ }
+ return LLPanel::handleDoubleClick(x, y, mask);
+}
+
void LLAvatarListItem::setValue( const LLSD& value )
{
if (!value.isMap()) return;;
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index f76ffb391d..479a4833cb 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -103,6 +103,8 @@ public:
void onInfoBtnClick();
void onProfileBtnClick();
+ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+
protected:
/**
* Contains indicator to show voice activity.
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index beccefa430..988867ef84 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -48,10 +48,20 @@
#include "llsyswellwindow.h"
#include "llfloatercamera.h"
#include "lltexteditor.h"
+#include "llnotifications.h"
// Build time optimization, generate extern template once in .cpp file
template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance();
+namespace
+{
+ const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel";
+ const std::string& PANEL_CHATBAR_NAME = "chat_bar";
+ const std::string& PANEL_MOVEMENT_NAME = "movement_panel";
+ const std::string& PANEL_CAMERA_NAME = "cam_panel";
+ const std::string& PANEL_GESTURE_NAME = "gesture_panel";
+}
+
LLBottomTray::LLBottomTray(const LLSD&)
: mChicletPanel(NULL),
mSpeakPanel(NULL),
@@ -236,6 +246,61 @@ void LLBottomTray::onFocusLost()
}
}
+void LLBottomTray::savePanelsShape()
+{
+ mSavedShapeList.clear();
+ for (child_list_const_iter_t
+ child_it = mToolbarStack->beginChild(),
+ child_it_end = mToolbarStack->endChild();
+ child_it != child_it_end; ++child_it)
+ {
+ mSavedShapeList.push_back( (*child_it)->getRect() );
+ }
+}
+
+void LLBottomTray::restorePanelsShape()
+{
+ if (mSavedShapeList.size() != mToolbarStack->getChildCount())
+ return;
+ int i = 0;
+ for (child_list_const_iter_t
+ child_it = mToolbarStack->beginChild(),
+ child_it_end = mToolbarStack->endChild();
+ child_it != child_it_end; ++child_it)
+ {
+ (*child_it)->setShape(mSavedShapeList[i++]);
+ }
+}
+
+void LLBottomTray::onMouselookModeOut()
+{
+ // Apply the saved settings when we are not in mouselook mode, see EXT-3988.
+ {
+ setTrayButtonVisibleIfPossible (RS_BUTTON_GESTURES, gSavedSettings.getBOOL("ShowGestureButton"), false);
+ setTrayButtonVisibleIfPossible (RS_BUTTON_MOVEMENT, gSavedSettings.getBOOL("ShowMoveButton"), false);
+ setTrayButtonVisibleIfPossible (RS_BUTTON_CAMERA, gSavedSettings.getBOOL("ShowCameraButton"), false);
+ setTrayButtonVisibleIfPossible (RS_BUTTON_SNAPSHOT, gSavedSettings.getBOOL("ShowSnapshotButton"),false);
+ }
+ // HACK: To avoid usage the LLLayoutStack logic of resizing, we force the updateLayout
+ // and then restore children saved shapes. See EXT-4309.
+ BOOL saved_anim = mToolbarStack->getAnimate();
+ mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE);
+ // Disable animation to prevent layout updating in several frames.
+ mToolbarStack->setAnimate(FALSE);
+ // Force the updating of layout to reset panels collapse factor.
+ mToolbarStack->updateLayout();
+ // Restore animate state.
+ mToolbarStack->setAnimate(saved_anim);
+ // Restore saved shapes.
+ restorePanelsShape();
+}
+
+void LLBottomTray::onMouselookModeIn()
+{
+ savePanelsShape();
+ mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE);
+}
+
//virtual
// setVisible used instead of onVisibilityChange, since LLAgent calls it on entering/leaving mouselook mode.
// If bottom tray is already visible in mouselook mode, then onVisibilityChange will not be called from setVisible(true),
@@ -255,24 +320,21 @@ void LLBottomTray::setVisible(BOOL visible)
LLView* viewp = *child_it;
std::string name = viewp->getName();
- // Chat bar and gesture button are shown even in mouselook mode. But the move, camera and snapshot buttons shouldn't be displayed. See EXT-3988.
- if ("chat_bar" == name || "gesture_panel" == name || (visibility && ("movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name)))
+ // Chat bar and gesture button are shown even in mouselook mode.
+ // But the move, camera and snapshot buttons shouldn't be displayed. See EXT-3988.
+ if ("chat_bar" == name || "gesture_panel" == name)
continue;
else
{
viewp->setVisible(visibility);
}
}
-
- // Apply the saved settings when we are not in mouselook mode, see EXT-3988.
- if (visibility)
- {
- showCameraButton(gSavedSettings.getBOOL("ShowCameraButton"));
- showSnapshotButton(gSavedSettings.getBOOL("ShowSnapshotButton"));
- showMoveButton(gSavedSettings.getBOOL("ShowMoveButton"));
- showGestureButton(gSavedSettings.getBOOL("ShowGestureButton"));
- }
}
+
+ if(visible)
+ gFloaterView->setSnapOffsetBottom(getRect().getHeight());
+ else
+ gFloaterView->setSnapOffsetBottom(0);
}
void LLBottomTray::showBottomTrayContextMenu(S32 x, S32 y, MASK mask)
@@ -337,15 +399,6 @@ void LLBottomTray::showSnapshotButton(BOOL visible)
setTrayButtonVisibleIfPossible(RS_BUTTON_SNAPSHOT, visible);
}
-namespace
-{
- const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel";
- const std::string& PANEL_CHATBAR_NAME = "chat_bar";
- const std::string& PANEL_MOVEMENT_NAME = "movement_panel";
- const std::string& PANEL_CAMERA_NAME = "cam_panel";
- const std::string& PANEL_GESTURE_NAME = "gesture_panel";
-}
-
BOOL LLBottomTray::postBuild()
{
@@ -1018,7 +1071,7 @@ void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool vis
panel->setVisible(visible);
}
-void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible)
+void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification)
{
bool can_be_set = true;
@@ -1058,7 +1111,11 @@ void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type
{
// mark this button to show it while future bottom tray extending
mResizeState |= shown_object_type;
- LLNotificationsUtil::add("BottomTrayButtonCanNotBeShown");
+ if ( raise_notification )
+ LLNotificationsUtil::add("BottomTrayButtonCanNotBeShown",
+ LLSD(),
+ LLSD(),
+ LLNotificationFunctorRegistry::instance().DONOTHING);
}
}
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 9be0e5810f..562ee56912 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -92,7 +92,10 @@ public:
void showMoveButton(BOOL visible);
void showCameraButton(BOOL visible);
void showSnapshotButton(BOOL visible);
-
+
+ void onMouselookModeIn();
+ void onMouselookModeOut();
+
/**
* Creates IM Chiclet based on session type (IM chat or Group chat)
*/
@@ -167,7 +170,14 @@ private:
* - if hidden via context menu button should be shown but there is no enough room for now
* it will be shown while extending.
*/
- void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible);
+ void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification = true);
+
+ /**
+ * Save and restore children shapes.
+ * Used to avoid the LLLayoutStack resizing logic between mouse look mode switching.
+ */
+ void savePanelsShape();
+ void restorePanelsShape();
MASK mResizeState;
@@ -177,6 +187,9 @@ private:
typedef std::map<EResizeState, S32> state_object_width_map_t;
state_object_width_map_t mObjectDefaultWidthMap;
+ typedef std::vector<LLRect> shape_list_t;
+ shape_list_t mSavedShapeList;
+
protected:
LLBottomTray(const LLSD& key = LLSD());
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index c0efb85b51..6317a6a392 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -724,13 +724,28 @@ void LLCallFloater::removeVoiceRemoveTimer(const LLUUID& voice_speaker_id)
bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)
{
- if (mVoiceType != VC_LOCAL_CHAT)
- return true;
+ bool is_valid = true;
+ switch (mVoiceType)
+ {
+ case VC_LOCAL_CHAT:
+ {
+ // A nearby chat speaker is considered valid it it's known to LLVoiceClient (i.e. has enabled voice).
+ std::vector<LLUUID> speakers;
+ get_voice_participants_uuids(speakers);
+ is_valid = std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end();
+ }
+ break;
+ case VC_GROUP_CHAT:
+ // if participant had left this call before do not allow add her again. See EXT-4216.
+ // but if she Join she will be added into the list from the LLCallFloater::onChange()
+ is_valid = STATE_LEFT != getState(speaker_id);
+ break;
+ default:
+ // do nothing. required for Linux build
+ break;
+ }
- // A nearby chat speaker is considered valid it it's known to LLVoiceClient (i.e. has enabled voice).
- std::vector<LLUUID> speakers;
- get_voice_participants_uuids(speakers);
- return std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end();
+ return is_valid;
}
void LLCallFloater::connectToChannel(LLVoiceChannel* channel)
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index 442dc660cd..b32a955038 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -48,7 +48,6 @@
#include "llcombobox.h"
#include "llcommandhandler.h" // secondlife:///app/chat/ support
#include "llviewercontrol.h"
-#include "llfloaterchat.h"
#include "llgesturemgr.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
@@ -548,7 +547,7 @@ void LLChatBar::onInputEditorFocusLost()
// static
void LLChatBar::onInputEditorGainFocus()
{
- LLFloaterChat::setHistoryCursorAndScrollToEnd();
+ //LLFloaterChat::setHistoryCursorAndScrollToEnd();
}
void LLChatBar::onClickSay( LLUICtrl* ctrl )
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 2fc83c7e54..a46cd84b60 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -577,23 +577,17 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
view->reshape(target_rect.getWidth(), view->getRect().getHeight());
view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
- std::string header_text = "[" + chat.mTimeStr + "] ";
+ std::string widget_associated_text = "\n[" + chat.mTimeStr + "] ";
if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
- header_text += chat.mFromName + delimiter;
+ widget_associated_text += chat.mFromName + delimiter;
- mEditor->appendWidget(p, header_text, false);
+ mEditor->appendWidget(p, widget_associated_text, false);
mLastFromName = chat.mFromName;
mLastFromID = chat.mFromID;
mLastMessageTime = new_message_time;
}
std::string message = irc_me ? chat.mText.substr(3) : chat.mText;
- if ( message.size() > 0 && !LLStringOps::isSpace(message[message.size() - 1]) )
- {
- // Ensure that message ends with NewLine, to avoid losing of new lines
- // while copy/paste from text chat. See EXT-3263.
- message += NEW_LINE;
- }
mEditor->appendText(message, FALSE, style_params);
mEditor->blockUndo();
@@ -615,3 +609,11 @@ void LLChatHistory::draw()
LLUICtrl::draw();
}
+void LLChatHistory::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+ bool is_scrolled_to_end = mEditor->scrolledToEnd();
+ LLUICtrl::reshape( width, height, called_from_parent );
+ // update scroll
+ if (is_scrolled_to_end)
+ mEditor->setCursorAndScrollToEnd();
+}
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index 260015e2dc..f2d403f639 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -119,6 +119,7 @@ class LLChatHistory : public LLUICtrl
*/
void appendMessage(const LLChat& chat, const bool use_plain_text_chat_history = false, const LLStyle::Params& input_append_params = LLStyle::Params());
/*virtual*/ void clear();
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
private:
std::string mLastFromName;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 9ce3f29853..f7f7ee83af 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -168,27 +168,30 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
msg_text->setText(std::string(""));
- std::string str_sender;
-
- str_sender = fromName;
+ if ( notification["chat_style"].asInteger() != CHAT_STYLE_IRC )
+ {
+ std::string str_sender;
- str_sender+=" ";
+ str_sender = fromName;
- //append user name
- {
- LLStyle::Params style_params_name;
+ str_sender+=" ";
- LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor");
+ //append user name
+ {
+ LLStyle::Params style_params_name;
- style_params_name.color(userNameColor);
-
- std::string font_name = LLFontGL::nameFromFont(messageFont);
- std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
- style_params_name.font.name(font_name);
- style_params_name.font.size(font_style_size);
-
- msg_text->appendText(str_sender, FALSE, style_params_name);
-
+ LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor");
+
+ style_params_name.color(userNameColor);
+
+ std::string font_name = LLFontGL::nameFromFont(messageFont);
+ std::string font_style_size = LLFontGL::sizeFromFont(messageFont);
+ style_params_name.font.name(font_name);
+ style_params_name.font.size(font_style_size);
+
+ msg_text->appendText(str_sender, FALSE, style_params_name);
+
+ }
}
//append text
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index dc2e22f899..1d739f07b1 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -453,6 +453,7 @@ LLIMChiclet::LLIMChiclet(const LLIMChiclet::Params& p)
, mNewMessagesIcon(NULL)
, mSpeakerCtrl(NULL)
, mCounterCtrl(NULL)
+, mChicletButton(NULL)
{
enableCounterControl(p.enable_counter);
}
@@ -540,6 +541,11 @@ void LLIMChiclet::toggleSpeakerControl()
void LLIMChiclet::setCounter(S32 counter)
{
+ if (mCounterCtrl->getCounter() == counter)
+ {
+ return;
+ }
+
mCounterCtrl->setCounter(counter);
setShowCounter(counter);
setShowNewMessagesIcon(counter);
@@ -571,6 +577,11 @@ void LLIMChiclet::onMouseDown()
setCounter(0);
}
+void LLIMChiclet::setToggleState(bool toggle)
+{
+ mChicletButton->setToggleState(toggle);
+}
+
BOOL LLIMChiclet::handleMouseDown(S32 x, S32 y, MASK mask)
{
onMouseDown();
@@ -629,6 +640,7 @@ LLIMChiclet::EType LLIMChiclet::getIMSessionType(const LLUUID& session_id)
LLIMP2PChiclet::Params::Params()
: avatar_icon("avatar_icon")
+, chiclet_button("chiclet_button")
, unread_notifications("unread_notifications")
, speaker("speaker")
, new_message_icon("new_message_icon")
@@ -641,6 +653,10 @@ LLIMP2PChiclet::LLIMP2PChiclet(const Params& p)
, mChicletIconCtrl(NULL)
, mPopupMenu(NULL)
{
+ LLButton::Params button_params = p.chiclet_button;
+ mChicletButton = LLUICtrlFactory::create<LLButton>(button_params);
+ addChild(mChicletButton);
+
LLIconCtrl::Params new_msg_params = p.new_message_icon;
mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(new_msg_params);
addChild(mNewMessagesIcon);
@@ -755,6 +771,7 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data)
LLAdHocChiclet::Params::Params()
: avatar_icon("avatar_icon")
+, chiclet_button("chiclet_button")
, unread_notifications("unread_notifications")
, speaker("speaker")
, new_message_icon("new_message_icon")
@@ -768,6 +785,10 @@ LLAdHocChiclet::LLAdHocChiclet(const Params& p)
, mChicletIconCtrl(NULL)
, mPopupMenu(NULL)
{
+ LLButton::Params button_params = p.chiclet_button;
+ mChicletButton = LLUICtrlFactory::create<LLButton>(button_params);
+ addChild(mChicletButton);
+
LLIconCtrl::Params new_msg_params = p.new_message_icon;
mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(new_msg_params);
addChild(mNewMessagesIcon);
@@ -882,6 +903,7 @@ BOOL LLAdHocChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
LLIMGroupChiclet::Params::Params()
: group_icon("group_icon")
+, chiclet_button("chiclet_button")
, unread_notifications("unread_notifications")
, speaker("speaker")
, new_message_icon("new_message_icon")
@@ -895,6 +917,10 @@ LLIMGroupChiclet::LLIMGroupChiclet(const Params& p)
, mChicletIconCtrl(NULL)
, mPopupMenu(NULL)
{
+ LLButton::Params button_params = p.chiclet_button;
+ mChicletButton = LLUICtrlFactory::create<LLButton>(button_params);
+ addChild(mChicletButton);
+
LLIconCtrl::Params new_msg_params = p.new_message_icon;
mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(new_msg_params);
addChild(mNewMessagesIcon);
@@ -1271,6 +1297,7 @@ void LLChicletPanel::removeChiclet(chiclet_list_t::iterator it)
mChicletList.erase(it);
arrange();
+ (*it)->die();
}
void LLChicletPanel::removeChiclet(S32 index)
@@ -1409,6 +1436,32 @@ S32 LLChicletPanel::notifyParent(const LLSD& info)
return LLPanel::notifyParent(info);
}
+void LLChicletPanel::setChicletToggleState(const LLUUID& session_id, bool toggle)
+{
+ if(session_id.isNull())
+ {
+ llwarns << "Null Session ID" << llendl;
+ }
+
+ // toggle off all chiclets, except specified
+ S32 size = getChicletCount();
+ for(int n = 0; n < size; ++n)
+ {
+ LLIMChiclet* chiclet = getChiclet<LLIMChiclet>(n);
+ if(chiclet && chiclet->getSessionId() != session_id)
+ {
+ chiclet->setToggleState(false);
+ }
+ }
+
+ // toggle specified chiclet
+ LLIMChiclet* chiclet = findChiclet<LLIMChiclet>(session_id);
+ if(chiclet)
+ {
+ chiclet->setToggleState(toggle);
+ }
+}
+
void LLChicletPanel::arrange()
{
if(mChicletList.empty())
@@ -1801,6 +1854,7 @@ LLChicletSpeakerCtrl::LLChicletSpeakerCtrl(const Params&p)
LLScriptChiclet::Params::Params()
: icon("icon")
+ , chiclet_button("chiclet_button")
, new_message_icon("new_message_icon")
{
}
@@ -1809,6 +1863,10 @@ LLScriptChiclet::LLScriptChiclet(const Params&p)
: LLIMChiclet(p)
, mChicletIconCtrl(NULL)
{
+ LLButton::Params button_params = p.chiclet_button;
+ mChicletButton = LLUICtrlFactory::create<LLButton>(button_params);
+ addChild(mChicletButton);
+
LLIconCtrl::Params new_msg_params = p.new_message_icon;
mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(new_msg_params);
addChild(mNewMessagesIcon);
@@ -1857,6 +1915,7 @@ static const std::string INVENTORY_USER_OFFER ("UserGiveItem");
LLInvOfferChiclet::Params::Params()
: icon("icon")
+ , chiclet_button("chiclet_button")
, new_message_icon("new_message_icon")
{
}
@@ -1865,6 +1924,10 @@ LLInvOfferChiclet::LLInvOfferChiclet(const Params&p)
: LLIMChiclet(p)
, mChicletIconCtrl(NULL)
{
+ LLButton::Params button_params = p.chiclet_button;
+ mChicletButton = LLUICtrlFactory::create<LLButton>(button_params);
+ addChild(mChicletButton);
+
LLIconCtrl::Params new_msg_params = p.new_message_icon;
mNewMessagesIcon = LLUICtrlFactory::create<LLIconCtrl>(new_msg_params);
addChild(mNewMessagesIcon);
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index 3665e4d093..bb4846aa57 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -325,7 +325,7 @@ public:
};
- /*virtual*/ ~LLIMChiclet() {};
+ virtual ~LLIMChiclet() {};
/**
* Sets IM session name. This name will be displayed in chiclet tooltip.
@@ -422,6 +422,8 @@ public:
*/
virtual void onMouseDown();
+ virtual void setToggleState(bool toggle);
+
protected:
LLIMChiclet(const LLIMChiclet::Params& p);
@@ -438,7 +440,7 @@ protected:
LLIconCtrl* mNewMessagesIcon;
LLChicletNotificationCounterCtrl* mCounterCtrl;
LLChicletSpeakerCtrl* mSpeakerCtrl;
-
+ LLButton* mChicletButton;
/** the id of another participant, either an avatar id or a group id*/
LLUUID mOtherParticipantId;
@@ -473,6 +475,8 @@ class LLIMP2PChiclet : public LLIMChiclet
public:
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
{
+ Optional<LLButton::Params> chiclet_button;
+
Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
@@ -538,6 +542,8 @@ class LLAdHocChiclet : public LLIMChiclet
public:
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
{
+ Optional<LLButton::Params> chiclet_button;
+
Optional<LLChicletAvatarIconCtrl::Params> avatar_icon;
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
@@ -614,6 +620,8 @@ public:
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
{
+ Optional<LLButton::Params> chiclet_button;
+
Optional<LLIconCtrl::Params> icon;
Optional<LLIconCtrl::Params> new_message_icon;
@@ -656,6 +664,8 @@ public:
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
{
+ Optional<LLButton::Params> chiclet_button;
+
Optional<LLChicletInvOfferIconCtrl::Params> icon;
Optional<LLIconCtrl::Params> new_message_icon;
@@ -697,6 +707,8 @@ public:
struct Params : public LLInitParam::Block<Params, LLIMChiclet::Params>
{
+ Optional<LLButton::Params> chiclet_button;
+
Optional<LLChicletGroupIconCtrl::Params> group_icon;
Optional<LLChicletNotificationCounterCtrl::Params> unread_notifications;
@@ -1040,6 +1052,11 @@ public:
S32 notifyParent(const LLSD& info);
+ /**
+ * Toggle chiclet by session id ON and toggle OFF all other chiclets.
+ */
+ void setChicletToggleState(const LLUUID& session_id, bool toggle);
+
protected:
LLChicletPanel(const Params&p);
friend class LLUICtrlFactory;
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index eb9a2fec2f..72074955d1 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -59,7 +59,6 @@
#include "llbutton.h"
#include "lldir.h"
-#include "llfloaterchat.h"
#include "llnotificationsutil.h"
#include "llviewerstats.h"
#include "llvfile.h"
@@ -447,14 +446,10 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
{
- LLChat chat(LLTrans::getString("CompileQueueScriptNotFound"));
- LLFloaterChat::addChat(chat);
buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mScriptName;
}
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
{
- LLChat chat(LLTrans::getString("CompileQueueInsufficientPermDownload"));
- LLFloaterChat::addChat(chat);
buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mScriptName;
}
else
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 4103ccf175..fb94657278 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -483,6 +483,10 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
if (drop)
{
+ if (mItems.empty())
+ {
+ setLandingTab(NULL);
+ }
handleNewFavoriteDragAndDrop(item, favorites_id, x, y);
showDragMarker(FALSE);
}
@@ -508,14 +512,14 @@ void LLFavoritesBarCtrl::handleExistingFavoriteDragAndDrop(S32 x, S32 y)
if (dest)
{
- updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId());
+ LLInventoryModel::updateItemsOrder(mItems, mDragItemId, dest->getLandmarkId());
}
else
{
mItems.push_back(gInventory.getItem(mDragItemId));
}
- saveItemsOrder(mItems);
+ gInventory.saveItemsOrder(mItems);
LLToggleableMenu* menu = (LLToggleableMenu*) mPopupMenuHandle.get();
@@ -1193,25 +1197,6 @@ BOOL LLFavoritesBarCtrl::needToSaveItemsOrder(const LLInventoryModel::item_array
return result;
}
-void LLFavoritesBarCtrl::saveItemsOrder(LLInventoryModel::item_array_t& items)
-{
- int sortField = 0;
-
- // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
- for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
- {
- LLViewerInventoryItem* item = *i;
-
- item->setSortField(++sortField);
- item->setComplete(TRUE);
- item->updateServer(FALSE);
-
- gInventory.updateItem(item);
- }
-
- gInventory.notifyObservers();
-}
-
LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
{
LLInventoryModel::item_array_t::iterator result = items.end();
@@ -1228,15 +1213,6 @@ LLInventoryModel::item_array_t::iterator LLFavoritesBarCtrl::findItemByUUID(LLIn
return result;
}
-void LLFavoritesBarCtrl::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
-{
- LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
- LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
-
- items.erase(findItemByUUID(items, srcItem->getUUID()));
- items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
-}
-
void LLFavoritesBarCtrl::insertBeforeItem(LLInventoryModel::item_array_t& items, const LLUUID& beforeItemId, LLViewerInventoryItem* insertedItem)
{
LLViewerInventoryItem* beforeItem = gInventory.getItem(beforeItemId);
diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
index 9ac734baff..40dd551eef 100644
--- a/indra/newview/llfavoritesbar.h
+++ b/indra/newview/llfavoritesbar.h
@@ -126,16 +126,7 @@ private:
// checks if the current order of the favorites items must be saved
BOOL needToSaveItemsOrder(const LLInventoryModel::item_array_t& items);
- // saves current order of the favorites items
- void saveItemsOrder(LLInventoryModel::item_array_t& items);
-
- /*
- * changes favorites items order by insertion of the item identified by srcItemId
- * BEFORE the item identified by destItemId. both items must exist in items array.
- */
- void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId);
-
- /*
+ /**
* inserts an item identified by insertedItemId BEFORE an item identified by beforeItemId.
* this function assumes that an item identified by insertedItemId doesn't exist in items array.
*/
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 7fd0e070be..b3fdf60b11 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -45,6 +45,7 @@
#include "llappviewer.h"
#include "lltracker.h"
+/*
// static
std::set<std::string> LLFirstUse::sConfigVariables;
@@ -75,7 +76,8 @@ void LLFirstUse::resetFirstUse()
gWarningSettings.setBOOL(*iter, TRUE);
}
}
-
+*/
+/*
// Called whenever the viewer detects that your balance went up
void LLFirstUse::useBalanceIncrease(S32 delta)
@@ -145,6 +147,8 @@ void LLFirstUse::useBuild()
LLNotificationsUtil::add("FirstBuild");
}
}
+
+ */
/*
// static
void LLFirstUse::useLeftClickNoHit()
@@ -157,6 +161,7 @@ void LLFirstUse::useLeftClickNoHit()
}
}
*/
+/*
// static
void LLFirstUse::useTeleport()
{
@@ -171,7 +176,7 @@ void LLFirstUse::useTeleport()
}
}
}
-
+*/
// static
void LLFirstUse::useOverrideKeys()
{
@@ -187,7 +192,7 @@ void LLFirstUse::useOverrideKeys()
}
}
}
-
+/*
// static
void LLFirstUse::useAttach()
{
@@ -216,6 +221,7 @@ void LLFirstUse::useInventory()
}
}
+*/
// static
void LLFirstUse::useSandbox()
@@ -230,7 +236,7 @@ void LLFirstUse::useSandbox()
LLNotificationsUtil::add("FirstSandbox", args);
}
}
-
+/*
// static
void LLFirstUse::useFlexible()
{
@@ -277,3 +283,4 @@ void LLFirstUse::useMedia()
//LLNotificationsUtil::add("FirstMedia");
}
}
+*/
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 7b4f9f516f..3c7551f6cb 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -79,6 +79,7 @@ object or from inventory.
class LLFirstUse
{
public:
+/*
// Add a config variable to be reset on resetFirstUse()
static void addConfigVariable(const std::string& var);
@@ -97,11 +98,16 @@ public:
static void useBuild();
// static void useLeftClickNoHit();
static void useTeleport();
+*/
static void useOverrideKeys();
+/*
static void useAttach();
static void useAppearance();
static void useInventory();
+ */
static void useSandbox();
+
+/*
static void useFlexible();
static void useDebugMenus();
static void useSculptedPrim();
@@ -109,6 +115,7 @@ public:
protected:
static std::set<std::string> sConfigVariables;
+*/
};
#endif
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index 538b44c056..5c3a54e34b 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -48,7 +48,6 @@
#include "llresmgr.h"
#include "llbutton.h"
#include "lldir.h"
-#include "llfloaterchat.h"
#include "llviewerstats.h"
#include "lluictrlfactory.h"
#include "llselectmgr.h"
diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp
index 18b9f0484f..c24c224133 100644
--- a/indra/newview/llfloaterchat.cpp
+++ b/indra/newview/llfloaterchat.cpp
@@ -37,8 +37,6 @@
#include "llviewerprecompiledheaders.h"
-#include "llfloaterchat.h"
-
// project include
#include "llagent.h"
#include "llappviewer.h"
diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp
index 9108cfb72b..84b423399e 100644
--- a/indra/newview/llfloaterchatterbox.cpp
+++ b/indra/newview/llfloaterchatterbox.cpp
@@ -38,7 +38,6 @@
#include "llfloaterreg.h"
#include "llfloaterchatterbox.h"
#include "lluictrlfactory.h"
-#include "llfloaterchat.h"
#include "llfloaterfriends.h"
#include "llfloatergroups.h"
#include "llviewercontrol.h"
@@ -134,22 +133,6 @@ BOOL LLFloaterChatterBox::postBuild()
addFloater(LLFloaterMyFriends::getInstance(), TRUE);
}
- if (gSavedSettings.getBOOL("ChatHistoryTornOff"))
- {
- LLFloaterChat* floater_chat = LLFloaterChat::getInstance();
- if(floater_chat)
- {
- // add then remove to set up relationship for re-attach
- addFloater(floater_chat, FALSE);
- removeFloater(floater_chat);
- // reparent to floater view
- gFloaterView->addChild(floater_chat);
- }
- }
- else
- {
- addFloater(LLFloaterChat::getInstance(), FALSE);
- }
mTabContainer->lockTabs();
return TRUE;
}
@@ -230,8 +213,6 @@ void LLFloaterChatterBox::onOpen(const LLSD& key)
//*TODO:Skinning show the session id associated with key
if (key.asString() == "local")
{
- LLFloaterChat* chat = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat");
- chat->openFloater();
}
else if (key.isDefined())
{
@@ -245,12 +226,6 @@ void LLFloaterChatterBox::onOpen(const LLSD& key)
void LLFloaterChatterBox::onVisibilityChange ( const LLSD& new_visibility )
{
- // HACK: potentially need to toggle console
- LLFloaterChat* instance = LLFloaterChat::getInstance();
- if(instance)
- {
- instance->updateConsoleVisibility();
- }
}
void LLFloaterChatterBox::removeFloater(LLFloater* floaterp)
@@ -349,8 +324,7 @@ LLFloater* LLFloaterChatterBox::getCurrentVoiceFloater()
}
if (LLVoiceChannelProximal::getInstance() == LLVoiceChannel::getCurrentVoiceChannel())
{
- // show near me tab if in proximal channel
- return LLFloaterChat::getInstance();
+ return NULL;
}
else
{
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 6a9c602db2..de65c6f876 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -110,7 +110,7 @@ LLFloaterGesture::LLFloaterGesture(const LLSD& key)
mCommitCallbackRegistrar.add("Gesture.Action.ToogleActiveState", boost::bind(&LLFloaterGesture::onActivateBtnClick, this));
mCommitCallbackRegistrar.add("Gesture.Action.ShowPreview", boost::bind(&LLFloaterGesture::onClickEdit, this));
- mCommitCallbackRegistrar.add("Gesture.Action.CopyPast", boost::bind(&LLFloaterGesture::onCopyPastAction, this, _2));
+ mCommitCallbackRegistrar.add("Gesture.Action.CopyPaste", boost::bind(&LLFloaterGesture::onCopyPasteAction, this, _2));
mCommitCallbackRegistrar.add("Gesture.Action.SaveToCOF", boost::bind(&LLFloaterGesture::addToCurrentOutFit, this));
mEnableCallbackRegistrar.add("Gesture.EnableAction", boost::bind(&LLFloaterGesture::isActionEnabled, this, _2));
@@ -245,6 +245,7 @@ void LLFloaterGesture::refreshAll()
void LLFloaterGesture::buildGestureList()
{
+ S32 scroll_pos = mGestureList->getScrollPos();
std::vector<LLUUID> selected_items;
getSelectedIds(selected_items);
LL_DEBUGS("Gesture")<< "Rebuilding gesture list "<< LL_ENDL;
@@ -274,13 +275,14 @@ void LLFloaterGesture::buildGestureList()
}
}
}
+
// attempt to preserve scroll position through re-builds
- // since we do re-build any time anything dirties
+ // since we do re-build whenever something gets dirty
for(std::vector<LLUUID>::iterator it = selected_items.begin(); it != selected_items.end(); it++)
{
mGestureList->selectByID(*it);
}
- mGestureList->scrollToShowSelected();
+ mGestureList->setScrollPos(scroll_pos);
}
void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gesture,LLCtrlListInterface * list )
@@ -475,7 +477,7 @@ void LLFloaterGesture::onActivateBtnClick()
}
}
-void LLFloaterGesture::onCopyPastAction(const LLSD& command)
+void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
{
std::string command_name = command.asString();
// since we select this comman inventory item had already arrived .
diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h
index 14e132900d..629d77b949 100644
--- a/indra/newview/llfloatergesture.h
+++ b/indra/newview/llfloatergesture.h
@@ -99,7 +99,7 @@ private:
void onClickPlay();
void onClickNew();
void onCommitList();
- void onCopyPastAction(const LLSD& command);
+ void onCopyPasteAction(const LLSD& command);
void onDeleteSelected();
LLUUID mSelectedID;
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
index 76c0a7637c..e62e2c99a7 100644
--- a/indra/newview/llfloaterinventory.cpp
+++ b/indra/newview/llfloaterinventory.cpp
@@ -35,7 +35,7 @@
#include "llfloaterinventory.h"
#include "llagent.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterreg.h"
#include "llinventorymodel.h"
#include "llpanelmaininventory.h"
@@ -135,5 +135,5 @@ void LLFloaterInventory::cleanup()
void LLFloaterInventory::onOpen(const LLSD& key)
{
- LLFirstUse::useInventory();
+ //LLFirstUse::useInventory();
}
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
index 5cfd56193e..976af121ae 100644
--- a/indra/newview/llfloatermediasettings.cpp
+++ b/indra/newview/llfloatermediasettings.cpp
@@ -192,6 +192,9 @@ void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editab
sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues );
sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues );
sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );
+
+ sInstance->mApplyBtn->setEnabled(editable);
+ sInstance->mOKBtn->setEnabled(editable);
}
////////////////////////////////////////////////////////////////////////////////
@@ -266,8 +269,11 @@ const std::string LLFloaterMediaSettings::getHomeUrl()
// virtual
void LLFloaterMediaSettings::draw()
{
- // Set the enabled state of the "Apply" button if values changed
- childSetEnabled( "Apply", haveValuesChanged() );
+ if (NULL != mApplyBtn)
+ {
+ // Set the enabled state of the "Apply" button if values changed
+ mApplyBtn->setEnabled( haveValuesChanged() );
+ }
LLFloater::draw();
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 9af37e8174..fc036cb354 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -51,7 +51,7 @@
#include "lldirpicker.h"
#include "llfeaturemanager.h"
#include "llfocusmgr.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterreg.h"
#include "llfloaterabout.h"
#include "llfloaterhardwaresettings.h"
@@ -185,8 +185,8 @@ void handleNameTagOptionChanged(const LLSD& newvalue);
viewer_media_t get_web_media();
bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response);
-bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
-bool callback_reset_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
+//bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
+//bool callback_reset_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater);
void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
@@ -236,7 +236,7 @@ void handleNameTagOptionChanged(const LLSD& newvalue)
}
}
-bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
+/*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
{
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (0 == option && floater )
@@ -244,7 +244,7 @@ bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFlo
if ( floater )
{
floater->setAllIgnored();
- LLFirstUse::disableFirstUse();
+ // LLFirstUse::disableFirstUse();
floater->buildPopupLists();
}
}
@@ -259,13 +259,13 @@ bool callback_reset_dialogs(const LLSD& notification, const LLSD& response, LLFl
if ( floater )
{
floater->resetAllIgnored();
- LLFirstUse::resetFirstUse();
+ //LLFirstUse::resetFirstUse();
floater->buildPopupLists();
}
}
return false;
}
-
+*/
void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator)
{
@@ -313,8 +313,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.SelectSkin", boost::bind(&LLFloaterPreference::onSelectSkin, this));
mCommitCallbackRegistrar.add("Pref.VoiceSetKey", boost::bind(&LLFloaterPreference::onClickSetKey, this));
mCommitCallbackRegistrar.add("Pref.VoiceSetMiddleMouse", boost::bind(&LLFloaterPreference::onClickSetMiddleMouse, this));
- mCommitCallbackRegistrar.add("Pref.ClickSkipDialogs", boost::bind(&LLFloaterPreference::onClickSkipDialogs, this));
- mCommitCallbackRegistrar.add("Pref.ClickResetDialogs", boost::bind(&LLFloaterPreference::onClickResetDialogs, this));
+// mCommitCallbackRegistrar.add("Pref.ClickSkipDialogs", boost::bind(&LLFloaterPreference::onClickSkipDialogs, this));
+// mCommitCallbackRegistrar.add("Pref.ClickResetDialogs", boost::bind(&LLFloaterPreference::onClickResetDialogs, this));
mCommitCallbackRegistrar.add("Pref.ClickEnablePopup", boost::bind(&LLFloaterPreference::onClickEnablePopup, this));
mCommitCallbackRegistrar.add("Pref.ClickDisablePopup", boost::bind(&LLFloaterPreference::onClickDisablePopup, this));
mCommitCallbackRegistrar.add("Pref.LogPath", boost::bind(&LLFloaterPreference::onClickLogPath, this));
@@ -326,6 +326,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this));
mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable", boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this));
+ mCommitCallbackRegistrar.add("Pref.MediaEnabled", boost::bind(&LLFloaterPreference::onCommitMediaEnabled, this));
mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this));
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
@@ -994,16 +995,18 @@ void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable()
gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, autoplay);
lldebugs << "autoplay now = " << int(autoplay) << llendl;
+}
- if (autoplay)
- {
- // autoplay toggle has gone from FALSE to TRUE; ensure that
- // the media system is thus actually turned on too.
- gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
- gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
- gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
- llinfos << "autoplay turned on, turned all media subsystems on" << llendl;
- }
+void LLFloaterPreference::onCommitMediaEnabled()
+{
+ LLCheckBoxCtrl *media_enabled_ctrl = getChild<LLCheckBoxCtrl>("media_enabled");
+ bool enabled = media_enabled_ctrl->get();
+ gSavedSettings.setBOOL("AudioStreamingVideo", enabled);
+ gSavedSettings.setBOOL("AudioStreamingMusic", enabled);
+ gSavedSettings.setBOOL("AudioStreamingMedia", enabled);
+ media_enabled_ctrl->setTentative(false);
+ // Update enabled state of the "autoplay" checkbox
+ getChild<LLCheckBoxCtrl>("autoplay_enabled")->setEnabled(enabled);
}
void LLFloaterPreference::refresh()
@@ -1070,7 +1073,7 @@ void LLFloaterPreference::onClickSetMiddleMouse()
// update the control right away since we no longer wait for apply
getChild<LLUICtrl>("modifier_combo")->onCommit();
}
-
+/*
void LLFloaterPreference::onClickSkipDialogs()
{
LLNotificationsUtil::add("SkipShowNextTimeDialogs", LLSD(), LLSD(), boost::bind(&callback_skip_dialogs, _1, _2, this));
@@ -1080,6 +1083,7 @@ void LLFloaterPreference::onClickResetDialogs()
{
LLNotificationsUtil::add("ResetShowNextTimeDialogs", LLSD(), LLSD(), boost::bind(&callback_reset_dialogs, _1, _2, this));
}
+ */
void LLFloaterPreference::onClickEnablePopup()
{
@@ -1419,6 +1423,20 @@ BOOL LLPanelPreference::postBuild()
refresh();
}
+ //////////////////////PanelPrivacy ///////////////////
+ if(hasChild("media_enabled"))
+ {
+ bool video_enabled = gSavedSettings.getBOOL("AudioStreamingVideo");
+ bool music_enabled = gSavedSettings.getBOOL("AudioStreamingMusic");
+ bool media_enabled = gSavedSettings.getBOOL("AudioStreamingMedia");
+ bool enabled = video_enabled || music_enabled || media_enabled;
+
+ LLCheckBoxCtrl *media_enabled_ctrl = getChild<LLCheckBoxCtrl>("media_enabled");
+ media_enabled_ctrl->set(enabled);
+ media_enabled_ctrl->setTentative(!(video_enabled == music_enabled == media_enabled));
+ getChild<LLCheckBoxCtrl>("autoplay_enabled")->setEnabled(enabled);
+ }
+
apply();
return true;
}
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index b2bc34231d..6f382620ee 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -110,8 +110,8 @@ public:
void onClickSetKey();
void setKey(KEY key);
void onClickSetMiddleMouse();
- void onClickSkipDialogs();
- void onClickResetDialogs();
+// void onClickSkipDialogs();
+// void onClickResetDialogs();
void onClickEnablePopup();
void onClickDisablePopup();
void resetAllIgnored();
@@ -133,6 +133,7 @@ public:
void onCommitAutoDetectAspect();
void onCommitParcelMediaAutoPlayEnable();
+ void onCommitMediaEnabled();
void applyResolution();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 0402ba20e2..03ff2cc370 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -1603,7 +1603,7 @@ std::string all_estates_text()
}
else if (region && region->getOwner() == gAgent.getID())
{
- return LLTrans::getString("AllEstatesYouOwn");
+ return LLTrans::getString("RegionInfoAllEstatesYouOwn");
}
else if (region && region->isEstateManager())
{
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
index 8979575ef7..a6ffa5ec09 100644
--- a/indra/newview/llfloatersettingsdebug.cpp
+++ b/indra/newview/llfloatersettingsdebug.cpp
@@ -34,7 +34,7 @@
#include "llfloatersettingsdebug.h"
#include "llfloater.h"
#include "lluictrlfactory.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llcombobox.h"
#include "llspinctrl.h"
#include "llcolorswatch.h"
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index f53b62e490..afb58c9407 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2078,8 +2078,10 @@ void LLFloaterSnapshot::draw()
{
if(previewp->getThumbnailImage())
{
+ LLRect thumbnail_rect = getChild<LLUICtrl>("thumbnail_placeholder")->getRect();
+
S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;
- S32 offset_y = getRect().getHeight() - 205 + (90 - previewp->getThumbnailHeight()) / 2 ;
+ S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
glMatrixMode(GL_MODELVIEW);
gl_draw_scaled_image(offset_x, offset_y,
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 1287e14961..241497aeaf 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -1134,7 +1134,8 @@ void LLFloaterTools::getMediaState()
}
// XXX DISABLE this for now, because when the fetch finally
// does come in, the state of this floater doesn't properly
- // update. This needs more thought.
+ // update. Re-selecting fixes the problem, but there is
+ // contention as to whether this is a sufficient solution.
// if (object->isMediaDataBeingFetched())
// {
// LL_INFOS("LLFloaterTools: media")
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 0781d8ed06..f4d4ea3553 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -47,7 +47,7 @@
#include "llviewercontrol.h"
#include "llcommandhandler.h"
#include "lldraghandle.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterreg.h" // getTypedInstance()
#include "llfocusmgr.h"
#include "llinventorymodel.h"
@@ -116,9 +116,12 @@ public:
{
if (params.size() == 0)
{
- return false;
+ // support the secondlife:///app/worldmap SLapp
+ LLFloaterReg::showInstance("world_map", "center");
+ return true;
}
+ // support the secondlife:///app/worldmap/{LOCATION}/{COORDS} SLapp
const std::string region_name = params[0].asString();
S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
@@ -314,7 +317,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
adjustZoomSliderBounds();
// Could be first show
- LLFirstUse::useMap();
+ //LLFirstUse::useMap();
// Start speculative download of landmarks
const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 9aed403991..a63fb73032 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -78,7 +78,7 @@
///----------------------------------------------------------------------------
const S32 RENAME_WIDTH_PAD = 4;
-const S32 RENAME_HEIGHT_PAD = 2;
+const S32 RENAME_HEIGHT_PAD = 1;
const S32 AUTO_OPEN_STACK_DEPTH = 16;
const S32 MIN_ITEM_WIDTH_VISIBLE = LLFolderViewItem::ICON_WIDTH
+ LLFolderViewItem::ICON_PAD
@@ -1885,8 +1885,8 @@ void LLFolderView::scrollToShowItem(LLFolderViewItem* item, const LLRect& constr
S32 icon_height = mIcon.isNull() ? 0 : mIcon->getHeight();
S32 label_height = llround(getLabelFontForStyle(mLabelStyle)->getLineHeight());
- // when navigating with keyboard, only move top of folders on screen, otherwise show whole folder
- S32 max_height_to_show = mScrollContainer->hasFocus() ? (llmax( icon_height, label_height ) + ICON_PAD) : local_rect.getHeight();
+ // when navigating with keyboard, only move top of opened folder on screen, otherwise show whole folder
+ S32 max_height_to_show = item->isOpen() && mScrollContainer->hasFocus() ? (llmax( icon_height, label_height ) + ICON_PAD) : local_rect.getHeight();
// get portion of item that we want to see...
LLRect item_local_rect = LLRect(item->getIndentation(),
@@ -2221,10 +2221,9 @@ void LLFolderView::updateRenamerPosition()
{
if(mRenameItem)
{
- LLFontGL* font = getLabelFontForStyle(mLabelStyle);
-
- S32 x = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD - 1 + mRenameItem->getIndentation();
- S32 y = llfloor(mRenameItem->getRect().getHeight() - font->getLineHeight()-2);
+ // See also LLFolderViewItem::draw()
+ S32 x = ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mRenameItem->getIndentation();
+ S32 y = mRenameItem->getRect().getHeight() - mRenameItem->getItemHeight() - RENAME_HEIGHT_PAD;
mRenameItem->localPointToScreen( x, y, &x, &y );
screenPointToLocal( x, y, &x, &y );
mRenamer->setOrigin( x, y );
@@ -2236,7 +2235,7 @@ void LLFolderView::updateRenamerPosition()
}
S32 width = llmax(llmin(mRenameItem->getRect().getWidth() - x, scroller_rect.getWidth() - x - getRect().mLeft), MINIMUM_RENAMER_WIDTH);
- S32 height = llfloor(font->getLineHeight() + RENAME_HEIGHT_PAD);
+ S32 height = mRenameItem->getItemHeight() - RENAME_HEIGHT_PAD;
mRenamer->reshape( width, height, TRUE );
}
}
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 2363f51d80..4b48626b22 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -855,6 +855,7 @@ void LLFolderViewItem::draw()
ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, arrow_image->getImage(), sFgColor);
}
+ // See also LLFolderView::updateRenamerPosition()
F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation);
LLFontGL* font = getLabelFontForStyle(mLabelStyle);
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index aee34eb0af..d7c60ff34e 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -42,7 +42,6 @@
#include "llbottomtray.h"
#include "llchannelmanager.h"
#include "llchiclet.h"
-#include "llfloaterchat.h"
#include "llfloaterreg.h"
#include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
#include "lllayoutstack.h"
@@ -115,6 +114,8 @@ LLIMFloater::LLIMFloater(const LLUUID& session_id)
void LLIMFloater::onFocusLost()
{
LLIMModel::getInstance()->resetActiveSessionID();
+
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, false);
}
void LLIMFloater::onFocusReceived()
@@ -126,6 +127,8 @@ void LLIMFloater::onFocusReceived()
{
mInputEditor->setFocus(TRUE);
}
+
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true);
}
// virtual
@@ -490,6 +493,15 @@ void LLIMFloater::setVisible(BOOL visible)
updateMessages();
mInputEditor->setFocus(TRUE);
}
+
+ if(!visible)
+ {
+ LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(mSessionID);
+ if(chiclet)
+ {
+ chiclet->setToggleState(false);
+ }
+ }
}
//static
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 029ddbaf2c..9a6115dd63 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -59,7 +59,6 @@
#include "llinventory.h"
#include "llinventorymodel.h"
#include "llfloaterinventory.h"
-#include "llfloaterchat.h"
#include "lliconctrl.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e9661003ea..6064415a10 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -51,7 +51,6 @@
#include "llchat.h"
#include "llchiclet.h"
#include "llresmgr.h"
-#include "llfloaterchat.h"
#include "llfloaterchatterbox.h"
#include "llavataractions.h"
#include "llhttpnode.h"
@@ -80,7 +79,7 @@
#include "llrecentpeople.h"
#include "llsyswellwindow.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llagentui.h"
#include "lltextutil.h"
@@ -2236,7 +2235,6 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess
LLChat chat(message);
chat.mSourceType = CHAT_SOURCE_SYSTEM;
- LLFloaterChat::addChatHistory(chat);
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
if(nearby_chat)
@@ -2404,7 +2402,9 @@ LLUUID LLIMMgr::addSession(
//we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions
if (!new_session) return session_id;
- noteOfflineUsers(session_id, floater, ids);
+ //Per Plan's suggestion commented "explicit offline status warning" out to make Dessie happier (see EXT-3609)
+ //*TODO After February 2010 remove this commented out line if no one will be missing that warning
+ //noteOfflineUsers(session_id, floater, ids);
// Only warn for regular IMs - not group IMs
if( dialog == IM_NOTHING_SPECIAL )
@@ -3136,9 +3136,6 @@ public:
ll_vector3_from_sd(message_params["position"]),
true);
- chat.mText = std::string("IM: ") + name + separator_string + saved + message;
- LLFloaterChat::addChat(chat, TRUE, is_this_agent);
-
//K now we want to accept the invitation
std::string url = gAgent.getRegion()->getCapability(
"ChatSessionRequest");
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 20d7f5214b..099f863dc9 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2448,7 +2448,7 @@ void LLFolderBridge::folderOptionsMenu()
const LLInventoryCategory* category = model->getCategory(mUUID);
LLFolderType::EType type = category->getPreferredType();
- const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type);
+ const bool is_system_folder = category && LLFolderType::lookupIsProtectedType(type);
// BAP change once we're no longer treating regular categories as ensembles.
const bool is_ensemble = category && (type == LLFolderType::FT_NONE ||
LLFolderType::lookupIsEnsembleType(type));
@@ -2462,8 +2462,8 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back("Delete");
}
- // Only enable calling-card related options for non-default folders.
- if (!is_sidepanel && !is_default_folder)
+ // Only enable calling-card related options for non-system folders.
+ if (!is_sidepanel && !is_system_folder)
{
LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
@@ -2497,10 +2497,14 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back(std::string("Folder Wearables Separator"));
}
- // Only enable add/replace outfit for non-default folders.
- if (!is_default_folder)
+ // Only enable add/replace outfit for non-system folders.
+ if (!is_system_folder)
{
- mItems.push_back(std::string("Add To Outfit"));
+ // Adding an outfit onto another (versus replacing) doesn't make sense.
+ if (type != LLFolderType::FT_OUTFIT)
+ {
+ mItems.push_back(std::string("Add To Outfit"));
+ }
mItems.push_back(std::string("Replace Outfit"));
}
if (is_ensemble)
@@ -2927,80 +2931,6 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
return false;
}
-/*
-Next functions intended to reorder items in the inventory folder and save order on server
-Is now used for Favorites folder.
-
-*TODO: refactoring is needed with Favorites Bar functionality. Probably should be moved in LLInventoryModel
-*/
-void saveItemsOrder(LLInventoryModel::item_array_t& items)
-{
- int sortField = 0;
-
- // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
- for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
- {
- LLViewerInventoryItem* item = *i;
-
- item->setSortField(++sortField);
- item->setComplete(TRUE);
- item->updateServer(FALSE);
-
- gInventory.updateItem(item);
-
- // Tell the parent folder to refresh its sort order.
- gInventory.addChangedMask(LLInventoryObserver::SORT, item->getParentUUID());
- }
-
- gInventory.notifyObservers();
-}
-
-LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_array_t& items, const LLUUID& id)
-{
- LLInventoryModel::item_array_t::iterator result = items.end();
-
- for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
- {
- if ((*i)->getUUID() == id)
- {
- result = i;
- break;
- }
- }
-
- return result;
-}
-
-// See also LLInventorySort where landmarks in the Favorites folder are sorted.
-class LLViewerInventoryItemSort
-{
-public:
- bool operator()(const LLPointer<LLViewerInventoryItem>& a, const LLPointer<LLViewerInventoryItem>& b)
- {
- return a->getSortField() < b->getSortField();
- }
-};
-
-/**
- * Sorts passed items by LLViewerInventoryItem sort field.
- *
- * @param[in, out] items - array of items, not sorted.
- */
-void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)
-{
- static LLViewerInventoryItemSort sort_functor;
- std::sort(items.begin(), items.end(), sort_functor);
-}
-
-void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
-{
- LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
- LLViewerInventoryItem* destItem = gInventory.getItem(destItemId);
-
- items.erase(findItemByUUID(items, srcItem->getUUID()));
- items.insert(findItemByUUID(items, destItem->getUUID()), srcItem);
-}
-
BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
BOOL drop)
{
@@ -3083,36 +3013,34 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// if dragging from/into favorites folder only reorder items
if ((mUUID == inv_item->getParentUUID()) && folder_allows_reorder)
{
- LLInventoryModel::cat_array_t cats;
- LLInventoryModel::item_array_t items;
- LLIsType is_type(LLAssetType::AT_LANDMARK);
- model->collectDescendentsIf(mUUID, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
-
LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
if (itemp)
{
LLUUID srcItemId = inv_item->getUUID();
LLUUID destItemId = itemp->getListener()->getUUID();
-
- // ensure items are sorted properly before changing order. EXT-3498
- rearrange_item_order_by_sort_field(items);
-
- // update order
- updateItemsOrder(items, srcItemId, destItemId);
-
- saveItemsOrder(items);
+ gInventory.rearrangeFavoriteLandmarks(srcItemId, destItemId);
}
}
else if (favorites_id == mUUID) // if target is the favorites folder we use copy
{
+ // use callback to rearrange favorite landmarks after adding
+ // to have new one placed before target (on which it was dropped). See EXT-4312.
+ LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback();
+ LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
+ LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
+ if (drag_over_item && drag_over_item->getListener())
+ {
+ cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID());
+ }
+
copy_inventory_item(
gAgent.getID(),
inv_item->getPermissions().getOwner(),
inv_item->getUUID(),
mUUID,
std::string(),
- LLPointer<LLInventoryCallback>(NULL));
+ cb);
}
else if (move_is_into_current_outfit || move_is_into_outfit)
{
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 8f4136c01f..2885ba13fa 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -50,8 +50,7 @@
// newview includes
#include "llappearancemgr.h"
#include "llappviewer.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
+//#include "llfirstuse.h"
#include "llfloatercustomize.h"
#include "llfocusmgr.h"
#include "llfolderview.h"
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index a468a9a95c..e44adfb511 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1994,9 +1994,9 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
descendents_actual += update.mDescendentDelta;
cat->setDescendentCount(descendents_actual);
cat->setVersion(++version);
- llinfos << "accounted: '" << cat->getName() << "' "
- << version << " with " << descendents_actual
- << " descendents." << llendl;
+ lldebugs << "accounted: '" << cat->getName() << "' "
+ << version << " with " << descendents_actual
+ << " descendents." << llendl;
}
}
if(!accounted)
@@ -3622,6 +3622,98 @@ BOOL LLInventoryModel::getIsFirstTimeInViewer2()
return sFirstTimeInViewer2;
}
+static LLInventoryModel::item_array_t::iterator find_item_iter_by_uuid(LLInventoryModel::item_array_t& items, const LLUUID& id)
+{
+ LLInventoryModel::item_array_t::iterator result = items.end();
+
+ for (LLInventoryModel::item_array_t::iterator i = items.begin(); i != items.end(); ++i)
+ {
+ if ((*i)->getUUID() == id)
+ {
+ result = i;
+ break;
+ }
+ }
+
+ return result;
+}
+
+// static
+void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id)
+{
+ LLInventoryModel::item_array_t::iterator it_src = find_item_iter_by_uuid(items, src_item_id);
+ LLInventoryModel::item_array_t::iterator it_dest = find_item_iter_by_uuid(items, dest_item_id);
+
+ if (it_src == items.end() || it_dest == items.end()) return;
+
+ LLViewerInventoryItem* src_item = *it_src;
+ items.erase(it_src);
+
+ // target iterator can not be valid because the container was changed, so update it.
+ it_dest = find_item_iter_by_uuid(items, dest_item_id);
+ items.insert(it_dest, src_item);
+}
+
+void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
+{
+ int sortField = 0;
+
+ // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
+ for (item_array_t::const_iterator i = items.begin(); i != items.end(); ++i)
+ {
+ LLViewerInventoryItem* item = *i;
+
+ item->setSortField(++sortField);
+ item->setComplete(TRUE);
+ item->updateServer(FALSE);
+
+ updateItem(item);
+
+ // Tell the parent folder to refresh its sort order.
+ addChangedMask(LLInventoryObserver::SORT, item->getParentUUID());
+ }
+
+ notifyObservers();
+}
+
+// See also LLInventorySort where landmarks in the Favorites folder are sorted.
+class LLViewerInventoryItemSort
+{
+public:
+ bool operator()(const LLPointer<LLViewerInventoryItem>& a, const LLPointer<LLViewerInventoryItem>& b)
+ {
+ return a->getSortField() < b->getSortField();
+ }
+};
+
+/**
+ * Sorts passed items by LLViewerInventoryItem sort field.
+ *
+ * @param[in, out] items - array of items, not sorted.
+ */
+static void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)
+{
+ static LLViewerInventoryItemSort sort_functor;
+ std::sort(items.begin(), items.end(), sort_functor);
+}
+
+void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
+{
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLIsType is_type(LLAssetType::AT_LANDMARK);
+ LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
+ gInventory.collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
+
+ // ensure items are sorted properly before changing order. EXT-3498
+ rearrange_item_order_by_sort_field(items);
+
+ // update order
+ updateItemsOrder(items, source_item_id, target_item_id);
+
+ saveItemsOrder(items);
+}
+
//----------------------------------------------------------------------------
// *NOTE: DEBUG functionality
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 39377b4ae2..2a2b48ce3c 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -384,6 +384,39 @@ public:
void setLibraryOwnerID(const LLUUID& id);
void setLibraryRootFolderID(const LLUUID& id);
+
+ /**
+ * Changes items order by insertion of the item identified by src_item_id
+ * BEFORE the item identified by dest_item_id. Both items must exist in items array.
+ *
+ * Sorting is stored after method is finished. Only src_item_id is moved before dest_item_id.
+ *
+ * @param[in, out] items - vector with items to be updated. It should be sorted in a right way
+ * before calling this method.
+ * @param src_item_id - LLUUID of inventory item to be moved in new position
+ * @param dest_item_id - LLUUID of inventory item before which source item should be placed.
+ */
+ static void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& src_item_id, const LLUUID& dest_item_id);
+
+ /**
+ * Saves current order of the passed items using inventory item sort field.
+ *
+ * It reset items' sort fields and saves them on server.
+ * Is used to save order for Favorites folder.
+ *
+ * @param[in] items vector of items in order to be saved.
+ */
+ void saveItemsOrder(const LLInventoryModel::item_array_t& items);
+
+ /**
+ * Rearranges Landmarks inside Favorites folder.
+ * Moves source landmark before target one.
+ *
+ * @param source_item_id - LLUUID of the source item to be moved into new position
+ * @param target_item_id - LLUUID of the target item before which source item should be placed.
+ */
+ void rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id);
+
protected:
// Internal methods which add inventory and make sure that all of
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
index d910dbf718..ae1b8f8540 100644
--- a/indra/newview/lllocationhistory.cpp
+++ b/indra/newview/lllocationhistory.cpp
@@ -123,6 +123,12 @@ void LLLocationHistory::save() const
// build filename for each user
std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+ if (resolved_filename.empty())
+ {
+ llinfos << "can't get path to location history filename - probably not logged in yet." << llendl;
+ return;
+ }
+
// open a file for writing
llofstream file (resolved_filename);
if (!file.is_open())
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 92f19c9232..4e5aaeb66a 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -35,7 +35,6 @@
#include "llagent.h"
#include "llagentui.h"
#include "lllogchat.h"
-#include "llfloaterchat.h"
#include "lltrans.h"
#include "llviewercontrol.h"
diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp
index a2aef9ba63..8d950f072d 100644
--- a/indra/newview/llmenucommands.cpp
+++ b/indra/newview/llmenucommands.cpp
@@ -45,8 +45,7 @@
#include "llagent.h"
#include "llcallingcard.h"
#include "llviewercontrol.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
+//#include "llfirstuse.h"
#include "llfloaterworldmap.h"
#include "lllineeditor.h"
#include "llstatusbar.h"
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index f562e45770..b95e8bd3a2 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -40,7 +40,7 @@
#include "lldrawable.h"
#include "lldrawpoolavatar.h"
#include "llface.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloatercustomize.h"
#include "llfloatertools.h"
#include "llresmgr.h"
@@ -143,7 +143,7 @@ void LLMorphView::setVisible(BOOL visible)
initialize();
// First run dialog
- LLFirstUse::useAppearance();
+ //LLFirstUse::useAppearance();
}
else
{
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index b520bc1c2d..cf4a08ce76 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -64,7 +64,6 @@
#include "llviewerwindow.h"
#include "llworld.h" //for particle system banning
#include "llchat.h"
-#include "llfloaterchat.h"
#include "llimview.h"
#include "llnotifications.h"
#include "lluistring.h"
@@ -258,7 +257,7 @@ LLMuteList::~LLMuteList()
{
// If we quit from the login screen we will not have an SL account
// name. Don't try to save, otherwise we'll dump a file in
- // C:\Program Files\SecondLife\ JC
+ // C:\Program Files\SecondLife\ or similar. JC
std::string user_dir = gDirUtilp->getLindenUserDir();
if (!user_dir.empty())
{
@@ -532,9 +531,6 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n
LLIMModel::getInstance()->addMessage(agent_id, SYSTEM_FROM, LLUUID::null, message);
}
-
- LLChat auto_chat(message);
- LLFloaterChat::addChat(auto_chat, FALSE, FALSE);
}
}
diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
index d434017804..cd810b9793 100644
--- a/indra/newview/llnamebox.cpp
+++ b/indra/newview/llnamebox.cpp
@@ -53,6 +53,7 @@ LLNameBox::LLNameBox(const Params& p)
{
mNameID = LLUUID::null;
mLink = p.link;
+ mInitialValue = p.initial_value().asString();
LLNameBox::sInstances.insert(this);
setText(LLStringUtil::null);
}
@@ -67,17 +68,23 @@ void LLNameBox::setNameID(const LLUUID& name_id, BOOL is_group)
mNameID = name_id;
std::string name;
+ BOOL got_name = FALSE;
if (!is_group)
{
- gCacheName->getFullName(name_id, name);
+ got_name = gCacheName->getFullName(name_id, name);
}
else
{
- gCacheName->getGroupName(name_id, name);
+ got_name = gCacheName->getGroupName(name_id, name);
}
- setName(name, is_group);
+ // Got the name already? Set it.
+ // Otherwise it will be set later in refresh().
+ if (got_name)
+ setName(name, is_group);
+ else
+ setText(mInitialValue);
}
void LLNameBox::refresh(const LLUUID& id, const std::string& firstname,
diff --git a/indra/newview/llnamebox.h b/indra/newview/llnamebox.h
index 0109525e85..48b54faec8 100644
--- a/indra/newview/llnamebox.h
+++ b/indra/newview/llnamebox.h
@@ -76,6 +76,7 @@ private:
private:
LLUUID mNameID;
BOOL mLink;
+ std::string mInitialValue;
};
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 7e6145f578..6375362ae2 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -74,12 +74,12 @@ void LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,
{
//llinfos << "LLNameListCtrl::addNameItem " << agent_id << llendl;
- std::string fullname;
- gCacheName->getFullName(agent_id, fullname);
-
- fullname.append(suffix);
+ NameItem item;
+ item.value = agent_id;
+ item.enabled = enabled;
+ item.target = INDIVIDUAL;
- addStringUUIDItem(fullname, agent_id, pos, enabled);
+ addNameItemRow(item, pos);
}
// virtual, public
@@ -130,11 +130,12 @@ BOOL LLNameListCtrl::handleDragAndDrop(
return handled;
}
-void LLNameListCtrl::showAvatarInspector(const LLUUID& avatar_id)
+void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group)
{
- LLSD key;
- key["avatar_id"] = avatar_id;
- LLFloaterReg::showInstance("inspect_avatar", key);
+ if (is_group)
+ LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", avatar_id));
+ else
+ LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
}
//virtual
@@ -147,7 +148,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
&& column_index == mNameColumnIndex)
{
// ...this is the column with the avatar name
- LLUUID avatar_id = hit_item->getValue().asUUID();
+ LLUUID avatar_id = getItemId(hit_item);
if (avatar_id.notNull())
{
// ...valid avatar id
@@ -164,9 +165,12 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop );
LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");
+ // Should we show a group or an avatar inspector?
+ bool is_group = hit_item->getValue()["is_group"].asBoolean();
+
LLToolTip::Params params;
params.background_visible( false );
- params.click_callback( boost::bind(&LLNameListCtrl::showAvatarInspector, this, avatar_id) );
+ params.click_callback( boost::bind(&LLNameListCtrl::showInspector, this, avatar_id, is_group) );
params.delay_time(0.0f); // spawn instantly on hover
params.image( icon );
params.message("");
@@ -220,9 +224,22 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition p
}
-LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem& name_item, EAddPosition pos)
+LLScrollListItem* LLNameListCtrl::addNameItemRow(
+ const LLNameListCtrl::NameItem& name_item,
+ EAddPosition pos,
+ std::string& suffix)
{
- LLScrollListItem* item = LLScrollListCtrl::addRow(name_item, pos);
+ LLUUID id = name_item.value().asUUID();
+ LLScrollListItem* item = NULL;
+
+ // Store item type so that we can invoke the proper inspector.
+ // *TODO Vadim: Is there a more proper way of storing additional item data?
+ {
+ LLNameListCtrl::NameItem name_item_(name_item);
+ name_item_.value = LLSD().with("uuid", id).with("is_group", name_item.target() == GROUP);
+ item = LLScrollListCtrl::addRow(name_item_, pos);
+ }
+
if (!item) return NULL;
// use supplied name by default
@@ -230,7 +247,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
switch(name_item.target)
{
case GROUP:
- gCacheName->getGroupName(name_item.value().asUUID(), fullname);
+ gCacheName->getGroupName(id, fullname);
// fullname will be "nobody" if group not found
break;
case SPECIAL:
@@ -239,7 +256,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
case INDIVIDUAL:
{
std::string name;
- if (gCacheName->getFullName(name_item.value().asUUID(), name))
+ if (gCacheName->getFullName(id, name))
{
fullname = name;
}
@@ -249,6 +266,12 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
break;
}
+ // Append optional suffix.
+ if (!suffix.empty())
+ {
+ fullname.append(suffix);
+ }
+
LLScrollListCell* cell = item->getColumn(mNameColumnIndex);
if (cell)
{
@@ -270,15 +293,24 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
// public
void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
{
- BOOL item_exists = selectByID( agent_id );
- if(item_exists)
+ // Find the item specified with agent_id.
+ S32 idx = -1;
+ for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)
{
- S32 index = getItemIndex(getFirstSelected());
- if(index >= 0)
+ LLScrollListItem* item = *it;
+ if (getItemId(item) == agent_id)
{
- deleteSingleItem(index);
+ idx = getItemIndex(item);
+ break;
}
}
+
+ // Remove it.
+ if (idx >= 0)
+ {
+ selectNthItem(idx); // not sure whether this is needed, taken from previous implementation
+ deleteSingleItem(idx);
+ }
}
// public
@@ -303,7 +335,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first,
for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
{
LLScrollListItem* item = *iter;
- if (item->getUUID() == id)
+ if (getItemId(item) == id)
{
LLScrollListCell* cell = (LLScrollListCell*)item->getColumn(0);
cell = item->getColumn(mNameColumnIndex);
@@ -343,3 +375,9 @@ void LLNameListCtrl::updateColumns()
}
}
}
+
+// static
+LLUUID LLNameListCtrl::getItemId(LLScrollListItem* item)
+{
+ return item->getValue()["uuid"].asUUID();
+}
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
index d0f0ec4d21..192a3a5afa 100644
--- a/indra/newview/llnamelistctrl.h
+++ b/indra/newview/llnamelistctrl.h
@@ -94,7 +94,7 @@ public:
void addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);
/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
- LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM);
+ LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, std::string& suffix = LLStringUtil::null);
// Add a user to the list by name. It will be added, the name
// requested from the cache, and updated as necessary.
@@ -121,7 +121,8 @@ public:
/*virtual*/ void updateColumns();
private:
- void showAvatarInspector(const LLUUID& avatar_id);
+ void showInspector(const LLUUID& avatar_id, bool is_group);
+ static LLUUID getItemId(LLScrollListItem* item);
private:
S32 mNameColumnIndex;
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 96442fafcc..c50e049d4c 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -180,11 +180,6 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
if(panel && panel->messageID() == fromID && panel->canAddText())
{
- if (CHAT_STYLE_IRC == notification["chat_style"].asInteger())
- {
- notification["message"] = notification["from"].asString() + notification["message"].asString();
- }
-
panel->addMessage(notification);
toast->reshapeToPanel();
toast->resetTimer();
@@ -349,7 +344,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
// Handle irc styled messages for toast panel
if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
{
- tmp_chat.mText = tmp_chat.mText.substr(3);
+ if(!tmp_chat.mFromName.empty())
+ tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
+ else
+ tmp_chat.mText = tmp_chat.mText.substr(3);
}
// arrange a channel on a screen
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index daec793d75..01291c4012 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -419,9 +419,9 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
if(tab_land->getDisplayChildren())
tab_land->changeOpenClose(tab_land->getDisplayChildren());
- tab_roles->canOpenClose(false);
- tab_notices->canOpenClose(false);
- tab_land->canOpenClose(false);
+ tab_roles->setVisible(false);
+ tab_notices->setVisible(false);
+ tab_land->setVisible(false);
getChild<LLUICtrl>("group_name")->setVisible(false);
getChild<LLUICtrl>("group_name_editor")->setVisible(true);
@@ -443,9 +443,9 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
LLGroupData agent_gdatap;
bool is_member = gAgent.getGroupData(mID,agent_gdatap);
- tab_roles->canOpenClose(is_member);
- tab_notices->canOpenClose(is_member);
- tab_land->canOpenClose(is_member);
+ tab_roles->setVisible(is_member);
+ tab_notices->setVisible(is_member);
+ tab_land->setVisible(is_member);
getChild<LLUICtrl>("group_name")->setVisible(true);
getChild<LLUICtrl>("group_name_editor")->setVisible(false);
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 6210973dae..45fc3d4688 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -614,7 +614,7 @@ void LLPanelGroupNotices::showNotice(const std::string& subject,
mViewInventoryIcon->setVisible(TRUE);
std::stringstream ss;
- ss << " " << inventory_name;
+ ss << " " << LLViewerInventoryItem::getDisplayName(inventory_name);
mViewInventoryName->setText(ss.str());
mBtnOpenAttachment->setEnabled(TRUE);
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 30acf37f82..d6e407a0ed 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -35,6 +35,7 @@
#include "llbutton.h"
#include "llfloaterreg.h"
+#include "llnotificationsutil.h"
#include "llsdutil.h"
#include "llsdutil_math.h"
#include "llregionhandle.h"
@@ -632,8 +633,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos();
if(landmark)
{
- LLSideTray::getInstance()->showPanel("panel_places",
- LLSD().with("type", "landmark").with("id",landmark->getUUID()));
+ LLNotificationsUtil::add("LandmarkAlreadyExists");
}
else
{
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index e74a39c85c..a5a61f0c7b 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -51,6 +51,8 @@
#include "llviewermenu.h"
#include "llviewertexturelist.h"
+const std::string FILTERS_FILENAME("filters.xml");
+
static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory");
void on_file_loaded_for_save(BOOL success,
@@ -160,7 +162,7 @@ BOOL LLPanelMainInventory::postBuild()
// Now load the stored settings from disk, if available.
std::ostringstream filterSaveName;
- filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+ filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME);
llinfos << "LLPanelMainInventory::init: reading from " << filterSaveName << llendl;
llifstream file(filterSaveName.str());
LLSD savedFilterState;
@@ -230,7 +232,7 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
}
std::ostringstream filterSaveName;
- filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
+ filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME);
llofstream filtersFile(filterSaveName.str());
if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
{
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 6a61e0f02f..d17c287cc7 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -73,7 +73,7 @@
#include "pipeline.h"
#include "llviewercontrol.h"
#include "lluictrlfactory.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "lldrawpool.h"
@@ -682,7 +682,7 @@ void LLPanelObject::getState( )
if (objectp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT))
{
selected_item = MI_SCULPT;
- LLFirstUse::useSculptedPrim();
+ //LLFirstUse::useSculptedPrim();
}
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 43366ef814..d4376550d6 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -445,7 +445,7 @@ bool remove_task_inventory_callback(const LLSD& notification, const LLSD& respon
}
// helper for remove
-// ! REFACTOR ! two_uuids_list_t is also defined in llinevntorybridge.h, but differently.
+// ! REFACTOR ! two_uuids_list_t is also defined in llinventorybridge.h, but differently.
typedef std::pair<LLUUID, std::list<LLUUID> > panel_two_uuids_list_t;
typedef std::pair<LLPanelObjectInventory*, panel_two_uuids_list_t> remove_data_t;
BOOL LLTaskInvFVBridge::removeItem()
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 550fee71bf..fd5ce7a46d 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -35,6 +35,7 @@
#include "llagent.h"
#include "llagentwearables.h"
+#include "llappearancemgr.h"
#include "llbutton.h"
#include "llfloaterreg.h"
@@ -44,6 +45,8 @@
#include "llinventoryfunctions.h"
#include "llinventorypanel.h"
#include "lllandmark.h"
+#include "lllineeditor.h"
+#include "llmodaldialog.h"
#include "llsidepanelappearance.h"
#include "llsidetray.h"
#include "lltabcontainer.h"
@@ -61,12 +64,75 @@
static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
bool LLPanelOutfitsInventory::sShowDebugEditor = false;
+class LLOutfitSaveAsDialog : public LLModalDialog
+{
+private:
+ std::string mItemName;
+ std::string mTempItemName;
+
+ boost::signals2::signal<void (const std::string&)> mSaveAsSignal;
+
+public:
+ LLOutfitSaveAsDialog( const LLSD& key )
+ : LLModalDialog( key ),
+ mTempItemName(key.asString())
+ {
+ }
+
+ BOOL postBuild()
+ {
+ getChild<LLUICtrl>("Save")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onSave, this ));
+ getChild<LLUICtrl>("Cancel")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onCancel, this ));
+
+ childSetTextArg("name ed", "[DESC]", mTempItemName);
+ return TRUE;
+ }
+
+ void setSaveAsCommit( const boost::signals2::signal<void (const std::string&)>::slot_type& cb )
+ {
+ mSaveAsSignal.connect(cb);
+ }
+
+ virtual void onOpen(const LLSD& key)
+ {
+ LLLineEditor* edit = getChild<LLLineEditor>("name ed");
+ if (edit)
+ {
+ edit->setFocus(TRUE);
+ edit->selectAll();
+ }
+ }
+
+ void onSave()
+ {
+ mItemName = childGetValue("name ed").asString();
+ LLStringUtil::trim(mItemName);
+ if( !mItemName.empty() )
+ {
+ mSaveAsSignal(mItemName);
+ closeFloater(); // destroys this object
+ }
+ }
+
+ void onCancel()
+ {
+ closeFloater(); // destroys this object
+ }
+};
+
LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
mActivePanel(NULL),
mParent(NULL)
{
mSavedFolderState = new LLSaveFolderState();
mSavedFolderState->setApply(FALSE);
+
+ static bool registered_dialog = false;
+ if (!registered_dialog)
+ {
+ LLFloaterReg::add("outfit_save_as", "floater_outfit_save_as.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutfitSaveAsDialog>);
+ registered_dialog = true;
+ }
}
LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
@@ -177,10 +243,28 @@ void LLPanelOutfitsInventory::onEdit()
{
}
-void LLPanelOutfitsInventory::onNew()
+void LLPanelOutfitsInventory::onSave()
+{
+ std::string outfit_name;
+
+ if (!LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name))
+ {
+ outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT);
+ }
+
+ LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE);
+ if (save_as_dialog)
+ {
+ save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 ));
+ }
+}
+
+void LLPanelOutfitsInventory::onSaveCommit(const std::string& outfit_name)
{
- const std::string& outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT);
LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name);
+ LLSD key;
+ LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
+
if (mAppearanceTabs)
{
mAppearanceTabs->selectTabByName("outfitslist_tab");
@@ -280,6 +364,7 @@ void LLPanelOutfitsInventory::updateListCommands()
mListCommands->childSetEnabled("trash_btn", trash_enabled);
mListCommands->childSetEnabled("wear_btn", wear_enabled);
+ mListCommands->childSetVisible("wear_btn", wear_enabled);
mListCommands->childSetEnabled("make_outfit_btn", make_outfit_enabled);
}
@@ -290,7 +375,7 @@ void LLPanelOutfitsInventory::onGearButtonClick()
void LLPanelOutfitsInventory::onAddButtonClick()
{
- onNew();
+ onSave();
}
void LLPanelOutfitsInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
@@ -329,7 +414,7 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
const std::string command_name = userdata.asString();
if (command_name == "new")
{
- onNew();
+ onSave();
}
if (command_name == "edit")
{
@@ -484,8 +569,6 @@ void LLPanelOutfitsInventory::initTabPanels()
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
mTabPanels[1] = myoutfits_panel;
- mActivePanel = mTabPanels[0];
-
for (tabpanels_vec_t::iterator iter = mTabPanels.begin();
iter != mTabPanels.end();
++iter)
@@ -496,6 +579,7 @@ void LLPanelOutfitsInventory::initTabPanels()
mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs");
mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this));
+ mActivePanel = (LLInventoryPanel*)mAppearanceTabs->getCurrentPanel();
}
void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index b117311775..76110e2a3f 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -59,7 +59,9 @@ public:
void onAdd();
void onRemove();
void onEdit();
- void onNew();
+ void onSave();
+
+ void onSaveCommit(const std::string& item_name);
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
void onSelectorButtonClicked();
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 03cc870a59..c14b282488 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -532,10 +532,10 @@ BOOL LLPanelPeople::postBuild()
friends_panel->childSetAction("add_btn", boost::bind(&LLPanelPeople::onAddFriendWizButtonClicked, this));
friends_panel->childSetAction("del_btn", boost::bind(&LLPanelPeople::onDeleteFriendButtonClicked, this));
- mOnlineFriendList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, mOnlineFriendList));
- mAllFriendList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, mAllFriendList));
- mNearbyList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, mNearbyList));
- mRecentList->setDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, mRecentList));
+ mOnlineFriendList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
+ mAllFriendList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
+ mNearbyList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
+ mRecentList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1));
mOnlineFriendList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mOnlineFriendList));
mAllFriendList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mAllFriendList));
@@ -1005,12 +1005,15 @@ void LLPanelPeople::onTabSelected(const LLSD& param)
mFilterEditor->setLabel(getString("people_filter_label"));
}
-void LLPanelPeople::onAvatarListDoubleClicked(LLAvatarList* list)
+void LLPanelPeople::onAvatarListDoubleClicked(LLUICtrl* ctrl)
{
- LLUUID clicked_id = list->getSelectedUUID();
-
- if (clicked_id.isNull())
+ LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(ctrl);
+ if(!item)
+ {
return;
+ }
+
+ LLUUID clicked_id = item->getAvatarId();
#if 0 // SJB: Useful for testing, but not currently functional or to spec
LLAvatarActions::showProfile(clicked_id);
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index da2c0e368c..7580fdbeef 100644
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -109,7 +109,7 @@ private:
void onNearbyViewSortButtonClicked();
void onFriendsViewSortButtonClicked();
void onGroupsViewSortButtonClicked();
- void onAvatarListDoubleClicked(LLAvatarList* list);
+ void onAvatarListDoubleClicked(LLUICtrl* ctrl);
void onAvatarListCommitted(LLAvatarList* list);
void onGroupPlusButtonClicked();
void onGroupMinusButtonClicked();
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 4f539f404d..2dc3a62637 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -160,8 +160,6 @@ BOOL LLPanelPrimMediaControls::postBuild()
mSkipBackCtrl = getChild<LLUICtrl>("skip_back");
mVolumeCtrl = getChild<LLUICtrl>("media_volume");
mMuteBtn = getChild<LLButton>("media_mute_button");
- mVolumeUpCtrl = getChild<LLUICtrl>("volume_up");
- mVolumeDownCtrl = getChild<LLUICtrl>("volume_down");
mVolumeSliderCtrl = getChild<LLSliderCtrl>("volume_slider");
mWhitelistIcon = getChild<LLIconCtrl>("media_whitelist_flag");
mSecureLockIcon = getChild<LLIconCtrl>("media_secure_lock_flag");
@@ -339,8 +337,6 @@ void LLPanelPrimMediaControls::updateShape()
mMediaAddressCtrl->setVisible(has_focus && !mini_controls);
mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls);
mVolumeCtrl->setVisible(false);
- mVolumeUpCtrl->setVisible(false);
- mVolumeDownCtrl->setVisible(false);
mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
// Disable zoom if HUD
@@ -373,8 +369,6 @@ void LLPanelPrimMediaControls::updateShape()
mSkipBackCtrl->setEnabled(has_focus && !mini_controls);
mVolumeCtrl->setVisible(has_focus);
- mVolumeUpCtrl->setVisible(has_focus);
- mVolumeDownCtrl->setVisible(has_focus);
mVolumeCtrl->setEnabled(has_focus);
mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible());
mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible());
@@ -417,21 +411,15 @@ void LLPanelPrimMediaControls::updateShape()
// video vloume
if(volume <= 0.0)
{
- mVolumeUpCtrl->setEnabled(TRUE);
- mVolumeDownCtrl->setEnabled(FALSE);
mMuteBtn->setToggleState(true);
}
else if (volume >= 1.0)
{
- mVolumeUpCtrl->setEnabled(FALSE);
- mVolumeDownCtrl->setEnabled(TRUE);
mMuteBtn->setToggleState(false);
}
else
{
mMuteBtn->setToggleState(false);
- mVolumeUpCtrl->setEnabled(TRUE);
- mVolumeDownCtrl->setEnabled(TRUE);
}
switch(result)
@@ -476,12 +464,8 @@ void LLPanelPrimMediaControls::updateShape()
mSkipBackCtrl->setEnabled(FALSE);
mVolumeCtrl->setVisible(FALSE);
- mVolumeUpCtrl->setVisible(FALSE);
- mVolumeDownCtrl->setVisible(FALSE);
mVolumeSliderCtrl->setVisible(FALSE);
mVolumeCtrl->setEnabled(FALSE);
- mVolumeUpCtrl->setEnabled(FALSE);
- mVolumeDownCtrl->setEnabled(FALSE);
mVolumeSliderCtrl->setEnabled(FALSE);
if (mMediaPanelScroll)
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index 419f033628..743cec70a1 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -156,8 +156,6 @@ private:
LLUICtrl *mMediaPlaySliderCtrl;
LLUICtrl *mVolumeCtrl;
LLButton *mMuteBtn;
- LLUICtrl *mVolumeUpCtrl;
- LLUICtrl *mVolumeDownCtrl;
LLSliderCtrl *mVolumeSliderCtrl;
LLIconCtrl *mWhitelistIcon;
LLIconCtrl *mSecureLockIcon;
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 0a2217fc51..571745ee02 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -723,7 +723,10 @@ void LLTeleportHistoryPanel::onTeleportHistoryChange(S32 removed_index)
if (-1 == removed_index)
showTeleportHistory(); // recreate all items
else
+ {
replaceItem(removed_index); // replace removed item by most recent
+ updateVerbs();
+ }
}
void LLTeleportHistoryPanel::replaceItem(S32 removed_index)
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
index 5a70842a73..fbe68b4d92 100644
--- a/indra/newview/llpanelvolume.cpp
+++ b/indra/newview/llpanelvolume.cpp
@@ -54,7 +54,7 @@
#include "llcolorswatch.h"
#include "lltexturectrl.h"
#include "llcombobox.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfocusmgr.h"
#include "llmanipscale.h"
#include "llpreviewscript.h"
@@ -470,7 +470,7 @@ void LLPanelVolume::sendIsFlexible()
if (is_flexible)
{
- LLFirstUse::useFlexible();
+ //LLFirstUse::useFlexible();
if (objectp->getClickAction() == CLICK_ACTION_SIT)
{
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index b6f78d08f1..b049f914ad 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -70,7 +70,7 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator");
mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
- mAvatarListDoubleClickConnection = mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
+ mAvatarListDoubleClickConnection = mAvatarList->setItemDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, _1));
mAvatarListRefreshConnection = mAvatarList->setRefreshCompleteCallback(boost::bind(&LLParticipantList::onAvatarListRefreshed, this, _1, _2));
// Set onAvatarListDoubleClicked as default on_return action.
mAvatarListReturnConnection = mAvatarList->setReturnCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList));
@@ -132,10 +132,15 @@ void LLParticipantList::setSpeakingIndicatorsVisible(BOOL visible)
mAvatarList->setSpeakingIndicatorsVisible(visible);
};
-void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list)
+void LLParticipantList::onAvatarListDoubleClicked(LLUICtrl* ctrl)
{
- // NOTE(EM): Should we check if there is multiple selection and start conference if it is so?
- LLUUID clicked_id = list->getSelectedUUID();
+ LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(ctrl);
+ if(!item)
+ {
+ return;
+ }
+
+ LLUUID clicked_id = item->getAvatarId();
if (clicked_id.isNull() || clicked_id == gAgent.getID())
return;
@@ -577,7 +582,7 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co
bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata)
{
std::string item = userdata.asString();
- if (item == "can_mute_text" || "can_block" == item)
+ if (item == "can_mute_text" || "can_block" == item || "can_share" == item || "can_im" == item)
{
return mUUIDs.front() != gAgentID;
}
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
index 70badbc40d..e1b1b5af00 100644
--- a/indra/newview/llparticipantlist.h
+++ b/indra/newview/llparticipantlist.h
@@ -232,7 +232,7 @@ class LLParticipantList
};
private:
- void onAvatarListDoubleClicked(LLAvatarList* list);
+ void onAvatarListDoubleClicked(LLUICtrl* ctrl);
void onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param);
/**
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 2a40cbaba0..84bdaafacf 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -364,6 +364,12 @@ BOOL LLPreviewGesture::postBuild()
LLTextBox* text;
LLCheckBoxCtrl* check;
+ edit = getChild<LLLineEditor>("name");
+ edit->setKeystrokeCallback(onKeystrokeCommit, this);
+
+ edit = getChild<LLLineEditor>("desc");
+ edit->setKeystrokeCallback(onKeystrokeCommit, this);
+
edit = getChild<LLLineEditor>("trigger_editor");
edit->setKeystrokeCallback(onKeystrokeCommit, this);
edit->setCommitCallback(onCommitSetDirty, this);
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 95756ac5f3..cc70360528 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -55,7 +55,6 @@
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
#include "lldir.h"
-//#include "llfloaterchat.h"
#include "llviewerstats.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llappviewer.h" // app_abort_quit()
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 646c9fb6a4..fccf71f3cb 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -79,7 +79,6 @@
#include "llslider.h"
#include "lldir.h"
#include "llcombobox.h"
-//#include "llfloaterchat.h"
#include "llviewerstats.h"
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index 027f3daffb..a00b6a9288 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -47,6 +47,7 @@
#include "llsyswellwindow.h"
#include "llimfloater.h"
#include "llscriptfloater.h"
+#include "llfontgl.h"
#include <algorithm>
@@ -250,6 +251,13 @@ void LLScreenChannel::onToastDestroyed(LLToast* toast)
{
mToastList.erase(it);
}
+
+ it = find(mStoredToastList.begin(), mStoredToastList.end(), static_cast<LLPanel*>(toast));
+
+ if(it != mStoredToastList.end())
+ {
+ mStoredToastList.erase(it);
+ }
}
@@ -279,6 +287,11 @@ void LLScreenChannel::onToastFade(LLToast* toast)
//--------------------------------------------------------------------------
void LLScreenChannel::deleteToast(LLToast* toast)
{
+ if (toast->isDead())
+ {
+ return;
+ }
+
// send signal to observers about destroying of a toast
toast->mOnDeleteToastSignal(toast);
@@ -556,6 +569,7 @@ void LLScreenChannel::showToastsTop()
void LLScreenChannel::createStartUpToast(S32 notif_num, F32 timer)
{
LLRect toast_rect;
+ LLRect tbox_rect;
LLToast::Params p;
p.lifetime_secs = timer;
p.enable_hide_btn = false;
@@ -570,9 +584,26 @@ void LLScreenChannel::createStartUpToast(S32 notif_num, F32 timer)
std::string text = LLTrans::getString("StartUpNotifications");
+ tbox_rect = text_box->getRect();
+ S32 tbox_width = tbox_rect.getWidth();
+ S32 tbox_vpad = text_box->getVPad();
+ S32 text_width = text_box->getDefaultFont()->getWidth(text);
+ S32 text_height = text_box->getTextPixelHeight();
+
+ // EXT - 3703 (Startup toast message doesn't fit toast width)
+ // Calculating TextBox HEIGHT needed to include the whole string according to the given WIDTH of the TextBox.
+ S32 new_tbox_height = (text_width/tbox_width + 1) * text_height;
+ // Calculating TOP position of TextBox
+ S32 new_tbox_top = new_tbox_height + tbox_vpad + gSavedSettings.getS32("ToastGap");
+ // Calculating toast HEIGHT according to the new TextBox size
+ S32 toast_height = new_tbox_height + tbox_vpad * 2;
+
+ tbox_rect.setLeftTopAndSize(tbox_rect.mLeft, new_tbox_top, tbox_rect.getWidth(), new_tbox_height);
+ text_box->setRect(tbox_rect);
+
toast_rect = mStartUpToastPanel->getRect();
mStartUpToastPanel->reshape(getRect().getWidth(), toast_rect.getHeight(), true);
- toast_rect.setLeftTopAndSize(0, toast_rect.getHeight()+gSavedSettings.getS32("ToastGap"), getRect().getWidth(), toast_rect.getHeight());
+ toast_rect.setLeftTopAndSize(0, toast_height + gSavedSettings.getS32("ToastGap"), getRect().getWidth(), toast_height);
mStartUpToastPanel->setRect(toast_rect);
text_box->setValue(text);
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index cf62d47362..0d9cf06bc3 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -72,6 +72,9 @@ LLScriptFloater::LLScriptFloater(const LLSD& key)
bool LLScriptFloater::toggle(const LLUUID& object_id)
{
+ // Force chiclet toggle on here because first onFocusReceived() will not toggle it on.
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(object_id, true);
+
LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id);
LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
@@ -180,6 +183,15 @@ void LLScriptFloater::setVisible(BOOL visible)
LLDockableFloater::setVisible(visible);
hideToastsIfNeeded();
+
+ if(!visible)
+ {
+ LLIMChiclet* chiclet = LLBottomTray::getInstance()->getChicletPanel()->findChiclet<LLIMChiclet>(getObjectId());
+ if(chiclet)
+ {
+ chiclet->setToggleState(false);
+ }
+ }
}
void LLScriptFloater::onMouseDown()
@@ -199,6 +211,20 @@ void LLScriptFloater::onMouseDown()
}
}
+void LLScriptFloater::onFocusLost()
+{
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getObjectId(), false);
+}
+
+void LLScriptFloater::onFocusReceived()
+{
+ // first focus will be received before setObjectId() call - don't toggle chiclet
+ if(getObjectId().notNull())
+ {
+ LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(getObjectId(), true);
+ }
+}
+
void LLScriptFloater::hideToastsIfNeeded()
{
using namespace LLNotificationsUI;
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index ed10dc5fe9..f86605c5d1 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -174,6 +174,10 @@ protected:
*/
void onMouseDown();
+ /*virtual*/ void onFocusLost();
+
+ /*virtual*/ void onFocusReceived();
+
private:
LLToastNotifyPanel* mScriptForm;
LLUUID mObjectId;
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 77a370cc3f..43215f86bd 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -87,7 +87,7 @@ void LLWatchForOutfitRenameObserver::changed(U32 mask)
mPanel->refreshCurrentOutfitName();
}
}
-
+
LLSidepanelAppearance::LLSidepanelAppearance() :
LLPanel(),
mFilterSubString(LLStringUtil::null),
@@ -255,7 +255,7 @@ void LLSidepanelAppearance::onNewOutfitButtonClicked()
{
if (!mLookInfo->getVisible())
{
- mPanelOutfitsInventory->onNew();
+ mPanelOutfitsInventory->onSave();
}
}
@@ -321,15 +321,11 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
mOutfitDirtyTag->setVisible(LLAppearanceManager::getInstance()->isOutfitDirty());
if (name == "")
{
- const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink();
- if (outfit_link)
+ std::string outfit_name;
+ if (LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name))
{
- const LLViewerInventoryCategory *cat = outfit_link->getLinkedCategory();
- if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
- {
- mCurrentLookName->setText(cat->getName());
+ mCurrentLookName->setText(outfit_name);
return;
- }
}
mCurrentLookName->setText(getString("No Outfit"));
mOpenOutfitBtn->setEnabled(FALSE);
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 9524b0ece9..aa2e67fd16 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -61,6 +61,7 @@ public:
void fetchInventory();
void inventoryFetched();
void updateVerbs();
+ void onNewOutfitButtonClicked();
private:
void onFilterEdit(const std::string& search_string);
@@ -68,7 +69,6 @@ private:
void onOpenOutfitButtonClicked();
void onEditAppearanceButtonClicked();
void onEditButtonClicked();
- void onNewOutfitButtonClicked();
void onBackButtonClicked();
void onEditWearBackClicked();
void toggleLookInfoPanel(BOOL visible);
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index fb8aa39445..50c47e293e 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -639,6 +639,21 @@ LLPanel* LLSideTray::showPanel (const std::string& panel_name, const LLSD& para
return NULL;
}
+void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name, const LLSD& params)
+{
+ if(!sub_panel)
+ return;
+
+ if (sub_panel->isInVisibleChain())
+ {
+ LLSideTray::getInstance()->collapseSideBar();
+ }
+ else
+ {
+ LLSideTray::getInstance()->showPanel(panel_name, params);
+ }
+}
+
// This is just LLView::findChildView specialized to restrict the search to LLPanels.
// Optimization for EXT-4068 to avoid searching down to the individual item level
// when inventories are large.
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index de2cfe9711..b1c8675793 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -94,7 +94,15 @@ public:
* if no such tab - return NULL, otherwise a pointer to the panel
* Pass params as array, or they may be overwritten(example - params["name"]="nearby")
*/
- LLPanel* showPanel (const std::string& panel_name, const LLSD& params);
+ LLPanel* showPanel (const std::string& panel_name, const LLSD& params);
+
+ /**
+ * Toggling Side Tray tab which contains "sub_panel" child of "panel_name" panel.
+ * If "sub_panel" is not visible Side Tray is opened to display it,
+ * otherwise Side Tray is collapsed.
+ * params are passed to "panel_name" panel onOpen().
+ */
+ void togglePanel (LLPanel* &sub_panel, const std::string& panel_name, const LLSD& params);
/*
* get the panel (don't show it or do anything else with it)
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index 42db6bf9c3..b450d38b5a 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -229,10 +229,6 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea
mSwitchedIndicatorsOn.insert(*it_uuid);
}
}
- else
- {
- LL_WARNS("SpeakingIndicator") << "indicator was not found among registered: " << *it_uuid << LL_ENDL;
- }
}
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 99fa271b78..88b4c34e2b 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -100,8 +100,7 @@
#include "lleventnotifier.h"
#include "llface.h"
#include "llfeaturemanager.h"
-#include "llfirstuse.h"
-#include "llfloaterchat.h"
+//#include "llfirstuse.h"
#include "llfloaterhud.h"
#include "llfloaterland.h"
#include "llfloaterpreference.h"
@@ -920,9 +919,9 @@ bool idle_startup()
// create necessary directories
// *FIX: these mkdir's should error check
gDirUtilp->setLindenUserDir(gFirstname, gLastname);
- LLFile::mkdir(gDirUtilp->getLindenUserDir());
-
- // Set PerAccountSettingsFile to the default value.
+ LLFile::mkdir(gDirUtilp->getLindenUserDir());
+
+ // Set PerAccountSettingsFile to the default value.
gSavedSettings.setString("PerAccountSettingsFile",
gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
LLAppViewer::instance()->getSettingsFilename("Default", "PerAccount")));
@@ -958,13 +957,6 @@ bool idle_startup()
LLFile::mkdir(gDirUtilp->getChatLogsDir());
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
- // chat history must be loaded AFTER chat directories are defined.
- if (!gNoRender && gSavedPerAccountSettings.getBOOL("LogShowHistory"))
- {
- LLFloaterChat::loadHistory();
- }
-
-
//good as place as any to create user windlight directories
std::string user_windlight_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", ""));
LLFile::mkdir(user_windlight_path_name.c_str());
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index b3b2b9ee5d..8a36475510 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -40,7 +40,6 @@
#include "llcommandhandler.h"
#include "llviewercontrol.h"
#include "llfloaterbuycurrency.h"
-#include "llfloaterchat.h"
#include "llfloaterlagmeter.h"
#include "llpanelvolumepulldown.h"
#include "llfloaterregioninfo.h"
@@ -107,7 +106,6 @@ const F32 ICON_TIMER_EXPIRY = 3.f; // How long the balance and health icons sho
const F32 ICON_FLASH_FREQUENCY = 2.f;
const S32 TEXT_HEIGHT = 18;
-static void onClickBuyCurrency(void*);
static void onClickHealth(void*);
static void onClickScriptDebug(void*);
static void onClickVolume(void*);
@@ -122,7 +120,6 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mTextTime(NULL),
mSGBandwidth(NULL),
mSGPacketLoss(NULL),
- mBtnBuyCurrency(NULL),
mBtnVolume(NULL),
mBalance(0),
mHealth(100),
@@ -153,8 +150,10 @@ LLStatusBar::LLStatusBar(const LLRect& rect)
mTextHealth = getChild<LLTextBox>("HealthText" );
mTextTime = getChild<LLTextBox>("TimeText" );
- mBtnBuyCurrency = getChild<LLButton>( "buycurrency" );
- mBtnBuyCurrency->setClickedCallback( onClickBuyCurrency, this );
+ getChild<LLUICtrl>("buycurrency")->setCommitCallback(
+ boost::bind(&LLStatusBar::onClickBuyCurrency, this));
+ getChild<LLUICtrl>("buyL")->setCommitCallback(
+ boost::bind(&LLStatusBar::onClickBuyCurrency, this));
mBtnVolume = getChild<LLButton>( "volume_btn" );
mBtnVolume->setClickedCallback( onClickVolume, this );
@@ -362,7 +361,8 @@ void LLStatusBar::refresh()
void LLStatusBar::setVisibleForMouselook(bool visible)
{
mTextTime->setVisible(visible);
- mBtnBuyCurrency->setVisible(visible);
+ getChild<LLUICtrl>("buycurrency")->setVisible(visible);
+ getChild<LLUICtrl>("buyL")->setVisible(visible);
mSGBandwidth->setVisible(visible);
mSGPacketLoss->setVisible(visible);
setBackgroundVisible(visible);
@@ -382,17 +382,18 @@ void LLStatusBar::setBalance(S32 balance)
{
std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance );
+ LLButton* btn_buy_currency = getChild<LLButton>("buycurrency");
LLStringUtil::format_map_t string_args;
string_args["[AMT]"] = llformat("%s", money_str.c_str());
std::string labe_str = getString("buycurrencylabel", string_args);
- mBtnBuyCurrency->setLabel(labe_str);
+ btn_buy_currency->setLabel(labe_str);
// Resize the balance button so that the label fits it, and the button expands to the left.
// *TODO: LLButton should have an option where to expand.
{
- S32 saved_right = mBtnBuyCurrency->getRect().mRight;
- mBtnBuyCurrency->autoResize();
- mBtnBuyCurrency->translate(saved_right - mBtnBuyCurrency->getRect().mRight, 0);
+ S32 saved_right = btn_buy_currency->getRect().mRight;
+ btn_buy_currency->autoResize();
+ btn_buy_currency->translate(saved_right - btn_buy_currency->getRect().mRight, 0);
}
if (mBalance && (fabs((F32)(mBalance - balance)) > gSavedSettings.getF32("UISndMoneyChangeThreshold")))
@@ -497,7 +498,7 @@ S32 LLStatusBar::getSquareMetersLeft() const
return mSquareMetersCredit - mSquareMetersCommitted;
}
-static void onClickBuyCurrency(void* data)
+void LLStatusBar::onClickBuyCurrency()
{
LLFloaterBuyCurrency::buyCurrency();
}
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 0e98da0fe4..21a98dd753 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -91,6 +91,7 @@ private:
// simple method to setup the part that holds the date
void setupDate();
+ void onClickBuyCurrency();
void onVolumeChanged(const LLSD& newvalue);
static void onMouseEnterVolume(LLUICtrl* ctrl);
@@ -103,7 +104,6 @@ private:
LLStatGraph *mSGBandwidth;
LLStatGraph *mSGPacketLoss;
- LLButton *mBtnBuyCurrency;
LLButton *mBtnVolume;
S32 mBalance;
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 72ef383be9..4a7d784c3e 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -1139,7 +1139,7 @@ LLTexLayerInterface::LLTexLayerInterface(const LLTexLayerInterface &layer, LLWea
BOOL LLTexLayerInterface::setInfo(const LLTexLayerInfo *info, LLWearable* wearable ) // This sets mInfo and calls initialization functions
{
- llassert(mInfo == NULL);
+ //llassert(mInfo == NULL); // nyx says this is probably bogus but needs investigating
mInfo = info;
//mID = info->mID; // No ID
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index a5ddb0a620..b980f65e68 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -1190,8 +1190,12 @@ void LLTextureCtrl::draw()
}
else if (!mImageAssetID.isNull())
{
- mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES);
- mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
+ LLPointer<LLViewerFetchedTexture> texture = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES,LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+
+ texture->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
+ texture->forceToSaveRawImage(0) ;
+
+ mTexturep = texture;
}
else if (!mFallbackImageName.empty())
{
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index eeedf38543..5ce6884239 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -495,8 +495,8 @@ void LLTextureFetchWorker::setupPacketData()
U32 LLTextureFetchWorker::calcWorkPriority()
{
// llassert_always(mImagePriority >= 0 && mImagePriority <= LLViewerTexture::maxDecodePriority());
- F32 priority_scale = (F32)LLWorkerThread::PRIORITY_LOWBITS / LLViewerFetchedTexture::maxDecodePriority();
- mWorkPriority = (U32)(mImagePriority * priority_scale);
+ static F32 PRIORITY_SCALE = (F32)LLWorkerThread::PRIORITY_LOWBITS / LLViewerFetchedTexture::maxDecodePriority();
+ mWorkPriority = (U32)(mImagePriority * PRIORITY_SCALE);
return mWorkPriority;
}
@@ -574,7 +574,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
LLMutexLock lock(&mWorkMutex);
- if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
+ if ((mFetcher->isQuitting() || mImagePriority < 1.0f || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
{
if (mState < WRITE_TO_CACHE)
{
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index d0c125eb77..94acb2ae8c 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -45,7 +45,7 @@
#include "lltrans.h"
const S32 BOTTOM_PAD = VPAD * 3;
-const S32 BUTTON_WIDTH = 90;
+S32 BUTTON_WIDTH = 90;
//static
const LLFontGL* LLToastNotifyPanel::sFont = NULL;
@@ -63,7 +63,7 @@ mAddedDefaultBtn(false)
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
mInfoPanel = getChild<LLPanel>("info_panel");
mControlPanel = getChild<LLPanel>("control_panel");
-
+ BUTTON_WIDTH = gSavedSettings.getS32("ToastButtonWidth");
// customize panel's attributes
// is it intended for displaying a tip
mIsTip = notification->getType() == "notifytip";
@@ -96,7 +96,8 @@ mAddedDefaultBtn(false)
// customize panel's outfit
// preliminary adjust panel's layout
- mIsTip ? adjustPanelForTipNotice() : adjustPanelForScriptNotice(form);
+ //move to the end
+ //mIsTip ? adjustPanelForTipNotice() : adjustPanelForScriptNotice(form);
// adjust text options according to the notification type
// add a caution textbox at the top of a caution notification
@@ -117,8 +118,14 @@ mAddedDefaultBtn(false)
mTextBox->setValue(notification->getMessage());
// add buttons for a script notification
- if (!mIsTip)
+ if (mIsTip)
+ {
+ adjustPanelForTipNotice();
+ }
+ else
{
+ std::vector<index_button_pair_t> buttons;
+ buttons.reserve(mNumOptions);
for (S32 i = 0; i < mNumOptions; i++)
{
LLSD form_element = form->getElement(i);
@@ -126,65 +133,155 @@ mAddedDefaultBtn(false)
{
continue;
}
-
- addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean());
}
-
- if (mNumButtons == 0)
+ S32 buttons_width = 0;
+ // create all buttons and accumulate they total width to reshape mControlPanel
+ for (S32 i = 0; i < mNumOptions; i++)
{
- addButton("OK", LLTrans::getString("ok"), FALSE, TRUE);
- mAddedDefaultBtn = true;
+ LLSD form_element = form->getElement(i);
+ if (form_element["type"].asString() != "button")
+ {
+ continue;
+ }
+ LLButton* new_button = createButton(form_element, TRUE);
+ buttons_width += new_button->getRect().getWidth();
+ S32 index = form_element["index"].asInteger();
+ buttons.push_back(index_button_pair_t(index,new_button));
+ }
+ if (buttons.empty())
+ {
+ addDefaultButton();
+ }
+ else
+ {
+ //try get an average left_pad to spread out buttons
+ S32 left_pad = (getRect().getWidth() - buttons_width) / (S32(buttons.size() + 1));
+ // left_pad can be < 2*HPAD if we have a lot of buttons.
+ if(left_pad < 2*HPAD)
+ {
+ //Probably it is a scriptdialog toast, set default left_pad
+ left_pad = 2*HPAD;
+ }
+ //how many rows we need to fit all buttons with current width of the panel
+ S32 button_rows = (buttons_width + left_pad * S32(buttons.size() + 1)) / getRect().getWidth() + 1;
+ //calculate required panel height
+ S32 button_panel_height = button_rows *( BTN_HEIGHT + VPAD) + BOTTOM_PAD;
+
+ adjustPanelForScriptNotice(getRect().getWidth(), button_panel_height);
+ //we begin from lefttop angle and go to rightbottom.
+ updateButtonsLayout(buttons, left_pad, button_panel_height);
}
}
-
// adjust panel's height to the text size
mInfoPanel->setFollowsAll();
snapToMessageHeight(mTextBox, MAX_LENGTH);
}
-
-LLToastNotifyPanel::~LLToastNotifyPanel()
+void LLToastNotifyPanel::addDefaultButton()
{
- std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer());
+ LLSD form_element;
+ form_element.with("name", "OK").with("text", LLTrans::getString("ok")).with("default", true);
+ LLButton* ok_btn = createButton(form_element, FALSE);
+ LLRect new_btn_rect(ok_btn->getRect());
+
+ new_btn_rect.setOriginAndSize(llabs(getRect().getWidth() - BUTTON_WIDTH)/ 2, BOTTOM_PAD,
+ //auto_size for ok button makes it very small, so let's make it wider
+ BUTTON_WIDTH, new_btn_rect.getHeight());
+ ok_btn->setRect(new_btn_rect);
+ addChild(ok_btn, -1);
+ mNumButtons = 1;
+ mAddedDefaultBtn = true;
}
+LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_option)
+{
+ InstanceAndS32* userdata = new InstanceAndS32;
+ userdata->mSelf = this;
+ userdata->mButtonName = is_option ? form_element["name"].asString() : "";
-void LLToastNotifyPanel::adjustPanelForScriptNotice(const LLNotificationFormPtr form)
-{
- F32 buttons_num = 0;
- S32 button_rows = 0;
+ mBtnCallbackData.push_back(userdata);
- // calculate number of buttons
- for (S32 i = 0; i < mNumOptions; i++)
+ LLButton::Params p;
+ const LLFontGL* font = form_element["index"].asInteger() == -1 ? sFontSmall: sFont; // for ignore button in script dialog
+ p.name(form_element["name"].asString());
+ p.label(form_element["text"].asString());
+ p.font(font);
+ p.rect.height = BTN_HEIGHT;
+ p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata));
+ p.rect.width = BUTTON_WIDTH;
+ p.auto_resize = false;
+ p.follows.flags(FOLLOWS_RIGHT | FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+ if (mIsCaution)
{
- if (form->getElement(i)["type"].asString() == "button")
- {
- buttons_num++;
- }
+ p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
+ p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
}
-
- // calculate necessary height for the button panel
- // if notification form contains no buttons - reserve a place for OK button
- // script notifications have extra line for an IGNORE button
- if(mIsScriptDialog)
+ if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
{
- button_rows = llceil((buttons_num - 1) / 3.0f) + 1;
+ p.rect.width = 1;
+ p.auto_resize = true;
}
- else
+
+ LLButton* btn = LLUICtrlFactory::create<LLButton>(p);
+ mNumButtons++;
+ btn->autoResize();
+ if (form_element["default"].asBoolean())
{
- button_rows = llmax( 1, llceil(buttons_num / 3.0f));
+ setDefaultBtn(btn);
}
- S32 button_panel_height = button_rows * BTN_HEIGHT + (button_rows + 1) * VPAD + BOTTOM_PAD;
+ return btn;
+}
+
+LLToastNotifyPanel::~LLToastNotifyPanel()
+{
+ std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer());
+}
+void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 left_pad, S32 top)
+{
+ S32 left = left_pad;
+ LLButton* ignore_btn = NULL;
+ for (std::vector<index_button_pair_t>::const_iterator it = buttons.begin(); it != buttons.end(); it++)
+ {
+ if(left + it->second->getRect().getWidth() + 2*HPAD > getRect().getWidth())
+ {
+ // looks like we need to add button to the next row
+ left = left_pad;
+ top-= (BTN_HEIGHT + VPAD);
+ }
+ LLRect btn_rect(it->second->getRect());
+ if(mIsScriptDialog && it->first == -1)
+ {
+ //this is ignore button ( index == -1) we need to add it into new extra row at the end
+ ignore_btn = it->second;
+ continue;
+ }
+ btn_rect.setLeftTopAndSize(left, top, btn_rect.getWidth(), btn_rect.getHeight());
+ it->second->setRect(btn_rect);
+ left = btn_rect.mLeft + btn_rect.getWidth() + left_pad;
+ addChild(it->second, -1);
+ }
+ if(ignore_btn)
+ {
+ LLRect btn_rect(ignore_btn->getRect());
+ btn_rect.setOriginAndSize(getRect().getWidth() - btn_rect.getWidth() - left_pad,
+ BOTTOM_PAD,// move button at the bottom edge
+ btn_rect.getWidth(), btn_rect.getHeight());
+ ignore_btn->setRect(btn_rect);
+ addChild(ignore_btn, -1);
+ }
+}
+void LLToastNotifyPanel::adjustPanelForScriptNotice(S32 button_panel_width, S32 button_panel_height)
+{
//adjust layout
+ // we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed
LLRect button_rect = mControlPanel->getRect();
- reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight() + button_panel_height);
+ reshape(getRect().getWidth(), mInfoPanel->getRect().getHeight() + button_panel_height + VPAD);
button_rect.set(0, button_rect.mBottom + button_panel_height, button_rect.getWidth(), button_rect.mBottom);
mControlPanel->reshape(button_rect.getWidth(), button_panel_height);
mControlPanel->setRect(button_rect);
}
-// static
void LLToastNotifyPanel::adjustPanelForTipNotice()
{
LLRect info_rect = mInfoPanel->getRect();
@@ -208,64 +305,3 @@ void LLToastNotifyPanel::onClickButton(void* data)
}
self->mNotification->respond(response);
}
-
-// virtual
-LLButton* LLToastNotifyPanel::addButton(const std::string& name, const std::string& label, BOOL is_option, BOOL is_default)
-{
- LLRect btn_rect;
- LLButton* btn;
- S32 btn_height= BTN_HEIGHT;
- const LLFontGL* font = sFont;
- S32 ignore_pad = 0;
- S32 button_index = mNumButtons;
- S32 index = button_index;
- S32 x = HPAD * 2; // *2 - to make a nice offset
-
- if (mIsScriptDialog)
- {
- // Add two "blank" option spaces, before the "Ignore" button
- index = button_index + 2;
- if (button_index == 0)
- {
- // Ignore button is smaller, less wide
- btn_height = BTN_HEIGHT_SMALL;
- font = sFontSmall;
- ignore_pad = 10;
- }
- }
-
- btn_rect.setOriginAndSize(x + (index % 3) * (BUTTON_WIDTH+HPAD+HPAD) + ignore_pad,
- BOTTOM_PAD + (index / 3) * (BTN_HEIGHT+VPAD),
- BUTTON_WIDTH - 2*ignore_pad,
- btn_height);
-
- InstanceAndS32* userdata = new InstanceAndS32;
- userdata->mSelf = this;
- userdata->mButtonName = is_option ? name : "";
-
- mBtnCallbackData.push_back(userdata);
-
- LLButton::Params p;
- p.name(name);
- p.label(label);
- p.rect(btn_rect);
- p.click_callback.function(boost::bind(&LLToastNotifyPanel::onClickButton, userdata));
- p.font(font);
- if (mIsCaution)
- {
- p.image_color(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
- p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
- }
- btn = LLUICtrlFactory::create<LLButton>(p);
-
-
- mControlPanel->addChild(btn, -1);
-
- if (is_default)
- {
- setDefaultBtn(btn);
- }
-
- mNumButtons++;
- return btn;
-}
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index 04525387b3..1f50c21f6f 100644
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -57,7 +57,7 @@ public:
virtual ~LLToastNotifyPanel();
protected:
- LLButton* addButton(std::string const &name, const std::string& label, BOOL is_option, BOOL is_default);
+ LLButton* createButton(const LLSD& form_element, BOOL is_option);
// Used for callbacks
struct InstanceAndS32
@@ -69,8 +69,11 @@ protected:
private:
- void adjustPanelForScriptNotice(const boost::shared_ptr<LLNotificationForm> form);
+ typedef std::pair<int,LLButton*> index_button_pair_t;
+ void adjustPanelForScriptNotice(S32 max_width, S32 max_height);
void adjustPanelForTipNotice();
+ void addDefaultButton();
+ void updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 left_pad, S32 top);
// panel elements
LLTextBase* mTextBox;
diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp
index bf6d715c31..edbaa0d45a 100644
--- a/indra/newview/lltoolbar.cpp
+++ b/indra/newview/lltoolbar.cpp
@@ -60,7 +60,7 @@
#include "lltoolmgr.h"
#include "llui.h"
#include "llviewermenu.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llpanelblockedlist.h"
#include "llscrolllistctrl.h"
#include "llscrolllistitem.h"
@@ -70,7 +70,6 @@
#include "llviewerwindow.h"
#include "lltoolgrab.h"
#include "llcombobox.h"
-#include "llfloaterchat.h"
#include "llimpanel.h"
#include "lllayoutstack.h"
@@ -281,21 +280,6 @@ void LLToolBar::updateCommunicateList()
}
itemp = communicate_button->addElement(contact_sd, ADD_TOP);
- LLSD communicate_sd;
- communicate_sd["value"] = "local chat";
- communicate_sd["columns"][0]["value"] = LLFloaterChat::getInstance()->getShortTitle();
-
- if (LLFloaterChat::getInstance() == frontmost_floater)
- {
- communicate_sd["columns"][0]["font"]["name"] = "SANSSERIF_SMALL";
- communicate_sd["columns"][0]["font"]["style"] = "BOLD";
- if (selected.isUndefined())
- {
- selected = "local chat";
- }
- }
- itemp = communicate_button->addElement(communicate_sd, ADD_TOP);
-
communicate_button->addSeparator(ADD_TOP);
communicate_button->add(getString("Redock Windows"), LLSD("redock"), ADD_TOP);
communicate_button->addSeparator(ADD_TOP);
@@ -357,8 +341,7 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)
if(chatterbox_instance)
{
chatterbox_instance->addFloater(LLFloaterMyFriends::getInstance(), FALSE);
- chatterbox_instance->addFloater(LLFloaterChat::getInstance(), FALSE);
-
+
LLUUID session_to_show;
std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it;
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index aa35f22930..4420b046d8 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -41,7 +41,7 @@
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "lldictionary.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterreg.h"
#include "llfloatertools.h"
#include "llgesturemgr.h"
@@ -1199,11 +1199,11 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,
locateInventory(item, cat);
if(!item || !item->isComplete()) return;
- if (regionp
- && (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX))
- {
- LLFirstUse::useSandbox();
- }
+ //if (regionp
+ // && (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX))
+ //{
+ // LLFirstUse::useSandbox();
+ //}
// check if it cannot be copied, and mark as remove if it is -
// this will remove the object from inventory after rez. Only
// bother with this check if we would not normally remove from
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index 26b3bdb82e..fd12163fd3 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -38,7 +38,7 @@
#include "llmenugl.h"
#include "llfloaterreg.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
// tools and manipulators
#include "lltool.h"
#include "llmanipscale.h"
@@ -301,7 +301,7 @@ void LLToolMgr::toggleBuildMode()
getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
// Could be first use
- LLFirstUse::useBuild();
+ //LLFirstUse::useBuild();
gAgent.resetView(false);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 412878eef5..da68af1597 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -41,7 +41,7 @@
#include "llagent.h"
#include "llviewercontrol.h"
#include "llfocusmgr.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterland.h"
#include "llfloaterreg.h"
#include "llfloaterscriptdebug.h"
@@ -1515,7 +1515,7 @@ BOOL LLToolPie::pickRightMouseDownCallback()
}
else
{
- mute_msg = LLTrans::getString("MuteObject");
+ mute_msg = LLTrans::getString("MuteObject2");
}
gMenuHolder->childSetText("Object Mute", mute_msg);
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
index a7f4cb558e..612bcc03bd 100644
--- a/indra/newview/lltoolplacer.cpp
+++ b/indra/newview/lltoolplacer.cpp
@@ -38,7 +38,7 @@
// viewer headers
#include "llbutton.h"
#include "llviewercontrol.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloatertools.h"
#include "llselectmgr.h"
#include "llstatusbar.h"
@@ -188,7 +188,7 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )
if (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX)
{
- LLFirstUse::useSandbox();
+ //LLFirstUse::useSandbox();
}
// Set params for new object based on its PCode.
@@ -491,7 +491,7 @@ BOOL LLToolPlacer::addDuplicate(S32 x, S32 y)
if (regionp
&& (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX))
{
- LLFirstUse::useSandbox();
+ //LLFirstUse::useSandbox();
}
return TRUE;
diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp
index e8b5aa7c74..08dd82ab86 100644
--- a/indra/newview/llurlhistory.cpp
+++ b/indra/newview/llurlhistory.cpp
@@ -77,7 +77,7 @@ bool LLURLHistory::saveFile(const std::string& filename)
std::string temp_str = gDirUtilp->getLindenUserDir();
if( temp_str.empty() )
{
- llwarns << "Can't save. No user directory set." << llendl;
+ llinfos << "Can't save URL history - no user directory set yet." << llendl;
return false;
}
diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp
index da69039cf9..46bc9276c1 100644
--- a/indra/newview/llurlwhitelist.cpp
+++ b/indra/newview/llurlwhitelist.cpp
@@ -121,6 +121,12 @@ bool LLUrlWhiteList::save ()
// build filename for each user
std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );
+ if (resolvedFilename.empty())
+ {
+ llinfos << "No per-user dir for saving URL whitelist - presumably not logged in yet. Skipping." << llendl;
+ return false;
+ }
+
// open a file for writing
llofstream file ( resolvedFilename );
if ( file.is_open () )
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 4d559e2ca7..7b9b12108d 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -45,7 +45,7 @@
#include "lldynamictexture.h"
#include "lldrawpoolalpha.h"
#include "llfeaturemanager.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llhudmanager.h"
#include "llimagebmp.h"
#include "llmemory.h"
@@ -404,7 +404,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if( arrival_fraction > 1.f )
{
arrival_fraction = 1.f;
- LLFirstUse::useTeleport();
+ //LLFirstUse::useTeleport();
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
}
gViewerWindow->setProgressCancelButtonVisible(FALSE, LLTrans::getString("Cancel"));
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index e81115c8ab..3a834e7532 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -54,7 +54,6 @@
#include "llfloaterbulkpermission.h"
#include "llfloaterbump.h"
#include "llfloatercamera.h"
-#include "llfloaterchat.h"
#include "llfloaterchatterbox.h"
#include "llfloaterdaycycle.h"
#include "llfloatersearch.h"
@@ -154,7 +153,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("bumps", "floater_bumps.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBump>);
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
- LLFloaterReg::add("chat", "floater_chat_history.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChat>);
+ //LLFloaterReg::add("chat", "floater_chat_history.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChat>);
LLFloaterReg::add("nearby_chat", "floater_nearby_chat.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNearbyChat>);
LLFloaterReg::add("communicate", "floater_chatterbox.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatterBox>);
LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);
diff --git a/indra/newview/llviewerhelputil.cpp b/indra/newview/llviewerhelputil.cpp
index 5ba4fc834c..967a2925e3 100644
--- a/indra/newview/llviewerhelputil.cpp
+++ b/indra/newview/llviewerhelputil.cpp
@@ -34,6 +34,7 @@
#include "llviewerprecompiledheaders.h"
#include "llviewerhelputil.h"
+#include "llagent.h"
#include "llsd.h"
#include "llstring.h"
#include "lluri.h"
@@ -63,6 +64,7 @@ std::string LLViewerHelpUtil::buildHelpURL( const std::string &topic)
{
LLSD substitution;
substitution["TOPIC"] = helpURLEncode(topic);
+ substitution["DEBUG_MODE"] = gAgent.isGodlike() ? "/debug" : "";
// get the help URL and expand all of the substitutions
// (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 5605f425e0..b330c1ba83 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -44,6 +44,7 @@
#include "llconsole.h"
#include "llinventorymodel.h"
#include "llgesturemgr.h"
+#include "llsidetray.h"
#include "llinventorybridge.h"
#include "llfloaterinventory.h"
@@ -72,7 +73,23 @@ public:
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
{
- if (params.size() < 2) return false;
+ if (params.size() < 1)
+ {
+ return false;
+ }
+
+ // support secondlife:///app/inventory/show
+ if (params[0].asString() == "show")
+ {
+ LLSideTray::getInstance()->showPanel("sidepanel_inventory", LLSD());
+ return true;
+ }
+
+ // otherwise, we need a UUID and a verb...
+ if (params.size() < 2)
+ {
+ return false;
+ }
LLUUID inventory_id;
if (!inventory_id.set(params[0], FALSE))
{
@@ -823,6 +840,13 @@ void CreateGestureCallback::fire(const LLUUID& inv_item)
gFloaterView->adjustToFitScreen(preview, FALSE);
}
+void AddFavoriteLandmarkCallback::fire(const LLUUID& inv_item_id)
+{
+ if (mTargetLandmarkId.isNull()) return;
+
+ gInventory.rearrangeFavoriteLandmarks(inv_item_id, mTargetLandmarkId);
+}
+
LLInventoryCallbackManager gInventoryCallbacks;
void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
@@ -1158,6 +1182,15 @@ const std::string& LLViewerInventoryItem::getDisplayName() const
return mDisplayName = hasSortField ? result : LLInventoryItem::getName();
}
+// static
+std::string LLViewerInventoryItem::getDisplayName(const std::string& name)
+{
+ std::string result;
+ BOOL hasSortField = extractSortFieldAndDisplayName(name, 0, &result);
+
+ return hasSortField ? result : name;
+}
+
S32 LLViewerInventoryItem::getSortField() const
{
S32 result;
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 412a2c66e6..917b8747ea 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -66,6 +66,7 @@ public:
virtual const LLUUID& getAssetUUID() const;
virtual const std::string& getName() const;
virtual const std::string& getDisplayName() const;
+ static std::string getDisplayName(const std::string& name);
virtual S32 getSortField() const;
virtual void setSortField(S32 sortField);
virtual void rename(const std::string& new_name);
@@ -279,6 +280,18 @@ public:
void fire(const LLUUID& inv_item);
};
+class AddFavoriteLandmarkCallback : public LLInventoryCallback
+{
+public:
+ AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {}
+ void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; }
+
+private:
+ void fire(const LLUUID& inv_item);
+
+ LLUUID mTargetLandmarkId;
+};
+
// misc functions
//void inventory_reliable_callback(void**, S32 status);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 023c288d92..04d67fe750 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -56,7 +56,7 @@
#include "lluuid.h"
#include "llkeyboard.h"
#include "llmutelist.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include <boost/bind.hpp> // for SkinFolder listener
#include <boost/signals2.hpp>
@@ -1006,6 +1006,8 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mInNearbyMediaList(false),
mClearCache(false),
mBackgroundColor(LLColor4::white),
+ mNavigateSuspended(false),
+ mNavigateSuspendedDeferred(false),
mIsUpdated(false)
{
@@ -1244,7 +1246,24 @@ void LLViewerMediaImpl::loadURI()
{
if(mMediaSource)
{
- mMediaSource->loadURI( mMediaURL );
+ // *HACK: we don't know if the URI coming in is properly escaped
+ // (the contract doesn't specify whether it is escaped or not.
+ // but LLQtWebKit expects it to be, so we do our best to encode
+ // special characters)
+ // The strings below were taken right from http://www.ietf.org/rfc/rfc1738.txt
+ // Note especially that '%' and '/' are there.
+ std::string uri = LLURI::escape(mMediaURL,
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+ "0123456789"
+ "$-_.+"
+ "!*'(),"
+ "{}|\\^~[]`"
+ "<>#%"
+ ";/?:@&=",
+ false);
+ llinfos << "Asking media source to load URI: " << uri << llendl;
+
+ mMediaSource->loadURI( uri );
if(mPreviousMediaState == MEDIA_PLAYING)
{
@@ -1696,6 +1715,13 @@ void LLViewerMediaImpl::navigateInternal()
// Helpful to have media urls in log file. Shouldn't be spammy.
llinfos << "media id= " << mTextureId << " url=" << mMediaURL << " mime_type=" << mMimeType << llendl;
+ if(mNavigateSuspended)
+ {
+ llwarns << "Deferring navigate." << llendl;
+ mNavigateSuspendedDeferred = true;
+ return;
+ }
+
if(mMimeTypeProbe != NULL)
{
llwarns << "MIME type probe already in progress -- bailing out." << llendl;
@@ -1902,7 +1928,17 @@ void LLViewerMediaImpl::update()
return;
}
+ // Make sure a navigate doesn't happen during the idle -- it can cause mMediaSource to get destroyed, which can cause a crash.
+ setNavigateSuspended(true);
+
mMediaSource->idle();
+
+ setNavigateSuspended(false);
+
+ if(mMediaSource == NULL)
+ {
+ return;
+ }
if(mMediaSource->isPluginExited())
{
@@ -2559,6 +2595,23 @@ void LLViewerMediaImpl::setNavState(EMediaNavState state)
}
}
+void LLViewerMediaImpl::setNavigateSuspended(bool suspend)
+{
+ if(mNavigateSuspended != suspend)
+ {
+ mNavigateSuspended = suspend;
+ if(!suspend)
+ {
+ // We're coming out of suspend. If someone tried to do a navigate while suspended, do one now instead.
+ if(mNavigateSuspendedDeferred)
+ {
+ mNavigateSuspendedDeferred = false;
+ navigateInternal();
+ }
+ }
+ }
+}
+
void LLViewerMediaImpl::cancelMimeTypeProbe()
{
if(mMimeTypeProbe != NULL)
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 8a5cd804aa..ff18ed605a 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -326,7 +326,11 @@ public:
EMediaNavState getNavState() { return mMediaNavState; }
void setNavState(EMediaNavState state);
+ void setNavigateSuspended(bool suspend);
+ bool isNavigateSuspended() { return mNavigateSuspended; };
+
void cancelMimeTypeProbe();
+
private:
// a single media url with some data and an impl.
LLPluginClassMedia* mMediaSource;
@@ -372,6 +376,8 @@ private:
bool mInNearbyMediaList; // used by LLFloaterNearbyMedia::refreshList() for performance reasons
bool mClearCache;
LLColor4 mBackgroundColor;
+ bool mNavigateSuspended;
+ bool mNavigateSuspendedDeferred;
private:
BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 1bff04352c..d96d7df24a 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -48,11 +48,10 @@
#include "llconsole.h"
#include "lldebugview.h"
#include "llfilepicker.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterbuy.h"
#include "llfloaterbuycontents.h"
#include "llfloaterbuycurrency.h"
-#include "llfloaterchat.h"
#include "llfloatercustomize.h"
#include "llfloaterchatterbox.h"
#include "llfloatergodtools.h"
@@ -2491,7 +2490,7 @@ class LLObjectBuild : public view_listener_t
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
// Could be first use
- LLFirstUse::useBuild();
+ //LLFirstUse::useBuild();
return true;
}
};
@@ -2536,7 +2535,7 @@ void handle_object_edit()
LLViewerJoystick::getInstance()->setNeedsReset(true);
// Could be first use
- LLFirstUse::useBuild();
+ //LLFirstUse::useBuild();
return;
}
@@ -2587,7 +2586,7 @@ class LLLandBuild : public view_listener_t
LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
// Could be first use
- LLFirstUse::useBuild();
+ //LLFirstUse::useBuild();
return true;
}
};
@@ -2824,7 +2823,7 @@ bool handle_go_to()
}
// Could be first use
- LLFirstUse::useGoTo();
+ //LLFirstUse::useGoTo();
return true;
}
@@ -3365,14 +3364,49 @@ void handle_show_side_tray()
root->addChild(side_tray);
}
-class LLShowPanelPeopleTab : public view_listener_t
+// Toggle one of "People" panel tabs in side tray.
+class LLTogglePanelPeopleTab : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- // Open tab of the "People" panel in side tray.
+ std::string panel_name = userdata.asString();
+
LLSD param;
- param["people_panel_tab_name"] = userdata.asString();
- LLSideTray::getInstance()->showPanel("panel_people", param);
+ param["people_panel_tab_name"] = panel_name;
+
+ static LLPanel* friends_panel = NULL;
+ static LLPanel* groups_panel = NULL;
+ static LLPanel* nearby_panel = NULL;
+
+ if (panel_name == "friends_panel")
+ {
+ return togglePeoplePanel(friends_panel, panel_name, param);
+ }
+ else if (panel_name == "groups_panel")
+ {
+ return togglePeoplePanel(groups_panel, panel_name, param);
+ }
+ else if (panel_name == "nearby_panel")
+ {
+ return togglePeoplePanel(nearby_panel, panel_name, param);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ static bool togglePeoplePanel(LLPanel* &panel, const std::string& panel_name, const LLSD& param)
+ {
+ if(!panel)
+ {
+ panel = LLSideTray::getInstance()->getPanel(panel_name);
+ if(!panel)
+ return false;
+ }
+
+ LLSideTray::getInstance()->togglePanel(panel, "panel_people", param);
+
return true;
}
};
@@ -3626,7 +3660,7 @@ void near_sit_down_point(BOOL success, void *)
gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND);
// Might be first sit
- LLFirstUse::useSit();
+ //LLFirstUse::useSit();
}
}
@@ -5144,7 +5178,7 @@ void toggle_debug_menus(void*)
gSavedSettings.setBOOL("UseDebugMenus", visible);
if(visible)
{
- LLFirstUse::useDebugMenus();
+ //LLFirstUse::useDebugMenus();
}
show_debug_menus();
}
@@ -6339,51 +6373,8 @@ class LLToolsSelectedScriptAction : public view_listener_t
void handle_selected_texture_info(void*)
{
- for (LLObjectSelection::valid_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_begin();
- iter != LLSelectMgr::getInstance()->getSelection()->valid_end(); iter++)
- {
- LLSelectNode* node = *iter;
-
- std::string msg;
- msg.assign("Texture info for: ");
- msg.append(node->mName);
- LLChat chat(msg);
- LLFloaterChat::addChat(chat);
-
- U8 te_count = node->getObject()->getNumTEs();
- // map from texture ID to list of faces using it
- typedef std::map< LLUUID, std::vector<U8> > map_t;
- map_t faces_per_texture;
- for (U8 i = 0; i < te_count; i++)
- {
- if (!node->isTESelected(i)) continue;
-
- LLViewerTexture* img = node->getObject()->getTEImage(i);
- LLUUID image_id = img->getID();
- faces_per_texture[image_id].push_back(i);
- }
- // Per-texture, dump which faces are using it.
- map_t::iterator it;
- for (it = faces_per_texture.begin(); it != faces_per_texture.end(); ++it)
- {
- LLUUID image_id = it->first;
- U8 te = it->second[0];
- LLViewerTexture* img = node->getObject()->getTEImage(te);
- S32 height = img->getHeight();
- S32 width = img->getWidth();
- S32 components = img->getComponents();
- msg = llformat("%dx%d %s on face ",
- width,
- height,
- (components == 4 ? "alpha" : "opaque"));
- for (U8 i = 0; i < it->second.size(); ++i)
- {
- msg.append( llformat("%d ", (S32)(it->second[i])));
- }
- LLChat chat(msg);
- LLFloaterChat::addChat(chat);
- }
- }
+ //useless without LLFloaterChat
+ //as since we don't use LLFloaterChat...
}
void handle_test_male(void*)
@@ -7898,7 +7889,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments");
// we don't use boost::bind directly to delay side tray construction
- view_listener_t::addMenu( new LLShowPanelPeopleTab(), "SideTray.PanelPeopleTab");
+ view_listener_t::addMenu( new LLTogglePanelPeopleTab(), "SideTray.PanelPeopleTab");
// Avatar pie menu
view_listener_t::addMenu(new LLObjectMute(), "Avatar.Mute");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 4e5655274d..5279c4174a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -51,10 +51,9 @@
#include "llagent.h"
#include "llcallingcard.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterbuycurrency.h"
#include "llfloaterbuyland.h"
-#include "llfloaterchat.h"
#include "llfloaterland.h"
#include "llfloaterregioninfo.h"
#include "llfloaterlandholdings.h"
@@ -711,6 +710,18 @@ protected:
}
};
+class LLOpenTaskGroupOffer : public LLInventoryAddedObserver
+{
+protected:
+ /*virtual*/ void done()
+ {
+ open_inventory_offer(mAdded, "group_offer");
+ mAdded.clear();
+ gInventory.removeObserver(this);
+ delete this;
+ }
+};
+
//one global instance to bind them
LLOpenTaskOffer* gNewInventoryObserver=NULL;
@@ -726,6 +737,7 @@ void start_new_inventory_observer()
class LLDiscardAgentOffer : public LLInventoryFetchComboObserver
{
+ LOG_CLASS(LLDiscardAgentOffer);
public:
LLDiscardAgentOffer(const LLUUID& folder_id, const LLUUID& object_id) :
mFolderID(folder_id),
@@ -822,9 +834,13 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
message << ", automatic preview disabled for "
<< OFFER_THROTTLE_TIME << " seconds.";
- chat.mText = message.str();
+
//this is kinda important, so actually put it on screen
- LLFloaterChat::addChat(chat, FALSE, FALSE);
+ std::string log_msg = message.str();
+ LLSD args;
+ args["MESSAGE"] = log_msg;
+ LLNotificationsUtil::add("SystemMessage", args);
+
throttle_logged=true;
}
return false;
@@ -929,9 +945,6 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
case LLAssetType::AT_ANIMATION:
LLFloaterReg::showInstance("preview_anim", LLSD(item_id), take_focus);
break;
- case LLAssetType::AT_GESTURE:
- LLFloaterReg::showInstance("preview_gesture", LLSD(item_id), take_focus);
- break;
case LLAssetType::AT_SCRIPT:
LLFloaterReg::showInstance("preview_script", LLSD(item_id), take_focus);
break;
@@ -1105,7 +1118,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
// * callback may be called immediately,
// * adding the mute sends a message,
// * we can't build two messages at once.
- if (2 == button)
+ if (2 == button) // Block
{
gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4,this));
}
@@ -1146,6 +1159,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
}
break;
case IM_GROUP_NOTICE:
+ opener = new LLOpenTaskGroupOffer;
send_auto_receive_response();
break;
case IM_TASK_INVENTORY_OFFERED:
@@ -1167,8 +1181,9 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
if (check_offer_throttle(mFromName, true))
{
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- chat.mText = log_message;
- LLFloaterChat::addChatHistory(chat);
+ LLSD args;
+ args["MESSAGE"] = log_message;
+ LLNotificationsUtil::add("SystemMessage", args);
}
break;
@@ -1341,8 +1356,10 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
if (check_offer_throttle(mFromName, true))
{
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
- chat.mText = log_message;
- LLFloaterChat::addChatHistory(chat);
+ //TODO* should go to history only - how?
+ //LLSD args;
+ //args["MESSAGE"] = log_message;
+ //LLNotificationsUtil::add("SystemMessage", args);
}
// we will want to open this item when it comes back.
@@ -1384,13 +1401,11 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
// send the message
msg->sendReliable(mHost);
- log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
- chat.mText = log_message;
- if( LLMuteList::getInstance()->isMuted(mFromID ) && ! LLMuteList::getInstance()->isLinden(mFromName) ) // muting for SL-42269
- {
- chat.mMuted = TRUE;
- }
- LLFloaterChat::addChatHistory(chat);
+ //TODO* should go to message history only...
+ //log_message = LLTrans::getString("InvOfferYouDecline") + " " + mDesc + " " + LLTrans::getString("InvOfferFrom") + " " + mFromName +".";
+ //LLSD args;
+ //args["MESSAGE"] = log_message;
+ //LLNotificationsUtil::add("SystemMessage", args);
if (busy && (!mFromGroup && !mFromObject))
{
@@ -1752,10 +1767,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
-
- // pretend this is chat generated by self, so it does not show up on screen
- chat.mText = std::string("IM: ") + name + separator_string + message;
- LLFloaterChat::addChat( chat, TRUE, TRUE );
}
else if (from_id.isNull())
{
@@ -1811,19 +1822,24 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
- chat.mText = std::string("IM: ") + name + separator_string + saved + message;
-
- BOOL local_agent = FALSE;
- LLFloaterChat::addChat( chat, TRUE, local_agent );
}
else
{
// muted user, so don't start an IM session, just record line in chat
// history. Pretend the chat is from a local agent,
// so it will go into the history but not be shown on screen.
+
+ //TODO* should go to message hisyory only
+ //and this is not system message...
+ //LLSD args;
+ //args["MESSAGE"] = buffer;
+ //LLNotificationsUtil::add("SystemMessage", args);
+
+ /*
chat.mText = buffer;
BOOL local_agent = TRUE;
LLFloaterChat::addChat( chat, TRUE, local_agent );
+ */
}
}
break;
@@ -2044,6 +2060,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
//if (((is_busy && !is_owned_by_me) || is_muted))
if ( is_muted || mute_im)
{
+ // Prefetch the offered item so that it can be discarded by the appropriate observer. (EXT-4331)
+ LLInventoryFetchObserver::item_ref_t items;
+ items.push_back(info->mObjectID);
+ LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver();
+ fetch_item->fetchItems(items);
+ delete fetch_item;
+
// Same as closing window
info->forceResponse(IOR_DECLINE);
}
@@ -2120,9 +2143,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
region_id,
position,
true);
-
- chat.mText = std::string("IM: ") + name + separator_string + saved + message;
- LLFloaterChat::addChat(chat, TRUE, is_this_agent);
}
break;
@@ -2136,6 +2156,48 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// Build a link to open the object IM info window.
std::string location = ll_safe_string((char*)binary_bucket, binary_bucket_size-1);
+ if (session_id.notNull())
+ {
+ chat.mFromID = session_id;
+ }
+ else
+ {
+ // This message originated on a region without the updated code for task id and slurl information.
+ // We just need a unique ID for this object that isn't the owner ID.
+ // If it is the owner ID it will overwrite the style that contains the link to that owner's profile.
+ // This isn't ideal - it will make 1 style for all objects owned by the the same person/group.
+ // This works because the only thing we can really do in this case is show the owner name and link to their profile.
+ chat.mFromID = from_id ^ gAgent.getSessionID();
+ }
+
+ LLSD query_string;
+ query_string["owner"] = from_id;
+ query_string["slurl"] = location;
+ query_string["name"] = name;
+ if (from_group)
+ {
+ query_string["groupowned"] = "true";
+ }
+
+ std::ostringstream link;
+ link << "secondlife:///app/objectim/" << session_id << LLURI::mapToQueryString(query_string);
+
+ chat.mURL = link.str();
+ chat.mText = message;
+ chat.mSourceType = CHAT_SOURCE_OBJECT;
+
+ // Note: lie to Nearby Chat, pretending that this is NOT an IM, because
+ // IMs from obejcts don't open IM sessions.
+ LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+ if(nearby_chat)
+ {
+ nearby_chat->addMessage(chat);
+ }
+
+
+ //Object IMs send with from name: 'Second Life' need to be displayed also in notification toasts (EXT-1590)
+ if (SYSTEM_FROM != name) break;
+
LLSD substitutions;
substitutions["NAME"] = name;
substitutions["MSG"] = message;
@@ -2627,22 +2689,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
chat.mMuted = is_muted && !is_linden;
- if (!visible_in_chat_bubble
- && (is_linden || !is_busy || is_owned_by_me))
- {
- // show on screen and add to history
- LLNotificationsUI::LLNotificationManager::instance().onChat(
- chat, LLNotificationsUI::NT_NEARBYCHAT);
-
- LLFloaterChat::addChat(chat, FALSE, FALSE);
- }
- else
- {
- LLNotificationsUI::LLNotificationManager::instance().onChat(
+ LLNotificationsUI::LLNotificationManager::instance().onChat(
chat, LLNotificationsUI::NT_NEARBYCHAT);
- // adding temporarily
- LLFloaterChat::addChatHistory(chat);
- }
}
}
@@ -3027,9 +3075,11 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
if (avatarp)
{
// Chat the "back" SLURL. (DEV-4907)
- LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
- chat.mSourceType = CHAT_SOURCE_SYSTEM;
- LLFloaterChat::addChatHistory(chat);
+
+ //should go to history only so leave commented
+ //LLSD args;
+ //args["MESSAGE"] = message;
+ //LLNotificationsUtil::add("SystemMessage", args);
// Set the new position
avatarp->setPositionAgent(agent_pos);
@@ -4335,10 +4385,10 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
if (gStatusBar)
{
- S32 old_balance = gStatusBar->getBalance();
+ // S32 old_balance = gStatusBar->getBalance();
// This is an update, not the first transmission of balance
- if (old_balance != 0)
+ /* if (old_balance != 0)
{
// this is actually an update
if (balance > old_balance)
@@ -4350,7 +4400,7 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
LLFirstUse::useBalanceDecrease(balance - old_balance);
}
}
-
+ */
gStatusBar->setBalance(balance);
gStatusBar->setLandCredit(credit);
gStatusBar->setLandCommitted(committed);
@@ -5360,8 +5410,24 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
it != notification["payload"]["ids"].endArray();
++it)
{
+ LLUUID target_id = it->asUUID();
+
msg->nextBlockFast(_PREHASH_TargetData);
- msg->addUUIDFast(_PREHASH_TargetID, it->asUUID());
+ msg->addUUIDFast(_PREHASH_TargetID, target_id);
+
+ // Record the offer.
+ {
+ std::string target_name;
+ gCacheName->getFullName(target_id, target_name);
+ LLSD args;
+ args["TO_NAME"] = target_name;
+
+ LLSD payload;
+ payload["from_id"] = target_id;
+ payload["SESSION_NAME"] = target_name;
+ payload["SUPPRESS_TOAST"] = true;
+ LLNotificationsUtil::add("TeleportOfferSent", args, payload);
+ }
}
gAgent.sendReliableMessage();
}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 56dee6b34c..e8b435fc8f 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -45,7 +45,7 @@
#include "llviewermediafocus.h"
#include "llviewerparcelmediaautoplay.h"
#include "llnotificationsutil.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llpluginclassmedia.h"
#include "llviewertexture.h"
@@ -242,7 +242,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
sMediaImpl->navigateTo(media_url, mime_type, true);
}
- LLFirstUse::useMedia();
+ //LLFirstUse::useMedia();
LLViewerParcelMediaAutoPlay::playStarted();
}
@@ -281,7 +281,7 @@ void LLViewerParcelMedia::start()
}
sMediaImpl->start();
- LLFirstUse::useMedia();
+ //LLFirstUse::useMedia();
LLViewerParcelMediaAutoPlay::playStarted();
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 5a5c4e7480..10a95443f1 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -50,7 +50,7 @@
#include "llagent.h"
#include "llviewerwindow.h"
#include "llviewercontrol.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llfloaterbuyland.h"
#include "llfloatergroups.h"
#include "llfloaternearbymedia.h"
@@ -1320,14 +1320,37 @@ void LLViewerParcelMgr::sendParcelPropertiesUpdate(LLParcel* parcel, bool use_ag
void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos)
{
- //FIXME: only request parcel info when tooltip is shown
- return;
- /*LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos );
+ static U32 last_west, last_south;
+
+
+ // only request parcel info when tooltip is shown
+ if (!gSavedSettings.getBOOL("ShowLandHoverTip"))
+ {
+ return;
+ }
+
+ // only request parcel info if position has changed outside of the
+ // last parcel grid step
+ U32 west_parcel_step = (U32) floor( pos.mdV[VX] / PARCEL_GRID_STEP_METERS );
+ U32 south_parcel_step = (U32) floor( pos.mdV[VY] / PARCEL_GRID_STEP_METERS );
+
+ if ((west_parcel_step == last_west) && (south_parcel_step == last_south))
+ {
+ return;
+ }
+ else
+ {
+ last_west = west_parcel_step;
+ last_south = south_parcel_step;
+ }
+
+ LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos );
if (!region)
{
return;
}
+
// Send a rectangle around the point.
// This means the parcel sent back is at least a rectangle around the point,
// which is more efficient for public land. Fewer requests are sent. JC
@@ -1354,7 +1377,7 @@ void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos)
msg->addBOOL("SnapSelection", FALSE );
msg->sendReliable( region->getHost() );
- mHoverRequestResult = PARCEL_RESULT_NO_DATA;*/
+ mHoverRequestResult = PARCEL_RESULT_NO_DATA;
}
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 300aea1620..2e92512b31 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -37,7 +37,6 @@
#include "llagent.h"
#include "llaudioengine.h"
#include "llavataractions.h"
-#include "llfloaterchat.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
#include "llfocusmgr.h"
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 1edaeec848..ad993bc056 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1513,16 +1513,20 @@ F32 LLViewerFetchedTexture::calcDecodePriority()
{
desired_discard -= 2;
}
- else if (!isJustBound() && mCachedRawImageReady && !mBoostLevel)
+ else if (!isJustBound() && mCachedRawImageReady)
{
- // We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is
- desired_discard = cur_discard;
- }
- else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE)
- {
- // We haven't rendered this in a while, de-prioritize it
- desired_discard += 2;
+ if(mBoostLevel < BOOST_HIGH)
+ {
+ // We haven't rendered this in a while, de-prioritize it
+ desired_discard += 2;
+ }
+ //else
+ //{
+ // // We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is
+ // desired_discard = cur_discard;
+ //}
}
+
S32 ddiscard = cur_discard - desired_discard;
ddiscard = llclamp(ddiscard, 0, 4);
priority = (ddiscard+1)*100000.f;
@@ -1629,7 +1633,7 @@ bool LLViewerFetchedTexture::updateFetch()
S32 desired_discard = getDesiredDiscardLevel();
F32 decode_priority = getDecodePriority();
decode_priority = llmax(decode_priority, 0.0f);
-
+
if (mIsFetching)
{
// Sets mRawDiscardLevel, mRawImage, mAuxRawImage
@@ -1772,10 +1776,10 @@ bool LLViewerFetchedTexture::updateFetch()
{
make_request = false;
}
- else if (!isJustBound() && mCachedRawImageReady)
- {
- make_request = false;
- }
+ //else if (!isJustBound() && mCachedRawImageReady)
+ //{
+ // make_request = false;
+ //}
else
{
if (mIsFetching)
@@ -1847,12 +1851,12 @@ BOOL LLViewerFetchedTexture::forceFetch()
{
return false ;
}
- if(mDesiredSavedRawDiscardLevel < getDiscardLevel())
+ //if(mDesiredSavedRawDiscardLevel < getDiscardLevel())
{
//no need to force fetching. normal fetching flow will do the work.
//return false ;
}
- if (mNeedsCreateTexture)
+ //if (mNeedsCreateTexture)
{
// We may be fetching still (e.g. waiting on write)
// but don't check until we've processed the raw data we have
@@ -1888,7 +1892,8 @@ BOOL LLViewerFetchedTexture::forceFetch()
h = getHeight(0);
c = getComponents();
}
- fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), maxDecodePriority(),
+ setDecodePriority(maxDecodePriority()) ;
+ fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), getDecodePriority(),
w, h, c, desired_discard, needsAux());
if (fetch_request_created)
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 6aaaa4021b..79d9c4e7bb 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -384,8 +384,6 @@ public:
void updateVirtualSize() ;
- // setDesiredDiscardLevel is only used by LLViewerTextureList
- void setDesiredDiscardLevel(S32 discard) { mDesiredDiscardLevel = discard; }
S32 getDesiredDiscardLevel() { return mDesiredDiscardLevel; }
void setMinDiscardLevel(S32 discard) { mMinDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel,(S8)discard); }
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 8252b7df00..6bb547373c 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -178,7 +178,7 @@ static std::string get_texture_list_name()
void LLViewerTextureList::doPrefetchImages()
{
- if (LLAppViewer::instance()->getPurgeCache())
+ if (LLAppViewer::instance()->getPurgeCache())
{
// cache was purged, no point
return;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ddaf4a221c..c1817496b1 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -101,7 +101,6 @@
#include "llfloaterbuildoptions.h"
#include "llfloaterbuyland.h"
#include "llfloatercamera.h"
-#include "llfloaterchat.h"
#include "llfloaterchatterbox.h"
#include "llfloatercustomize.h"
#include "llfloaterland.h"
@@ -1638,7 +1637,7 @@ void LLViewerWindow::shutdownGL()
LLViewerTextureManager::cleanup() ;
LLImageGL::cleanupClass() ;
- llinfos << "All texturs and llimagegl images are destroyed!" << llendl ;
+ llinfos << "All textures and llimagegl images are destroyed!" << llendl ;
llinfos << "Cleaning up select manager" << llendl;
LLSelectMgr::getInstance()->cleanup();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5958742db2..4235f97eab 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -56,7 +56,7 @@
#include "lldriverparam.h"
#include "lleditingmotion.h"
#include "llemote.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "llheadrotmotion.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
@@ -5604,7 +5604,7 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object)
if (isSelf())
{
// Might be first sit
- LLFirstUse::useSit();
+ //LLFirstUse::useSit();
gAgent.setFlying(FALSE);
gAgent.setThirdPersonHeadOffset(LLVector3::zero);
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 42b8a1c2b6..51a75b5825 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -62,7 +62,7 @@
#include "llimview.h" // for LLIMMgr
#include "llparcel.h"
#include "llviewerparcelmgr.h"
-#include "llfirstuse.h"
+//#include "llfirstuse.h"
#include "lltrans.h"
#include "llviewerwindow.h"
#include "llviewercamera.h"
@@ -70,7 +70,6 @@
#include "llvoicechannel.h"
#include "llfloaterfriends.h" //VIVOX, inorder to refresh communicate panel
-#include "llfloaterchat.h" // for LLFloaterChat::addChat()
// for base64 decoding
#include "apr_base64.h"
@@ -4709,10 +4708,6 @@ void LLVoiceClient::messageEvent(
LLUUID::null, // default arg
LLVector3::zero, // default arg
true); // prepend name and make it a link to the user's profile
-
- chat.mText = std::string("IM: ") + session->mName + std::string(": ") + message;
- // If the chat should come in quietly (i.e. we're in busy mode), pretend it's from a local agent.
- LLFloaterChat::addChat( chat, TRUE, quiet_chat );
}
}
}
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index d23bcf9006..d5dd19e470 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -2116,11 +2116,19 @@ viewer_media_t LLVOVolume::getMediaImpl(U8 face_id) const
F64 LLVOVolume::getTotalMediaInterest() const
{
+ // If this object is currently focused, this object has "high" interest
if (LLViewerMediaFocus::getInstance()->getFocusedObjectID() == getID())
return F64_MAX;
F64 interest = (F64)-1.0; // means not interested;
- int i = 0;
+
+ // If this object is selected, this object has "high" interest, but since
+ // there can be more than one, we still add in calculated impl interest
+ // XXX Sadly, 'contains()' doesn't take a const :(
+ if (LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this)))
+ interest = F64_MAX / 2.0;
+
+ int i = 0;
const int end = getNumTEs();
for ( ; i < end; ++i)
{
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 6da38fa0d4..e248047930 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -57,8 +57,11 @@
name="Black_50"
value="0 0 0 0.5" />
<color
+ name="FrogGreen"
+ value="0.26 0.345 0.263 1" />
+ <color
name="Red"
- value="1 0 0 1" />
+ value="0.729 0 0.121 1" />
<color
name="Blue"
value="0 0 1 1" />
@@ -71,16 +74,19 @@
<color
name="Transparent"
value="0 0 0 0" />
+ <color
+ name="Purple"
+ value="1 0 1 1" />
<!-- This color name makes potentially unused colors show up bright purple.
Leave this here until all Unused? are removed below, otherwise
the viewer generates many warnings on startup. -->
<color
name="Unused?"
- value="1 0 1 1" />
+ value=".831 1 0 1" />
<!-- UI Definitions -->
- <color
+ <color
name="AgentChatColor"
reference="White" />
<color
@@ -169,13 +175,13 @@
reference="LtGray" />
<color
name="ChicletFlashColor"
- reference="0.114 0.65 0.1" />
+ value="0.114 0.65 0.1" />
<color
name="ColorDropShadow"
reference="Black_50" />
<color
name="ColorPaletteEntry01"
- value="0 0 0 1" />
+ reference="Black" />
<color
name="ColorPaletteEntry02"
value="0.5 0.5 0.5 1" />
@@ -217,34 +223,34 @@
value="0.5 0.25 0 1" />
<color
name="ColorPaletteEntry15"
- value="1 1 1 1" />
+ reference="White" />
<color
name="ColorPaletteEntry16"
- value="1 1 1 1" />
+ reference="White" />
<color
name="ColorPaletteEntry17"
- value="1 1 1 1" />
+ reference="White" />
<color
name="ColorPaletteEntry18"
- value="0.75 0.75 0.75 1" />
+ reference="LtGray" />
<color
name="ColorPaletteEntry19"
- value="1 0 0 1" />
+ reference="Red" />
<color
name="ColorPaletteEntry20"
reference=".5 .5 1 0" />
<color
name="ColorPaletteEntry21"
- value="0 1 0 1" />
+ reference="Green" />
<color
name="ColorPaletteEntry22"
value="0 1 1 1" />
<color
name="ColorPaletteEntry23"
- value="0 0 1 1" />
+ reference="Blue" />
<color
name="ColorPaletteEntry24"
- value="1 0 1 1" />
+ reference="Purple" />
<color
name="ColorPaletteEntry25"
value="1 1 0.5 1" />
@@ -265,10 +271,10 @@
value="1 0.5 0 1" />
<color
name="ColorPaletteEntry31"
- value="1 1 1 1" />
+ reference="White" />
<color
name="ColorPaletteEntry32"
- value="1 1 1 1" />
+ reference="White" />
<color
name="ConsoleBackground"
reference="Black" />
@@ -325,7 +331,7 @@
value="0.92 0.92 1 0.78" />
<color
name="GridlineColor"
- value="1 0 0 1" />
+ reference="Red" />
<color
name="GridlineShadowColor"
value="0 0 0 0.31" />
@@ -337,10 +343,10 @@
value="0.3344 0.5456 0.5159 1" />
<color
name="GroupNotifyTextColor"
- reference="White"/>
+ reference="White"/>
<color
name="GroupNotifyDimmedTextColor"
- reference="DkGray"/>
+ reference="DkGray" />
<color
name="GroupOverTierColor"
value="0.43 0.06 0.06 1" />
@@ -397,7 +403,7 @@
reference="DkGray2" />
<color
name="InventoryFocusOutlineColor"
- reference="EmphasisColor" />
+ reference="White_25" />
<color
name="InventoryItemSuffixColor"
reference="White_25" />
@@ -460,7 +466,7 @@
reference="DkGray" />
<color
name="MenuBarGodBgColor"
- reference="Green" />
+ reference="FrogGreen" />
<color
name="MenuDefaultBgColor"
reference="DkGray2" />
@@ -481,7 +487,7 @@
reference="Black" />
<color
name="MenuNonProductionGodBgColor"
- value="0 0.5 0 1" />
+ value="0.263 0.325 0.345 1" />
<color
name="MenuPopupBgColor"
reference="DkGray2" />
@@ -508,7 +514,7 @@
value="0 0 0 0.3" />
<color
name="NetMapGroupOwnAboveWater"
- value="1 0 1 1" />
+ reference="Purple" />
<color
name="NetMapGroupOwnBelowWater"
value="0.78 0 0.78 1" />
@@ -541,7 +547,7 @@
reference="EmphasisColor" />
<color
name="OverdrivenColor"
- value="1 0 0 1" />
+ reference="Red" />
<color
name="PanelDefaultBackgroundColor"
reference="DkGray" />
@@ -640,10 +646,10 @@
reference="Unused?" />
<color
name="SpeakingColor"
- value="0 1 0 1" />
+ reference="FrogGreen" />
<color
name="SystemChatColor"
- reference="White" />
+ reference="White" />
<color
name="TextBgFocusColor"
reference="White" />
@@ -658,7 +664,7 @@
reference="Black" />
<color
name="TextDefaultColor"
- value="Black" />
+ reference="Black" />
<color
name="TextEmbeddedItemColor"
value="0 0 0.5 1" />
@@ -709,7 +715,7 @@
<color
name="SysWellItemSelected"
value="0.3 0.3 0.3 1.0" />
- <color
+ <color
name="ChatToastAgentNameColor"
reference="EmphasisColor" />
<color
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 2d519858db..60c1470b89 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -591,15 +591,15 @@ with the same filename but different name
<texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" />
<texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" />
- <texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" />
- <texture name="Toolbar_Left_Press" file_name="containers/Toolbar_Left_Press.png" preload="false" />
- <texture name="Toolbar_Left_Selected" file_name="containers/Toolbar_Left_Selected.png" preload="false" />
- <texture name="Toolbar_Middle_Off" file_name="containers/Toolbar_Middle_Off.png" preload="false" />
- <texture name="Toolbar_Middle_Press" file_name="containers/Toolbar_Middle_Press.png" preload="false" />
- <texture name="Toolbar_Middle_Selected" file_name="containers/Toolbar_Middle_Selected.png" preload="false" />
- <texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" />
- <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" />
- <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" />
+ <texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Left_Press" file_name="containers/Toolbar_Left_Press.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Left_Selected" file_name="containers/Toolbar_Left_Selected.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Middle_Off" file_name="containers/Toolbar_Middle_Off.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Middle_Press" file_name="containers/Toolbar_Middle_Press.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Middle_Selected" file_name="containers/Toolbar_Middle_Selected.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" />
+ <texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
+ <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
+ <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" />
<texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="16" scale.right="100" scale.bottom="3" />
@@ -665,10 +665,15 @@ with the same filename but different name
<texture name="icn_voice-groupfocus.tga" />
<texture name="icn_voice-pvtfocus.tga" />
- <texture name="jump_left_out.tga" />
- <texture name="jump_left_in.tga" />
- <texture name="jump_right_out.tga" />
- <texture name="jump_right_in.tga" />
+ <texture name="jump_left_out.tga" file_name="widgets/jump_left_out.png" />
+ <texture name="jump_left_in.tga" file_name="widgets/jump_left_in.png" />
+ <texture name="jump_right_out.tga" file_name="widgets/jump_right_out.png" />
+ <texture name="jump_right_in.tga" file_name="widgets/jump_right_in.png" />
+
+ <texture name="scrollbutton_left_out_blue.tga" file_name="widgets/ScrollArrow_Left_Opaque.png" />
+ <texture name="scrollbutton_left_in_blue.tga" file_name="widgets/ScrollArrow_Left_Over_Opaque.png" />
+ <texture name="scrollbutton_right_out_blue.tga" file_name="widgets/ScrollArrow_Right_Opaque.png" />
+ <texture name="scrollbutton_right_in_blue.tga" file_name="widgets/ScrollArrow_Right_Over_Opaque.png" />
<texture name="up_arrow.tga" file_name="up_arrow.png" />
<texture name="down_arrow.tga" file_name="down_arrow.png" />
@@ -690,7 +695,7 @@ with the same filename but different name
<texture name="button_anim_play.tga" />
<texture name="button_anim_play_selected.tga" />
<texture name="crosshairs.tga" />
- <texture name="direction_arrow.tga" />
+ <texture name="direction_arrow.tga" file_name="world/BeaconArrow.png" />
<texture name="icon_auction.tga" />
<texture name="icon_avatar_offline.tga" />
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png
new file mode 100644
index 0000000000..549b3980f6
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png
new file mode 100644
index 0000000000..a74abd5d8a
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png
new file mode 100644
index 0000000000..36056d0ad9
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png
new file mode 100644
index 0000000000..0c1fd6956b
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/jump_left_in.png b/indra/newview/skins/default/textures/widgets/jump_left_in.png
new file mode 100644
index 0000000000..a1425ccfa0
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/jump_left_in.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/jump_left_out.png b/indra/newview/skins/default/textures/widgets/jump_left_out.png
new file mode 100644
index 0000000000..38edf47d19
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/jump_left_out.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/jump_right_in.png b/indra/newview/skins/default/textures/widgets/jump_right_in.png
new file mode 100644
index 0000000000..39359ab2e2
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/jump_right_in.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/jump_right_out.png b/indra/newview/skins/default/textures/widgets/jump_right_out.png
new file mode 100644
index 0000000000..3f76bbffac
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/jump_right_out.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/world/BeaconArrow.png b/indra/newview/skins/default/textures/world/BeaconArrow.png
new file mode 100644
index 0000000000..12dc246d51
--- /dev/null
+++ b/indra/newview/skins/default/textures/world/BeaconArrow.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index 403965560b..ba4b8a6ae5 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="RASTER-OPTIONEN">
- <spinner label="Rastereinheit (Meter)" name="GridResolution"/>
+ <spinner label="Raster-Einheiten (Meter)" name="GridResolution"/>
<spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
- <check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
- <check_box label="Querschnitte anzeigen" name="GridCrossSection"/>
- <text name="grid_opacity_label" tool_tip="Rasterdeckkraft">
+ <check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit"/>
+ <check_box label="Ãœberschneidungen anzeigen" name="GridCrossSection"/>
+ <text name="grid_opacity_label" tool_tip="Raster-Deckkraft">
Deckkraft:
</text>
<slider label="Rasterdeckkraft" name="GridOpacity"/>
diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml
index 4ec709d508..01fde2e697 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences.xml
@@ -5,11 +5,11 @@
<tab_container name="pref core">
<panel label="Allgemein" name="general"/>
<panel label="Grafik" name="display"/>
- <panel label="Datenschutzbestimmungen (EN)" name="im"/>
+ <panel label="Privatsphäre" name="im"/>
<panel label="Sound" name="audio"/>
<panel label="Chat" name="chat"/>
- <panel label="Warnhinweise" name="msgs"/>
- <panel label="Hardware &amp; Web" name="input"/>
+ <panel label="Benachrichtigungen" name="msgs"/>
+ <panel label="Setup" name="input"/>
<panel label="Erweitert" name="advanced1"/>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
index 482cbf37d4..b8bca2f0fd 100644
--- a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="hide_navbar_menu">
- <menu_item_check label="Navigations-Leiste anzeigen" name="ShowNavbarNavigationPanel"/>
+ <menu_item_check label="Navigationsleiste anzeigen" name="ShowNavbarNavigationPanel"/>
<menu_item_check label="Favoritenleiste anzeigen" name="ShowNavbarFavoritesPanel"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml
index e0639f9b76..9ff37b53dc 100644
--- a/indra/newview/skins/default/xui/de/menu_navbar.xml
+++ b/indra/newview/skins/default/xui/de/menu_navbar.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="Navbar Menu">
<menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
- <menu_item_check label="Parzellen-Eigenschaften anzeigen" name="Show Parcel Properties"/>
+ <menu_item_check label="Parzelleneigenschaften anzeigen" name="Show Parcel Properties"/>
<menu_item_call label="Landmarke" name="Landmark"/>
<menu_item_call label="Ausschneiden" name="Cut"/>
<menu_item_call label="Kopieren" name="Copy"/>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
index b5d3389ce8..e3e7977efd 100644
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
@@ -2,7 +2,7 @@
<menu name="menu_group_plus">
<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
<menu_item_check label="Nach Name sortieren" name="sort_name"/>
- <menu_item_check label="Nach Nähe sortieren" name="sort_distance"/>
- <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
- <menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
+ <menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/>
+ <menu_item_check label="Profilbilder anzeigen" name="view_icons"/>
+ <menu_item_call label="Zeige geblockte Einwohner &amp; Objekte" name="show_blocked_list"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 9a3973ffd3..9780c78e1b 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -253,10 +253,8 @@ Für die gesamte Region ist Schaden aktiviert.
Damit Waffen funktionieren, müssen Skripts erlaubt sein.
</notification>
<notification name="MultipleFacesSelected">
- Mehrere Flächen wurden ausgewählt.
-Wenn Sie fortfahren werden auf mehrere Flächen des Objekts unterschiedlichen Medien-Instanzen eingefügt.
-Um Medien nur auf einer Fläche einzufügen, wählen Sie &quot;Textur auswählen&quot; und klicken Sie auf die gewünschte Fläche des Objektes. Klicken Sie dann auf „Hinzufügen&quot;.
- <usetemplate ignoretext="Medien werden auf mehreren ausgewählten Flächen eingefügt." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+ Momentan sind mehrere Seiten ausgewählt. Wenn Sie fortfahren, werden einzelne Medien auf mehreren Seiten des Objektes dargestellt. Um die Medien auf einer einzigen Seite darzustellen, wählen Sie Textur auswählen und klicken Sie auf die gewünschte Seite. Danach klicken Sie Hinzufügen.
+ <usetemplate ignoretext="Die Medien werden auf mehrere ausgewählte Seiten übertragen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="WhiteListInvalidatesHomeUrl">
Wenn Sie diesen Eintrag zur Whitelist hinzufügen, dann wird die URL,
@@ -329,8 +327,8 @@ Gebühren werden nicht rückerstattet.
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="DeleteMedia">
- Sie haben die mit dieser Fläche verknüpften Medien ausgewählt, um diese zu löschen.
-Möchten Sie fortfahren?
+ Sie haben sich entschieden, die Medien auf dieser Seite zu löschen.
+Sind Sie sicher, dass Sie fortfahren wollen?
<usetemplate ignoretext="Bestätigen, bevor ich Medien von einem Objekt entferne." name="okcancelignore" notext="Nein" yestext="Ja"/>
</notification>
<notification name="ClassifiedSave">
diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
index 677a32275d..fb08cbdda7 100644
--- a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Gruppeninfo" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- Die Registerkarte enthält nicht gespeicherte Änderungen.
+ In der aktuellen Registerkarte befinden sich ungesicherte Änderungen
</panel.string>
<panel.string name="want_apply_text">
- Diese Änderungen speichern?
+ Möchten Sie diese Änderungen speichern?
</panel.string>
<panel.string name="group_join_btn">
- Mitglied werden ([AMOUNT] L$)
+ Beitreten ([AMOUNT]L$)
</panel.string>
<panel.string name="group_join_free">
Kostenlos
</panel.string>
- <text name="group_name" value="(wird geladen...)"/>
- <line_editor label="Neuen Gruppennamen hier eingeben" name="group_name_editor"/>
- <texture_picker label="" name="insignia" tool_tip="Zum Auswählen eines Bildes hier klicken"/>
+ <text name="group_name" value="(Lädt...)"/>
+ <line_editor label="Geben Sie Ihren neuen Gruppennamen hier ein" name="group_name_editor"/>
+ <texture_picker label="" name="insignia" tool_tip="Klicken Sie, um ein Bild auszuwählen"/>
<text name="prepend_founded_by">
Gründer:
</text>
- <name_box initial_value="(wird in Datenbank gesucht)" name="founder_name"/>
+ <name_box initial_value="(empfange)" name="founder_name"/>
<text name="join_cost_text">
Kostenlos
</text>
@@ -27,10 +27,10 @@
<accordion_tab name="group_general_tab" title="Allgemein"/>
<accordion_tab name="group_roles_tab" title="Rollen"/>
<accordion_tab name="group_notices_tab" title="Mitteilungen"/>
- <accordion_tab name="group_land_tab" title="Land/Vermögen"/>
+ <accordion_tab name="group_land_tab" title="Land/Kapital"/>
</accordion>
<panel name="button_row">
- <button label="Bauen" label_selected="Neue Gruppe" name="btn_create"/>
+ <button label="Erstellen" label_selected="Neue Gruppe" name="btn_create"/>
<button label="Speichern" label_selected="Speichern" name="btn_apply"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_general.xml b/indra/newview/skins/default/xui/de/panel_media_settings_general.xml
index 20771a980b..c5fd4d5be4 100644
--- a/indra/newview/skins/default/xui/de/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_media_settings_general.xml
@@ -1,36 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Allgemein" name="Media Settings General">
<text name="home_label">
- Start URL:
+ Home-URL:
</text>
- <line_editor name="home_url" tool_tip="Die Start-URL für diese Medienquelle"/>
+ <text name="home_fails_whitelist_label">
+ (Diese URL befindet sich nicht auf der festgelegten Whitelist)
+ </text>
+ <line_editor name="home_url" tool_tip="Die Home-URL für diese Medienquelle"/>
<text name="preview_label">
Vorschau
</text>
<text name="current_url_label">
- Aktuelle URL:
+ Derzeitige URL:
</text>
- <line_editor name="current_url" tool_tip="Die aktuelle URL für diese Medienquelle" value=""/>
+ <text name="current_url" tool_tip="Die derzeitige URL für diese Medienquelle" value=""/>
<button label="Zurücksetzen" name="current_url_reset_btn"/>
- <text name="controls_label">
- Steuerung:
- </text>
- <combo_box name="controls">
- <combo_item name="Standard">
- Standard
- </combo_item>
- <combo_item name="Mini">
- Mini
- </combo_item>
- </combo_box>
- <check_box initial_value="false" label="Auto-Loop" name="auto_loop"/>
- <check_box initial_value="false" label="Interaktion bei erstem Anklicken" name="first_click_interact"/>
- <check_box initial_value="false" label="Auto-Zoom" name="auto_zoom"/>
- <check_box initial_value="false" label="Medien automatisch wiedergeben" name="auto_play"/>
+ <check_box initial_value="false" label="Automatisch wiederholen" name="auto_loop"/>
+ <check_box initial_value="false" label="Interaktion beim ersten Anklicken" name="first_click_interact"/>
+ <check_box initial_value="false" label="Automatisch zoomen" name="auto_zoom"/>
+ <check_box initial_value="false" label="Medien automatisch abspielen" name="auto_play"/>
<text name="media_setting_note">
- Hinweis: Einwohner können diese Einstellung ausschalten
+ Hinweis: Einwohner können diese Einstellung überschreiben
</text>
- <check_box initial_value="false" label="Medien auf Objektoberfläche automatisch skalieren" name="auto_scale"/>
+ <check_box initial_value="false" label="Medien automatisch auf Objektflächen skalieren" name="auto_scale"/>
<text name="size_label">
Größe:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml
index 0db0be2dcb..d05b0d8808 100644
--- a/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Steuerung" name="Media settings for controls">
- <check_box initial_value="false" label="Naviation &amp; Interaktion deaktivieren" name="perms_owner_interact"/>
- <check_box initial_value="false" label="Steuerleiste ausblenden" name="perms_owner_control"/>
- <check_box initial_value="false" label="Naviation &amp; Interaktion deaktivieren" name="perms_group_interact"/>
- <check_box initial_value="false" label="Steuerleiste ausblenden" name="perms_group_control"/>
- <check_box initial_value="false" label="Naviation &amp; Interaktion deaktivieren" name="perms_anyone_interact"/>
- <check_box initial_value="false" label="Steuerleiste ausblenden" name="perms_anyone_control"/>
+ <check_box initial_value="false" label="Navigation &amp; Interaktivität deaktivieren" name="perms_owner_interact"/>
+ <check_box initial_value="false" label="Kontrollleiste verstecken" name="perms_owner_control"/>
+ <check_box initial_value="false" label="Navigation &amp; Interaktivität deaktivieren" name="perms_group_interact"/>
+ <check_box initial_value="false" label="Kontrollleiste verstecken" name="perms_group_control"/>
+ <check_box initial_value="false" label="Navigation &amp; Interaktivität deaktivieren" name="perms_anyone_interact"/>
+ <check_box initial_value="false" label="Kontrollleiste verstecken" name="perms_anyone_control"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml
index 2fcd18864d..a5d378f95b 100644
--- a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml
@@ -1,6 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sicherheit" name="Media Settings Security">
- <check_box initial_value="false" label="Nur Zugangz zu festgelegten URLs (nach Präfix) erlauben" name="whitelist_enable"/>
+ <check_box initial_value="false" label="Zugang nur für bestimmte URLs ermöglichen (mittels Präfix)" name="whitelist_enable"/>
+ <text name="home_url_fails_some_items_in_whitelist">
+ Einträge, die auf ungültige Home-URLs hinweisen, sind markiert:
+ </text>
<button label="Hinzufügen" name="whitelist_add"/>
<button label="Löschen" name="whitelist_del"/>
+ <text name="home_url_fails_whitelist">
+ Warnung: Die Home-URL, die in der Registerkarte &quot;Allgemein&quot; angegeben wurde, entspricht nicht den Einträgen auf der Whitelist. Sie wurde deaktiviert, bis ein gültiger Eintrag angegeben wird.
+ </text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_navigation_bar.xml b/indra/newview/skins/default/xui/de/panel_navigation_bar.xml
index 3324556f98..1a67e9e45f 100644
--- a/indra/newview/skins/default/xui/de/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/de/panel_navigation_bar.xml
@@ -1,12 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="navigation_bar">
<panel name="navigation_panel">
- <button name="back_btn" tool_tip="Zurück zu vorheriger Position"/>
- <button name="forward_btn" tool_tip="Eine Position weiter"/>
- <button name="home_btn" tool_tip="An meinen Heimatort teleportieren"/>
- <location_input label="Ort" name="location_combo"/>
- <search_combo_box label="Suchen" name="search_combo_box" tool_tip="Suchen">
+ <button name="back_btn" tool_tip="Zurück zum vorherigen Standort gehen"/>
+ <button name="forward_btn" tool_tip="Um einen Standort weiter gehen"/>
+ <button name="home_btn" tool_tip="Zu meinem Heimatort teleportieren"/>
+ <location_input label="Standort" name="location_combo"/>
+ <search_combo_box label="Suche" name="search_combo_box" tool_tip="Suche">
<combo_editor label="[SECOND_LIFE] durchsuchen" name="search_combo_editor"/>
</search_combo_box>
</panel>
+ <favorites_bar name="favorite">
+ <chevron_button name="&gt;&gt;" tool_tip="Zeige weitere meiner Favoriten an"/>
+ </favorites_bar>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
index 8e7d586fc3..e5bf1f5806 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -4,7 +4,7 @@
Sprache:
</text>
<combo_box name="language_combobox">
- <combo_box.item label="Systemstandard" name="System Default Language"/>
+ <combo_box.item label="Systemvorgabe" name="System Default Language"/>
<combo_box.item label="English (Englisch)" name="English"/>
<combo_box.item label="Danks (Dänisch) - Beta" name="Danish"/>
<combo_box.item label="Deutsch - Beta" name="Deutsch(German)"/>
@@ -18,7 +18,7 @@
<combo_box.item label="Testsprache" name="TestLanguage"/>
</combo_box>
<text name="language_textbox2">
- (Neustart erforderlich)
+ (Erfordert Neustart)
</text>
<text name="maturity_desired_prompt">
Ich möchte auf Inhalt mit folgender Alterseinstufung zugreifen:
@@ -27,40 +27,40 @@
<combo_box name="maturity_desired_combobox">
<combo_box.item label="PG, Mature und Adult" name="Desired_Adult"/>
<combo_box.item label="PG und Mature" name="Desired_Mature"/>
- <combo_box.item label="PG" name="Desired_PG"/>
+ <combo_box.item label="Allgemein" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
- Startposition:
+ Startstandort:
</text>
<combo_box name="start_location_combo">
<combo_box.item label="Mein letzter Standort" name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden."/>
<combo_box.item label="Mein Heimatort" name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden."/>
</combo_box>
- <check_box initial_value="true" label="Bei Anmeldung anzeigen" name="show_location_checkbox"/>
+ <check_box initial_value="true" label="Beim Anmelden anzeigen" name="show_location_checkbox"/>
<text name="name_tags_textbox">
- Namensschilder:
+ Avatarnamen:
</text>
<radio_group name="Name_Tag_Preference">
<radio_item label="Aus" name="radio"/>
- <radio_item label="Ein" name="radio2"/>
- <radio_item label="Kurz anzeigen" name="radio3"/>
+ <radio_item label="An" name="radio2"/>
+ <radio_item label="Vorübergehend anzeigen" name="radio3"/>
</radio_group>
<check_box label="Meinen Namen anzeigen" name="show_my_name_checkbox1"/>
- <check_box initial_value="true" label="Kleine Namensschilder" name="small_avatar_names_checkbox"/>
+ <check_box initial_value="true" label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/>
<check_box label="Gruppentitel anzeigen" name="show_all_title_checkbox1"/>
<text name="effects_color_textbox">
Meine Effekte:
</text>
<color_swatch label="" name="effect_color_swatch" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
<text name="title_afk_text">
- Timeout für Abwesenheit:
+ Zeit bis zur Abwesenheit:
</text>
<spinner label="" name="afk_timeout_spinner"/>
<text name="seconds_textbox">
Sekunden
</text>
<text name="text_box3">
- Beschäftigt-Modus-Antwort:
+ Antwort, wenn im „Beschäftigt“-Modus:
</text>
<text_editor name="busy_response">
log_in_to_change
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
index 056998c503..221d736cf9 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Kommunikation" name="im">
<panel.string name="log_in_to_change">
- Zum Ändern anmelden
+ Anmelden, um Änderungen vorzunehmen
</panel.string>
- <button label="Cache löschen" name="clear_cache"/>
+ <button label="Verlauf leeren" name="clear_cache"/>
<text name="cache_size_label_l">
- (Positionen, Bilder, Internet, Suchverlauf)
+ (Standorte, Bilder, Web, Suchverlauf)
</text>
- <check_box label="Nur Freunden und Gruppen meinen Online-Status mitteilen" name="online_visibility"/>
- <check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
- <check_box label="Nach Beendigung von Anrufen Mikrofon abschalten." name="auto_disengage_mic_check"/>
+ <check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/>
+ <check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/>
+ <check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/>
<check_box label="Cookies annehmen" name="cookies_enabled"/>
- <check_box label="Medien automatisch wiedergeben" name="autoplay_enabled"/>
- <check_box label="Medien auf Parzelle automatisch wiedergeben" name="parcel_autoplay_enabled"/>
+ <check_box label="Automatisches Abspielen von Medien erlauben" name="autoplay_enabled"/>
+ <check_box label="Medien auf Parzellen automatisch abspielen" name="parcel_autoplay_enabled"/>
<text name="Logs:">
- Logs:
+ Protokolle:
</text>
- <check_box label="Protokoll von Chats &quot;in meiner Nähe&quot; auf meinem Computer speichern" name="log_nearby_chat"/>
- <check_box label="IM-Protokolle auf meinem Computer speichern" name="log_instant_messages"/>
- <check_box label="Zeitangabe hinzufügen" name="show_timestamps_check_im"/>
+ <check_box label="Protokolle von Gesprächen in der Nähe auf meinem Computer speichern" name="log_nearby_chat"/>
+ <check_box label="IM Protokolle auf meinem Computer speichern" name="log_instant_messages"/>
+ <check_box label="Zeitstempel hinzufügen" name="show_timestamps_check_im"/>
<text name="log_path_desc">
- Speicherort für Protokolle
+ Speicherort der Protokolldateien
</text>
<button label="Durchsuchen" label_selected="Durchsuchen" name="log_path_button"/>
<button label="Ignorierte Einwohner/Objekte" name="block_list"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
index 662662d132..e37e2734a6 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
@@ -15,32 +15,32 @@
Maximale Bandbreite
</text>
<text name="text_box2">
- kbps
+ kbit/s
</text>
- <check_box label="Benutzerdefinierter Port" name="connection_port_enabled"/>
- <spinner label="Port-Nummer:" name="web_proxy_port"/>
+ <check_box label="Eigener Port" name="connection_port_enabled"/>
+ <spinner label="Portnummer:" name="web_proxy_port"/>
<text name="cache_size_label_l">
- Cache
+ Cachegröße
</text>
<text name="text_box5">
MB
</text>
<button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
- <button label="Zurücksetzen" label_selected="Festlegen" name="reset_cache"/>
+ <button label="Zurücksetzen" label_selected="Set" name="reset_cache"/>
<text name="Cache location">
- Cache-Ordner
+ Speicherort des Caches
</text>
<text name="Web:">
- Internet:
+ Web:
</text>
<radio_group name="use_external_browser">
- <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Den integrierten Browser für Hilfe, Internetlinks, usw. verwenden. Der Browser wird als eigenständiges Fenster in [APP_NAME] geöffnet."/>
- <radio_item label="Meinen Browser verwenden (IE, Firefox)" name="external" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."/>
+ <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]."/>
+ <radio_item label="Meinen Browser verwenden (IE, Firefox)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen."/>
</radio_group>
- <check_box initial_value="false" label="Web-Proxy" name="web_proxy_enabled"/>
- <line_editor name="web_proxy_editor" tool_tip="Name oder IP-Adresse des Proxys"/>
+ <check_box initial_value="false" label="Web Proxy" name="web_proxy_enabled"/>
+ <line_editor name="web_proxy_editor" tool_tip="Name oder IP Adresse des Proxyservers, den Sie benutzen möchten"/>
<button label="Durchsuchen" label_selected="Durchsuchen" name="set_proxy"/>
<text name="Proxy location">
- Proxy-Standort
+ Proxyadresse
</text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
index 54e512652e..6d541551b8 100644
--- a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
@@ -8,7 +8,7 @@
</string>
<layout_stack name="media_controls">
<layout_panel name="media_address">
- <line_editor name="media_address_url" tool_tip="Medien-URL"/>
+ <line_editor name="media_address_url" tool_tip="Medien URL"/>
<layout_stack name="media_address_url_icons">
<layout_panel>
<icon name="media_whitelist_flag" tool_tip="Whitelist aktiviert"/>
@@ -19,7 +19,7 @@
</layout_stack>
</layout_panel>
<layout_panel name="media_play_position">
- <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Fortschrittsbalken Filmwiedergabe"/>
+ <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Fortschritt der Filmwiedergabe"/>
</layout_panel>
<layout_panel name="media_volume">
<button name="media_volume_button" tool_tip="Dieses Medium stummschalten"/>
diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history.xml b/indra/newview/skins/default/xui/de/panel_teleport_history.xml
index d4db27b841..cfab9283b9 100644
--- a/indra/newview/skins/default/xui/de/panel_teleport_history.xml
+++ b/indra/newview/skins/default/xui/de/panel_teleport_history.xml
@@ -7,9 +7,9 @@
<accordion_tab name="3_days_ago" title="Vor 3 Tagen"/>
<accordion_tab name="4_days_ago" title="Vor 4 Tagen"/>
<accordion_tab name="5_days_ago" title="Vor 5 Tagen"/>
- <accordion_tab name="6_days_and_older" title="6 Tage oder älter"/>
- <accordion_tab name="1_month_and_older" title="1 Monat oder älter"/>
- <accordion_tab name="6_months_and_older" title="6 Monate oder älter"/>
+ <accordion_tab name="6_days_and_older" title="6 Tage und älter"/>
+ <accordion_tab name="1_month_and_older" title="1 Monat und älter"/>
+ <accordion_tab name="6_months_and_older" title="6 Monate und älter"/>
</accordion>
<panel label="bottom_panel" name="bottom_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/alert_button.xml b/indra/newview/skins/default/xui/en/alert_button.xml
index 48c67a3770..632564d793 100644
--- a/indra/newview/skins/default/xui/en/alert_button.xml
+++ b/indra/newview/skins/default/xui/en/alert_button.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<button
+ name="Alert Button"
label_shadow="true"
auto_resize="false"
image_overlay_alignment="center"
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index cb4cbd229a..0b48ba9321 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -18,7 +18,7 @@
single_instance="true"
width="320">
<string name="nudge_parabuild">Nudge 1</string>
- <string name="test_the_vlt">This string is extracted.</string>
+ <string name="test_the_vlt">This string CHANGE is extracted.</string>
<chat_history
allow_html="true"
bg_readonly_color="ChatHistoryBgColor"
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 900f4c5956..c58c1f00b9 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -209,7 +209,7 @@
</text>
<button
follows="right"
- height="16"
+ height="23"
image_pressed="Info_Press"
image_unselected="Info_Over"
left_pad="3"
@@ -218,7 +218,7 @@
width="16" />
<!-- <button
follows="left|top"
- height="16"
+ height="23"
label="Profile"
layout="topleft"
left_pad="4"
@@ -248,7 +248,7 @@
Leyla Linden </text>
<button
follows="right"
- height="16"
+ height="23"
image_pressed="Info_Press"
image_unselected="Info_Over"
left_pad="3"
@@ -263,10 +263,11 @@ Leyla Linden </text>
left_pad="4"
right="-10"
name="Set..."
- width="50" />
+ width="50"
+ top_delta="-2"/>
<check_box
enabled="false"
- height="23"
+ height="16"
label="Allow Deed to Group"
layout="topleft"
left="108"
@@ -284,7 +285,7 @@ Leyla Linden </text>
right="-10"
name="Deed..."
tool_tip="You may only deed land if you are an officer in the selected group."
- top_delta="0"
+ top_delta="-2"
width="90" />
<check_box
enabled="false"
@@ -294,7 +295,8 @@ Leyla Linden </text>
left="108"
name="check contrib"
tool_tip="When the land is deeded to the group, the former owner contributes enough land allocation to support it."
- width="199" />
+ width="199"
+ top_pad="0"/>
<text
type="string"
length="1"
@@ -335,7 +337,7 @@ Leyla Linden </text>
layout="topleft"
left_delta="0"
name="SalePending"
- top_pad="6"
+ top_pad="5"
width="324" />
<button
follows="left|top"
@@ -345,7 +347,8 @@ Leyla Linden </text>
left_pad="5"
right="-10"
name="Sell Land..."
- width="145" />
+ width="145"
+ top_delta="-25"/>
<text
type="string"
length="1"
@@ -354,7 +357,7 @@ Leyla Linden </text>
layout="topleft"
left_delta="-199"
name="For sale to"
- top_delta="2"
+ top_delta="20"
width="186">
For sale to: [BUYER]
</text>
@@ -366,7 +369,7 @@ Leyla Linden </text>
layout="topleft"
left_delta="0"
name="Sell with landowners objects in parcel."
- top_pad="0"
+ top_pad="-3"
width="186">
Objects included in sale
</text>
@@ -391,7 +394,7 @@ Leyla Linden </text>
right="-10"
name="Cancel Land Sale"
left_pad="5"
- top_pad="-10"
+ top_pad="-25"
width="145" />
<text
type="string"
@@ -522,7 +525,7 @@ Leyla Linden </text>
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-48"
+ top_delta="-61"
width="180" />
<button
enabled="false"
@@ -810,7 +813,7 @@ Leyla Linden </text>
follows="left|top"
height="16"
layout="topleft"
- left_delta="152"
+ left_delta="190"
name="objects_available"
top_delta="0"
width="260">
@@ -834,7 +837,7 @@ Leyla Linden </text>
follows="left|top"
height="16"
layout="topleft"
- left_delta="200"
+ left_delta="190"
name="object_contrib_text"
top_delta="0"
width="212">
@@ -858,7 +861,7 @@ Leyla Linden </text>
follows="left|top"
height="16"
layout="topleft"
- left_delta="200"
+ left_delta="190"
name="total_objects_text"
top_delta="0"
width="48">
@@ -868,7 +871,7 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="28"
name="Owned by parcel owner:"
@@ -880,9 +883,9 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
- left_delta="176"
+ left_delta="172"
name="owner_objects_text"
top_delta="0"
width="48">
@@ -892,33 +895,35 @@ Leyla Linden </text>
bottom="100"
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Show"
label_selected="Show"
layout="topleft"
name="ShowOwner"
right="-140"
- width="60" />
+ width="60"
+ top_delta="-6"/>
<button
bottom="100"
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Return"
layout="topleft"
name="ReturnOwner..."
right="-10"
tool_tip="Return objects to their owners."
- width="119" />
+ width="119"
+ top_delta="0"/>
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="28"
name="Set to group:"
- top="104"
+ top_pad="5"
width="176">
Set to group:
</text>
@@ -926,9 +931,9 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
- left_delta="176"
+ left_delta="172"
name="group_objects_text"
top_delta="0"
width="48">
@@ -939,32 +944,34 @@ Leyla Linden </text>
enabled="false"
follows="left|top"
label="Show"
- height="20"
+ height="23"
label_selected="Show"
layout="topleft"
name="ShowGroup"
right="-140"
- width="60" />
+ width="60"
+ top_delta="-6"/>
<button
bottom="120"
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Return"
layout="topleft"
name="ReturnGroup..."
right="-10"
tool_tip="Return objects to their owners."
- width="119" />
+ width="119"
+ top_delta="0"/>
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="28"
name="Owned by others:"
- top="124"
+ top_pad="5"
width="176">
Owned by others:
</text>
@@ -972,9 +979,9 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
- left_delta="176"
+ left_delta="172"
name="other_objects_text"
top_delta="0"
width="48">
@@ -984,33 +991,35 @@ Leyla Linden </text>
bottom="140"
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Show"
label_selected="Show"
layout="topleft"
name="ShowOther"
right="-140"
- width="60" />
+ width="60"
+ top_delta="-6"/>
<button
bottom="140"
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Return"
layout="topleft"
name="ReturnOther..."
right="-10"
tool_tip="Return objects to their owners."
- width="119" />
+ width="119"
+ top_delta="0"/>
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="28"
name="Selected / sat upon:"
- top="144"
+ top_pad="5"
width="176">
Selected / sat upon:
</text>
@@ -1018,9 +1027,9 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
- left_delta="176"
+ left_delta="172"
name="selected_objects_text"
top_delta="0"
width="48">
@@ -1030,51 +1039,53 @@ Leyla Linden </text>
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="Autoreturn"
- top="164"
+ top_pad="0"
width="294">
- Autoreturn other Residents&apos; objects (minutes, 0 for off):
+ Auto return other Residents&apos; objects (minutes, 0 for off):
</text>
<line_editor
border_style="line"
border_thickness="1"
bottom="180"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
max_length="6"
name="clean other time"
- right="-50"
- width="56" />
+ right="-72"
+ width="56"
+ top_delta="-6"/>
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="Object Owners:"
- top="184"
+ top_pad="10"
width="104">
Object Owners:
</text>
<button
follows="top|right"
- height="20"
+ height="23"
image_overlay="Refresh_Off"
layout="topleft"
name="Refresh List"
left_pad="5"
right="-183"
tool_tip="Refresh Object List"
- width="20" />
+ width="20"
+ top_delta="-6"/>
<button
enabled="false"
follows="left|top"
- height="20"
+ height="23"
label="Return Objects"
layout="topleft"
left_pad="6"
@@ -1086,7 +1097,7 @@ Leyla Linden </text>
column_padding="0"
draw_heading="true"
follows="all"
- height="190"
+ height="180"
layout="topleft"
left="10"
name="owner list"
@@ -1313,7 +1324,7 @@ Only large parcels can be listed in search.
width="430" />
<combo_box
enabled="false"
- height="20"
+ height="23"
layout="topleft"
left="30"
name="land category with adult"
@@ -1374,7 +1385,7 @@ Only large parcels can be listed in search.
</combo_box>
<combo_box
enabled="false"
- height="20"
+ height="23"
layout="topleft"
left="30"
name="land category"
@@ -1463,7 +1474,7 @@ Only large parcels can be listed in search.
type="string"
length="1"
follows="left|top"
- height="30"
+ height="16"
layout="topleft"
left="220"
top="180"
@@ -1553,12 +1564,13 @@ Only large parcels can be listed in search.
Type:
</text>
<combo_box
- height="20"
+ height="23"
layout="topleft"
left_pad="0"
name="media type"
tool_tip="Specify if the URL is a movie, web page, or other media"
- width="120" />
+ width="120"
+ top_delta="0"/>
<text
follows="left|top"
height="16"
@@ -1574,27 +1586,29 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="at URL:"
- width="100">
+ width="100"
+ top_pad="10">
Home Page:
</text>
<line_editor
follows="left|top"
- height="20"
+ height="23"
layout="topleft"
left_pad="0"
max_length="255"
name="media_url"
select_on_focus="true"
- width="300" />
+ width="300"
+ top_delta="0"/>
<button
follows="right|top"
- height="22"
+ height="23"
label="Set"
layout="topleft"
left_pad="5"
- right="-10"
name="set_media_url"
- width="50" />
+ width="50"
+ top_delta="0"/>
<text
type="string"
length="1"
@@ -1603,18 +1617,20 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="CurrentURL:"
- width="100">
+ width="100"
+ top_pad="10">
Current Page:
</text>
- <button
- follows="top|right"
- height="20"
- image_overlay="Refresh_Off"
- layout="topleft"
+ <button
+ follows="top|right"
+ height="23"
+ image_overlay="Refresh_Off"
+ layout="topleft"
name="reset_media_url"
- left_pad="0"
- tool_tip="Refresh URL"
- width="20" />
+ left_pad="0"
+ tool_tip="Refresh URL"
+ width="23"
+ top_delta="0"/>
<text
follows="left|top"
height="16"
@@ -1623,22 +1639,25 @@ Only large parcels can be listed in search.
name="current_url"
width="300" />
<check_box
+ follows="top|left"
height="16"
label="Hide URL"
layout="topleft"
- left="110"
+ left_delta="-36"
name="hide_media_url"
tool_tip="Checking this option will hide the media url to any non-authorized viewers of this parcel information. Note this is not available for HTML types."
- width="200" />
+ width="50"
+ top_pad="5"/>
<text
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="Description:"
- width="364">
+ width="364"
+ top_pad="10">
Description:
</text>
<line_editor
@@ -1650,7 +1669,7 @@ Only large parcels can be listed in search.
name="url_description"
select_on_focus="true"
tool_tip="Text displayed next to play/load button"
- top_delta="10"
+ top_delta="0"
width="300" />
<text
type="string"
@@ -1674,7 +1693,7 @@ Only large parcels can be listed in search.
left="110"
name="media texture"
tool_tip="Click to choose a picture"
- top_delta="10"
+ top_delta="0"
width="64" />
<text
type="string"
@@ -1685,16 +1704,17 @@ Only large parcels can be listed in search.
left_pad="8"
name="replace_texture_help"
width="300"
- word_wrap="true">
+ word_wrap="true"
+ top_delta="0">
Objects using this texture will show the movie or web page after you click the play arrow. Select the thumbnail to choose a different texture.
</text>
<check_box
height="16"
label="Auto scale"
layout="topleft"
- left="110"
+ left="107"
name="media_auto_scale"
- top_pad="0"
+ top_pad="-10"
tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
width="200" />
<text
@@ -1706,7 +1726,8 @@ Only large parcels can be listed in search.
left="10"
name="media_size"
tool_tip="Size to render Web media, leave 0 for default."
- width="100">
+ width="100"
+ top_pad="10">
Size:
</text>
<spinner
@@ -1714,7 +1735,7 @@ Only large parcels can be listed in search.
enabled="false"
follows="left|top"
halign="right"
- height="20"
+ height="23"
increment="1"
initial_value="0"
layout="topleft"
@@ -1729,7 +1750,7 @@ Only large parcels can be listed in search.
enabled="false"
follows="left|top"
halign="right"
- height="20"
+ height="23"
increment="1"
initial_value="0"
layout="topleft"
@@ -1759,7 +1780,7 @@ Only large parcels can be listed in search.
layout="topleft"
left="10"
name="Options:"
- top_pad="8"
+ top_pad="10"
width="100">
Options:
</text>
@@ -1767,10 +1788,10 @@ Only large parcels can be listed in search.
height="16"
label="Loop"
layout="topleft"
- left_pad="0"
+ left_pad="-3"
name="media_loop"
tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."
- top_delta="0"
+ top_delta="-1"
width="200" />
</panel>
<panel
@@ -1796,12 +1817,12 @@ Only large parcels can be listed in search.
</text>
<line_editor
follows="left|top"
- height="20"
+ height="23"
layout="topleft"
left="100"
max_length="255"
name="music_url"
- top_pad="0"
+ top_delta="0"
right="-15"
select_on_focus="true" />
<text
@@ -1941,7 +1962,7 @@ Only large parcels can be listed in search.
width="278" />
<check_box
enabled="false"
- height="22"
+ height="16"
label="Sell passes to:"
layout="topleft"
left_delta="0"
@@ -1950,7 +1971,7 @@ Only large parcels can be listed in search.
top_pad="4"
width="120" />
<combo_box
- height="20"
+ height="23"
layout="topleft"
left_pad="22"
name="pass_combo"
@@ -1968,7 +1989,7 @@ Only large parcels can be listed in search.
<spinner
enabled="false"
follows="left|top"
- height="22"
+ height="23"
increment="1"
initial_value="10"
label="Price in L$:"
@@ -1983,7 +2004,7 @@ Only large parcels can be listed in search.
<spinner
enabled="false"
follows="left|top"
- height="22"
+ height="23"
increment="0.25"
initial_value="1"
label="Hours of access:"
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
index ccbba61ddf..d97ca554b7 100644
--- a/indra/newview/skins/default/xui/en/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -19,6 +19,7 @@
name="im_box_tab_container"
tab_position="bottom"
tab_width="80"
+ tab_height="16"
top="0"
width="390" />
<icon
diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
new file mode 100644
index 0000000000..16079b30cb
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ can_close="false"
+ can_minimize="false"
+ height="100"
+ layout="topleft"
+ name="modal container"
+ width="240">
+ <button
+ height="23"
+ label="Save"
+ label_selected="Save"
+ layout="topleft"
+ left="20"
+ name="Save"
+ top="70"
+ width="82" />
+ <button
+ height="23"
+ label="Cancel"
+ label_selected="Cancel"
+ layout="topleft"
+ left_pad="36"
+ name="Cancel"
+ top_delta="0"
+ width="82" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="30"
+ layout="topleft"
+ left="20"
+ word_wrap="true"
+ name="Save item as:"
+ top="10"
+ width="200">
+ Save what I'm wearing
+as a new Outfit:
+ </text>
+ <line_editor
+ type="string"
+ length="1"
+ border_style="line"
+ border_thickness="1"
+ follows="left|top"
+ handle_edit_keys_directly="true"
+ height="23"
+ layout="topleft"
+ left_delta="0"
+ show_text_as_tentative="false"
+ top_pad="0"
+ max_length="63"
+ name="name ed"
+ width="200">
+ [DESC] (new)
+ </line_editor>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml
index f44ba6d873..c3e974d978 100644
--- a/indra/newview/skins/default/xui/en/floater_script.xml
+++ b/indra/newview/skins/default/xui/en/floater_script.xml
@@ -7,7 +7,6 @@
layout="topleft"
left="0"
name="script_floater"
- help_topic="script_floater"
top="0"
can_dock="true"
can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index a36a1b591b..60c9810e95 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -43,6 +43,12 @@
layout="topleft"
name="local" />
</radio_group>
+ <ui_ctrl
+ height="90"
+ width="90"
+ name="thumbnail_placeholder"
+ top_pad="6"
+ />
<text
type="string"
font="SansSerifSmall"
@@ -54,7 +60,7 @@
left_delta="0"
halign="right"
name="file_size_label"
- top_pad="106"
+ top_pad="10"
width="195">
[SIZE] KB
</text>
diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
index 9a95e3dfef..b4b57f2dbc 100644
--- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- legacy_header_height="18"
- border="true"
+ legacy_header_height="0"
can_close="false"
can_minimize="false"
height="100"
@@ -9,7 +8,7 @@
name="modal container"
width="240">
<button
- height="20"
+ height="23"
label="Save"
label_selected="Save"
layout="topleft"
@@ -18,7 +17,7 @@
top="70"
width="82" />
<button
- height="20"
+ height="23"
label="Cancel"
label_selected="Cancel"
layout="topleft"
@@ -30,14 +29,14 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="16"
+ height="30"
layout="topleft"
+ word_wrap="true"
left="20"
name="Save item as:"
top="10"
width="200">
- Save item as:
+ Save item to my inventory as:
</text>
<line_editor
type="string"
@@ -45,14 +44,13 @@
border_style="line"
border_thickness="1"
follows="left|top"
- font="SansSerif"
handle_edit_keys_directly="true"
- height="20"
+ height="23"
layout="topleft"
left_delta="0"
max_length="63"
name="name ed"
- top_pad="4"
+ top_pad="0"
width="200">
New [DESC]
</line_editor>
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 8904d4f49c..65c9c2a8fa 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -77,7 +77,7 @@
top_delta="6"
left_pad="5"
layout="topleft"
- name="person_label"
+ name="me_label"
width="90">
Me
</text>
@@ -196,7 +196,7 @@
height="16"
layout="topleft"
left_pad="0"
- name="auction_label"
+ name="by_owner_label"
top_delta="3"
width="100">
by owner
diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
index 4642e82c0b..d96f3c5494 100644
--- a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
@@ -17,7 +17,7 @@
layout="topleft"
name="copy_gesture">
<on_click
- function="Gesture.Action.CopyPast"
+ function="Gesture.Action.CopyPaste"
parameter="copy_gesture" />
<on_enable
function="Gesture.EnableAction"
@@ -28,7 +28,7 @@
layout="topleft"
name="paste">
<on_click
- function="Gesture.Action.CopyPast"
+ function="Gesture.Action.CopyPaste"
parameter="paste" />
<on_enable
function="Gesture.EnableAction"
@@ -39,7 +39,7 @@
layout="topleft"
name="copy_uuid">
<on_click
- function="Gesture.Action.CopyPast"
+ function="Gesture.Action.CopyPaste"
parameter="copy_uuid" />
<on_enable
function="Gesture.EnableAction"
diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml
index 31263fbea8..805ffbae66 100644
--- a/indra/newview/skins/default/xui/en/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml
@@ -47,6 +47,9 @@
name="IM">
<menu_item_call.on_click
function="Avatar.IM" />
+ <menu_item_call.on_enable
+ function="ParticipantList.EnableItem"
+ parameter="can_im" />
</menu_item_call>
<menu_item_call
label="Call"
@@ -65,6 +68,9 @@
name="Share">
<menu_item_call.on_click
function="Avatar.Share" />
+ <menu_item_call.on_enable
+ function="ParticipantList.EnableItem"
+ parameter="can_share" />
</menu_item_call>
<menu_item_call
label="Pay"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 45100eb1ff..21fe2bb242 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -293,7 +293,7 @@
create_jump_keys="true"
label="Show"
layout="topleft"
- name="Land"
+ name="LandShow"
tear_off="true">
<menu_item_check
label="Move Controls"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index e20e5a85c0..1ec004b194 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -811,6 +811,7 @@ Please select a proposal to view.
Please select a history item to view.
</notification>
+<!--
<notification
icon="alertmodal.tga"
name="ResetShowNextTimeDialogs"
@@ -832,6 +833,7 @@ Would you like to disable all popups which can be skipped?
notext="Cancel"
yestext="OK"/>
</notification>
+-->
<notification
icon="alertmodal.tga"
@@ -1400,6 +1402,16 @@ You have added "[LANDMARK_NAME]" to your [FOLDER_NAME] folder.
</notification>
<notification
+ icon="alert.tga"
+ name="LandmarkAlreadyExists"
+ type="alert">
+You already have a landmark for this location.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
icon="alertmodal.tga"
name="CannotCreateLandmarkNotOwner"
type="alertmodal">
@@ -5368,6 +5380,7 @@ Grant this request?
</form>
</notification>
+<!--
<notification
icon="notify.tga"
name="FirstBalanceIncrease"
@@ -5383,6 +5396,7 @@ Your L$ balance is shown in the upper-right.
You just paid L$[AMOUNT].
Your L$ balance is shown in the upper-right.
</notification>
+-->
<notification
icon="notify.tga"
@@ -5394,6 +5408,8 @@ Your L$ balance will be updated when processing completes. If processing takes m
The status of your payment can be checked on your Transaction History page on your [http://secondlife.com/account/ Dashboard]
</notification>
+
+<!--
<notification
icon="notify.tga"
name="FirstSit"
@@ -5418,8 +5434,9 @@ Use the controls on the right to find things and display different backgrounds.
type="notify">
You have opened the Build Tools. Every object you see around you was created using these tools.
</notification>
+-->
-<!--
+<!--
<notification
icon="notify.tga"
name="FirstLeftClickNoHit"
@@ -5428,7 +5445,7 @@ You have opened the Build Tools. Every object you see around you was created usi
If the mouse pointer changes to a hand, you can interact with the object.
Right-click always shows a menu of things you can do.
</notification>
--->
+
<notification
icon="notify.tga"
name="FirstTeleport"
@@ -5436,6 +5453,8 @@ You have opened the Build Tools. Every object you see around you was created usi
You can only teleport to certain areas in this region. The arrow points to your specific destination. Click the arrow to dismiss it.
</notification>
+-->
+
<notification
icon="notify.tga"
name="FirstOverrideKeys"
@@ -5446,6 +5465,7 @@ Some objects (like guns) require you to go into mouselook to use them.
Press &apos;M&apos; to do this.
</notification>
+<!--
<notification
icon="notify.tga"
name="FirstAppearance"
@@ -5465,6 +5485,7 @@ This is your Inventory, which contains items you own.
* To rez something inworld, drag it onto the ground.
* To read a notecard, double-click it.
</notification>
+-->
<notification
icon="notify.tga"
@@ -5475,6 +5496,7 @@ This is a sandbox area, and is meant to help Residents learn how to build.
Things you build here will be deleted after you leave, so don&apos;t forget to right-click and choose &apos;Take&apos; to move your creation to your Inventory.
</notification>
+<!--
<notification
icon="notify.tga"
name="FirstFlexible"
@@ -5500,13 +5522,16 @@ To toggle this menu,
type="notify">
You are editing a Sculpted prim. Sculpties require a special texture to define their shape.
</notification>
+-->
- <!--notification
+ <!--
+ <notification
icon="notify.tga"
name="FirstMedia"
type="notify">
You have begun playing media. Media can set to play automatically in the preferences window under Audio / Video. Note that this can be a security risk for media sites you do not trust.
- </notification-->
+ </notification>
+ -->
<notification
icon="notifytip.tga"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 4b39210f30..de3de45718 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -382,6 +382,17 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
width="40"
min_width="40"
user_resize="false">
+ <icon
+ auto_resize="false"
+ color="0 0 0 0"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ left="0"
+ min_width="4"
+ top="0"
+ width="5" />
<chiclet_notification
flash_period="0.25"
follows="right"
@@ -414,6 +425,17 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
function="Button.SetDockableFloaterToggle"
parameter="notification_well_window" />
</button>
+ <icon
+ auto_resize="false"
+ color="0 0 0 0"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ left="0"
+ min_width="4"
+ top="0"
+ width="5" />
</chiclet_notification>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
index d0a2ddb289..357dbc07cc 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_separator.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
@@ -3,6 +3,6 @@
background_visible="true"
bg_alpha_color="black"
follows="left|right|top"
- height="1"
+ height="0"
layout="topleft"
name="chat_separator_panel" />
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index 5c594d3f14..677bdbc3d2 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -7,6 +7,7 @@
left="0"
min_height="350"
name="panel_classified_info"
+ help_topic="profile_classified_info"
top="0"
width="333">
<panel.string
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
index 1fbf7abda9..188ded3dab 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
@@ -9,6 +9,7 @@
left="0"
min_height="350"
name="panel_edit_classified"
+ help_topic="profile_edit_classified"
top="0"
width="333">
<panel.string
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 7769189219..15eff4b67c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -9,6 +9,7 @@
left="0"
min_height="350"
name="panel_edit_pick"
+ help_topic="profile_edit_pick"
top="0"
width="333">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 172cf18fc4..8268937e7f 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -304,8 +304,10 @@
<name_box
follows="left|top|right"
height="30"
+ initial_value="(retrieving)"
layout="topleft"
left="0"
+ link="true"
name="partner_text"
top="0"
width="285"
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 8188048821..673052c3b5 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -88,6 +88,7 @@ background_visible="true"
initial_value="(retrieving)"
layout="topleft"
left_delta="0"
+ link="true"
name="founder_name"
top_pad="2"
use_ellipses="true"
@@ -150,7 +151,6 @@ background_visible="true"
filename="panel_group_roles.xml"
layout="topleft"
left="0"
- help_topic="group_roles_tab"
name="group_roles_tab_panel"
top="0" />
</accordion_tab>
@@ -180,7 +180,6 @@ background_visible="true"
filename="panel_group_land_money.xml"
layout="topleft"
left="0"
- help_topic="group_land_money_tab"
name="group_land_tab_panel"
top="0" />
</accordion_tab>
@@ -240,4 +239,4 @@ background_visible="true"
right="-10"
width="85" />
</panel>
-</panel> \ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 9d00abd2c9..4030c7184a 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -41,6 +41,7 @@ halign="center"
follows="all"
height="295"
label="MY INVENTORY"
+ help_topic="my_inventory_tab"
layout="topleft"
left="0"
name="All Items"
@@ -51,6 +52,7 @@ halign="center"
follows="all"
height="295"
label="RECENT"
+ help_topic="recent_inventory_tab"
layout="topleft"
left_delta="0"
name="Recent Items"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 27c1af1860..2659156ba8 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -267,6 +267,7 @@
<name_box
follows="left|top"
height="10"
+ initial_value="(retrieving)"
layout="topleft"
left="0"
link="true"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 9ad99b1f13..58cb5fed5d 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -126,6 +126,8 @@
<combo_editor
label="Search [SECOND_LIFE]"
name="search_combo_editor"/>
+ <combo_list
+ draw_border="true" />
</search_combo_box>
</panel>
<favorites_bar
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index fd540bdc7e..8895484326 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -21,22 +21,8 @@
halign="center"
width="313">
<inventory_panel
- follows="all"
- background_visible="true"
- background_opaque="true"
- label="WEARING"
- help_topic="now_wearing_tab"
- allow_multi_select="true"
- border="false"
- left="0"
- top="0"
- mouse_opaque="true"
- name="cof_accordionpanel"
- start_folder="Current Outfit"
- width="313" />
- <inventory_panel
- background_visible="true"
- background_opaque="true"
+ background_visible="true"
+ background_opaque="true"
label="MY OUTFITS"
help_topic="my_outfits_tab"
allow_multi_select="true"
@@ -48,6 +34,20 @@
mouse_opaque="true"
name="outfitslist_tab"
start_folder="My Outfits" />
+ <inventory_panel
+ follows="all"
+ background_visible="true"
+ background_opaque="true"
+ label="WEARING"
+ help_topic="now_wearing_tab"
+ allow_multi_select="true"
+ border="false"
+ left="0"
+ top="0"
+ mouse_opaque="true"
+ name="cof_accordionpanel"
+ start_folder="Current Outfit"
+ width="313" />
</tab_container>
<panel
background_visible="true"
@@ -103,5 +103,15 @@
top="26"
tool_tip="Wear selected outfit"
width="120" />
+ <button
+ follows="bottom|left"
+ height="23"
+ label="M"
+ layout="topleft"
+ right="-140"
+ name="look_edit_btn"
+ top="26"
+ visible="false"
+ width="20" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 9c7f38e688..822e049eec 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -7,6 +7,7 @@
left="0"
min_height="350"
name="panel_pick_info"
+ help_topic="profile_pick_info"
top="0"
width="333">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 1fc553ff36..a2b0adf9d9 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -124,7 +124,6 @@
height="25"
top_pad="10"
name="buttons_cucks"
- help_topic="picks_button_tab"
width="313">
<button
enabled="false"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 18d0f8acab..ace8281b4e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -31,7 +31,6 @@
width="300" />
<check_box
control_name="ChatOnlineNotification"
- enabled="false"
height="16"
label="When my friends log out or in"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 1c1e17eb5a..a8e24366f2 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -77,10 +77,23 @@
name="cookies_enabled"
top_pad="10"
width="350" />
- <check_box
+ <check_box
+ control_name="MediaEnabled"
+ height="16"
+ label="Media Enabled"
+ layout="topleft"
+ left="30"
+ name="media_enabled"
+ top_pad="10"
+ width="350">
+ <check_box.commit_callback
+ function="Pref.MediaEnabled" />
+ </check_box>
+ <check_box
+ enabled_control="MediaEnabled"
control_name="ParcelMediaAutoPlayEnable"
height="16"
- label="Allow Media Autoplay"
+ label="Allow Media to auto-play"
layout="topleft"
left="30"
name="autoplay_enabled"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index ab6384203f..e1d8ee241d 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -122,6 +122,7 @@
height="22"
width="22">
<button
+ name="fwd_btn"
follows="top"
image_overlay="Arrow_Right_Off"
image_disabled="PushButton_Disabled"
@@ -131,7 +132,6 @@
hover_glow_amount="0.15"
top="0"
height="22"
- min_width="22"
width="22"
layout="topleft"
tool_tip="Navigate forward">
@@ -150,10 +150,11 @@
min_width="22"
width="22">
<button
+ name="home_btn"
follows="top"
+ image_overlay="Home_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
- image_overlay="Home_Off"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
@@ -161,7 +162,6 @@
tool_tip="Home page"
top="0"
height="22"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.Home" />
@@ -178,6 +178,7 @@
min_width="22"
width="22">
<button
+ name="media_stop_btn"
follows="top"
image_overlay="Stop_Off"
image_disabled="PushButton_Disabled"
@@ -189,7 +190,6 @@
tool_tip="Stop media"
top="0"
height="22"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.MediaStop" />
@@ -206,6 +206,7 @@
min_width="22"
width="22">
<button
+ name="reload_btn"
follows="top"
image_overlay="Refresh_Off"
image_disabled="PushButton_Disabled"
@@ -217,7 +218,6 @@
tool_tip="Reload"
top="0"
height="22"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.Reload" />
@@ -234,6 +234,7 @@
min_width="22"
width="22">
<button
+ name="stop_btn"
follows="top"
image_overlay="StopReload_Off"
image_disabled="PushButton_Disabled"
@@ -245,7 +246,6 @@
tool_tip = "Stop loading"
top="0"
height="22"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.Stop" />
@@ -262,6 +262,7 @@
min_width="22"
width="24">
<button
+ name="play_btn"
follows="top"
image_overlay="Play_Off"
image_disabled="PushButton_Disabled"
@@ -274,7 +275,6 @@
left_delta="2"
top="0"
height="22"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.Play" />
@@ -290,6 +290,7 @@
min_width="22"
width="24">
<button
+ name="pause_btn"
follows="top"
image_overlay="Pause_Off"
image_disabled="PushButton_Disabled"
@@ -354,7 +355,6 @@
image_name="Flag"
layout="topleft"
tool_tip="White List enabled"
- min_width="16"
width="16" />
</layout_panel>
<layout_panel
@@ -369,7 +369,6 @@
image_name="Lock2"
layout="topleft"
tool_tip="Secured Browsing"
- min_width="16"
width="16" />
</layout_panel>
</layout_stack>
@@ -394,7 +393,6 @@
initial_value="0.5"
layout="topleft"
tool_tip="Movie play progress"
- min_width="100"
width="200">
<slider_bar.commit_callback
function="MediaCtrl.JumpProgress" />
@@ -410,6 +408,7 @@
min_width="22"
width="22">
<button
+ name="skip_back_btn"
follows="top"
image_overlay="SkipBackward_Off"
image_disabled="PushButton_Disabled"
@@ -438,6 +437,7 @@
min_width="22"
width="22">
<button
+ name="skip_forward_btn"
follows="top"
image_overlay="SkipForward_Off"
image_disabled="PushButton_Disabled"
@@ -449,7 +449,6 @@
layout="topleft"
tool_tip="Step forward"
top="0"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.SkipForward" />
@@ -470,20 +469,19 @@
<!-- two different images. -->
<!-- Note also: the button and the slider must overlap! -->
<button
+ name="media_mute_button"
follows="top"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="AudioMute_Off"
image_unselected="Audio_Off"
hover_glow_amount="0.15"
- name="media_mute_button"
is_toggle="true"
layout="topleft"
scale_image="false"
tool_tip="Mute This Media"
top="0"
height="20"
- min_width="22"
width="22" >
<button.commit_callback
function="MediaCtrl.ToggleMute" />
@@ -523,6 +521,7 @@
min_width="22"
width="22">
<button
+ name="zoom_frame_btn"
follows="top"
image_overlay="Zoom_Off"
image_disabled="PushButton_Disabled"
@@ -534,7 +533,6 @@
height="22"
layout="topleft"
tool_tip="Zoom into media"
- min_width="22"
width="22">
<button.commit_callback
function="MediaCtrl.Zoom" />
@@ -550,6 +548,7 @@
min_width="21"
width="21" >
<button
+ name="close_btn"
follows="top"
image_overlay="UnZoom_Off"
image_disabled="PushButton_Disabled"
@@ -577,6 +576,7 @@
min_width="22"
width="22">
<button
+ name="new_window_btn"
follows="top"
image_overlay="ExternalBrowser_Off"
image_disabled="PushButton_Disabled"
@@ -588,7 +588,6 @@
layout="topleft"
tool_tip = "Open URL in browser"
top="0"
- min_width="24"
width="24" >
<button.commit_callback
function="MediaCtrl.Open" />
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 597b6410cd..2b907ed251 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -247,6 +247,7 @@
<name_box
follows="left|top"
height="10"
+ initial_value="(retrieving)"
layout="topleft"
left="0"
link="true"
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
index 1dd4eb095c..ab3cc036d5 100644
--- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
+++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
@@ -4,7 +4,6 @@
follows="all"
height="570"
min_height="350"
- label="home_tab"
help_topic="sidetray_home"
layout="topleft"
top="0"
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index bfca2f2e46..7a6089c74e 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -53,7 +53,7 @@
label_shadow="false"
name="buycurrency"
tool_tip="My Balance"
- top="5"
+ top="3"
width="100" />
<button
auto_resize="true"
@@ -71,7 +71,7 @@
name="buyL"
pad_right="20px"
tool_tip="Click to buy more L$"
- top="5"
+ top="2"
width="100" />
<text
type="string"
@@ -80,7 +80,7 @@
follows="right|bottom"
halign="right"
height="16"
- top="7"
+ top="5"
layout="topleft"
left_pad="0"
name="TimeText"
@@ -96,7 +96,7 @@
image_unselected="Audio_Off"
is_toggle="true"
left_pad="18"
- top="4"
+ top="2"
name="volume_btn"
tool_tip="Global Volume Control"
width="16" />
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index ba2d61afb7..d198237e5d 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -39,7 +39,8 @@
name="toast_text"
word_wrap="true"
text_color="white"
- top="5"
+ top="5"
+ v_pad="5"
use_ellipses="true"
width="260">
Toast text;
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 51974be854..fb5f9d2ec8 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -33,7 +33,6 @@
<panel
height="25"
layout="bottomright"
- help_topic="item_button_tab"
name="button_panel"
left="5"
bottom="5"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index 4a992dadd9..e18f59ab64 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -401,7 +401,6 @@ top_pad="10"
<panel
height="30"
layout="bottomright"
- help_topic="button_tab"
name="button_panel"
left="5"
bottom="2"
@@ -414,4 +413,4 @@ top_pad="10"
right="-1"
width="100" />
</panel>
- </panel> \ No newline at end of file
+ </panel>
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 2dfcdf4a4c..74f97dca4e 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -518,7 +518,6 @@
<panel
height="25"
layout="bottomright"
- help_topic="button_tab"
name="button_panel"
left="5"
bottom="5"
@@ -551,4 +550,4 @@
top="0"
width="100" />
</panel>
-</panel> \ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 02dc507781..b378944e48 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2170,7 +2170,7 @@ this texture in your inventory
Unknown file extension .%s
Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
</string>
- <string name="MuteObject">Block</string>
+ <string name="MuteObject2">Block</string>
<string name="MuteAvatar">Block</string>
<string name="UnmuteObject">Unblock</string>
<string name="UnmuteAvatar">Unblock</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
index 8785dff2ae..ef885e8045 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
@@ -1,23 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<chat_history
- message_header="panel_chat_header.xml"
- message_separator="panel_chat_separator.xml"
- left_text_pad="10"
- right_text_pad="15"
- left_widget_pad="0"
- right_widget_pad="10"
- top_separator_pad="5"
- bottom_separator_pad="5"
- top_header_pad="17"
- bottom_header_pad="10"
+ message_header="panel_chat_header.xml"
+ message_separator="panel_chat_separator.xml"
+ left_text_pad="10"
+ right_text_pad="15"
+ left_widget_pad="0"
+ right_widget_pad="10"
+ top_separator_pad="1"
+ bottom_separator_pad="1"
+ top_header_pad="12"
+ bottom_header_pad="5"
max_length="2147483647"
track_bottom="true"
name="chat_history"
type="string"
word_wrap="true"
+ line_spacing.multiple="1.0"
font="SansSerif">
<more_chat_text
mouse_opaque="true"
word_wrap="true"
/>
-</chat_history>
+</chat_history> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index 693c43f141..2bec5b8a29 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -4,6 +4,13 @@
name="im_adhoc_chiclet"
show_speaker="false"
width="25">
+ <chiclet_im_adhoc.chiclet_button
+ height="25"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ name="chiclet_button"
+ tab_stop="false"
+ width="25"/>
<chiclet_im_adhoc.speaker
auto_update="true"
draw_border="false"
@@ -13,11 +20,13 @@
visible="false"
width="20" />
<chiclet_im_adhoc.avatar_icon
+ bottom="3"
follows="left|top|bottom"
- height="22"
+ height="19"
+ left="3"
mouse_opaque="true"
name="adhoc_icon"
- width="22" />
+ width="19" />
<chiclet_im_adhoc.unread_notifications
font_halign="center"
height="25"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
index f4fc58701c..1d7f3208af 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
@@ -4,6 +4,13 @@
name="im_group_chiclet"
show_speaker="false"
width="25">
+ <chiclet_im_group.chiclet_button
+ height="25"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ name="chiclet_button"
+ tab_stop="false"
+ width="25"/>
<chiclet_im_group.speaker
auto_update="true"
draw_border="false"
@@ -13,13 +20,14 @@
visible="false"
width="20" />
<chiclet_im_group.group_icon
+ bottom="3"
default_icon="Generic_Group"
follows="left|top|bottom"
- height="18"
- bottom_pad="4"
- mouse_opaque="true"
+ height="19"
+ left="3"
+ mouse_opaque="false"
name="group_icon"
- width="18" />
+ width="19" />
<chiclet_im_group.unread_notifications
height="25"
font_halign="center"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
index 535113f717..e6289f7cef 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
@@ -4,6 +4,13 @@
name="im_p2p_chiclet"
show_speaker="false"
width="25">
+ <chiclet_im_p2p.chiclet_button
+ height="25"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ name="chiclet_button"
+ tab_stop="false"
+ width="25"/>
<chiclet_im_p2p.speaker
auto_update="true"
draw_border="false"
@@ -13,11 +20,13 @@
visible="false"
width="20"/>
<chiclet_im_p2p.avatar_icon
+ bottom="3"
follows="left|top|bottom"
- height="22"
- mouse_opaque="true"
+ height="19"
+ left="3"
+ mouse_opaque="false"
name="avatar_icon"
- width="22" />
+ width="19" />
<chiclet_im_p2p.unread_notifications
height="25"
font_halign="center"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
index 86bea9be50..138b50c968 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
@@ -3,14 +3,22 @@
height="25"
name="offer_chiclet"
width="25">
+ <chiclet_offer.chiclet_button
+ height="25"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ name="chiclet_button"
+ tab_stop="false"
+ width="25"/>
<chiclet_offer.icon
+ bottom="3"
default_icon="Generic_Object_Small"
follows="all"
- height="20"
+ height="19"
+ left="3"
mouse_opaque="false"
name="chiclet_icon"
- bottom_pad="2"
- width="20" />
+ width="19" />
<chiclet_offer.new_message_icon
bottom="11"
height="14"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
index b1f9f5b0e8..ecf149dc76 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -3,14 +3,22 @@
height="25"
name="script_chiclet"
width="25">
+ <chiclet_script.chiclet_button
+ height="25"
+ image_selected="PushButton_Selected"
+ image_unselected="PushButton_Off"
+ name="chiclet_button"
+ tab_stop="false"
+ width="25"/>
<chiclet_script.icon
+ bottom="3"
follows="all"
- height="20"
+ height="19"
image_name="Generic_Object_Small"
+ left="3"
mouse_opaque="false"
name="chiclet_icon"
- width="20"
- bottom_pad="2" />
+ width="19"/>
<chiclet_script.new_message_icon
bottom="11"
height="14"
diff --git a/indra/newview/skins/default/xui/en/widgets/menu.xml b/indra/newview/skins/default/xui/en/widgets/menu.xml
index 53034afa61..58543338f6 100644
--- a/indra/newview/skins/default/xui/en/widgets/menu.xml
+++ b/indra/newview/skins/default/xui/en/widgets/menu.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu bg_color="MenuDefaultBgColor"
bg_visible="true"
- drop_shadow="false"
+ drop_shadow="true"
tear_off="false"
shortcut_pad="15">
</menu>
diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
index ec612c4606..297d98ad8d 100644
--- a/indra/newview/tests/llviewerhelputil_test.cpp
+++ b/indra/newview/tests/llviewerhelputil_test.cpp
@@ -78,9 +78,24 @@ static void substitute_string(std::string &input, const std::string &search, con
}
}
+class LLAgent
+{
+public:
+ LLAgent() {}
+ ~LLAgent() {}
+#ifdef __GNUC__
+ __attribute__ ((noinline))
+#endif
+ BOOL isGodlike() const { return FALSE; }
+private:
+ int dummy;
+};
+LLAgent gAgent;
+
std::string LLWeb::expandURLSubstitutions(const std::string &url,
const LLSD &default_subs)
{
+ (void)gAgent.isGodlike(); // ref symbol to stop compiler from stripping it
std::string new_url = url;
substitute_string(new_url, "[TOPIC]", default_subs["TOPIC"].asString());
substitute_string(new_url, "[VERSION]", gVersion);
@@ -91,6 +106,7 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
return new_url;
}
+
//----------------------------------------------------------------------------
namespace tut