URI: 
       tAdd reshape function using mouse button 2 - glazier - window management experiments
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 46b37f41dcfdaf7c01d12a9a8e37c0c462656e86
   DIR parent b9097b9f7da1fae1e4a7c621ca122ea8adb62d35
  HTML Author: Willy Goiffon <dev@z3bra.org>
       Date:   Sat, 26 Oct 2019 13:54:59 +0200
       
       Add reshape function using mouse button 2
       
       Diffstat:
         M glazier.c                           |      31 +++++++++++++++++++++++++++++--
       
       1 file changed, 29 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/glazier.c b/glazier.c
       t@@ -9,6 +9,8 @@
        
        #define LEN(x) (sizeof(x)/sizeof(x[0]))
        #define XEV(x) (evname[(x)->response_type & ~0x80])
       +#define MIN(x,y) ((x)>(y)?(y):(x))
       +#define MAX(x,y) ((x)>(y)?(x):(y))
        
        struct ev_callback_t {
                uint32_t type;
       t@@ -255,7 +257,7 @@ cb_mouse_press(xcb_generic_event_t *ev)
                        wm_reg_cursor_event(scrn->root, mask, XHAIR_MOVE);
                        break;
                case 2:
       -                xcb_kill_client(conn, e->child);
       +                wm_reg_cursor_event(scrn->root, mask, XHAIR_SIZE);
                        break;
                case 3:
                        curwid = e->child;
       t@@ -311,6 +313,13 @@ cb_mouse_release(xcb_generic_event_t *ev)
                        h = wm_get_attribute(curwid, ATTR_H);
                        wm_teleport(curwid, e->root_x - cursor.x, e->root_y - cursor.y, w, h);
                        break;
       +        case 2:
       +                x = MIN(e->root_x,cursor.x);
       +                y = MIN(e->root_y,cursor.y);
       +                w = MAX(e->root_x,cursor.x) - x;
       +                h = MAX(e->root_y,cursor.y) - y;
       +                wm_teleport(curwid, x, y, w, h);
       +                break;
                case 3:
                        x = wm_get_attribute(curwid, ATTR_X);
                        y = wm_get_attribute(curwid, ATTR_Y);
       t@@ -350,7 +359,7 @@ cb_motion(xcb_generic_event_t *ev)
        
                lasttime = e->time;
        
       -        switch (e->state & (XCB_BUTTON_MASK_1|XCB_BUTTON_MASK_3)) {
       +        switch (e->state & (XCB_BUTTON_MASK_1|XCB_BUTTON_MASK_2|XCB_BUTTON_MASK_3)) {
                case XCB_BUTTON_MASK_1:
                        x = e->root_x - cursor.x;
                        y = e->root_y - cursor.y;
       t@@ -358,6 +367,23 @@ cb_motion(xcb_generic_event_t *ev)
                        h = wm_get_attribute(curwid, ATTR_H);
                        outline(scrn->root, x, y, w, h, 0);
                        break;
       +        case XCB_BUTTON_MASK_2:
       +                if (cursor.x > e->root_x) {
       +                        x = e->root_x;
       +                        w = cursor.x - x;
       +                } else {
       +                        x = cursor.x;
       +                        w = e->root_x - x;
       +                }
       +                if (cursor.y > e->root_y) {
       +                        y = e->root_y;
       +                        h = cursor.y - y;
       +                } else {
       +                        y = cursor.y;
       +                        h = e->root_y - y;
       +                }
       +                outline(scrn->root, x, y, w, h, 0);
       +                break;
                case XCB_BUTTON_MASK_3:
                        x = wm_get_attribute(curwid, ATTR_X);
                        y = wm_get_attribute(curwid, ATTR_Y);
       t@@ -387,6 +413,7 @@ cb_enter(xcb_generic_event_t *ev)
                        fprintf(stderr, "%s 0x%08x\n", XEV(e), e->event);
        
                wm_set_focus(e->event);
       +        curwid = e->event;
        
                return 0;
        }