tApply a different border color to the focused windows - glazier - window management experiments
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 53f2e3b0dc983d47096488c9b4676f37f8db0628
 (DIR) parent 1ecfca52d4636d72f63beee3c127398f6d1c3f3a
 (HTM) Author: Willy Goiffon <dev@z3bra.org>
       Date:   Wed, 23 Oct 2019 20:55:47 +0200
       
       Apply a different border color to the focused windows
       
       Diffstat:
         M glazier.c                           |      32 +++++++++++++++++++++++++++++--
       
       1 file changed, 30 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/glazier.c b/glazier.c
       t@@ -32,6 +32,7 @@ static int cb_mouse_press(xcb_generic_event_t *);
        static int cb_mouse_release(xcb_generic_event_t *);
        static int cb_motion(xcb_generic_event_t *);
        static int cb_enter(xcb_generic_event_t *);
       +static int cb_focus(xcb_generic_event_t *);
        static int cb_configure(xcb_generic_event_t *);
        static int cb_configreq(xcb_generic_event_t *);
        
       t@@ -52,6 +53,7 @@ static const char *evname[] = {
                [XCB_CONFIGURE_NOTIFY] = "CONFIGURE_NOTIFY",
                [XCB_KEY_PRESS] = "KEY_PRESS",
                [XCB_FOCUS_IN] = "FOCUS_IN",
       +        [XCB_FOCUS_OUT] = "FOCUS_OUT",
                [XCB_KEYMAP_NOTIFY] = "KEYMAP_NOTIFY",
                [XCB_EXPOSE] = "EXPOSE",
                [XCB_GRAPHICS_EXPOSURE] = "GRAPHICS_EXPOSURE",
       t@@ -82,6 +84,8 @@ static const struct ev_callback_t cb[] = {
                { XCB_BUTTON_RELEASE, cb_mouse_release },
                { XCB_MOTION_NOTIFY,  cb_motion },
                { XCB_ENTER_NOTIFY,   cb_enter },
       +        { XCB_FOCUS_IN,       cb_focus },
       +        { XCB_FOCUS_OUT,      cb_focus },
                { XCB_CONFIGURE_NOTIFY, cb_configure },
                { XCB_CONFIGURE_REQUEST, cb_configreq },
        };
       t@@ -105,7 +109,9 @@ adopt(xcb_window_t wid)
                } else {
                        wm_set_border(border, border_color, wid);
                }
       -        wm_reg_event(wid, XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_STRUCTURE_NOTIFY);
       +        wm_reg_event(wid, XCB_EVENT_MASK_ENTER_WINDOW
       +                | XCB_EVENT_MASK_FOCUS_CHANGE
       +                | XCB_EVENT_MASK_STRUCTURE_NOTIFY);
        
                return 0;
        }
       t@@ -178,8 +184,8 @@ cb_mapreq(xcb_generic_event_t *ev)
                        fprintf(stderr, "%s 0x%08x\n", XEV(e), e->window);
        
                wm_remap(e->window, MAP);
       -        wm_set_focus(e->window);
                wm_set_border(border, border_color, e->window);
       +        wm_set_focus(e->window);
                return 0;
        }
        
       t@@ -343,6 +349,28 @@ cb_enter(xcb_generic_event_t *ev)
        }
        
        static int
       +cb_focus(xcb_generic_event_t *ev)
       +{
       +        xcb_focus_in_event_t *e;
       +
       +        e = (xcb_focus_in_event_t *)ev;
       +
       +        if (verbose)
       +                fprintf(stderr, "%s 0x%08x\n", XEV(e), e->event);
       +
       +        switch(e->response_type & ~0x80) {
       +        case XCB_FOCUS_IN:
       +                wm_set_border(border, border_color_active, e->event);
       +                break;
       +        case XCB_FOCUS_OUT:
       +                wm_set_border(border, border_color, e->event);
       +                break;
       +        }
       +
       +        return 0;
       +}
       +
       +static int
        cb_configure(xcb_generic_event_t *ev)
        {
                xcb_configure_notify_event_t *e;