summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qapplication_s60.cpp
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-11-11 13:05:27 (GMT)
committeraxis <qt-info@nokia.com>2009-11-12 12:29:15 (GMT)
commit42d990bde3ea5e825d90d245a958c7faf7a6aa5b (patch)
tree5d113787fd99c2c6f88f028950a90cbd49891859 /src/gui/kernel/qapplication_s60.cpp
parent929dd1e7bc02c51e324425a79243f0ff08fb1508 (diff)
downloadQt-42d990bde3ea5e825d90d245a958c7faf7a6aa5b.zip
Qt-42d990bde3ea5e825d90d245a958c7faf7a6aa5b.tar.gz
Qt-42d990bde3ea5e825d90d245a958c7faf7a6aa5b.tar.bz2
Fixed a focusing bug on Symbian.
When Symbian pops up a menu or dialog, Qt should produce FocusOut events using PopupFocusReason rather than deactivating the whole window. This keeps input widgets from losing focus when FEP wants to pop up dialogs. AutoTest: QWidget passed RevBy: Jason Barron
Diffstat (limited to 'src/gui/kernel/qapplication_s60.cpp')
-rw-r--r--src/gui/kernel/qapplication_s60.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 0c2099b..dd2ccf2 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -324,6 +324,7 @@ QSymbianControl::QSymbianControl(QWidget *w)
, m_longTapDetector(0)
, m_ignoreFocusChanged(0)
, m_previousEventLongTap(0)
+ , m_symbianPopupIsOpen(0)
{
}
@@ -915,6 +916,15 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
return;
if (IsFocused() && IsVisible()) {
+ if (m_symbianPopupIsOpen) {
+ QWidget *fw = QApplication::focusWidget();
+ if (fw) {
+ QFocusEvent event(QEvent::FocusIn, Qt::PopupFocusReason);
+ QCoreApplication::sendEvent(fw, &event);
+ }
+ m_symbianPopupIsOpen = false;
+ }
+
QApplication::setActiveWindow(qwidget->window());
#ifdef Q_WS_S60
// If widget is fullscreen, hide status pane and button container
@@ -928,6 +938,16 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
buttonGroup->MakeVisible(!isFullscreen);
#endif
} else if (QApplication::activeWindow() == qwidget->window()) {
+ if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) {
+ QWidget *fw = QApplication::focusWidget();
+ if (fw) {
+ QFocusEvent event(QEvent::FocusOut, Qt::PopupFocusReason);
+ QCoreApplication::sendEvent(fw, &event);
+ }
+ m_symbianPopupIsOpen = true;
+ return;
+ }
+
QApplication::setActiveWindow(0);
}
// else { We don't touch the active window unless we were explicitly activated or deactivated }