summaryrefslogtreecommitdiff
path: root/indra/llui/llfloater.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2009-07-14 19:06:17 +0000
committerJames Cook <james@lindenlab.com>2009-07-14 19:06:17 +0000
commit83a6ea234f32bf30d1f16b276d128debb2aeea02 (patch)
tree0950d0cccb1effa90c1da7f479adb591f3de3d68 /indra/llui/llfloater.cpp
parent9ecdbd8b72fec5182d2a5f843c9e4a050069ed51 (diff)
Merge skinning-15 to viewer-2. Fixes include:
DEV-35175 Spawning context menu should not move mouse cursor (Note: introduces regression where menu can fall off bottom of screen, will fix shortly) DEV-35143 Modal alerts appear behind side tray DEV-35141 Landmarks image and description outside of landmarks Merging revisions 126418-126419,126726-126727,126856-126857,127010-127011,127014-127016 of svn+ssh://svn.lindenlab.com/svn/linden/branches/skinning/skinning-15 into G:\viewer-2.0.0-3, respecting ancestry
Diffstat (limited to 'indra/llui/llfloater.cpp')
-rw-r--r--indra/llui/llfloater.cpp45
1 files changed, 42 insertions, 3 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index f89bee6cfb..153e025385 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -631,7 +631,7 @@ void LLFloater::closeFloater(bool app_quitting)
}
// Let floater do cleanup.
- mCloseSignal(this, getValue());
+ mCloseSignal(this, getValue(), app_quitting);
onClose(app_quitting);
}
}
@@ -1730,7 +1730,7 @@ void LLFloater::initOpenCallback(const OpenCallbackParam& cb, open_signal_t& sig
else
{
std::string function_name = cb.function_name;
- open_callback_t* func = (CallbackRegistry<open_callback_t>::getValue(function_name));
+ open_callback_t* func = (OpenCallbackRegistry::getValue(function_name));
if (func)
{
if (cb.parameter.isProvided())
@@ -1745,6 +1745,45 @@ void LLFloater::initOpenCallback(const OpenCallbackParam& cb, open_signal_t& sig
}
}
+void LLFloater::initCloseCallback(const CloseCallbackParam& cb, close_signal_t& sig)
+{
+ if (cb.function.isProvided())
+ {
+ if (cb.parameter.isProvided())
+ sig.connect(boost::bind(cb.function(), _1, cb.parameter, _3));
+ else
+ sig.connect(cb.function());
+ }
+ else
+ {
+ std::string function_name = cb.function_name;
+ close_callback_t* func = (CloseCallbackRegistry::getValue(function_name));
+ if (func)
+ {
+ if (cb.parameter.isProvided())
+ sig.connect(boost::bind((*func), _1, cb.parameter,_3));
+ else
+ sig.connect(*func);
+ }
+ else if (!function_name.empty())
+ {
+ llwarns << "No callback found for: '" << function_name << "' in control: " << getName() << llendl;
+ }
+ }
+}
+
+namespace LLInitParam
+{
+
+ template<>
+ bool ParamCompare<LLFloater::close_callback_t>::equals(
+ const LLFloater::close_callback_t &a,
+ const LLFloater::close_callback_t &b)
+ {
+ return false;
+ }
+}
+
/////////////////////////////////////////////////////
// LLFloaterView
@@ -2505,7 +2544,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
initOpenCallback(p.open_callback, mOpenSignal);
// close callback
if (p.close_callback.isProvided())
- initOpenCallback(p.close_callback, mCloseSignal);
+ initCloseCallback(p.close_callback, mCloseSignal);
}
void LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, BOOL open_floater, LLXMLNodePtr output_node)