diff options
author | Kai Uwe Broulik <kde@privat.broulik.de> | 2024-03-13 17:39:41 +0100 |
---|---|---|
committer | Kai Uwe Broulik <kde@privat.broulik.de> | 2024-04-26 19:31:15 +0100 |
commit | b875b566b23396acc0662ae6c39b503334063052 (patch) | |
tree | d9d4140831d25757d30eb2dc987993db2fcefa19 /src/client | |
parent | 2c2763760bcdd8894cfe9d9a1c07f7b022692892 (diff) |
QWaylandWindow: requestActivate on show
For simplicitly, a Wayland compositor typically activates a window
when it is mapped. However, it does not necessarily have to and
might not want to in order to prevent stealing focus.
Inttroduce a requestActivateOnShow() on the shell which is called
when showing a window and, in case of XDG Shell, will explicitly
request activation (unless Qt::WA_ShowWithoutActivating is set)
and make use of the existing XDG Activation infrastructure.
Change-Id: I69ab5f2cee4540d5baefa5a266f22dbb165e4192
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/qwaylandshellsurface_p.h | 1 | ||||
-rw-r--r-- | src/client/qwaylandwindow.cpp | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/src/client/qwaylandshellsurface_p.h b/src/client/qwaylandshellsurface_p.h index 6499a2bb0..8632efd04 100644 --- a/src/client/qwaylandshellsurface_p.h +++ b/src/client/qwaylandshellsurface_p.h @@ -70,6 +70,7 @@ public: virtual void setWindowPosition(const QPoint &position) { Q_UNUSED(position); } virtual bool requestActivate() { return false; } + virtual bool requestActivateOnShow() { return false; } virtual void setXdgActivationToken(const QString &token); virtual void requestXdgActivationToken(quint32 serial); diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 7fc9f398b..081110f83 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -576,6 +576,9 @@ void QWaylandWindow::setVisible(bool visible) // Don't flush the events here, or else the newly visible window may start drawing, but since // there was no frame before it will be stuck at the waitForFrameSync() in // QWaylandShmBackingStore::beginPaint(). + + if (mShellSurface) + mShellSurface->requestActivateOnShow(); } else { sendExposeEvent(QRect()); reset(); |