diff options
Diffstat (limited to 'src/xwayland/XWM.cpp')
-rw-r--r-- | src/xwayland/XWM.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index 5ad146e4..b5762762 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -81,6 +81,7 @@ void CXWM::handleConfigureNotify(xcb_configure_notify_event_t* e) { return; XSURF->geometry = {e->x, e->y, e->width, e->height}; + updateOverrideRedirect(XSURF, e->override_redirect); XSURF->events.setGeometry.emit(); } @@ -115,7 +116,12 @@ void CXWM::handleMapRequest(xcb_map_request_event_t* e) { void CXWM::handleMapNotify(xcb_map_notify_event_t* e) { const auto XSURF = windowForXID(e->window); - if (!XSURF || XSURF->overrideRedirect) + if (!XSURF) + return; + + updateOverrideRedirect(XSURF, e->override_redirect); + + if (XSURF->overrideRedirect) return; XSURF->setWithdrawn(false); @@ -1044,6 +1050,13 @@ bool CXWM::isWMWindow(xcb_window_t w) { return w == wmWindow || w == clipboard.window; } +void CXWM::updateOverrideRedirect(SP<CXWaylandSurface> surf, bool overrideRedirect) { + if (!surf || surf->overrideRedirect == overrideRedirect) + return; + + surf->overrideRedirect = overrideRedirect; +} + void CXWM::initSelection() { clipboard.window = xcb_generate_id(connection); uint32_t mask[1] = {XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE}; |