diff options
author | Rick Pasetto <rick@lindenlab.com> | 2009-11-19 09:29:08 -0800 |
---|---|---|
committer | Rick Pasetto <rick@lindenlab.com> | 2009-11-19 09:29:08 -0800 |
commit | 0627d550f371c26b00e802bae288a5e6def53345 (patch) | |
tree | 8f4e740736d4fbca2eb543bb0148232e968286ef /indra/llui/llcombobox.cpp | |
parent | 9e53ad6111ce0e15cb10f2ffb47fee8b48d1c3db (diff) | |
parent | 51e640e5d753ac9dc005cd6827db77988a04b8fa (diff) |
Automated merge with ssh://rick@hg.lindenlab.com/rick/viewer-2-0-rickcallum/
Diffstat (limited to 'indra/llui/llcombobox.cpp')
-rw-r--r-- | indra/llui/llcombobox.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 36e309d639..f29e8785eb 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -102,14 +102,14 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p) mMaxChars(p.max_chars), mPrearrangeCallback(p.prearrange_callback()), mTextEntryCallback(p.text_entry_callback()), - mSelectionCallback(p.selection_callback()), mListPosition(p.list_position), mLastSelectedIndex(-1) { // Text label button LLButton::Params button_params = (mAllowTextEntry ? p.combo_button : p.drop_down_button); - button_params.mouse_down_callback.function(boost::bind(&LLComboBox::onButtonDown, this)); + button_params.mouse_down_callback.function( + boost::bind(&LLComboBox::onButtonMouseDown, this)); button_params.follows.flags(FOLLOWS_LEFT|FOLLOWS_BOTTOM|FOLLOWS_RIGHT); button_params.rect(p.rect); @@ -140,6 +140,10 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p) mList = LLUICtrlFactory::create<LLScrollListCtrl>(params); addChild(mList); + // Mouse-down on button will transfer mouse focus to the list + // Grab the mouse-up event and make sure the button state is correct + mList->setMouseUpCallback(boost::bind(&LLComboBox::onListMouseUp, this)); + for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin(); it != p.items().end(); ++it) @@ -644,7 +648,7 @@ void LLComboBox::hideList() } } -void LLComboBox::onButtonDown() +void LLComboBox::onButtonMouseDown() { if (!mList->getVisible()) { @@ -670,6 +674,10 @@ void LLComboBox::onButtonDown() if (mButton->hasMouseCapture()) { gFocusMgr.setMouseCapture(mList); + + // But keep the "pressed" look, which buttons normally lose when they + // lose focus + mButton->setForcePressedState(true); } } else @@ -679,6 +687,12 @@ void LLComboBox::onButtonDown() } +void LLComboBox::onListMouseUp() +{ + // In some cases this is the termination of a mouse click that started on + // the button, so clear its pressed state + mButton->setForcePressedState(false); +} //------------------------------------------------------------------ // static functions @@ -706,12 +720,6 @@ void LLComboBox::onItemSelected(const LLSD& data) // commit does the reverse, asserting the value in the list onCommit(); - - // call the callback if it exists - if(mSelectionCallback) - { - mSelectionCallback(this, data); - } } BOOL LLComboBox::handleToolTip(S32 x, S32 y, MASK mask) |