From 9788c0f47cfae17a39137dec47aa0b9f3f9bedad Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 28 Feb 2014 16:30:15 +0100 Subject: [PATCH] Fix focus in Active Qt webbrowser. Active X controls may cause WM_SETFOCUS/WM_KILLFOCUS to be sent to native child windows. Ensure the focus widget is set correctly in these cases. Task-number: QTBUG-37126 Change-Id: I2a4cbb148eab48e47ca3f37b2076020c95d213a5 Reviewed-by: Joerg Bornemann --- src/widgets/kernel/qapplication_qpa.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 7977ae3528..5ce2ac2c4b 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -143,6 +143,11 @@ void QApplicationPrivate::notifyActiveWindowChange(QWindow *previous) return; QWidget *tlw = qt_tlw_for_window(wnd); QApplication::setActiveWindow(tlw); + // QTBUG-37126, Active X controls may set the focus on native child widgets. + if (wnd && tlw && wnd != tlw->windowHandle()) { + if (QWidgetWindow *widgetWindow = qobject_cast(wnd)) + widgetWindow->widget()->setFocus(Qt::ActiveWindowFocusReason); + } } static void ungrabKeyboardForPopup(QWidget *popup)