diff options
author | Martin Gräßlin <mgraesslin@kde.org> | 2016-08-22 08:18:53 +0200 |
---|---|---|
committer | Martin Gräßlin <mgraesslin@kde.org> | 2016-08-26 09:06:29 +0000 |
commit | 54b819679cd39e997cc9319deaf432c37667ae6f (patch) | |
tree | 418cb17bcf57537b1890b63b9ec1a629a41e6f0d | |
parent | 2cc758045e322873ad58f675a70c8d8366b5c318 (diff) | |
download | qtwayland-54b819679cd39e997cc9319deaf432c37667ae6f.tar.gz |
Pass TRANSIENT_INACTIVE flag for windows with WA_ShowWithoutActivating
When setting a transient window also evaluate the state of the window
attribute WA_ShowWithoutActivating. If that flag is set the transient
should get the inactive flag as well.
Task-number: QTBUG-55403
Change-Id: I757e5527e78f730a440e26abb52e84c9b2bb2f3a
Reviewed-by: Johan Helsing <johan.helsing@qt.io>
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
-rw-r--r-- | src/client/qwaylandwlshellsurface.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/client/qwaylandwlshellsurface.cpp b/src/client/qwaylandwlshellsurface.cpp index 7235931d..553d458d 100644 --- a/src/client/qwaylandwlshellsurface.cpp +++ b/src/client/qwaylandwlshellsurface.cpp @@ -151,6 +151,13 @@ void QWaylandWlShellSurface::setTopLevel() set_toplevel(); } +static inline bool testShowWithoutActivating(const QWindow *window) +{ + // QWidget-attribute Qt::WA_ShowWithoutActivating. + const QVariant showWithoutActivating = window->property("_q_showWithoutActivating"); + return showWithoutActivating.isValid() && showWithoutActivating.toBool(); +} + void QWaylandWlShellSurface::updateTransientParent(QWindow *parent) { QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle()); @@ -168,7 +175,8 @@ void QWaylandWlShellSurface::updateTransientParent(QWindow *parent) uint32_t flags = 0; Qt::WindowFlags wf = m_window->window()->flags(); if (wf.testFlag(Qt::ToolTip) - || wf.testFlag(Qt::WindowTransparentForInput)) + || wf.testFlag(Qt::WindowTransparentForInput) + || testShowWithoutActivating(m_window->window())) flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; set_transient(parent_wayland_window->object(), |