]> Pileus Git - wmpus/commitdiff
Add window-close function
authorAndy Spencer <andy753421@gmail.com>
Sun, 3 Jun 2012 01:47:22 +0000 (01:47 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 3 Jun 2012 05:58:33 +0000 (05:58 +0000)
sys-x11.c
sys.h
wm-wmii.c

index ef72d259984e4669d828b81007f5bc3835e68532..3ea7ded09edfad989c40657e102b51d84499ae5b 100644 (file)
--- a/sys-x11.c
+++ b/sys-x11.c
@@ -346,7 +346,7 @@ static void process_event(int type, XEvent *xe, win_t *root)
        }
        else if (type == UnmapNotify) {
                if ((win = win_find(dpy,xe->xunmap.window,0)) &&
-                    win->sys->state == ST_SHOW) {
+                    win->sys->state != ST_HIDE) {
                        if (!strut_del(root, win))
                                wm_remove(win);
                        else
@@ -479,6 +479,10 @@ void sys_show(win_t *win, state_t state)
                printf("sys_show: hide\n");
                XUnmapWindow(win->sys->dpy, win->sys->xid);
                return;
+       case ST_CLOSE:
+               printf("sys_show: close\n");
+               XDestroyWindow(win->sys->dpy, win->sys->xid);
+               return;
        }
 }
 
diff --git a/sys.h b/sys.h
index 2ac76a1c4c75e84d2f2d3a86197e98e5b1bdc7b7..8a21aef6f8315ccc27fd35ec84e24dde33e76cea 100644 (file)
--- a/sys.h
+++ b/sys.h
@@ -31,6 +31,7 @@ typedef enum {
        ST_SHADE, // show titlebar only
        ST_ICON,  // iconified/minimized
        ST_HIDE,  // completely hidden
+       ST_CLOSE, // close the window
 } state_t;
 
 /* Basic window type */
index a2be22d69a4520f15db4fc52006fe841a284cbf3..82fc223a4c8e9e6fe5ba7980460f6e3a6ae0ad86 100644 (file)
--- a/wm-wmii.c
+++ b/wm-wmii.c
@@ -755,6 +755,9 @@ int wm_handle_event(win_t *win, event_t ev, mod_t mod, ptr_t ptr)
                if (ev == EV_F6) return print_txt(),    1;
                if (ev == 'q')   return sys_exit(),     1;
        }
+       if (mod.MODKEY && mod.shift) {
+               if (ev == 'c')   return sys_show(win, ST_CLOSE), 1;
+       }
 
        /* Floating layer */
        if (ev == ' ') {
@@ -911,7 +914,7 @@ void wm_init(win_t *root)
        wm->tags    = list_insert(NULL, wm->tag);
 
        event_t ev_e[] = {EV_ENTER, EV_FOCUS};
-       event_t ev_s[] = {'h', 'j', 'k', 'l', 'q', ' ',
+       event_t ev_s[] = {'h', 'j', 'k', 'l', 'c', 'q', ' ',
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        event_t ev_m[] = {'h', 'j', 'k', 'l', 'd', 's', 'm', 't', ' ',
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',