summaryrefslogtreecommitdiff
path: root/manager.c
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-04-15 16:12:52 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-04-15 16:12:52 +0200
commit91fe87974e8c0d02b230fb1218905920154f5af5 (patch)
treebe8b95a24da5fe23edc2a572a5000249a2f7d703 /manager.c
parentc7bdedb36bde9e26cc0ce4e58a9ce7e425f19ac2 (diff)
downloadglitch-91fe87974e8c0d02b230fb1218905920154f5af5.tar.gz
Fix XError handling and Display Lock on Event handling
Diffstat (limited to 'manager.c')
-rw-r--r--manager.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/manager.c b/manager.c
index 58ee90a..f6b46f1 100644
--- a/manager.c
+++ b/manager.c
@@ -586,7 +586,11 @@ void handle_configure_request(void) {
changes.sibling = ev->above;
changes.stack_mode = ev->detail;
+ XErrorHandler old = XSetErrorHandler(ignore_x_error);
XConfigureWindow(wm.dpy, ev->window, ev->value_mask, &changes);
+ XSync(wm.dpy, False);
+ XSetErrorHandler(old);
+
log_message(stdout, LOG_DEBUG, "ConfigureRequest for 0x%lx (x=%d, y=%d, w=%d, h=%d)", ev->window, ev->x, ev->y, ev->width, ev->height);
}
@@ -595,6 +599,8 @@ void handle_map_request(void) {
Window window = wm.ev.xmaprequest.window;
if (window == wm.root) return;
+ XErrorHandler old = XSetErrorHandler(ignore_x_error);
+
// Move window under cursor position and clamps inside the screen bounds.
XWindowAttributes check_attr;
if (XGetWindowAttributes(wm.dpy, window, &check_attr)) {
@@ -635,6 +641,10 @@ void handle_map_request(void) {
grab_buttons(window);
add_client(window);
+
+ XSync(wm.dpy, False);
+ XSetErrorHandler(old);
+
log_message(stdout, LOG_DEBUG, "Window 0x%lx mapped and grabbed on desktop %d", window, wm.current_desktop);
redraw_widgets();
update_client_list();
@@ -972,10 +982,10 @@ void handle_button_release(void) {
if (wm.start.subwindow != None && (wm.start.state & MODKEY)) {
XDefineCursor(wm.dpy, wm.start.subwindow, None);
- // Restore default error handler
- XSetErrorHandler(NULL);
+ // Restore window manager error handler
+ XSetErrorHandler(x_error_handler);
- log_message(stdout, LOG_DEBUG, "Restored default cursor on window 0x%lx", wm.start.subwindow);
+ log_message(stdout, LOG_DEBUG, "Restored window manager cursor on window 0x%lx", wm.start.subwindow);
wm.start.subwindow = None;
}