diff --git a/src/x11/panel_window.cpp b/src/x11/panel_window.cpp index 3a65ec92..fc043f1d 100644 --- a/src/x11/panel_window.cpp +++ b/src/x11/panel_window.cpp @@ -185,7 +185,25 @@ void XPanelWindow::setFocusable(bool focusable) { emit this->focusableChanged(); } -void XPanelWindow::xInit() { this->updateDimensions(); } +void XPanelWindow::xInit() { + if (this->window == nullptr || this->window->handle() == nullptr) return; + this->updateDimensions(); + + auto* conn = x11Connection(); + + // Stick to every workspace + auto desktop = 0xffffffff; + xcb_change_property( + conn, + XCB_PROP_MODE_REPLACE, + this->window->winId(), + XAtom::_NET_WM_DESKTOP.atom(), + XCB_ATOM_CARDINAL, + 32, + 1, + &desktop + ); +} void XPanelWindow::connectScreen() { if (this->mTrackedScreen != nullptr) { diff --git a/src/x11/util.cpp b/src/x11/util.cpp index 8760ea30..cdb86e01 100644 --- a/src/x11/util.cpp +++ b/src/x11/util.cpp @@ -23,11 +23,13 @@ xcb_connection_t* x11Connection() { // NOLINTBEGIN XAtom XAtom::_NET_WM_STRUT {}; XAtom XAtom::_NET_WM_STRUT_PARTIAL {}; +XAtom XAtom::_NET_WM_DESKTOP {}; // NOLINTEND void XAtom::initAtoms() { _NET_WM_STRUT.init("_NET_WM_STRUT"); _NET_WM_STRUT_PARTIAL.init("_NET_WM_STRUT_PARTIAL"); + _NET_WM_DESKTOP.init("_NET_WM_DESKTOP"); } void XAtom::init(const QByteArray& name) { diff --git a/src/x11/util.hpp b/src/x11/util.hpp index da3f718a..579cbc78 100644 --- a/src/x11/util.hpp +++ b/src/x11/util.hpp @@ -15,6 +15,7 @@ public: // NOLINTBEGIN static XAtom _NET_WM_STRUT; static XAtom _NET_WM_STRUT_PARTIAL; + static XAtom _NET_WM_DESKTOP; // NOLINTEND static void initAtoms();