diff options
author | uint23 <[email protected]> | 2025-04-15 11:43:58 +0100 |
---|---|---|
committer | uint23 <[email protected]> | 2025-04-15 11:43:58 +0100 |
commit | 7cada56e7c6330b1f7fa9f811dc1a1ef5638aa13 (patch) | |
tree | 5f1ec9928f24b702096c64508da8d8569450f026 /src/sxwm.c | |
parent | ea8c0e5bdce00cc27d22c6c128d6e9a306ef2175 (diff) |
proper mapping handling
Diffstat (limited to 'src/sxwm.c')
-rw-r--r-- | src/sxwm.c | 55 |
1 files changed, 54 insertions, 1 deletions
@@ -24,7 +24,11 @@ typedef void (*EventHandler)(XEvent *); static void hdl_dummy(XEvent *xev); +static void hdl_config_req(XEvent *xev); +static void hdl_destroy_ntf(XEvent *xev); static void hdl_keypress(XEvent *xev); +static void hdl_map_req(XEvent *xev); +static void hdl_unmap_ntf(XEvent *xev); static void other_wm(void); static int other_wm_err(Display *dpy, XErrorEvent *ee); static void quit(void); @@ -42,7 +46,33 @@ static Window root; #include "usercfg.h" static void -hdl_dummy(XEvent *xev){} +hdl_dummy(XEvent *xev) +{} + +static void +hdl_config_req(XEvent *xev) +{ + XConfigureRequestEvent ev = xev->xconfigurerequest; + XWindowChanges wc; + wc.y = ev.y; + wc.width = ev.width; + wc.height = ev.height; + wc.border_width = ev.border_width; + wc.sibling = ev.above; + wc.stack_mode = ev.detail; + + XConfigureWindow(dpy, ev.window, ev.value_mask, &wc); + printf("sxwm: window configured: %ld\n", ev.window); +} + + +static void +hdl_destroy_ntf(XEvent *xev) +{ + XDestroyWindowEvent ev = xev->xdestroywindow; + XDestroyWindow(dpy, ev.window); + printf("sxwm: window destroyed: %ld\n", ev.window); +} static void hdl_keypress(XEvent *xev) @@ -67,6 +97,29 @@ hdl_keypress(XEvent *xev) } static void +hdl_map_req(XEvent *xev) +{ + XMapRequestEvent ev = xev->xmaprequest; + XSetWindowBorder(dpy, ev.window, WhitePixel(dpy, DefaultScreen(dpy))); + XSetWindowBorderWidth(dpy, ev.window, BORDERWIDTH); + XMapWindow(dpy, ev.window); + + XWindowAttributes wa; + if (!XGetWindowAttributes(dpy, ev.window, &wa)) + return; + + printf("sxwm: window mapped: %ld\n", ev.window); +} + +static void +hdl_unmap_ntf(XEvent *xev) +{ + XUnmapEvent ev = xev->xunmap; + XUnmapWindow(dpy, ev.window); + printf("sxwm: window unmapped: %ld\n", ev.window); +} + +static void other_wm(void) { XSetErrorHandler(other_wm_err); |