diff --git a/widget/src/mac/nsMacEventHandler.cpp b/widget/src/mac/nsMacEventHandler.cpp index 66b5a96474d..cbe7973aef9 100644 --- a/widget/src/mac/nsMacEventHandler.cpp +++ b/widget/src/mac/nsMacEventHandler.cpp @@ -1055,6 +1055,16 @@ PRBool nsMacEventHandler::HandleKeyEvent(EventRecord& aOSEvent) case keyDown: InitializeKeyEvent(keyEvent,aOSEvent,focusedWidget,NS_KEY_DOWN); result = focusedWidget->DispatchWindowEvent(keyEvent); + + // get the focused widget again in case something happened to it on the previous event + nsWindow* checkFocusedWidget = gEventDispatchHandler.GetActive(); + if (!checkFocusedWidget) + checkFocusedWidget = mTopLevelWidget; + + // if this isn't the same widget we had before, we should not send a keypress + if (checkFocusedWidget != focusedWidget) + return result; + //if (result == PR_FALSE) // continue processing??? talk to Tague about this (key event spec) { InitializeKeyEvent(keyEvent,aOSEvent,focusedWidget,NS_KEY_PRESS);