diff options
author | Alexei Arabadji <aarabadji@productengine.com> | 2009-12-08 20:34:30 +0200 |
---|---|---|
committer | Alexei Arabadji <aarabadji@productengine.com> | 2009-12-08 20:34:30 +0200 |
commit | 7d261eb9cf95efdeb546fe8b39568015d840c61a (patch) | |
tree | bef5890d0990805c02dd2bb783d3a831a9bc1b06 | |
parent | 7348fbb69af095f073da5ec9bd25c690c80b93f5 (diff) |
fixed EXT-3193 “Closing toasts cause blocking toast screen channel.”,
added direct check of toast hovering to avoid collisions with order of
mouseEnter and mouseLeave events;
corrected EXT-3096,
added call off startFadingToasts in deleteToast since mouseLeave not will be
called in case closing toast;
--HG--
branch : product-engine
-rw-r--r-- | indra/newview/llscreenchannel.cpp | 44 | ||||
-rw-r--r-- | indra/newview/llscreenchannel.h | 1 |
2 files changed, 17 insertions, 28 deletions
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index a1ea7aeb96..7ea1674da1 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -243,6 +243,7 @@ void LLScreenChannel::deleteToast(LLToast* toast) if(mHoveredToast == toast) { mHoveredToast = NULL; + startFadingToasts(); } // close the toast @@ -720,39 +721,28 @@ void LLScreenChannel::removeToastsBySessionID(LLUUID id) //-------------------------------------------------------------------------- void LLScreenChannel::onToastHover(LLToast* toast, bool mouse_enter) { - // because of LLViewerWindow::updateUI() that ALWAYS calls onMouseEnter BEFORE onMouseLeave - // we must check this to prevent incorrect setting for hovering in a channel - std::map<LLToast*, bool>::iterator it_first, it_second; - S32 stack_size = mToastEventStack.size(); - if(mouse_enter) + // because of LLViewerWindow::updateUI() that NOT ALWAYS calls onMouseEnter BEFORE onMouseLeave + // we must check hovering directly to prevent incorrect setting for hovering in a channel + S32 x,y; + if (mouse_enter) { - mHoveredToast = toast; - } - else - { - mHoveredToast = NULL; - } - - switch(stack_size) - { - case 0: - mToastEventStack.insert(std::pair<LLToast*, bool>(toast, mouse_enter)); - break; - case 1: - it_first = mToastEventStack.begin(); - if((*it_first).second && !mouse_enter && ((*it_first).first != toast) ) + toast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), + gViewerWindow->getCurrentMouseY(), &x, &y); + bool hover = toast->pointInView(x, y) == TRUE; + if (hover) { - mToastEventStack.clear(); mHoveredToast = toast; } - else + } + else if (mHoveredToast != NULL) + { + mHoveredToast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), + gViewerWindow->getCurrentMouseY(), &x, &y); + bool hover = mHoveredToast->pointInView(x, y) == TRUE; + if (!hover) { - mToastEventStack.clear(); - mToastEventStack.insert(std::pair<LLToast*, bool>(toast, mouse_enter)); + mHoveredToast = NULL; } - break; - default: - LL_ERRS ("LLScreenChannel::onToastHover: stack size error " ) << stack_size << llendl; } if(!isHovering()) diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 3b0ee2050c..b551732133 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -279,7 +279,6 @@ private: std::vector<ToastElem> mToastList; std::vector<ToastElem> mStoredToastList; - std::map<LLToast*, bool> mToastEventStack; }; } |