summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/windows/qtwindowsglobal.h6
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp9
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp6
3 files changed, 15 insertions, 6 deletions
diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h
index f044362299..3445a3c7a8 100644
--- a/src/plugins/platforms/windows/qtwindowsglobal.h
+++ b/src/plugins/platforms/windows/qtwindowsglobal.h
@@ -77,6 +77,8 @@ enum WindowsEventType // Simplify event types
ResizeEvent = WindowEventFlag + 12,
QuerySizeHints = WindowEventFlag + 15,
CalculateSize = WindowEventFlag + 16,
+ FocusInEvent = WindowEventFlag + 17,
+ FocusOutEvent = WindowEventFlag + 18,
MouseEvent = MouseEventFlag + 1,
MouseWheelEvent = MouseEventFlag + 2,
TouchEvent = TouchEventFlag + 1,
@@ -170,6 +172,10 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI
}
case WM_GETOBJECT:
return QtWindows::AccessibleObjectFromWindowRequest;
+ case WM_SETFOCUS:
+ return QtWindows::FocusInEvent;
+ case WM_KILLFOCUS:
+ return QtWindows::FocusOutEvent;
case WM_DISPLAYCHANGE:
return QtWindows::DisplayChangedEvent;
default:
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 5f7dfb1b10..a257736d98 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -676,10 +676,6 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
}
// Events without an associated QWindow or events we are not interested in.
switch (et) {
- case QtWindows::DeactivateApplicationEvent:
- case QtWindows::DeactivateWindowEvent:
- QWindowSystemInterface::handleWindowActivated(0);
- return true;
case QtWindows::InputMethodStartCompositionEvent:
return QWindowsInputContext::instance()->startComposition(hwnd);
case QtWindows::InputMethodCompositionEvent:
@@ -773,9 +769,12 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
return d->m_mouseHandler.translateMouseEvent(platformWindow->window(), hwnd, et, msg, result);
case QtWindows::TouchEvent:
return d->m_mouseHandler.translateTouchEvent(platformWindow->window(), hwnd, et, msg, result);
- case QtWindows::ActivateWindowEvent:
+ case QtWindows::FocusInEvent: // see QWindowsWindow::requestActivateWindow().
QWindowSystemInterface::handleWindowActivated(platformWindow->window());
return true;
+ case QtWindows::FocusOutEvent:
+ QWindowSystemInterface::handleWindowActivated(0);
+ return true;
case QtWindows::ShowEvent:
platformWindow->handleShown();
return true;
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 5d8de2e01d..28ef2c3b6c 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -1220,8 +1220,12 @@ void QWindowsWindow::requestActivateWindow()
{
if (QWindowsContext::verboseWindows)
qDebug() << __FUNCTION__ << this << window();
- if (m_data.hwnd)
+ // 'Active' state handling is based in focus since it needs to work for
+ // child windows as well.
+ if (m_data.hwnd) {
SetForegroundWindow(m_data.hwnd);
+ SetFocus(m_data.hwnd);
+ }
}
bool QWindowsWindow::setKeyboardGrabEnabled(bool grab)