/* Compress activation events. If the next focus window is already known * at the time the current one receives focus-out, pass that to * QWindowSystemInterface instead of sending 0 and ignore its consecutive * focus-in event. * This helps applications that do handling in focus-out events. */ void QWindowsContext::handleFocusEvent(QtWindows::WindowsEventType et, QWindowsWindow *platformWindow) { QWindow *nextActiveWindow = 0; if (et == QtWindows::FocusInEvent) { QWindow *topWindow = QWindowsWindow::topLevelOf(platformWindow->window()); QWindow *modalWindow = 0; if (QGuiApplicationPrivate::instance()->isWindowBlocked(topWindow, &modalWindow) && topWindow != modalWindow) { modalWindow->requestActivate(); return; } // QTBUG-32867: Invoking WinAPI SetParent() can cause focus-in for the // window which is not desired for native child widgets. if (platformWindow->testFlag(QWindowsWindow::WithinSetParent)) { QWindow *currentFocusWindow = QGuiApplication::focusWindow(); if (currentFocusWindow && currentFocusWindow != platformWindow->window()) { currentFocusWindow->requestActivate(); return; } } nextActiveWindow = platformWindow->window(); } else { // Focus out: Is the next window known and different // from the receiving the focus out. if (const HWND nextActiveHwnd = GetFocus()) if (QWindowsWindow *nextActivePlatformWindow = findClosestPlatformWindow(nextActiveHwnd)) if (nextActivePlatformWindow != platformWindow) nextActiveWindow = nextActivePlatformWindow->window(); } if (nextActiveWindow != d->m_lastActiveWindow) { d->m_lastActiveWindow = nextActiveWindow; QWindowSystemInterface::handleWindowActivated(nextActiveWindow); } }
/* Compress activation events. If the next focus window is already known * at the time the current one receives focus-out, pass that to * QWindowSystemInterface instead of sending 0 and ignore its consecutive * focus-in event. * This helps applications that do handling in focus-out events. */ void QWindowsContext::handleFocusEvent(QtWindows::WindowsEventType et, QWindowsWindow *platformWindow) { QWindow *nextActiveWindow = 0; if (et == QtWindows::FocusInEvent) { nextActiveWindow = platformWindow->window(); } else { // Focus out: Is the next window known and different // from the receiving the focus out. if (const HWND nextActiveHwnd = GetFocus()) if (QWindowsWindow *nextActivePlatformWindow = findClosestPlatformWindow(nextActiveHwnd)) if (nextActivePlatformWindow != platformWindow) nextActiveWindow = nextActivePlatformWindow->window(); } if (nextActiveWindow != d->m_lastActiveWindow) { d->m_lastActiveWindow = nextActiveWindow; QWindowSystemInterface::handleWindowActivated(nextActiveWindow); } }