summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llbutton.cpp2
-rw-r--r--indra/llui/llfloater.cpp153
-rw-r--r--indra/llui/llfloater.h33
-rw-r--r--indra/llui/llfloaterreg.cpp73
-rw-r--r--indra/llui/llfloaterreg.h2
-rw-r--r--indra/llui/lltoolbar.cpp6
-rw-r--r--indra/llui/lltoolbar.h4
-rw-r--r--indra/newview/app_settings/settings.xml4
-rw-r--r--indra/newview/llfloatertoybox.cpp17
-rw-r--r--indra/newview/llmoveview.cpp21
-rw-r--r--indra/newview/llnearbychatbar.cpp9
-rw-r--r--indra/newview/llnearbychatbar.h2
-rw-r--r--indra/newview/lltoolbarview.cpp11
-rw-r--r--indra/newview/lltoolbarview.h2
-rw-r--r--indra/newview/llviewermenu.cpp30
-rw-r--r--indra/newview/llviewerwindow.cpp6
-rw-r--r--indra/newview/skins/default/textures/navbar/separator.pngbin0 -> 2826 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_avatar.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_camera.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_chat_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_destinations.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_moveview.xml4
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml14
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml28
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml10
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
27 files changed, 363 insertions, 85 deletions
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 0a7584a576..4f0c0d31bd 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -548,7 +548,7 @@ void LLButton::setHighlight(bool b)
BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
{
if (isInEnabledChain()
- && (!gFocusMgr.getMouseCapture() || gFocusMgr.getMouseCapture() != this))
+ && (!gFocusMgr.getMouseCapture() || gFocusMgr.getMouseCapture() == this))
mNeedsHighlight = TRUE;
if (!childrenHandleHover(x, y, mask))
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 0398c0d7eb..81b14aac17 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -175,6 +175,8 @@ LLFloater::Params::Params()
save_visibility("save_visibility", false),
can_dock("can_dock", false),
open_positioning("open_positioning", LLFloaterEnums::OPEN_POSITIONING_NONE),
+ specified_left("specified_left"),
+ specified_bottom("specified_bottom"),
header_height("header_height", 0),
legacy_header_height("legacy_header_height", 0),
close_image("close_image"),
@@ -242,11 +244,15 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
mCanClose(p.can_close),
mDragOnLeft(p.can_drag_on_left),
mResizable(p.can_resize),
+ mOpenPositioning(p.open_positioning),
+ mSpecifiedLeft(p.specified_left),
+ mSpecifiedBottom(p.specified_bottom),
mMinWidth(p.min_width),
mMinHeight(p.min_height),
mHeaderHeight(p.header_height),
mLegacyHeaderHeight(p.legacy_header_height),
mMinimized(FALSE),
+ mVisibleWhenMinimized(TRUE),
mForeground(FALSE),
mFirstLook(TRUE),
mButtonScale(1.0f),
@@ -678,6 +684,7 @@ void LLFloater::openFloater(const LLSD& key)
}
else
{
+ applyControlsAndPosition(LLFloaterReg::getLastFloaterCascading());
setMinimized(FALSE);
setVisibleAndFrontmost(mAutoFocus);
}
@@ -840,39 +847,54 @@ LLMultiFloater* LLFloater::getHost()
return (LLMultiFloater*)mHostHandle.get();
}
-void LLFloater::applySavedVariables()
+void LLFloater::applyControlsAndPosition(LLFloater* other)
{
- applyRectControl();
- applyDockState();
+ if (!applyDockState())
+ {
+ if (!applyRectControl())
+ {
+ applyPositioning(other);
+ }
+ }
}
-void LLFloater::applyRectControl()
+bool LLFloater::applyRectControl()
{
+ bool saved_rect = false;
+
// If we have a saved rect, use it
if (mRectControl.size() > 1)
{
const LLRect& rect = getControlGroup()->getRect(mRectControl);
- if (rect.notEmpty())
+ saved_rect = rect.notEmpty();
+ if (saved_rect)
{
setOrigin(rect.mLeft, rect.mBottom);
+
if (mResizable)
{
reshape(llmax(mMinWidth, rect.getWidth()), llmax(mMinHeight, rect.getHeight()));
}
}
}
+
+ return saved_rect;
}
-void LLFloater::applyDockState()
+bool LLFloater::applyDockState()
{
+ bool docked = false;
+
if (mDocStateControl.size() > 1)
{
- bool dockState = getControlGroup()->getBOOL(mDocStateControl);
- setDocked(dockState);
+ docked = getControlGroup()->getBOOL(mDocStateControl);
+ setDocked(docked);
}
+
+ return docked;
}
-void LLFloater::applyPositioning()
+void LLFloater::applyPositioning(LLFloater* other)
{
// Otherwise position according to the positioning code
switch (mOpenPositioning)
@@ -884,28 +906,33 @@ void LLFloater::applyPositioning()
case LLFloaterEnums::OPEN_POSITIONING_SPECIFIED:
{
// Translate relative to snap rect
- LLRect r = getRect();
- r.mBottom = getSnapRect().getHeight() - r.getHeight() - r.mBottom;
- setOrigin(r.mLeft, r.mBottom);
- translateIntoRect(getSnapRect(), FALSE);
+ setOrigin(mSpecifiedLeft, mSpecifiedBottom);
+ const LLRect& snap_rect = gFloaterView->getSnapRect();
+ translate(snap_rect.mLeft, snap_rect.mBottom);
+ translateIntoRect(snap_rect, FALSE);
}
break;
case LLFloaterEnums::OPEN_POSITIONING_CASCADING:
+ if (other != NULL)
{
- static const U32 CASCADING_FLOATER_HOFFSET = 25;
- static const U32 CASCADING_FLOATER_VOFFSET = 25;
- static const S32 CASCADING_FLOATER_LIMIT = 15;
- static S32 cascading_floater_count = 1;
- const S32 top = CASCADING_FLOATER_VOFFSET * cascading_floater_count;
- const S32 left = CASCADING_FLOATER_HOFFSET * cascading_floater_count;
- setOrigin(left, top);
- translateIntoRect(getSnapRect(), FALSE);
+ stackWith(*other);
+ }
+ else
+ {
+ static const U32 CASCADING_FLOATER_HOFFSET = 0;
+ static const U32 CASCADING_FLOATER_VOFFSET = 0;
+
+ const LLRect& snap_rect = gFloaterView->getSnapRect();
- if (++cascading_floater_count > CASCADING_FLOATER_LIMIT)
- {
- cascading_floater_count = 1;
- }
+ const S32 horizontal_offset = CASCADING_FLOATER_HOFFSET;
+ const S32 vertical_offset = snap_rect.getHeight() - CASCADING_FLOATER_VOFFSET;
+
+ S32 rect_height = getRect().getHeight();
+ setOrigin(horizontal_offset, vertical_offset - rect_height);
+
+ translate(snap_rect.mLeft, snap_rect.mBottom);
+ translateIntoRect(snap_rect, FALSE);
}
break;
@@ -1406,6 +1433,17 @@ void LLFloater::removeDependentFloater(LLFloater* floaterp)
floaterp->mDependeeHandle = LLHandle<LLFloater>();
}
+void LLFloater::setVisibleWhenMinimized(bool visible)
+{
+ mVisibleWhenMinimized = visible;
+ if (visible && isMinimized())
+ {
+ // restack in minimized stack
+ setMinimized(FALSE);
+ setMinimized(TRUE);
+ }
+}
+
BOOL LLFloater::offerClickToButton(S32 x, S32 y, MASK mask, EFloaterButton index)
{
if( mButtonsEnabled[index] )
@@ -1782,11 +1820,14 @@ void LLFloater::draw()
}
if (isMinimized())
{
- for (S32 i = 0; i < BUTTON_COUNT; i++)
+ if (mVisibleWhenMinimized)
{
- drawChild(mButtons[i]);
+ for (S32 i = 0; i < BUTTON_COUNT; i++)
+ {
+ drawChild(mButtons[i]);
+ }
+ drawChild(mDragHandle);
}
- drawChild(mDragHandle);
}
else
{
@@ -2441,7 +2482,7 @@ void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom)
{
// Examine minimized children.
LLFloater* floater = (LLFloater*)((LLView*)*child_it);
- if(floater->isMinimized())
+ if(floater->isMinimized() && floater->getVisibleWhenMinimized())
{
LLRect r = floater->getRect();
if((r.mBottom < (row + floater_header_size))
@@ -2506,6 +2547,52 @@ void LLFloaterView::closeAllChildren(bool app_quitting)
}
}
+void LLFloaterView::hiddenFloaterClosed(LLFloater* floater)
+{
+ for (hidden_floaters_t::iterator it = mHiddenFloaters.begin(), end_it = mHiddenFloaters.end();
+ it != end_it;
+ ++it)
+ {
+ if (it->first.get() == floater)
+ {
+ it->second.disconnect();
+ mHiddenFloaters.erase(it);
+ break;
+ }
+ }
+}
+
+void LLFloaterView::hideAllFloaters()
+{
+ child_list_t child_list = *(getChildList());
+
+ for (child_list_iter_t it = child_list.begin(); it != child_list.end(); ++it)
+ {
+ LLFloater* floaterp = dynamic_cast<LLFloater*>(*it);
+ if (floaterp && floaterp->getVisible())
+ {
+ floaterp->setVisible(false);
+ boost::signals2::connection connection = floaterp->mCloseSignal.connect(boost::bind(&LLFloaterView::hiddenFloaterClosed, this, floaterp));
+ mHiddenFloaters.push_back(std::make_pair(floaterp->getHandle(), connection));
+ }
+ }
+}
+
+void LLFloaterView::showHiddenFloaters()
+{
+ for (hidden_floaters_t::iterator it = mHiddenFloaters.begin(), end_it = mHiddenFloaters.end();
+ it != end_it;
+ ++it)
+ {
+ LLFloater* floaterp = it->first.get();
+ if (floaterp)
+ {
+ floaterp->setVisible(true);
+ }
+ it->second.disconnect();
+ }
+ mHiddenFloaters.clear();
+}
BOOL LLFloaterView::allChildrenClosed()
{
@@ -2891,9 +2978,11 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
mHeaderHeight = p.header_height;
mLegacyHeaderHeight = p.legacy_header_height;
mSingleInstance = p.single_instance;
+
mOpenPositioning = p.open_positioning;
+ mSpecifiedLeft = p.specified_left;
+ mSpecifiedBottom = p.specified_bottom;
- /*
if (p.save_rect && mRectControl.empty())
{
mRectControl = "t"; // flag to build mRectControl name once mInstanceName is set
@@ -2901,8 +2990,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
if (p.save_visibility)
{
mVisibilityControl = "t"; // flag to build mVisibilityControl name once mInstanceName is set
- }*/
-
+ }
if(p.save_dock_state)
{
mDocStateControl = "t"; // flag to build mDocStateControl name once mInstanceName is set
@@ -3053,7 +3141,6 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
llerrs << "Failed to construct floater " << getName() << llendl;
}
- applyPositioning();
applyRectControl(); // If we have a saved rect control, apply it
gFloaterView->adjustToFitScreen(this, FALSE); // Floaters loaded from XML should all fit on screen
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index b404306e94..7cfec09e5f 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -35,6 +35,7 @@
#include "lluuid.h"
//#include "llnotificationsutil.h"
#include <set>
+#include <boost/signals2.hpp>
class LLDragHandle;
class LLResizeHandle;
@@ -130,6 +131,9 @@ public:
can_dock;
Optional<LLFloaterEnums::EOpenPositioning> open_positioning;
+ Optional<S32> specified_left;
+ Optional<S32> specified_bottom;
+
Optional<S32> header_height,
legacy_header_height; // HACK see initFromXML()
@@ -213,6 +217,8 @@ public:
LLFloater* getDependee() { return (LLFloater*)mDependeeHandle.get(); }
void removeDependentFloater(LLFloater* dependent);
BOOL isMinimized() const { return mMinimized; }
+ void setVisibleWhenMinimized(bool visible);
+ bool getVisibleWhenMinimized() const { return mVisibleWhenMinimized;}
/// isShown() differs from getVisible() in that isShown() also considers
/// isMinimized(). isShown() is true only if visible and not minimized.
bool isShown() const;
@@ -291,8 +297,6 @@ public:
virtual void setTornOff(bool torn_off) { mTornOff = torn_off; }
- void stackWith(LLFloater& other);
-
// Return a closeable floater, if any, given the current focus.
static LLFloater* getClosableFloaterFromFocus();
@@ -317,12 +321,16 @@ public:
void updateTransparency(ETypeTransparency transparency_type);
void enableResizeCtrls(bool enable, bool width = true, bool height = true);
+
+ bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mOpenPositioning); }
protected:
- virtual void applySavedVariables();
+ void applyControlsAndPosition(LLFloater* other);
+
+ void stackWith(LLFloater& other);
- virtual void applyRectControl();
- void applyDockState();
- void applyPositioning();
+ virtual bool applyRectControl();
+ bool applyDockState();
+ void applyPositioning(LLFloater* other);
void storeRectControl();
void storeVisibilityControl();
void storeDockStateControl();
@@ -412,6 +420,8 @@ private:
BOOL mResizable;
LLFloaterEnums::EOpenPositioning mOpenPositioning;
+ S32 mSpecifiedLeft;
+ S32 mSpecifiedBottom;
S32 mMinWidth;
S32 mMinHeight;
@@ -419,6 +429,7 @@ private:
S32 mLegacyHeaderHeight;// HACK see initFloaterXML()
BOOL mMinimized;
+ bool mVisibleWhenMinimized;
BOOL mForeground;
LLHandle<LLFloater> mDependeeHandle;
@@ -454,8 +465,6 @@ private:
typedef std::map<LLHandle<LLFloater>, LLFloater*>::iterator handle_map_iter_t;
static handle_map_t sFloaterMap;
- std::vector<LLHandle<LLView> > mMinimizedHiddenChildren;
-
BOOL mHasBeenDraggedWhileMinimized;
S32 mPreviousMinimizedBottom;
S32 mPreviousMinimizedLeft;
@@ -509,6 +518,10 @@ public:
BOOL allChildrenClosed();
void shiftFloaters(S32 x_offset, S32 y_offset);
+ void hideAllFloaters();
+ void showHiddenFloaters();
+
+
LLFloater* getFrontmost() const;
LLFloater* getBackmost() const;
LLFloater* getParentFloater(LLView* viewp) const;
@@ -523,11 +536,15 @@ public:
void setFloaterSnapView(LLHandle<LLView> snap_view) {mSnapView = snap_view; }
private:
+ void hiddenFloaterClosed(LLFloater* floater);
+
LLHandle<LLView> mSnapView;
BOOL mFocusCycleMode;
S32 mSnapOffsetBottom;
S32 mSnapOffsetRight;
S32 mMinimizePositionVOffset;
+ typedef std::vector<std::pair<LLHandle<LLFloater>, boost::signals2::connection> > hidden_floaters_t;
+ hidden_floaters_t mHiddenFloaters;
};
//
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 058223abbd..a148f5a32e 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -59,19 +59,57 @@ void LLFloaterReg::add(const std::string& name, const std::string& filename, con
//static
LLFloater* LLFloaterReg::getLastFloaterInGroup(const std::string& name)
{
- LLRect rect;
const std::string& groupname = sGroupMap[name];
if (!groupname.empty())
{
instance_list_t& list = sInstanceMap[groupname];
if (!list.empty())
{
- return list.back();
+ for (instance_list_t::reverse_iterator iter = list.rbegin(); iter != list.rend(); ++iter)
+ {
+ LLFloater* inst = *iter;
+
+ if (inst->getVisible() && !inst->isMinimized())
+ {
+ return inst;
+ }
+ }
}
}
return NULL;
}
+LLFloater* LLFloaterReg::getLastFloaterCascading()
+{
+ LLRect candidate_rect;
+ candidate_rect.mTop = 100000;
+ LLFloater* candidate_floater = NULL;
+
+ std::map<std::string,std::string>::const_iterator it = sGroupMap.begin(), it_end = sGroupMap.end();
+ for( ; it != it_end; ++it)
+ {
+ const std::string& group_name = it->second;
+
+ instance_list_t& instances = sInstanceMap[group_name];
+
+ for (instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); ++iter)
+ {
+ LLFloater* inst = *iter;
+
+ if (inst->getVisible() && inst->isPositioning(LLFloaterEnums::OPEN_POSITIONING_CASCADING))
+ {
+ if (candidate_rect.mTop > inst->getRect().mTop)
+ {
+ candidate_floater = inst;
+ candidate_rect = inst->getRect();
+ }
+ }
+ }
+ }
+
+ return candidate_floater;
+}
+
//static
LLFloater* LLFloaterReg::findInstance(const std::string& name, const LLSD& key)
{
@@ -127,9 +165,10 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
res->mKey = key;
}
res->setInstanceName(name);
- res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
- // apply list.size() and possibly stackWith(getLastFloaterInGroup(groupname))
+ LLFloater *last_floater = (list.empty() ? NULL : list.back());
+ res->applyControlsAndPosition(last_floater);
+
gFloaterView->adjustToFitScreen(res, false);
list.push_back(res);
@@ -533,3 +572,29 @@ bool LLFloaterReg::floaterInstanceMinimized(const LLSD& sdname)
LLFloater* instance = findInstance(name, key);
return LLFloater::isShown(instance);
}
+
+// static
+U32 LLFloaterReg::getVisibleFloaterInstanceCount()
+{
+ U32 count = 0;
+
+ std::map<std::string,std::string>::const_iterator it = sGroupMap.begin(), it_end = sGroupMap.end();
+ for( ; it != it_end; ++it)
+ {
+ const std::string& group_name = it->second;
+
+ instance_list_t& instances = sInstanceMap[group_name];
+
+ for (instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); ++iter)
+ {
+ LLFloater* inst = *iter;
+
+ if (inst->getVisible() && !inst->isMinimized())
+ {
+ count++;
+ }
+ }
+ }
+
+ return count;
+}
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 07ae45cc4c..817fe2e8c6 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -87,6 +87,7 @@ public:
// Helpers
static LLFloater* getLastFloaterInGroup(const std::string& name);
+ static LLFloater* getLastFloaterCascading();
// Find / get (create) / remove / destroy
static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD());
@@ -153,6 +154,7 @@ public:
static void blockShowFloaters(bool value) { sBlockShowFloaters = value;}
+ static U32 getVisibleFloaterInstanceCount();
};
#endif
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index ce3ef1db97..21eeed1d27 100644
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -99,6 +99,7 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p)
mSideType(p.side),
mWrap(p.wrap),
mNeedsLayout(false),
+ mModified(false),
mButtonPanel(NULL),
mCenteringStack(NULL),
mPadLeft(p.pad_left),
@@ -909,7 +910,10 @@ void LLToolBarButton::onMouseEnter(S32 x, S32 y, MASK mask)
LLUICtrl::onMouseEnter(x, y, mask);
// Always highlight toolbar buttons, even if they are disabled
- mNeedsHighlight = TRUE;
+ if (!gFocusMgr.getMouseCapture() || gFocusMgr.getMouseCapture() == this)
+ {
+ mNeedsHighlight = TRUE;
+ }
}
void LLToolBarButton::onMouseCaptureLost()
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
index 8fd509bacc..7f8ae4f839 100644
--- a/indra/llui/lltoolbar.h
+++ b/indra/llui/lltoolbar.h
@@ -178,7 +178,8 @@ public:
LLToolBarButton* createButton(const LLCommandId& id);
- bool hasButtons() { return !mButtons.empty(); }
+ bool hasButtons() const { return !mButtons.empty(); }
+ bool isModified() const { return mModified; }
protected:
friend class LLUICtrlFactory;
@@ -227,6 +228,7 @@ private:
bool mWrap;
bool mNeedsLayout;
+ bool mModified;
S32 mPadLeft,
mPadRight,
mPadTop,
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index aa2ff646a8..dd540654fb 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -619,7 +619,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/avatars.html</string>
+ <string>http://drofnas.components.pdp48.lindenlab.com/avatars.html</string>
</map>
<key>AvatarBakedTextureUploadTimeout</key>
<map>
@@ -2717,7 +2717,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html</string>
+ <string>http://drofnas.components.pdp48.lindenlab.com/guide.html</string>
</map>
<key>DisableCameraConstraints</key>
<map>
diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp
index 84881655f8..b4c9894271 100644
--- a/indra/newview/llfloatertoybox.cpp
+++ b/indra/newview/llfloatertoybox.cpp
@@ -30,12 +30,13 @@
#include "llbutton.h"
#include "llcommandmanager.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
#include "llpanel.h"
#include "lltoolbar.h"
#include "lltoolbarview.h"
#include "lltrans.h"
-
LLFloaterToybox::LLFloaterToybox(const LLSD& key)
: LLFloater(key)
, mBtnRestoreDefaults(NULL)
@@ -113,9 +114,21 @@ void LLFloaterToybox::draw()
LLFloater::draw();
}
+static bool finish_restore_toybox(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (option == 0)
+ {
+ LLToolBarView::loadDefaultToolbars();
+ }
+ return false;
+}
+static LLNotificationFunctorRegistration finish_restore_toybox_reg("ConfirmRestoreToybox", finish_restore_toybox);
+
void LLFloaterToybox::onBtnRestoreDefaults()
{
- LLToolBarView::loadDefaultToolbars();
+ LLNotificationsUtil::add("ConfirmRestoreToybox");
}
BOOL LLFloaterToybox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 2af01d06c1..c3d8b91d67 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -696,25 +696,28 @@ void LLPanelStandStopFlying::updatePosition()
{
if (mAttached) return;
- S32 x = 0;
- S32 y = 0;
-
- if(LLView* root = getRootView())
+ S32 y_pos = 0;
+ S32 bottom_tb_center = 0;
+ if (LLToolBar* toolbar_bottom = gToolBarView->getChild<LLToolBar>("toolbar_bottom"))
{
- x = root->calcScreenRect().getCenterX() - getRect().getWidth()/2;
+ y_pos = toolbar_bottom->getRect().getHeight();
+ bottom_tb_center = toolbar_bottom->getRect().getCenterX();
}
- if (LLToolBar* toolbar_bottom = gToolBarView->getChild<LLToolBar>("toolbar_bottom"))
+ S32 left_tb_width = 0;
+ if (LLToolBar* toolbar_left = gToolBarView->getChild<LLToolBar>("toolbar_left"))
{
- y = toolbar_bottom->getRect().getHeight();
+ left_tb_width = toolbar_left->getRect().getWidth();
}
if(LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container"))
{
- panel_ssf_container->setOrigin(0, y);
+ panel_ssf_container->setOrigin(0, y_pos);
}
- setOrigin(x, 0);
+ S32 x_pos = bottom_tb_center-getRect().getWidth()/2 - left_tb_width;
+
+ setOrigin( x_pos, 0);
}
// EOF
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index cd84275ef0..3e4228cfb6 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -109,15 +109,18 @@ BOOL LLNearbyChatBar::postBuild()
return TRUE;
}
-void LLNearbyChatBar::applyRectControl()
+bool LLNearbyChatBar::applyRectControl()
{
- LLFloater::applyRectControl();
- if (getRect().getHeight() > getMinHeight())
+ bool rect_controlled = LLFloater::applyRectControl();
+
+ if (getRect().getHeight() > getMinHeight())
{
getChildView("nearby_chat")->setVisible(true);
mExpandedHeight = getRect().getHeight();
enableResizeCtrls(true);
}
+
+ return rect_controlled;
}
void LLNearbyChatBar::onChatFontChange(LLFontGL* fontp)
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 5a7edac1bb..bc00c1b9fc 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -71,7 +71,7 @@ protected:
void onChatBoxCommit();
void onChatFontChange(LLFontGL* fontp);
- /* virtual */ void applyRectControl();
+ /* virtual */ bool applyRectControl();
void onToggleNearbyChatPanel();
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index a3b9552f91..b43c4e80fa 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -473,3 +473,14 @@ void LLToolBarView::setToolBarsVisible(bool visible)
mToolbarLeft->getParent()->setVisible(visible);
mToolbarRight->getParent()->setVisible(visible);
}
+
+bool LLToolBarView::isModified() const
+{
+ bool modified = false;
+
+ modified |= mToolbarBottom->isModified();
+ modified |= mToolbarLeft->isModified();
+ modified |= mToolbarRight->isModified();
+
+ return modified;
+}
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index 01ff137c15..8b3af43875 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -81,6 +81,8 @@ public:
static BOOL handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* toolbar);
static void stopDragTool();
void onEndDrag();
+
+ bool isModified() const;
protected:
friend class LLUICtrlFactory;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0cbbfae002..478af6ab7d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3766,9 +3766,37 @@ class LLViewToggleUI : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- gViewerWindow->setUIVisibility(!gViewerWindow->getUIVisibility());
+ LLNotification::Params params("ConfirmHideUI");
+ params.functor.function(boost::bind(&LLViewToggleUI::confirm, this, _1, _2));
+ LLSD substitutions;
+#if LL_DARWIN
+ substitutions["SHORTCUT"] = "Cmd+Shift+U";
+#else
+ substitutions["SHORTCUT"] = "Ctrl+Shift+U";
+#endif
+ params.substitutions = substitutions;
+ if (gViewerWindow->getUIVisibility())
+ {
+ // hiding, so show notification
+ LLNotifications::instance().add(params);
+ }
+ else
+ {
+ LLNotifications::instance().forceResponse(params, 0);
+ }
+
return true;
}
+
+ void confirm(const LLSD& notification, const LLSD& response)
+ {
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (option == 0) // OK
+ {
+ gViewerWindow->setUIVisibility(!gViewerWindow->getUIVisibility());
+ }
+ }
};
class LLEditDuplicate : public view_listener_t
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 2473d41a35..665b31a427 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4992,7 +4992,11 @@ void LLViewerWindow::setUIVisibility(bool visible)
if (!visible)
{
- gFloaterView->closeAllChildren(false);
+ gFloaterView->hideAllFloaters();
+ }
+ else
+ {
+ gFloaterView->showHiddenFloaters();
}
}
diff --git a/indra/newview/skins/default/textures/navbar/separator.png b/indra/newview/skins/default/textures/navbar/separator.png
new file mode 100644
index 0000000000..b93e5791a7
--- /dev/null
+++ b/indra/newview/skins/default/textures/navbar/separator.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index c221f683c2..25f1903131 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -769,5 +769,5 @@ with the same filename but different name
<texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
<texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
<texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
-
+ <texture name="NavBar Separator" file_name="navbar/separator.png"/>
</textures>
diff --git a/indra/newview/skins/default/xui/en/floater_avatar.xml b/indra/newview/skins/default/xui/en/floater_avatar.xml
index 6e5c4ada48..3c7de6f334 100644
--- a/indra/newview/skins/default/xui/en/floater_avatar.xml
+++ b/indra/newview/skins/default/xui/en/floater_avatar.xml
@@ -5,7 +5,7 @@
can_close="true"
can_resize="true"
min_height="230"
- min_width="445"
+ min_width="450"
height="230"
layout="topleft"
name="Avatar"
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
index 7f3abbb481..20d0fa1c91 100644
--- a/indra/newview/skins/default/xui/en/floater_camera.xml
+++ b/indra/newview/skins/default/xui/en/floater_camera.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
open_positioning="specified"
+ specified_left="683"
+ specified_bottom="0"
legacy_header_height="18"
can_minimize="true"
can_close="true"
follows="bottom"
height="164"
layout="topleft"
- left="683"
- bottom="0"
name="camera_floater"
help_topic="camera_floater"
save_visibility="true"
diff --git a/indra/newview/skins/default/xui/en/floater_chat_bar.xml b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
index 924e4bc11e..9229741801 100644
--- a/indra/newview/skins/default/xui/en/floater_chat_bar.xml
+++ b/indra/newview/skins/default/xui/en/floater_chat_bar.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
open_positioning="specified"
+ specified_left="150"
+ specified_bottom="0"
height="60"
- left="150"
- bottom="0"
layout="topleft"
legacy_header_height="25"
single_instance="true"
diff --git a/indra/newview/skins/default/xui/en/floater_destinations.xml b/indra/newview/skins/default/xui/en/floater_destinations.xml
index 2b48a9f6d6..e63dc02a57 100644
--- a/indra/newview/skins/default/xui/en/floater_destinations.xml
+++ b/indra/newview/skins/default/xui/en/floater_destinations.xml
@@ -7,7 +7,7 @@
user_resize="true"
can_resize="true"
min_height="230"
- min_width="525"
+ min_width="350"
height="230"
layout="topleft"
name="Destinations"
@@ -22,6 +22,5 @@
width="840"
follows="all"
name="destination_guide_contents"
- start_url="http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html"
trusted_content="true"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 3d23a94ec2..cbbd68beb3 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
open_positioning="specified"
+ specified_left="535"
+ specified_bottom="0"
legacy_header_height="18"
can_dock="false"
can_minimize="true"
can_close="true"
follows="bottom"
height="110"
- left="535"
- bottom="0"
layout="topleft"
name="move_floater"
help_topic="move_floater"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index fdbc3d1882..c586e3a098 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -24,6 +24,13 @@
function="Floater.Toggle"
parameter="toybox" />
</menu_item_call>
+ <menu_item_call
+ label="Hide all controls"
+ name="Hide UI"
+ shortcut="control|shift|U">
+ <menu_item_call.on_click
+ function="View.ToggleUI" />
+ </menu_item_call>
<menu_item_call
label="My Dashboard"
name="Manage My Account">
@@ -1719,13 +1726,6 @@
<menu_item_call.on_click
function="View.DefaultUISize" />
</menu_item_call>
- <menu_item_call
- label="Toggle UI"
- name="Toggle UI"
- shortcut="control|shift|U">
- <menu_item_call.on_click
- function="View.ToggleUI" />
- </menu_item_call>
<!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility. The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
<menu_item_check
label="Show Advanced Menu - legacy shortcut"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 087744fea7..f510b3c5ba 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4624,6 +4624,20 @@ Are you sure you want to quit?
<notification
icon="alertmodal.tga"
+ name="ConfirmRestoreToybox"
+ type="alertmodal">
+ <unique/>
+Are you sure you want to restore your default buttons and toolbars?
+
+You cannot undo this action.
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="DeleteItems"
type="alertmodal">
<unique/>
@@ -7536,6 +7550,20 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
notext="Don't Quit"/>
</notification>
+ <notification
+ name="ConfirmHideUI"
+ label=""
+ type="alertmodal">
+ <unique/>
+ <tag>confirm</tag>
+ This action will hide all menu items and buttons. To get them back, click [SHORTCUT] again.
+ <usetemplate
+ name="okcancelignore"
+ yestext="OK"
+ notext="Cancel"
+ ignoretext="Confirm before hiding UI"/>
+ </notification>
+
<global name="UnsupportedGLRequirements">
You do not appear to have the proper hardware requirements for [APP_NAME]. [APP_NAME] requires an OpenGL graphics card that has multitexture support. If this is the case, you may want to make sure that you have the latest drivers for your graphics card, and service packs and patches for your operating system.
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index bf9eeb6d26..ab6fa36e6c 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -43,6 +43,16 @@
top="0"
height="34"
width="600"/>
+ <icon
+ follows="all"
+ image_name="NavBar Separator"
+ mouse_opaque="false"
+ name="separator_image"
+ scale_image="true"
+ left="0"
+ top="0"
+ width="800"
+ height="2"/>
<layout_stack
use_border="true"
bevel_style="none"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f19cfa19f2..04fc5c868c 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3695,7 +3695,7 @@ Try enclosing path to the editor with double quotes.
<string name="Command_MiniMap_Tooltip">Show nearby people</string>
<string name="Command_Move_Tooltip">Moving your avatar</string>
<string name="Command_People_Tooltip">Friends, groups, and nearby people</string>
- <string name="Command_Picks_Tooltip">Favorite places</string>
+ <string name="Command_Picks_Tooltip">Places to show as favorites in your profile</string>
<string name="Command_Places_Tooltip">Places you've saved</string>
<string name="Command_Preferences_Tooltip">Preferences</string>
<string name="Command_Profile_Tooltip">Edit or view your profile</string>