diff --git a/manage.cpp b/manage.cpp index 4bc9ca2b79..bf79a8f0bf 100644 --- a/manage.cpp +++ b/manage.cpp @@ -528,7 +528,7 @@ bool Client::manage(xcb_window_t w, bool isMapped) // This should avoid flicker, because real restacking is done // only after manage() finishes because of blocking, but the window is shown sooner - XLowerWindow(display(), frameId()); + m_frame.lower(); if (session && session->stackingOrder != -1) { sm_stacking_order = session->stackingOrder; workspace()->restoreSessionStackingOrder(this); diff --git a/xcbutils.h b/xcbutils.h index e23197386f..86c909b535 100644 --- a/xcbutils.h +++ b/xcbutils.h @@ -432,6 +432,7 @@ public: void resize(const QSize &size); void resize(uint32_t width, uint32_t height); void raise(); + void lower(); void map(); void unmap(); /** @@ -587,6 +588,13 @@ void Window::raise() xcb_configure_window(connection(), m_window, XCB_CONFIG_WINDOW_STACK_MODE, values); } +inline +void Window::lower() +{ + const uint32_t values[] = { XCB_STACK_MODE_BELOW }; + xcb_configure_window(connection(), m_window, XCB_CONFIG_WINDOW_STACK_MODE, values); +} + inline void Window::map() {