From c1b75ef02f3dc94bcd7e99ce238aece200c6c714 Mon Sep 17 00:00:00 2001 From: Ere Maijala Date: Tue, 19 Aug 2008 15:20:18 -0400 Subject: [PATCH] Bug 261074 - onFocus fires twice when window is restored (Windows-only) r=Neil sr=roc --- widget/src/windows/nsWindow.cpp | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/widget/src/windows/nsWindow.cpp b/widget/src/windows/nsWindow.cpp index a96dc6c2236f..ffebb2b8cfd0 100644 --- a/widget/src/windows/nsWindow.cpp +++ b/widget/src/windows/nsWindow.cpp @@ -4668,7 +4668,9 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT break; case WM_ACTIVATE: - if (mEventCallback) { + // Check high-order word. If nonzero, this message is about the window + // being minimized and must be disregarded here. + if (mEventCallback && HIWORD(wParam) == 0) { PRInt32 fActive = LOWORD(wParam); if (WA_INACTIVE == fActive) { @@ -4785,9 +4787,14 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT isMozWindowTakingFocus = PR_FALSE; } if (gJustGotDeactivate) { + gJustGotActivate = PR_FALSE; gJustGotDeactivate = PR_FALSE; result = DispatchFocus(NS_DEACTIVATE, isMozWindowTakingFocus); } + else if (gJustGotActivate) { + gJustGotActivate = PR_FALSE; + result = DispatchFocus(NS_ACTIVATE, PR_TRUE); + } result = DispatchFocus(NS_LOSTFOCUS, isMozWindowTakingFocus); break; @@ -4886,25 +4893,6 @@ PRBool nsWindow::ProcessMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT InitEvent(event); result = DispatchWindowEvent(&event); - - if (pl.showCmd == SW_SHOWMINIMIZED) { - // Deactivate - WCHAR className[kMaxClassNameLength]; - ::GetClassNameW((HWND)wParam, className, kMaxClassNameLength); - if (wcscmp(className, kWClassNameUI) && - wcscmp(className, kWClassNameContent) && - wcscmp(className, kWClassNameContentFrame) && - wcscmp(className, kWClassNameDialog) && - wcscmp(className, kWClassNameGeneral)) { - isMozWindowTakingFocus = PR_FALSE; - } - gJustGotDeactivate = PR_FALSE; - result = DispatchFocus(NS_DEACTIVATE, isMozWindowTakingFocus); - } else if (pl.showCmd == SW_SHOWNORMAL){ - // Make sure we're active - result = DispatchFocus(NS_GOTFOCUS, PR_TRUE); - result = DispatchFocus(NS_ACTIVATE, PR_TRUE); - } } } break;