From 6b716b286095a6810aa8318b68c5df32f06bc710 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 4 Oct 2011 15:16:00 +0300 Subject: Symbian: Fix native dialog with splitscreen VKB focus loss issue If a native input dialog that utilized splitscreen VKB was opened while focus was on QML TextEdit element, the focus would not be restored to QML TextEdit element after native dialog was closed. This happened because the KSplitViewCloseEvent came after FocusChanged, as the focus changes are ignored while splitview VKB is open. Task-number: QTBUG-21733 Reviewed-by: Sami Merila --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 3 +++ src/gui/kernel/qapplication_s60.cpp | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index bacf07a..0f9f0db 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -898,6 +898,9 @@ void QCoeFepInputContext::ensureWidgetVisibility() void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget) { + if (!widget) + return; + // Native side opening and closing its virtual keyboard when it changes the keyboard layout, // has an adverse impact on long tap timer. Cancel the timer when splitview opens to avoid this. QSymbianControl *symControl = static_cast(widget->effectiveWinId()); diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 80bcdf0..03da630 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1493,12 +1493,15 @@ void QSymbianControl::handleClientAreaChange() } } -bool QSymbianControl::isSplitViewWidget(QWidget *widget) { +bool QSymbianControl::isSplitViewWidget(QWidget *widget) +{ bool returnValue = true; - //Ignore events sent to non-active windows, not visible widgets and not parents of input widget. + // Ignore events sent to non-active windows, not visible widgets and not parents of input widget + // and non-Qt dialogs. if (!qwidget->isActiveWindow() || !qwidget->isVisible() - || !qwidget->isAncestorOf(widget)) { + || !qwidget->isAncestorOf(widget) + || CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) { returnValue = false; } -- cgit v0.12