summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2011-10-04 12:16:00 (GMT)
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2011-10-04 12:42:04 (GMT)
commit6b716b286095a6810aa8318b68c5df32f06bc710 (patch)
tree128be902e54d4e1f3162745423996a8f51341b9b
parent3dfaa160e19c3563d0c229fbdb951d314adc918c (diff)
downloadQt-6b716b286095a6810aa8318b68c5df32f06bc710.zip
Qt-6b716b286095a6810aa8318b68c5df32f06bc710.tar.gz
Qt-6b716b286095a6810aa8318b68c5df32f06bc710.tar.bz2
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
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_s60.cpp3
-rw-r--r--src/gui/kernel/qapplication_s60.cpp9
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<QSymbianControl*>(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;
}