summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llaudio/llstreamingaudio_fmod.cpp2
-rw-r--r--indra/llrender/llfontgl.cpp21
-rw-r--r--indra/llrender/llfontgl.h8
-rw-r--r--indra/llui/llcheckboxctrl.cpp2
-rw-r--r--indra/llui/llconsole.cpp2
-rw-r--r--indra/llui/lldockablefloater.cpp9
-rw-r--r--indra/llui/lldockablefloater.h17
-rw-r--r--indra/llui/lldockcontrol.cpp12
-rw-r--r--indra/llui/llflatlistview.cpp3
-rw-r--r--indra/llui/lllayoutstack.h3
-rw-r--r--indra/llui/llmenubutton.h1
-rw-r--r--indra/llui/llmenugl.cpp55
-rw-r--r--indra/llui/lltextbase.cpp7
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp13
-rw-r--r--indra/newview/app_settings/ignorable_dialogs.xml15
-rw-r--r--indra/newview/app_settings/settings.xml24
-rw-r--r--indra/newview/llagent.cpp6
-rw-r--r--indra/newview/llagentwearables.cpp39
-rw-r--r--indra/newview/llappearancemgr.cpp30
-rw-r--r--indra/newview/llappviewer.cpp3
-rw-r--r--indra/newview/llavataractions.cpp28
-rw-r--r--indra/newview/llcallfloater.cpp35
-rw-r--r--indra/newview/llcallfloater.h3
-rw-r--r--indra/newview/llchathistory.cpp6
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp26
-rw-r--r--indra/newview/llchatitemscontainerctrl.h1
-rw-r--r--indra/newview/lldateutil.cpp7
-rw-r--r--indra/newview/llfavoritesbar.cpp2
-rw-r--r--indra/newview/llfloaterabout.cpp17
-rw-r--r--indra/newview/llfloatercamera.cpp25
-rw-r--r--indra/newview/llfloatercamera.h4
-rw-r--r--indra/newview/llfloaterpreference.cpp20
-rw-r--r--indra/newview/llfloaterpreference.h1
-rw-r--r--indra/newview/llfloatertools.cpp48
-rw-r--r--indra/newview/llfloaterworldmap.cpp67
-rw-r--r--indra/newview/llfloaterworldmap.h5
-rw-r--r--indra/newview/llgrouplist.cpp5
-rw-r--r--indra/newview/llhudtext.cpp4
-rw-r--r--indra/newview/llimfloater.cpp15
-rw-r--r--indra/newview/llimview.cpp62
-rw-r--r--indra/newview/llimview.h1
-rw-r--r--indra/newview/llinspect.h2
-rw-r--r--indra/newview/llinspectavatar.cpp27
-rw-r--r--indra/newview/llinspectobject.cpp20
-rw-r--r--indra/newview/llnearbychat.cpp4
-rw-r--r--indra/newview/llnotificationofferhandler.cpp4
-rw-r--r--indra/newview/llpanelgroup.cpp9
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp6
-rw-r--r--indra/newview/llpaneloutfitsinventory.cpp72
-rw-r--r--indra/newview/llpaneloutfitsinventory.h2
-rw-r--r--indra/newview/llpanelpicks.cpp14
-rw-r--r--indra/newview/llpanelpicks.h1
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp104
-rw-r--r--indra/newview/llpanelprimmediacontrols.h2
-rw-r--r--indra/newview/llpanelteleporthistory.cpp7
-rw-r--r--indra/newview/llsidepanelappearance.cpp5
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp6
-rw-r--r--indra/newview/llsyswellwindow.cpp12
-rw-r--r--indra/newview/llsyswellwindow.h4
-rw-r--r--indra/newview/lltoast.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp3
-rw-r--r--indra/newview/llviewermedia.cpp98
-rw-r--r--indra/newview/llviewermedia.h5
-rw-r--r--indra/newview/llviewermedia_streamingaudio.cpp2
-rw-r--r--indra/newview/llviewermenu.cpp19
-rw-r--r--indra/newview/llviewermessage.cpp3
-rw-r--r--indra/newview/llviewerparcelmedia.cpp25
-rw-r--r--indra/newview/llviewerparcelmgr.cpp24
-rw-r--r--indra/newview/llviewertexture.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp2
-rw-r--r--indra/newview/llvoicechannel.cpp21
-rw-r--r--indra/newview/llvoiceclient.cpp10
-rw-r--r--indra/newview/llvoiceclient.h1
-rw-r--r--indra/newview/skins/default/colors.xml5
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.pngbin0 -> 250 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml3
-rw-r--r--indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.pngbin9506 -> 56298 bytes
-rw-r--r--indra/newview/skins/default/xui/en/favorites_bar_button.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml45
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_pay_object.xml31
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_notecard.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_widgets.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/en/inspect_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_add.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_picks_plus.xml3
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml136
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_control_panel.xml164
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml213
-rw-r--r--indra/newview/skins/default/xui/en/panel_instant_message.xml3
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_me.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml229
-rw-r--r--indra/newview/skins/default/xui/en/panel_notes.xml20
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml245
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml204
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml6
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_script.xml2
-rw-r--r--indra/newview/tests/lldateutil_test.cpp10
-rw-r--r--indra/viewer_components/login/lllogin.cpp7
-rw-r--r--indra/viewer_components/login/tests/lllogin_test.cpp14
118 files changed, 1604 insertions, 1006 deletions
diff --git a/indra/llaudio/llstreamingaudio_fmod.cpp b/indra/llaudio/llstreamingaudio_fmod.cpp
index a71a87203c..a4620fa13c 100644
--- a/indra/llaudio/llstreamingaudio_fmod.cpp
+++ b/indra/llaudio/llstreamingaudio_fmod.cpp
@@ -174,7 +174,7 @@ void LLStreamingAudio_FMOD::update()
break;
case -3:
// failed to open, file not found, perhaps
- llwarns << "InternetSteam - failed to open" << llendl;
+ llwarns << "InternetStream - failed to open" << llendl;
stop();
return;
case -4:
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 37a28ac721..1de1d6ded4 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -472,7 +472,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars
}
// Returns the max number of complete characters from text (up to max_chars) that can be drawn in max_pixels
-S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, BOOL end_on_word_boundary) const
+S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars, EWordWrapStyle end_on_word_boundary) const
{
if (!wchars || !wchars[0] || max_chars == 0)
{
@@ -562,9 +562,24 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
drawn_x = cur_x;
}
- if( clip && end_on_word_boundary && (start_of_last_word != 0) )
+ if( clip )
{
- i = start_of_last_word;
+ switch (end_on_word_boundary)
+ {
+ case ONLY_WORD_BOUNDARIES:
+ i = start_of_last_word;
+ break;
+ case WORD_BOUNDARY_IF_POSSIBLE:
+ if (start_of_last_word != 0)
+ {
+ i = start_of_last_word;
+ }
+ break;
+ default:
+ case ANYWHERE:
+ // do nothing
+ break;
+ }
}
return i;
}
diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h
index ea8eee7690..dfa4cf8ce5 100644
--- a/indra/llrender/llfontgl.h
+++ b/indra/llrender/llfontgl.h
@@ -122,7 +122,13 @@ public:
// The following are called often, frequently with large buffers, so do not use a string interface
// Returns the max number of complete characters from text (up to max_chars) that can be drawn in max_pixels
- S32 maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars = S32_MAX, BOOL end_on_word_boundary = FALSE) const;
+ typedef enum e_word_wrap_style
+ {
+ ONLY_WORD_BOUNDARIES,
+ WORD_BOUNDARY_IF_POSSIBLE,
+ ANYWHERE
+ } EWordWrapStyle ;
+ S32 maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_chars = S32_MAX, EWordWrapStyle end_on_word_boundary = ANYWHERE) const;
// Returns the index of the first complete characters from text that can be drawn in max_pixels
// given that the character at start_pos should be the last character (or as close to last as possible).
diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp
index cd10dfdb1c..3d32157406 100644
--- a/indra/llui/llcheckboxctrl.cpp
+++ b/indra/llui/llcheckboxctrl.cpp
@@ -107,8 +107,8 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p)
{
tbparams.font(p.font);
}
+ tbparams.text_color( p.enabled() ? p.text_enabled_color() : p.text_disabled_color() );
mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams);
-
addChild(mLabel);
// Button
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index c9090d388d..e08d93b232 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -330,7 +330,7 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, const LLFontGL* font, b
skip_chars = 0;
}
- U32 drawable = font->maxDrawableChars(mParagraphText.c_str()+paragraph_offset, screen_width, line_end - paragraph_offset, TRUE);
+ U32 drawable = font->maxDrawableChars(mParagraphText.c_str()+paragraph_offset, screen_width, line_end - paragraph_offset, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
if (drawable != 0)
{
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index 6a5b475134..74438b184a 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -57,6 +57,7 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl,
, mOverlapsScreenChannel(false)
{
init(this);
+ mUseTongue = true;
}
LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
@@ -64,6 +65,14 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDock
LLFloater(key, params), mDockControl(dockControl), mUniqueDocking(uniqueDocking)
{
init(this);
+ mUseTongue = true;
+}
+
+LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
+ bool useTongue, const LLSD& key, const Params& params) :
+ LLFloater(key, params), mDockControl(dockControl), mUseTongue(useTongue), mUniqueDocking(uniqueDocking)
+{
+ init(this);
}
LLDockableFloater::~LLDockableFloater()
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index ae4f99e205..2b1ce99ae2 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -62,6 +62,20 @@ public:
*/
LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
const LLSD& key, const Params& params = getDefaultParams());
+
+ /**
+ * Constructor.
+ * @param dockControl a pointer to the doc control instance
+ * @param uniqueDocking - a flag defines is docking should work as tab(at one
+ * moment only one docked floater can be shown).
+ * @praram useTongue - a flag defines is dock tongue should be used.
+ * @params key a floater key.
+ * @params params a floater parameters
+ */
+ LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
+ bool useTongue, const LLSD& key,
+ const Params& params = getDefaultParams());
+
virtual ~LLDockableFloater();
static LLHandle<LLFloater> getInstanceHandle() { return sInstanceHandle; }
@@ -104,6 +118,7 @@ public:
virtual void setOverlapsScreenChannel(bool overlaps) { mOverlapsScreenChannel = overlaps; }
bool getUniqueDocking() { return mUniqueDocking; }
+ bool getUseTongue() { return mUseTongue; }
private:
/**
* Provides unique of dockable floater.
@@ -125,6 +140,8 @@ private:
*/
bool mUniqueDocking;
+ bool mUseTongue;
+
bool mOverlapsScreenChannel;
};
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 1c3c8449c5..0d8e54aa48 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -182,12 +182,12 @@ void LLDockControl::moveDockable()
LLRect rootRect;
mGetAllowedRectCallback(rootRect);
- bool unique_docking = false;
+ bool use_tongue = false;
LLDockableFloater* dockable_floater =
dynamic_cast<LLDockableFloater*> (mDockableFloater);
if (dockable_floater != NULL)
{
- unique_docking = dockable_floater->getUniqueDocking();
+ use_tongue = dockable_floater->getUseTongue();
}
LLRect dockableRect = mDockableFloater->calcScreenRect();
@@ -218,7 +218,7 @@ void LLDockControl::moveDockable()
x = dockRect.getCenterX() - dockableRect.getWidth() / 2;
y = dockRect.mTop + dockableRect.getHeight();
// unique docking used with dock tongue, so add tongue height o the Y coordinate
- if (unique_docking)
+ if (use_tongue)
{
y += mDockTongue->getHeight();
}
@@ -287,15 +287,15 @@ void LLDockControl::forceRecalculatePosition()
void LLDockControl::drawToungue()
{
- bool unique_docking = false;
+ bool use_tongue = false;
LLDockableFloater* dockable_floater =
dynamic_cast<LLDockableFloater*> (mDockableFloater);
if (dockable_floater != NULL)
{
- unique_docking = dockable_floater->getUniqueDocking();
+ use_tongue = dockable_floater->getUseTongue();
}
- if (mEnabled && unique_docking)
+ if (mEnabled && use_tongue)
{
mDockTongue->draw(mDockTongueX, mDockTongueY);
}
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 3754d155cf..9cfc67af14 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -906,7 +906,8 @@ void LLFlatListView::notifyParentItemsRectChanged()
params["width"] = req_rect.getWidth();
params["height"] = req_rect.getHeight();
- getParent()->notifyParent(params);
+ if (getParent()) // dummy widgets don't have a parent
+ getParent()->notifyParent(params);
}
void LLFlatListView::setNoItemsCommentVisible(bool visible) const
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index cde383b047..aba35773ee 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -91,6 +91,9 @@ public:
bool getPanelMinSize(const std::string& panel_name, S32* min_widthp, S32* min_heightp);
void updateLayout(BOOL force_resize = FALSE);
+
+ S32 getPanelSpacing() const { return mPanelSpacing; }
+
static void updateClass();
protected:
diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h
index 02eb9d3806..d0e99d9f40 100644
--- a/indra/llui/llmenubutton.h
+++ b/indra/llui/llmenubutton.h
@@ -55,6 +55,7 @@ public:
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask );
void hideMenu();
+ LLMenuGL* getMenu() { return mMenu; }
protected:
friend class LLUICtrlFactory;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 2648cbf08d..527c0a1b87 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1143,37 +1143,41 @@ BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask )
if (!branch)
return LLMenuItemGL::handleKeyHere(key, mask);
- if (getMenu()->getVisible() && branch->getVisible() && key == KEY_LEFT)
+ // an item is highlighted, my menu is open, and I have an active sub menu or we are in
+ // keyboard navigation mode
+ if (getHighlight()
+ && getMenu()->isOpen()
+ && (isActive() || LLMenuGL::getKeyboardMode()))
{
- // switch to keyboard navigation mode
- LLMenuGL::setKeyboardMode(TRUE);
-
- BOOL handled = branch->clearHoverItem();
- if (branch->getTornOff())
+ if (branch->getVisible() && key == KEY_LEFT)
{
- ((LLFloater*)branch->getParent())->setFocus(FALSE);
- }
- if (handled && getMenu()->getTornOff())
- {
- ((LLFloater*)getMenu()->getParent())->setFocus(TRUE);
- }
- return handled;
- }
+ // switch to keyboard navigation mode
+ LLMenuGL::setKeyboardMode(TRUE);
- if (getHighlight() &&
- getMenu()->isOpen() &&
- key == KEY_RIGHT && !branch->getHighlightedItem())
- {
- // switch to keyboard navigation mode
- LLMenuGL::setKeyboardMode(TRUE);
+ BOOL handled = branch->clearHoverItem();
+ if (branch->getTornOff())
+ {
+ ((LLFloater*)branch->getParent())->setFocus(FALSE);
+ }
+ if (handled && getMenu()->getTornOff())
+ {
+ ((LLFloater*)getMenu()->getParent())->setFocus(TRUE);
+ }
+ return handled;
+ }
- LLMenuItemGL* itemp = branch->highlightNextItem(NULL);
- if (itemp)
+ if (key == KEY_RIGHT && !branch->getHighlightedItem())
{
- return TRUE;
+ // switch to keyboard navigation mode
+ LLMenuGL::setKeyboardMode(TRUE);
+
+ LLMenuItemGL* itemp = branch->highlightNextItem(NULL);
+ if (itemp)
+ {
+ return TRUE;
+ }
}
}
-
return LLMenuItemGL::handleKeyHere(key, mask);
}
@@ -1431,7 +1435,7 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask)
{
BOOL menu_open = getBranch()->getVisible();
// don't do keyboard navigation of top-level menus unless in keyboard mode, or menu expanded
- if (getHighlight() && getMenu()->getVisible() && (isActive() || LLMenuGL::getKeyboardMode()))
+ if (getHighlight() && getMenu()->isOpen() && (isActive() || LLMenuGL::getKeyboardMode()))
{
if (key == KEY_LEFT)
{
@@ -2836,6 +2840,7 @@ BOOL LLMenuGL::handleScrollWheel( S32 x, S32 y, S32 clicks )
return TRUE;
}
+
void LLMenuGL::draw( void )
{
if (mNeedsArrange)
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 7447a984ac..5ebf49c488 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2509,10 +2509,15 @@ S32 LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 lin
// set max characters to length of segment, or to first newline
max_chars = llmin(max_chars, last_char - (mStart + segment_offset));
+ // if no character yet displayed on this line, don't require word wrapping since
+ // we can just move to the next line, otherwise insist on it so we make forward progress
+ LLFontGL::EWordWrapStyle word_wrap_style = (line_offset == 0)
+ ? LLFontGL::WORD_BOUNDARY_IF_POSSIBLE
+ : LLFontGL::ONLY_WORD_BOUNDARIES;
S32 num_chars = mStyle->getFont()->maxDrawableChars(text.c_str() + segment_offset + mStart,
(F32)num_pixels,
max_chars,
- TRUE);
+ word_wrap_style);
if (num_chars == 0
&& line_offset == 0
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 4b6da552cf..02f0045800 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -84,6 +84,7 @@ private:
INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued
INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed
INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws
+ INIT_STATE_WAIT_COMPLETE, // Waiting for first real navigate complete event
INIT_STATE_RUNNING // All initialization gymnastics are complete.
};
int mBrowserWindowId;
@@ -122,7 +123,7 @@ private:
}
}
- if ( (mInitState == INIT_STATE_RUNNING) && mNeedsUpdate )
+ if ( (mInitState > INIT_STATE_WAIT_REDRAW) && mNeedsUpdate )
{
const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
@@ -295,7 +296,7 @@ private:
{
if(mInitState == INIT_STATE_WAIT_REDRAW)
{
- setInitState(INIT_STATE_RUNNING);
+ setInitState(INIT_STATE_WAIT_COMPLETE);
}
// flag that an update is required
@@ -328,6 +329,14 @@ private:
{
if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
{
+ if(mInitState < INIT_STATE_RUNNING)
+ {
+ setInitState(INIT_STATE_RUNNING);
+
+ // Clear the history, so the "back" button doesn't take you back to "about:blank".
+ LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId);
+ }
+
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
message.setValue("uri", event.getEventUri());
message.setValueS32("result_code", event.getIntValue());
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index ab18febccc..e825f13e82 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -177,21 +177,10 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>FirstStreamingMusic</key>
+ <key>FirstStreamingMedia</key>
<map>
<key>Comment</key>
- <string>Enables FirstStreamingMusic warning dialog</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
- <key>FirstStreamingVideo</key>
- <map>
- <key>Comment</key>
- <string>Enables FirstStreamingVideo warning dialog</string>
+ <string>Enables FirstStreamingMedia warning dialog</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index e24e1a8605..d83959b80e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -276,7 +276,7 @@
<key>Value</key>
<real>0.5</real>
</map>
- <key>AudioSteamingMedia</key>
+ <key>AudioStreamingMedia</key>
<map>
<key>Comment</key>
<string>Enable streaming</string>
@@ -408,6 +408,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>AvalinePhoneSeparator</key>
+ <map>
+ <key>Comment</key>
+ <string>Separator of phone parts to have Avaline numbers human readable in Voice Control Panel</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>-</string>
+ </map>
<key>AvatarAxisDeadZone0</key>
<map>
<key>Comment</key>
@@ -4809,6 +4820,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>MyOutfitsAutofill</key>
+ <map>
+ <key>Comment</key>
+ <string>Always autofill My Outfits from library when empty (else happens just once).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NearMeRange</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index d2a56f65dd..5e2e374df6 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2812,7 +2812,7 @@ void LLAgent::endAnimationUpdateUI()
LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- LLFloaterCamera::toPrevModeIfInAvatarViewMode();
+ LLFloaterCamera::onLeavingMouseLook();
// Only pop if we have pushed...
if (TRUE == mViewsPushed)
@@ -2915,10 +2915,6 @@ void LLAgent::endAnimationUpdateUI()
// JC - Added for always chat in third person option
gFocusMgr.setKeyboardFocus(NULL);
- //Making sure Camera Controls floater is in the right state
- //when entering Mouse Look using wheel scrolling
- LLFloaterCamera::updateIfNotInAvatarViewMode();
-
LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);
mViewsPushed = TRUE;
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 540dc1c539..29530c9c05 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -116,6 +116,39 @@ BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE;
using namespace LLVOAvatarDefines;
+// HACK: For EXT-3923: Pants item shows in inventory with skin icon and messes with "current look"
+// Some db items are corrupted, have inventory flags = 0, implying wearable type = shape, even though
+// wearable type stored in asset is some other value.
+// Calling this function whenever a wearable is added to increase visibility if this problem
+// turns up in other inventories.
+void checkWearableAgainstInventory(LLWearable *wearable)
+{
+ if (wearable->getItemID().isNull())
+ return;
+
+ // Check for wearable type consistent with inventory item wearable type.
+ LLViewerInventoryItem *item = gInventory.getItem(wearable->getItemID());
+ if (item)
+ {
+ if (!item->isWearableType())
+ {
+ llwarns << "wearable associated with non-wearable item" << llendl;
+ }
+ if (item->getWearableType() != wearable->getType())
+ {
+ llwarns << "type mismatch: wearable " << wearable->getName()
+ << " has type " << wearable->getType()
+ << " but inventory item " << item->getName()
+ << " has type " << item->getWearableType() << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "wearable inventory item not found" << wearable->getName()
+ << " itemID " << wearable->getItemID().asString() << llendl;
+ }
+}
+
void LLAgentWearables::dump()
{
llinfos << "LLAgentWearablesDump" << llendl;
@@ -657,6 +690,7 @@ LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index)
void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearable *wearable)
{
+
LLWearable *old_wearable = getWearable(type,index);
if (!old_wearable)
{
@@ -680,6 +714,7 @@ void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearab
wearable_vec[index] = wearable;
old_wearable->setLabelUpdated();
wearableUpdated(wearable);
+ checkWearableAgainstInventory(wearable);
}
}
@@ -695,6 +730,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl
{
mWearableDatas[type].push_back(wearable);
wearableUpdated(wearable);
+ checkWearableAgainstInventory(wearable);
return mWearableDatas[type].size()-1;
}
return MAX_WEARABLES_PER_TYPE;
@@ -875,7 +911,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs
// If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account)
// then auto-populate outfits from the library into the My Outfits folder.
- if (LLInventoryModel::getIsFirstTimeInViewer2())
+ if (LLInventoryModel::getIsFirstTimeInViewer2() || gSavedSettings.getBOOL("MyOutfitsAutofill"))
{
gAgentWearables.populateMyOutfitsFolder();
}
@@ -1706,6 +1742,7 @@ void LLAgentWearables::setWearableFinal(LLInventoryItem* new_item, LLWearable* n
mWearableDatas[type].push_back(new_wearable);
llinfos << "Added additional wearable for type " << type
<< " size is now " << mWearableDatas[type].size() << llendl;
+ checkWearableAgainstInventory(new_wearable);
}
else
{
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 25f1accb22..1150d84feb 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -723,14 +723,30 @@ void LLAppearanceManager::updateAppearanceFromCOF()
LLDynamicArray<LLFoundData*> found_container;
for(S32 i = 0; i < wear_items.count(); ++i)
{
- found = new LLFoundData(wear_items.get(i)->getLinkedUUID(), // Wear the base item, not the link
- wear_items.get(i)->getAssetUUID(),
- wear_items.get(i)->getName(),
- wear_items.get(i)->getType());
- holder->mFoundList.push_front(found);
- found_container.put(found);
+ LLViewerInventoryItem *item = wear_items.get(i);
+ LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
+ if (item && linked_item)
+ {
+ found = new LLFoundData(linked_item->getUUID(),
+ linked_item->getAssetUUID(),
+ linked_item->getName(),
+ linked_item->getType());
+ holder->mFoundList.push_front(found);
+ found_container.put(found);
+ }
+ else
+ {
+ if (!item)
+ {
+ llwarns << "attempt to wear a null item " << llendl;
+ }
+ else if (!linked_item)
+ {
+ llwarns << "attempt to wear a broken link " << item->getName() << llendl;
+ }
+ }
}
- for(S32 i = 0; i < wear_items.count(); ++i)
+ for(S32 i = 0; i < found_container.count(); ++i)
{
holder->append = false;
found = found_container.get(i);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index becc30832d..e0356bc091 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1929,8 +1929,7 @@ bool LLAppViewer::initConfiguration()
LLFirstUse::addConfigVariable("FirstSandbox");
LLFirstUse::addConfigVariable("FirstFlexible");
LLFirstUse::addConfigVariable("FirstDebugMenus");
- LLFirstUse::addConfigVariable("FirstStreamingMusic");
- LLFirstUse::addConfigVariable("FirstStreamingVideo");
+ LLFirstUse::addConfigVariable("FirstStreamingMedia");
LLFirstUse::addConfigVariable("FirstSculptedPrim");
LLFirstUse::addConfigVariable("FirstVoice");
LLFirstUse::addConfigVariable("FirstMedia");
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 2a8c55e5db..c3deb602ee 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -168,8 +168,28 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee)
// static
void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids)
{
- if (ids.size() > 0)
- handle_lure(ids);
+ if (ids.size() == 0)
+ return;
+
+ handle_lure(ids);
+
+ // Record the offer.
+ for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++)
+ {
+ LLUUID target_id = *it;
+ std::string target_name;
+
+ gCacheName->getFullName(target_id, target_name);
+
+ LLSD args;
+ args["TO_NAME"] = target_name;
+
+ LLSD payload;
+ payload["from_id"] = target_id;
+ payload["SESSION_NAME"] = target_name;
+ payload["SUPPRESS_TOAST"] = true;
+ LLNotificationsUtil::add("TeleportOfferSent", args, payload);
+ }
}
// static
@@ -595,9 +615,11 @@ void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::stri
LLSD args;
args["TO_NAME"] = target_name;
+
LLSD payload;
+ payload["from_id"] = target_id;
payload["SESSION_NAME"] = target_name;
- payload["SUPPRES_TOST"] = true;
+ payload["SUPPRESS_TOAST"] = true;
LLNotificationsUtil::add("FriendshipOffered", args, payload);
}
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index a402f59fa1..1468f6d584 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -47,6 +47,7 @@
#include "llfloaterreg.h"
#include "llparticipantlist.h"
#include "llspeakers.h"
+#include "lltextutil.h"
#include "lltransientfloatermgr.h"
#include "llviewerwindow.h"
#include "llvoicechannel.h"
@@ -76,6 +77,12 @@ public:
return rv;
}
+ void setName(const std::string& name)
+ {
+ const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name);
+ LLAvatarListItem::setName(formatted_phone);
+ }
+
void setSpeakerId(const LLUUID& id) { mSpeakingIndicator->setSpeakerId(id); }
};
@@ -270,6 +277,11 @@ void LLCallFloater::updateSession()
case IM_NOTHING_SPECIAL:
case IM_SESSION_P2P_INVITE:
mVoiceType = VC_PEER_TO_PEER;
+
+ if (!im_session->mOtherParticipantIsAvatar)
+ {
+ mVoiceType = VC_PEER_TO_PEER_AVALINE;
+ }
break;
case IM_SESSION_CONFERENCE_START:
case IM_SESSION_GROUP_START:
@@ -321,16 +333,13 @@ void LLCallFloater::updateSession()
void LLCallFloater::refreshParticipantList()
{
- bool non_avatar_caller = false;
- if (VC_PEER_TO_PEER == mVoiceType)
+ bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType;
+
+ if (non_avatar_caller)
{
LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSpeakerManager->getSessionID());
- non_avatar_caller = !session->mOtherParticipantIsAvatar;
- if (non_avatar_caller)
- {
- mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID);
- mNonAvatarCaller->setName(session->mName);
- }
+ mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID);
+ mNonAvatarCaller->setName(session->mName);
}
mNonAvatarCaller->setVisible(non_avatar_caller);
@@ -390,9 +399,17 @@ void LLCallFloater::updateTitle()
title = getString("title_nearby");
break;
case VC_PEER_TO_PEER:
+ case VC_PEER_TO_PEER_AVALINE:
{
+ title = voice_channel->getSessionName();
+
+ if (VC_PEER_TO_PEER_AVALINE == mVoiceType)
+ {
+ title = LLTextUtil::formatPhoneNumber(title);
+ }
+
LLStringUtil::format_map_t args;
- args["[NAME]"] = voice_channel->getSessionName();
+ args["[NAME]"] = title;
title = getString("title_peer_2_peer", args);
}
break;
diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h
index 8aba93fc43..2b40225906 100644
--- a/indra/newview/llcallfloater.h
+++ b/indra/newview/llcallfloater.h
@@ -88,7 +88,8 @@ private:
VC_LOCAL_CHAT,
VC_GROUP_CHAT,
VC_AD_HOC_CHAT,
- VC_PEER_TO_PEER
+ VC_PEER_TO_PEER,
+ VC_PEER_TO_PEER_AVALINE
}EVoiceControls;
typedef enum e_speaker_state
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 21cadda6e3..dac3280575 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -593,6 +593,12 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
mEditor->appendText(message, FALSE, style_params);
}
mEditor->blockUndo();
+
+ // automatically scroll to end when receiving chat from myself
+ if (chat.mFromID == gAgentID)
+ {
+ mEditor->setCursorAndScrollToEnd();
+ }
}
void LLChatHistory::draw()
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 92df281307..60a37ac4af 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -253,10 +253,32 @@ void LLNearbyChatToastPanel::onMouseEnter (S32 x, S32 y, MASK mask)
BOOL LLNearbyChatToastPanel::handleMouseDown (S32 x, S32 y, MASK mask)
{
+ return LLPanel::handleMouseDown(x,y,mask);
+}
+
+BOOL LLNearbyChatToastPanel::handleMouseUp (S32 x, S32 y, MASK mask)
+{
if(mSourceType != CHAT_SOURCE_AGENT)
- return LLPanel::handleMouseDown(x,y,mask);
+ return LLPanel::handleMouseUp(x,y,mask);
+
+ LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false);
+ S32 local_x = x - text_box->getRect().mLeft;
+ S32 local_y = y - text_box->getRect().mBottom;
+
+ //if text_box process mouse up (ussually this is click on url) - we didn't show nearby_chat.
+ if (text_box->pointInView(local_x, local_y) )
+ {
+ if (text_box->handleMouseUp(local_x,local_y,mask) == TRUE)
+ return TRUE;
+ else
+ {
+ LLFloaterReg::showInstance("nearby_chat",LLSD());
+ return FALSE;
+ }
+ }
+
LLFloaterReg::showInstance("nearby_chat",LLSD());
- return LLPanel::handleMouseDown(x,y,mask);
+ return LLPanel::handleMouseUp(x,y,mask);
}
void LLNearbyChatToastPanel::setHeaderVisibility(EShowItemHeader e)
diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h
index 0a85c52401..f4b8655054 100644
--- a/indra/newview/llchatitemscontainerctrl.h
+++ b/indra/newview/llchatitemscontainerctrl.h
@@ -68,6 +68,7 @@ public:
void onMouseLeave (S32 x, S32 y, MASK mask);
void onMouseEnter (S32 x, S32 y, MASK mask);
BOOL handleMouseDown (S32 x, S32 y, MASK mask);
+ BOOL handleMouseUp (S32 x, S32 y, MASK mask);
virtual BOOL postBuild();
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 10b7935caf..abb2fdeb9a 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -44,15 +44,18 @@ static S32 DAYS_PER_MONTH_LEAP[] =
static S32 days_from_month(S32 year, S32 month)
{
+ llassert_always(1 <= month);
+ llassert_always(month <= 12);
+
if (year % 4 == 0
&& year % 100 != 0)
{
// leap year
- return DAYS_PER_MONTH_LEAP[month];
+ return DAYS_PER_MONTH_LEAP[month - 1];
}
else
{
- return DAYS_PER_MONTH_NOLEAP[month];
+ return DAYS_PER_MONTH_NOLEAP[month - 1];
}
}
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 6ae6b4877a..4103ccf175 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -644,7 +644,7 @@ LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode()
bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode);
if (!success)
{
- llwarns << "Unable to read xml file with button for Favorites Bar: favorites_bar_button.xml" << llendl;
+ llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl;
buttonXMLNode = NULL;
}
return buttonXMLNode;
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index e80499688e..aa343b2f69 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -167,20 +167,21 @@ BOOL LLFloaterAbout::postBuild()
// Now build the various pieces
support << getString("AboutHeader", args);
- if (info.has("COMPILER"))
- {
- support << "\n\n" << getString("AboutCompiler", args);
- }
if (info.has("REGION"))
{
support << "\n\n" << getString("AboutPosition", args);
}
support << "\n\n" << getString("AboutSystem", args);
+ support << "\n";
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
- support << "\n\n" << getString("AboutDriver", args);
+ support << "\n" << getString("AboutDriver", args);
+ }
+ support << "\n" << getString("AboutLibs", args);
+ if (info.has("COMPILER"))
+ {
+ support << "\n" << getString("AboutCompiler", args);
}
- support << "\n\n" << getString("AboutLibs", args);
if (info.has("PACKETS_IN"))
{
support << '\n' << getString("AboutTraffic", args);
@@ -193,11 +194,11 @@ BOOL LLFloaterAbout::postBuild()
support_widget->blockUndo();
// Fix views
- support_widget->setCursorPos(0);
support_widget->setEnabled(FALSE);
+ support_widget->startOfDoc();
- credits_widget->setCursorPos(0);
credits_widget->setEnabled(FALSE);
+ credits_widget->startOfDoc();
return TRUE;
}
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 764aff68c9..9496e94780 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -144,6 +144,11 @@ void LLPanelCameraZoom::onSliderValueChanged()
mSavedSliderVal = val;
}
+void activate_camera_tool()
+{
+ LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+};
+
//
// Member functions
//
@@ -151,7 +156,7 @@ void LLPanelCameraZoom::onSliderValueChanged()
/*static*/ bool LLFloaterCamera::inFreeCameraMode()
{
LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
- if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA)
+ if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)
{
return true;
}
@@ -177,27 +182,17 @@ void LLFloaterCamera::update()
}
-/*static*/ void LLFloaterCamera::updateIfNotInAvatarViewMode()
-{
- LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
- if (floater_camera && !floater_camera->inAvatarViewMode())
- {
- floater_camera->update();
- }
-}
-
-
void LLFloaterCamera::toPrevMode()
{
switchMode(mPrevMode);
}
-/*static*/ void LLFloaterCamera::toPrevModeIfInAvatarViewMode()
+/*static*/ void LLFloaterCamera::onLeavingMouseLook()
{
LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance();
- if (floater_camera && floater_camera->inAvatarViewMode())
+ if (floater_camera && floater_camera->inFreeCameraMode())
{
- floater_camera->toPrevMode();
+ activate_camera_tool();
}
}
@@ -325,7 +320,7 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)
break;
case CAMERA_CTRL_MODE_FREE_CAMERA:
- LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
+ activate_camera_tool();
break;
case CAMERA_CTRL_MODE_AVATAR_VIEW:
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 5d44b4944d..45d5e9a845 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -61,7 +61,7 @@ public:
/* callback for camera presets changing */
static void onClickCameraPresets(const LLSD& param);
- static void toPrevModeIfInAvatarViewMode();
+ static void onLeavingMouseLook();
/** resets current camera mode to orbit mode */
static void resetCameraMode();
@@ -69,8 +69,6 @@ public:
/* determines actual mode and updates ui */
void update();
- static void updateIfNotInAvatarViewMode();
-
virtual void onOpen(const LLSD& key);
virtual void onClose(bool app_quitting);
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 11dd48056c..d0716f67b8 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -325,6 +325,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
mCommitCallbackRegistrar.add("Pref.AutoDetectAspect", boost::bind(&LLFloaterPreference::onCommitAutoDetectAspect, this));
+ mCommitCallbackRegistrar.add("Pref.ParcelMediaAutoPlayEnable", boost::bind(&LLFloaterPreference::onCommitParcelMediaAutoPlayEnable, this));
mCommitCallbackRegistrar.add("Pref.onSelectAspectRatio", boost::bind(&LLFloaterPreference::onKeystrokeAspectRatio, this));
mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
@@ -986,6 +987,25 @@ void LLFloaterPreference::onCommitAutoDetectAspect()
}
}
+void LLFloaterPreference::onCommitParcelMediaAutoPlayEnable()
+{
+ BOOL autoplay = getChild<LLCheckBoxCtrl>("autoplay_enabled")->get();
+
+ gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, autoplay);
+
+ lldebugs << "autoplay now = " << int(autoplay) << llendl;
+
+ if (autoplay)
+ {
+ // autoplay toggle has gone from FALSE to TRUE; ensure that
+ // the media system is thus actually turned on too.
+ gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+ llinfos << "autoplay turned on, turned all media subsystems on" << llendl;
+ }
+}
+
void LLFloaterPreference::refresh()
{
LLPanel::refresh();
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 74a53d673c..b2bc34231d 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -132,6 +132,7 @@ public:
// void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator);
void onCommitAutoDetectAspect();
+ void onCommitParcelMediaAutoPlayEnable();
void applyResolution();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index babef5b63d..9cae6f0ebd 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -1221,10 +1221,10 @@ void LLFloaterTools::getMediaState()
mNeedMediaTitle = false;
}
- childSetEnabled("media_tex", bool_has_media & editable);
- childSetEnabled( "edit_media", bool_has_media & editable );
- childSetEnabled( "delete_media", bool_has_media & editable );
- childSetEnabled( "add_media", ( ! bool_has_media ) & editable );
+ childSetEnabled("media_tex", bool_has_media && editable);
+ childSetEnabled( "edit_media", bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable );
+ childSetEnabled( "delete_media", bool_has_media && editable );
+ childSetEnabled( "add_media", ( ! bool_has_media ) && editable );
// TODO: display a list of all media on the face - use 'identical' flag
}
else // not all face has media but at least one does.
@@ -1252,7 +1252,7 @@ void LLFloaterTools::getMediaState()
}
childSetEnabled("media_tex", TRUE);
- childSetEnabled( "edit_media", TRUE);
+ childSetEnabled( "edit_media", LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo);
childSetEnabled( "delete_media", TRUE);
childSetEnabled( "add_media", FALSE );
}
@@ -1423,7 +1423,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getControls();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_controls(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_controls, value_u8 );
@@ -1446,7 +1446,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getFirstClickInteract();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_first_click(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_first_click, value_bool );
@@ -1469,7 +1469,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getHomeURL();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_home_url(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_home_url, value_str );
@@ -1492,7 +1492,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getCurrentURL();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_current_url(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_current_url, value_str );
@@ -1516,7 +1516,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getAutoZoom();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_auto_zoom(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_auto_zoom, value_bool );
@@ -1539,7 +1539,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getAutoPlay();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_auto_play(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_auto_play, value_bool );
@@ -1563,7 +1563,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getAutoScale();;
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_auto_scale(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_auto_scale, value_bool );
@@ -1586,7 +1586,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getAutoLoop();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_auto_loop(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_auto_loop, value_bool );
@@ -1609,7 +1609,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getWidthPixels();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_width_pixels(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_width_pixels, value_int );
@@ -1632,7 +1632,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getHeightPixels();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_height_pixels(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_height_pixels, value_int );
@@ -1655,7 +1655,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getAltImageEnable();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_enable_alt_image(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_enable_alt_image, value_bool );
@@ -1678,7 +1678,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_OWNER );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_owner_interact(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_perms_owner_interact, value_bool );
@@ -1701,7 +1701,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_OWNER );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_owner_control(default_media_data);
identical = selected_objects ->getSelectedTEValue( &func_perms_owner_control, value_bool );
@@ -1724,7 +1724,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_GROUP );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_group_interact(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_perms_group_interact, value_bool );
@@ -1747,7 +1747,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_GROUP );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_group_control(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_perms_group_control, value_bool );
@@ -1770,7 +1770,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsInteract() & LLMediaEntry::PERM_ANYONE );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_anyone_interact(default_media_data);
identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func_perms_anyone_interact, value_bool );
@@ -1793,7 +1793,7 @@ void LLFloaterTools::updateMediaSettings()
return 0 != ( mMediaEntry.getPermsControl() & LLMediaEntry::PERM_ANYONE );
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_perms_anyone_control(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_perms_anyone_control, value_bool );
@@ -1816,7 +1816,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getWhiteListEnable();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_whitelist_enable(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_whitelist_enable, value_bool );
@@ -1839,7 +1839,7 @@ void LLFloaterTools::updateMediaSettings()
return mMediaEntry.getWhiteList();
};
- const LLMediaEntry & mMediaEntry;
+ const LLMediaEntry &mMediaEntry;
} func_whitelist_urls(default_media_data);
identical = selected_objects->getSelectedTEValue( &func_whitelist_urls, value_vector_str );
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 98f9171237..0781d8ed06 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -100,8 +100,6 @@ enum EPanDirection
// Values in pixels per region
static const F32 ZOOM_MAX = 128.f;
-static const F32 SIM_COORD_DEFAULT = 128.f;
-
//---------------------------------------------------------------------------
// Globals
//---------------------------------------------------------------------------
@@ -189,7 +187,8 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
mInventory(NULL),
mInventoryObserver(NULL),
mFriendObserver(NULL),
- mCompletingRegionName(""),
+ mCompletingRegionName(),
+ mCompletingRegionPos(),
mWaitingForTracker(FALSE),
mIsClosing(FALSE),
mSetToUserPosition(TRUE),
@@ -205,7 +204,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
mCommitCallbackRegistrar.add("WMap.AvatarCombo", boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this));
mCommitCallbackRegistrar.add("WMap.Landmark", boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this));
mCommitCallbackRegistrar.add("WMap.SearchResult", boost::bind(&LLFloaterWorldMap::onCommitSearchResult, this));
- mCommitCallbackRegistrar.add("WMap.CommitLocation", boost::bind(&LLFloaterWorldMap::onCommitLocation, this));
mCommitCallbackRegistrar.add("WMap.GoHome", boost::bind(&LLFloaterWorldMap::onGoHome, this));
mCommitCallbackRegistrar.add("WMap.Teleport", boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this));
mCommitCallbackRegistrar.add("WMap.ShowTarget", boost::bind(&LLFloaterWorldMap::onShowTargetBtn, this));
@@ -664,10 +662,6 @@ void LLFloaterWorldMap::updateLocation()
S32 agent_y = llround( (F32)fmod( agentPos.mdV[VY], (F64)REGION_WIDTH_METERS ) );
S32 agent_z = llround( (F32)agentPos.mdV[VZ] );
- childSetValue("spin x", LLSD(agent_x) );
- childSetValue("spin y", LLSD(agent_y) );
- childSetValue("spin z", LLSD(agent_z) );
-
// Set the current SLURL
mSLURL = LLSLURL::buildSLURL(agent_sim_name, agent_x, agent_y, agent_z);
}
@@ -699,9 +693,6 @@ void LLFloaterWorldMap::updateLocation()
F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
- childSetValue("spin x", LLSD(region_x) );
- childSetValue("spin y", LLSD(region_y) );
- childSetValue("spin z", LLSD((F32)pos_global.mdV[VZ]) );
// simNameFromPosGlobal can fail, so don't give the user an invalid SLURL
if ( gotSimName )
@@ -733,9 +724,11 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3
{
// fill in UI based on URL
gFloaterWorldMap->childSetValue("location", region_name);
- childSetValue("spin x", LLSD((F32)x_coord));
- childSetValue("spin y", LLSD((F32)y_coord));
- childSetValue("spin z", LLSD((F32)z_coord));
+
+ // Save local coords to highlight position after region global
+ // position is returned.
+ gFloaterWorldMap->mCompletingRegionPos.set(
+ (F32)x_coord, (F32)y_coord, (F32)z_coord);
// pass sim name to combo box
gFloaterWorldMap->mCompletingRegionName = region_name;
@@ -899,18 +892,6 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
}
- if (!childHasKeyboardFocus("spin x"))
- {
- childSetValue("spin x", SIM_COORD_DEFAULT);
- }
- if (!childHasKeyboardFocus("spin y"))
- {
- childSetValue("spin y", SIM_COORD_DEFAULT);
- }
- if (!childHasKeyboardFocus("spin z"))
- {
- childSetValue("spin z", 0);
- }
LLWorldMap::getInstance()->cancelTracking();
mCompletingRegionName = "";
}
@@ -1466,21 +1447,6 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
}
}
-void LLFloaterWorldMap::onCommitLocation()
-{
- LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus();
- if ( LLTracker::TRACKING_LOCATION == tracking_status)
- {
- LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
- F64 local_x = childGetValue("spin x");
- F64 local_y = childGetValue("spin y");
- F64 local_z = childGetValue("spin z");
- pos_global.mdV[VX] += -fmod(pos_global.mdV[VX], 256.0) + local_x;
- pos_global.mdV[VY] += -fmod(pos_global.mdV[VY], 256.0) + local_y;
- pos_global.mdV[VZ] = local_z;
- trackLocation(pos_global);
- }
-}
void LLFloaterWorldMap::onCommitSearchResult()
{
@@ -1503,12 +1469,19 @@ void LLFloaterWorldMap::onCommitSearchResult()
if (info->isName(sim_name))
{
LLVector3d pos_global = info->getGlobalOrigin();
- F64 local_x = childGetValue("spin x");
- F64 local_y = childGetValue("spin y");
- F64 local_z = childGetValue("spin z");
- pos_global.mdV[VX] += local_x;
- pos_global.mdV[VY] += local_y;
- pos_global.mdV[VZ] = local_z;
+
+ const F64 SIM_COORD_DEFAULT = 128.0;
+ LLVector3 pos_local(SIM_COORD_DEFAULT, SIM_COORD_DEFAULT, 0.0f);
+
+ // Did this value come from a trackURL() request?
+ if (!mCompletingRegionPos.isExactlyZero())
+ {
+ pos_local = mCompletingRegionPos;
+ mCompletingRegionPos.clear();
+ }
+ pos_global.mdV[VX] += (F64)pos_local.mV[VX];
+ pos_global.mdV[VY] += (F64)pos_local.mV[VY];
+ pos_global.mdV[VZ] = (F64)pos_local.mV[VZ];
childSetValue("location", sim_name);
trackLocation(pos_global);
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 7feebb583d..00f5e788fb 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -148,7 +148,6 @@ protected:
void updateSearchEnabled();
void onLocationFocusChanged( LLFocusableElement* ctrl );
void onLocationCommit();
- void onCommitLocation();
void onCommitSearchResult();
void cacheLandmarkPosition();
@@ -170,6 +169,10 @@ private:
LLFriendObserver* mFriendObserver;
std::string mCompletingRegionName;
+ // Local position from trackURL() request, used to select final
+ // position once region lookup complete.
+ LLVector3 mCompletingRegionPos;
+
std::string mLastRegionName;
BOOL mWaitingForTracker;
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index 3ca459a403..e75d35bea4 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -210,7 +210,6 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL
item->setGroupID(id);
item->setName(name, mNameFilter);
item->setGroupIconID(icon_id);
-// item->setContextMenu(mContextMenu);
item->childSetVisible("info_btn", false);
item->childSetVisible("profile_btn", false);
@@ -268,8 +267,9 @@ bool LLGroupList::onContextMenuItemEnable(const LLSD& userdata)
LLUUID selected_group_id = getSelectedUUID();
bool real_group_selected = selected_group_id.notNull(); // a "real" (not "none") group is selected
+ // each group including "none" can be activated
if (userdata.asString() == "activate")
- return real_group_selected && gAgent.getGroupID() != selected_group_id;
+ return gAgent.getGroupID() != selected_group_id;
return real_group_selected;
}
@@ -283,7 +283,6 @@ LLGroupListItem::LLGroupListItem()
mGroupIcon(NULL),
mGroupNameBox(NULL),
mInfoBtn(NULL),
-//mContextMenu(NULL), //TODO:
mGroupID(LLUUID::null)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml");
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 0b5da40be4..08cf86df4a 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -606,7 +606,7 @@ void LLHUDText::addLine(const LLWString &wstr, const LLColor4& color, const LLFo
U32 line_length = 0;
do
{
- S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wline.length(), TRUE);
+ S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
mTextSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), style, color));
line_length += segment_length;
}
@@ -642,7 +642,7 @@ void LLHUDText::setLabel(const LLWString &wlabel)
U32 line_length = 0;
do
{
- S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), TRUE);
+ S32 segment_length = mFontp->maxDrawableChars(iter->substr(line_length).c_str(), mUseBubble ? HUD_TEXT_MAX_WIDTH : HUD_TEXT_MAX_WIDTH_NO_BUBBLE, wstr.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
mLabelSegments.push_back(LLHUDTextSegment(iter->substr(line_length, segment_length), LLFontGL::NORMAL, mColor));
line_length += segment_length;
}
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 259f629bdd..fdc5d14d97 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -120,6 +120,12 @@ void LLIMFloater::onFocusLost()
void LLIMFloater::onFocusReceived()
{
LLIMModel::getInstance()->setActiveSessionID(mSessionID);
+
+ // return focus to the input field when active tab in the multitab container is clicked.
+ if (isChatMultiTab() && mInputEditor)
+ {
+ mInputEditor->setFocus(TRUE);
+ }
}
// virtual
@@ -618,6 +624,15 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void*
//in disconnected state IM input editor should be disabled
self->mInputEditor->setEnabled(!gDisconnected);
}
+
+ // when IM Floater is a part of the multitab container LLTabContainer set focus to the first
+ // child on tab button's mouse up. This leads input field lost focus. See EXT-3852.
+ if (isChatMultiTab())
+ {
+ // So, clear control captured mouse to prevent LLTabContainer set focus on the panel's first child.
+ // do not pass self->mInputEditor, this leads to have "Edit Text" mouse pointer wherever it is.
+ gFocusMgr.setMouseCapture(NULL);
+ }
}
// static
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 40227539d0..daabf1f717 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -82,6 +82,7 @@
#include "llfirstuse.h"
#include "llagentui.h"
+#include "lltextutil.h"
const static std::string IM_TIME("time");
const static std::string IM_TEXT("message");
@@ -92,6 +93,7 @@ const static std::string NO_SESSION("(IM Session Doesn't Exist)");
const static std::string ADHOC_NAME_SUFFIX(" Conference");
std::string LLCallDialogManager::sPreviousSessionlName = "";
+LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION;
std::string LLCallDialogManager::sCurrentSessionlName = "";
LLIMModel::LLIMSession* LLCallDialogManager::sSession = NULL;
LLVoiceChannel::EState LLCallDialogManager::sOldState = LLVoiceChannel::STATE_READY;
@@ -178,6 +180,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
if (IM_NOTHING_SPECIAL == type || IM_SESSION_P2P_INVITE == type)
{
mVoiceChannel = new LLVoiceChannelP2P(session_id, name, other_participant_id);
+ mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID);
// check if it was AVALINE call
if (!mOtherParticipantIsAvatar)
@@ -208,7 +211,10 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);
// All participants will be added to the list of people we've recently interacted with.
- mSpeakers->addListener(&LLRecentPeople::instance(), "add");
+
+ // we need to add only _active_ speakers...so comment this.
+ // may delete this later on cleanup
+ //mSpeakers->addListener(&LLRecentPeople::instance(), "add");
//we need to wait for session initialization for outgoing ad-hoc and group chat session
//correct session id for initiated ad-hoc chat will be received from the server
@@ -224,7 +230,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
{
mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID);
mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionID);
- mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID);
}
if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") )
@@ -377,6 +382,10 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from, const LLUUID& f
mSpeakers->speakerChatted(from_id);
mSpeakers->setSpeakerTyping(from_id, FALSE);
}
+
+ if( mSessionType == P2P_SESSION ||
+ mSessionType == ADHOC_SESSION)
+ LLRecentPeople::instance().add(from_id);
}
void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& history)
@@ -781,7 +790,7 @@ LLIMSpeakerMgr* LLIMModel::getSpeakerManager( const LLUUID& session_id ) const
LLIMSession* session = findIMSession(session_id);
if (!session)
{
- llwarns << "session " << session_id << "does not exist " << llendl;
+ llwarns << "session " << session_id << " does not exist " << llendl;
return NULL;
}
@@ -1360,6 +1369,13 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
sCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution
return;
}
+
+ if (sSession)
+ {
+ // store previous session type to process Avaline calls in dialogs
+ sPreviousSessionType = sSession->mSessionType;
+ }
+
sSession = session;
sSession->mVoiceChannel->setStateChangedCallback(LLCallDialogManager::onVoiceChannelStateChanged);
if(sCurrentSessionlName != session->mName)
@@ -1378,6 +1394,7 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
mCallDialogPayload["session_name"] = sSession->mName;
mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;
mCallDialogPayload["old_channel_name"] = sPreviousSessionlName;
+ mCallDialogPayload["old_session_type"] = sPreviousSessionType;
mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED;
mCallDialogPayload["disconnected_channel_name"] = sSession->mName;
mCallDialogPayload["session_type"] = sSession->mSessionType;
@@ -1407,6 +1424,7 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat
mCallDialogPayload["session_name"] = sSession->mName;
mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;
mCallDialogPayload["old_channel_name"] = sPreviousSessionlName;
+ mCallDialogPayload["old_session_type"] = sPreviousSessionType;
mCallDialogPayload["state"] = new_state;
mCallDialogPayload["disconnected_channel_name"] = sSession->mName;
mCallDialogPayload["session_type"] = sSession->mSessionType;
@@ -1421,6 +1439,11 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat
}
break;
+ case LLVoiceChannel::STATE_HUNG_UP:
+ // this state is coming before session is changed, so, put it into payload map
+ mCallDialogPayload["old_session_type"] = sSession->mSessionType;
+ break;
+
case LLVoiceChannel::STATE_CONNECTED :
ocd = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);
if (ocd)
@@ -1561,7 +1584,15 @@ void LLOutgoingCallDialog::show(const LLSD& key)
// tell the user which voice channel they are leaving
if (!mPayload["old_channel_name"].asString().empty())
{
- childSetTextArg("leaving", "[CURRENT_CHAT]", mPayload["old_channel_name"].asString());
+ bool was_avaline_call = LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["old_session_type"].asInteger();
+
+ std::string old_caller_name = mPayload["old_channel_name"].asString();
+ if (was_avaline_call)
+ {
+ old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name);
+ }
+
+ childSetTextArg("leaving", "[CURRENT_CHAT]", old_caller_name);
}
else
{
@@ -1575,10 +1606,18 @@ void LLOutgoingCallDialog::show(const LLSD& key)
}
std::string callee_name = mPayload["session_name"].asString();
+
+ LLUUID session_id = mPayload["session_id"].asUUID();
+ bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
+
if (callee_name == "anonymous")
{
callee_name = getString("anonymous");
}
+ else if (!is_avatar)
+ {
+ callee_name = LLTextUtil::formatPhoneNumber(callee_name);
+ }
setTitle(callee_name);
@@ -1728,16 +1767,21 @@ BOOL LLIncomingCallDialog::postBuild()
call_type = getString(mPayload["notify_box_type"]);
}
+
+ // check to see if this is an Avaline call
+ bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
+ childSetVisible("Start IM", is_avatar); // no IM for avaline
+
if (caller_name == "anonymous")
{
caller_name = getString("anonymous");
}
-
- setTitle(caller_name + " " + call_type);
+ else if (!is_avatar)
+ {
+ caller_name = LLTextUtil::formatPhoneNumber(caller_name);
+ }
- // check to see if this is an Avaline call
- bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
- childSetVisible("Start IM", is_avatar); // no IM for avaline
+ setTitle(caller_name + " " + call_type);
LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");
caller_name_widget->setValue(caller_name + " " + call_type);
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 11860d0efb..20d8e28392 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -475,6 +475,7 @@ public:
protected:
static std::string sPreviousSessionlName;
+ static LLIMModel::LLIMSession::SType sPreviousSessionType;
static std::string sCurrentSessionlName;
static LLIMModel::LLIMSession* sSession;
static LLVoiceChannel::EState sOldState;
diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h
index 731e99534b..a1cb9cd71c 100644
--- a/indra/newview/llinspect.h
+++ b/indra/newview/llinspect.h
@@ -55,7 +55,7 @@ public:
/// Inspectors close themselves when they lose focus
/*virtual*/ void onFocusLost();
-private:
+protected:
LLFrameTimer mCloseTimer;
LLFrameTimer mOpenTimer;
};
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index dae980feb1..72994a4371 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -93,6 +93,10 @@ public:
// Update view based on information from avatar properties processor
void processAvatarData(LLAvatarData* data);
+ // override the inspector mouse leave so timer is only paused if
+ // gear menu is not open
+ /* virtual */ void onMouseLeave(S32 x, S32 y, MASK mask);
+
private:
// Make network requests for all the data to display in this view.
// Used on construction and if avatar id changes.
@@ -112,6 +116,7 @@ private:
void onClickAddFriend();
void onClickViewProfile();
void onClickIM();
+ void onClickCall();
void onClickTeleport();
void onClickInviteToGroup();
void onClickPay();
@@ -204,6 +209,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
mCommitCallbackRegistrar.add("InspectAvatar.AddFriend", boost::bind(&LLInspectAvatar::onClickAddFriend, this));
mCommitCallbackRegistrar.add("InspectAvatar.IM",
boost::bind(&LLInspectAvatar::onClickIM, this));
+ mCommitCallbackRegistrar.add("InspectAvatar.Call", boost::bind(&LLInspectAvatar::onClickCall, this));
mCommitCallbackRegistrar.add("InspectAvatar.Teleport", boost::bind(&LLInspectAvatar::onClickTeleport, this));
mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup", boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));
mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this));
@@ -257,8 +263,6 @@ BOOL LLInspectAvatar::postBuild(void)
}
-
-
// Multiple calls to showInstance("inspect_avatar", foo) will provide different
// LLSD for foo, which we will catch here.
//virtual
@@ -382,6 +386,19 @@ void LLInspectAvatar::processAvatarData(LLAvatarData* data)
mPropertiesRequest = NULL;
}
+// For the avatar inspector, we only want to unpause the fade timer
+// if neither the gear menu or self gear menu are open
+void LLInspectAvatar::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+ LLMenuGL* gear_menu_self = getChild<LLMenuButton>("gear_self_btn")->getMenu();
+ if ( !(gear_menu && gear_menu->getVisible()) &&
+ !(gear_menu_self && gear_menu_self->getVisible()))
+ {
+ mOpenTimer.unpause();
+ }
+}
+
void LLInspectAvatar::updateModeratorPanel()
{
bool enable_moderator_panel = false;
@@ -611,6 +628,12 @@ void LLInspectAvatar::onClickIM()
closeFloater();
}
+void LLInspectAvatar::onClickCall()
+{
+ LLAvatarActions::startCall(mAvatarID);
+ closeFloater();
+}
+
void LLInspectAvatar::onClickTeleport()
{
LLAvatarActions::offerTeleport(mAvatarID);
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index cb35a287e9..dd313c528d 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -41,6 +41,7 @@
#include "llslurl.h"
#include "llviewermenu.h" // handle_object_touch(), handle_buy()
#include "llviewermedia.h"
+#include "llviewermediafocus.h"
#include "llviewerobjectlist.h" // to select the requested object
// Linden libraries
@@ -82,6 +83,10 @@ public:
// Release the selection and do other cleanup
/*virtual*/ void onClose(bool app_quitting);
+ // override the inspector mouse leave so timer is only paused if
+ // gear menu is not open
+ /* virtual */ void onMouseLeave(S32 x, S32 y, MASK mask);
+
private:
// Refresh displayed data with information from selection manager
void update();
@@ -181,7 +186,6 @@ BOOL LLInspectObject::postBuild(void)
return TRUE;
}
-
// Multiple calls to showInstance("inspect_avatar", foo) will provide different
// LLSD for foo, which we will catch here.
//virtual
@@ -214,6 +218,10 @@ void LLInspectObject::onOpen(const LLSD& data)
LLViewerObject* obj = gObjectList.findObject( mObjectID );
if (obj)
{
+ // Media focus and this code fight over the select manager.
+ // Make sure any media is unfocused before changing the selection here.
+ LLViewerMediaFocus::getInstance()->clearFocus();
+
LLSelectMgr::instance().deselectAll();
mObjectSelection = LLSelectMgr::instance().selectObjectAndFamily(obj);
@@ -562,6 +570,16 @@ void LLInspectObject::updateSecureBrowsing()
getChild<LLUICtrl>("secure_browsing")->setVisible(is_secure_browsing);
}
+// For the object inspector, only unpause the fade timer
+// if the gear menu is not open
+void LLInspectObject::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
+ if ( !(gear_menu && gear_menu->getVisible()))
+ {
+ mOpenTimer.unpause();
+ }
+}
void LLInspectObject::onClickBuy()
{
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 2ad82d3e8e..e7043b2d00 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -63,7 +63,7 @@
static const S32 RESIZE_BAR_THICKNESS = 3;
LLNearbyChat::LLNearbyChat(const LLSD& key)
- : LLDockableFloater(NULL, false, key)
+ : LLDockableFloater(NULL, false, false, key)
,mChatHistory(NULL)
{
@@ -137,7 +137,7 @@ std::string appendTime()
time_t utc_time;
utc_time = time_corrected();
std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:["
- +LLTrans::getString("TimeMin")+"] ";
+ +LLTrans::getString("TimeMin")+"]";
LLSD substitution;
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index dd66a6c507..fad0c6a91e 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -112,8 +112,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
LLHandlerUtil::spawnIMSession(name, from_id);
}
- if (notification->getPayload().has("SUPPRES_TOST")
- && notification->getPayload()["SUPPRES_TOST"])
+ if (notification->getPayload().has("SUPPRESS_TOAST")
+ && notification->getPayload()["SUPPRESS_TOAST"])
{
LLNotificationsUtil::cancel(notification);
}
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index fff2575893..94de17c17d 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -413,10 +413,13 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
if(tab_land->getDisplayChildren())
tab_land->changeOpenClose(tab_land->getDisplayChildren());
}
+
+ LLGroupData agent_gdatap;
+ bool is_member = gAgent.getGroupData(mID,agent_gdatap);
- tab_roles->canOpenClose(true);
- tab_notices->canOpenClose(true);
- tab_land->canOpenClose(true);
+ tab_roles->canOpenClose(is_member);
+ tab_notices->canOpenClose(is_member);
+ tab_land->canOpenClose(is_member);
getChild<LLUICtrl>("group_name")->setVisible(true);
getChild<LLUICtrl>("group_name_editor")->setVisible(false);
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 279818d52f..b547997e7a 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -70,9 +70,9 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E
void LLPanelChatControlPanel::updateButtons(bool is_call_started)
{
- childSetVisible("end_call_btn", is_call_started);
- childSetVisible("voice_ctrls_btn", is_call_started);
- childSetVisible("call_btn", ! is_call_started);
+ childSetVisible("end_call_btn_panel", is_call_started);
+ childSetVisible("voice_ctrls_btn_panel", is_call_started);
+ childSetVisible("call_btn_panel", ! is_call_started);
}
LLPanelChatControlPanel::~LLPanelChatControlPanel()
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 8e14074de1..29fa4b319c 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -84,6 +84,14 @@ BOOL LLPanelOutfitsInventory::postBuild()
return TRUE;
}
+// virtual
+void LLPanelOutfitsInventory::onOpen(const LLSD& key)
+{
+ // Make sure we know which tab is selected, update the filter,
+ // and update verbs.
+ onTabChange();
+}
+
void LLPanelOutfitsInventory::updateVerbs()
{
if (mParent)
@@ -94,6 +102,7 @@ void LLPanelOutfitsInventory::updateVerbs()
if (mListCommands)
{
mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor);
+ updateListCommands();
}
}
@@ -176,7 +185,6 @@ void LLPanelOutfitsInventory::onNew()
void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
{
- updateListCommands();
updateVerbs();
if (getRootFolder()->needsAutoRename() && items.size())
{
@@ -264,9 +272,11 @@ void LLPanelOutfitsInventory::updateListCommands()
{
bool trash_enabled = isActionEnabled("delete");
bool wear_enabled = isActionEnabled("wear");
+ bool make_outfit_enabled = isActionEnabled("make_outfit");
mListCommands->childSetEnabled("trash_btn", trash_enabled);
mListCommands->childSetEnabled("wear_btn", wear_enabled);
+ mListCommands->childSetEnabled("make_outfit_btn", make_outfit_enabled);
}
void LLPanelOutfitsInventory::onGearButtonClick()
@@ -303,6 +313,8 @@ void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata)
{
std::string command_name = userdata.asString();
getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
+ updateListCommands();
+ updateVerbs();
}
void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
@@ -323,6 +335,7 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
{
onWearButtonClick();
}
+ // Note: This option has been removed from the gear menu.
if (command_name == "add")
{
onAdd();
@@ -343,20 +356,22 @@ void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
{
onClipboardAction("delete");
}
+ updateListCommands();
+ updateVerbs();
}
BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
{
const std::string command_name = userdata.asString();
- if (command_name == "delete")
+ if (command_name == "delete" || command_name == "remove")
{
BOOL can_delete = FALSE;
LLFolderView *folder = getActivePanel()->getRootFolder();
if (folder)
{
- can_delete = TRUE;
std::set<LLUUID> selection_set;
folder->getSelectionList(selection_set);
+ can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
@@ -375,9 +390,9 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
LLFolderView *folder = getActivePanel()->getRootFolder();
if (folder)
{
- can_delete = TRUE;
std::set<LLUUID> selection_set;
folder->getSelectionList(selection_set);
+ can_delete = (selection_set.size() > 0);
for (std::set<LLUUID>::iterator iter = selection_set.begin();
iter != selection_set.end();
++iter)
@@ -391,10 +406,24 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
}
return FALSE;
}
+ if (command_name == "rename" ||
+ command_name == "delete_outfit")
+ {
+ return (getCorrectListenerForAction() != NULL) && hasItemsSelected();
+ }
+
+ if (command_name == "wear" ||
+ command_name == "make_outfit")
+ {
+ const BOOL is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel");
+ if (!is_my_outfits)
+ {
+ return FALSE;
+ }
+ }
+
if (command_name == "edit" ||
- command_name == "wear" ||
- command_name == "add" ||
- command_name == "remove"
+ command_name == "add"
)
{
return (getCorrectListenerForAction() != NULL);
@@ -402,6 +431,19 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
return TRUE;
}
+bool LLPanelOutfitsInventory::hasItemsSelected()
+{
+ bool has_items_selected = false;
+ LLFolderView *folder = getActivePanel()->getRootFolder();
+ if (folder)
+ {
+ std::set<LLUUID> selection_set;
+ folder->getSelectionList(selection_set);
+ has_items_selected = (selection_set.size() > 0);
+ }
+ return has_items_selected;
+}
+
bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
{
*accept = ACCEPT_NO;
@@ -425,17 +467,17 @@ bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropTy
void LLPanelOutfitsInventory::initTabPanels()
{
mTabPanels.resize(2);
+
+ LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
+ cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
+ mTabPanels[0] = cof_panel;
LLInventoryPanel *myoutfits_panel = getChild<LLInventoryPanel>("outfitslist_accordionpanel");
myoutfits_panel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, LLInventoryFilter::FILTERTYPE_CATEGORY);
myoutfits_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mTabPanels[0] = myoutfits_panel;
- mActivePanel = myoutfits_panel;
+ mTabPanels[1] = myoutfits_panel;
-
- LLInventoryPanel *cof_panel = getChild<LLInventoryPanel>("cof_accordionpanel");
- cof_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mTabPanels[1] = cof_panel;
+ mActivePanel = mTabPanels[0];
for (tabpanels_vec_t::iterator iter = mTabPanels.begin();
iter != mTabPanels.end();
@@ -479,9 +521,7 @@ void LLPanelOutfitsInventory::onTabChange()
return;
}
mActivePanel->setFilterSubString(mFilterSubString);
-
- bool is_my_outfits = (mActivePanel->getName() == "outfitslist_accordionpanel");
- mListCommands->childSetEnabled("make_outfit_btn", is_my_outfits);
+ updateVerbs();
}
LLInventoryPanel* LLPanelOutfitsInventory::getActivePanel()
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index 1e084750a0..b117311775 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -53,6 +53,7 @@ public:
virtual ~LLPanelOutfitsInventory();
/*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
void onSearchEdit(const std::string& string);
void onAdd();
@@ -114,6 +115,7 @@ protected:
BOOL isActionEnabled(const LLSD& command_name);
void onCustomAction(const LLSD& command_name);
bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
+ bool hasItemsSelected();
private:
LLPanel* mListCommands;
LLMenuGL* mMenuGearDefault;
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 751705dd57..ada65c98a4 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -411,6 +411,7 @@ BOOL LLPanelPicks::postBuild()
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar;
plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelPicks::onPlusMenuItemClicked, this, _2));
+ mEnableCallbackRegistrar.add("Picks.Plus.Enable", boost::bind(&LLPanelPicks::isActionEnabled, this, _2));
mPlusMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
return TRUE;
@@ -430,6 +431,18 @@ void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param)
}
}
+bool LLPanelPicks::isActionEnabled(const LLSD& userdata) const
+{
+ std::string command_name = userdata.asString();
+
+ if (command_name == "new_pick" && LLAgentPicksInfo::getInstance()->isPickLimitReached())
+ {
+ return false;
+ }
+
+ return true;
+}
+
void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)
{
if(!mPicksAccTab->getDisplayChildren())
@@ -652,7 +665,6 @@ void LLPanelPicks::updateButtons()
if (getAvatarId() == gAgentID)
{
- childSetEnabled(XML_BTN_NEW, !LLAgentPicksInfo::getInstance()->isPickLimitReached());
childSetEnabled(XML_BTN_DELETE, has_selected);
}
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
index 1b2e35ca46..3f757e482e 100644
--- a/indra/newview/llpanelpicks.h
+++ b/indra/newview/llpanelpicks.h
@@ -97,6 +97,7 @@ private:
void onClickMap();
void onPlusMenuItemClicked(const LLSD& param);
+ bool isActionEnabled(const LLSD& userdata) const;
void onListCommit(const LLFlatListView* f_list);
void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab);
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 5cc9c1951b..4f539f404d 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -127,7 +127,11 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
mScrollState = SCROLL_NONE;
mPanelHandle.bind(this);
+
+ mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout");
+ mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime");
}
+
LLPanelPrimMediaControls::~LLPanelPrimMediaControls()
{
}
@@ -172,6 +176,7 @@ BOOL LLPanelPrimMediaControls::postBuild()
LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding);
LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding);
LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding);
+ LLStringUtil::convertToS32(getString("top_world_view_avoid_zone"), mTopWorldViewAvoidZone);
// These are currently removed...but getChild creates a "dummy" widget.
// This class handles them missing.
@@ -207,11 +212,9 @@ BOOL LLPanelPrimMediaControls::postBuild()
}
mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this ));
- mInactiveTimeout = gSavedSettings.getF32("MediaControlTimeout");
- mControlFadeTime = gSavedSettings.getF32("MediaControlFadeTime");
-
+
mCurrentZoom = ZOOM_NONE;
- // clicks on HUD buttons do not remove keyboard focus from media
+ // clicks on buttons do not remove keyboard focus from media
setIsChrome(TRUE);
return TRUE;
}
@@ -373,8 +376,8 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeUpCtrl->setVisible(has_focus);
mVolumeDownCtrl->setVisible(has_focus);
mVolumeCtrl->setEnabled(has_focus);
- mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible > 0);
- mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible > 0);
+ mVolumeSliderCtrl->setEnabled(has_focus && shouldVolumeSliderBeVisible());
+ mVolumeSliderCtrl->setVisible(has_focus && shouldVolumeSliderBeVisible());
mWhitelistIcon->setVisible(false);
mSecureLockIcon->setVisible(false);
@@ -627,36 +630,45 @@ void LLPanelPrimMediaControls::updateShape()
update_min_max(min, max, LLVector3(screen_vert.v));
}
+ // convert screenspace bbox to pixels (in screen coords)
+ LLRect window_rect = gViewerWindow->getWorldViewRectScaled();
LLCoordGL screen_min;
- screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f);
- screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f);
+ screen_min.mX = llround((F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f);
+ screen_min.mY = llround((F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f);
LLCoordGL screen_max;
- screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (max.mV[VX] + 1.f) * 0.5f);
- screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (max.mV[VY] + 1.f) * 0.5f);
+ screen_max.mX = llround((F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f);
+ screen_max.mY = llround((F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f);
- // grow panel so that screenspace bounding box fits inside "media_region" element of HUD
- LLRect media_controls_rect;
- S32 volume_slider_height = mVolumeSliderCtrl->getRect().getHeight() - /*fudge*/ 2;
- getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect);
- media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft;
- media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom - volume_slider_height;
- media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;
- media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
+ // grow panel so that screenspace bounding box fits inside "media_region" element of panel
+ LLRect media_panel_rect;
+ // Get the height of the controls (less the volume slider)
+ S32 controls_height = mMediaControlsStack->getRect().getHeight() - mVolumeSliderCtrl->getRect().getHeight();
+ getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_panel_rect);
+ media_panel_rect.mTop += controls_height;
- // keep all parts of HUD on-screen
- LLRect window_rect = getParent()->getLocalRect();
- media_controls_rect.intersectWith(window_rect);
+ // keep all parts of panel on-screen
+ // Area of the top of the world view to avoid putting the controls
+ window_rect.mTop -= mTopWorldViewAvoidZone;
+ // Don't include "spacing" bookends on left & right of the media controls
+ window_rect.mLeft -= mLeftBookend->getRect().getWidth();
+ window_rect.mRight += mRightBookend->getRect().getWidth();
+ // Don't include the volume slider
+ window_rect.mBottom -= mVolumeSliderCtrl->getRect().getHeight();
+ media_panel_rect.intersectWith(window_rect);
// clamp to minimum size, keeping rect inside window
- S32 centerX = media_controls_rect.getCenterX();
- S32 centerY = media_controls_rect.getCenterY();
+ S32 centerX = media_panel_rect.getCenterX();
+ S32 centerY = media_panel_rect.getCenterY();
+ // Shrink screen rect by min width and height, to ensure containment
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()));
+ media_panel_rect.setCenterAndSize(centerX, centerY,
+ llmax(mMinWidth, media_panel_rect.getWidth()),
+ llmax(mMinHeight, media_panel_rect.getHeight()));
- setShape(media_controls_rect, true);
+ // Finally set the size of the panel
+ setShape(media_panel_rect, true);
// Test mouse position to see if the cursor is stationary
LLCoordWindow cursor_pos_window;
@@ -699,13 +711,13 @@ void LLPanelPrimMediaControls::updateShape()
/*virtual*/
void LLPanelPrimMediaControls::draw()
{
- F32 alpha = 1.f;
+ F32 alpha = getDrawContext().mAlpha;
if(mFadeTimer.getStarted())
{
F32 time = mFadeTimer.getElapsedTimeF32();
- alpha = llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f);
+ alpha *= llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f);
- if(mFadeTimer.getElapsedTimeF32() >= mControlFadeTime)
+ if(time >= mControlFadeTime)
{
if(mClearFaceOnFade)
{
@@ -726,27 +738,30 @@ void LLPanelPrimMediaControls::draw()
// Build rect for icon area in coord system of this panel
// Assumes layout_stack is a direct child of this panel
mMediaControlsStack->updateLayout();
- LLRect icon_area = mMediaControlsStack->getRect();
-
+
+ // adjust for layout stack spacing
+ S32 space = mMediaControlsStack->getPanelSpacing() + 1;
+ LLRect controls_bg_area = mMediaControlsStack->getRect();
+
+ controls_bg_area.mTop += space;
+
// adjust to ignore space from volume slider
- icon_area.mTop -= mVolumeSliderCtrl->getRect().getHeight();
+ controls_bg_area.mBottom += mVolumeSliderCtrl->getRect().getHeight();
// adjust to ignore space from left bookend padding
- icon_area.mLeft += mLeftBookend->getRect().getWidth();
+ controls_bg_area.mLeft += mLeftBookend->getRect().getWidth() - space;
// ignore space from right bookend padding
- icon_area.mRight -= mRightBookend->getRect().getWidth();
+ controls_bg_area.mRight -= mRightBookend->getRect().getWidth() - space;
// draw control background UI image
- mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha);
+ mBackgroundImage->draw( controls_bg_area, UI_VERTEX_COLOR % alpha);
// draw volume slider background UI image
if (mVolumeSliderCtrl->getVisible())
{
- LLRect volume_slider_rect = mVolumeSliderCtrl->getRect();
- // For some reason the rect is not in the right place (??)
- // This translates the bg to under the slider
- volume_slider_rect.translate(mVolumeSliderCtrl->getParent()->getRect().mLeft, icon_area.getHeight());
+ LLRect volume_slider_rect;
+ screenRectToLocal(mVolumeSliderCtrl->calcScreenRect(), &volume_slider_rect);
mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha);
}
@@ -1259,6 +1274,11 @@ void LLPanelPrimMediaControls::onToggleMute()
{
media_impl->setVolume(0.0);
}
+ else if (mVolumeSliderCtrl->getValueF32() == 0.0)
+ {
+ media_impl->setVolume(1.0);
+ mVolumeSliderCtrl->setValue(1.0);
+ }
else
{
media_impl->setVolume(mVolumeSliderCtrl->getValueF32());
@@ -1271,8 +1291,12 @@ void LLPanelPrimMediaControls::showVolumeSlider()
mVolumeSliderVisible++;
}
-
void LLPanelPrimMediaControls::hideVolumeSlider()
{
mVolumeSliderVisible--;
}
+
+bool LLPanelPrimMediaControls::shouldVolumeSliderBeVisible()
+{
+ return mVolumeSliderVisible > 0;
+}
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index d899ee4473..419f033628 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -111,6 +111,7 @@ private:
void onToggleMute();
void showVolumeSlider();
void hideVolumeSlider();
+ bool shouldVolumeSliderBeVisible();
static void onScrollUp(void* user_data);
static void onScrollUpHeld(void* user_data);
@@ -171,6 +172,7 @@ private:
F32 mZoomNearPadding;
F32 mZoomMediumPadding;
F32 mZoomFarPadding;
+ S32 mTopWorldViewAvoidZone;
LLUICtrl *mMediaPanelScroll;
LLButton *mScrollUpCtrl;
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 245f694ac6..65a3d9d41b 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -1045,4 +1045,11 @@ void LLTeleportHistoryPanel::onAccordionExpand(LLUICtrl* ctrl, const LLSD& param
bool expanded = param.asBoolean();
// Save accordion tab state to restore it in refresh()
setAccordionCollapsedByUser(ctrl, !expanded);
+
+ // Reset selection upon accordion being collapsed
+ // to disable "Teleport" and "Map" buttons for hidden item.
+ if (!expanded && mLastSelectedFlatlList)
+ {
+ mLastSelectedFlatlList->resetSelection();
+ }
}
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index e2ce534c4f..0aefebce10 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -166,6 +166,11 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)
refreshCurrentOutfitName();
updateVerbs();
+ if (mPanelOutfitsInventory)
+ {
+ mPanelOutfitsInventory->onOpen(key);
+ }
+
if(key.size() == 0)
return;
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 50cec3184d..0b8f66c5f3 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -215,6 +215,10 @@ void LLSidepanelTaskInfo::disableAll()
childSetVisible("E:", FALSE);
childSetVisible("N:", FALSE);
childSetVisible("F:", FALSE);
+
+ mOpenBtn->setEnabled(FALSE);
+ mPayBtn->setEnabled(FALSE);
+ mBuyBtn->setEnabled(FALSE);
}
void LLSidepanelTaskInfo::refresh()
@@ -1119,6 +1123,8 @@ void LLSidepanelTaskInfo::updateVerbs()
*/
mOpenBtn->setEnabled(enable_object_open());
+ mPayBtn->setEnabled(enable_pay_object());
+ mBuyBtn->setEnabled(enable_buy_object());
}
void LLSidepanelTaskInfo::onOpenButtonClicked()
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index a46ca1f8ac..44cf82540a 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -349,7 +349,6 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
}
// Initialize chiclet.
- mChiclet->setRect(LLRect(5, 28, 30, 3)); // *HACK: workaround for (EXT-3599)
mChiclet->setChicletSizeChangedCallback(boost::bind(&LLIMWellWindow::RowPanel::onChicletSizeChanged, this, mChiclet, _2));
mChiclet->enableCounterControl(true);
mChiclet->setCounter(chicletCounter);
@@ -410,6 +409,11 @@ BOOL LLIMWellWindow::RowPanel::handleMouseDown(S32 x, S32 y, MASK mask)
return LLPanel::handleMouseDown(x, y, mask);
}
+// virtual
+BOOL LLIMWellWindow::RowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+ return mChiclet->handleRightMouseDown(x, y, mask);
+}
/************************************************************************/
/* ObjectRowPanel implementation */
/************************************************************************/
@@ -553,6 +557,12 @@ BOOL LLIMWellWindow::ObjectRowPanel::handleMouseDown(S32 x, S32 y, MASK mask)
return LLPanel::handleMouseDown(x, y, mask);
}
+// virtual
+BOOL LLIMWellWindow::ObjectRowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask)
+{
+ return mChiclet->handleRightMouseDown(x, y, mask);
+}
+
/************************************************************************/
/* LLNotificationWellWindow implementation */
/************************************************************************/
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index 833e4dd504..ded3abcbf4 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -217,6 +217,8 @@ private:
void onMouseEnter(S32 x, S32 y, MASK mask);
void onMouseLeave(S32 x, S32 y, MASK mask);
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+
private:
static const S32 CHICLET_HPAD = 10;
void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param);
@@ -245,6 +247,8 @@ private:
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+
private:
void onClosePanel();
static EObjectType getObjectType(const LLNotificationPtr& notification);
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 96d1624cd4..110d158e2d 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -266,6 +266,8 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask)
{
mOnToastHoverSignal(this, MOUSE_ENTER);
+ setBackgroundOpaque(TRUE);
+
//toasts fading is management by Screen Channel
sendChildToFront(mHideBtn);
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 5f66e6b409..9ee848e30f 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -68,6 +68,7 @@
#include "llviewermedia.h"
#include "llvoavatarself.h"
#include "llviewermediafocus.h"
+#include "llvovolume.h"
#include "llworld.h"
#include "llui.h"
#include "llweb.h"
@@ -629,12 +630,14 @@ static bool needs_tooltip(LLSelectNode* nodep)
return false;
LLViewerObject* object = nodep->getObject();
+ LLVOVolume* vovolume = dynamic_cast<LLVOVolume*>(object);
LLViewerObject *parent = (LLViewerObject *)object->getParent();
if (object->flagHandleTouch()
|| (parent && parent->flagHandleTouch())
|| object->flagTakesMoney()
|| (parent && parent->flagTakesMoney())
|| object->flagAllowInventoryAdd()
+ || (vovolume && vovolume->hasMedia())
)
{
return true;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index bf96472e7e..7e8c8eb92e 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -170,12 +170,15 @@ public:
// accept this and go past it in the MIME type probe
// 302 means the resource can be found temporarily in a different place - added this for join.secondlife.com
// 499 is a code specifc to join.secondlife.com (????) apparently safe to ignore
- if( ((status >= 200) && (status < 300)) ||
- ((status >= 400) && (status < 499)) ||
- (status == 500) ||
- (status == 302) ||
- (status == 499)
- )
+// if( ((status >= 200) && (status < 300)) ||
+// ((status >= 400) && (status < 499)) ||
+// (status == 500) ||
+// (status == 302) ||
+// (status == 499)
+// )
+ // We now no longer check the error code returned from the probe.
+ // If we have a mime type, use it. If not, default to the web plugin and let it handle error reporting.
+ if(1)
{
// The probe was successful.
if(mime_type.empty())
@@ -987,7 +990,7 @@ void LLViewerMediaImpl::emitEvent(LLPluginClassMedia* plugin, LLViewerMediaObser
bool LLViewerMediaImpl::initializeMedia(const std::string& mime_type)
{
bool mimeTypeChanged = (mMimeType != mime_type);
- bool pluginChanged = (LLMIMETypes::implType(mMimeType) != LLMIMETypes::implType(mime_type));
+ bool pluginChanged = (LLMIMETypes::implType(mCurrentMimeType) != LLMIMETypes::implType(mime_type));
if(!mMediaSource || pluginChanged)
{
@@ -1127,6 +1130,9 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
// If we got here, we want to ignore previous init failures.
mMediaSourceFailed = false;
+ // Save the MIME type that really caused the plugin to load
+ mCurrentMimeType = mMimeType;
+
LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight);
if (media_source)
@@ -1563,6 +1569,7 @@ void LLViewerMediaImpl::unload()
mMediaURL.clear();
mMimeType.clear();
mCurrentMediaURL.clear();
+ mCurrentMimeType.clear();
}
//////////////////////////////////////////////////////////////////////////////////////////
@@ -2123,7 +2130,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
// TODO: may want a different message for this case?
LLSD args;
- args["PLUGIN"] = LLMIMETypes::implType(mMimeType);
+ args["PLUGIN"] = LLMIMETypes::implType(mCurrentMimeType);
LLNotificationsUtil::add("MediaPluginFailed", args);
}
break;
@@ -2137,7 +2144,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
resetPreviousMediaState();
LLSD args;
- args["PLUGIN"] = LLMIMETypes::implType(mMimeType);
+ args["PLUGIN"] = LLMIMETypes::implType(mCurrentMimeType);
// SJB: This is getting called every frame if the plugin fails to load, continuously respawining the alert!
//LLNotificationsUtil::add("MediaPluginFailed", args);
}
@@ -2537,76 +2544,3 @@ void LLViewerMediaImpl::setTextureID(LLUUID id)
}
}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::toggleMusicPlay(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- if (mMusicState != PLAYING)
- {
- mMusicState = PLAYING; // desired state
- if (gAudiop)
- {
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if ( parcel )
- {
- gAudiop->startInternetStream(parcel->getMusicURL());
- }
- }
- }
- else
- {
- mMusicState = STOPPED; // desired state
- if (gAudiop)
- {
- gAudiop->stopInternetStream();
- }
- }
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::toggleMediaPlay(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- if (LLViewerMedia::isMediaPaused())
- {
- LLViewerParcelMedia::start();
- }
- else if(LLViewerMedia::isMediaPlaying())
- {
- LLViewerParcelMedia::pause();
- }
- else
- {
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (parcel)
- {
- LLViewerParcelMedia::play(parcel);
- }
- }
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-void LLViewerMedia::mediaStop(void*)
-{
-// FIXME: This probably doesn't belong here
-#if 0
- LLViewerParcelMedia::stop();
-#endif
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-//static
-bool LLViewerMedia::isMusicPlaying()
-{
-// FIXME: This probably doesn't belong here
-// FIXME: make this work
- return false;
-}
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 63f461b4c4..5e4dd8ff30 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -99,14 +99,10 @@ class LLViewerMedia
static void setVolume(F32 volume);
static void updateMedia(void* dummy_arg = NULL);
- static bool isMusicPlaying();
static void initClass();
static void cleanupClass();
- static void toggleMusicPlay(void*);
- static void toggleMediaPlay(void*);
- static void mediaStop(void*);
static F32 getVolume();
static void muteListChanged();
static void setInWorldMediaDisabled(bool disabled);
@@ -324,6 +320,7 @@ public:
std::string mHomeURL;
std::string mMimeType;
std::string mCurrentMediaURL; // The most current media url from the plugin (via the "location changed" or "navigate complete" events).
+ std::string mCurrentMimeType; // The MIME type that caused the currently loaded plugin to be loaded.
S32 mLastMouseX; // save the last mouse coord we get, so when we lose capture we can simulate a mouseup at that point.
S32 mLastMouseY;
S32 mMediaWidth;
diff --git a/indra/newview/llviewermedia_streamingaudio.cpp b/indra/newview/llviewermedia_streamingaudio.cpp
index e9293ac5a4..67b051e536 100644
--- a/indra/newview/llviewermedia_streamingaudio.cpp
+++ b/indra/newview/llviewermedia_streamingaudio.cpp
@@ -62,7 +62,7 @@ void LLStreamingAudio_MediaPlugins::start(const std::string& url)
if (!mMediaPlugin) // lazy-init the underlying media plugin
{
mMediaPlugin = initializeMedia("audio/mpeg"); // assumes that whatever media implementation supports mp3 also supports vorbis.
- llinfos << "steaming audio mMediaPlugin is now " << mMediaPlugin << llendl;
+ llinfos << "streaming audio mMediaPlugin is now " << mMediaPlugin << llendl;
}
if(!mMediaPlugin)
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 5445a79137..5a9d219fac 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -62,6 +62,7 @@
#include "llfloaterreporter.h"
#include "llfloatersearch.h"
#include "llfloaterscriptdebug.h"
+#include "llfloatersnapshot.h"
#include "llfloatertools.h"
#include "llfloaterworldmap.h"
#include "llavataractions.h"
@@ -446,6 +447,8 @@ void init_menus()
// Otherwise tool tips for menu items would be overlapped by menu, since
// main view is behind of menu holder now.
gViewerWindow->getRootView()->addChild(gToolTipView);
+
+ gViewerWindow->getRootView()->addChild(gSnapshotFloaterView);
gViewerWindow->setMenuBackgroundColor(false,
LLViewerLogin::getInstance()->isInProductionGrid());
@@ -5857,8 +5860,12 @@ void confirm_replace_attachment(S32 option, void* user_data)
}
}
-bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
+void callback_attachment_drop(const LLSD& notification, const LLSD& response)
{
+ // Ensure user confirmed the drop
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option != 0) return;
+
// Called when the user clicked on an object attached to them
// and selected "Drop".
LLUUID object_id = notification["payload"]["object_id"].asUUID();
@@ -5867,7 +5874,7 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
llwarns << "handle_drop_attachment() - no object to drop" << llendl;
- return true;
+ return;
}
LLViewerObject *parent = (LLViewerObject*)object->getParent();
@@ -5884,13 +5891,13 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
if (!object)
{
llwarns << "handle_detach() - no object to detach" << llendl;
- return true;
+ return;
}
if (object->isAvatar())
{
llwarns << "Trying to detach avatar from avatar." << llendl;
- return true;
+ return;
}
// reselect the object
@@ -5898,7 +5905,7 @@ bool callback_attachment_drop(const LLSD& notification, const LLSD& response)
LLSelectMgr::getInstance()->sendDropAttachment();
- return true;
+ return;
}
class LLAttachmentDrop : public view_listener_t
@@ -7954,8 +7961,8 @@ void initialize_menus()
enable.add("Avatar.EnableMute", boost::bind(&enable_object_mute));
enable.add("Object.EnableMute", boost::bind(&enable_object_mute));
-
enable.add("Object.EnableBuy", boost::bind(&enable_buy_object));
+ commit.add("Object.ZoomIn", boost::bind(&handle_look_at_selection, "zoom"));
// Attachment pie menu
enable.add("Attachment.Label", boost::bind(&onEnableAttachmentLabel, _1, _2));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 6f9e551649..3362142807 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2644,9 +2644,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
LLNotificationsUI::LLNotificationManager::instance().onChat(
chat, LLNotificationsUI::NT_NEARBYCHAT);
- // adding temporarily so that communications window chat bar
- // works until the new chat window is ready
- chat.mText = from_name + ": " + chat.mText;
LLFloaterChat::addChat(chat, FALSE, FALSE);
}
else
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 90a7ee98b9..0f7903a7a5 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -34,6 +34,7 @@
#include "llviewerparcelmedia.h"
#include "llagent.h"
+#include "llaudioengine.h"
#include "llviewercontrol.h"
#include "llviewermedia.h"
#include "llviewerregion.h"
@@ -109,7 +110,9 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
std::string mediaCurrentUrl = std::string( parcel->getMediaCurrentURL());
// First use warning
- if( ! mediaUrl.empty() && gWarningSettings.getBOOL("FirstStreamingVideo") )
+ if( (!mediaUrl.empty() ||
+ !parcel->getMusicURL().empty())
+ && gWarningSettings.getBOOL("FirstStreamingMedia") )
{
LLNotificationsUtil::add("ParcelCanPlayMedia", LLSD(), LLSD(),
boost::bind(callback_play_media, _1, _2, parcel));
@@ -182,7 +185,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
if (!parcel) return;
- if (!gSavedSettings.getBOOL("AudioSteamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo"))
+ if (!gSavedSettings.getBOOL("AudioStreamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo"))
return;
std::string media_url = parcel->getMediaURL();
@@ -593,16 +596,28 @@ bool callback_play_media(const LLSD& notification, const LLSD& response, LLParce
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
if (option == 0)
{
+ // user has elected to automatically play media.
+ gSavedSettings.setBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING, TRUE);
gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
- if(!gSavedSettings.getBOOL("AudioSteamingMedia"))
- gSavedSettings.setBOOL("AudioSteamingMedia", TRUE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", TRUE);
+ if(!gSavedSettings.getBOOL("AudioStreamingMedia"))
+ gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
+ // play media right now, if available
LLViewerParcelMedia::play(parcel);
+ // play music right now, if available
+ if (parcel)
+ {
+ std::string music_url = parcel->getMusicURL();
+ if (gAudiop && !music_url.empty())
+ gAudiop->startInternetStream(music_url);
+ }
}
else
{
gSavedSettings.setBOOL("AudioStreamingVideo", FALSE);
+ gSavedSettings.setBOOL("AudioStreamingMusic", FALSE);
}
- gWarningSettings.setBOOL("FirstStreamingVideo", FALSE);
+ gWarningSettings.setBOOL("FirstStreamingMedia", FALSE);
return false;
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index be68a2ef42..5a5c4e7480 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -44,6 +44,7 @@
#include "llparcel.h"
#include "llsecondlifeurls.h"
#include "message.h"
+#include "llfloaterreg.h"
// Viewer includes
#include "llagent.h"
@@ -52,6 +53,7 @@
#include "llfirstuse.h"
#include "llfloaterbuyland.h"
#include "llfloatergroups.h"
+#include "llfloaternearbymedia.h"
#include "llfloatersellland.h"
#include "llfloatertools.h"
#include "llparcelselection.h"
@@ -1735,7 +1737,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
else if (!gAudiop->getInternetStreamURL().empty())
{
- llinfos << "Stopping parcel music" << llendl;
+ llinfos << "Stopping parcel music (parcel stream URL is empty)" << llendl;
gAudiop->startInternetStream(LLStringUtil::null);
}
}
@@ -1754,15 +1756,19 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
void optionally_start_music(const std::string& music_url)
{
- if (gSavedSettings.getBOOL("AudioStreamingMusic") && gSavedSettings.getBOOL("AudioSteamingMedia"))
- {
- // Make the user click the start button on the overlay bar. JC
- // llinfos << "Starting parcel music " << music_url << llendl;
-
- // now only play music when you enter a new parcel if the control is in PLAY state
- // changed as part of SL-4878
- if ( gOverlayBar && gOverlayBar->musicPlaying())
+ if (gSavedSettings.getBOOL("AudioStreamingMusic") &&
+ gSavedSettings.getBOOL("AudioStreamingMedia"))
+ {
+ // only play music when you enter a new parcel if the UI control for this
+ // was not *explicitly* stopped by the user. (part of SL-4878)
+ LLFloaterNearbyMedia *nearby_media_floater = LLFloaterReg::findTypedInstance<LLFloaterNearbyMedia>("nearby_media");
+ if ((nearby_media_floater &&
+ nearby_media_floater->getParcelAudioAutoStart()) ||
+ // or they have expressed no opinion in the UI, but have autoplay on...
+ (!nearby_media_floater &&
+ gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING)))
{
+ llinfos << "Starting parcel music " << music_url << llendl;
gAudiop->startInternetStream(music_url);
}
}
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index b1ad01f54f..f825eaa8ab 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -2767,7 +2767,7 @@ void LLViewerMediaTexture::updateClass()
#if 0
//force to play media.
- gSavedSettings.setBOOL("AudioSteamingMedia", true) ;
+ gSavedSettings.setBOOL("AudioStreamingMedia", true) ;
gSavedSettings.setBOOL("AudioStreamingVideo", true) ;
#endif
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1400253176..83cbc8a1f9 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1897,7 +1897,7 @@ void LLViewerWindow::draw()
if (!gSavedSettings.getBOOL("RenderUIBuffer"))
{
- LLUI::sDirtyRect = this->getWindowRectRaw();
+ LLUI::sDirtyRect = getWindowRectScaled();
}
// HACK for timecode debugging
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 18cdd23ed9..917d69fe16 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -278,10 +278,14 @@ void LLVoiceChannel::deactivate()
if (callStarted())
{
setState(STATE_HUNG_UP);
- // mute the microphone if required when returning to the proximal channel
- if (gSavedSettings.getBOOL("AutoDisengageMic") && sCurrentVoiceChannel == this)
+
+ //Default mic is OFF when leaving voice calls
+ if (gSavedSettings.getBOOL("AutoDisengageMic") &&
+ sCurrentVoiceChannel == this &&
+ gVoiceClient->getUserPTTState())
{
gSavedSettings.setBOOL("PTTCurrentlyEnabled", true);
+ gVoiceClient->inputUserControlState(true);
}
}
@@ -498,6 +502,13 @@ void LLVoiceChannelGroup::activate()
LLRecentPeople::instance().add(buddy_id);
}
#endif
+
+ //Mic default state is OFF on initiating/joining Ad-Hoc/Group calls
+ if (gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle())
+ {
+ gVoiceClient->inputUserControlState(true);
+ }
+
}
}
@@ -811,6 +822,12 @@ void LLVoiceChannelP2P::activate()
// Add the party to the list of people with which we've recently interacted.
LLRecentPeople::instance().add(mOtherUserID);
+
+ //Default mic is ON on initiating/joining P2P calls
+ if (!gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle())
+ {
+ gVoiceClient->inputUserControlState(true);
+ }
}
}
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index c2d26a1971..423c46e14c 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -4445,7 +4445,7 @@ void LLVoiceClient::participantUpdatedEvent(
participant->mVolume = volume;
- // *HACH: mantipov: added while working on EXT-3544
+ // *HACK: mantipov: added while working on EXT-3544
/*
Sometimes LLVoiceClient::participantUpdatedEvent callback is called BEFORE
LLViewerChatterBoxSessionAgentListUpdates::post() sometimes AFTER.
@@ -4462,7 +4462,9 @@ void LLVoiceClient::participantUpdatedEvent(
in LLCallFloater::draw()
*/
LLVoiceChannel* voice_cnl = LLVoiceChannel::getCurrentVoiceChannel();
- if (voice_cnl)
+
+ // ignore session ID of local chat
+ if (voice_cnl && voice_cnl->getSessionID().notNull())
{
LLSpeakerMgr* speaker_manager = LLIMModel::getInstance()->getSpeakerManager(voice_cnl->getSessionID());
if (speaker_manager)
@@ -5883,6 +5885,10 @@ void LLVoiceClient::setPTTIsToggle(bool PTTIsToggle)
mPTTIsToggle = PTTIsToggle;
}
+bool LLVoiceClient::getPTTIsToggle()
+{
+ return mPTTIsToggle;
+}
void LLVoiceClient::setPTTKey(std::string &key)
{
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 347fae6156..724179847d 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -193,6 +193,7 @@ static void updatePosition(void);
static bool voiceEnabled();
void setUsePTT(bool usePTT);
void setPTTIsToggle(bool PTTIsToggle);
+ bool getPTTIsToggle();
void setPTTKey(std::string &key);
void setEarLocation(S32 loc);
void setVoiceVolume(F32 volume);
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index cb511c2f0b..67816a6a87 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -64,7 +64,7 @@
value="0 0 1 1" />
<color
name="Yellow"
- value="0.114 0.65 0.1" />
+ value="1 1 0 1" />
<color
name="Green"
value="0 .39 .10 1" />
@@ -168,6 +168,9 @@
name="ChatHistoryTextColor"
reference="LtGray" />
<color
+ name="ChicletFlashColor"
+ reference="0.114 0.65 0.1" />
+ <color
name="ColorDropShadow"
reference="Black_50" />
<color
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png
new file mode 100644
index 0000000000..447e0af0be
--- /dev/null
+++ b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cc87d5c105..ad598f25f3 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -604,8 +604,9 @@ with the same filename but different name
<texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="false" />
<texture name="TrashItem_Press" file_name="icons/TrashItem_Press.png" preload="false" />
- <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
+ <texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" />
<texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" />
+ <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" />
<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" />
diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
index a1d602f6f0..61f9b076ce 100644
--- a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
+++ b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index 90105f92fd..dcf9847adb 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -23,8 +23,6 @@
pad_left="11"
pad_right="7"
tab_stop="false"
- pad_right="10"
- pad_left="10"
top="0"
use_ellipses="true"
width="140" />
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 cc955369e2..33fdd923ad 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -110,7 +110,7 @@
</text>
<line_editor
follows="left|top"
- height="16"
+ height="23"
layout="topleft"
left_pad="2"
max_length="63"
@@ -145,7 +145,7 @@
layout="topleft"
left="10"
name="LandType"
- top="84"
+ top_pad="5"
width="100">
Type:
</text>
@@ -192,7 +192,7 @@
layout="topleft"
left="10"
name="Owner:"
- top="124"
+ top_pad="5"
width="100">
Owner:
</text>
@@ -202,7 +202,7 @@
follows="left|top"
height="16"
layout="topleft"
- left_pad="5"
+ left_pad="2"
name="OwnerText"
width="240">
Leyla Linden
@@ -232,6 +232,7 @@
layout="topleft"
left="10"
name="Group:"
+ top_pad="7"
width="100">
Group:
</text>
@@ -240,10 +241,11 @@
enabled="false"
follows="left|top"
height="16"
- left_pad="5"
+ left_pad="2"
layout="topleft"
name="GroupText"
- width="240" />
+ width="240">
+Leyla Linden </text>
<button
follows="right"
height="16"
@@ -267,10 +269,10 @@
height="23"
label="Allow Deed to Group"
layout="topleft"
- left="96"
+ left="108"
name="check deed"
tool_tip="A group officer can deed this land to the group, so it will be supported by the group&apos;s land allocation."
- top="164"
+ top_pad="3"
width="146" />
<button
enabled="false"
@@ -289,7 +291,7 @@
height="16"
label="Owner Makes Contribution With Deed"
layout="topleft"
- left="96"
+ left="108"
name="check contrib"
tool_tip="When the land is deeded to the group, the former owner contributes enough land allocation to support it."
width="199" />
@@ -352,7 +354,7 @@
layout="topleft"
left_delta="-199"
name="For sale to"
- top_delta="6"
+ top_delta="2"
width="186">
For sale to: [BUYER]
</text>
@@ -364,7 +366,7 @@
layout="topleft"
left_delta="0"
name="Sell with landowners objects in parcel."
- top_pad="8"
+ top_pad="0"
width="186">
Objects included in sale
</text>
@@ -389,6 +391,7 @@
right="-10"
name="Cancel Land Sale"
left_pad="5"
+ top_pad="-10"
width="145" />
<text
type="string"
@@ -422,7 +425,7 @@
layout="topleft"
left="10"
name="PriceLabel"
- top="288"
+ top_pad="5"
width="100">
Area:
</text>
@@ -470,7 +473,7 @@
layout="topleft"
left_delta="82"
name="Buy Land..."
- top="328"
+ top_pad="7"
width="100" />
<button
enabled="true"
@@ -480,7 +483,7 @@
layout="topleft"
left="10"
name="Scripts..."
- top="352"
+ top_pad="1"
width="100" />
<button
enabled="false"
@@ -490,7 +493,7 @@
layout="topleft"
right="-10"
name="Buy For Group..."
- top="352"
+ top_delta="0"
width="180" />
<button
enabled="false"
@@ -510,7 +513,7 @@
layout="topleft"
right="-10"
name="Abandon Land..."
- top="328"
+ top_pad="-47"
width="180" />
<button
follows="left|top"
@@ -519,7 +522,7 @@
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-50"
+ top_delta="-48"
width="180" />
<button
enabled="false"
@@ -530,7 +533,7 @@
left_delta="0"
name="Linden Sale..."
tool_tip="Land must be owned, set content, and not already for auction."
- top_pad="4"
+ top_pad="2"
width="180" />
</panel>
<panel
@@ -2022,7 +2025,7 @@ Only large parcels can be listed in search.
multi_select="true"
name="AccessList"
tool_tip="([LISTED] listed, [MAX] max)"
- width="240" />
+ width="230" />
<button
follows="bottom"
height="23"
@@ -2047,7 +2050,7 @@ Only large parcels can be listed in search.
follows="top|right"
height="170"
width="240"
- left_pad="8">
+ left_pad="2">
<text
type="string"
length="1"
@@ -2071,7 +2074,7 @@ Only large parcels can be listed in search.
multi_select="true"
name="BannedList"
tool_tip="([LISTED] listed, [MAX] max)"
- width="240" />
+ width="230" />
<button
follows="bottom"
height="23"
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 57e92cdeec..243b63db00 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -14,8 +14,8 @@
visible="true"
width="360"
can_resize="true"
- min_width="360"
- min_height="350">
+ min_width="250"
+ min_height="190">
<layout_stack
follows="all"
height="320"
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 1946920a9c..455018f467 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -30,25 +30,25 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
height="16"
layout="topleft"
left_pad="7"
+ top_delta="3"
name="payee_name"
- width="210">
- [FIRST] [LAST]
+ width="184">
+ Ericacita Moostopolison
</text>
<text
type="string"
length="1"
follows="left|top"
halign="left"
- height="16"
+ height="14"
layout="topleft"
- left="30"
+ left="34"
name="object_name_label"
top_pad="0"
- width="150">
+ width="180">
Via object:
</text>
<icon
@@ -59,20 +59,21 @@
name="icon_object"
tool_tip="Objects"
top_pad="0"
- left="30"
+ left="10"
/>
<text
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="18"
+ height="16"
layout="topleft"
- left_pad="5"
+ left_pad="7"
name="object_name_text"
- top_delta="0"
- width="210">
- ...
+ top_delta="3"
+ use_ellipses="true"
+ word_wrap="false"
+ width="188">
+ My awesome object with a really damn long name
</text>
<button
height="23"
@@ -112,7 +113,7 @@
type="string"
length="1"
follows="left|top"
- height="18"
+ height="14"
layout="topleft"
left="25"
name="amount text"
@@ -123,7 +124,7 @@
<line_editor
border_style="line"
follows="left|top|right"
- height="19"
+ height="21"
top_pad="0"
layout="topleft"
left="120"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index 06dbdc9539..ead5b8c8f2 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -11,15 +11,15 @@
min_width="234"
name="preview notecard"
help_topic="preview_notecard"
- title="NOTE:"
+ title="NOTECARD:"
width="400">
<floater.string
name="no_object">
- Unable to find object containing this note.
+ Unable to find object containing this notecard.
</floater.string>
<floater.string
name="not_allowed">
- You do not have permission to view this note.
+ You do not have permission to view this notecard.
</floater.string>
<floater.string
name="Title">
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
index 84adabe4fa..2f88c234cc 100644
--- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
@@ -123,6 +123,12 @@
layout="topleft"
tool_tip="checkbox"
name="test_checkbox" />
+ <check_box
+ top_pad="5"
+ enabled="false"
+ label="Checkbox Disabled"
+ tool_tip="checkbox disabled"
+ name="test_checkbox_disabled" />
<!-- "combo_box" is a pop-menu of items. Optionally the box itself can
contain a general purpose line input editor, allowing the user to
provide input that is not a list item. -->
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index e55453f772..a1e190fc5e 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2675,7 +2675,7 @@ even though the user gets a free copy.
height="18"
layout="topleft"
left="10"
- use_ellipsis="true"
+ use_ellipses="true"
read_only="true"
name="media_info"
width="180" />
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index 1fa613468f..a4ef807f06 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -30,7 +30,7 @@
</string>
<string
name="no_one_near">
- No one near
+ No one near has voice enabled
</string>
<string
name="max_visible_items">
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index 2f2964c42b..a666b8a427 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -65,7 +65,7 @@
<slider
follows="top|left"
height="23"
- increment="0.05"
+ increment="0.01"
left="1"
max_val="0.95"
min_val="0.05"
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 01df208850..dde92f23b6 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -30,6 +30,8 @@
label="Call"
enabled="true"
name="call">
+ <menu_item_call.on_click
+ function="InspectAvatar.Call"/>
</menu_item_call>
<menu_item_call
label="Teleport"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index d29dfa7034..1e10467148 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -85,7 +85,7 @@
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index b07a8bb512..5ad099e2d9 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -71,7 +71,7 @@
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 62500c5116..35518cd13b 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -57,6 +57,12 @@
<menu_item_call.on_enable
function="Object.EnableInspect" />
</menu_item_call>
+ <menu_item_call
+ label="Zoom In"
+ name="Zoom In">
+ <menu_item_call.on_click
+ function="Object.ZoomIn" />
+ </menu_item_call>
<menu_item_separator layout="topleft" />
<context_menu
label="Put On &gt;"
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index 5f2e6e0f6c..c4da1df017 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -63,4 +63,10 @@
function="Avatar.EnableItem"
parameter="can_block" />
</menu_item_check>
+ <menu_item_call
+ label="Offer Teleport"
+ name="teleport">
+ <menu_item_call.on_click
+ function="Avatar.OfferTeleport"/>
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml
index 3065239615..f3b207e36c 100644
--- a/indra/newview/skins/default/xui/en/menu_picks_plus.xml
+++ b/indra/newview/skins/default/xui/en/menu_picks_plus.xml
@@ -11,6 +11,9 @@
<menu_item_call.on_click
function="Picks.Plus.Action"
userdata="new_pick" />
+ <menu_item_call.on_enable
+ function="Picks.Plus.Enable"
+ userdata="new_pick" />
</menu_item_call>
<menu_item_call
name="create_classified"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 4e495bab3f..58e9d39807 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -307,7 +307,7 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
- label="Buy Land"
+ label="Buy This Land"
layout="topleft"
name="Buy Land">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 95a7374e7b..6d5f0bedb0 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5087,6 +5087,14 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O
<notification
icon="notify.tga"
+ name="TeleportOfferSent"
+ type="offer">
+ Teleport offer sent to [TO_NAME]
+ </notification>
+
+
+ <notification
+ icon="notify.tga"
name="GotoURL"
type="notify">
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index f3a2297151..6c54532a3a 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -5,56 +5,94 @@
height="215"
name="panel_im_control_panel"
width="180">
- <avatar_list
- color="DkGray2"
+ <layout_stack
+ mouse_opaque="false"
+ border_size="0"
+ clip="false"
follows="all"
- height="130"
- ignore_online_status="true"
+ height="215"
layout="topleft"
left="3"
- name="speakers_list"
- opaque="false"
- show_info_btn="false"
- show_profile_btn="false"
- show_speaking_indicator="false"
- top="10"
- width="180" />
- <panel
- background_visible="true"
- bg_alpha_color="DkGray2"
- border="false"
- bottom="1"
- follows="left|right|bottom"
- height="70"
- left="0"
- left_pad="0"
- name="panel_call_buttons"
- top_pad="0"
- width="180">
- <button
- bottom="10"
- follows="all"
- height="20"
- label="Call"
- left_delta="10"
- name="call_btn"
- width="160" />
- <button
- bottom="40"
- follows="all"
- height="20"
- label="Leave Call"
- name="end_call_btn"
- visible="false"
- />
- <button
- follows="all"
- bottom="10"
- height="20"
- label="Voice Controls"
- name="voice_ctrls_btn"
- use_ellipses="true"
- visible="false"
- />
- </panel>
+ name="vertical_stack"
+ orientation="vertical"
+ top="0"
+ width="177">
+ <layout_panel
+ auto_resize="true"
+ follows="top|left"
+ height="130"
+ layout="topleft"
+ min_height="0"
+ mouse_opaque="false"
+ width="180"
+ top="0"
+ name="speakers_list_panel"
+ user_resize="false">
+ <avatar_list
+ color="DkGray2"
+ follows="all"
+ height="130"
+ ignore_online_status="true"
+ layout="topleft"
+ name="speakers_list"
+ opaque="false"
+ show_info_btn="false"
+ show_profile_btn="false"
+ show_speaking_indicator="false"
+ width="180" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="160"
+ name="call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="all"
+ height="20"
+ label="Call"
+ name="call_btn"
+ width="160"
+ top="5" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="160"
+ name="end_call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="all"
+ height="20"
+ label="Leave Call"
+ name="end_call_btn"
+ top="5"/>
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="160"
+ name="voice_ctrls_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="all"
+ height="20"
+ label="Voice Controls"
+ name="voice_ctrls_btn"
+ top="5"
+ use_ellipses="true" />
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index b92aa10ffc..aeaa049f1f 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -350,7 +350,7 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
-->
<button
auto_resize="true"
- flash_color="Yellow"
+ flash_color="ChicletFlashColor"
follows="right"
halign="center"
height="23"
@@ -403,7 +403,7 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
halign="center"
height="23"
follows="right"
- flash_color="Yellow"
+ flash_color="ChicletFlashColor"
label_color="Black"
left="5"
name="Unread"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index 86b30ebfce..4073ef158b 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -5,66 +5,110 @@
height="238"
name="panel_im_control_panel"
width="180">
- <avatar_list
- color="DkGray2"
+ <layout_stack
+ mouse_opaque="false"
+ border_size="0"
+ clip="false"
follows="all"
- height="100"
- ignore_online_status="true"
+ height="238"
layout="topleft"
- left="3"
- name="speakers_list"
- opaque="false"
- show_info_btn="false"
- show_profile_btn="false"
- show_speaking_indicator="false"
- top="10"
- width="180" />
- <button
- bottom_pad="0"
- follows="left|right|bottom"
- height="23"
- label="Group Profile"
- left_delta="10"
- name="group_info_btn"
- use_ellipses="true"
- width="160" />
- <panel
- background_visible="true"
- bg_alpha_color="DkGray2"
- border="false"
- follows="left|right|bottom"
- height="70"
- left="0"
- left_pad="0"
- name="panel_call_buttons"
- top_pad="0"
- width="180">
- <button
- bottom="10"
- follows="all"
- height="23"
- label="Call Group"
- left_delta="10"
- name="call_btn"
- use_ellipses="true"
- width="160" />
- <button
- bottom="40"
- follows="all"
- height="23"
- label="Leave Call"
- name="end_call_btn"
- use_ellipses="true"
- visible="false"
- />
- <button
- bottom="10"
- follows="all"
- height="23"
- label="Open Voice Controls"
- name="voice_ctrls_btn"
- use_ellipses="true"
- visible="false"
- />
- </panel>
+ left="5"
+ name="vertical_stack"
+ orientation="vertical"
+ top="0"
+ width="175">
+ <layout_panel
+ auto_resize="true"
+ follows="top|left"
+ height="100"
+ layout="topleft"
+ min_height="0"
+ mouse_opaque="false"
+ width="180"
+ top="0"
+ name="speakers_list_panel"
+ user_resize="false">
+ <avatar_list
+ color="DkGray2"
+ follows="all"
+ height="100"
+ ignore_online_status="true"
+ layout="topleft"
+ name="speakers_list"
+ opaque="false"
+ show_info_btn="false"
+ show_profile_btn="false"
+ show_speaking_indicator="false"
+ width="180" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="160"
+ name="group_info_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|right|bottom"
+ height="23"
+ label="Group Profile"
+ name="group_info_btn"
+ use_ellipses="true"
+ top="5"
+ width="160" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="160"
+ name="call_btn_panel"
+ user_resize="false">
+ <button
+ follows="all"
+ height="23"
+ label="Call Group"
+ name="call_btn"
+ use_ellipses="true"
+ width="160" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="160"
+ name="end_call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="all"
+ height="23"
+ label="Leave Call"
+ name="end_call_btn"
+ use_ellipses="true" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="160"
+ name="voice_ctrls_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="all"
+ height="23"
+ label="Open Voice Controls"
+ name="voice_ctrls_btn"
+ use_ellipses="true" />
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 9548119d58..a5bab3232c 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -258,7 +258,7 @@ things in this group. There&apos;s a broad variety of Abilities.
name="static"
top_pad="5"
width="300">
- Assigned Members
+ Assigned Roles
</text>
<scroll_list
draw_stripes="true"
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index 30e652befd..2e3d5a7320 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -6,84 +6,161 @@
width="110">
<avatar_icon
follows="left|top"
- height="100"
+ height="105"
left_delta="5"
name="avatar_icon"
top="-5"
- width="100"/>
+ width="105"/>
<text
follows="top|left|right"
font="SansSerifLarge"
- height="22"
+ height="19"
layout="topleft"
name="avatar_name"
use_ellipses="true"
value="Unknown"
- width="100" />
- <button
- follows="left|top|right"
- height="20"
- label="Profile"
- name="view_profile_btn"
- width="100" />
- <button
- follows="left|top|right"
- height="20"
- label="Add Friend"
- name="add_friend_btn"
- width="100" />
- <button
- follows="left|top|right"
- height="20"
- label="Teleport"
- name="teleport_btn"
- width="100" />
- <button
- follows="left|top|right"
- height="20"
- label="Share"
- name="share_btn"
- width="100" />
- <!--Removing pay button to save space - will update spec - verified by Erica/Steve -->
- <!-- <button
- follows="left|top|right"
- height="20"
- label="Pay"
- name="pay_btn"
- width="100" />-->
- <panel
- background_visible="true"
- bg_alpha_color="DkGray2"
- border="false"
- top_pad="10"
- follows="left|bottom|right"
- height="70"
- left="1"
- name="panel_call_buttons"
- width="109">
- <button
- bottom="10"
- follows="left|top|right"
- height="20"
- label="Call"
- left_delta="5"
- name="call_btn"
- width="100" />
- <button
- bottom="35"
- follows="left|top|right"
+ width="110" />
+ <layout_stack
+ mouse_opaque="false"
+ border_size="0"
+ clip="false"
+ follows="all"
+ height="168"
+ layout="topleft"
+ left="5"
+ name="button_stack"
+ orientation="vertical"
+ top_pad="0"
+ width="105">
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="true"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="2"
+ min_height="0"
+ width="100"
+ top="0"
+ name="spacer"
+ user_resize="false" />
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
height="20"
- label="Leave Call"
- name="end_call_btn"
- visible="false"
- width="100" />
+ layout="topleft"
+ min_height="20"
+ width="100"
+ name="view_profile_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="20"
+ label="Profile"
+ name="view_profile_btn"
+ top="0"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="add_friend_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="20"
+ label="Add Friend"
+ name="add_friend_btn"
+ top="5"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="teleport_btn_panel"
+ user_resize="false">
<button
- bottom="10"
- follows="left|top|right"
- height="20"
- label="Voice Controls"
- name="voice_ctrls_btn"
- visible="false"
- width="100" />
- </panel>
+ auto_resize="false"
+ follows="left|top|right"
+ height="20"
+ label="Teleport"
+ name="teleport_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="share_btn_panel"
+ user_resize="false">
+ <button
+ auto_resize="true"
+ follows="left|top|right"
+ height="20"
+ label="Share"
+ name="share_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="call_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="20"
+ label="Call"
+ name="call_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="end_call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="20"
+ label="Leave Call"
+ name="end_call_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
+ name="voice_ctrls_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="20"
+ label="Voice Controls"
+ name="voice_ctrls_btn"
+ width="100" />
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
index ccd754ac5e..7204e57479 100644
--- a/indra/newview/skins/default/xui/en/panel_instant_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -21,6 +21,7 @@
label="im_header"
layout="topleft"
left="5"
+ mouse_opaque="false"
name="im_header"
top="5"
width="295">
@@ -30,7 +31,7 @@
image_name="Generic_Person"
layout="topleft"
left="3"
- mouse_opaque="true"
+ mouse_opaque="false"
name="avatar_icon"
top="3"
width="18" />
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 58437cd4d2..9d00abd2c9 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -262,7 +262,7 @@ halign="center"
parameter="lsl" />
</menu_item_call>
<menu_item_call
- label="New Note"
+ label="New Notecard"
layout="topleft"
name="New Note">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml
index a99777848b..e779e37419 100644
--- a/indra/newview/skins/default/xui/en/panel_me.xml
+++ b/indra/newview/skins/default/xui/en/panel_me.xml
@@ -26,7 +26,7 @@
</text> -->
<tab_container
follows="all"
- height="575"
+ height="570"
halign="center"
layout="topleft"
left="10"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 10381d3987..12a0a9155d 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -31,32 +31,49 @@
name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container
- color="DkGray2"
+ <layout_stack
+ name="layout"
+ orientation="vertical"
follows="all"
- height="485"
layout="topleft"
- name="profile_scroll"
- reserve_scroll_corner="false"
- opaque="true"
+ left="0"
top="0"
- width="313">
+ height="535"
+ width="313"
+ border_size="0">
<panel
- name="scroll_content_panel"
- follows="left|top|right"
- height="485"
+ name="profile_stack"
+ follows="all"
layout="topleft"
top="0"
left="0"
- width="297">
- <panel
- follows="left|top"
+ height="505"
+ width="313">
+ <scroll_container
+ color="DkGray2"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="profile_scroll"
+ opaque="true"
+ height="505"
+ width="313"
+ top="0">
+ <panel
+ layout="topleft"
+ follows="left|top|right"
+ name="scroll_content_panel"
+ top="0"
+ left="0"
+ width="303">
+ <panel
+ follows="left|top|right"
height="117"
layout="topleft"
left="10"
name="second_life_image_panel"
top="0"
- width="280">
+ width="300">
<texture_picker
allow_no_texture="true"
default_image_name="None"
@@ -80,7 +97,7 @@
width="102" />
<text
follows="left|top|right"
- font.style="BOLD"
+ font.style="BOLD"
height="15"
layout="topleft"
left_pad="10"
@@ -88,7 +105,7 @@
text_color="white"
top_delta="0"
value="[SECOND_LIFE]:"
- width="165" />
+ width="180" />
<expandable_text
follows="left|top|right"
height="95"
@@ -97,20 +114,20 @@
textbox.max_length="512"
name="sl_description_edit"
top_pad="-3"
- width="173"
+ width="188"
expanded_bg_visible="true"
expanded_bg_color="DkGray">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
</expandable_text>
</panel>
<panel
- follows="left|top"
+ follows="left|top|right"
height="117"
layout="topleft"
- top_pad="10"
+ top_pad="10"
left="10"
name="first_life_image_panel"
- width="280">
+ width="300">
<texture_picker
allow_no_texture="true"
default_image_name="None"
@@ -133,7 +150,7 @@
width="102" />
<text
follows="left|top|right"
- font.style="BOLD"
+ font.style="BOLD"
height="15"
layout="topleft"
left_pad="10"
@@ -141,7 +158,7 @@
text_color="white"
top_delta="0"
value="Real World:"
- width="165" />
+ width="180" />
<expandable_text
follows="left|top|right"
height="95"
@@ -150,90 +167,23 @@
textbox.max_length="512"
name="fl_description_edit"
top_pad="-3"
- width="173"
+ width="188"
expanded_bg_visible="true"
expanded_bg_color="DkGray">
Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
</expandable_text>
</panel>
-
-
- <!-- <panel
- name="lifes_images_panel"
- follows="left|top|right"
- height="244"
- layout="topleft"
- top="0"
- left="0"
- width="285">
- <panel
- follows="left|top"
- height="117"
- layout="topleft"
- left="10"
- name="second_life_image_panel"
- top="0"
- width="285">
- <text
- follows="left|top|right"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="0"
- name="second_life_photo_title_text"
- text_color="white"
- value="[SECOND_LIFE]:"
- width="170" />
- <texture_picker
- allow_no_texture="true"
- default_image_name="None"
- enabled="false"
- follows="top|left"
- height="117"
- layout="topleft"
- left="0"
- name="2nd_life_pic"
- top_pad="0"
- width="102" />
- </panel>
- <icon
- height="18"
- image_name="AddItem_Off"
- layout="topleft"
- name="2nd_life_edit_icon"
- label=""
- left="87"
- tool_tip="Click to select an image"
- top="25"
- width="18" />
- </panel> -->
-
-
-
-
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="me_homepage_text"
- text_color="white"
- top_pad="0"
- width="280">
- Homepage:
- </text>
<text
follows="left|top"
height="15"
+ font.style="BOLD"
+ font="SansSerifMedium"
layout="topleft"
left="10"
name="homepage_edit"
top_pad="0"
value="http://librarianavengers.org"
- width="280"
+ width="300"
word_wrap="false"
use_ellipses="true"
/>
@@ -246,8 +196,8 @@
name="title_member_text"
text_color="white"
top_pad="10"
- value="Member Since:"
- width="280" />
+ value="Resident Since:"
+ width="300" />
<text
follows="left|top"
height="15"
@@ -255,7 +205,7 @@
left="10"
name="register_date"
value="05/31/2376"
- width="280"
+ width="300"
word_wrap="true" />
<text
follows="left|top"
@@ -265,9 +215,9 @@
left="10"
name="title_acc_status_text"
text_color="white"
- top_pad="10"
+ top_pad="5"
value="Account Status:"
- width="280" />
+ width="300" />
<!-- <text
type="string"
follows="left|top"
@@ -279,16 +229,18 @@
top_delta="0"
value="Go to Dashboard"
width="100"/> -->
- <text
+ <text
follows="left|top"
- height="20"
+ height="28"
layout="topleft"
left="10"
name="acc_status_text"
top_pad="0"
- value="Resident. No payment info on file."
- width="280"
- word_wrap="true" />
+ width="300"
+ word_wrap="true">
+ Resident. No payment info on file.
+Linden.
+ </text>
<text
follows="left|top"
font.style="BOLD"
@@ -297,9 +249,9 @@
left="10"
name="title_partner_text"
text_color="white"
- top_pad="5"
+ top_pad="3"
value="Partner:"
- width="280" />
+ width="300" />
<panel
follows="left|top"
height="15"
@@ -307,7 +259,7 @@
left="10"
name="partner_data_panel"
top_pad="0"
- width="280">
+ width="300">
<text
follows="left|top"
height="10"
@@ -316,44 +268,43 @@
name="partner_text"
top="0"
value="[FIRST] [LAST]"
- width="280"
+ width="300"
word_wrap="true" />
</panel>
<text
follows="left|top"
font.style="BOLD"
- height="15"
+ height="13"
layout="topleft"
left="10"
name="title_groups_text"
text_color="white"
- top_pad="8"
+ top_pad="3"
value="Groups:"
- width="280" />
- <expandable_text
- follows="left|top|bottom"
- height="60"
+ width="300" />
+ <expandable_text
+ follows="all"
+ height="113"
layout="topleft"
- left="10"
- name="sl_groups"
+ left="7"
+ name="sl_groups"
top_pad="0"
- width="280"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ width="298"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. Aenean viverra tulip moosetop. Slan de heelish marfnik tooplod. Sum sum to whop de wompam booster copm.
</expandable_text>
- </panel>
+ </panel>
</scroll_container>
- <panel
+ </panel>
+<!-- <panel
follows="bottom|left"
layout="topleft"
left="0"
name="profile_buttons_panel"
- top_pad="2"
- bottom="10"
- height="23"
- width="303">
- <button
+ height="28"
+ width="313">
+ <button
follows="bottom|left"
height="23"
label="Add Friend"
@@ -361,8 +312,9 @@
left="0"
mouse_opaque="false"
name="add_friend"
+ tool_tip="Offer friendship to the resident"
top="5"
- width="75" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -370,7 +322,7 @@
layout="topleft"
name="im"
top="5"
- left_pad="5"
+ left_pad="3"
width="45" />
<button
follows="bottom|left"
@@ -378,7 +330,7 @@
label="Call"
layout="topleft"
name="call"
- left_pad="5"
+ left_pad="3"
top="5"
width="45" />
<button
@@ -389,7 +341,7 @@
layout="topleft"
name="show_on_map_btn"
top="5"
- left_pad="5"
+ left_pad="3"
width="45" />
<button
follows="bottom|left"
@@ -397,23 +349,24 @@
label="Teleport"
layout="topleft"
name="teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="80" />
- </panel>
+ width="85" />
+ </panel>-->
<panel
follows="bottom|left"
layout="topleft"
left="0"
- top_pad="-17"
+ top_pad="0"
name="profile_me_buttons_panel"
visible="false"
- height="23"
- width="303">
+ height="28"
+ width="313">
<button
follows="bottom|right"
height="23"
- left="10"
+ left="20"
+ top="0"
label="Edit Profile"
name="edit_profile_btn"
tool_tip="Edit your personal information"
@@ -425,7 +378,7 @@
left_pad="10"
name="edit_appearance_btn"
tool_tip="Create/edit your appearance: physical data, clothes and etc."
- right="-10"
width="130" />
</panel>
+</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml
index f15e75dee9..9335db0623 100644
--- a/indra/newview/skins/default/xui/en/panel_notes.xml
+++ b/indra/newview/skins/default/xui/en/panel_notes.xml
@@ -115,14 +115,14 @@
<button
follows="bottom|left"
height="23"
- label="Add"
+ label="Add Friend"
layout="topleft"
left="0"
mouse_opaque="false"
name="add_friend"
tool_tip="Offer friendship to the resident"
top="5"
- width="55" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -131,8 +131,8 @@
name="im"
tool_tip="Open instant message session"
top="5"
- left_pad="5"
- width="40" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -140,9 +140,9 @@
layout="topleft"
name="call"
tool_tip="Call this resident"
- left_pad="5"
+ left_pad="3"
top="5"
- width="55" />
+ width="45" />
<button
enabled="false"
follows="bottom|left"
@@ -152,8 +152,8 @@
name="show_on_map_btn"
tool_tip="Show the resident on the map"
top="5"
- left_pad="5"
- width="50" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -161,9 +161,9 @@
layout="topleft"
name="teleport"
tool_tip="Offer teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="90" />
+ width="80" />
</panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
index 7b88fca7c3..2c7a51f0e7 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
@@ -18,17 +18,6 @@
parameter="wear" />
</menu_item_call>
<menu_item_call
- label="Add To Current Outfit"
- layout="topleft"
- name="add">
- <on_click
- function="panel_outfits_inventory_gear_default.Custom.Action"
- parameter="add" />
- <on_enable
- function="panel_outfits_inventory_gear_default.Enable"
- parameter="add" />
- </menu_item_call>
- <menu_item_call
label="Remove From Current Outfit"
layout="topleft"
name="remove">
@@ -54,7 +43,7 @@
parameter="rename" />
</menu_item_call>
<menu_item_call
- label="Remove"
+ label="Remove Link"
layout="topleft"
name="remove_link">
<on_click
@@ -65,7 +54,7 @@
parameter="remove_link" />
</menu_item_call>
<menu_item_call
- label="Delete"
+ label="Delete Outfit"
layout="topleft"
name="delete">
<on_click
@@ -73,6 +62,6 @@
parameter="delete" />
<on_enable
function="panel_outfits_inventory_gear_default.Enable"
- parameter="delete" />
+ parameter="delete_outfit" />
</menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 08a10553a8..adf22f825f 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -400,7 +400,7 @@ background_visible="true"
layout="topleft"
name="group_info_btn"
tool_tip="Show group information"
- width="110" />
+ width="102" />
<button
follows="bottom|left"
top="4"
@@ -410,7 +410,7 @@ background_visible="true"
layout="topleft"
name="chat_btn"
tool_tip="Open chat session"
- width="110" />
+ width="102" />
<button
follows="bottom|left"
top="4"
@@ -420,6 +420,6 @@ background_visible="true"
layout="topleft"
name="group_call_btn"
tool_tip="Call this group"
- width="110" />
+ width="102" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 25d7ba0903..5dd93d0f7e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -85,7 +85,10 @@
left="30"
name="autoplay_enabled"
top_pad="10"
- width="350" />
+ width="350">
+ <check_box.commit_callback
+ function="Pref.ParcelMediaAutoPlayEnable" />
+ </check_box>
<text
type="string"
length="1"
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 677d0de243..f44b377b0f 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
@@ -1,54 +1,99 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="left|right|top|bottom"
- name="MediaControls"
+ name="MediaControlsPanel"
background_visible="false"
height="200"
layout="topleft"
help_topic="prim_media_controls"
mouse_opaque="false"
+ min_width="300"
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_height">120</string>
+ <string name="min_width">300</string>
+ <string name="min_height">75</string>
<string name="zoom_near_padding">1.0</string>
- <string name="zoom_medium_padding">1.25</string>
+ <string name="zoom_medium_padding">1.1</string>
<string name="zoom_far_padding">1.5</string>
- <panel
- name="media_region"
- height="100"
- follows="left|right|top|bottom"
+ <string name="top_world_view_avoid_zone">50</string>
+ <layout_stack
+ name="progress_indicator_area"
+ follows="left|right|top"
+ height="8"
layout="topleft"
- mouse_opaque="false"
- top="0" />
+ animate="false"
+ left="0"
+ orientation="horizontal"
+ top="22">
+ <!-- outer layout_panels center the inner one -->
+ <layout_panel
+ width="0"
+ name="left_bookend_bottom"
+ mouse_opaque="false"
+ layout="topleft"
+ user_resize="false" />
+ <panel
+ name="media_progress_indicator"
+ mouse_opaque="false"
+ follows="left|right|top"
+ height="8"
+ layout="topleft"
+ left="0"
+ top="0"
+ auto_resize="false"
+ user_resize="false"
+ min_width="100"
+ width="200">
+ <progress_bar
+ name="media_progress_bar"
+ color_bg="1 1 1 1"
+ color_bar="1 1 1 0.96"
+ follows="left|right|top"
+ height="8"
+ layout="topleft"
+ top="0"
+ left="0"
+ tool_tip="Media is Loading"/>
+ </panel>
+ <layout_panel
+ name="right_bookend_bottom"
+ width="0"
+ mouse_opaque="false"
+ layout="topleft"
+ user_resize="false" />
+ </layout_stack>
<layout_stack
name="media_controls"
- follows="left|right"
+ follows="left|right|top"
animate="false"
height="75"
layout="topleft"
+ top="0"
left="0"
+ border_size="1"
mouse_opaque="false"
- orientation="horizontal"
- top="100">
+ orientation="horizontal">
<!-- outer layout_panels center the inner one -->
<layout_panel
name="left_bookend"
+ top="0"
width="0"
- mouse_opaque="false"
+ mouse_opaque="false"
layout="topleft"
user_resize="false" />
<layout_panel
name="back"
+ top="0"
auto_resize="false"
user_resize="false"
layout="topleft"
- mouse_opaque="false"
+ mouse_opaque="false"
min_width="22"
- width="22"
- top="4">
+ width="22">
<button
+ name="back_btn"
+ follows="top"
image_overlay="Arrow_Left_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -56,12 +101,12 @@
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
auto_resize="false"
- height="22"
layout="topleft"
tool_tip="Navigate back"
- width="22"
+ top="0"
left="0"
- top_delta="4">
+ width="22"
+ height="22">
<button.commit_callback
function="MediaCtrl.Back" />
</button>
@@ -71,22 +116,24 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="10"
min_width="22"
+ top="0"
+ height="22"
width="22">
<button
+ follows="top"
image_overlay="Arrow_Right_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
+ top="0"
height="22"
- layout="topleft"
- tool_tip="Navigate forward"
- top_delta="0"
min_width="22"
- width="22">
+ width="22"
+ layout="topleft"
+ tool_tip="Navigate forward">
<button.commit_callback
function="MediaCtrl.Forward" />
</button>
@@ -96,10 +143,12 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="-2"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button
+ follows="top"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_overlay="Home_Off"
@@ -108,6 +157,7 @@
hover_glow_amount="0.15"
layout="topleft"
tool_tip="Home page"
+ top="0"
height="22"
min_width="22"
width="22">
@@ -120,19 +170,22 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="2"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button
+ follows="top"
image_overlay="Stop_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
- height="22"
layout="topleft"
tool_tip="Stop media"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button.commit_callback
@@ -144,11 +197,12 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="6"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button
- height="22"
+ follows="top"
image_overlay="Refresh_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -157,6 +211,8 @@
hover_glow_amount="0.15"
layout="topleft"
tool_tip="Reload"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button.commit_callback
@@ -168,11 +224,12 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="10"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button
- height="22"
+ follows="top"
image_overlay="StopReload_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -181,6 +238,8 @@
hover_glow_amount="0.15"
layout="topleft"
tool_tip = "Stop loading"
+ top="0"
+ height="22"
min_width="22"
width="22">
<button.commit_callback
@@ -192,10 +251,12 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="14"
+ top="0"
+ height="22"
min_width="22"
width="24">
<button
+ follows="top"
image_overlay="Play_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -205,7 +266,7 @@
layout="topleft"
tool_tip = "Play media"
left_delta="2"
- top="4"
+ top="0"
height="22"
min_width="22"
width="22">
@@ -218,10 +279,11 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="18"
+ top="0"
min_width="22"
width="24">
<button
+ follows="top"
image_overlay="Pause_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -229,10 +291,10 @@
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
layout="topleft"
+ top="0"
height="22"
width="22"
left_delta="-1"
- top="4"
tool_tip = "Pause media">
<button.commit_callback
function="MediaCtrl.Pause" />
@@ -246,11 +308,12 @@
height="24"
follows="left|right|bottom"
layout="topleft"
+ top="0"
width="190"
min_width="90">
<line_editor
name="media_address_url"
- follows="left|right"
+ follows="top|left|right"
height="22"
top="0"
tool_tip="Media URL"
@@ -261,17 +324,18 @@
<layout_stack
name="media_address_url_icons"
animate="false"
- follows="right"
+ follows="top|right"
height="20"
width="38"
- right="-2"
- top="-1"
- mouse_opaque="false"
+ top="0"
+ right="-1"
+ border_size="0"
+ mouse_opaque="false"
orientation="horizontal">
<layout_panel
layout="topleft"
width="16"
- mouse_opaque="false"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false">
<icon
@@ -287,7 +351,7 @@
<layout_panel
layout="topleft"
width="16"
- mouse_opaque="false"
+ mouse_opaque="false"
auto_resize="false"
user_resize="false">
<icon
@@ -305,16 +369,17 @@
name="media_play_position"
auto_resize="true"
user_resize="false"
- follows="left|right|top|bottom"
+ follows="left|right"
layout="topleft"
- height="16"
+ top="0"
+ height="22"
min_width="100"
width="200">
<slider_bar
name="media_play_slider"
follows="left|right|top"
- height="20"
- bottom="88"
+ top="0"
+ height="22"
increment="0.01"
initial_value="0.5"
layout="topleft"
@@ -330,9 +395,11 @@
auto_resize="false"
user_resize="false"
layout="topleft"
+ top="0"
min_width="22"
width="22">
<button
+ follows="top"
image_overlay="SkipBackward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -343,7 +410,7 @@
height="22"
layout="topleft"
tool_tip="Step back"
- top="-14"
+ top="0"
width="22"
left="0">
<button.commit_callback
@@ -355,9 +422,11 @@
auto_resize="false"
user_resize="false"
layout="topleft"
+ top="0"
min_width="22"
width="22">
<button
+ follows="top"
image_overlay="SkipForward_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -367,7 +436,7 @@
height="22"
layout="topleft"
tool_tip="Step forward"
- top="-14"
+ top="0"
min_width="22"
width="22">
<button.commit_callback
@@ -379,26 +448,28 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- top="-50"
+ top="0"
height="72"
min_width="22"
width="22">
<!-- Note: this is not quite right either...the mute button is not the -->
<!-- same as the others because it cannot have the "image_overlay" be -->
<!-- two different images. -->
+ <!-- Note also: the button and the slider must overlap! -->
<button
+ follows="top"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="AudioMute_Off"
image_unselected="Audio_Off"
hover_glow_amount="0.15"
name="media_mute_button"
- height="22"
is_toggle="true"
layout="topleft"
scale_image="false"
tool_tip="Mute This Media"
- top="118"
+ top="0"
+ height="20"
min_width="22"
width="22" >
<button.commit_callback
@@ -411,7 +482,7 @@
<slider
orientation="vertical"
left="0"
- top="-2"
+ top="16"
height="50"
layout="topleft"
increment="0.01"
@@ -428,35 +499,24 @@
function="MediaCtrl.HideVolumeSlider" />
</slider>
</layout_panel>
- <panel
- height="28"
- layout="topleft"
- auto_resize="false"
- min_width="3"
- width="3">
- <icon
- height="26"
- image_name="media_panel_divider.png"
- layout="topleft"
- top="0"
- min_width="3"
- width="3" />
- </panel>
<layout_panel
name="zoom_frame"
auto_resize="false"
user_resize="false"
layout="topleft"
+ top="0"
height="28"
min_width="22"
width="22">
<button
+ follows="top"
image_overlay="Zoom_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
+ top="0"
height="22"
layout="topleft"
tool_tip="Zoom into media"
@@ -471,15 +531,18 @@
auto_resize="false"
user_resize="false"
layout="topleft"
+ top="0"
min_width="21"
width="21" >
<button
+ follows="top"
image_overlay="UnZoom_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
hover_glow_amount="0.15"
+ top="0"
height="22"
layout="topleft"
tool_tip ="Zoom Back"
@@ -494,9 +557,11 @@
auto_resize="false"
user_resize="false"
layout="topleft"
+ top="0"
min_width="22"
width="22">
<button
+ follows="top"
image_overlay="ExternalBrowser_Off"
image_disabled="PushButton_Disabled"
image_disabled_selected="PushButton_Disabled"
@@ -506,7 +571,7 @@
height="22"
layout="topleft"
tool_tip = "Open URL in browser"
- top_delta="-4"
+ top="0"
min_width="24"
width="24" >
<button.commit_callback
@@ -516,46 +581,16 @@
<!-- bookend panel -->
<layout_panel
name="right_bookend"
- width="0"
- layout="topleft"
- user_resize="false" />
- </layout_stack>
- <layout_stack
- follows="left|right|bottom"
- height="20"
- layout="topleft"
- animate="false"
- left="0"
- orientation="horizontal"
- top="170">
- <!-- outer layout_panels center the inner one -->
- <layout_panel
- width="0"
- layout="topleft"
- user_resize="false" />
- <panel
- name="media_progress_indicator"
- height="20"
- layout="topleft"
- left="0"
top="0"
- auto_resize="false"
- user_resize="false"
- min_width="100"
- width="200">
- <progress_bar
- name="media_progress_bar"
- color_bar="1 1 1 0.96"
- follows="left|right|top"
- top="5"
- height="8"
- layout="topleft"
- left="0"
- tool_tip="Media is Loading"/>
- </panel>
- <layout_panel
width="0"
layout="topleft"
user_resize="false" />
</layout_stack>
+ <panel
+ name="media_region"
+ height="100"
+ follows="left|right|top|bottom"
+ layout="topleft"
+ mouse_opaque="false"
+ top="30" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 342cf4144f..5ccc964c9a 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -27,42 +27,59 @@
<string
name="no_partner_text"
value="None" />
- <string
+ <string
name="RegisterDateFormat">
[REG_DATE] ([AGE])
</string>
- <scroll_container
- color="DkGray2"
+ <layout_stack
+ name="layout"
+ orientation="vertical"
follows="all"
- height="485"
layout="topleft"
- name="profile_scroll"
- reserve_scroll_corner="true"
- opaque="true"
+ left="0"
top="0"
- width="313">
+ height="535"
+ width="313"
+ border_size="0">
<panel
- name="scroll_content_panel"
- follows="left|top|right"
- height="485"
+ name="profile_stack"
+ follows="all"
layout="topleft"
top="0"
left="0"
+ height="505"
width="313">
+ <scroll_container
+ color="DkGray2"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="profile_scroll"
+ opaque="true"
+ height="505"
+ width="313"
+ top="0">
+ <panel
+ layout="topleft"
+ follows="left|top|right"
+ name="profile_scroll_panel"
+ top="0"
+ left="0"
+ width="303">
<panel
- follows="left|top"
+ follows="left|top|right"
height="117"
layout="topleft"
left="10"
name="second_life_image_panel"
top="0"
- width="280">
+ width="303">
<texture_picker
allow_no_texture="true"
default_image_name="None"
enabled="false"
follows="top|left"
- height="102"
+ height="117"
layout="topleft"
left="0"
name="2nd_life_pic"
@@ -78,7 +95,7 @@
text_color="white"
top_delta="0"
value="[SECOND_LIFE]:"
- width="165" />
+ width="180" />
<expandable_text
follows="left|top|right"
height="95"
@@ -87,26 +104,26 @@
textbox.max_length="512"
name="sl_description_edit"
top_pad="-3"
- width="173"
+ width="185"
expanded_bg_visible="true"
expanded_bg_color="DkGray">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
</expandable_text>
</panel>
<panel
- follows="left|top"
+ follows="left|top|right"
height="117"
layout="topleft"
top_pad="10"
left="10"
name="first_life_image_panel"
- width="280">
+ width="303">
<texture_picker
allow_no_texture="true"
default_image_name="None"
enabled="false"
follows="top|left"
- height="102"
+ height="117"
layout="topleft"
left="0"
name="real_world_pic"
@@ -121,7 +138,7 @@
text_color="white"
top_delta="0"
value="Real World:"
- width="165" />
+ width="180" />
<expandable_text
follows="left|top|right"
height="95"
@@ -130,57 +147,45 @@
textbox.max_length="512"
name="fl_description_edit"
top_pad="-3"
- width="173"
+ width="185"
expanded_bg_visible="true"
expanded_bg_color="DkGray">
Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
</expandable_text>
</panel>
- <text
- type="string"
- follows="left|top"
- font="SansSerifSmall"
- font.style="BOLD"
- height="15"
- layout="topleft"
- left="10"
- name="me_homepage_text"
- text_color="white"
- top_pad="0"
- width="280">
- Homepage:
- </text>
- <text
+ <text
follows="left|top"
height="15"
+ font.style="BOLD"
+ font="SansSerifMedium"
layout="topleft"
left="10"
name="homepage_edit"
top_pad="0"
value="http://librarianavengers.org"
- width="280"
+ width="300"
word_wrap="false"
use_ellipses="true"
/>
<text
follows="left|top"
- font.style="BOLD"
+ font.style="BOLD"
height="10"
layout="topleft"
left="10"
name="title_member_text"
text_color="white"
top_pad="10"
- value="Member Since:"
- width="280" />
+ value="Resident Since:"
+ width="300" />
<text
follows="left|top"
height="15"
layout="topleft"
left="10"
name="register_date"
- value="05/31/1976"
- width="280"
+ value="05/31/2376"
+ width="300"
word_wrap="true" />
<text
follows="left|top"
@@ -190,9 +195,9 @@
left="10"
name="title_acc_status_text"
text_color="white"
- top_pad="10"
+ top_pad="5"
value="Account Status:"
- width="280" />
+ width="300" />
<!-- <text
type="string"
follows="left|top"
@@ -206,14 +211,16 @@
width="100"/> -->
<text
follows="left|top"
- height="20"
+ height="28"
layout="topleft"
left="10"
name="acc_status_text"
top_pad="0"
- value="Resident. No payment info on file."
- width="280"
- word_wrap="true" />
+ width="300"
+ word_wrap="true">
+ Resident. No payment info on file.
+Linden.
+ </text>
<text
follows="left|top"
font.style="BOLD"
@@ -222,9 +229,9 @@
left="10"
name="title_partner_text"
text_color="white"
- top_pad="5"
+ top_pad="3"
value="Partner:"
- width="280" />
+ width="300" />
<panel
follows="left|top"
height="15"
@@ -232,7 +239,7 @@
left="10"
name="partner_data_panel"
top_pad="0"
- width="280">
+ width="300">
<text
follows="left|top"
height="10"
@@ -241,43 +248,41 @@
name="partner_text"
top="0"
value="[FIRST] [LAST]"
- width="280"
+ width="300"
word_wrap="true" />
</panel>
<text
follows="left|top"
font.style="BOLD"
- height="15"
+ height="13"
layout="topleft"
left="10"
name="title_groups_text"
text_color="white"
- top_pad="8"
+ top_pad="3"
value="Groups:"
- width="280" />
- <expandable_text
- follows="left|top|bottom"
- height="60"
+ width="300" />
+ <expandable_text
+ follows="all"
+ height="113"
layout="topleft"
- left="10"
- name="sl_groups"
- top_pad="0"
- width="280"
- expanded_bg_visible="true"
- expanded_bg_color="DkGray">
- Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum.
+ left="7"
+ name="sl_groups"
+ top_pad="0"
+ width="298"
+ expanded_bg_visible="true"
+ expanded_bg_color="DkGray">
+ Lorem ipsum dolor sit amet, consectetur adlkjpiscing elit moose moose. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet. adipiscing elit. Aenean rigviverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet sorbet ipsum. adipiscing elit. Aenean viverra orci et justo sagittis aliquet. Nullam malesuada mauris sit amet ipsum. Aenean viverra tulip moosetop. Slan de heelish marfnik tooplod. Sum sum to whop de wompam booster copm.
</expandable_text>
- </panel>
+ </panel>
</scroll_container>
+</panel>
<panel
- follows="bottom|left"
- layout="topleft"
- left="0"
- name="profile_buttons_panel"
- top_pad="2"
- bottom="0"
- height="19"
- width="303">
+ follows="bottom|left"
+ height="28"
+ layout="topleft"
+ name="profile_buttons_panel"
+ width="313">
<button
follows="bottom|left"
height="23"
@@ -288,7 +293,7 @@
name="add_friend"
tool_tip="Offer friendship to the resident"
top="5"
- width="77" />
+ width="80" />
<button
follows="bottom|left"
height="23"
@@ -297,8 +302,8 @@
name="im"
tool_tip="Open instant message session"
top="5"
- left_pad="5"
- width="33" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -306,9 +311,9 @@
layout="topleft"
name="call"
tool_tip="Call this resident"
- left_pad="5"
+ left_pad="3"
top="5"
- width="40" />
+ width="45" />
<button
enabled="false"
follows="bottom|left"
@@ -318,8 +323,8 @@
name="show_on_map_btn"
tool_tip="Show the resident on the map"
top="5"
- left_pad="5"
- width="44" />
+ left_pad="3"
+ width="45" />
<button
follows="bottom|left"
height="23"
@@ -327,10 +332,10 @@
layout="topleft"
name="teleport"
tool_tip="Offer teleport"
- left_pad="5"
+ left_pad="3"
top="5"
- width="67" />
- <button
+ width="85" />
+ <!-- <button
follows="bottom|right"
height="23"
label="▼"
@@ -339,23 +344,25 @@
tool_tip="Pay money to or share inventory with the resident"
right="-1"
top="5"
- width="21" />
- </panel>
+ left_pad="3"
+ width="23" />-->
+ </panel>
<panel
- follows="bottom|left"
- layout="topleft"
- left="0"
- top_pad="-17"
- name="profile_me_buttons_panel"
- visible="false"
- height="19"
- width="303">
+ follows="bottom|left"
+ height="28"
+ layout="topleft"
+ top_pad="-26"
+ name="profile_me_buttons_panel"
+ visible="false"
+ width="313">
<button
follows="bottom|right"
height="23"
- left="10"
+ left="20"
+ top="0"
label="Edit Profile"
name="edit_profile_btn"
+ tool_tip="Edit your personal information"
width="130" />
<button
follows="bottom|right"
@@ -363,7 +370,8 @@
label="Edit Appearance"
left_pad="10"
name="edit_appearance_btn"
- right="-10"
+ tool_tip="Create/edit your appearance: physical data, clothes and etc."
width="130" />
- </panel>
-</panel>
+ </panel>
+ </layout_stack>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index 6324ec2bd8..c51447eaf0 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -26,8 +26,8 @@
top="2"
width="23" />
<text_editor
- allow_scroll="false"
- bg_visible="false"
+ allow_scroll="false"
+ bg_visible="false"
read_only = "true"
follows="top|left|right"
font="SansSerifHugeBold"
@@ -55,7 +55,7 @@
halign="center"
layout="topleft"
left="10"
- min_width="333"
+ min_width="333"
name="tabs"
tab_min_width="80"
tab_height="30"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index 7cb973f4c8..af0d338256 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -33,7 +33,7 @@
<chiclet_im_adhoc.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
index a9b567225e..b1988a2d20 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
@@ -34,7 +34,7 @@
<chiclet_im_group.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
index 9283594a4c..52fbce0de7 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
@@ -33,7 +33,7 @@
<chiclet_im_p2p.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
index 5a22563758..33f85a964c 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
@@ -14,7 +14,7 @@
<chiclet_offer.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
index 05a23b95f9..560c8e6ea5 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
@@ -14,7 +14,7 @@
<chiclet_script.new_message_icon
bottom="12"
height="13"
- image_name="Unread_IM"
+ image_name="Unread_Chiclet"
left="12"
name="new_message_icon"
visible="false"
diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp
index 142a5eb5e6..7ba82fbd2c 100644
--- a/indra/newview/tests/lldateutil_test.cpp
+++ b/indra/newview/tests/lldateutil_test.cpp
@@ -179,4 +179,14 @@ namespace tut
LLDateUtil::ageFromDate("12/31/2009", mNow),
"Joined today" );
}
+
+ template<> template<>
+ void dateutil_object_t::test<5>()
+ {
+ set_test_name("2010 rollover");
+ LLDate now(std::string("2010-01-04T12:00:00Z"));
+ ensure_equals("days",
+ LLDateUtil::ageFromDate("12/13/2009", now),
+ "3 weeks old" );
+ }
}
diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp
index 364088ab31..f5bda71846 100644
--- a/indra/viewer_components/login/lllogin.cpp
+++ b/indra/viewer_components/login/lllogin.cpp
@@ -160,8 +160,11 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD credential
seconds_to_timeout = credentials["cfg_srv_timeout"].asReal();
}
- filter.eventAfter(seconds_to_timeout,
- getProgressEventLLSD("offline", "fail.login"));
+ // If the SRV request times out (e.g. EXT-3934), simulate response: an
+ // array containing our original URI.
+ LLSD fakeResponse(LLSD::emptyArray());
+ fakeResponse.append(uri);
+ filter.eventAfter(seconds_to_timeout, fakeResponse);
std::string srv_pump_name = "LLAres";
if(credentials.has("cfg_srv_pump"))
diff --git a/indra/viewer_components/login/tests/lllogin_test.cpp b/indra/viewer_components/login/tests/lllogin_test.cpp
index 7159959a4f..8463e6d2ca 100644
--- a/indra/viewer_components/login/tests/lllogin_test.cpp
+++ b/indra/viewer_components/login/tests/lllogin_test.cpp
@@ -215,14 +215,14 @@ namespace tut
void llviewerlogin_object::test<1>()
{
DEBUG;
- // Testing login with immediate repsonses from Ares and XMLPRC
+ // Testing login with immediate responses from Ares and XMLPRC
// The response from both requests will come before the post request exits.
// This tests an edge case of the login state handling.
LLEventStream llaresPump("LLAres"); // Dummy LLAres pump.
LLEventStream xmlrpcPump("LLXMLRPCTransaction"); // Dummy XMLRPC pump
bool respond_immediately = true;
- // Have 'dummy ares' repsond immediately.
+ // Have 'dummy ares' respond immediately.
LLAresListener dummyLLAres("dummy_llares", respond_immediately);
dummyLLAres.listenTo(llaresPump);
@@ -251,7 +251,7 @@ namespace tut
DEBUG;
// Tests a successful login in with delayed responses.
// Also includes 'failure' that cause the login module
- // To re-attempt connection, once from a basic failure
+ // to re-attempt connection, once from a basic failure
// and once from the 'indeterminate' response.
set_test_name("LLLogin multiple srv uris w/ success");
@@ -464,6 +464,12 @@ namespace tut
LLSD frame_event;
mainloop.post(frame_event);
- ensure_equals("SRV Failure", listener.lastEvent()["change"].asString(), "fail.login");
+ // In this state we have NOT sent a reply from LLAresListener -- in
+ // fact there's no such object. Nonetheless, we expect the timeout to
+ // have stepped the login module forward to try to authenticate with
+ // the original URI.
+ ensure_equals("Auth state", listener.lastEvent()["change"].asString(), "authenticating");
+ ensure_equals("Attempt", listener.lastEvent()["data"]["attempt"].asInteger(), 1);
+ ensure_equals("URI", listener.lastEvent()["data"]["request"]["uri"].asString(), "login.bar.com");
}
}