summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
authorWilliam Todd Stinson <stinson@lindenlab.com>2012-11-09 18:51:23 -0800
committerWilliam Todd Stinson <stinson@lindenlab.com>2012-11-09 18:51:23 -0800
commitc9044c03b3157c330a0b3b640bfce6bacc0c9343 (patch)
treed22f74cf380629ef398eea71d937646bfd726a40 /indra/llui
parent1786a7150e754ea10dfd5172ec2491dd67e83a9a (diff)
parent8a3384adafff1b34d5a903e4d8cfd2dabca9e243 (diff)
Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-beta.
Diffstat (limited to 'indra/llui')
-rw-r--r--indra/llui/CMakeLists.txt1
-rwxr-xr-x[-rw-r--r--]indra/llui/llcontainerview.cpp0
-rw-r--r--indra/llui/llfloater.cpp27
-rw-r--r--indra/llui/llhandle.h180
-rw-r--r--indra/llui/lltoggleablemenu.cpp4
5 files changed, 16 insertions, 196 deletions
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index bc225593d8..80cec6c9f3 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -163,7 +163,6 @@ set(llui_HEADER_FILES
llfolderviewitem.h
llfolderviewmodel.h
llfunctorregistry.h
- llhandle.h
llhelp.h
lliconctrl.h
llkeywords.h
diff --git a/indra/llui/llcontainerview.cpp b/indra/llui/llcontainerview.cpp
index e08ccb0b78..e08ccb0b78 100644..100755
--- a/indra/llui/llcontainerview.cpp
+++ b/indra/llui/llcontainerview.cpp
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 8f7d4afb1b..0e57ba02bf 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -240,7 +240,6 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
mTitle(p.title),
mShortTitle(p.short_title),
mSingleInstance(p.single_instance),
- mIsReuseInitialized(p.reuse_instance.isProvided()),
mReuseInstance(p.reuse_instance.isProvided() ? p.reuse_instance : p.single_instance), // reuse single-instance floaters by default
mKey(key),
mCanTearOff(p.can_tear_off),
@@ -2978,23 +2977,23 @@ void LLFloater::setInstanceName(const std::string& name)
{
if (name != mInstanceName)
{
- llassert_always(mInstanceName.empty());
- mInstanceName = name;
- if (!mInstanceName.empty())
- {
- std::string ctrl_name = getControlName(mInstanceName, mKey);
+ llassert_always(mInstanceName.empty());
+ mInstanceName = name;
+ if (!mInstanceName.empty())
+ {
+ std::string ctrl_name = getControlName(mInstanceName, mKey);
initRectControl();
- if (!mVisibilityControl.empty())
- {
- mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name);
- }
- if(!mDocStateControl.empty())
- {
- mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name);
- }
+ if (!mVisibilityControl.empty())
+ {
+ mVisibilityControl = LLFloaterReg::declareVisibilityControl(ctrl_name);
+ }
+ if(!mDocStateControl.empty())
+ {
+ mDocStateControl = LLFloaterReg::declareDockStateControl(ctrl_name);
}
}
}
+}
void LLFloater::setKey(const LLSD& newkey)
{
diff --git a/indra/llui/llhandle.h b/indra/llui/llhandle.h
deleted file mode 100644
index 680a1a7f1d..0000000000
--- a/indra/llui/llhandle.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
-* @file llhandle.h
-* @brief "Handle" to an object (usually a floater) whose lifetime you don't
-* control.
-*
-* $LicenseInfo:firstyear=2001&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
-* $/LicenseInfo$
-*/
-#ifndef LLHANDLE_H
-#define LLHANDLE_H
-
-#include "llpointer.h"
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/utility/enable_if.hpp>
-
-class LLTombStone : public LLRefCount
-{
-public:
- LLTombStone(void* target = NULL) : mTarget(target) {}
-
- void setTarget(void* target) { mTarget = target; }
- void* getTarget() const { return mTarget; }
-private:
- mutable void* mTarget;
-};
-
-// LLHandles are used to refer to objects whose lifetime you do not control or influence.
-// Calling get() on a handle will return a pointer to the referenced object or NULL,
-// if the object no longer exists. Note that during the lifetime of the returned pointer,
-// you are assuming that the object will not be deleted by any action you perform,
-// or any other thread, as normal when using pointers, so avoid using that pointer outside of
-// the local code block.
-//
-// https://wiki.lindenlab.com/mediawiki/index.php?title=LLHandle&oldid=79669
-
-template <typename T>
-class LLHandle
-{
- template <typename U> friend class LLHandle;
- template <typename U> friend class LLHandleProvider;
-public:
- LLHandle() : mTombStone(getDefaultTombStone()) {}
-
- template<typename U>
- LLHandle(const LLHandle<U>& other, typename boost::enable_if< typename boost::is_convertible<U*, T*> >::type* dummy = 0)
- : mTombStone(other.mTombStone)
- {}
-
- bool isDead() const
- {
- return mTombStone->getTarget() == NULL;
- }
-
- void markDead()
- {
- mTombStone = getDefaultTombStone();
- }
-
- T* get() const
- {
- return reinterpret_cast<T*>(mTombStone->getTarget());
- }
-
- friend bool operator== (const LLHandle<T>& lhs, const LLHandle<T>& rhs)
- {
- return lhs.mTombStone == rhs.mTombStone;
- }
- friend bool operator!= (const LLHandle<T>& lhs, const LLHandle<T>& rhs)
- {
- return !(lhs == rhs);
- }
- friend bool operator< (const LLHandle<T>& lhs, const LLHandle<T>& rhs)
- {
- return lhs.mTombStone < rhs.mTombStone;
- }
- friend bool operator> (const LLHandle<T>& lhs, const LLHandle<T>& rhs)
- {
- return lhs.mTombStone > rhs.mTombStone;
- }
-
-protected:
- LLPointer<LLTombStone> mTombStone;
-
-private:
- typedef T* pointer_t;
- static LLPointer<LLTombStone>& getDefaultTombStone()
- {
- static LLPointer<LLTombStone> sDefaultTombStone = new LLTombStone;
- return sDefaultTombStone;
- }
-};
-
-template <typename T>
-class LLRootHandle : public LLHandle<T>
-{
-public:
- typedef LLRootHandle<T> self_t;
- typedef LLHandle<T> base_t;
-
- LLRootHandle(T* object) { bind(object); }
- LLRootHandle() {};
- ~LLRootHandle() { unbind(); }
-
- // this is redundant, since an LLRootHandle *is* an LLHandle
- //LLHandle<T> getHandle() { return LLHandle<T>(*this); }
-
- void bind(T* object)
- {
- // unbind existing tombstone
- if (LLHandle<T>::mTombStone.notNull())
- {
- if (LLHandle<T>::mTombStone->getTarget() == (void*)object) return;
- LLHandle<T>::mTombStone->setTarget(NULL);
- }
- // tombstone reference counted, so no paired delete
- LLHandle<T>::mTombStone = new LLTombStone((void*)object);
- }
-
- void unbind()
- {
- LLHandle<T>::mTombStone->setTarget(NULL);
- }
-
- //don't allow copying of root handles, since there should only be one
-private:
- LLRootHandle(const LLRootHandle& other) {};
-};
-
-// Use this as a mixin for simple classes that need handles and when you don't
-// want handles at multiple points of the inheritance hierarchy
-template <typename T>
-class LLHandleProvider
-{
-public:
- LLHandle<T> getHandle() const
- {
- // perform lazy binding to avoid small tombstone allocations for handle
- // providers whose handles are never referenced
- mHandle.bind(static_cast<T*>(const_cast<LLHandleProvider<T>* >(this)));
- return mHandle;
- }
-
- template <typename U>
- LLHandle<U> getDerivedHandle(typename boost::enable_if< typename boost::is_convertible<U*, T*> >::type* dummy = 0) const
- {
- LLHandle<U> downcast_handle;
- downcast_handle.mTombStone = getHandle().mTombStone;
- return downcast_handle;
- }
-
-protected:
- typedef LLHandle<T> handle_type_t;
- LLHandleProvider()
- {
- // provided here to enforce T deriving from LLHandleProvider<T>
- }
-
-private:
- mutable LLRootHandle<T> mHandle;
-};
-
-#endif
diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp
index b4c6c6162b..00d52fe10d 100644
--- a/indra/llui/lltoggleablemenu.cpp
+++ b/indra/llui/lltoggleablemenu.cpp
@@ -57,7 +57,9 @@ void LLToggleableMenu::handleVisibilityChange (BOOL curVisibilityIn)
S32 x,y;
LLUI::getMousePositionLocal(LLUI::getRootView(), &x, &y);
- if (!curVisibilityIn && mButtonRect.pointInRect(x, y))
+ // STORM-1879: also check MouseCapture to see if the button was really
+ // clicked (otherwise the VisibilityChange was triggered via keyboard shortcut)
+ if (!curVisibilityIn && mButtonRect.pointInRect(x, y) && gFocusMgr.getMouseCapture())
{
mClosedByButtonClick = true;
}