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>
This commit is contained in:
Martin Gräßlin 2016-08-22 08:18:53 +02:00
parent 895b46e394
commit f6417bd744

View File

@ -151,6 +151,13 @@ void QWaylandWlShellSurface::setTopLevel()
set_toplevel(); 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) void QWaylandWlShellSurface::updateTransientParent(QWindow *parent)
{ {
QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle()); QWaylandWindow *parent_wayland_window = static_cast<QWaylandWindow *>(parent->handle());
@ -168,7 +175,8 @@ void QWaylandWlShellSurface::updateTransientParent(QWindow *parent)
uint32_t flags = 0; uint32_t flags = 0;
Qt::WindowFlags wf = m_window->window()->flags(); Qt::WindowFlags wf = m_window->window()->flags();
if (wf.testFlag(Qt::ToolTip) if (wf.testFlag(Qt::ToolTip)
|| wf.testFlag(Qt::WindowTransparentForInput)) || wf.testFlag(Qt::WindowTransparentForInput)
|| testShowWithoutActivating(m_window->window()))
flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE; flags |= WL_SHELL_SURFACE_TRANSIENT_INACTIVE;
set_transient(parent_wayland_window->object(), set_transient(parent_wayland_window->object(),