Skip to content

Commit 23cd6cd

Browse files
committed
x11/panelwindow: set _NET_WM_DESKTOP to stay on all desktops
1 parent 683d92a commit 23cd6cd

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

src/x11/panel_window.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,25 @@ void XPanelWindow::setFocusable(bool focusable) {
185185
emit this->focusableChanged();
186186
}
187187

188-
void XPanelWindow::xInit() { this->updateDimensions(); }
188+
void XPanelWindow::xInit() {
189+
if (this->window == nullptr || this->window->handle() == nullptr) return;
190+
this->updateDimensions();
191+
192+
auto* conn = x11Connection();
193+
194+
// Stick to every workspace
195+
auto desktop = 0xffffffff;
196+
xcb_change_property(
197+
conn,
198+
XCB_PROP_MODE_REPLACE,
199+
this->window->winId(),
200+
XAtom::_NET_WM_DESKTOP.atom(),
201+
XCB_ATOM_CARDINAL,
202+
32,
203+
1,
204+
&desktop
205+
);
206+
}
189207

190208
void XPanelWindow::connectScreen() {
191209
if (this->mTrackedScreen != nullptr) {

src/x11/util.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ xcb_connection_t* x11Connection() {
2323
// NOLINTBEGIN
2424
XAtom XAtom::_NET_WM_STRUT {};
2525
XAtom XAtom::_NET_WM_STRUT_PARTIAL {};
26+
XAtom XAtom::_NET_WM_DESKTOP {};
2627
// NOLINTEND
2728

2829
void XAtom::initAtoms() {
2930
_NET_WM_STRUT.init("_NET_WM_STRUT");
3031
_NET_WM_STRUT_PARTIAL.init("_NET_WM_STRUT_PARTIAL");
32+
_NET_WM_DESKTOP.init("_NET_WM_DESKTOP");
3133
}
3234

3335
void XAtom::init(const QByteArray& name) {

src/x11/util.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class XAtom {
1515
// NOLINTBEGIN
1616
static XAtom _NET_WM_STRUT;
1717
static XAtom _NET_WM_STRUT_PARTIAL;
18+
static XAtom _NET_WM_DESKTOP;
1819
// NOLINTEND
1920

2021
static void initAtoms();

0 commit comments

Comments
 (0)