URI: 
       tInitially configure windows on creation rather than mapping - glazier - window management experiments
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit c5b78cb7cb51a51de00d4effa34b06c9c9310128
   DIR parent 437de7576114491fcbfe12c16d0c4c53d2e85396
  HTML Author: Willy Goiffon <dev@z3bra.org>
       Date:   Wed, 23 Oct 2019 20:03:12 +0200
       
       Initially configure windows on creation rather than mapping
       
       Diffstat:
         M glazier.c                           |      27 +++++++++++++++++++++++++--
       
       1 file changed, 25 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/glazier.c b/glazier.c
       t@@ -25,6 +25,7 @@ static int ev_callback(xcb_generic_event_t *);
        
        /* XCB events callbacks */
        static int cb_default(xcb_generic_event_t *);
       +static int cb_create(xcb_generic_event_t *);
        static int cb_mapreq(xcb_generic_event_t *);
        static int cb_mouse_press(xcb_generic_event_t *);
        static int cb_mouse_release(xcb_generic_event_t *);
       t@@ -74,6 +75,7 @@ static const char *evname[] = {
        
        static const struct ev_callback_t cb[] = {
                /* event,             function */
       +        { XCB_CREATE_NOTIFY, cb_create },
                { XCB_MAP_REQUEST,    cb_mapreq },
                { XCB_BUTTON_PRESS,   cb_mouse_press },
                { XCB_BUTTON_RELEASE, cb_mouse_release },
       t@@ -102,6 +104,29 @@ cb_default(xcb_generic_event_t *ev)
        }
        
        static int
       +cb_create(xcb_generic_event_t *ev)
       +{
       +        int x, y, w, h;
       +        xcb_create_notify_event_t *e;
       +
       +        e = (xcb_create_notify_event_t *)ev;
       +
       +        if (e->override_redirect)
       +                return 0;
       +
       +        if (verbose)
       +                fprintf(stderr, "%s 0x%08x\n", XEV(e), e->window);
       +
       +        w = wm_get_attribute(e->window, ATTR_W);
       +        h = wm_get_attribute(e->window, ATTR_H);
       +        wm_get_cursor(0, scrn->root, &x, &y);
       +        wm_teleport(e->window, x - w/2, y - h/2, w, h);
       +        wm_reg_event(e->window, XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_STRUCTURE_NOTIFY);
       +
       +        return 0;
       +}
       +
       +static int
        cb_mapreq(xcb_generic_event_t *ev)
        {
                xcb_map_request_event_t *e;
       t@@ -114,8 +139,6 @@ cb_mapreq(xcb_generic_event_t *ev)
                wm_remap(e->window, MAP);
                wm_set_focus(e->window);
                wm_set_border(border, border_color, e->window);
       -        wm_reg_event(e->window, XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_STRUCTURE_NOTIFY);
       -
                return 0;
        }