From 54b819679cd39e997cc9319deaf432c37667ae6f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= <mgraesslin@kde.org>
Date: Mon, 22 Aug 2016 08:18:53 +0200
Subject: [PATCH] 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>
---
 src/client/qwaylandwlshellsurface.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

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(),
-- 
GitLab