diff options
Diffstat (limited to 'indra/llui/llfocusmgr.cpp')
-rw-r--r-- | indra/llui/llfocusmgr.cpp | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 6358ccbdd7..e3337eb588 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -42,11 +42,10 @@ LLFocusMgr gFocusMgr; LLFocusMgr::LLFocusMgr() : mLockedView( NULL ), - mKeyboardLockedFocusLostCallback( NULL ), mMouseCaptor( NULL ), mKeyboardFocus( NULL ), + mLastKeyboardFocus( NULL ), mDefaultKeyboardFocus( NULL ), - mKeyboardFocusLostCallback( NULL ), mTopCtrl( NULL ), mFocusWeight(0.f), mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true @@ -75,12 +74,11 @@ void LLFocusMgr::releaseFocusIfNeeded( LLView* view ) if (view == mLockedView) { mLockedView = NULL; - mKeyboardLockedFocusLostCallback = NULL; - setKeyboardFocus( NULL, NULL ); + setKeyboardFocus( NULL ); } else { - setKeyboardFocus( mLockedView, mKeyboardLockedFocusLostCallback ); + setKeyboardFocus( mLockedView ); } } @@ -91,7 +89,7 @@ void LLFocusMgr::releaseFocusIfNeeded( LLView* view ) } -void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, FocusLostCallback on_focus_lost, BOOL lock) +void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, BOOL lock) { if (mLockedView && (new_focus == NULL || @@ -101,28 +99,27 @@ void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, FocusLostCallback on_focu // or one of its descendants return; } - FocusLostCallback old_callback = mKeyboardFocusLostCallback; - mKeyboardFocusLostCallback = on_focus_lost; //llinfos << "Keyboard focus handled by " << (new_focus ? new_focus->getName() : "nothing") << llendl; if( new_focus != mKeyboardFocus ) { - LLUICtrl* old_focus = mKeyboardFocus; + mLastKeyboardFocus = mKeyboardFocus; mKeyboardFocus = new_focus; + if( mLastKeyboardFocus ) + { + mLastKeyboardFocus->onFocusLost(); + } + // clear out any existing flash if (new_focus) { mFocusWeight = 0.f; + new_focus->onFocusReceived(); } mFocusTimer.reset(); - if( old_callback ) - { - old_callback( old_focus ); - } - #ifdef _DEBUG mKeyboardFocusName = new_focus ? new_focus->getName() : "none"; #endif @@ -204,13 +201,11 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( LLView* focus ) if (focus == mLockedView) { mLockedView = NULL; - mKeyboardLockedFocusLostCallback = NULL; } if( mKeyboardFocus == focus ) { mKeyboardFocus = NULL; - mKeyboardFocusLostCallback = NULL; #ifdef _DEBUG mKeyboardFocusName = "none"; #endif @@ -293,13 +288,19 @@ BOOL LLFocusMgr::childIsTopCtrl( LLView* parent ) // set new_top = NULL to release top_view. void LLFocusMgr::setTopCtrl( LLUICtrl* new_top ) { - if( new_top != mTopCtrl ) + LLUICtrl* old_top = mTopCtrl; + if( new_top != old_top ) { mTopCtrl = new_top; #ifdef _DEBUG mTopCtrlName = new_top ? new_top->getName() : "none"; #endif + + if (old_top) + { + old_top->onLostTop(); + } } } @@ -317,13 +318,11 @@ void LLFocusMgr::removeTopCtrlWithoutCallback( LLUICtrl* top_view ) void LLFocusMgr::lockFocus() { mLockedView = mKeyboardFocus; - mKeyboardLockedFocusLostCallback = mKeyboardFocusLostCallback; } void LLFocusMgr::unlockFocus() { mLockedView = NULL; - mKeyboardLockedFocusLostCallback = NULL; } F32 LLFocusMgr::getFocusFlashAmt() @@ -356,9 +355,9 @@ void LLFocusMgr::setAppHasFocus(BOOL focus) } // release focus from "top ctrl"s, which generally hides them - if (!focus && mTopCtrl && mTopCtrl->hasFocus()) + if (!focus && mTopCtrl) { - mTopCtrl->setFocus(FALSE); + setTopCtrl(NULL); } mAppHasFocus = focus; } |