diff options
author | Richard Moe Gustavsen <richard.gustavsen@digia.com> | 2013-01-28 15:16:02 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-21 14:55:10 +0100 |
commit | 22077e1609c8a5af39d48ddfb65066581ef15c0d (patch) | |
tree | bf999e3ec88cf5df2ae03ea6b6b5b4b1ebac8336 /src/gui/kernel/qplatformintegration.h | |
parent | 03b25125986f083a260b421abeed1f1d088d27b3 (diff) |
QPA: Add interface for setting the application state explicitly
The motivation for this patch is twofold:
1: we need a way (for iOS/Android) to tell the current window to remove
focus from the focus object when the user hides the input panel.
Otherwise, if the focus object is e.g a line edit, the cursor will
continue to blink inside it, which is wrong. As it stands, telling
the active window to deactivate
(by calling QWindowSystemInterface::handleWindowActivated(0)), will cause
the whole application to deactivate if no windows are active, which
is not what we want.
2: Qt currently understands just two application states, Activated and
Deactivated. On mobile platforms we can have other states
as well, like "suspended" on iOS. So controlling the application
state should not depend on window activation, but instead be controlled
through a separate API by the platform plugin.
This patch will add the following function:
QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState newState)
that lets us control the application state from the plugin. This also
means that we factor out application state handling from window
activation, which also gives us a way to remove focus from a window while
keeping the application active.
To not break existing desktop platforms that relies on application
activation being tied to window activation, we need to make this API
opt-in by using a platform integration capability hint. This is not optimal, but
found necessary after investigating several other solutions.
Which states (other that active/inactive) it makes sense
to add to Qt::ApplicationState will be a topic for later patches.
Change-Id: Ic6fdd3b66867abb67da43eba04ec86f06d82ff94
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/gui/kernel/qplatformintegration.h')
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 6e10df9495..55517cf600 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -88,7 +88,8 @@ public: SharedGraphicsCache, BufferQueueingOpenGL, WindowMasks, - MultipleWindows + MultipleWindows, + ApplicationState }; virtual ~QPlatformIntegration() { } |