aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/xwayland/XWM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xwayland/XWM.cpp')
-rw-r--r--src/xwayland/XWM.cpp15
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};