summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcharacter/llkeyframemotion.h1
-rw-r--r--indra/llcommon/llapp.h8
-rw-r--r--indra/llcommon/llapr.h8
-rw-r--r--indra/llcommon/llcommon.h1
-rw-r--r--indra/llcommon/llerror.cpp3
-rw-r--r--indra/llcommon/llthread.h1
-rw-r--r--indra/llmessage/lliohttpserver.h1
-rw-r--r--indra/llplugin/llpluginprocessparent.cpp9
-rw-r--r--indra/llplugin/llpluginprocessparent.h1
-rw-r--r--indra/llrender/llfontfreetype.h3
-rw-r--r--indra/llrender/llfontgl.cpp30
-rw-r--r--indra/llui/llbutton.cpp7
-rw-r--r--indra/llui/llbutton.h3
-rw-r--r--indra/llui/lldraghandle.cpp1
-rw-r--r--indra/llui/llfloater.cpp13
-rw-r--r--indra/llui/lltabcontainer.cpp2
-rw-r--r--indra/llui/lltextbase.cpp129
-rw-r--r--indra/llui/lltextbase.h8
-rw-r--r--indra/llui/lltextbox.cpp4
-rw-r--r--indra/llui/lltexteditor.cpp38
-rw-r--r--indra/llui/lluistring.cpp51
-rw-r--r--indra/llui/lluistring.h32
-rwxr-xr-xindra/llvfs/llpidlock.cpp9
-rwxr-xr-xindra/llvfs/llpidlock.h12
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llagent.cpp2
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llappviewer.h1
-rw-r--r--indra/newview/llchathistory.cpp12
-rw-r--r--indra/newview/llexpandabletextbox.cpp23
-rw-r--r--indra/newview/llfilepicker.h5
-rw-r--r--indra/newview/llfloateranimpreview.h1
-rw-r--r--indra/newview/llfloaterauction.cpp2
-rw-r--r--indra/newview/llfloaterbump.cpp6
-rw-r--r--indra/newview/llfloateropenobject.cpp53
-rw-r--r--indra/newview/llfloaterpostcard.cpp3
-rw-r--r--indra/newview/llfloaterpostcard.h4
-rw-r--r--indra/newview/llfloaterregioninfo.cpp3
-rw-r--r--indra/newview/llfloaterregioninfo.h4
-rw-r--r--indra/newview/llfloaterreporter.cpp5
-rw-r--r--indra/newview/llfloaterurldisplay.cpp5
-rw-r--r--indra/newview/llfloaterurlentry.cpp2
-rw-r--r--indra/newview/llfloatervoicedevicesettings.cpp32
-rw-r--r--indra/newview/llfloatervoicedevicesettings.h1
-rw-r--r--indra/newview/llfloaterworldmap.cpp2
-rw-r--r--indra/newview/llfolderview.cpp11
-rw-r--r--indra/newview/llfolderviewitem.cpp27
-rw-r--r--indra/newview/llfolderviewitem.h13
-rw-r--r--indra/newview/llgroupactions.cpp2
-rw-r--r--indra/newview/llimfloater.h3
-rw-r--r--indra/newview/llinspectobject.cpp12
-rw-r--r--indra/newview/llinventorybridge.cpp11
-rw-r--r--indra/newview/llinventoryfilter.cpp32
-rw-r--r--indra/newview/llinventorymodel.cpp82
-rw-r--r--indra/newview/llinventorymodel.h42
-rw-r--r--indra/newview/lllandmarkactions.cpp1
-rw-r--r--indra/newview/lllogchat.cpp2
-rw-r--r--indra/newview/llmaniptranslate.cpp59
-rw-r--r--indra/newview/llmaniptranslate.h13
-rwxr-xr-xindra/newview/llmediadataclient.cpp2
-rw-r--r--indra/newview/llnavigationbar.cpp10
-rw-r--r--indra/newview/llnearbychatbar.cpp2
-rw-r--r--indra/newview/llnotificationhandler.h1
-rw-r--r--indra/newview/llpanellandmarks.cpp20
-rw-r--r--indra/newview/llpanelmaininventory.cpp14
-rw-r--r--indra/newview/llpanelmaininventory.h3
-rw-r--r--indra/newview/llpanelmediasettingsgeneral.cpp6
-rw-r--r--indra/newview/llpanelmediasettingsgeneral.h2
-rw-r--r--indra/newview/llpanelmediasettingspermissions.cpp46
-rw-r--r--indra/newview/llpanelmediasettingspermissions.h1
-rw-r--r--indra/newview/llpanelpicks.cpp1
-rw-r--r--indra/newview/llpanelplace.cpp1
-rw-r--r--indra/newview/llpanelplaceinfo.cpp2
-rw-r--r--indra/newview/llpanelplaceprofile.cpp1
-rw-r--r--indra/newview/llpanelplaces.cpp89
-rw-r--r--indra/newview/llpanelplaces.h4
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp32
-rw-r--r--indra/newview/llpreviewgesture.h4
-rw-r--r--indra/newview/llpreviewscript.h1
-rw-r--r--indra/newview/llremoteparcelrequest.h1
-rw-r--r--indra/newview/llselectmgr.cpp12
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp25
-rw-r--r--indra/newview/lltexlayer.cpp8
-rw-r--r--indra/newview/lltexlayerparams.cpp5
-rw-r--r--indra/newview/lltexlayerparams.h4
-rw-r--r--indra/newview/lltexturecache.h1
-rw-r--r--indra/newview/lltexturefetch.cpp2
-rw-r--r--indra/newview/lltexturestatsuploader.cpp2
-rw-r--r--indra/newview/lltoastimpanel.cpp1
-rw-r--r--indra/newview/lltoastnotifypanel.cpp1
-rw-r--r--indra/newview/lltoastpanel.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp43
-rw-r--r--indra/newview/llurldispatcher.cpp1
-rw-r--r--indra/newview/llviewerassetstorage.cpp7
-rw-r--r--indra/newview/llviewerdisplay.cpp70
-rw-r--r--indra/newview/llviewergenericmessage.h1
-rw-r--r--indra/newview/llviewerinventory.cpp2
-rw-r--r--indra/newview/llviewerjoint.h1
-rw-r--r--indra/newview/llviewerjointmesh.h1
-rw-r--r--indra/newview/llviewermedia.cpp42
-rw-r--r--indra/newview/llviewermedia.h2
-rw-r--r--indra/newview/llviewermediafocus.cpp16
-rw-r--r--indra/newview/llviewermenu.cpp76
-rw-r--r--indra/newview/llviewermenu.h23
-rw-r--r--indra/newview/llviewermenufile.cpp9
-rw-r--r--indra/newview/llviewermenufile.h1
-rw-r--r--indra/newview/llviewermessage.cpp6
-rw-r--r--indra/newview/llviewermessage.h3
-rw-r--r--indra/newview/llviewernetwork.cpp5
-rw-r--r--indra/newview/llviewerprecompiledheaders.h104
-rw-r--r--indra/newview/llviewerstats.cpp1
-rw-r--r--indra/newview/llviewertexture.cpp13
-rw-r--r--indra/newview/llviewertexture.h11
-rw-r--r--indra/newview/llviewertexturelist.h1
-rw-r--r--indra/newview/llviewerwindow.cpp78
-rw-r--r--indra/newview/llviewerwindow.h6
-rw-r--r--indra/newview/llvoavatar.cpp1
-rw-r--r--indra/newview/llvoiceclient.h2
-rw-r--r--indra/newview/llvovolume.cpp7
-rw-r--r--indra/newview/llvovolume.h1
-rw-r--r--indra/newview/llwaterparammanager.cpp3
-rw-r--r--indra/newview/llwldaycycle.cpp6
-rw-r--r--indra/newview/llwlparammanager.cpp5
-rw-r--r--indra/newview/llworldmapmessage.cpp1
-rw-r--r--indra/newview/llxmlrpclistener.cpp5
-rw-r--r--indra/newview/skins/default/colors.xml4
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Notices_Unread.pngbin331 -> 3693 bytes
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Unread_IM.pngbin416 -> 458 bytes
-rw-r--r--indra/newview/skins/default/textures/bottomtray/WellButton_Lit.pngbin288 -> 553 bytes
-rw-r--r--indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.pngbin405 -> 687 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml7
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_settings.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_texture.xml103
-rw-r--r--indra/newview/skins/default/xui/en/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_texture_ctrl.xml2
-rw-r--r--indra/newview/skins/default/xui/en/inspect_object.xml12
-rw-r--r--indra/newview/skins/default/xui/en/menu_attachment_other.xml105
-rw-r--r--indra/newview/skins/default/xui/en/menu_attachment_self.xml124
-rw-r--r--indra/newview/skins/default/xui/en/menu_avatar_other.xml96
-rw-r--r--indra/newview/skins/default/xui/en/menu_avatar_self.xml227
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml27
-rw-r--r--indra/newview/skins/default/xui/en/menu_land.xml65
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml158
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml84
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml40
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_media_settings_general.xml40
-rw-r--r--indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml43
-rw-r--r--indra/newview/skins/default/xui/en/panel_media_settings_security.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml44
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml11
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_item_info.xml91
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml6
-rw-r--r--indra/newview/skins/default/xui/en/widgets/button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/floater.xml2
-rw-r--r--indra/newview/tests/llcapabilitylistener_test.cpp1
160 files changed, 2105 insertions, 933 deletions
diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h
index 7e8c84488c..50d9d05046 100644
--- a/indra/llcharacter/llkeyframemotion.h
+++ b/indra/llcharacter/llkeyframemotion.h
@@ -47,7 +47,6 @@
#include "llquaternion.h"
#include "v3dmath.h"
#include "v3math.h"
-#include "llapr.h"
#include "llbvhconsts.h"
class LLKeyframeDataCache;
diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h
index 1a052ce62d..27a52cdd99 100644
--- a/indra/llcommon/llapp.h
+++ b/indra/llcommon/llapp.h
@@ -34,14 +34,18 @@
#define LL_LLAPP_H
#include <map>
-#include "llapr.h"
#include "llrun.h"
#include "llsd.h"
#include "lloptioninterface.h"
// Forward declarations
+template <typename Type> class LLAtomic32;
+typedef LLAtomic32<U32> LLAtomicU32;
class LLErrorThread;
class LLLiveFile;
+#if LL_LINUX
+typedef struct siginfo siginfo_t;
+#endif
typedef void (*LLAppErrorHandler)();
typedef void (*LLAppChildCallback)(int pid, bool exited, int status);
@@ -202,8 +206,6 @@ public:
#if !LL_WINDOWS
static U32 getSigChildCount();
static void incSigChildCount();
-#else
-#define getpid GetCurrentProcessId
#endif
static int getPid();
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index b08bb617c5..b05a222b33 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -38,6 +38,14 @@
#if LL_LINUX || LL_SOLARIS
#include <sys/param.h> // Need PATH_MAX in APR headers...
#endif
+#if LL_WINDOWS
+ // Limit Windows API to small and manageable set.
+ // If you get undefined symbols, find the appropriate
+ // Windows header file and include that in your .cpp file.
+ #define WIN32_LEAN_AND_MEAN
+ #include <winsock2.h>
+ #include <windows.h>
+#endif
#include <boost/noncopyable.hpp>
diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h
index b36471f9f8..05eef25b21 100644
--- a/indra/llcommon/llcommon.h
+++ b/indra/llcommon/llcommon.h
@@ -33,7 +33,6 @@
#define LL_COMMON_H
// *TODO: remove these?
-#include "llapr.h"
#include "lltimer.h"
#include "llfile.h"
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 77c0c2294a..bd334a6654 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -45,9 +45,6 @@
# include <syslog.h>
# include <unistd.h>
#endif // !LL_WINDOWS
-#if LL_WINDOWS
-# include <windows.h>
-#endif // LL_WINDOWS
#include <vector>
#include "llapp.h"
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index d8aa90de2e..adef1a9192 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -34,6 +34,7 @@
#define LL_LLTHREAD_H
#include "llapp.h"
+#include "llapr.h"
#include "apr_thread_cond.h"
class LLThread;
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
index d1c9bdde85..e8e390f296 100644
--- a/indra/llmessage/lliohttpserver.h
+++ b/indra/llmessage/lliohttpserver.h
@@ -34,7 +34,6 @@
#ifndef LL_LLIOHTTPSERVER_H
#define LL_LLIOHTTPSERVER_H
-#include "llapr.h"
#include "llchainio.h"
#include "llhttpnode.h"
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index f60838b1e7..dab6d645dd 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -79,8 +79,10 @@ LLPluginProcessParent::~LLPluginProcessParent()
// and remove it from our map
mSharedMemoryRegions.erase(iter);
}
-
- mProcess.kill();
+
+ // orphaning the process means it won't be killed when the LLProcessLauncher is destructed.
+ // This is what we want -- it should exit cleanly once it notices the sockets have been closed.
+ mProcess.orphan();
killSockets();
}
@@ -414,7 +416,8 @@ void LLPluginProcessParent::idle(void)
break;
case STATE_CLEANUP:
- mProcess.kill();
+ // Don't do a kill here anymore -- closing the sockets is the new 'kill'.
+ mProcess.orphan();
killSockets();
setState(STATE_DONE);
break;
diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h
index 6d661a6960..03ce10f86c 100644
--- a/indra/llplugin/llpluginprocessparent.h
+++ b/indra/llplugin/llpluginprocessparent.h
@@ -34,6 +34,7 @@
#ifndef LL_LLPLUGINPROCESSPARENT_H
#define LL_LLPLUGINPROCESSPARENT_H
+#include "llapr.h"
#include "llprocesslauncher.h"
#include "llpluginmessage.h"
#include "llpluginmessagepipe.h"
diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h
index 1325b4995b..7a5d029038 100644
--- a/indra/llrender/llfontfreetype.h
+++ b/indra/llrender/llfontfreetype.h
@@ -58,9 +58,8 @@ private:
~LLFontManager();
};
-class LLFontGlyphInfo
+struct LLFontGlyphInfo
{
-public:
LLFontGlyphInfo(U32 index);
U32 mGlyphIndex;
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index a28ffbfdc0..db1f019a81 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -195,7 +195,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
cur_y += mFontFreetype->getDescenderHeight();
break;
case VCENTER:
- cur_y -= ((mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight())/2.f);
+ cur_y -= (mFontFreetype->getAscenderHeight() - mFontFreetype->getDescenderHeight()) / 2.f;
break;
case BASELINE:
// Baseline, do nothing.
@@ -221,7 +221,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
cur_render_y = cur_y;
cur_render_x = cur_x;
- F32 start_x = cur_x;
+ F32 start_x = llround(cur_x);
const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache();
@@ -235,7 +235,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
if (use_ellipses)
{
// check for too long of a string
- if (getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX > scaled_max_pixels)
+ S32 string_width = llround(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX);
+ if (string_width > scaled_max_pixels)
{
// use four dots for ellipsis width to generate padding
const LLWString dots(utf8str_to_wstring(std::string("....")));
@@ -301,8 +302,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
// Must do this to cur_x, not just to cur_render_x, otherwise you
// will squish sub-pixel kerned characters too close together.
// For example, "CCCCC" looks bad.
- cur_x = (F32)llfloor(cur_x + 0.5f);
- //cur_y = (F32)llfloor(cur_y + 0.5f);
+ cur_x = (F32)llround(cur_x);
+ //cur_y = (F32)llround(cur_y);
cur_render_x = cur_x;
cur_render_y = cur_y;
@@ -461,7 +462,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars
cur_x += mFontFreetype->getXKerning(wch, next_char);
}
// Round after kerning.
- cur_x = (F32)llfloor(cur_x + 0.5f);
+ cur_x = (F32)llround(cur_x);
}
// add in extra pixels for last character's width past its xadvance
@@ -490,6 +491,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
// avoid S32 overflow when max_pixels == S32_MAX by staying in floating point
F32 scaled_max_pixels = ceil(max_pixels * sScaleX);
+ F32 width_padding = 0.f;
S32 i;
for (i=0; (i < max_chars); i++)
@@ -533,9 +535,17 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
}
}
- cur_x += mFontFreetype->getXAdvance(wch);
+ LLFontGlyphInfo* fgi = mFontFreetype->getGlyphInfo(wch);
+
+ // account for glyphs that run beyond the starting point for the next glyphs
+ width_padding = llmax( 0.f, // always use positive padding amount
+ width_padding - fgi->mXAdvance, // previous padding left over after advance of current character
+ (F32)(fgi->mWidth + fgi->mXBearing) - fgi->mXAdvance); // difference between width of this character and advance to next character
+
+ cur_x += fgi->mXAdvance;
- if (scaled_max_pixels < cur_x)
+ // clip if current character runs past scaled_max_pixels (using width_padding)
+ if (scaled_max_pixels < cur_x + width_padding)
{
clip = TRUE;
break;
@@ -548,7 +558,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
}
// Round after kerning.
- cur_x = (F32)llfloor(cur_x + 0.5f);
+ cur_x = llround(cur_x);
drawn_x = cur_x;
}
@@ -660,7 +670,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t
}
// Round after kerning.
- cur_x = (F32)llfloor(cur_x + 0.5f);
+ cur_x = llround(cur_x);
}
return llmin(max_chars, pos - begin_offset);
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 7721137e29..e9f6288f44 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -63,7 +63,6 @@ template class LLButton* LLView::getChild<class LLButton>(
// globals loaded from settings.xml
S32 LLBUTTON_H_PAD = 0;
-S32 LLBUTTON_V_PAD = 0;
S32 BTN_HEIGHT_SMALL= 0;
S32 BTN_HEIGHT = 0;
@@ -93,6 +92,7 @@ LLButton::Params::Params()
flash_color("flash_color"),
pad_right("pad_right", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")),
pad_left("pad_left", LLUI::sSettingGroups["config"]->getS32("ButtonHPad")),
+ pad_bottom("pad_bottom"),
click_callback("click_callback"),
mouse_down_callback("mouse_down_callback"),
mouse_up_callback("mouse_up_callback"),
@@ -148,6 +148,7 @@ LLButton::LLButton(const LLButton::Params& p)
mHAlign(p.font_halign),
mLeftHPad(p.pad_left),
mRightHPad(p.pad_right),
+ mBottomVPad(p.pad_bottom),
mHoverGlowStrength(p.hover_glow_amount),
mCommitOnReturn(p.commit_on_return),
mFadeWhenDisabled(FALSE),
@@ -839,7 +840,9 @@ void LLButton::draw()
// LLFontGL::render expects S32 max_chars variable but process in a separate way -1 value.
// Due to U32_MAX is equal to S32 -1 value I have rest this value for non-ellipses mode.
// Not sure if it is really needed. Probably S32_MAX should be always passed as max_chars.
- mLastDrawCharsCount = mGLFont->render(label, 0, (F32)x, (F32)(LLBUTTON_V_PAD + y_offset),
+ mLastDrawCharsCount = mGLFont->render(label, 0,
+ (F32)x,
+ (F32)(mBottomVPad + y_offset),
label_color % alpha,
mHAlign, LLFontGL::BOTTOM,
LLFontGL::NORMAL,
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 4c7400220d..5e28b8cdff 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -49,7 +49,6 @@
// PLEASE please use these "constants" when building your own buttons.
// They are loaded from settings.xml at run time.
extern S32 LLBUTTON_H_PAD;
-extern S32 LLBUTTON_V_PAD;
extern S32 BTN_HEIGHT_SMALL;
extern S32 BTN_HEIGHT;
@@ -105,6 +104,7 @@ public:
// layout
Optional<S32> pad_right;
Optional<S32> pad_left;
+ Optional<S32> pad_bottom; // under text label
// callbacks
Optional<CommitCallbackParam> click_callback, // alias -> commit_callback
@@ -310,6 +310,7 @@ private:
LLFontGL::HAlign mHAlign;
S32 mLeftHPad;
S32 mRightHPad;
+ S32 mBottomVPad; // under text label
F32 mHoverGlowStrength;
F32 mCurGlowStrength;
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
index d9b98b1c28..a93c666648 100644
--- a/indra/llui/lldraghandle.cpp
+++ b/indra/llui/lldraghandle.cpp
@@ -112,6 +112,7 @@ void LLDragHandleTop::setTitle(const std::string& title)
params.font(font);
params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT);
params.font_shadow(LLFontGL::DROP_SHADOW_SOFT);
+ params.use_ellipses = true;
mTitleBox = LLUICtrlFactory::create<LLTextBox> (params);
addChild( mTitleBox );
}
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index fd7b64af02..5fd707fea3 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1649,6 +1649,7 @@ void LLFloater::draw()
}
else
{
+ //FIXME: get rid of this hack
// draw children
LLView* focused_child = dynamic_cast<LLView*>(gFocusMgr.getKeyboardFocus());
BOOL focused_child_visible = FALSE;
@@ -2703,6 +2704,18 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
output_node, output_params, &default_params);
}
+ // Default floater position to top-left corner of screen
+ // However, some legacy floaters have explicit top or bottom
+ // coordinates set, so respect their wishes.
+ if (!params.rect.top.isProvided() && !params.rect.bottom.isProvided())
+ {
+ params.rect.top.set(0);
+ }
+ if (!params.rect.left.isProvided() && !params.rect.right.isProvided())
+ {
+ params.rect.left.set(0);
+ }
+
setupParams(params, parent);
initFromParams(params);
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index d7d61cf6cb..2d9106923e 100644
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -906,7 +906,7 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
if (placeholder)
{
- btn_rect.translate(0, -LLBUTTON_V_PAD-2);
+ btn_rect.translate(0, -3); // *TODO: make configurable
LLTextBox::Params params;
params.name(trimmed_label);
params.rect(btn_rect);
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index e0503a0844..1f120a1483 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -312,7 +312,7 @@ void LLTextBase::drawSelectionBackground()
S32 selection_left = llmin( mSelectionStart, mSelectionEnd );
S32 selection_right = llmax( mSelectionStart, mSelectionEnd );
- LLRect selection_rect = mTextRect;
+ LLRect selection_rect = mVisibleTextRect;
// Skip through the lines we aren't drawing.
LLRect content_display_rect = getVisibleDocumentRect();
@@ -391,7 +391,7 @@ void LLTextBase::drawSelectionBackground()
++rect_it)
{
LLRect selection_rect = *rect_it;
- selection_rect.translate(mTextRect.mLeft - content_display_rect.mLeft, mTextRect.mBottom - content_display_rect.mBottom);
+ selection_rect.translate(mVisibleTextRect.mLeft - content_display_rect.mLeft, mVisibleTextRect.mBottom - content_display_rect.mBottom);
gl_rect_2d(selection_rect, selection_color);
}
}
@@ -538,10 +538,10 @@ void LLTextBase::drawText()
line_end = next_start;
}
- LLRect text_rect(line.mRect.mLeft + mTextRect.mLeft - scrolled_view_rect.mLeft,
- line.mRect.mTop - scrolled_view_rect.mBottom + mTextRect.mBottom,
+ LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
+ line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,
llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft,
- line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom);
+ line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);
// draw a single line of text
S32 seg_start = line_start;
@@ -561,14 +561,14 @@ void LLTextBase::drawText()
S32 clipped_end = llmin( line_end, cur_segment->getEnd() ) - cur_segment->getStart();
- if (mUseEllipses
- && clipped_end == line_end
- && next_line == last_line
- && last_line < (S32)mLineInfoList.size())
+ if (mUseEllipses // using ellipses
+ && clipped_end == line_end // last segment on line
+ && next_line == last_line // this is the last visible line
+ && last_line < (S32)mLineInfoList.size()) // and there is more text to display
{
- // more text to go, but we can't fit it
- // so attempt to draw one extra character to force ellipses
- clipped_end++;
+ // more lines of text to go, but we can't fit them
+ // so shrink text rect to force ellipses
+ text_rect.mRight -= 2;
}
text_rect.mLeft = (S32)(cur_segment->draw(seg_start - cur_segment->getStart(), clipped_end, selection_left, selection_right, text_rect));
@@ -949,7 +949,7 @@ void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)
LLUICtrl::reshape( width, height, called_from_parent );
// do this first after reshape, because other things depend on
- // up-to-date mTextRect
+ // up-to-date mVisibleTextRect
updateRects();
needsReflow();
@@ -984,7 +984,7 @@ void LLTextBase::draw()
: hasFocus()
? mFocusBgColor.get()
: mWriteableBgColor.get();
- gl_rect_2d(mTextRect, bg_color, TRUE);
+ gl_rect_2d(mVisibleTextRect, bg_color, TRUE);
}
// draw document view
@@ -1053,9 +1053,9 @@ S32 LLTextBase::getLeftOffset(S32 width)
case LLFontGL::LEFT:
return mHPad;
case LLFontGL::HCENTER:
- return mHPad + (mTextRect.getWidth() - width - mHPad) / 2;
+ return mHPad + (mVisibleTextRect.getWidth() - width - mHPad) / 2;
case LLFontGL::RIGHT:
- return mTextRect.getWidth() - width;
+ return mVisibleTextRect.getWidth() - width;
default:
return mHPad;
}
@@ -1071,17 +1071,17 @@ void LLTextBase::reflow(S32 start_index)
while(mReflowNeeded)
{
- mReflowNeeded = FALSE;
+ mReflowNeeded = false;
// shrink document to minimum size (visible portion of text widget)
// to force inlined widgets with follows set to shrink
- mDocumentView->setShape(mTextRect);
+ mDocumentView->reshape(mVisibleTextRect.getWidth(), mDocumentView->getRect().getHeight());
bool scrolled_to_bottom = mScroller ? mScroller->isAtBottom() : false;
LLRect old_cursor_rect = getLocalRectFromDocIndex(mCursorPos);
- bool follow_selection = mTextRect.overlaps(old_cursor_rect); // cursor is visible
- old_cursor_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom);
+ bool follow_selection = mVisibleTextRect.overlaps(old_cursor_rect); // cursor is visible
+ old_cursor_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);
S32 first_line = getFirstVisibleLine();
@@ -1094,15 +1094,15 @@ void LLTextBase::reflow(S32 start_index)
}
LLRect first_char_rect = getLocalRectFromDocIndex(mScrollIndex);
// subtract off effect of horizontal scrollbar from local position of first char
- first_char_rect.translate(-mTextRect.mLeft, -mTextRect.mBottom);
+ first_char_rect.translate(-mVisibleTextRect.mLeft, -mVisibleTextRect.mBottom);
S32 cur_top = 0;
segment_set_t::iterator seg_iter = mSegments.begin();
S32 seg_offset = 0;
S32 line_start_index = 0;
- const S32 text_width = mTextRect.getWidth() - mHPad; // reserve room for margin
- S32 remaining_pixels = text_width;
+ const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad; // reserve room for margin
+ S32 remaining_pixels = text_available_width;
LLWString text(getWText());
S32 line_count = 0;
@@ -1142,10 +1142,11 @@ void LLTextBase::reflow(S32 start_index)
S32 last_segment_char_on_line = segment->getStart() + seg_offset;
- S32 text_left = getLeftOffset(text_width - remaining_pixels);
+ S32 text_actual_width = text_available_width - remaining_pixels;
+ S32 text_left = getLeftOffset(text_actual_width);
LLRect line_rect(text_left,
cur_top,
- text_left + (text_width - remaining_pixels),
+ text_left + text_actual_width,
cur_top - line_height);
// if we didn't finish the current segment...
@@ -1160,7 +1161,7 @@ void LLTextBase::reflow(S32 start_index)
line_start_index = segment->getStart() + seg_offset;
cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
- remaining_pixels = text_width;
+ remaining_pixels = text_available_width;
line_height = 0;
}
// ...just consumed last segment..
@@ -1188,7 +1189,7 @@ void LLTextBase::reflow(S32 start_index)
line_start_index = segment->getStart() + seg_offset;
cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
line_height = 0;
- remaining_pixels = text_width;
+ remaining_pixels = text_available_width;
}
++seg_iter;
seg_offset = 0;
@@ -1238,10 +1239,10 @@ void LLTextBase::reflow(S32 start_index)
}
}
-LLRect LLTextBase::getContentsRect()
+LLRect LLTextBase::getTextBoundingRect()
{
reflow();
- return mContentsRect;
+ return mTextBoundingRect;
}
@@ -1760,7 +1761,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
LLRect visible_region = getVisibleDocumentRect();
// binary search for line that starts before local_y
- line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mTextRect.mBottom + visible_region.mBottom, compare_bottom());
+ line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), local_y - mVisibleTextRect.mBottom + visible_region.mBottom, compare_bottom());
if (line_iter == mLineInfoList.end())
{
@@ -1768,7 +1769,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round
}
S32 pos = getLength();
- S32 start_x = mTextRect.mLeft + line_iter->mRect.mLeft;
+ S32 start_x = mVisibleTextRect.mLeft + line_iter->mRect.mLeft;
segment_set_t::iterator line_seg_iter;
S32 line_seg_offset;
@@ -1879,7 +1880,7 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const
if (mLineInfoList.empty())
{
// return default height rect in upper left
- local_rect = mTextRect;
+ local_rect = mVisibleTextRect;
local_rect.mBottom = local_rect.mTop - (S32)(mDefaultFont->getLineHeight());
return local_rect;
}
@@ -1890,8 +1891,8 @@ LLRect LLTextBase::getLocalRectFromDocIndex(S32 pos) const
// compensate for scrolled, inset view of doc
LLRect scrolled_view_rect = getVisibleDocumentRect();
local_rect = doc_rect;
- local_rect.translate(mTextRect.mLeft - scrolled_view_rect.mLeft,
- mTextRect.mBottom - scrolled_view_rect.mBottom);
+ local_rect.translate(mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
+ mVisibleTextRect.mBottom - scrolled_view_rect.mBottom);
return local_rect;
}
@@ -1991,7 +1992,7 @@ void LLTextBase::changeLine( S32 delta )
LLRect visible_region = getVisibleDocumentRect();
- S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mTextRect.mBottom - visible_region.mBottom, TRUE);
+ S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE);
setCursorPos(new_cursor_pos, true);
}
@@ -2067,56 +2068,64 @@ void LLTextBase::updateRects()
{
if (mLineInfoList.empty())
{
- mContentsRect = LLRect(0, mVPad, mHPad, 0);
+ mTextBoundingRect = LLRect(0, mVPad, mHPad, 0);
}
else
{
- mContentsRect = mLineInfoList.begin()->mRect;
+ mTextBoundingRect = mLineInfoList.begin()->mRect;
for (line_list_t::const_iterator line_iter = ++mLineInfoList.begin();
line_iter != mLineInfoList.end();
++line_iter)
{
- mContentsRect.unionWith(line_iter->mRect);
+ mTextBoundingRect.unionWith(line_iter->mRect);
}
- mContentsRect.mTop += mVPad;
+ mTextBoundingRect.mTop += mVPad;
// subtract a pixel off the bottom to deal with rounding errors in measuring font height
- mContentsRect.mBottom -= 1;
+ mTextBoundingRect.mBottom -= 1;
- S32 delta_pos = -mContentsRect.mBottom;
+ S32 delta_pos = -mTextBoundingRect.mBottom;
// move line segments to fit new document rect
for (line_list_t::iterator it = mLineInfoList.begin(); it != mLineInfoList.end(); ++it)
{
it->mRect.translate(0, delta_pos);
}
- mContentsRect.translate(0, delta_pos);
+ mTextBoundingRect.translate(0, delta_pos);
}
// update document container dimensions according to text contents
- LLRect doc_rect = mContentsRect;
- // use old mTextRect constraint document to width of viewable region
+ LLRect doc_rect = mTextBoundingRect;
+ // use old mVisibleTextRect constraint document to width of viewable region
doc_rect.mLeft = 0;
- doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight);
+
+ // allow horizontal scrolling?
+ // if so, use entire width of text contents
+ // otherwise, stop at width of mVisibleTextRect
+ doc_rect.mRight = mScroller
+ ? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
+ : mVisibleTextRect.getWidth();
mDocumentView->setShape(doc_rect);
- //update mTextRect *after* mDocumentView has been resized
+ //update mVisibleTextRect *after* mDocumentView has been resized
// so that scrollbars are added if document needs to scroll
- // since mTextRect does not include scrollbars
- LLRect old_text_rect = mTextRect;
- mTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect();
+ // since mVisibleTextRect does not include scrollbars
+ LLRect old_text_rect = mVisibleTextRect;
+ mVisibleTextRect = mScroller ? mScroller->getContentWindowRect() : getLocalRect();
//FIXME: replace border with image?
if (mBorderVisible)
{
- mTextRect.stretch(-1);
+ mVisibleTextRect.stretch(-1);
}
- if (mTextRect != old_text_rect)
+ if (mVisibleTextRect != old_text_rect)
{
needsReflow();
}
- // update document container again, using new mTextRect
- doc_rect.mRight = llmax(mTextRect.getWidth(), mContentsRect.mRight);
+ // update document container again, using new mVisibleTextRect (that has scrollbars enabled as needed)
+ doc_rect.mRight = mScroller
+ ? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
+ : mVisibleTextRect.getWidth();
mDocumentView->setShape(doc_rect);
}
@@ -2154,7 +2163,7 @@ LLRect LLTextBase::getVisibleDocumentRect() const
LLRect doc_rect = mDocumentView->getLocalRect();
doc_rect.mLeft -= mDocumentView->getRect().mLeft;
// adjust for height of text above widget baseline
- doc_rect.mBottom = doc_rect.getHeight() - mTextRect.getHeight();
+ doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();
return doc_rect;
}
}
@@ -2413,10 +2422,18 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt
if (num_chars > 0)
{
LLWString text = mEditor.getWText();
- width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
// if last character is a newline, then return true, forcing line break
llwchar last_char = text[mStart + first_char + num_chars - 1];
- force_newline = (last_char == '\n');
+ if (last_char == '\n')
+ {
+ force_newline = true;
+ // don't count newline in font width
+ width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars - 1);
+ }
+ else
+ {
+ width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars);
+ }
}
else
{
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 0138ca3704..a1f8ba39ae 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -156,8 +156,8 @@ public:
void addDocumentChild(LLView* view);
void removeDocumentChild(LLView* view);
const LLView* getDocumentView() const { return mDocumentView; }
- LLRect getTextRect() { return mTextRect; }
- LLRect getContentsRect();
+ LLRect getVisibleTextRect() { return mVisibleTextRect; }
+ LLRect getTextBoundingRect();
LLRect getVisibleDocumentRect() const;
S32 getVPad() { return mVPad; }
@@ -311,8 +311,8 @@ protected:
// text segmentation and flow
segment_set_t mSegments;
line_list_t mLineInfoList;
- LLRect mTextRect; // The rect in which text is drawn. Excludes borders.
- LLRect mContentsRect;
+ LLRect mVisibleTextRect; // The rect in which text is drawn. Excludes borders.
+ LLRect mTextBoundingRect;
// colors
LLUIColor mCursorColor;
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
index 0bd0ab59fb..a1f5b5726b 100644
--- a/indra/llui/lltextbox.cpp
+++ b/indra/llui/lltextbox.cpp
@@ -134,12 +134,12 @@ void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* user
S32 LLTextBox::getTextPixelWidth()
{
- return getContentsRect().getWidth();
+ return getTextBoundingRect().getWidth();
}
S32 LLTextBox::getTextPixelHeight()
{
- return getContentsRect().getHeight();
+ return getTextBoundingRect().getHeight();
}
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index faf9ccbeb8..e8fc9475a5 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -758,8 +758,8 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
{
mScroller->autoScroll(x, y);
}
- S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
- S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
+ S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight);
+ S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);
setCursorAtLocalPos( clamped_x, clamped_y, true );
mSelectionEnd = mCursorPos;
}
@@ -809,8 +809,8 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
{
mScroller->autoScroll(x, y);
}
- S32 clamped_x = llclamp(x, mTextRect.mLeft, mTextRect.mRight);
- S32 clamped_y = llclamp(y, mTextRect.mBottom, mTextRect.mTop);
+ S32 clamped_x = llclamp(x, mVisibleTextRect.mLeft, mVisibleTextRect.mRight);
+ S32 clamped_y = llclamp(y, mVisibleTextRect.mBottom, mVisibleTextRect.mTop);
setCursorAtLocalPos( clamped_x, clamped_y, true );
endSelection();
}
@@ -2075,8 +2075,8 @@ void LLTextEditor::drawPreeditMarker()
const S32 line_height = llround( mDefaultFont->getLineHeight() );
S32 line_start = getLineStart(cur_line);
- S32 line_y = mTextRect.mTop - line_height;
- while((mTextRect.mBottom <= line_y) && (num_lines > cur_line))
+ S32 line_y = mVisibleTextRect.mTop - line_height;
+ while((mVisibleTextRect.mBottom <= line_y) && (num_lines > cur_line))
{
S32 next_start = -1;
S32 line_end = text_len;
@@ -2108,12 +2108,12 @@ void LLTextEditor::drawPreeditMarker()
continue;
}
- S32 preedit_left = mTextRect.mLeft;
+ S32 preedit_left = mVisibleTextRect.mLeft;
if (left > line_start)
{
preedit_left += mDefaultFont->getWidth(text, line_start, left - line_start);
}
- S32 preedit_right = mTextRect.mLeft;
+ S32 preedit_right = mVisibleTextRect.mLeft;
if (right < line_end)
{
preedit_right += mDefaultFont->getWidth(text, line_start, right - line_start);
@@ -2154,7 +2154,7 @@ void LLTextEditor::drawLineNumbers()
{
LLGLSUIDefault gls_ui;
LLRect scrolled_view_rect = getVisibleDocumentRect();
- LLRect content_rect = getTextRect();
+ LLRect content_rect = getVisibleTextRect();
LLLocalClipRect clip(content_rect);
S32 first_line = getFirstVisibleLine();
S32 num_lines = getLineCount();
@@ -2180,12 +2180,12 @@ void LLTextEditor::drawLineNumbers()
{
line_info& line = mLineInfoList[cur_line];
- if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mTextRect.mBottom)
+ if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)
{
break;
}
- S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mTextRect.mBottom;
+ S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
// draw the line numbers
if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
{
@@ -2216,8 +2216,8 @@ void LLTextEditor::draw()
{
{
// pad clipping rectangle so that cursor can draw at full width
- // when at left edge of mTextRect
- LLRect clip_rect(mTextRect);
+ // when at left edge of mVisibleTextRect
+ LLRect clip_rect(mVisibleTextRect);
clip_rect.stretch(1);
LLLocalClipRect clip(clip_rect);
drawPreeditMarker();
@@ -2781,7 +2781,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
if (control)
{
LLRect control_rect_screen;
- localRectToScreen(mTextRect, &control_rect_screen);
+ localRectToScreen(mVisibleTextRect, &control_rect_screen);
LLUI::screenRectToGL(control_rect_screen, control);
}
@@ -2832,8 +2832,8 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
if (coord)
{
- const S32 query_x = mTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start);
- const S32 query_y = mTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2;
+ const S32 query_x = mVisibleTextRect.mLeft + mDefaultFont->getWidth(text, current_line_start, query - current_line_start);
+ const S32 query_y = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height - line_height / 2;
S32 query_screen_x, query_screen_y;
localPointToScreen(query_x, query_y, &query_screen_x, &query_screen_y);
LLUI::screenPointToGL(query_screen_x, query_screen_y, &coord->mX, &coord->mY);
@@ -2841,13 +2841,13 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
if (bounds)
{
- S32 preedit_left = mTextRect.mLeft;
+ S32 preedit_left = mVisibleTextRect.mLeft;
if (preedit_left_position > current_line_start)
{
preedit_left += mDefaultFont->getWidth(text, current_line_start, preedit_left_position - current_line_start);
}
- S32 preedit_right = mTextRect.mLeft;
+ S32 preedit_right = mVisibleTextRect.mLeft;
if (preedit_right_position < current_line_end)
{
preedit_right += mDefaultFont->getWidth(text, current_line_start, preedit_right_position - current_line_start);
@@ -2857,7 +2857,7 @@ BOOL LLTextEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect
preedit_right += mDefaultFont->getWidth(text, current_line_start, current_line_end - current_line_start);
}
- const S32 preedit_top = mTextRect.mTop - (current_line - first_visible_line) * line_height;
+ const S32 preedit_top = mVisibleTextRect.mTop - (current_line - first_visible_line) * line_height;
const S32 preedit_bottom = preedit_top - line_height;
const LLRect preedit_rect_local(preedit_left, preedit_top, preedit_right, preedit_bottom);
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index 3a1e656364..f7a53e87de 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -39,22 +39,23 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");
LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)
- : mOrig(instring),
- mArgs(args)
+: mOrig(instring),
+ mArgs(args)
{
- format();
+ dirty();
}
void LLUIString::assign(const std::string& s)
{
mOrig = s;
- format();
+ dirty();
}
void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
+
{
mArgs = args;
- format();
+ dirty();
}
void LLUIString::setArgs(const LLSD& sd)
@@ -68,40 +69,40 @@ void LLUIString::setArgs(const LLSD& sd)
{
setArg(sd_it->first, sd_it->second.asString());
}
- format();
+ dirty();
}
void LLUIString::setArg(const std::string& key, const std::string& replacement)
{
mArgs[key] = replacement;
- format();
+ dirty();
}
void LLUIString::truncate(S32 maxchars)
{
- if (mWResult.size() > (size_t)maxchars)
+ if (getUpdatedWResult().size() > (size_t)maxchars)
{
- LLWStringUtil::truncate(mWResult, maxchars);
- mResult = wstring_to_utf8str(mWResult);
+ LLWStringUtil::truncate(getUpdatedWResult(), maxchars);
+ mResult = wstring_to_utf8str(getUpdatedWResult());
}
}
void LLUIString::erase(S32 charidx, S32 len)
{
- mWResult.erase(charidx, len);
- mResult = wstring_to_utf8str(mWResult);
+ getUpdatedWResult().erase(charidx, len);
+ mResult = wstring_to_utf8str(getUpdatedWResult());
}
void LLUIString::insert(S32 charidx, const LLWString& wchars)
{
- mWResult.insert(charidx, wchars);
- mResult = wstring_to_utf8str(mWResult);
+ getUpdatedWResult().insert(charidx, wchars);
+ mResult = wstring_to_utf8str(getUpdatedWResult());
}
void LLUIString::replace(S32 charidx, llwchar wc)
{
- mWResult[charidx] = wc;
- mResult = wstring_to_utf8str(mWResult);
+ getUpdatedWResult()[charidx] = wc;
+ mResult = wstring_to_utf8str(getUpdatedWResult());
}
void LLUIString::clear()
@@ -112,8 +113,16 @@ void LLUIString::clear()
mWResult.clear();
}
-void LLUIString::format()
+void LLUIString::dirty()
{
+ mNeedsResult = true;
+ mNeedsWResult = true;
+}
+
+void LLUIString::updateResult() const
+{
+ mNeedsResult = false;
+
LLFastTimer timer(FTM_UI_STRING);
// optimize for empty strings (don't attempt string replacement)
@@ -129,5 +138,11 @@ void LLUIString::format()
LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
combined_args.insert(mArgs.begin(), mArgs.end());
LLStringUtil::format(mResult, combined_args);
- mWResult = utf8str_to_wstring(mResult);
+}
+
+void LLUIString::updateWResult() const
+{
+ mNeedsWResult = false;
+
+ mWResult = utf8str_to_wstring(getUpdatedResult());
}
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index 763de4d6a3..7ec0fd603a 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -76,19 +76,19 @@ public:
void setArgs(const class LLSD& sd);
void setArg(const std::string& key, const std::string& replacement);
- const std::string& getString() const { return mResult; }
- operator std::string() const { return mResult; }
+ const std::string& getString() const { return getUpdatedResult(); }
+ operator std::string() const { return getUpdatedResult(); }
- const LLWString& getWString() const { return mWResult; }
- operator LLWString() const { return mWResult; }
+ const LLWString& getWString() const { return getUpdatedWResult(); }
+ operator LLWString() const { return getUpdatedWResult(); }
- bool empty() const { return mWResult.empty(); }
- S32 length() const { return mWResult.size(); }
+ bool empty() const { return getUpdatedResult().empty(); }
+ S32 length() const { return getUpdatedWResult().size(); }
void clear();
void clearArgs() { mArgs.clear(); }
- // These utuilty functions are included for text editing.
+ // These utility functions are included for text editing.
// They do not affect mOrig and do not perform argument substitution
void truncate(S32 maxchars);
void erase(S32 charidx, S32 len);
@@ -96,12 +96,24 @@ public:
void replace(S32 charidx, llwchar wc);
private:
- void format();
+ // something changed, requiring reformatting of strings
+ void dirty();
+
+ std::string& getUpdatedResult() const { if (mNeedsResult) { updateResult(); } return mResult; }
+ LLWString& getUpdatedWResult() const{ if (mNeedsWResult) { updateWResult(); } return mWResult; }
+
+ // do actual work of updating strings (non-inlined)
+ void updateResult() const;
+ void updateWResult() const;
std::string mOrig;
- std::string mResult;
- LLWString mWResult; // for displaying
+ mutable std::string mResult;
+ mutable LLWString mWResult; // for displaying
LLStringUtil::format_map_t mArgs;
+
+ // controls lazy evaluation
+ mutable bool mNeedsResult;
+ mutable bool mNeedsWResult;
};
#endif // LL_LLUISTRING_H
diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp
index 315baa001d..95e3692e10 100755
--- a/indra/llvfs/llpidlock.cpp
+++ b/indra/llvfs/llpidlock.cpp
@@ -41,6 +41,15 @@
#include "llframetimer.h"
#if LL_WINDOWS //For windows platform.
+
+#include <windows.h>
+
+namespace {
+ inline DWORD getpid() {
+ return GetCurrentProcessId();
+ }
+}
+
bool isProcessAlive(U32 pid)
{
return (bool) GetProcessVersion((DWORD)pid);
diff --git a/indra/llvfs/llpidlock.h b/indra/llvfs/llpidlock.h
index 42aee4dc4f..496e99cf5a 100755
--- a/indra/llvfs/llpidlock.h
+++ b/indra/llvfs/llpidlock.h
@@ -37,17 +37,9 @@
class LLSD;
class LLFrameTimer;
-#if LL_WINDOWS //For windows platform.
-
-#include <windows.h>
-
-#define getpid GetCurrentProcessId
-
-#else //Everyone Else
-
+#if !LL_WINDOWS //For non-windows platforms.
#include <signal.h>
-
-#endif //Everyone else.
+#endif
namespace LLPidLock
{
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index eed84671c1..7ac7a09d56 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1068,17 +1068,6 @@
<key>Value</key>
<integer>23</integer>
</map>
- <key>ButtonVPad</key>
- <map>
- <key>Comment</key>
- <string>Default vertical spacing between buttons (pixels)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>CacheLocation</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 2b582c90f0..628982973c 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -38,7 +38,6 @@
#include "llagentlistener.h"
#include "llagentwearables.h"
#include "llagentui.h"
-
#include "llanimationstates.h"
#include "llbottomtray.h"
#include "llcallingcard.h"
@@ -65,6 +64,7 @@
#include "llsky.h"
#include "llsmoothstep.h"
#include "llstatusbar.h"
+#include "llteleportflags.h"
#include "lltool.h"
#include "lltoolmgr.h"
#include "lltrans.h"
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 58b36a85dc..07b3399637 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -84,11 +84,14 @@
#include "llsecondlifeurls.h"
// Linden library includes
+#include "llimagej2c.h"
#include "llmemory.h"
#include "llprimitive.h"
#include "llurlaction.h"
+#include "llvfile.h"
#include "llvfsthread.h"
#include "llvolumemgr.h"
+#include "llxfermanager.h"
#include "llnotificationmanager.h"
#include "llnotifications.h"
@@ -389,7 +392,6 @@ bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
static void settings_to_globals()
{
LLBUTTON_H_PAD = gSavedSettings.getS32("ButtonHPad");
- LLBUTTON_V_PAD = gSavedSettings.getS32("ButtonVPad");
BTN_HEIGHT_SMALL = gSavedSettings.getS32("ButtonHeightSmall");
BTN_HEIGHT = gSavedSettings.getS32("ButtonHeight");
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index c1bfbca868..40e74061b5 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -325,6 +325,7 @@ extern BOOL gUseWireframe;
// VFS globals - gVFS is for general use
// gStaticVFS is read-only and is shipped w/ the viewer
// it has pre-cache data like the UI .TGAs
+class LLVFS;
extern LLVFS *gStaticVFS;
extern LLMemoryInfo gSysMemory;
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 1512707a26..ee60df1b4b 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -334,12 +334,12 @@ LLChatHistory::~LLChatHistory()
{
static LLUICachedControl<S32> texteditor_border ("UITextEditorBorder", 0);
- LLRect old_text_rect = mTextRect;
- mTextRect = mScroller->getContentWindowRect();
- mTextRect.stretch(-texteditor_border);
- mTextRect.mLeft += mLeftTextPad;
- mTextRect.mRight -= mRightTextPad;
- if (mTextRect != old_text_rect)
+ LLRect old_text_rect = mVisibleTextRect;
+ mVisibleTextRect = mScroller->getContentWindowRect();
+ mVisibleTextRect.stretch(-texteditor_border);
+ mVisibleTextRect.mLeft += mLeftTextPad;
+ mVisibleTextRect.mRight -= mRightTextPad;
+ if (mVisibleTextRect != old_text_rect)
{
needsReflow();
}
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index bd6936f05c..9c37c953fe 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -51,8 +51,16 @@ public:
/*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const
{
// more label always spans width of text box
- width = mEditor.getTextRect().getWidth() - mEditor.getHPad();
- height = llceil(mStyle->getFont()->getLineHeight());
+ if (num_chars == 0)
+ {
+ width = 0;
+ height = 0;
+ }
+ else
+ {
+ width = mEditor.getDocumentView()->getRect().getWidth() - mEditor.getHPad();
+ height = llceil(mStyle->getFont()->getLineHeight());
+ }
return true;
}
/*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const
@@ -104,7 +112,8 @@ private:
LLExpandableTextBox::LLTextBoxEx::Params::Params()
: more_label("more_label")
-{}
+{
+}
LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
: LLTextBox(p),
@@ -117,16 +126,13 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent)
{
+ hideExpandText();
LLTextBox::reshape(width, height, called_from_parent);
if (getTextPixelHeight() > getRect().getHeight())
{
showExpandText();
}
- else
- {
- hideExpandText();
- }
}
void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params)
@@ -317,7 +323,8 @@ void LLExpandableTextBox::expandTextBox()
mTextBox->hideExpandText();
S32 text_delta = mTextBox->getVerticalTextDelta();
- text_delta += mTextBox->getVPad() * 2 + mScroll->getBorderWidth() * 2;
+ text_delta += mTextBox->getVPad() * 2;
+ text_delta += mScroll->getBorderWidth() * 2;
// no need to expand
if(text_delta <= 0)
{
diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h
index ab2455620f..7ecbc3db60 100644
--- a/indra/newview/llfilepicker.h
+++ b/indra/newview/llfilepicker.h
@@ -64,11 +64,6 @@ extern "C" {
#if LL_GTK
# include "gtk/gtk.h"
#endif // LL_GTK
-
-// also mostly for Linux, for some X11-specific filepicker usability tweaks
-#if LL_X11
-#include "SDL/SDL_syswm.h"
-#endif
}
class LLFilePicker
diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h
index 09b04f1f42..dd2c0b809a 100644
--- a/indra/newview/llfloateranimpreview.h
+++ b/indra/newview/llfloateranimpreview.h
@@ -33,6 +33,7 @@
#ifndef LL_LLFLOATERANIMPREVIEW_H
#define LL_LLFLOATERANIMPREVIEW_H
+#include "llassettype.h"
#include "llfloaternamedesc.h"
#include "lldynamictexture.h"
#include "llcharacter.h"
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index c1a4a845e5..698ccec9c1 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -35,7 +35,6 @@
#include "llfloaterauction.h"
#include "llfloaterregioninfo.h"
-#include "lldir.h"
#include "llgl.h"
#include "llimagej2c.h"
#include "llimagetga.h"
@@ -43,6 +42,7 @@
#include "llvfile.h"
#include "llvfs.h"
#include "llwindow.h"
+#include "message.h"
#include "llagent.h"
#include "llcombobox.h"
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index 68f06b1e5b..e925796526 100644
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -33,11 +33,11 @@
#include "llviewerprecompiledheaders.h"
-#include "llfloaterbump.h"
+#include "llsd.h"
+#include "mean_collision_data.h"
+#include "llfloaterbump.h"
#include "llscrolllistctrl.h"
-
-#include "llsd.h"
#include "lluictrlfactory.h"
#include "llviewermessage.h"
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
index 51c18196f2..bc89f93763 100644
--- a/indra/newview/llfloateropenobject.cpp
+++ b/indra/newview/llfloateropenobject.cpp
@@ -71,11 +71,14 @@ LLFloaterOpenObject::~LLFloaterOpenObject()
{
// sInstance = NULL;
}
+
// virtual
BOOL LLFloaterOpenObject::postBuild()
{
childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this
mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents");
+
+ refresh();
return TRUE;
}
@@ -94,29 +97,57 @@ void LLFloaterOpenObject::onOpen(const LLSD& key)
return;
}
mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
+ refresh();
}
+
void LLFloaterOpenObject::refresh()
{
mPanelInventoryObject->refresh();
- std::string name;
- BOOL enabled;
+ std::string name = "";
+
+ // Enable the copy || copy & wear buttons only if we have something we can copy or copy & wear (respectively).
+ bool copy_enabled = false;
+ bool wear_enabled = false;
LLSelectNode* node = mObjectSelection->getFirstRootNode();
- if (node)
+ if (node)
{
name = node->mName;
- enabled = TRUE;
- }
- else
- {
- name = "";
- enabled = FALSE;
+ copy_enabled = true;
+
+ LLViewerObject* object = node->getObject();
+ if (object)
+ {
+ // this folder is coming from an object, as there is only one folder in an object, the root,
+ // we need to collect the entire contents and handle them as a group
+ InventoryObjectList inventory_objects;
+ object->getInventoryContents(inventory_objects);
+
+ if (!inventory_objects.empty())
+ {
+ for (InventoryObjectList::iterator it = inventory_objects.begin();
+ it != inventory_objects.end();
+ ++it)
+ {
+ LLInventoryItem* item = static_cast<LLInventoryItem*> ((LLInventoryObject*)(*it));
+ LLInventoryType::EType type = item->getInventoryType();
+ if (type == LLInventoryType::IT_OBJECT
+ || type == LLInventoryType::IT_ATTACHMENT
+ || type == LLInventoryType::IT_WEARABLE
+ || type == LLInventoryType::IT_GESTURE)
+ {
+ wear_enabled = true;
+ break;
+ }
+ }
+ }
+ }
}
childSetTextArg("object_name", "[DESC]", name);
- childSetEnabled("copy_to_inventory_button", enabled);
- childSetEnabled("copy_and_wear_button", enabled);
+ childSetEnabled("copy_to_inventory_button", copy_enabled);
+ childSetEnabled("copy_and_wear_button", wear_enabled);
}
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index 572eeb57fe..8da44e2035 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -56,9 +56,8 @@
#include "llstatusbar.h"
#include "llviewerregion.h"
#include "lleconomy.h"
+#include "message.h"
-#include "llgl.h"
-#include "llglheaders.h"
#include "llimagejpeg.h"
#include "llimagej2c.h"
#include "llvfile.h"
diff --git a/indra/newview/llfloaterpostcard.h b/indra/newview/llfloaterpostcard.h
index 49cce53106..0a44b50779 100644
--- a/indra/newview/llfloaterpostcard.h
+++ b/indra/newview/llfloaterpostcard.h
@@ -70,7 +70,7 @@ public:
void sendPostcard();
-protected:
+private:
LLPointer<LLImageJPEG> mJPEGImage;
LLPointer<LLViewerTexture> mViewerImage;
@@ -78,7 +78,7 @@ protected:
LLAssetID mAssetID;
LLVector2 mImageScale;
LLVector3d mPosTakenGlobal;
- boolean mHasFirstMsgFocus;
+ bool mHasFirstMsgFocus;
};
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 2b1c0979b6..496fa62d05 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -42,6 +42,8 @@
#include "llglheaders.h"
#include "llregionflags.h"
#include "llstl.h"
+#include "llvfile.h"
+#include "llxfermanager.h"
#include "indra_constants.h"
#include "message.h"
@@ -52,7 +54,6 @@
#include "llcheckboxctrl.h"
#include "llcombobox.h"
#include "llfilepicker.h"
-#include "llfloaterdaycycle.h"
#include "llfloatergodtools.h" // for send_sim_wide_deletes()
#include "llfloatertopobjects.h" // added to fix SL-32336
#include "llfloatergroups.h"
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 704166d106..a21b96bf16 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -35,9 +35,12 @@
#define LL_LLFLOATERREGIONINFO_H
#include <vector>
+#include "llassettype.h"
#include "llfloater.h"
+#include "llhost.h"
#include "llpanel.h"
+class LLDispatcher;
class LLLineEditor;
class LLMessageSystem;
class LLPanelRegionInfo;
@@ -51,6 +54,7 @@ class LLNameListCtrl;
class LLSliderCtrl;
class LLSpinCtrl;
class LLTextBox;
+class LLVFS;
class LLPanelRegionGeneralInfo;
class LLPanelRegionDebugInfo;
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 932e49c79b..9f3dcae8ef 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -40,11 +40,14 @@
// linden library includes
#include "llassetstorage.h"
#include "llfontgl.h"
-#include "llgl.h" // for renderer
+#include "llimagej2c.h"
#include "llinventory.h"
#include "llnotificationsutil.h"
#include "llstring.h"
#include "llsys.h"
+#include "llvfile.h"
+#include "llvfs.h"
+#include "mean_collision_data.h"
#include "message.h"
#include "v3math.h"
diff --git a/indra/newview/llfloaterurldisplay.cpp b/indra/newview/llfloaterurldisplay.cpp
index 3b9321a876..4b67cbb308 100644
--- a/indra/newview/llfloaterurldisplay.cpp
+++ b/indra/newview/llfloaterurldisplay.cpp
@@ -33,13 +33,14 @@
#include "llviewerprecompiledheaders.h"
+#include "llregionhandle.h"
+#include "v3dmath.h"
+
#include "llfloaterurldisplay.h"
#include "llpanelplace.h"
#include "lluictrlfactory.h"
-#include "v3dmath.h"
-
////////////////////////////////////////////////////////////////////////////
// LLFloaterURLDisplay
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index 5e769feea6..91d0f0e370 100644
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -32,6 +32,8 @@
#include "llviewerprecompiledheaders.h"
+#include "llhttpclient.h"
+
#include "llfloaterurlentry.h"
#include "llpanellandmedia.h"
diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp
index 3951f4291f..43024a4bd0 100644
--- a/indra/newview/llfloatervoicedevicesettings.cpp
+++ b/indra/newview/llfloatervoicedevicesettings.cpp
@@ -40,6 +40,7 @@
#include "llcombobox.h"
#include "llfocusmgr.h"
#include "lliconctrl.h"
+#include "llsliderctrl.h"
#include "llviewercontrol.h"
#include "llvoiceclient.h"
#include "llvoicechannel.h"
@@ -60,6 +61,9 @@ LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
mDevicesUpdated = FALSE;
+ // grab "live" mic volume level
+ mMicVolume = gSavedSettings.getF32("AudioLevelMic");
+
// ask for new device enumeration
// now do this in onOpen() instead...
//gVoiceClient->refreshDeviceLists();
@@ -71,6 +75,10 @@ LLPanelVoiceDeviceSettings::~LLPanelVoiceDeviceSettings()
BOOL LLPanelVoiceDeviceSettings::postBuild()
{
+ LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+ // set mic volume tuning slider based on last mic volume setting
+ volume_slider->setValue(mMicVolume);
+
childSetCommitCallback("voice_input_device", onCommitInputDevice, this);
childSetCommitCallback("voice_output_device", onCommitOutputDevice, this);
@@ -149,6 +157,15 @@ void LLPanelVoiceDeviceSettings::apply()
gSavedSettings.setString("VoiceOutputAudioDevice", s);
mOutputDevice = s;
}
+
+ // assume we are being destroyed by closing our embedding window
+ LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+ if(volume_slider)
+ {
+ F32 slider_value = (F32)volume_slider->getValue().asReal();
+ gSavedSettings.setF32("AudioLevelMic", slider_value);
+ mMicVolume = slider_value;
+ }
}
void LLPanelVoiceDeviceSettings::cancel()
@@ -161,12 +178,22 @@ void LLPanelVoiceDeviceSettings::cancel()
if(mCtrlOutputDevices)
mCtrlOutputDevices->setSimple(mOutputDevice);
+
+ gSavedSettings.setF32("AudioLevelMic", mMicVolume);
+ LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+ if(volume_slider)
+ {
+ volume_slider->setValue(mMicVolume);
+ }
}
void LLPanelVoiceDeviceSettings::refresh()
{
- // update the live input level display
- gVoiceClient->tuningSetMicVolume();
+ //grab current volume
+ LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
+ // set mic volume tuning slider based on last mic volume setting
+ F32 current_volume = (F32)volume_slider->getValue().asReal();
+ gVoiceClient->tuningSetMicVolume(current_volume);
// Fill in popup menus
mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
@@ -236,6 +263,7 @@ void LLPanelVoiceDeviceSettings::initialize()
{
mInputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
mOutputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
+ mMicVolume = gSavedSettings.getF32("AudioLevelMic");
mDevicesUpdated = FALSE;
// ask for new device enumeration
diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llfloatervoicedevicesettings.h
index 20958af780..d67283d0a2 100644
--- a/indra/newview/llfloatervoicedevicesettings.h
+++ b/indra/newview/llfloatervoicedevicesettings.h
@@ -56,6 +56,7 @@ protected:
static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data);
static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data);
+ F32 mMicVolume;
std::string mInputDevice;
std::string mOutputDevice;
class LLComboBox *mCtrlInputDevices;
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 7ca491a698..98f9171237 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -74,8 +74,8 @@
#include "llmapimagetype.h"
#include "llweb.h"
#include "llslider.h"
+#include "message.h"
-#include "llglheaders.h"
#include "llwindow.h" // copyTextToClipboard()
//---------------------------------------------------------------------------
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 1c5d7ae9b9..321982ceb6 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -411,7 +411,12 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
folderp->setVisible(show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders?
(folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
}
- if (folderp->getVisible())
+
+ // Need to call arrange regardless of visibility, since children's visibility
+ // might need to be changed too (e.g. even though a folder is invisible, its
+ // children also need to be set invisible for state-tracking purposes, e.g.
+ // llfolderviewitem::filter).
+ // if (folderp->getVisible())
{
S32 child_height = 0;
S32 child_width = 0;
@@ -479,13 +484,13 @@ void LLFolderView::filter( LLInventoryFilter& filter )
if (getCompletedFilterGeneration() < filter.getCurrentGeneration())
{
- mFiltered = FALSE;
+ mPassedFilter = FALSE;
mMinWidth = 0;
LLFolderViewFolder::filter(filter);
}
else
{
- mFiltered = TRUE;
+ mPassedFilter = TRUE;
}
}
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index fe793fbcb8..135821f662 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -122,7 +122,7 @@ LLFolderViewItem::LLFolderViewItem(LLFolderViewItem::Params p)
mHasVisibleChildren(FALSE),
mIndentation(0),
mNumDescendantsSelected(0),
- mFiltered(FALSE),
+ mPassedFilter(FALSE),
mLastFilterGeneration(-1),
mStringMatchOffset(std::string::npos),
mControlLabelRotation(0.f),
@@ -224,17 +224,17 @@ BOOL LLFolderViewItem::potentiallyVisible()
BOOL LLFolderViewItem::getFiltered()
{
- return mFiltered && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration();
+ return mPassedFilter && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration();
}
BOOL LLFolderViewItem::getFiltered(S32 filter_generation)
{
- return mFiltered && mLastFilterGeneration >= filter_generation;
+ return mPassedFilter && mLastFilterGeneration >= filter_generation;
}
void LLFolderViewItem::setFiltered(BOOL filtered, S32 filter_generation)
{
- mFiltered = filtered;
+ mPassedFilter = filtered;
mLastFilterGeneration = filter_generation;
}
@@ -424,19 +424,20 @@ S32 LLFolderViewItem::getItemHeight()
void LLFolderViewItem::filter( LLInventoryFilter& filter)
{
- BOOL filtered = mListener && filter.check(this);
+ const BOOL previous_passed_filter = mPassedFilter;
+ const BOOL passed_filter = mListener && filter.check(this);
- // if our visibility will change as a result of this filter, then
+ // If our visibility will change as a result of this filter, then
// we need to be rearranged in our parent folder
- if (getVisible() != filtered)
+ if (mParentFolder)
{
- if (mParentFolder)
- {
+ if (getVisible() != passed_filter)
+ mParentFolder->requestArrange();
+ if (passed_filter != previous_passed_filter)
mParentFolder->requestArrange();
- }
}
- setFiltered(filtered, filter.getCurrentGeneration());
+ setFiltered(passed_filter, filter.getCurrentGeneration());
mStringMatchOffset = filter.getStringMatchOffset();
filter.decrementFilterCount();
@@ -1243,7 +1244,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (getLastFilterGeneration() < filter_generation)
{
if (getLastFilterGeneration() >= must_pass_generation && // folder has been compared to a valid precursor filter
- !mFiltered) // and did not pass the filter
+ !mPassedFilter) // and did not pass the filter
{
// go ahead and flag this folder as done
mLastFilterGeneration = filter_generation;
@@ -1381,7 +1382,7 @@ void LLFolderViewFolder::setFiltered(BOOL filtered, S32 filter_generation)
{
// if this folder is now filtered, but wasn't before
// (it just passed)
- if (filtered && !mFiltered)
+ if (filtered && !mPassedFilter)
{
// reset current height, because last time we drew it
// it might have had more visible items than now
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index 43a5fd8de5..620aa070b9 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -121,6 +121,9 @@ public:
static const F32 FOLDER_CLOSE_TIME_CONSTANT;
static const F32 FOLDER_OPEN_TIME_CONSTANT;
+ // Mostly for debugging printout purposes.
+ const std::string& getSearchableLabel() { return mSearchableLabel; }
+
protected:
friend class LLUICtrlFactory;
friend class LLFolderViewEventListener;
@@ -149,7 +152,7 @@ protected:
BOOL mHasVisibleChildren;
S32 mIndentation;
S32 mNumDescendantsSelected;
- BOOL mFiltered;
+ BOOL mPassedFilter;
S32 mLastFilterGeneration;
std::string::size_type mStringMatchOffset;
F32 mControlLabelRotation;
@@ -157,8 +160,8 @@ protected:
BOOL mDragAndDropTarget;
LLUIImagePtr mArrowImage;
LLUIImagePtr mBoxImage;
- BOOL mIsLoading;
- LLTimer mTimeSinceRequestStart;
+ BOOL mIsLoading;
+ LLTimer mTimeSinceRequestStart;
bool mDontShowInHierarchy;
// helper function to change the selection from the root.
@@ -203,7 +206,7 @@ public:
virtual S32 arrange( S32* width, S32* height, S32 filter_generation );
virtual S32 getItemHeight();
void setDontShowInHierarchy(bool dont_show) { mDontShowInHierarchy = dont_show; }
- bool getDontShowInHierarchy() { return mDontShowInHierarchy; }
+ bool getDontShowInHierarchy() const { return mDontShowInHierarchy; }
// applies filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
@@ -332,7 +335,7 @@ public:
EAcceptance* accept,
std::string& tooltip_msg);
- private:
+private:
static std::map<U8, LLFontGL*> sFonts; // map of styles to fonts
};
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 6ca8c025b1..ff75d461df 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -35,6 +35,8 @@
#include "llgroupactions.h"
+#include "message.h"
+
#include "llagent.h"
#include "llcommandhandler.h"
#include "llfloaterreg.h"
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 3184fd8e35..bc7a43e852 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -33,9 +33,10 @@
#ifndef LL_IMFLOATER_H
#define LL_IMFLOATER_H
-#include "lltransientdockablefloater.h"
+#include "llinstantmessage.h"
#include "lllogchat.h"
#include "lltooldraganddrop.h"
+#include "lltransientdockablefloater.h"
class LLLineEditor;
class LLPanelChatControlPanel;
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 42d061ff72..cb35a287e9 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -416,18 +416,6 @@ void LLInspectObject::updateDescription(LLSelectNode* nodep)
LLTextBox* textbox = getChild<LLTextBox>("object_description");
textbox->setValue(desc);
-
- // Truncate description text to fit in widget
- // *HACK: OMG, use lower-left corner to truncate text
- // Don't round the position, we want the left of the character
- S32 corner_index = textbox->getDocIndexFromLocalCoord( 0, 0, FALSE);
- LLWString desc_wide = textbox->getWText();
- // index == length if position is past last character
- if (corner_index < (S32)desc_wide.length())
- {
- desc_wide = desc_wide.substr(0, corner_index);
- textbox->setWText(desc_wide);
- }
}
void LLInspectObject::updateMediaCurrentURL()
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index d507fa70e2..e2f9663000 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1471,13 +1471,14 @@ BOOL LLFolderBridge::isItemRemovable()
{
return FALSE;
}
+
// Allow protected types to be removed, but issue a warning.
- /*
- if(LLFolderType::lookupIsProtectedType(category->getPreferredType()))
+ // Restrict to god mode so users don't inadvertently mess up their inventory.
+ if(LLFolderType::lookupIsProtectedType(category->getPreferredType()) &&
+ !gAgent.isGodlike())
{
return FALSE;
}
- */
LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
LLFolderViewFolder* folderp = dynamic_cast<LLFolderViewFolder*>(panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL);
@@ -2508,8 +2509,8 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back(std::string("Wear As Ensemble"));
}
mItems.push_back(std::string("Remove From Outfit"));
- if (is_sidepanel)
- mItems.push_back(std::string("Outfit Separator"));
+
+ mItems.push_back(std::string("Outfit Separator"));
}
hide_context_entries(*mMenu, mItems, disabled_items);
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 81b10f5a62..522edd0cb5 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -40,6 +40,7 @@
#include "llinventorymodel.h" // gInventory.backgroundFetchActive()
#include "llviewercontrol.h"
#include "llviewerinventory.h"
+#include "llfolderview.h"
// linden library includes
#include "lltrans.h"
@@ -329,7 +330,6 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
mFilterSubString = string;
LLStringUtil::toUpper(mFilterSubString);
LLStringUtil::trimHead(mFilterSubString);
-
if (less_restrictive)
{
setModified(FILTER_LESS_RESTRICTIVE);
@@ -512,21 +512,21 @@ void LLInventoryFilter::setModified(EFilterBehavior behavior)
// if not keeping current filter results, update last valid as well
switch(mFilterBehavior)
{
- case FILTER_RESTART:
- mMustPassGeneration = mFilterGeneration;
- mMinRequiredGeneration = mFilterGeneration;
- break;
- case FILTER_LESS_RESTRICTIVE:
- mMustPassGeneration = mFilterGeneration;
- break;
- case FILTER_MORE_RESTRICTIVE:
- mMinRequiredGeneration = mFilterGeneration;
- // must have passed either current filter generation (meaningless, as it hasn't been run yet)
- // or some older generation, so keep the value
- mMustPassGeneration = llmin(mMustPassGeneration, mFilterGeneration);
- break;
- default:
- llerrs << "Bad filter behavior specified" << llendl;
+ case FILTER_RESTART:
+ mMustPassGeneration = mFilterGeneration;
+ mMinRequiredGeneration = mFilterGeneration;
+ break;
+ case FILTER_LESS_RESTRICTIVE:
+ mMustPassGeneration = mFilterGeneration;
+ break;
+ case FILTER_MORE_RESTRICTIVE:
+ mMinRequiredGeneration = mFilterGeneration;
+ // must have passed either current filter generation (meaningless, as it hasn't been run yet)
+ // or some older generation, so keep the value
+ mMustPassGeneration = llmin(mMustPassGeneration, mFilterGeneration);
+ break;
+ default:
+ llerrs << "Bad filter behavior specified" << llendl;
}
}
else
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 5d8a8805b5..0a8108899a 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -59,7 +59,8 @@
BOOL LLInventoryModel::sBackgroundFetchActive = FALSE;
BOOL LLInventoryModel::sAllFoldersFetched = FALSE;
-BOOL LLInventoryModel::sFullFetchStarted = FALSE;
+BOOL LLInventoryModel::sMyInventoryFetchStarted = FALSE;
+BOOL LLInventoryModel::sLibraryFetchStarted = FALSE;
S32 LLInventoryModel::sNumFetchRetries = 0;
F32 LLInventoryModel::sMinTimeBetweenFetches = 0.3f;
F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f;
@@ -1342,11 +1343,11 @@ bool LLInventoryModel::isBulkFetchProcessingComplete()
&& sBulkFetchCount<=0) ? TRUE : FALSE ) ;
}
-class fetchDescendentsResponder: public LLHTTPClient::Responder
+class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder
{
public:
- fetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
- //fetchDescendentsResponder() {};
+ LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
+ //LLInventoryModelFetchDescendentsResponder() {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
public:
@@ -1356,7 +1357,7 @@ class fetchDescendentsResponder: public LLHTTPClient::Responder
};
//If we get back a normal response, handle it here
-void fetchDescendentsResponder::result(const LLSD& content)
+void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
{
if (content.has("folders"))
{
@@ -1423,7 +1424,8 @@ void fetchDescendentsResponder::result(const LLSD& content)
LLSD category = *category_it;
tcategory->fromLLSD(category);
- if (LLInventoryModel::sFullFetchStarted)
+ if (LLInventoryModel::sMyInventoryFetchStarted ||
+ LLInventoryModel::sLibraryFetchStarted)
{
sFetchQueue.push_back(tcategory->getUUID());
}
@@ -1475,20 +1477,16 @@ void fetchDescendentsResponder::result(const LLSD& content)
if (LLInventoryModel::isBulkFetchProcessingComplete())
{
llinfos << "Inventory fetch completed" << llendl;
- if (LLInventoryModel::sFullFetchStarted)
- {
- LLInventoryModel::sAllFoldersFetched = TRUE;
- }
- LLInventoryModel::stopBackgroundFetch();
+ LLInventoryModel::setAllFoldersFetched();
}
gInventory.notifyObservers("fetchDescendents");
}
//If we get back an error (not found, etc...), handle it here
-void fetchDescendentsResponder::error(U32 status, const std::string& reason)
+void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason)
{
- llinfos << "fetchDescendentsResponder::error "
+ llinfos << "LLInventoryModelFetchDescendentsResponder::error "
<< status << ": " << reason << llendl;
LLInventoryModel::incrBulkFetch(-1);
@@ -1508,11 +1506,7 @@ void fetchDescendentsResponder::error(U32 status, const std::string& reason)
{
if (LLInventoryModel::isBulkFetchProcessingComplete())
{
- if (LLInventoryModel::sFullFetchStarted)
- {
- LLInventoryModel::sAllFoldersFetched = TRUE;
- }
- LLInventoryModel::stopBackgroundFetch();
+ LLInventoryModel::setAllFoldersFetched();
}
}
gInventory.notifyObservers("fetchDescendents");
@@ -1580,7 +1574,8 @@ void LLInventoryModel::bulkFetch(std::string url)
body["folders"].append(folder_sd);
folder_count++;
}
- if (sFullFetchStarted)
+ if (sMyInventoryFetchStarted ||
+ sLibraryFetchStarted)
{ //Already have this folder but append child folders to list.
// add all children to queue
parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID());
@@ -1605,22 +1600,18 @@ void LLInventoryModel::bulkFetch(std::string url)
sBulkFetchCount++;
if (body["folders"].size())
{
- LLHTTPClient::post(url, body, new fetchDescendentsResponder(body),300.0);
+ LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0);
}
if (body_lib["folders"].size())
{
std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents");
- LLHTTPClient::post(url_lib, body_lib, new fetchDescendentsResponder(body_lib),300.0);
+ LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0);
}
sFetchTimer.reset();
}
else if (isBulkFetchProcessingComplete())
{
- if (sFullFetchStarted)
- {
- sAllFoldersFetched = TRUE;
- }
- stopBackgroundFetch();
+ setAllFoldersFetched();
}
}
@@ -1636,7 +1627,6 @@ BOOL LLInventoryModel::backgroundFetchActive()
return sBackgroundFetchActive;
}
-//static
void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id)
{
if (!sAllFoldersFetched)
@@ -1644,9 +1634,16 @@ void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id)
sBackgroundFetchActive = TRUE;
if (cat_id.isNull())
{
- if (!sFullFetchStarted)
+ if (!sMyInventoryFetchStarted)
{
- sFullFetchStarted = TRUE;
+ sMyInventoryFetchStarted = TRUE;
+ sFetchQueue.push_back(gInventory.getLibraryRootFolderID());
+ sFetchQueue.push_back(gInventory.getRootFolderID());
+ gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
+ }
+ if (!sLibraryFetchStarted)
+ {
+ sLibraryFetchStarted = TRUE;
sFetchQueue.push_back(gInventory.getLibraryRootFolderID());
sFetchQueue.push_back(gInventory.getRootFolderID());
gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
@@ -1660,6 +1657,14 @@ void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id)
sFetchQueue.push_front(cat_id);
gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL);
}
+ if (cat_id == gInventory.getLibraryRootFolderID())
+ {
+ sLibraryFetchStarted = TRUE;
+ }
+ if (cat_id == gInventory.getRootFolderID())
+ {
+ sMyInventoryFetchStarted = TRUE;
+ }
}
}
}
@@ -1681,10 +1686,20 @@ void LLInventoryModel::stopBackgroundFetch()
gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);
sBulkFetchCount=0;
sMinTimeBetweenFetches=0.0f;
-// sFullFetchStarted=FALSE;
}
}
+// static
+void LLInventoryModel::setAllFoldersFetched()
+{
+ if (sMyInventoryFetchStarted &&
+ sLibraryFetchStarted)
+ {
+ sAllFoldersFetched = TRUE;
+ }
+ stopBackgroundFetch();
+}
+
//static
void LLInventoryModel::backgroundFetch(void*)
{
@@ -1703,11 +1718,8 @@ void LLInventoryModel::backgroundFetch(void*)
if (sFetchQueue.empty())
{
llinfos << "Inventory fetch completed" << llendl;
- if (sFullFetchStarted)
- {
- sAllFoldersFetched = TRUE;
- }
- stopBackgroundFetch();
+
+ setAllFoldersFetched();
return;
}
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index b744d821c7..27bbca493d 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -72,6 +72,8 @@ class LLInventoryCollectFunctor;
class LLInventoryModel
{
public:
+ friend class LLInventoryModelFetchDescendentsResponder;
+
enum EHasChildren
{
CHILDREN_NO,
@@ -282,9 +284,6 @@ public:
// Make sure we have the descendents in the structure. Returns true
// if a fetch was performed.
bool fetchDescendentsOf(const LLUUID& folder_id);
-
- // Add categories to a list to be fetched in bulk.
- static void bulkFetch(std::string url);
// call this method to request the inventory.
//void requestFromServer(const LLUUID& agent_id);
@@ -369,15 +368,7 @@ public:
// Utility Functions
void removeItem(const LLUUID& item_id);
- // start and stop background breadth-first fetching of inventory contents
- // this gets triggered when performing a filter-search
- static void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); // start fetch process
static void findLostItems();
- static BOOL backgroundFetchActive();
- static bool isEverythingFetched();
- static void backgroundFetch(void*); // background fetch idle function
- static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; }
-
// Data about the agent's root folder and root library folder
// are stored here, rather than in LLAgent where it used to be, because
@@ -477,14 +468,11 @@ private:
LLUUID mLibraryRootFolderID;
LLUUID mLibraryOwnerID;
- // completing the fetch once per session should be sufficient
- static BOOL sBackgroundFetchActive;
static BOOL sTimelyFetchPending;
static S32 sNumFetchRetries;
static LLFrameTimer sFetchTimer;
static F32 sMinTimeBetweenFetches;
static F32 sMaxTimeBetweenFetches;
- static S16 sBulkFetchCount;
// Expected inventory cache version
const static S32 sCurrentInvCacheVersion;
@@ -510,11 +498,33 @@ private:
public:
// *NOTE: DEBUG functionality
void dumpInventory() const;
- static bool isBulkFetchProcessingComplete();
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Bulk / Background Fetch
+
+public:
+ // Start and stop background breadth-first fetching of inventory contents.
+ // This gets triggered when performing a filter-search
+ void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null);
+ static BOOL backgroundFetchActive();
+ static bool isEverythingFetched();
+ static void backgroundFetch(void*); // background fetch idle function
+ static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; }
static void stopBackgroundFetch(); // stop fetch process
+ static bool isBulkFetchProcessingComplete();
+
+ // Add categories to a list to be fetched in bulk.
+ static void bulkFetch(std::string url);
- static BOOL sFullFetchStarted;
+private:
+ static BOOL sMyInventoryFetchStarted;
+ static BOOL sLibraryFetchStarted;
static BOOL sAllFoldersFetched;
+ static void setAllFoldersFetched();
+
+ // completing the fetch once per session should be sufficient
+ static BOOL sBackgroundFetchActive;
+ static S16 sBulkFetchCount;
};
// a special inventory model for the agent
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
index 08d56f8b9f..f25d2ef574 100644
--- a/indra/newview/lllandmarkactions.cpp
+++ b/indra/newview/lllandmarkactions.cpp
@@ -38,6 +38,7 @@
#include "llinventory.h"
#include "lllandmark.h"
#include "llparcel.h"
+#include "llregionhandle.h"
#include "llnotificationsutil.h"
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 33fd3e3bf1..fc9654e9ad 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -39,6 +39,8 @@
#include "lltrans.h"
#include "llviewercontrol.h"
+#include "llinstantmessage.h"
+
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/regex.hpp>
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 765b504afe..5f30ab4e01 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -101,6 +101,16 @@ const U32 ARROW_TO_AXIS[4] =
VZ
};
+// Sort manipulator handles by their screen-space projection
+struct ClosestToCamera
+{
+ bool operator()(const LLManipTranslate::ManipulatorHandle& a,
+ const LLManipTranslate::ManipulatorHandle& b) const
+ {
+ return a.mEndPosition.mV[VZ] < b.mEndPosition.mV[VZ];
+ }
+};
+
LLManipTranslate::LLManipTranslate( LLToolComposite* composite )
: LLManip( std::string("Move"), composite ),
mLastHoverMouseX(-1),
@@ -273,7 +283,6 @@ void LLManipTranslate::restoreGL()
LLManipTranslate::~LLManipTranslate()
{
- for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());
}
@@ -888,8 +897,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
planar_manip_xy_visible = TRUE;
}
- for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());
- mProjectedManipulators.clear();
+ // Project up to 9 manipulators to screen space 2*X, 2*Y, 2*Z, 3*planes
+ std::vector<ManipulatorHandle> projected_manipulators;
+ projected_manipulators.reserve(9);
for (S32 i = 0; i < num_arrow_manips; i+= 2)
{
@@ -899,12 +909,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
projected_end = projected_end * (1.f / projected_end.mV[VW]);
- ManipulatorHandle* projManipulator =
- new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
+ ManipulatorHandle projected_manip(
+ LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),
MANIPULATOR_IDS[i / 2],
10.f); // 10 pixel hotspot for arrows
- mProjectedManipulators.insert(projManipulator);
+ projected_manipulators.push_back(projected_manip);
}
if (planar_manip_yz_visible)
@@ -916,12 +926,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
projected_end = projected_end * (1.f / projected_end.mV[VW]);
- ManipulatorHandle* projManipulator =
- new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
+ ManipulatorHandle projected_manip(
+ LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),
MANIPULATOR_IDS[i / 2],
20.f); // 20 pixels for planar manipulators
- mProjectedManipulators.insert(projManipulator);
+ projected_manipulators.push_back(projected_manip);
}
if (planar_manip_xz_visible)
@@ -933,12 +943,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
projected_end = projected_end * (1.f / projected_end.mV[VW]);
- ManipulatorHandle* projManipulator =
- new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
+ ManipulatorHandle projected_manip(
+ LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),
MANIPULATOR_IDS[i / 2],
20.f); // 20 pixels for planar manipulators
- mProjectedManipulators.insert(projManipulator);
+ projected_manipulators.push_back(projected_manip);
}
if (planar_manip_xy_visible)
@@ -950,12 +960,12 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLVector4 projected_end = mManipulatorVertices[i + 1] * transform;
projected_end = projected_end * (1.f / projected_end.mV[VW]);
- ManipulatorHandle* projManipulator =
- new ManipulatorHandle(LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
+ ManipulatorHandle projected_manip(
+ LLVector3(projected_start.mV[VX], projected_start.mV[VY], projected_start.mV[VZ]),
LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),
MANIPULATOR_IDS[i / 2],
20.f); // 20 pixels for planar manipulators
- mProjectedManipulators.insert(projManipulator);
+ projected_manipulators.push_back(projected_manip);
}
LLVector2 manip_start_2d;
@@ -967,13 +977,18 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
LLVector2 mousePos((F32)x - half_width, (F32)y - half_height);
LLVector2 mouse_delta;
- for (minpulator_list_t::iterator iter = mProjectedManipulators.begin();
- iter != mProjectedManipulators.end(); ++iter)
+ // Keep order consistent with insertion via stable_sort
+ std::stable_sort( projected_manipulators.begin(),
+ projected_manipulators.end(),
+ ClosestToCamera() );
+
+ std::vector<ManipulatorHandle>::iterator it = projected_manipulators.begin();
+ for ( ; it != projected_manipulators.end(); ++it)
{
- ManipulatorHandle* manipulator = *iter;
+ ManipulatorHandle& manipulator = *it;
{
- manip_start_2d.setVec(manipulator->mStartPosition.mV[VX] * half_width, manipulator->mStartPosition.mV[VY] * half_height);
- manip_end_2d.setVec(manipulator->mEndPosition.mV[VX] * half_width, manipulator->mEndPosition.mV[VY] * half_height);
+ manip_start_2d.setVec(manipulator.mStartPosition.mV[VX] * half_width, manipulator.mStartPosition.mV[VY] * half_height);
+ manip_end_2d.setVec(manipulator.mEndPosition.mV[VX] * half_width, manipulator.mEndPosition.mV[VY] * half_height);
manip_dir = manip_end_2d - manip_start_2d;
mouse_delta = mousePos - manip_start_2d;
@@ -985,9 +1000,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)
if (mouse_pos_manip > 0.f &&
mouse_pos_manip < manip_length &&
- mouse_dist_manip_squared < manipulator->mHotSpotRadius * manipulator->mHotSpotRadius)
+ mouse_dist_manip_squared < manipulator.mHotSpotRadius * manipulator.mHotSpotRadius)
{
- mHighlightedPart = manipulator->mManipID;
+ mHighlightedPart = manipulator.mManipID;
break;
}
}
diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h
index 25ff35cc72..d20b86b2f4 100644
--- a/indra/newview/llmaniptranslate.h
+++ b/indra/newview/llmaniptranslate.h
@@ -89,17 +89,6 @@ protected:
F32 getMinGridScale();
private:
- struct compare_manipulators
- {
- bool operator() (const ManipulatorHandle* const a, const ManipulatorHandle* const b) const
- {
- if (a->mEndPosition.mV[VZ] != b->mEndPosition.mV[VZ])
- return (a->mEndPosition.mV[VZ] < b->mEndPosition.mV[VZ]);
- else
- return a->mManipID < b->mManipID;
- }
- };
-
S32 mLastHoverMouseX;
S32 mLastHoverMouseY;
BOOL mSendUpdateOnMouseUp;
@@ -116,8 +105,6 @@ private:
LLVector3d mDragCursorStartGlobal;
LLVector3d mDragSelectionStartGlobal;
LLTimer mUpdateTimer;
- typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t;
- minpulator_list_t mProjectedManipulators;
LLVector4 mManipulatorVertices[18];
F32 mSnapOffsetMeters;
LLVector3 mSnapOffsetAxis;
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
index 2694075a58..91064eea6b 100755
--- a/indra/newview/llmediadataclient.cpp
+++ b/indra/newview/llmediadataclient.cpp
@@ -402,7 +402,7 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue
LLMediaDataClient::request_queue_t::const_iterator end = q.end();
while (iter != end)
{
- s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString();
+ s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
iter++;
i++;
}
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 08bc1fac8b..cdab3b2310 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -34,10 +34,12 @@
#include "llnavigationbar.h"
-#include <llfloaterreg.h>
-#include <llfocusmgr.h>
-#include <lliconctrl.h>
-#include <llmenugl.h>
+#include "llregionhandle.h"
+
+#include "llfloaterreg.h"
+#include "llfocusmgr.h"
+#include "lliconctrl.h"
+#include "llmenugl.h"
#include "llagent.h"
#include "llviewerregion.h"
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 8fb4ea4211..8dbaa5ac53 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -32,6 +32,8 @@
#include "llviewerprecompiledheaders.h"
+#include "message.h"
+
#include "llfloaterreg.h"
#include "lltrans.h"
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 83a8dcd9f0..515c86bae8 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -39,6 +39,7 @@
//#include "llnotificationsutil.h"
#include "llchannelmanager.h"
#include "llchat.h"
+#include "llinstantmessage.h"
#include "llnotificationptr.h"
namespace LLNotificationsUI
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 32c9faa688..35cd3edc81 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -37,6 +37,7 @@
#include "llfloaterreg.h"
#include "llsdutil.h"
#include "llsdutil_math.h"
+#include "llregionhandle.h"
#include "llaccordionctrl.h"
#include "llaccordionctrltab.h"
@@ -367,6 +368,7 @@ void LLLandmarksPanel::initFavoritesInventoryPanel()
initLandmarksPanel(mFavoritesInventoryPanel);
mFavoritesInventoryPanel->getFilter()->setEmptyLookupMessage("FavoritesNoMatchingItems");
+
initAccordion("tab_favorites", mFavoritesInventoryPanel);
}
@@ -428,6 +430,7 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis
}
root_folder->setParentLandmarksPanel(this);
+ inventory_list->saveFolderState();
}
void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
@@ -1030,21 +1033,30 @@ void LLLandmarksPanel::doCreatePick(LLLandmark* landmark)
//////////////////////////////////////////////////////////////////////////
static void filter_list(LLInventorySubTreePanel* inventory_list, const std::string& string)
{
- // Open the immediate children of the root folder, since those
- // are invisible in the UI and thus must always be open.
- inventory_list->getRootFolder()->openTopLevelFolders();
-
+ // When search is cleared, restore the old folder state.
if (string == "")
{
inventory_list->setFilterSubString(LLStringUtil::null);
+ // Re-open folders that were open before
+ inventory_list->restoreFolderState();
}
+ // Open the immediate children of the root folder, since those
+ // are invisible in the UI and thus must always be open.
+ inventory_list->getRootFolder()->openTopLevelFolders();
+
if (inventory_list->getFilterSubString().empty() && string.empty())
{
// current filter and new filter empty, do nothing
return;
}
+ // save current folder open state if no filter currently applied
+ if (inventory_list->getRootFolder()->getFilterSubString().empty())
+ {
+ inventory_list->saveFolderState();
+ }
+
// Set new filter string
inventory_list->setFilterSubString(string);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index cef21e85d6..c0da8f3daa 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -530,11 +530,23 @@ BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
return handled;
}
-void LLPanelMainInventory::changed(U32 mask)
+// virtual
+void LLPanelMainInventory::changed(U32)
{
+ // empty, but must have this defined for abstract base class.
}
+// virtual
+void LLPanelMainInventory::draw()
+{
+ if (mActivePanel && mFilterEditor)
+ {
+ mFilterEditor->setText(mActivePanel->getFilterSubString());
+ }
+ LLPanel::draw();
+}
+
void LLPanelMainInventory::setFilterTextFromFilter()
{
mFilterText = mActivePanel->getFilter()->getFilterText();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 92443df369..920de2665c 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -72,7 +72,8 @@ public:
void* cargo_data,
EAcceptance* accept,
std::string& tooltip_msg);
- /*virtual*/ void changed(U32 mask);
+ /*virtual*/ void changed(U32);
+ /*virtual*/ void draw();
LLInventoryPanel* getPanel() { return mActivePanel; }
LLInventoryPanel* getActivePanel() { return mActivePanel; }
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 88eba14553..f574f55beb 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -67,7 +67,6 @@ const char *CHECKERBOARD_DATA_URL = "data:image/svg+xml,%3Csvg xmlns=%22http://w
////////////////////////////////////////////////////////////////////////////////
//
LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() :
- mControls( NULL ),
mAutoLoop( NULL ),
mFirstClick( NULL ),
mAutoZoom( NULL ),
@@ -93,7 +92,6 @@ BOOL LLPanelMediaSettingsGeneral::postBuild()
mAutoPlay = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_PLAY_KEY );
mAutoScale = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_SCALE_KEY );
mAutoZoom = getChild< LLCheckBoxCtrl >( LLMediaEntry::AUTO_ZOOM_KEY );
- mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
mCurrentURL = getChild< LLTextBox >( LLMediaEntry::CURRENT_URL_KEY );
mFirstClick = getChild< LLCheckBoxCtrl >( LLMediaEntry::FIRST_CLICK_INTERACT_KEY );
mHeightPixels = getChild< LLSpinCtrl >( LLMediaEntry::HEIGHT_PIXELS_KEY );
@@ -211,7 +209,6 @@ void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
self->mAutoPlay->clear();
self->mAutoScale->clear();
self->mAutoZoom ->clear();
- self->mControls->clear();
self->mCurrentURL->clear();
self->mFirstClick->clear();
self->mHeightPixels->clear();
@@ -221,7 +218,6 @@ void LLPanelMediaSettingsGeneral::clearValues( void* userdata, bool editable)
self->mAutoPlay ->setEnabled(editable);
self->mAutoScale ->setEnabled(editable);
self->mAutoZoom ->setEnabled(editable);
- self->mControls ->setEnabled(editable);
self->mCurrentURL ->setEnabled(editable);
self->mFirstClick ->setEnabled(editable);
self->mHeightPixels ->setEnabled(editable);
@@ -283,7 +279,6 @@ void LLPanelMediaSettingsGeneral::initValues( void* userdata, const LLSD& media_
{ LLMediaEntry::AUTO_PLAY_KEY, self->mAutoPlay, "LLCheckBoxCtrl" },
{ LLMediaEntry::AUTO_SCALE_KEY, self->mAutoScale, "LLCheckBoxCtrl" },
{ LLMediaEntry::AUTO_ZOOM_KEY, self->mAutoZoom, "LLCheckBoxCtrl" },
- { LLMediaEntry::CONTROLS_KEY, self->mControls, "LLComboBox" },
{ LLMediaEntry::CURRENT_URL_KEY, self->mCurrentURL, "LLTextBox" },
{ LLMediaEntry::HEIGHT_PIXELS_KEY, self->mHeightPixels, "LLSpinCtrl" },
{ LLMediaEntry::HOME_URL_KEY, self->mHomeURL, "LLLineEditor" },
@@ -416,7 +411,6 @@ void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )
fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = (LLSD::Boolean)mAutoPlay->getValue();
fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = (LLSD::Boolean)mAutoScale->getValue();
fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = (LLSD::Boolean)mAutoZoom->getValue();
- fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex();
//Don't fill in current URL: this is only supposed to get changed via navigate
// fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue();
fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = (LLSD::Integer)mHeightPixels->getValue();
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
index c6895b1dc9..5f90321362 100644
--- a/indra/newview/llpanelmediasettingsgeneral.h
+++ b/indra/newview/llpanelmediasettingsgeneral.h
@@ -37,7 +37,6 @@
class LLButton;
class LLCheckBoxCtrl;
-class LLComboBox;
class LLLineEditor;
class LLSpinCtrl;
class LLTextureCtrl;
@@ -90,7 +89,6 @@ private:
void checkHomeUrlPassesWhitelist();
- LLComboBox* mControls;
LLCheckBoxCtrl* mAutoLoop;
LLCheckBoxCtrl* mFirstClick;
LLCheckBoxCtrl* mAutoZoom;
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
index 2f3f550e35..a23aed2e98 100644
--- a/indra/newview/llpanelmediasettingspermissions.cpp
+++ b/indra/newview/llpanelmediasettingspermissions.cpp
@@ -51,9 +51,11 @@
#include "llnamebox.h"
#include "lltrans.h"
#include "llfloatermediasettings.h"
+
////////////////////////////////////////////////////////////////////////////////
//
LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
+ mControls( NULL ),
mPermsOwnerInteract( 0 ),
mPermsOwnerControl( 0 ),
mPermsGroupName( 0 ),
@@ -71,6 +73,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() :
BOOL LLPanelMediaSettingsPermissions::postBuild()
{
// connect member vars with UI widgets
+ mControls = getChild< LLComboBox >( LLMediaEntry::CONTROLS_KEY );
mPermsOwnerInteract = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_OWNER_INTERACT_KEY );
mPermsOwnerControl = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_OWNER_CONTROL_KEY );
mPermsGroupInteract = getChild< LLCheckBoxCtrl >( LLPanelContents::PERMS_GROUP_INTERACT_KEY );
@@ -123,19 +126,22 @@ void LLPanelMediaSettingsPermissions::draw()
void LLPanelMediaSettingsPermissions::clearValues( void* userdata, bool editable)
{
LLPanelMediaSettingsPermissions *self =(LLPanelMediaSettingsPermissions *)userdata;
+
+ self->mControls->clear();
self->mPermsOwnerInteract->clear();
self->mPermsOwnerControl->clear();
- self->mPermsGroupInteract ->clear();
+ self->mPermsGroupInteract->clear();
self->mPermsGroupControl->clear();
- self->mPermsWorldInteract ->clear();
- self->mPermsWorldControl ->clear();
+ self->mPermsWorldInteract->clear();
+ self->mPermsWorldControl->clear();
+ self->mControls->setEnabled(editable);
self->mPermsOwnerInteract->setEnabled(editable);
- self->mPermsOwnerControl ->setEnabled(editable);
+ self->mPermsOwnerControl->setEnabled(editable);
self->mPermsGroupInteract->setEnabled(editable);
- self->mPermsGroupControl ->setEnabled(editable);
+ self->mPermsGroupControl->setEnabled(editable);
self->mPermsWorldInteract->setEnabled(editable);
- self->mPermsWorldControl ->setEnabled(editable);
+ self->mPermsWorldControl->setEnabled(editable);
}
////////////////////////////////////////////////////////////////////////////////
@@ -175,6 +181,7 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me
} data_set [] =
{
+ { LLMediaEntry::CONTROLS_KEY, self->mControls, "LLComboBox" },
{ LLPanelContents::PERMS_OWNER_INTERACT_KEY, self->mPermsOwnerInteract, "LLCheckBoxCtrl" },
{ LLPanelContents::PERMS_OWNER_CONTROL_KEY, self->mPermsOwnerControl, "LLCheckBoxCtrl" },
{ LLPanelContents::PERMS_GROUP_INTERACT_KEY, self->mPermsGroupInteract, "LLCheckBoxCtrl" },
@@ -194,27 +201,27 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me
{
if ( data_set[ i ].ctrl_type == "LLCheckBoxCtrl" )
{
- // the sense of the checkboxes changed and it made sense
- // to just reverse their sense back again here and avoid
- // changing server code.
+ // Most recent change to the "sense" of these checkboxes
+ // means the value in the checkbox matches that on the server
static_cast< LLCheckBoxCtrl* >( data_set[ i ].ctrl_ptr )->
- setValue( ! media_settings[ base_key ].asBoolean() );
+ setValue( media_settings[ base_key ].asBoolean() );
}
else
if ( data_set[ i ].ctrl_type == "LLComboBox" )
static_cast< LLComboBox* >( data_set[ i ].ctrl_ptr )->
setCurrentByIndex( media_settings[ base_key ].asInteger() );
+
data_set[ i ].ctrl_ptr->setEnabled(editable);
data_set[ i ].ctrl_ptr->setTentative( media_settings[ tentative_key ].asBoolean() );
};
};
+
self->childSetEnabled("media_perms_label_owner", editable );
self->childSetText("media_perms_label_owner", LLTrans::getString("Media Perms Owner") );
self->childSetEnabled("media_perms_label_group", editable );
self->childSetText("media_perms_label_group", LLTrans::getString("Media Perms Group") );
self->childSetEnabled("media_perms_label_anyone", editable );
self->childSetText("media_perms_label_anyone", LLTrans::getString("Media Perms Anyone") );
-
}
////////////////////////////////////////////////////////////////////////////////
@@ -228,6 +235,9 @@ void LLPanelMediaSettingsPermissions::preApply()
//
void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in )
{
+ // moved over from the 'General settings' tab
+ fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex();
+
// *NOTE: For some reason, gcc does not like these symbol references in the
// expressions below (inside the static_casts). I have NO idea why :(.
// For some reason, assigning them to const temp vars here fixes the link
@@ -237,13 +247,13 @@ void LLPanelMediaSettingsPermissions::getValues( LLSD &fill_me_in )
const U8 group = LLMediaEntry::PERM_GROUP;
const U8 anyone = LLMediaEntry::PERM_ANYONE;
const LLSD::Integer control = static_cast<LLSD::Integer>(
- (mPermsOwnerControl->getValue() ? none : owner ) |
- (mPermsGroupControl->getValue() ? none : group ) |
- (mPermsWorldControl->getValue() ? none : anyone ));
+ (mPermsOwnerControl->getValue() ? owner : none ) |
+ (mPermsGroupControl->getValue() ? group: none ) |
+ (mPermsWorldControl->getValue() ? anyone : none ));
const LLSD::Integer interact = static_cast<LLSD::Integer>(
- (mPermsOwnerInteract->getValue() ? none : owner ) |
- (mPermsGroupInteract->getValue() ? none : group ) |
- (mPermsWorldInteract->getValue() ? none : anyone ));
+ (mPermsOwnerInteract->getValue() ? owner: none ) |
+ (mPermsGroupInteract->getValue() ? group : none ) |
+ (mPermsWorldInteract->getValue() ? anyone : none ));
fill_me_in[LLMediaEntry::PERMS_CONTROL_KEY] = control;
fill_me_in[LLMediaEntry::PERMS_INTERACT_KEY] = interact;
}
@@ -255,3 +265,5 @@ void LLPanelMediaSettingsPermissions::postApply()
{
// no-op
}
+
+
diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h
index 45a596c615..bd0c3b8ab5 100644
--- a/indra/newview/llpanelmediasettingspermissions.h
+++ b/indra/newview/llpanelmediasettingspermissions.h
@@ -65,6 +65,7 @@ public:
static void clearValues( void* userdata, bool editable);
private:
+ LLComboBox* mControls;
LLCheckBoxCtrl* mPermsOwnerInteract;
LLCheckBoxCtrl* mPermsOwnerControl;
LLNameBox* mPermsGroupName;
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 7d21867efc..498782fb44 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -38,6 +38,7 @@
#include "llagentpicksinfo.h"
#include "llavatarconstants.h"
#include "llcommandhandler.h"
+#include "lldispatcher.h"
#include "llflatlistview.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp
index 71d763b562..6985b73200 100644
--- a/indra/newview/llpanelplace.cpp
+++ b/indra/newview/llpanelplace.cpp
@@ -40,6 +40,7 @@
#include "llsecondlifeurls.h"
#include "llfloater.h"
#include "llfloaterreg.h"
+#include "llregionhandle.h"
#include "llagent.h"
#include "llviewerwindow.h"
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 6ba3790fe2..b845f38ace 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -39,6 +39,8 @@
#include "llsecondlifeurls.h"
#include "llsdutil_math.h"
+#include "llregionhandle.h"
+#include "message.h"
#include "lliconctrl.h"
#include "lltextbox.h"
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 0c7cc9af38..402d50ba9c 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -35,6 +35,7 @@
#include "llpanelplaceprofile.h"
#include "llparcel.h"
+#include "message.h"
#include "lliconctrl.h"
#include "lllineeditor.h"
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index e21eb01da3..685104a8b1 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -54,6 +54,7 @@
#include "llavatarpropertiesprocessor.h"
#include "llfloaterworldmap.h"
#include "llinventorybridge.h"
+#include "llinventoryobserver.h"
#include "llinventorymodel.h"
#include "lllandmarkactions.h"
#include "lllandmarklist.h"
@@ -62,6 +63,7 @@
#include "llpanelpick.h"
#include "llpanelplaceprofile.h"
#include "llpanelteleporthistory.h"
+#include "llremoteparcelrequest.h"
#include "llteleporthistorystorage.h"
#include "lltoggleablemenu.h"
#include "llviewerinventory.h"
@@ -85,8 +87,10 @@ static void onSLURLBuilt(std::string& slurl);
class LLPlacesParcelObserver : public LLParcelObserver
{
public:
- LLPlacesParcelObserver(LLPanelPlaces* places_panel)
- : mPlaces(places_panel) {}
+ LLPlacesParcelObserver(LLPanelPlaces* places_panel) :
+ LLParcelObserver(),
+ mPlaces(places_panel)
+ {}
/*virtual*/ void changed()
{
@@ -101,8 +105,10 @@ private:
class LLPlacesInventoryObserver : public LLInventoryObserver
{
public:
- LLPlacesInventoryObserver(LLPanelPlaces* places_panel)
- : mPlaces(places_panel) {}
+ LLPlacesInventoryObserver(LLPanelPlaces* places_panel) :
+ LLInventoryObserver(),
+ mPlaces(places_panel)
+ {}
/*virtual*/ void changed(U32 mask)
{
@@ -114,6 +120,59 @@ private:
LLPanelPlaces* mPlaces;
};
+class LLPlacesRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
+{
+public:
+ LLPlacesRemoteParcelInfoObserver(LLPanelPlaces* places_panel) :
+ LLRemoteParcelInfoObserver(),
+ mPlaces(places_panel)
+ {}
+
+ ~LLPlacesRemoteParcelInfoObserver()
+ {
+ // remove any in-flight observers
+ std::set<LLUUID>::iterator it;
+ for (it = mParcelIDs.begin(); it != mParcelIDs.end(); ++it)
+ {
+ const LLUUID &id = *it;
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(id, this);
+ }
+ mParcelIDs.clear();
+ }
+
+ /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data)
+ {
+ if (mPlaces)
+ {
+ mPlaces->changedGlobalPos(LLVector3d(parcel_data.global_x,
+ parcel_data.global_y,
+ parcel_data.global_z));
+ }
+
+ mParcelIDs.erase(parcel_data.parcel_id);
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_data.parcel_id, this);
+ }
+ /*virtual*/ void setParcelID(const LLUUID& parcel_id)
+ {
+ if (!parcel_id.isNull())
+ {
+ mParcelIDs.insert(parcel_id);
+ LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
+ LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
+ }
+ }
+ /*virtual*/ void setErrorStatus(U32 status, const std::string& reason)
+ {
+ llerrs << "Can't complete remote parcel request. Http Status: "
+ << status << ". Reason : " << reason << llendl;
+ }
+
+private:
+ std::set<LLUUID> mParcelIDs;
+ LLPanelPlaces* mPlaces;
+};
+
+
static LLRegisterPanelClassWrapper<LLPanelPlaces> t_places("panel_places");
LLPanelPlaces::LLPanelPlaces()
@@ -131,6 +190,7 @@ LLPanelPlaces::LLPanelPlaces()
{
mParcelObserver = new LLPlacesParcelObserver(this);
mInventoryObserver = new LLPlacesInventoryObserver(this);
+ mRemoteParcelObserver = new LLPlacesRemoteParcelInfoObserver(this);
gInventory.addObserver(mInventoryObserver);
@@ -149,6 +209,7 @@ LLPanelPlaces::~LLPanelPlaces()
delete mInventoryObserver;
delete mParcelObserver;
+ delete mRemoteParcelObserver;
}
BOOL LLPanelPlaces::postBuild()
@@ -239,7 +300,6 @@ void LLPanelPlaces::onOpen(const LLSD& key)
mItem = NULL;
isLandmarkEditModeOn = false;
togglePlaceInfoPanel(TRUE);
- updateVerbs();
if (mPlaceInfoType == AGENT_INFO_TYPE)
{
@@ -282,6 +342,10 @@ void LLPanelPlaces::onOpen(const LLSD& key)
{
LLUUID parcel_id = key["id"].asUUID();
mPlaceProfile->setParcelID(parcel_id);
+
+ // query the server to get the global 3D position of this
+ // parcel - we need this for teleport/mapping functions.
+ mRemoteParcelObserver->setParcelID(parcel_id);
}
else
{
@@ -306,6 +370,8 @@ void LLPanelPlaces::onOpen(const LLSD& key)
mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal);
}
+ updateVerbs();
+
LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance();
if (!parcel_mgr)
return;
@@ -837,6 +903,12 @@ void LLPanelPlaces::changedInventory(U32 mask)
gInventory.removeObserver(mInventoryObserver);
}
+void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
+{
+ mPosGlobal = global_pos;
+ updateVerbs();
+}
+
void LLPanelPlaces::updateVerbs()
{
bool is_place_info_visible;
@@ -853,6 +925,7 @@ void LLPanelPlaces::updateVerbs()
bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE;
bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE;
+ bool have_3d_pos = ! mPosGlobal.isExactlyZero();
mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn);
@@ -862,7 +935,7 @@ void LLPanelPlaces::updateVerbs()
mCancelBtn->setVisible(isLandmarkEditModeOn);
mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn);
- mShowOnMapBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn);
+ mShowOnMapBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn && have_3d_pos);
mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible);
if (is_place_info_visible)
@@ -871,12 +944,12 @@ void LLPanelPlaces::updateVerbs()
{
// We don't need to teleport to the current location
// so check if the location is not within the current parcel.
- mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() &&
+ mTeleportBtn->setEnabled(have_3d_pos &&
!LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal));
}
else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE)
{
- mTeleportBtn->setEnabled(TRUE);
+ mTeleportBtn->setEnabled(have_3d_pos);
}
}
else
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 5f9aed6357..5ee8704992 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -47,6 +47,7 @@ class LLPanelPlacesTab;
class LLParcelSelection;
class LLPlacesInventoryObserver;
class LLPlacesParcelObserver;
+class LLRemoteParcelInfoObserver;
class LLTabContainer;
class LLToggleableMenu;
@@ -65,6 +66,8 @@ public:
void changedParcelSelection();
// Called on agent inventory change to find out when inventory gets usable.
void changedInventory(U32 mask);
+ // Called when we receive the global 3D position of a parcel.
+ void changedGlobalPos(const LLVector3d &global_pos);
void setItem(LLInventoryItem* item);
@@ -112,6 +115,7 @@ private:
LLPlacesInventoryObserver* mInventoryObserver;
LLPlacesParcelObserver* mParcelObserver;
+ LLRemoteParcelInfoObserver* mRemoteParcelObserver;
// Pointer to a landmark item or to a linked landmark
LLPointer<LLInventoryItem> mItem;
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 3fe51106e4..7b2ac38568 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -57,6 +57,7 @@
#include "llsliderctrl.h"
#include "llstring.h"
#include "llviewercontrol.h"
+#include "llviewerdisplay.h"
#include "llviewerparcelmgr.h"
#include "llviewermedia.h"
#include "llviewermediafocus.h"
@@ -66,8 +67,11 @@
#include "llfloatertools.h" // to enable hide if build tools are up
+// Functions pulled from pipeline.cpp
glh::matrix4f glh_get_current_modelview();
glh::matrix4f glh_get_current_projection();
+// Functions pulled from llviewerdisplay.cpp
+bool get_hud_matrices(glh::matrix4f &proj, glh::matrix4f &model);
// Warning: make sure these two match!
const LLPanelPrimMediaControls::EZoomLevel LLPanelPrimMediaControls::kZoomLevels[] = { ZOOM_NONE, ZOOM_MEDIUM };
@@ -564,9 +568,6 @@ void LLPanelPrimMediaControls::updateShape()
//
// Calculate position and shape of the controls
//
- LLVector3 min, max;
-
- glh::matrix4f mat = glh_get_current_projection()*glh_get_current_modelview();
std::vector<LLVector3>::iterator vert_it;
std::vector<LLVector3>::iterator vert_end;
std::vector<LLVector3> vect_face;
@@ -603,8 +604,18 @@ void LLPanelPrimMediaControls::updateShape()
vert_it = vect_face.begin();
vert_end = vect_face.end();
- min = LLVector3(1,1,1);
- max = LLVector3(-1,-1,-1);
+ glh::matrix4f mat;
+ if (!is_hud)
+ {
+ mat = glh_get_current_projection() * glh_get_current_modelview();
+ }
+ else {
+ glh::matrix4f proj, modelview;
+ if (get_hud_matrices(proj, modelview))
+ mat = proj * modelview;
+ }
+ LLVector3 min = LLVector3(1,1,1);
+ LLVector3 max = LLVector3(-1,-1,-1);
for(; vert_it != vert_end; ++vert_it)
{
// project silhouette vertices into screen space
@@ -633,10 +644,15 @@ void LLPanelPrimMediaControls::updateShape()
media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
// keep all parts of HUD on-screen
- media_controls_rect.intersectWith(getParent()->getLocalRect());
+ LLRect window_rect = getParent()->getLocalRect();
+ media_controls_rect.intersectWith(window_rect);
- // clamp to minimum size, keeping centered
- media_controls_rect.setCenterAndSize(media_controls_rect.getCenterX(), media_controls_rect.getCenterY(),
+ // clamp to minimum size, keeping rect inside window
+ S32 centerX = media_controls_rect.getCenterX();
+ S32 centerY = media_controls_rect.getCenterY();
+ window_rect.stretch(-mMinWidth/2, -mMinHeight/2);
+ window_rect.clampPointToRect(centerX, centerY);
+ media_controls_rect.setCenterAndSize(centerX, centerY,
llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight()));
setShape(media_controls_rect, true);
diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h
index 9d26539453..19fa1dcc37 100644
--- a/indra/newview/llpreviewgesture.h
+++ b/indra/newview/llpreviewgesture.h
@@ -33,8 +33,9 @@
#ifndef LL_LLPREVIEWGESTURE_H
#define LL_LLPREVIEWGESTURE_H
-#include "llpreview.h"
+#include "llassettype.h"
#include "llmultigesture.h"
+#include "llpreview.h"
class LLMultiGesture;
class LLLineEditor;
@@ -46,6 +47,7 @@ class LLScrollListItem;
class LLButton;
class LLGestureStep;
class LLRadioGroup;
+class LLVFS;
class LLPreviewGesture : public LLPreview
{
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index 28a409d3ee..9d194c5557 100644
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -51,6 +51,7 @@ struct LLEntryAndEdCore;
class LLMenuBarGL;
class LLFloaterScriptSearch;
class LLKeywordToken;
+class LLVFS;
class LLViewerInventoryItem;
// Inner, implementation class. LLPreviewScript and LLLiveLSLEditor each own one of these.
diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h
index 3a16e25ef6..c04f6b1858 100644
--- a/indra/newview/llremoteparcelrequest.h
+++ b/indra/newview/llremoteparcelrequest.h
@@ -38,6 +38,7 @@
#include "llhttpclient.h"
#include "llpanel.h"
+class LLMessageSystem;
class LLRemoteParcelInfoObserver;
class LLRemoteParcelRequestResponder : public LLHTTPClient::Responder
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 44930f03c5..6e99d5a5f0 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -3494,7 +3494,7 @@ void LLSelectMgr::deselectAllIfTooFar()
// HACK: Don't deselect when we're navigating to rate an object's
// owner or creator. JC
- if (gPieObject->getVisible() || gPieRate->getVisible() )
+ if (gMenuObject->getVisible())
{
return;
}
@@ -5493,11 +5493,15 @@ void dialog_refresh_all()
gFloaterTools->dirty();
- gPieObject->needsArrange();
+ gMenuObject->needsArrange();
- if( gPieAttachment->getVisible() )
+ if( gMenuAttachmentSelf->getVisible() )
{
- gPieAttachment->arrange();
+ gMenuAttachmentSelf->arrange();
+ }
+ if( gMenuAttachmentOther->getVisible() )
+ {
+ gMenuAttachmentOther->arrange();
}
LLFloaterProperties::dirtyAll();
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 449bdefb8f..25518d87d6 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -109,19 +109,30 @@ BOOL LLSidepanelItemInfo::postBuild()
{
LLSidepanelInventorySubpanel::postBuild();
- // build the UI
- // item name & description
childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidateASCIIPrintableNoPipe);
- //getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
+ getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this));
childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidateASCIIPrintableNoPipe);
- //getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
-
+ getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this));
// Creator information
getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this));
-
// owner information
getChild<LLUICtrl>("BtnOwner")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickOwner,this));
-
+ // acquired date
+ // owner permissions
+ // Permissions debug text
+ // group permissions
+ getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+ // everyone permissions
+ getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+ // next owner permissions
+ getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+ getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+ getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
+ // Mark for sale or not, and sale info
+ getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
+ getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleType, this));
+ // "Price" label for edit
+ getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
refresh();
return TRUE;
}
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 8d3dcf8a99..72ef383be9 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -31,8 +31,14 @@
*/
#include "llviewerprecompiledheaders.h"
-#include "llagent.h"
+
#include "lltexlayer.h"
+
+#include "llagent.h"
+#include "llimagej2c.h"
+#include "llimagetga.h"
+#include "llvfile.h"
+#include "llvfs.h"
#include "llviewerstats.h"
#include "llviewerregion.h"
#include "llvoavatar.h"
diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp
index 0c7e61d00e..d55468841d 100644
--- a/indra/newview/lltexlayerparams.cpp
+++ b/indra/newview/lltexlayerparams.cpp
@@ -30,11 +30,14 @@
*/
#include "llviewerprecompiledheaders.h"
+
+#include "lltexlayerparams.h"
+
#include "llagent.h"
+#include "llimagetga.h"
#include "lltexlayer.h"
#include "llvoavatarself.h"
#include "llwearable.h"
-#include "lltexlayerparams.h"
#include "llui.h"
//-----------------------------------------------------------------------------
diff --git a/indra/newview/lltexlayerparams.h b/indra/newview/lltexlayerparams.h
index 2b80dbdba4..93d01352d4 100644
--- a/indra/newview/lltexlayerparams.h
+++ b/indra/newview/lltexlayerparams.h
@@ -34,7 +34,11 @@
#include "llviewervisualparam.h"
+class LLImageRaw;
+class LLImageTGA;
class LLTexLayer;
+class LLTexLayerInterface;
+class LLViewerTexture;
class LLVOAvatar;
class LLWearable;
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index bc9c988648..4203cbbc43 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -40,6 +40,7 @@
#include "llworkerthread.h"
+class LLImageFormatted;
class LLTextureCacheWorker;
class LLTextureCache : public LLWorkerThread
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index e29c96bec4..85259fdc1e 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -43,8 +43,10 @@
#include "llhttpclient.h"
#include "llhttpstatuscodes.h"
#include "llimage.h"
+#include "llimagej2c.h"
#include "llimageworker.h"
#include "llworkerthread.h"
+#include "message.h"
#include "llagent.h"
#include "lltexturecache.h"
diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp
index e0358e1fca..1df73db9b0 100644
--- a/indra/newview/lltexturestatsuploader.cpp
+++ b/indra/newview/lltexturestatsuploader.cpp
@@ -34,6 +34,8 @@
#include "lltexturestatsuploader.h"
+#include "llhttpclient.h"
+
LLTextureStatsUploader::LLTextureStatsUploader()
{
}
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index ed9e2e8818..b7add03e0e 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -34,6 +34,7 @@
#include "lltoastimpanel.h"
#include "llnotifications.h"
+#include "llinstantmessage.h"
const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT = 6;
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 6b9bff7b9e..766cf83a01 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -38,6 +38,7 @@
#include "llviewercontrol.h"
// library includes
+#include "lldbstrings.h"
#include "llnotifications.h"
#include "lluiconstants.h"
#include "llrect.h"
diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp
index afb9e261b0..755e647777 100644
--- a/indra/newview/lltoastpanel.cpp
+++ b/indra/newview/lltoastpanel.cpp
@@ -80,7 +80,7 @@ void LLToastPanel::snapToMessageHeight(LLTextBase* message, S32 maxLineCount)
//Knowing the height is set to max allowed, getTextPixelHeight returns needed text height
//Perhaps we need to pass maxLineCount as parameter to getTextPixelHeight to avoid previous reshape.
- S32 requiredTextHeight = message->getContentsRect().getHeight();
+ S32 requiredTextHeight = message->getTextBoundingRect().getHeight();
S32 newTextHeight = llmin(requiredTextHeight, maxTextHeight);
//Calculate last delta height deducting previous heightDelta
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 5ed8dc5fb9..74fbce890d 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1243,8 +1243,6 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)
return false;
}
-
-
// Does this face have media?
const LLTextureEntry* tep = objectp->getTE(pick.mObjectFace);
if(!tep)
@@ -1257,11 +1255,11 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)
viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL;
- if (gSavedSettings.getBOOL("MediaOnAPrimUI")
- && media_impl.notNull())
+ if (gSavedSettings.getBOOL("MediaOnAPrimUI"))
{
- if (!LLViewerMediaFocus::getInstance()->isFocusedOnFace(pick.getObject(), pick.mObjectFace) )
+ if (!LLViewerMediaFocus::getInstance()->isFocusedOnFace(pick.getObject(), pick.mObjectFace) || media_impl.isNull())
{
+ // It's okay to give this a null impl
LLViewerMediaFocus::getInstance()->setFocusFace(pick.getObject(), pick.mObjectFace, media_impl, pick.mNormal);
}
else
@@ -1445,28 +1443,29 @@ BOOL LLToolPie::pickRightMouseDownCallback()
{
LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( mPick.mPosGlobal );
gMenuHolder->setParcelSelection(selection);
- gPieLand->show(x, y);
+ gMenuLand->show(x, y);
showVisualContextMenuEffect();
}
else if (mPick.mObjectID == gAgent.getID() )
{
- if(!gPieSelf)
+ if(!gMenuAvatarSelf)
{
//either at very early startup stage or at late quitting stage,
//this event is ignored.
return TRUE ;
}
- gPieSelf->show(x, y);
+ gMenuAvatarSelf->show(x, y);
}
else if (object)
{
gMenuHolder->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
+ bool is_other_attachment = (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner());
if (object->isAvatar()
- || (object->isAttachment() && !object->isHUDAttachment() && !object->permYouOwner()))
+ || is_other_attachment)
{
// Find the attachment's avatar
while( object && object->isAttachment())
@@ -1477,20 +1476,30 @@ BOOL LLToolPie::pickRightMouseDownCallback()
// Object is an avatar, so check for mute by id.
LLVOAvatar* avatar = (LLVOAvatar*)object;
std::string name = avatar->getFullname();
+ std::string mute_msg;
if (LLMuteList::getInstance()->isMuted(avatar->getID(), avatar->getFullname()))
{
- gMenuHolder->childSetText("Avatar Mute", std::string("Unmute")); // *TODO:Translate
+ mute_msg = LLTrans::getString("UnmuteAvatar");
}
else
{
- gMenuHolder->childSetText("Avatar Mute", std::string("Mute")); // *TODO:Translate
+ mute_msg = LLTrans::getString("MuteAvatar");
}
- gPieAvatar->show(x, y);
+ if (is_other_attachment)
+ {
+ gMenuAttachmentOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg);
+ gMenuAttachmentOther->show(x, y);
+ }
+ else
+ {
+ gMenuAvatarOther->getChild<LLUICtrl>("Avatar Mute")->setValue(mute_msg);
+ gMenuAvatarOther->show(x, y);
+ }
}
else if (object->isAttachment())
{
- gPieAttachment->show(x, y);
+ gMenuAttachmentSelf->show(x, y);
}
else
{
@@ -1501,16 +1510,18 @@ BOOL LLToolPie::pickRightMouseDownCallback()
{
name = node->mName;
}
+ std::string mute_msg;
if (LLMuteList::getInstance()->isMuted(object->getID(), name))
{
- gMenuHolder->childSetText("Object Mute", std::string("Unmute")); // *TODO:Translate
+ mute_msg = LLTrans::getString("UnmuteObject");
}
else
{
- gMenuHolder->childSetText("Object Mute", std::string("Mute")); // *TODO:Translate
+ mute_msg = LLTrans::getString("MuteObject");
}
- gPieObject->show(x, y);
+ gMenuHolder->childSetText("Object Mute", mute_msg);
+ gMenuObject->show(x, y);
showVisualContextMenuEffect();
}
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index f8c82f8b22..0b6bd4b401 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -41,6 +41,7 @@
#include "llfloaterurldisplay.h"
#include "llfloaterworldmap.h"
#include "llpanellogin.h"
+#include "llregionhandle.h"
#include "llsidetray.h"
#include "llslurl.h"
#include "llstartup.h" // gStartupState
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index a041f3ac98..bb49804aff 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -32,12 +32,13 @@
#include "llviewerprecompiledheaders.h"
-#include "linden_common.h"
-
-#include "llagent.h"
#include "llviewerassetstorage.h"
+
#include "llvfile.h"
#include "llvfs.h"
+#include "message.h"
+
+#include "llagent.h"
LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
LLVFS *vfs, const LLHost &upstream_host)
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 5b733ed817..68a5147bc7 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1009,10 +1009,10 @@ void render_hud_attachments()
glh_set_current_modelview(current_mod);
}
-BOOL setup_hud_matrices()
+LLRect get_whole_screen_region()
{
LLRect whole_screen = gViewerWindow->getWindowRectScaled();
-
+
// apply camera zoom transform (for high res screenshots)
F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
@@ -1024,52 +1024,43 @@ BOOL setup_hud_matrices()
int tile_y = sub_region / num_horizontal_tiles;
int tile_x = sub_region - (tile_y * num_horizontal_tiles);
glh::matrix4f mat;
-
+
whole_screen.setLeftTopAndSize(tile_x * tile_width, gViewerWindow->getWindowHeightScaled() - (tile_y * tile_height), tile_width, tile_height);
}
-
- return setup_hud_matrices(whole_screen);
+ return whole_screen;
}
-BOOL setup_hud_matrices(const LLRect& screen_region)
+bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::matrix4f &model)
{
LLVOAvatar* my_avatarp = gAgent.getAvatarObject();
if (my_avatarp && my_avatarp->hasHUDAttachment())
{
F32 zoom_level = gAgent.mHUDCurZoom;
LLBBox hud_bbox = my_avatarp->getHUDBBox();
-
- // set up transform to keep HUD objects in front of camera
- glMatrixMode(GL_PROJECTION);
+
F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
- glh::matrix4f proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
+ proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
proj.element(2,2) = -0.01f;
-
+
F32 aspect_ratio = LLViewerCamera::getInstance()->getAspect();
-
+
glh::matrix4f mat;
F32 scale_x = (F32)gViewerWindow->getWindowWidthScaled() / (F32)screen_region.getWidth();
F32 scale_y = (F32)gViewerWindow->getWindowHeightScaled() / (F32)screen_region.getHeight();
mat.set_scale(glh::vec3f(scale_x, scale_y, 1.f));
mat.set_translate(
glh::vec3f(clamp_rescale((F32)screen_region.getCenterX(), 0.f, (F32)gViewerWindow->getWindowWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio),
- clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWindowHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
- 0.f));
+ clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWindowHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
+ 0.f));
proj *= mat;
-
- glLoadMatrixf(proj.m);
- glh_set_current_projection(proj);
-
- glMatrixMode(GL_MODELVIEW);
- glh::matrix4f model((GLfloat*) OGL_TO_CFR_ROTATION);
+
+ glh::matrix4f tmp_model((GLfloat*) OGL_TO_CFR_ROTATION);
mat.set_scale(glh::vec3f(zoom_level, zoom_level, zoom_level));
mat.set_translate(glh::vec3f(-hud_bbox.getCenterLocal().mV[VX] + (hud_depth * 0.5f), 0.f, 0.f));
-
- model *= mat;
- glLoadMatrixf(model.m);
- glh_set_current_modelview(model);
-
+
+ tmp_model *= mat;
+ model = tmp_model;
return TRUE;
}
else
@@ -1078,6 +1069,35 @@ BOOL setup_hud_matrices(const LLRect& screen_region)
}
}
+bool get_hud_matrices(glh::matrix4f &proj, glh::matrix4f &model)
+{
+ LLRect whole_screen = get_whole_screen_region();
+ return get_hud_matrices(whole_screen, proj, model);
+}
+
+BOOL setup_hud_matrices()
+{
+ LLRect whole_screen = get_whole_screen_region();
+ return setup_hud_matrices(whole_screen);
+}
+
+BOOL setup_hud_matrices(const LLRect& screen_region)
+{
+ glh::matrix4f proj, model;
+ bool result = get_hud_matrices(screen_region, proj, model);
+ if (!result) return result;
+
+ // set up transform to keep HUD objects in front of camera
+ glMatrixMode(GL_PROJECTION);
+ glLoadMatrixf(proj.m);
+ glh_set_current_projection(proj);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadMatrixf(model.m);
+ glh_set_current_modelview(model);
+ return TRUE;
+}
+
static LLFastTimer::DeclareTimer FTM_SWAP("Swap");
void render_ui(F32 zoom_factor, int subfield)
diff --git a/indra/newview/llviewergenericmessage.h b/indra/newview/llviewergenericmessage.h
index 6e1f0945b8..6b0a2e5d81 100644
--- a/indra/newview/llviewergenericmessage.h
+++ b/indra/newview/llviewergenericmessage.h
@@ -36,6 +36,7 @@
class LLUUID;
class LLDispatcher;
+class LLMessageSystem;
void send_generic_message(const std::string& method,
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 645a73c502..5605f425e0 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -518,7 +518,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents");
if (!url.empty()) //Capability found. Build up LLSD and use it.
{
- LLInventoryModel::startBackgroundFetch(mUUID);
+ gInventory.startBackgroundFetch(mUUID);
}
else
{ //Deprecated, but if we don't have a capability, use the old system.
diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h
index 0e993a2ebe..08c4ec36fd 100644
--- a/indra/newview/llviewerjoint.h
+++ b/indra/newview/llviewerjoint.h
@@ -37,7 +37,6 @@
// Header Files
//-----------------------------------------------------------------------------
#include "lljoint.h"
-#include "llapr.h"
class LLFace;
class LLViewerJointMesh;
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
index 543679c44b..d62b0ada85 100644
--- a/indra/newview/llviewerjointmesh.h
+++ b/indra/newview/llviewerjointmesh.h
@@ -37,7 +37,6 @@
#include "llviewertexture.h"
#include "llpolymesh.h"
#include "v4color.h"
-#include "llapr.h"
class LLDrawable;
class LLFace;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 57e4ed0c1e..367c0c8343 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -249,6 +249,7 @@ static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;
static LLTimer sMediaCreateTimer;
static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;
static F32 sGlobalVolume = 1.0f;
+static F64 sLowestLoadableImplInterest = 0.0f;
//////////////////////////////////////////////////////////////////////////////////////////
static void add_media_impl(LLViewerMediaImpl* media)
@@ -558,6 +559,26 @@ bool LLViewerMedia::getInWorldMediaDisabled()
return sInWorldMediaDisabled;
}
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
+bool LLViewerMedia::isInterestingEnough(const LLUUID &object_id, const F64 &object_interest)
+{
+ bool result = false;
+
+ if (LLViewerMediaFocus::getInstance()->getFocusedObjectID() == object_id)
+ {
+ result = true;
+ }
+ else
+ {
+ llinfos << "object interest = " << object_interest << ", lowest loadable = " << sLowestLoadableImplInterest << llendl;
+ if(object_interest > sLowestLoadableImplInterest)
+ result = true;
+ }
+
+ return result;
+}
+
LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
{
return sViewerMediaImplList;
@@ -683,6 +704,8 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
// Setting max_cpu to 0.0 disables CPU usage checking.
bool check_cpu_usage = (max_cpu != 0.0f);
+ LLViewerMediaImpl* lowest_interest_loadable = NULL;
+
// Notes on tweakable params:
// max_instances must be set high enough to allow the various instances used in the UI (for the help browser, search, etc.) to be loaded.
// If max_normal + max_low is less than max_instances, things will tend to get unloaded instead of being set to slideshow.
@@ -769,6 +792,9 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
if(!pimpl->getUsedInUI() && (new_priority != LLPluginClassMedia::PRIORITY_UNLOADED))
{
+ // This is a loadable inworld impl -- the last one in the list in this class defines the lowest loadable interest.
+ lowest_interest_loadable = pimpl;
+
impl_count_total++;
}
@@ -799,6 +825,22 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
total_cpu += pimpl->getCPUUsage();
}
+
+ // Re-calculate this every time.
+ sLowestLoadableImplInterest = 0.0f;
+
+ // Only do this calculation if we've hit the impl count limit -- up until that point we always need to load media data.
+ if(lowest_interest_loadable && (impl_count_total >= (int)max_instances))
+ {
+ // Get the interest value of this impl's object for use by isInterestingEnough
+ LLVOVolume *object = lowest_interest_loadable->getSomeObject();
+ if(object)
+ {
+ // NOTE: Don't use getMediaInterest() here. We want the pixel area, not the total media interest,
+ // so that we match up with the calculation done in LLMediaDataClient.
+ sLowestLoadableImplInterest = object->getPixelArea();
+ }
+ }
if(gSavedSettings.getBOOL("MediaPerformanceManagerDebug"))
{
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 349a66867a..26b822aba6 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -112,6 +112,8 @@ class LLViewerMedia
static void setInWorldMediaDisabled(bool disabled);
static bool getInWorldMediaDisabled();
+ static bool isInterestingEnough(const LLUUID& object_id, const F64 &object_interest);
+
// Returns the priority-sorted list of all media impls.
static impl_list &getPriorityList();
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index f639c841e7..e04a54fbd6 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -144,9 +144,19 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
}
mFocusedImplID = LLUUID::null;
- mFocusedObjectID = LLUUID::null;
- mFocusedObjectFace = 0;
+ if (objectp.notNull())
+ {
+ // Still record the focused object...it may mean we need to load media data.
+ // This will aid us in determining this object is "important enough"
+ mFocusedObjectID = objectp->getID();
+ mFocusedObjectFace = face;
+ }
+ else {
+ mFocusedObjectID = LLUUID::null;
+ mFocusedObjectFace = 0;
+ }
}
+
}
void LLViewerMediaFocus::clearFocus()
@@ -336,7 +346,7 @@ BOOL LLViewerMediaFocus::handleScrollWheel(S32 x, S32 y, S32 clicks)
void LLViewerMediaFocus::update()
{
- if(mFocusedImplID.notNull() || mFocusedObjectID.notNull())
+ if(mFocusedImplID.notNull())
{
// We have a focused impl/face.
if(!getFocus())
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 36d9e7935f..0be0b56bc3 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -134,11 +134,12 @@ LLMenuGL *gPopupMenuView = NULL;
LLMenuBarGL *gLoginMenuBarView = NULL;
// Pie menus
-LLContextMenu *gPieSelf = NULL;
-LLContextMenu *gPieAvatar = NULL;
-LLContextMenu *gPieObject = NULL;
-LLContextMenu *gPieAttachment = NULL;
-LLContextMenu *gPieLand = NULL;
+LLContextMenu *gMenuAvatarSelf = NULL;
+LLContextMenu *gMenuAvatarOther = NULL;
+LLContextMenu *gMenuObject = NULL;
+LLContextMenu *gMenuAttachmentSelf = NULL;
+LLContextMenu *gMenuAttachmentOther = NULL;
+LLContextMenu *gMenuLand = NULL;
const std::string SAVE_INTO_INVENTORY("Save Object Back to My Inventory");
const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents");
@@ -146,7 +147,6 @@ const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"
LLMenuGL* gAttachSubMenu = NULL;
LLMenuGL* gDetachSubMenu = NULL;
LLMenuGL* gTakeOffClothes = NULL;
-LLContextMenu* gPieRate = NULL;
LLContextMenu* gAttachScreenPieMenu = NULL;
LLContextMenu* gAttachPieMenu = NULL;
LLContextMenu* gAttachBodyPartPieMenus[8];
@@ -376,25 +376,31 @@ void init_menus()
gMenuHolder->addChild( gPopupMenuView );
///
- /// Pie menus
+ /// Context menus
///
- gPieSelf = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_self.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ const widget_registry_t& registry =
+ LLViewerMenuHolderGL::child_registry_t::instance();
+ gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_avatar_self.xml", gMenuHolder, registry);
+ gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_avatar_other.xml", gMenuHolder, registry);
- // TomY TODO: what shall we do about these?
gDetachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach HUD", true);
gDetachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach", true);
- gPieAvatar = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_avatar.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-
- gPieObject = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_object.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ gMenuObject = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_object.xml", gMenuHolder, registry);
gAttachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach HUD");
gAttachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach");
- gPieRate = gMenuHolder->getChild<LLContextMenu>("Rate Menu");
- gPieAttachment = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_attachment.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ gMenuAttachmentSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_attachment_self.xml", gMenuHolder, registry);
+ gMenuAttachmentOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_attachment_other.xml", gMenuHolder, registry);
- gPieLand = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_pie_land.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>(
+ "menu_land.xml", gMenuHolder, registry);
///
/// set up the colors
@@ -403,12 +409,13 @@ void init_menus()
LLColor4 context_menu_color = LLUIColorTable::instance().getColor("MenuPopupBgColor");
- gPieSelf->setBackgroundColor( context_menu_color );
- gPieAvatar->setBackgroundColor( context_menu_color );
- gPieObject->setBackgroundColor( context_menu_color );
- gPieAttachment->setBackgroundColor( context_menu_color );
+ gMenuAvatarSelf->setBackgroundColor( context_menu_color );
+ gMenuAvatarOther->setBackgroundColor( context_menu_color );
+ gMenuObject->setBackgroundColor( context_menu_color );
+ gMenuAttachmentSelf->setBackgroundColor( context_menu_color );
+ gMenuAttachmentOther->setBackgroundColor( context_menu_color );
- gPieLand->setBackgroundColor( context_menu_color );
+ gMenuLand->setBackgroundColor( context_menu_color );
color = LLUIColorTable::instance().getColor( "MenuPopupBgColor" );
gPopupMenuView->setBackgroundColor( color );
@@ -2263,20 +2270,23 @@ void cleanup_menus()
delete gMenuParcelObserver;
gMenuParcelObserver = NULL;
- delete gPieSelf;
- gPieSelf = NULL;
+ delete gMenuAvatarSelf;
+ gMenuAvatarSelf = NULL;
+
+ delete gMenuAvatarOther;
+ gMenuAvatarOther = NULL;
- delete gPieAvatar;
- gPieAvatar = NULL;
+ delete gMenuObject;
+ gMenuObject = NULL;
- delete gPieObject;
- gPieObject = NULL;
+ delete gMenuAttachmentSelf;
+ gMenuAttachmentSelf = NULL;
- delete gPieAttachment;
- gPieAttachment = NULL;
+ delete gMenuAttachmentOther;
+ gMenuAttachmentSelf = NULL;
- delete gPieLand;
- gPieLand = NULL;
+ delete gMenuLand;
+ gMenuLand = NULL;
delete gMenuBarView;
gMenuBarView = NULL;
@@ -4911,7 +4921,7 @@ class LLEditDelete : public view_listener_t
// When deleting an object we may not actually be done
// Keep selection so we know what to delete when confirmation is needed about the delete
- gPieObject->hide();
+ gMenuObject->hide();
return true;
}
};
@@ -4944,7 +4954,7 @@ void handle_object_delete()
// When deleting an object we may not actually be done
// Keep selection so we know what to delete when confirmation is needed about the delete
- gPieObject->hide();
+ gMenuObject->hide();
return;
}
@@ -6006,7 +6016,7 @@ public:
protected:
virtual void done()
{
- gPieAttachment->buildDrawLabels();
+ gMenuAttachmentSelf->buildDrawLabels();
gInventory.removeObserver(this);
delete this;
}
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 01a6b34170..d3c34f0de4 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -36,6 +36,7 @@
#include "llmenugl.h"
#include "llsafehandle.h"
+class LLMessageSystem;
class LLSD;
class LLUICtrl;
class LLView;
@@ -160,21 +161,13 @@ extern LLMenuGL* gPopupMenuView;
extern LLViewerMenuHolderGL* gMenuHolder;
extern LLMenuBarGL* gLoginMenuBarView;
-// Pie menus
-extern LLContextMenu *gPieSelf;
-extern LLContextMenu *gPieAvatar;
-extern LLContextMenu *gPieObject;
-extern LLContextMenu *gPieAttachment;
-
-extern LLContextMenu *gPieLand;
-extern LLContextMenu *gPieRate;
-
-// Pie menus
-extern LLContextMenu *gPieSelfSimple;
-extern LLContextMenu *gPieAvatarSimple;
-extern LLContextMenu *gPieObjectSimple;
-extern LLContextMenu *gPieAttachmentSimple;
-extern LLContextMenu *gPieLandSimple;
+// Context menus in 3D scene
+extern LLContextMenu *gMenuAvatarSelf;
+extern LLContextMenu *gMenuAvatarOther;
+extern LLContextMenu *gMenuObject;
+extern LLContextMenu *gMenuAttachmentSelf;
+extern LLContextMenu *gMenuAttachmentOther;
+extern LLContextMenu *gMenuLand;
// Needed to build menus when attachment site list available
extern LLMenuGL* gAttachSubMenu;
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index a1c3806b27..48794bbc1a 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -40,6 +40,12 @@
#include "llfloaterreg.h"
#include "llfloaterbuycurrency.h"
#include "llfloatersnapshot.h"
+#include "llimage.h"
+#include "llimagebmp.h"
+#include "llimagepng.h"
+#include "llimagej2c.h"
+#include "llimagejpeg.h"
+#include "llimagetga.h"
#include "llinventorymodel.h" // gInventory
#include "llresourcedata.h"
#include "llfloaterperms.h"
@@ -47,6 +53,8 @@
#include "llviewercontrol.h" // gSavedSettings
#include "llviewertexturelist.h"
#include "lluictrlfactory.h"
+#include "llvfile.h"
+#include "llvfs.h"
#include "llviewerinventory.h"
#include "llviewermenu.h" // gMenuHolder
#include "llviewerregion.h"
@@ -67,6 +75,7 @@
#include "lltransactiontypes.h"
#include "lluuid.h"
#include "llvorbisencode.h"
+#include "message.h"
// system libraries
#include <boost/tokenizer.hpp>
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
index da78537a29..1e6d13f1c6 100644
--- a/indra/newview/llviewermenufile.h
+++ b/indra/newview/llviewermenufile.h
@@ -34,6 +34,7 @@
#define LLVIEWERMENUFILE_H
#include "llfoldertype.h"
+#include "llassetstorage.h"
#include "llinventorytype.h"
class LLTransactionID;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 487db16e6e..ea40f2aae1 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -38,8 +38,14 @@
#include "lleconomy.h"
#include "llfloaterreg.h"
#include "llfollowcamparams.h"
+#include "llregionhandle.h"
#include "llsdserialize.h"
+#include "llteleportflags.h"
#include "lltransactionflags.h"
+#include "llvfile.h"
+#include "llvfs.h"
+#include "llxfermanager.h"
+#include "mean_collision_data.h"
#include "llagent.h"
#include "llcallingcard.h"
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index 1a98828010..8404d6fde0 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -33,10 +33,12 @@
#ifndef LL_LLVIEWERMESSAGE_H
#define LL_LLVIEWERMESSAGE_H
+#include "llassettype.h"
#include "llinstantmessage.h"
#include "llpointer.h"
#include "lltransactiontypes.h"
#include "lluuid.h"
+#include "message.h"
#include "stdenums.h"
//
@@ -47,6 +49,7 @@ class LLInventoryObject;
class LLInventoryItem;
class LLMeanCollisionData;
class LLMessageSystem;
+class LLVFS;
class LLViewerObject;
class LLViewerRegion;
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 801c46035a..d7b55d7e97 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -34,8 +34,11 @@
#include "llviewerprecompiledheaders.h"
#include "llviewernetwork.h"
-#include "llviewercontrol.h"
+
#include "llevents.h"
+#include "net.h"
+
+#include "llviewercontrol.h"
#include "lllogin.h"
struct LLGridData
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index 6a0ad5757f..50f905416c 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -41,17 +41,6 @@
#include "linden_common.h"
-// We may want to take the windows.h include out, but it used to be in
-// linden_common.h, and hence in all the libraries. This is better. JC
-#if LL_WINDOWS
- // Limit Windows API to small and manageable set.
- // If you get undefined symbols, find the appropriate
- // Windows header file and include that in your .cpp file.
- #define WIN32_LEAN_AND_MEAN
- #include <winsock2.h>
- #include <windows.h>
-#endif
-
// Work around stupid Microsoft STL warning
#ifdef LL_WINDOWS
#pragma warning (disable : 4702) // warning C4702: unreachable code
@@ -76,21 +65,14 @@
//#include "llpreprocessor.h"
#include "llallocator.h"
#include "llapp.h"
-#include "llapr.h"
#include "llcriticaldamp.h"
-//#include "lldarray.h"
-//#include "lldarrayptr.h"
#include "lldefs.h"
#include "lldepthstack.h"
-//#include "lldqueueptr.h"
-#include "llendianswizzle.h"
#include "llerror.h"
#include "llfasttimer.h"
#include "llframetimer.h"
#include "llhash.h"
#include "lllocalidhashmap.h"
-#include "llmap.h"
-//#include "llmemory.h"
#include "llnametable.h"
#include "llpointer.h"
#include "llpriqueuemap.h"
@@ -100,7 +82,6 @@
//#include "llsecondlifeurls.h"
#include "llsd.h"
#include "llsingleton.h"
-#include "llstack.h"
#include "llstat.h"
#include "llstl.h"
#include "llstrider.h"
@@ -117,19 +98,7 @@
#include "timing.h"
#include "u64.h"
-// Library includes from llimage
-//#include "llblockdata.h"
-#include "llimage.h"
-#include "llimagebmp.h"
-#include "llimagepng.h"
-#include "llimagej2c.h"
-#include "llimagejpeg.h"
-#include "llimagetga.h"
-#include "llmapimagetype.h"
-
// Library includes from llmath project
-//#include "camera.h"
-//#include "coordframe.h"
#include "llmath.h"
#include "llbboxlocal.h"
#include "llcamera.h"
@@ -157,80 +126,11 @@
////#include "vmath.h"
#include "xform.h"
-// Library includes from llmessage project
-//#include "llassetstorage.h"
-#include "llcachename.h"
-#include "llcircuit.h"
-#include "lldatapacker.h"
-#include "lldbstrings.h"
-#include "lldispatcher.h"
-#include "lleventflags.h"
-#include "llhost.h"
-#include "llinstantmessage.h"
-#include "llinvite.h"
-//#include "llloginflags.h"
-#include "llmail.h"
-#include "llmessagethrottle.h"
-#include "llnamevalue.h"
-#include "llpacketack.h"
-#include "llpacketbuffer.h"
-#include "llpacketring.h"
-#include "llpartdata.h"
-//#include "llqueryflags.h"
-//#include "llregionflags.h"
-#include "llregionhandle.h"
-#include "lltaskname.h"
-#include "llteleportflags.h"
-#include "llthrottle.h"
-#include "lltransfermanager.h"
-#include "lltransfersourceasset.h"
-#include "lltransfersourcefile.h"
-#include "lltransfertargetfile.h"
-#include "lltransfertargetvfile.h"
-#include "lluseroperation.h"
-#include "llvehicleparams.h"
-#include "llxfer.h"
-#include "llxfer_file.h"
-#include "llxfer_mem.h"
-#include "llxfer_vfile.h"
-#include "llxfermanager.h"
-#include "machine.h"
-#include "mean_collision_data.h"
-#include "message.h"
-#include "message_prehash.h"
-#include "net.h"
-//#include "network.h"
-#include "partsyspacket.h"
-#include "patch_code.h"
-#include "patch_dct.h"
-#include "sound_ids.h"
-
-// Builds work with all headers below commented out as of 2009-09-10 JC
-
-// Library includes from llprimitive
-#include "imageids.h"
-#include "legacy_object_types.h"
-#include "llmaterialtable.h"
-//#include "llprimitive.h"
-#include "lltextureanim.h"
-//#include "lltextureentry.h"
-#include "lltreeparams.h"
-//#include "llvolume.h"
-#include "llvolumemgr.h"
-#include "material_codes.h"
-
// Library includes from llvfs
-#include "llassettype.h"
#include "lldir.h"
-//#include "lldir_linux.h"
-//#include "lldir_mac.h"
-//#include "lldir_win32.h"
-#include "llvfile.h"
-#include "llvfs.h"
-// Library includes from llui
-// In skinning-7, llui.h dependencies are changing too often.
-//#include "llui.h"
+// Library includes from llmessage project
+#include "llcachename.h"
// llxuixml
#include "llinitparam.h"
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 939d5e3970..a1a3bc6d6a 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -39,6 +39,7 @@
#include "llfloaterreg.h"
#include "llmemory.h"
#include "lltimer.h"
+#include "llvfile.h"
#include "llappviewer.h"
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index a5a40e9c2c..b45148a186 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -108,6 +108,19 @@ const F64 log_2 = log(2.0);
//----------------------------------------------------------------------------------------------
//namespace: LLViewerTextureAccess
//----------------------------------------------------------------------------------------------
+
+LLLoadedCallbackEntry::LLLoadedCallbackEntry(loaded_callback_func cb,
+ S32 discard_level,
+ BOOL need_imageraw, // Needs image raw for the callback
+ void* userdata )
+ : mCallback(cb),
+ mLastUsedDiscard(MAX_DISCARD_LEVEL+1),
+ mDesiredDiscard(discard_level),
+ mNeedsImageRaw(need_imageraw),
+ mUserData(userdata)
+{
+}
+
LLViewerMediaTexture* LLViewerTextureManager::createMediaTexture(const LLUUID &media_id, BOOL usemipmaps, LLImageGL* gl_image)
{
return new LLViewerMediaTexture(media_id, usemipmaps, gl_image) ;
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 141979052d..d6fbd5d570 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -49,12 +49,14 @@
class LLFace;
class LLImageGL ;
+class LLImageRaw;
class LLViewerObject;
class LLViewerTexture;
class LLViewerFetchedTexture ;
class LLViewerMediaTexture ;
class LLTexturePipelineTester ;
+
typedef void (*loaded_callback_func)( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
class LLVFile;
@@ -68,14 +70,7 @@ public:
LLLoadedCallbackEntry(loaded_callback_func cb,
S32 discard_level,
BOOL need_imageraw, // Needs image raw for the callback
- void* userdata )
- : mCallback(cb),
- mLastUsedDiscard(MAX_DISCARD_LEVEL+1),
- mDesiredDiscard(discard_level),
- mNeedsImageRaw(need_imageraw),
- mUserData(userdata)
- {
- }
+ void* userdata );
loaded_callback_func mCallback;
S32 mLastUsedDiscard;
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 028f8441ab..ab55bfd04d 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -53,6 +53,7 @@ const BOOL GL_TEXTURE_NO = FALSE;
const BOOL IMMEDIATE_YES = TRUE;
const BOOL IMMEDIATE_NO = FALSE;
+class LLImageJ2C;
class LLMessageSystem;
class LLTextureView;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 944fddbb50..9cacdaa3f9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -32,6 +32,8 @@
#include "llviewerprecompiledheaders.h"
+#include "llviewerwindow.h"
+
#if LL_WINDOWS
#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
#endif
@@ -46,7 +48,6 @@
#include "llpanellogin.h"
#include "llviewerkeyboard.h"
#include "llviewermenu.h"
-#include "llviewerwindow.h"
#include "llviewquery.h"
#include "llxmltree.h"
@@ -257,19 +258,21 @@ public:
virtual void recordMessage(LLError::ELevel level,
const std::string& message)
{
- // only log warnings to chat console
- if (level == LLError::LEVEL_WARN)
- {
- LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat");
- if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat"))
- {
- LLChat chat;
- chat.mText = message;
- chat.mSourceType = CHAT_SOURCE_SYSTEM;
+ //FIXME: this is NOT thread safe, and will do bad things when a warning is issued from a non-UI thread
- chat_floater->addChat(chat, FALSE, FALSE);
- }
- }
+ // only log warnings to chat console
+ //if (level == LLError::LEVEL_WARN)
+ //{
+ //LLFloaterChat* chat_floater = LLFloaterReg::findTypedInstance<LLFloaterChat>("chat");
+ //if (chat_floater && gSavedSettings.getBOOL("WarningsAsChat"))
+ //{
+ // LLChat chat;
+ // chat.mText = message;
+ // chat.mSourceType = CHAT_SOURCE_SYSTEM;
+
+ // chat_floater->addChat(chat, FALSE, FALSE);
+ //}
+ //}
}
};
@@ -3131,7 +3134,6 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
return;
}
- // push back pick info object
BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
{
@@ -3140,27 +3142,8 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
pick_transparent = TRUE;
}
- // center initial pick frame buffer region under mouse cursor
- // since that area is guaranteed to be onscreen and hence a valid
- // part of the framebuffer
- if (mPicks.empty())
- {
- mPickScreenRegion.setCenterAndSize(x, y_from_bot, PICK_DIAMETER, PICK_DIAMETER);
-
- if (mPickScreenRegion.mLeft < mWorldViewRectScaled.mLeft) mPickScreenRegion.translate(mWorldViewRectScaled.mLeft - mPickScreenRegion.mLeft, 0);
- if (mPickScreenRegion.mBottom < mWorldViewRectScaled.mBottom) mPickScreenRegion.translate(0, mWorldViewRectScaled.mBottom - mPickScreenRegion.mBottom);
- if (mPickScreenRegion.mRight > mWorldViewRectScaled.mRight ) mPickScreenRegion.translate(mWorldViewRectScaled.mRight - mPickScreenRegion.mRight, 0);
- if (mPickScreenRegion.mTop > mWorldViewRectScaled.mTop ) mPickScreenRegion.translate(0, mWorldViewRectScaled.mTop - mPickScreenRegion.mTop);
- }
-
- // set frame buffer region for picking results
- // stack multiple picks left to right
- LLRect screen_region = mPickScreenRegion;
- screen_region.translate(mPicks.size() * PICK_DIAMETER, 0);
-
- LLPickInfo pick(LLCoordGL(x, y_from_bot), screen_region, mask, pick_transparent, TRUE, callback);
-
- schedulePick(pick);
+ LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, TRUE, callback);
+ schedulePick(pick_info);
}
void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
@@ -3175,10 +3158,11 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
return;
}
- llassert_always(pick_info.mScreenRegion.notEmpty());
mPicks.push_back(pick_info);
// delay further event processing until we receive results of pick
+ // only do this for async picks so that handleMouseUp won't be called
+ // until the pick triggered in handleMouseDown has been processed, for example
mWindow->delayInputProcessing();
}
@@ -3226,20 +3210,18 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
return LLPickInfo();
}
- pickAsync(x, y_from_bot, gKeyboard->currentMask(TRUE), NULL, pick_transparent);
- // assume that pickAsync put the results in the back of the mPicks list
- if(mPicks.size() != 0)
- {
- mLastPick = mPicks.back();
- mLastPick.fetchResults();
- mPicks.pop_back();
- }
- else
+ BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
+ if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
{
- lldebugs << "List of last picks is empty: Using stub pick" << llendl;
- mLastPick = LLPickInfo();
+ // build mode allows interaction with all transparent objects
+ // "Show Debug Alpha" means no object actually transparent
+ pick_transparent = TRUE;
}
+ // shortcut queueing in mPicks and just update mLastPick in place
+ mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), gKeyboard->currentMask(TRUE), pick_transparent, TRUE, NULL);
+ mLastPick.fetchResults();
+
return mLastPick;
}
@@ -4886,13 +4868,11 @@ LLPickInfo::LLPickInfo()
}
LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
- const LLRect& screen_region,
MASK keyboard_mask,
BOOL pick_transparent,
BOOL pick_uv_coords,
void (*pick_callback)(const LLPickInfo& pick_info))
: mMousePt(mouse_pos),
- mScreenRegion(screen_region),
mKeyMask(keyboard_mask),
mPickCallback(pick_callback),
mPickType(PICK_INVALID),
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 1d564a1338..b488276a18 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -50,6 +50,7 @@
#include "llmousehandler.h"
#include "llcursortypes.h"
#include "llhandle.h"
+#include "llimage.h"
#include <boost/function.hpp>
#include <boost/signals2.hpp>
@@ -88,7 +89,6 @@ public:
public:
LLPickInfo();
LLPickInfo(const LLCoordGL& mouse_pos,
- const LLRect& screen_region,
MASK keyboard_mask,
BOOL pick_transparent,
BOOL pick_surface_info,
@@ -120,7 +120,6 @@ public:
LLVector3 mNormal;
LLVector3 mBinormal;
BOOL mPickTransparent;
- LLRect mScreenRegion;
void getSurfaceInfo();
private:
@@ -345,7 +344,6 @@ public:
void performPick();
void returnEmptyPicks();
-
void pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE);
LLPickInfo pickImmediate(S32 x, S32 y, BOOL pick_transparent);
LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
@@ -397,7 +395,7 @@ public:
private:
bool shouldShowToolTipFor(LLMouseHandler *mh);
static bool onAlert(const LLSD& notify);
-
+
void switchToolByMask(MASK mask);
void destroyWindow();
void drawMouselookInstructions();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 368b964455..6e93bf1bf2 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -45,6 +45,7 @@
#include "llaudioengine.h"
#include "noise.h"
+#include "sound_ids.h"
#include "llagent.h" // Get state values from here
#include "llagentwearables.h"
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 827b2266ea..347fae6156 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -125,7 +125,7 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
void tuningCaptureStartSendMessage(int duration);
void tuningCaptureStopSendMessage();
- void tuningSetMicVolume(float volume=0.5f);
+ void tuningSetMicVolume(float volume);
void tuningSetSpeakerVolume(float volume);
float tuningGetEnergy(void);
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 08e12f4ad9..801bd90423 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -68,6 +68,7 @@
#include "llmediaentry.h"
#include "llmediadataclient.h"
#include "llagent.h"
+#include "llviewermediafocus.h"
const S32 MIN_QUIET_FRAMES_COALESCE = 30;
const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
@@ -138,8 +139,7 @@ public:
}
virtual bool isInterestingEnough() const
{
- // TODO: use performance manager to control this
- return true;
+ return LLViewerMedia::isInterestingEnough(mObject->getID(), getMediaInterest());
}
virtual std::string getCapabilityUrl(const std::string &name) const
@@ -2089,6 +2089,9 @@ viewer_media_t LLVOVolume::getMediaImpl(U8 face_id) const
F64 LLVOVolume::getTotalMediaInterest() const
{
+ if (LLViewerMediaFocus::getInstance()->getFocusedObjectID() == getID())
+ return F64_MAX;
+
F64 interest = (F64)-1.0; // means not interested;
int i = 0;
const int end = getNumTEs();
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 7433404942..a287d34402 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -37,7 +37,6 @@
#include "llviewertexture.h"
#include "llviewermedia.h"
#include "llframetimer.h"
-#include "llapr.h"
#include "m3math.h" // LLMatrix3
#include "m4math.h" // LLMatrix4
#include <map>
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 697fefee3a..8be8f494da 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -51,16 +51,13 @@
#include "llsdserialize.h"
#include "v4math.h"
-#include "llviewerdisplay.h"
#include "llviewercontrol.h"
-#include "llviewerwindow.h"
#include "lldrawpoolwater.h"
#include "llagent.h"
#include "llviewerregion.h"
#include "llwlparammanager.h"
#include "llwaterparamset.h"
-#include "llpostprocess.h"
#include "llfloaterwater.h"
#include "curl/curl.h"
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
index fcc43c2b1f..000d50795f 100644
--- a/indra/newview/llwldaycycle.cpp
+++ b/indra/newview/llwldaycycle.cpp
@@ -33,11 +33,13 @@
#include "llviewerprecompiledheaders.h"
#include "llwldaycycle.h"
-#include "llsdserialize.h"
-#include "llwlparammanager.h"
+
#include "llnotificationsutil.h"
+#include "llsdserialize.h"
#include "llxmlnode.h"
+#include "llwlparammanager.h"
+
#include <map>
LLWLDayCycle::LLWLDayCycle() : mDayRate(120)
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index c3a70705cf..7cac564619 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -42,17 +42,12 @@
#include "llspinctrl.h"
#include "llcheckboxctrl.h"
#include "lluictrlfactory.h"
-#include "llviewercamera.h"
#include "llcombobox.h"
#include "lllineeditor.h"
#include "llsdserialize.h"
#include "v4math.h"
-#include "llviewerdisplay.h"
#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "lldrawpoolwater.h"
-#include "llviewerregion.h"
#include "llwlparamset.h"
#include "llpostprocess.h"
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 6a074d9697..06040a574c 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -33,6 +33,7 @@
#include "llviewerprecompiledheaders.h"
#include "llworldmapmessage.h"
+#include "message.h"
#include "llworldmap.h"
#include "llagent.h"
diff --git a/indra/newview/llxmlrpclistener.cpp b/indra/newview/llxmlrpclistener.cpp
index af8cb6b9fb..15417614af 100644
--- a/indra/newview/llxmlrpclistener.cpp
+++ b/indra/newview/llxmlrpclistener.cpp
@@ -21,13 +21,14 @@
// external library headers
#include <boost/scoped_ptr.hpp>
#include <boost/range.hpp> // boost::begin(), boost::end()
+#include <xmlrpc-epi/xmlrpc.h>
+#include "curl/curl.h"
+
// other Linden headers
#include "llerror.h"
#include "stringize.h"
#include "llxmlrpctransaction.h"
-#include <xmlrpc-epi/xmlrpc.h>
-
#if LL_WINDOWS
#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
#endif
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index cdbeed111e..b6995d2122 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -67,7 +67,7 @@
value="0 0 1 1" />
<color
name="Yellow"
- value="1 1 0 1" />
+ value="0.114 0.65 0.1" />
<color
name="Unused?"
value="1 0.5 0 1" />
@@ -513,7 +513,7 @@
reference="White" />
<color
name="ObjectChatColor"
- reference="0.7 0.8 0.9 1" />
+ reference="EmphasisColor" />
<color
name="OverdrivenColor"
value="1 0 0 1" />
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
index aa3898ca99..0ac5b72b8f 100644
--- a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
+++ b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
index 598342ea80..5c0c85b864 100644
--- a/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
+++ b/indra/newview/skins/default/textures/bottomtray/Unread_IM.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png
index 60676b43fd..dd9133bcc4 100644
--- a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png
+++ b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png
index 98cde96aff..0080e71f41 100644
--- a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png
+++ b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 24d3512bcb..0317d55768 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -143,6 +143,7 @@ with the same filename but different name
<texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
+ <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" />
@@ -592,9 +593,9 @@ with the same filename but different name
<texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
<texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
-
- <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" />
- <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" />
+
+ <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
+ <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="VoicePTT_Lvl1" file_name="bottomtray/VoicePTT_Lvl1.png" preload="false" />
<texture name="VoicePTT_Lvl2" file_name="bottomtray/VoicePTT_Lvl2.png" preload="false" />
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 10b72144e7..1239152c32 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -1561,7 +1561,7 @@ Only large parcels can be listed in search.
left="10"
name="at URL:"
width="100">
- Home URL:
+ Home Page:
</text>
<line_editor
follows="left|top"
@@ -1590,7 +1590,7 @@ Only large parcels can be listed in search.
left="10"
name="CurrentURL:"
width="100">
- Current URL:
+ Current Page:
</text>
<button
follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index d6b20c8015..4b280ac59f 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -171,7 +171,7 @@
enabled="false"
follows="left|top"
height="20"
- label="Send Current URL to Parcel"
+ label="Send Current Page to Parcel"
layout="topleft"
left="0"
name="assign"
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
index 8122386fae..681731b0da 100644
--- a/indra/newview/skins/default/xui/en/floater_media_settings.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_settings.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
- bottom="666"
can_close="true"
can_drag_on_left="false"
can_minimize="true"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index 602a18ea56..abc30c335c 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -3,15 +3,15 @@
legacy_header_height="18"
auto_tile="true"
can_resize="true"
- follows="left|bottom"
- height="331"
+ follows="left|top"
+ height="313"
layout="topleft"
min_height="120"
- min_width="300"
+ min_width="320"
name="preview_texture"
help_topic="preview_texture"
- width="300">
- <floater.string
+ width="320">
+ <floater.string
name="Title">
Texture: [NAME]
</floater.string>
@@ -43,72 +43,38 @@
max_length="127"
name="desc"
width="190" />
- <button
- follows="left|bottom"
- height="22"
- label="OK"
- layout="topleft"
- left="80"
- name="Keep"
- top="302"
- width="100" />
- <button
- follows="left|bottom"
- height="22"
- label="Cancel"
- layout="topleft"
- left_pad="5"
- name="Discard"
- top_delta="0"
- width="100" />
- <button
- follows="left|bottom"
- height="22"
- label="Save As"
- layout="topleft"
- left_pad="5"
- name="save_tex_btn"
- top_delta="0"
- width="100" />
<text
type="string"
+ halign="right"
length="1"
- follows="left|bottom"
+ follows="right|bottom"
height="16"
layout="topleft"
- left="13"
+ left="110"
name="dimensions"
- top="309"
- width="303">
+ top="255"
+ width="200">
[WIDTH]px x [HEIGHT]px
</text>
<text
type="string"
+ halign="right"
length="1"
- bg_visible="false"
- border_drop_shadow_visible="false"
- border_visible="false"
- top="309"
- drop_shadow_visible="true"
- enabled="true"
follows="right|bottom"
- font="SansSerifSmall"
- h_pad="0"
- halign="right"
- height="14"
- left="54"
- mouse_opaque="true"
- name="aspect_ratio"
- v_pad="0"
- width="110">
- Preview Aspect Ratio
+ height="16"
+ layout="topleft"
+ left_delta="-110"
+ name="dimensions"
+ top_pad="5"
+ width="200">
+ Preview aspect ratio
</text>
<combo_box
allow_text_entry="true"
- top="306"
+ top_delta="-3"
follows="right|bottom"
- height="20"
- left="176"
+ height="23"
+ left_pad="10"
max_chars="20"
mouse_opaque="true"
enabled="true"
@@ -140,4 +106,31 @@
2:1
</combo_item>
</combo_box>
+ <button
+ follows="right|bottom"
+ height="22"
+ label="OK"
+ layout="topleft"
+ left="6"
+ name="keep"
+ top_pad="5"
+ width="100" />
+ <button
+ follows="right|bottom"
+ height="22"
+ label="Cancel"
+ layout="topleft"
+ left_pad="5"
+ name="discard"
+ top_delta="0"
+ width="100" />
+ <button
+ follows="right|bottom"
+ height="22"
+ label="Save As"
+ layout="topleft"
+ left_pad="5"
+ name="save_tex_btn"
+ top_delta="0"
+ width="100" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml
index 6050aede79..93aa1f0e31 100644
--- a/indra/newview/skins/default/xui/en/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/en/floater_select_key.xml
@@ -21,7 +21,7 @@
word_wrap="true"
width="220">
Press a key to set your
-Speak button toggle
+Speak button trigger.
</text>
<button
height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
index 113da9ea4d..695021f755 100644
--- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
@@ -101,7 +101,7 @@
<filter_editor
follows="left|top|right"
height="23"
- label="Filter textures"
+ label="Filter Textures"
layout="topleft"
left="175"
name="inventory search editor"
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
index 16f6e49092..cedf83f8b1 100644
--- a/indra/newview/skins/default/xui/en/inspect_object.xml
+++ b/indra/newview/skins/default/xui/en/inspect_object.xml
@@ -9,7 +9,7 @@
bg_opaque_image="Inspector_Background"
can_close="false"
can_minimize="false"
- height="148"
+ height="150"
layout="topleft"
name="inspect_object"
single_instance="true"
@@ -71,13 +71,15 @@ owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
width="196">
L$300,000
</text>
- <text
+ <text
+ clip_partial="true"
follows="all"
font="SansSerifSmall"
- height="36"
+ height="37"
left="8"
name="object_description"
top_pad="0"
+ use_ellipses="true"
width="220"
word_wrap="true">
This is a really long description for an object being as how it is at least 80 characters in length and maybe more like 120 at this point. Who knows, really?
@@ -90,7 +92,7 @@ This is a really long description for an object being as how it is at least 80 c
height="13"
left_delta="0"
name="object_media_url"
- top_pad="0"
+ top_pad="-1"
width="291"
max_length = "50"
use_ellipses="true">
@@ -102,7 +104,7 @@ This is a really long description for an object being as how it is at least 80 c
label="Buy"
left="8"
name="buy_btn"
- top="119"
+ top="121"
width="80" />
<button
follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
new file mode 100644
index 0000000000..5b94645b60
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+ <menu_item_call
+ label="View Profile"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="hit object" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Add Friend"
+ name="Add Friend">
+ <menu_item_call.on_click
+ function="Avatar.AddFriend" />
+ <menu_item_call.on_enable
+ function="Avatar.EnableAddFriend" />
+ </menu_item_call>
+ <menu_item_call
+ label="IM"
+ name="Send IM...">
+ <menu_item_call.on_click
+ function="Avatar.SendIM" />
+ </menu_item_call>
+ <menu_item_call
+ label="Call"
+ name="Call">
+ <menu_item_call.on_click
+ function="Avatar.Call" />
+ </menu_item_call>
+ <menu_item_call
+ label="Invite to Group"
+ name="Invite...">
+ <menu_item_call.on_click
+ function="Avatar.InviteToGroup" />
+ </menu_item_call>
+ <menu_item_separator />
+ <menu_item_call
+ enabled="false"
+ label="Block"
+ name="Avatar Mute">
+ <menu_item_call.on_click
+ function="Avatar.Mute" />
+ <menu_item_call.on_enable
+ function="Avatar.EnableMute" />
+ </menu_item_call>
+ <menu_item_call
+ label="Report"
+ name="abuse">
+ <menu_item_call.on_click
+ function="Avatar.ReportAbuse" />
+ </menu_item_call>
+ <menu_item_call
+ label="Freeze"
+ name="Freeze...">
+ <menu_item_call.on_click
+ function="Avatar.Freeze" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Eject"
+ name="Eject...">
+ <menu_item_call.on_click
+ function="Avatar.Eject" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Debug"
+ name="Debug...">
+ <menu_item_call.on_click
+ function="Avatar.Debug" />
+ <menu_item_call.on_visible
+ function="IsGodCustomerService"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Zoom In"
+ name="Zoom In">
+ <menu_item_call.on_click
+ function="Tools.LookAtSelection"
+ parameter="zoom" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Pay"
+ name="Pay...">
+ <menu_item_call.on_click
+ function="PayObject" />
+ <menu_item_call.on_enable
+ function="EnablePayAvatar" />
+ </menu_item_call>
+ <menu_item_separator />
+ <menu_item_call
+ label="Object Profile"
+ name="Object Inspect">
+ <menu_item_call.on_click
+ function="Object.Inspect" />
+ <menu_item_call.on_enable
+ function="Object.EnableInspect" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
new file mode 100644
index 0000000000..c85dbbb1bc
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Attachment Pie">
+ <menu_item_call
+ enabled="false"
+ label="Touch"
+ layout="topleft"
+ name="Attachment Object Touch">
+ <menu_item_call.on_click
+ function="Object.Touch" />
+ <menu_item_call.on_enable
+ function="Object.EnableTouch"
+ name="EnableTouch"
+ parameter="Touch" />
+ </menu_item_call>
+ <!--menu_item_call
+ label="Stand Up"
+ layout="topleft"
+ name="Stand Up">
+ <menu_item_call.on_click
+ function="Self.StandUp"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="Self.EnableStandUp" />
+ </menu_item_call-->
+ <menu_item_call
+ enabled="false"
+ label="Edit"
+ layout="topleft"
+ name="Edit...">
+ <menu_item_call.on_click
+ function="Object.Edit" />
+ <menu_item_call.on_enable
+ function="EnableEdit" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Detach"
+ layout="topleft"
+ name="Detach">
+ <menu_item_call.on_click
+ function="Attachment.Detach" />
+ <menu_item_call.on_enable
+ function="Attachment.EnableDetach" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Drop"
+ layout="topleft"
+ name="Drop">
+ <menu_item_call.on_click
+ function="Attachment.Drop" />
+ <menu_item_call.on_enable
+ function="Attachment.EnableDrop" />
+ </menu_item_call>
+ <!--menu_item_call
+ label="My Profile"
+ layout="topleft"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="agent" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Appearance"
+ layout="topleft"
+ name="Appearance...">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="appearance" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCustomizeAvatar" />
+
+ </menu_item_call-->
+ <menu_item_separator
+ layout="topleft" />
+
+ <menu_item_call
+ label="Stand Up"
+ layout="topleft"
+ name="Stand Up">
+ <menu_item_call.on_click
+ function="Self.StandUp"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="Self.EnableStandUp" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Appearance"
+ layout="topleft"
+ name="Appearance...">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="appearance" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCustomizeAvatar" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Friends"
+ layout="topleft"
+ name="Friends...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="friends_panel" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Groups"
+ layout="topleft"
+ name="Groups...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="groups_panel" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Profile"
+ layout="topleft"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="agent" />
+ </menu_item_call>
+
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
new file mode 100644
index 0000000000..0ad41546d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+ <menu_item_call
+ label="View Profile"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="hit object" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Add Friend"
+ name="Add Friend">
+ <menu_item_call.on_click
+ function="Avatar.AddFriend" />
+ <menu_item_call.on_enable
+ function="Avatar.EnableAddFriend" />
+ </menu_item_call>
+ <menu_item_call
+ label="IM"
+ name="Send IM...">
+ <menu_item_call.on_click
+ function="Avatar.SendIM" />
+ </menu_item_call>
+ <menu_item_call
+ label="Call"
+ name="Call">
+ <menu_item_call.on_click
+ function="Avatar.Call" />
+ </menu_item_call>
+ <menu_item_call
+ label="Invite to Group"
+ name="Invite...">
+ <menu_item_call.on_click
+ function="Avatar.InviteToGroup" />
+ </menu_item_call>
+ <menu_item_separator />
+ <menu_item_call
+ enabled="false"
+ label="Block"
+ name="Avatar Mute">
+ <menu_item_call.on_click
+ function="Avatar.Mute" />
+ <menu_item_call.on_enable
+ function="Avatar.EnableMute" />
+ </menu_item_call>
+ <menu_item_call
+ label="Report"
+ name="abuse">
+ <menu_item_call.on_click
+ function="Avatar.ReportAbuse" />
+ </menu_item_call>
+ <menu_item_call
+ label="Freeze"
+ name="Freeze...">
+ <menu_item_call.on_click
+ function="Avatar.Freeze" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Eject"
+ name="Eject...">
+ <menu_item_call.on_click
+ function="Avatar.Eject" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Debug"
+ name="Debug...">
+ <menu_item_call.on_click
+ function="Avatar.Debug" />
+ <menu_item_call.on_visible
+ function="IsGodCustomerService"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Zoom In"
+ name="Zoom In">
+ <menu_item_call.on_click
+ function="Tools.LookAtSelection"
+ parameter="zoom" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Pay"
+ name="Pay...">
+ <menu_item_call.on_click
+ function="PayObject" />
+ <menu_item_call.on_enable
+ function="EnablePayAvatar" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
new file mode 100644
index 0000000000..c6ce612a76
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Self Pie">
+ <menu_item_call
+ label="Stand Up"
+ layout="topleft"
+ name="Stand Up">
+ <menu_item_call.on_click
+ function="Self.StandUp"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="Self.EnableStandUp" />
+ </menu_item_call>
+ <context_menu
+ label="Take Off &gt;"
+ layout="topleft"
+ name="Take Off &gt;">
+ <context_menu
+ label="Clothes &gt;"
+ layout="topleft"
+ name="Clothes &gt;">
+ <menu_item_call
+ enabled="false"
+ label="Shirt"
+ layout="topleft"
+ name="Shirt">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="shirt" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="shirt" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Pants"
+ layout="topleft"
+ name="Pants">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="pants" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="pants" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Skirt"
+ layout="topleft"
+ name="Skirt">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="skirt" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="skirt" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Shoes"
+ layout="topleft"
+ name="Shoes">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="shoes" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="shoes" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Socks"
+ layout="topleft"
+ name="Socks">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="socks" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="socks" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Jacket"
+ layout="topleft"
+ name="Jacket">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="jacket" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="jacket" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Gloves"
+ layout="topleft"
+ name="Gloves">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="gloves" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="gloves" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Undershirt"
+ layout="topleft"
+ name="Self Undershirt">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="undershirt" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="undershirt" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Underpants"
+ layout="topleft"
+ name="Self Underpants">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="underpants" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="underpants" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Tattoo"
+ layout="topleft"
+ name="Self Tattoo">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="tattoo" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="tattoo" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Alpha"
+ layout="topleft"
+ name="Self Alpha">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="alpha" />
+ <menu_item_call.on_enable
+ function="Edit.EnableTakeOff"
+ parameter="alpha" />
+ </menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ label="All Clothes"
+ layout="topleft"
+ name="All Clothes">
+ <menu_item_call.on_click
+ function="Edit.TakeOff"
+ parameter="all" />
+ </menu_item_call>
+ </context_menu>
+ <context_menu
+ label="HUD &gt;"
+ layout="topleft"
+ name="Object Detach HUD" />
+ <context_menu
+ label="Detach &gt;"
+ layout="topleft"
+ name="Object Detach" />
+ <menu_item_call
+ label="Detach All"
+ layout="topleft"
+ name="Detach All">
+ <menu_item_call.on_click
+ function="Self.RemoveAllAttachments"
+ parameter="" />
+ <menu_item_call.on_enable
+ function="Self.EnableRemoveAllAttachments" />
+ </menu_item_call>
+ </context_menu>
+ <menu_item_call
+ label="My Appearance"
+ layout="topleft"
+ name="Appearance...">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="appearance" />
+ <menu_item_call.on_enable
+ function="Edit.EnableCustomizeAvatar" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Friends"
+ layout="topleft"
+ name="Friends...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="friends_panel" />
+ </menu_item_call>
+ <!--menu_item_call
+ label="My Gestures"
+ layout="topleft"
+ name="Gestures...">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="gestures" />
+ </menu_item_call-->
+ <menu_item_call
+ label="My Groups"
+ layout="topleft"
+ name="Groups...">
+ <menu_item_call.on_click
+ function="SideTray.PanelPeopleTab"
+ parameter="groups_panel" />
+ </menu_item_call>
+ <menu_item_call
+ label="My Profile"
+ layout="topleft"
+ name="Profile...">
+ <menu_item_call.on_click
+ function="ShowAgentProfile"
+ parameter="agent" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 660e3858ac..0f400777b8 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -339,6 +339,9 @@
function="Inventory.DoToSelected"
parameter="open" />
</menu_item_call>
+ <menu_item_separator
+ layout="topleft"
+ name="Folder Wearables Separator" />
<menu_item_call
label="Replace Current Outfit"
layout="topleft"
@@ -423,7 +426,8 @@
parameter="copy_uuid" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Copy Separator" />
<menu_item_call
label="Copy"
layout="topleft"
@@ -449,7 +453,8 @@
parameter="paste_link" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Paste Separator" />
<menu_item_call
label="Remove Link"
layout="topleft"
@@ -500,7 +505,8 @@
parameter="about" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Animation Separator" />
<menu_item_call
label="Play in World"
layout="topleft"
@@ -518,7 +524,8 @@
parameter="playlocal" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Send Instant Message Separator" />
<menu_item_call
label="Send Instant Message"
layout="topleft"
@@ -544,7 +551,8 @@
parameter="selected" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Gesture Separator" />
<menu_item_call
label="Activate"
layout="topleft"
@@ -562,7 +570,8 @@
parameter="deactivate" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Texture Separator" />
<menu_item_call
label="Save As"
layout="topleft"
@@ -572,7 +581,8 @@
parameter="save_as" />
</menu_item_call>
<menu_item_separator
- layout="topleft" />
+ layout="topleft"
+ name="Attach Separator"/>
<menu_item_call
label="Detach From Yourself"
layout="topleft"
@@ -608,6 +618,9 @@
label="Attach To HUD"
layout="topleft"
name="Attach To HUD" />
+ <menu_item_separator
+ layout="topleft"
+ name="Wearable Separator"/>
<menu_item_call
label="Edit"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml
new file mode 100644
index 0000000000..d88a2f8d25
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_land.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Land Pie">
+ <menu_item_call
+ label="About Land"
+ name="Place Information...">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="about_land" />
+ </menu_item_call>
+ <!-- <menu_item_call
+ label="Go Here"
+ name="Go Here">
+ <menu_item_call.on_click
+ function="GoToObject" />
+ </menu_item_call>-->
+ <menu_item_call
+ label="Sit Here"
+ name="Sit Here">
+ <menu_item_call.on_click
+ function="Land.Sit" />
+ </menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ enabled="false"
+ label="Buy This Land"
+ name="Land Buy">
+ <menu_item_call.on_click
+ function="ShowFloater"
+ parameter="buy land" />
+ <menu_item_call.on_enable
+ function="World.EnableBuyLand" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Buy Pass"
+ name="Land Buy Pass">
+ <menu_item_call.on_click
+ function="Land.BuyPass" />
+ <menu_item_call.on_enable
+ function="Land.EnableBuyPass" />
+ </menu_item_call>
+ <menu_item_separator
+ layout="topleft" />
+ <menu_item_call
+ enabled="false"
+ label="Build"
+ name="Create">
+ <menu_item_call.on_click
+ function="Land.Build" />
+ <menu_item_call.on_enable
+ function="EnableEdit" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Edit Terrain"
+ name="Edit Terrain">
+ <menu_item_call.on_click
+ function="Land.Edit" />
+ <menu_item_call.on_enable
+ function="EnableEdit" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
new file mode 100644
index 0000000000..62500c5116
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Object Pie">
+ <menu_item_call
+ enabled="false"
+ label="Touch"
+ name="Object Touch">
+ <menu_item_call.on_click
+ function="Object.Touch" />
+ <menu_item_call.on_enable
+ function="Object.EnableTouch"
+ name="EnableTouch"
+ parameter="Touch" />
+ </menu_item_call>
+ <menu_item_call
+ label="Edit"
+ name="Edit...">
+ <menu_item_call.on_click
+ function="Object.Edit" />
+ <menu_item_call.on_visible
+ function="EnableEdit"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Build"
+ name="Build">
+ <menu_item_call.on_click
+ function="Object.Edit" />
+ <menu_item_call.on_visible
+ function="VisibleBuild"/>
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Open"
+ name="Open">
+ <menu_item_call.on_click
+ function="Object.Open" />
+ <menu_item_call.on_enable
+ function="Object.EnableOpen" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Sit Here"
+ name="Object Sit">
+ <menu_item_call.on_click
+ function="Object.SitOrStand" />
+ <menu_item_call.on_enable
+ function="Object.EnableSitOrStand"
+ name="EnableSitOrStand"
+ parameter="Sit Here,Stand Up" />
+ </menu_item_call>
+ <menu_item_call
+ label="Object Profile"
+ name="Object Inspect">
+ <menu_item_call.on_click
+ function="Object.Inspect" />
+ <menu_item_call.on_enable
+ function="Object.EnableInspect" />
+ </menu_item_call>
+<menu_item_separator layout="topleft" />
+ <context_menu
+ label="Put On &gt;"
+ name="Put On" >
+ <menu_item_call
+ enabled="false"
+ label="Wear"
+ name="Wear">
+ <menu_item_call.on_click
+ function="Object.AttachToAvatar" />
+ <menu_item_call.on_enable
+ function="Object.EnableWear" />
+ </menu_item_call>
+ <context_menu
+ label="Attach &gt;"
+ name="Object Attach" />
+ <context_menu
+ label="Attach HUD &gt;"
+ name="Object Attach HUD" />
+ </context_menu>
+ <context_menu
+ label="Remove &gt;"
+ name="Remove">
+ <menu_item_call
+ enabled="false"
+ label="Take"
+ name="Pie Object Take">
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake" />
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"
+ parameter="Buy,Take" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Report Abuse"
+ name="Report Abuse...">
+ <menu_item_call.on_click
+ function="Object.ReportAbuse" />
+ <menu_item_call.on_enable
+ function="Object.EnableReportAbuse" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Block"
+ name="Object Mute">
+ <menu_item_call.on_click
+ function="Object.Mute" />
+ <menu_item_call.on_enable
+ function="Object.EnableMute" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Return"
+ name="Return...">
+ <menu_item_call.on_click
+ function="Object.Return" />
+ <menu_item_call.on_enable
+ function="Object.EnableReturn" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Delete"
+ name="Delete">
+ <menu_item_call.on_click
+ function="Object.Delete" />
+ <menu_item_call.on_enable
+ function="Object.EnableDelete" />
+ </menu_item_call>
+ </context_menu>
+ <menu_item_separator layout="topleft" />
+ <menu_item_call
+ enabled="false"
+ label="Take Copy"
+ name="Take Copy">
+ <menu_item_call.on_click
+ function="Tools.TakeCopy" />
+ <menu_item_call.on_enable
+ function="Tools.EnableTakeCopy" />
+ </menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Pay"
+ name="Pay...">
+ <menu_item_call.on_click
+ function="PayObject" />
+ <menu_item_call.on_enable
+ function="EnablePayObject" />
+</menu_item_call>
+ <menu_item_call
+ enabled="false"
+ label="Buy"
+ name="Buy...">
+ <menu_item_call.on_click
+ function="Object.Buy" />
+ <menu_item_call.on_enable
+ function="Object.EnableBuy" />
+ </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index a41d492624..034f685ee9 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -114,7 +114,7 @@
width="82"
tool_tip="Shows/hides gestures">
<gesture_combo_box.drop_down_button
- pad_right="10"
+ pad_right="10"
use_ellipses="true" />
</gesture_combo_box>
</layout_panel>
@@ -126,7 +126,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
- min_width="4"
+ min_width="4"
name="DUMMY"
top="0"
width="4"/>
@@ -168,7 +168,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
- min_width="4"
+ min_width="4"
name="DUMMY"
top="0"
width="4"/>
@@ -211,7 +211,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
- min_width="4"
+ min_width="4"
name="DUMMY"
top="0"
width="4"/>
@@ -243,7 +243,7 @@
<layout_panel
mouse_opaque="false"
follows="left|right"
- height="28"
+ height="29"
layout="topleft"
top="0"
name="chiclet_list_panel"
@@ -251,24 +251,24 @@
min_width="180"
user_resize="false"
auto_resize="true">
-<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
+<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->
<chiclet_panel
mouse_opaque="false"
follows="left|right"
height="23"
layout="topleft"
- left="0"
+ left="1"
min_width="180"
name="chiclet_list"
- top="4"
+ top="6"
chiclet_padding="4"
scrolling_offset="40"
width="189">
<button
auto_resize="true"
follows="right"
- height="23"
+ height="29"
image_selected="SegmentedBtn_Left_Off"
image_unselected="SegmentedBtn_Left_Off"
image_hover_selected="SegmentedBtn_Left_Over"
@@ -278,14 +278,16 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
image_overlay="Arrow_Small_Left"
layout="topleft"
name="chicklet_left_scroll_button"
+ scale_image="true"
tab_stop="false"
- top="0"
+ top="-2"
+ right_pad="2"
visible="false"
- width="20" />
+ width="7" />
<button
auto_resize="true"
follows="right"
- height="23"
+ height="29"
image_selected="SegmentedBtn_Right_Off"
image_unselected="SegmentedBtn_Right_Off"
image_hover_selected="SegmentedBtn_Right_Over"
@@ -295,10 +297,11 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
image_overlay="Arrow_Small_Right"
layout="topleft"
name="chicklet_right_scroll_button"
+ scale_image="true"
tab_stop="false"
- top="0"
+ top="-2"
visible="false"
- width="20" />
+ width="7" />
</chiclet_panel>
</layout_panel>
<icon
@@ -309,7 +312,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
image_name="spacer24.tga"
layout="topleft"
left="0"
- min_width="4"
+ min_width="4"
top="0"
width="5"/>
<layout_panel
@@ -320,18 +323,18 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
min_height="28"
top="0"
name="im_well_panel"
- width="34"
- min_width="34"
+ width="35"
+ min_width="35"
user_resize="false">
<chiclet_im_well
- flash_period="0.3"
+ flash_period="0.3"
follows="right"
height="23"
layout="topleft"
left="0"
name="im_well"
top="4"
- width="34">
+ width="35">
<!--
Emulate 4 states of button by background images, see detains in EXT-3147. The same should be for notification_well button
xml attribute Description
@@ -342,21 +345,22 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
-->
<button
auto_resize="true"
- flash_color="EmphasisColor"
+ flash_color="Yellow"
follows="right"
halign="center"
height="23"
- image_overlay="Notices_Unread"
- image_overlay_alignment="center"
- image_pressed="WellButton_Lit"
- image_pressed_selected="WellButton_Lit_Selected"
- image_selected="PushButton_Selected_Press"
+ image_overlay="Unread_IM"
+ image_overlay_alignment="center"
+ image_pressed="WellButton_Lit_Selected"
+ image_pressed_selected="WellButton_Lit"
+ image_selected="WellButton_Lit"
+ label_color="Black"
left="0"
max_displayed_count="99"
name="Unread IM messages"
pad_left="0"
pad_right="0"
- width="34" >
+ width="35" >
<button.init_callback
function="Button.SetDockableFloaterToggle"
parameter="im_well_window" />
@@ -370,9 +374,10 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
layout="topleft"
min_height="28"
top="0"
+ left_pad="4"
name="notification_well_panel"
- width="34"
- min_width="34"
+ width="35"
+ min_width="35"
user_resize="false">
<chiclet_notification
flash_period="0.25"
@@ -383,23 +388,24 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
max_displayed_count="99"
name="notification_well"
top="4"
- width="34">
+ width="35">
<button
- image_selected="PushButton_Selected_Press"
- image_pressed="WellButton_Lit"
- image_pressed_selected="WellButton_Lit_Selected"
+ bottom_pad="3"
+ image_selected="WellButton_Lit"
+ image_pressed="WellButton_Lit_Selected"
+ image_pressed_selected="WellButton_Lit "
auto_resize="true"
halign="center"
height="23"
follows="right"
- flash_color="EmphasisColor"
- left="0"
+ flash_color="Yellow"
+ label_color="Black"
+ left="5"
name="Unread"
image_overlay="Notices_Unread"
- image_overlay_alignment="center"
- pad_right="0"
- pad_left="0"
- width="34" >
+ image_overlay_alignment="center"
+ pad_right="5"
+ width="35" >
<button.init_callback
function="Button.SetDockableFloaterToggle"
parameter="notification_well_window" />
@@ -413,7 +419,7 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
height="10"
image_name="spacer24.tga"
layout="topleft"
- min_width="4"
+ min_width="4"
right="-1"
top="0"
width="4"/>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index c9db75b5d8..6187b8f1e2 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -33,21 +33,31 @@ name="login_html"
start_url=""
top="0"
height="600"
- width="996" />
-<panel
+ width="980" />
+<layout_stack
follows="left|bottom|right"
name="login_widgets"
layout="topleft"
+orientation="horizontal"
top="519"
width="996"
- height="80">
+height="80">
+<layout_panel
+auto_resize="false"
+follows="left|bottom"
+name="login"
+layout="topleft"
+width="695"
+min_width="695"
+user_resize="false"
+height="80">
<text
follows="left|bottom"
font="SansSerifSmall"
height="16"
-left="20"
name="first_name_text"
top="20"
+left="20"
width="150">
First name:
</text>
@@ -145,7 +155,7 @@ name="Typeregionname" value="" />
<combo_box
allow_text_entry="true"
font="SansSerifSmall"
- follows="left|bottom"
+ follows="left|right|bottom"
height="23"
layout="topleft"
top_pad="2"
@@ -164,14 +174,20 @@ width="135"
name="connect_btn"
top="35"
width="90" />
- <text
+</layout_panel>
+<layout_panel
+follows="right|bottom"
+name="links"
+width="200"
+min_width="200"
+user_resize="false"
+height="80">
+ <text
follows="right|bottom"
font="SansSerifSmall"
-text_color="EmphasisColor"
halign="right"
height="16"
top="12"
-left_pad="5"
right="-10"
name="create_new_account_text"
width="180">
@@ -183,7 +199,9 @@ font="SansSerifSmall"
text_color="EmphasisColor"
halign="right"
height="16"
-name="forgot_password_text" top_pad="12"
+name="forgot_password_text"
+top_pad="12"
+right="-10"
width="180">
Forgot your name or password?
</text>
@@ -195,6 +213,7 @@ halign="right"
height="16"
name="login_help"
top_pad="2"
+right="-10"
width="180">
Need help logging in? </text>
<!-- <text
@@ -208,5 +227,6 @@ top_pad="2"
word_wrap="true">
[VERSION]
</text>-->
-</panel>
+ </layout_panel>
+</layout_stack>
</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 9990215dfd..4353b306cd 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -17,7 +17,7 @@
text_pad_left="14"
follows="left|top|right"
height="23"
- label="Filter"
+ label="Filter Inventory"
layout="topleft"
left="15"
max_length="300"
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
index 24c40b32fb..5217ab3571 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
@@ -17,7 +17,7 @@
height="15"
left="10"
name="home_label">
- Home URL:
+ Home Page:
</text>
<text
visible="false"
@@ -27,7 +27,7 @@
left_delta="64"
text_color="red"
name="home_fails_whitelist_label">
- (This URL does not pass the specified whitelist)
+ (This page does not pass the specified whitelist)
</text>
<line_editor
bottom_delta="-24"
@@ -37,7 +37,7 @@
height="20"
left="10"
name="home_url"
- tool_tip="The home URL for this media source"
+ tool_tip="The home page for this media source"
width="340">
<!-- <line_editor.commit_callback
function="Media.CommitHomeURL"/> -->
@@ -69,7 +69,7 @@
height="15"
left="10"
name="current_url_label">
- Current URL:
+ Current Page:
</text>
<text
bottom_delta="-20"
@@ -79,7 +79,7 @@
height="20"
left="10"
name="current_url"
- tool_tip="The current URL for this media source"
+ tool_tip="The current page for this media source"
value=""
width="340" />
<button
@@ -93,35 +93,6 @@
<button.commit_callback
function="Media.ResetCurrentUrl"/>
</button>
- <text
- bottom_delta="-5"
- follows="top|left"
- height="15"
- left="10"
- name="controls_label">
- Controls:
- </text>
- <combo_box
- allow_text_entry="false"
- bottom_delta="-20"
- follows="left|top"
- height="18"
- left="10"
- max_chars="20"
- name="controls"
- width="120">
- <combo_item
- name="Standard"
- value="Standard">
- Standard
- </combo_item>
- <combo_item
- name="Mini"
- value="Mini">
- Mini
- </combo_item>
- </combo_box>
-
<check_box
bottom_delta="-25"
enabled="true"
@@ -135,7 +106,6 @@
name="auto_loop"
radio_style="false"
width="150" />
-
<check_box
bottom_delta="-25"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
index 85f534c4a3..b5c2371510 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
@@ -4,13 +4,42 @@
enabled="true"
follows="left|top|right|bottom"
height="500"
- label="Controls"
+ label="Customize"
left="102"
mouse_opaque="true"
name="Media settings for controls"
help_topic = "media_settings_controls"
width="365">
+ <text
+ bottom_delta="-50"
+ follows="top|left"
+ height="15"
+ left="10"
+ name="controls_label">
+ Controls:
+ </text>
+ <combo_box
+ allow_text_entry="false"
+ bottom_delta="0"
+ follows="left|top"
+ height="18"
+ left="100"
+ max_chars="20"
+ name="controls"
+ width="120">
+ <combo_item
+ name="Standard"
+ value="Standard">
+ Standard
+ </combo_item>
+ <combo_item
+ name="Mini"
+ value="Mini">
+ Mini
+ </combo_item>
+ </combo_box>
+
<text
bottom_delta="-50"
follows="top|left"
@@ -27,7 +56,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Disable Navigation &amp; Interactivity"
+ label="Allow Navigation &amp; Interactivity"
left="30"
mouse_opaque="true"
name="perms_owner_interact"
@@ -41,7 +70,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Hide Control Bar"
+ label="Show Control Bar"
left="30"
mouse_opaque="true"
name="perms_owner_control"
@@ -74,7 +103,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Disable Navigation &amp; Interactivity"
+ label="Allow Navigation &amp; Interactivity"
left="30"
mouse_opaque="true"
name="perms_group_interact"
@@ -88,7 +117,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Hide Control Bar"
+ label="Show Control Bar"
left="30"
mouse_opaque="true"
name="perms_group_control"
@@ -111,7 +140,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Disable Navigation &amp; Interactivity"
+ label="Allow Navigation &amp; Interactivity"
left="30"
mouse_opaque="true"
name="perms_anyone_interact"
@@ -125,7 +154,7 @@
font="SansSerifSmall"
height="16"
initial_value="false"
- label="Hide Control Bar"
+ label="Show Control Bar"
left="30"
mouse_opaque="true"
name="perms_anyone_control"
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_security.xml b/indra/newview/skins/default/xui/en/panel_media_settings_security.xml
index 6e82713f06..1f41a0d284 100644
--- a/indra/newview/skins/default/xui/en/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/en/panel_media_settings_security.xml
@@ -48,7 +48,7 @@
bottom_delta="0"
text_color="0.4 0.4 0.4 1.0"
name="home_url_fails_some_items_in_whitelist">
- Entries that the home URL fails against are marked:
+ Entries that the home page fails against are marked:
</text>
<button
bottom_delta="-36"
@@ -82,7 +82,7 @@
left="30"
text_color="0.6 0.0 0.0 1.0"
name="home_url_fails_whitelist">
-Warning: the home URL specified in the General tab
+Warning: the home page specified in the General tab
fails to pass this whitelist. It has been disabled
until a valid entry has been added.
</text>
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 07f9095640..d4a6c7f3b3 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -22,7 +22,7 @@ background_visible="true"
height="23"
layout="topleft"
left="15"
- label="Filter"
+ label="Filter Places"
max_length="300"
name="Filter"
top="3"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 78b90eefcc..405ff02836 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -284,7 +284,7 @@ Avatars:
enabled_control="EnableVoiceChat"
control_name="PushToTalkToggle"
height="20"
- label="Toggle mode for microphone when I press the speak trigger key:"
+ label="Toggle mode for microphone when I press the Speak trigger key:"
layout="topleft"
left="30"
name="push_to_talk_toggle_check"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 5332007baf..d8e3f4ccfb 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -348,23 +348,24 @@
label="Input/Output devices"
layout="topleft"
left="30"
- top="270"
+ top="262"
name="device_settings_btn"
width="190">
</button>
<panel
- background_visible="true"
+ background_visible="false"
bg_alpha_color="DkGray"
visiblity_control="ShowDeviceSettings"
border="false"
follows="top|left"
- height="145"
+ height="120"
label="Device Settings"
layout="topleft"
left="0"
name="device_settings_panel"
class="panel_voice_device_settings"
- width="501">
+ width="501"
+ top="285">
<panel.string
name="default_text">
Default
@@ -397,8 +398,33 @@
left="165"
max_chars="128"
name="voice_input_device"
- top_pad="0"
+ top_pad="-2"
width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="165"
+ name="My volume label"
+ top_pad="5"
+ width="200">
+ My volume:
+ </text>
+ <slider_bar
+ control_name="AudioLevelMic"
+ follows="left|top"
+ height="17"
+ increment="0.05"
+ initial_value="1.0"
+ layout="topleft"
+ left="160"
+ max_val="2"
+ name="mic_volume_slider"
+ tool_tip="Change the volume using this slider"
+ top_pad="-2"
+ width="220" />
<text
type="string"
text_color="EmphasisColor"
@@ -408,7 +434,7 @@
layout="topleft"
left_pad="5"
name="wait_text"
- top_delta="5"
+ top_delta="0"
width="110">
Please wait
</text>
@@ -417,7 +443,7 @@
layout="topleft"
left_delta="0"
name="bar0"
- top_delta="-5"
+ top_delta="0"
width="20" />
<locate
height="20"
@@ -453,7 +479,7 @@
left="80"
name="speaker_icon"
mouse_opaque="false"
- top_pad="4"
+ top_pad="-8"
visible="true"
width="22" />
<text
@@ -475,7 +501,7 @@
left="165"
max_chars="128"
name="voice_output_device"
- top_pad="0"
+ top_pad="-2"
width="200" />
</panel>
</panel>
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 b4f72a48bc..bffb28d16e 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
@@ -9,7 +9,7 @@
width="800">
<string name="control_background_image_name">Inspector_Background</string>
<string name="skip_step">0.2</string>
- <string name="min_width">400</string>
+ <string name="min_width">300</string>
<string name="min_height">120</string>
<string name="zoom_near_padding">1.0</string>
<string name="zoom_medium_padding">1.25</string>
@@ -190,7 +190,7 @@
layout="topleft"
top="14"
min_width="22"
- width="22">
+ width="24">
<button
image_overlay="Play_Off"
image_disabled="PushButton_Disabled"
@@ -200,6 +200,8 @@
hover_glow_amount="0.15"
layout="topleft"
tool_tip = "Play media"
+ left_delta="2"
+ top="4"
height="22"
min_width="22"
width="22">
@@ -214,7 +216,7 @@
layout="topleft"
top="18"
min_width="22"
- width="22">
+ width="24">
<button
image_overlay="Pause_Off"
image_disabled="PushButton_Disabled"
@@ -224,6 +226,9 @@
hover_glow_amount="0.15"
layout="topleft"
height="22"
+ width="22"
+ left_delta="-1"
+ top="4"
tool_tip = "Pause media">
<button.commit_callback
function="MediaCtrl.Pause" />
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 d006fd0700..e04af2bad6 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -39,26 +39,38 @@
top="4"
width="18" />
<button
- follows="top|right"
- height="25"
- image_overlay="BackArrow_Off"
- layout="topleft"
- name="back_btn"
- picture_style="true"
- right="-5"
- tab_stop="false"
- top="0"
- width="25" />
+ follows="top|right"
+ height="23"
+ image_overlay="BackArrow_Off"
+ layout="topleft"
+ left="10"
+ name="back_btn"
+ tab_stop="false"
+ top="0"
+ width="23" />
+ <text
+ follows="top|left|right"
+ font="SansSerifHugeBold"
+ height="26"
+ layout="topleft"
+ left_pad="10"
+ name="title"
+ text_color="white"
+ top="0"
+ use_ellipses="true"
+ value="Item Properties"
+ width="275" />
<panel
follows="all"
height="500"
label=""
layout="topleft"
- left="5"
+ left="10"
help_topic=""
top="30"
- border="1"
- width="313">
+ width="313"
+ background_visible="true"
+ bg_alpha_color="DkGray2">
<text
type="string"
length="1"
@@ -98,7 +110,7 @@
border_style="line"
border_thickness="1"
follows="left|top|right"
- height="16"
+ height="23"
layout="topleft"
left_delta="78"
max_length="127"
@@ -109,7 +121,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="LabelCreatorTitle"
@@ -121,7 +133,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left_delta="78"
name="LabelCreatorName"
@@ -131,7 +143,7 @@
</text>
<button
follows="top|right"
- height="16"
+ height="23"
label="Profile..."
layout="topleft"
left_delta="144"
@@ -142,7 +154,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="LabelOwnerTitle"
@@ -154,7 +166,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left_delta="78"
name="LabelOwnerName"
@@ -164,7 +176,7 @@
</text>
<button
follows="top|right"
- height="16"
+ height="23"
label="Profile..."
layout="topleft"
left_delta="144"
@@ -175,7 +187,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left="10"
name="LabelAcquiredTitle"
@@ -187,7 +199,7 @@
type="string"
length="1"
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left_delta="78"
name="LabelAcquiredDate"
@@ -199,7 +211,7 @@
type="string"
length="1"
follows="left|top"
- height="10"
+ height="23"
layout="topleft"
left="10"
name="OwnerLabel"
@@ -208,7 +220,7 @@
You:
</text>
<check_box
- height="16"
+ height="23"
label="Edit"
layout="topleft"
left_pad="5"
@@ -216,7 +228,7 @@
top_delta="0"
width="78" />
<check_box
- height="16"
+ height="23"
label="Copy"
layout="topleft"
left_delta="0"
@@ -224,7 +236,7 @@
top_pad="5"
width="88" />
<check_box
- height="16"
+ height="23"
label="Resell"
layout="topleft"
left_delta="0"
@@ -480,31 +492,4 @@
Price: L$
</text-->
</panel>
- <panel
- height="25"
- layout="bottomright"
- help_topic="button_tab"
- name="button_panel"
- left="5"
- bottom="5"
- width="313">
- <button
- follows="bottom|right"
- height="25"
- label="Cancel"
- layout="topleft"
- name="cancel_btn"
- right="-1"
- top="0"
- width="70" />
- <button
- follows="bottom|right"
- height="25"
- label="Save"
- layout="topleft"
- name="save_btn"
- left_pad="-135"
- top="0"
- width="60" />
- </panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 79b7bef765..2f50c5ee6c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -460,7 +460,7 @@ Returns the rotation of detected object number (returns &lt;0,0,0,1&gt; if numbe
</string>
<string name="LSLTipText_llDetectedGroup" translate="false">
integer llDetectedGroup(integer number)
-Returns an integer that is a boolean representing if the detected object or avatar is in the same group that the prim containing the script is set to
+Returns TRUE if detected object is part of same group as owner
</string>
<string name="LSLTipText_llDetectedLinkNumber" translate="false">
integer llDetectedLinkNumber(integer number)
@@ -2112,6 +2112,10 @@ 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="MuteAvatar">Block</string>
+ <string name="UnmuteObject">Unblock</string>
+ <string name="UnmuteAvatar">Unblock</string>
<string name="AddLandmarkNavBarMenu">Add to My Landmarks...</string>
<string name="EditLandmarkNavBarMenu">Edit my Landmark...</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 28ed560543..d7aa71a441 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -18,5 +18,6 @@
font="SansSerifSmall"
hover_glow_amount="0.15"
halign="center"
+ pad_bottom="2"
scale_image="true">
</button>
diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml
index 19fb520b44..85d0c633af 100644
--- a/indra/newview/skins/default/xui/en/widgets/floater.xml
+++ b/indra/newview/skins/default/xui/en/widgets/floater.xml
@@ -9,8 +9,6 @@
background_visible="true"
background_opaque="false"
header_height="25"
- top="0"
- left="0"
close_image="Icon_Close_Foreground"
restore_image="Icon_Restore_Foreground"
minimize_image="Icon_Minimize_Foreground"
diff --git a/indra/newview/tests/llcapabilitylistener_test.cpp b/indra/newview/tests/llcapabilitylistener_test.cpp
index 4759c7dc91..ca7d02fc68 100644
--- a/indra/newview/tests/llcapabilitylistener_test.cpp
+++ b/indra/newview/tests/llcapabilitylistener_test.cpp
@@ -50,6 +50,7 @@
#include "tests/networkio.h"
#include "tests/commtest.h"
#include "tests/wrapllerrs.h"
+#include "message.h"
#include "stringize.h"
#if defined(LL_WINDOWS)