summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/qnx
diff options
context:
space:
mode:
authorFabian Bumberger <fbumberger@rim.com>2013-12-03 15:18:13 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-12 15:56:35 +0100
commitd56f5df84fb84cdd85e06c1b8e6f075836179847 (patch)
tree21ca7105a376476ab5b57eacb7dfa583482a4360 /src/plugins/platforms/qnx
parente6c8b86b84172816ef316f8fdcb8a86702208150 (diff)
QNX: Fix focus handling for secondary screen
This patch removes the activaton aand deactivation of a window when we get the window group activated event from the navigator. This event is sent to both the primary and secondary screen and does not state if a window should be active from a Qt perspective. A window should only be active if it has screen keyboard focus. Change-Id: Ibbed0dd76a21d86f4b580265f996357a8eef5192 Reviewed-by: Roger Maclean <rmaclean@qnx.com> Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/plugins/platforms/qnx')
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.cpp4
-rw-r--r--src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp16
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp15
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.h1
4 files changed, 10 insertions, 26 deletions
diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp
index a09d6ce1f5..e6c37b8445 100644
--- a/src/plugins/platforms/qnx/qqnxscreen.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreen.cpp
@@ -728,8 +728,6 @@ void QQnxScreen::activateWindowGroup(const QByteArray &id)
if (m_coverWindow)
m_coverWindow->setExposed(false);
-
- QWindowSystemInterface::handleWindowActivated(window);
}
void QQnxScreen::deactivateWindowGroup(const QByteArray &id)
@@ -744,8 +742,6 @@ void QQnxScreen::deactivateWindowGroup(const QByteArray &id)
Q_FOREACH (QQnxWindow *childWindow, m_childWindows)
childWindow->setExposed(false);
-
- QWindowSystemInterface::handleWindowActivated(rootWindow()->window());
}
QQnxWindow *QQnxScreen::rootWindow() const
diff --git a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
index 37071d825c..1e33e2b50f 100644
--- a/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp
@@ -341,10 +341,6 @@ void QQnxScreenEventHandler::handlePointerEvent(screen_event_t event)
}
}
- // If we don't have a navigator, we don't get activation events.
- if (buttonState && w && w != QGuiApplication::focusWindow() && !m_qnxIntegration->supportsNavigatorEvents())
- QWindowSystemInterface::handleWindowActivated(w);
-
m_lastMouseWindow = qnxWindow;
// Apply scaling to wheel delta and invert value for Qt. We'll probably want to scale
@@ -616,9 +612,15 @@ void QQnxScreenEventHandler::handleKeyboardFocusPropertyEvent(screen_window_t wi
if (window && screen_get_window_property_iv(window, SCREEN_PROPERTY_KEYBOARD_FOCUS, &focus) != 0)
qFatal("QQnx: failed to query keyboard focus property, errno=%d", errno);
- QWindow *w = focus ? QQnxIntegration::window(window) : 0;
-
- QWindowSystemInterface::handleWindowActivated(w);
+ QWindow *focusWindow = QQnxIntegration::window(window);
+ if (focus) {
+ QWindowSystemInterface::handleWindowActivated(focusWindow);
+ } else if (focusWindow == QGuiApplication::focusWindow()) {
+ // Deactivate only if the window was the focus window.
+ // Screen might send a keyboard focus event for a newly created
+ // window on the secondary screen, with focus 0.
+ QWindowSystemInterface::handleWindowActivated(0);
+ }
}
#include "moc_qqnxscreeneventhandler.cpp"
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index b25c0b5b29..ee539e9aed 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -458,12 +458,7 @@ void QQnxWindow::lower()
void QQnxWindow::requestActivateWindow()
{
- qWindowDebug() << Q_FUNC_INFO << "window =" << window();
-
- // TODO: Tell screen to set keyboard focus to this window.
-
- // Notify that we gained focus.
- gainedFocus();
+ // Overwrite the default implementation where the window is activated
}
@@ -487,14 +482,6 @@ void QQnxWindow::propagateSizeHints()
qWindowDebug() << Q_FUNC_INFO << ": ignored";
}
-void QQnxWindow::gainedFocus()
-{
- qWindowDebug() << Q_FUNC_INFO << "window =" << window();
-
- // Got focus
- QWindowSystemInterface::handleWindowActivated(window());
-}
-
void QQnxWindow::setMMRendererWindowName(const QString &name)
{
m_mmRendererWindowName = name;
diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h
index 3c8070b0be..2f44202b4c 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.h
+++ b/src/plugins/platforms/qnx/qqnxwindow.h
@@ -93,7 +93,6 @@ public:
void propagateSizeHints();
- void gainedFocus();
void setMMRendererWindowName(const QString &name);
void setMMRendererWindow(screen_window_t handle);
void clearMMRendererWindow();