diff options
author | Richard Linden <none@none> | 2010-03-18 15:38:23 -0700 |
---|---|---|
committer | Richard Linden <none@none> | 2010-03-18 15:38:23 -0700 |
commit | b48ea0148c5d48d79488076b1b3760394a8023be (patch) | |
tree | e451c960e2c0a91a32d170bcc58c305430db19c7 /indra/newview | |
parent | 8c90061c7dfb784580099bcff951f03d0626cc6b (diff) |
EXT-5849 - [crashhunters] Crash in LLView::drawChildren()
attempted fix by removing gesture combo popup lists from floater view holder
reviewed by Leyla
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llnearbychatbar.cpp | 21 | ||||
-rw-r--r-- | indra/newview/llnearbychatbar.h | 2 |
2 files changed, 10 insertions, 13 deletions
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 483756b16e..af711b6943 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -96,11 +96,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) params.commit_on_keyboard_movement(false); mList = LLUICtrlFactory::create<LLScrollListCtrl>(params); - - // *HACK: adding list as a child to FloaterViewHolder to make it fully visible without - // making it top control (because it would cause problems). - gViewerWindow->getFloaterViewHolder()->addChild(mList); - mList->setVisible(FALSE); + addChild(mList); //****************************Gesture Part********************************/ @@ -115,7 +111,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) setFocusLostCallback(boost::bind(&LLGestureComboList::hideList, this)); } -BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) +BOOL LLGestureComboList::handleKeyHere(KEY key, MASK mask) { BOOL handled = FALSE; @@ -126,7 +122,7 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) } else { - handled = mList->handleKey(key, mask, called_from_parent); + handled = mList->handleKeyHere(key, mask); } return handled; @@ -135,18 +131,17 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) void LLGestureComboList::showList() { LLRect rect = mList->getRect(); - LLRect screen; - mButton->localRectToScreen(getRect(), &screen); + LLRect button_rect = mButton->getRect(); // Calculating amount of space between the navigation bar and gestures combo LLNavigationBar* nb = LLNavigationBar::getInstance(); S32 x, nb_bottom; - nb->localPointToScreen(0, 0, &x, &nb_bottom); + nb->localPointToOtherView(0, 0, &x, &nb_bottom, this); - S32 max_height = nb_bottom - screen.mTop; + S32 max_height = nb_bottom - button_rect.mTop; mList->calcColumnWidths(); - rect.setOriginAndSize(screen.mLeft, screen.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); + rect.setOriginAndSize(button_rect.mLeft, button_rect.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); mList->setRect(rect); mList->fitContents( llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); @@ -156,6 +151,7 @@ void LLGestureComboList::showList() // Show the list and push the button down mButton->setToggleState(TRUE); mList->setVisible(TRUE); + LLUI::addPopup(mList); } void LLGestureComboList::onButtonCommit() @@ -188,6 +184,7 @@ void LLGestureComboList::hideList() mButton->setToggleState(FALSE); mList->setVisible(FALSE); mList->mouseOverHighlightNthItem(-1); + LLUI::removePopup(mList); gFocusMgr.setKeyboardFocus(NULL); } } diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 559c1ee091..dd467d7978 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -70,7 +70,7 @@ public: LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)mList; }; virtual void showList(); virtual void hideList(); - virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); + virtual BOOL handleKeyHere(KEY key, MASK mask); S32 getCurrentIndex() const; void onItemSelected(const LLSD& data); |