]> Pileus Git - wmpus/commitdiff
Use st_shade state instead of minimizing windows
authorAndy Spencer <andy753421@gmail.com>
Thu, 13 Oct 2011 08:11:18 +0000 (08:11 +0000)
committerAndy Spencer <andy753421@gmail.com>
Wed, 26 Oct 2011 05:20:49 +0000 (05:20 +0000)
Support st_shade on win32

makefile
sys-win32.c
wm-wmii.c

index 74e1278fcd3c92481788667fb614f1d5c105efd3..f9ad109ee7f1f5bc8d4379a3d49e958b80b57f13 100644 (file)
--- a/makefile
+++ b/makefile
@@ -11,6 +11,7 @@ endif
 ifeq ($(SYS),win32)
 CC      = i686-pc-mingw32-gcc
 CFLAGS += -D_MODE_T_
+LIBS   += -lgdi32
 PROG    = wmpus.exe
 endif
 
index d6c1c7fe04d9ce88bc6921d2b75f7ff1b56195ea..8513bca081f71a38af95174aeb136b1bce3ac294 100644 (file)
@@ -366,9 +366,13 @@ void sys_show(win_t *win, state_t state)
                [st_icon ] {"icon" , SW_MINIMIZE},
                [st_hide ] {"hide" , SW_HIDE    },
        };
+       if (win->state != state && win->state == st_shade)
+               SetWindowRgn(win->sys->hwnd, NULL, TRUE);
        win->state = state;
        printf("sys_show: %s\n", map[state].str);
        ShowWindow(win->sys->hwnd, map[state].cmd);
+       if (state == st_shade)
+               SetWindowRgn(win->sys->hwnd, CreateRectRgn(0,0,win->w,25), TRUE);
 }
 
 void sys_watch(win_t *win, Key_t key, mod_t mod)
index df88527fccb137dc057f4a4b991d3078f445088e..7654948ee5d6d61b1cb2877736b680149fb2cc80 100644 (file)
--- a/wm-wmii.c
+++ b/wm-wmii.c
@@ -47,6 +47,7 @@ struct win_wm { };
 typedef struct {
        win_t  *win;     // the window
        int     height;  // win height in _this_ tag
+       state_t state;   // state of window
 } row_t;
 
 typedef struct {
@@ -59,6 +60,7 @@ typedef struct {
 typedef struct {
        win_t *win;      // the window
        int x, y, w, h;  // position of window (in this tag)
+       state_t state;   // state of window
 } flt_t;
 
 typedef struct {
@@ -633,6 +635,7 @@ static void wm_update_cols(dpy_t *dpy)
                for (list_t *lrow = col->rows; lrow; lrow = lrow->next) {
                        win_t *win = ROW(lrow)->win;
                        win->h = ROW(lrow)->height;
+                       state_t state = st_show;
                        int height = 0;
                        switch (col->mode) {
                        case split:
@@ -647,11 +650,13 @@ static void wm_update_cols(dpy_t *dpy)
                                        win_t *next = ROW(lrow->next)->win;
                                        sys_move(next, x+MARGIN, y+MARGIN+STACK+MARGIN/2,
                                                col->width, sy);
+                                       sys_show(next, st_show);
                                }
-                               height = win == col->row->win ? sy : STACK;
-                               sys_move(win, x+MARGIN, y+MARGIN,
-                                       col->width, height);
-                               y += height + (MARGIN/2);
+                               int isfocus = win == col->row->win;
+                               state  = isfocus ? st_show : st_shade;
+                               sys_show(win, state);
+                               sys_move(win, x+MARGIN, y+MARGIN, col->width, sy);
+                               y += (isfocus ? sy : STACK) + (MARGIN/2);
                                break;
                        case max:
                        case tab:
@@ -659,6 +664,8 @@ static void wm_update_cols(dpy_t *dpy)
                                        col->width, dpy->geom->h-2*MARGIN);
                                break;
                        }
+                       ROW(lrow)->state = state;
+                       sys_show(win, state);
                        if (focus == win)
                                sys_raise(win);
                        ROW(lrow)->height = win->h;
@@ -674,9 +681,9 @@ void wm_update(void)
 {
        /* Show/hide tags */
        tag_foreach_col(wm_tag, dpy, col, row, win)
-               sys_show(win, st_show);
+               sys_show(win, ROW(row)->state);
        tag_foreach_flt(wm_tag, dpy, flt, win)
-               sys_show(win, st_show);
+               sys_show(win, FLT(flt)->state);
        for (list_t *tag = wm ->tags; tag; tag = tag->next)
                if (tag->data != wm_tag) {
                        tag_foreach_col(TAG(tag), dpy, col, row, win)
@@ -717,7 +724,7 @@ int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
                        return set_move(win,ptr,resize), 1;
                if (move_mode != none && mod.up)
                        return set_move(win,ptr,none),   1;
-               if (key == key_mouse1 && !mod.up && win->h == STACK)
+               if (key == key_mouse1 && !mod.up && win->state == st_shade)
                        return set_focus(win), wm_update(), 0;
                return 0;
        }
@@ -731,8 +738,9 @@ int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
 #ifdef DEBUG
                if (key == key_f1) return raise_float(win), 1;
                if (key == key_f2) return set_focus(win), 1;
-               if (key == key_f3) return sys_show(win, st_show), 1;
-               if (key == key_f4) return sys_show(win, st_hide), 1;
+               if (key == key_f3) return sys_show(win, st_show),  1;
+               if (key == key_f4) return sys_show(win, st_hide),  1;
+               if (key == key_f7) return sys_show(win, st_shade), 1;
 #endif
                if (key == key_f5) return wm_update(),    1;
                if (key == key_f6) return print_txt(),    1;
@@ -789,7 +797,7 @@ int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
        }
 
        /* Focus change */
-       if (key == key_enter && win->h != STACK)
+       if (key == key_enter && win->state != st_shade)
                return set_focus(win), 1;
 
        if (key_mouse0 <= key && key <= key_mouse7)
@@ -908,7 +916,8 @@ void wm_init(win_t *root)
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
        Key_t keys_m[] = {'h', 'j', 'k', 'l', 'd', 's', 'm', 't', ' ',
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-               key_f1, key_f2, key_f3, key_f4, key_f5, key_f6,
+               key_f1, key_f2, key_f3, key_f4,  key_f5,  key_f6,
+               key_f7, key_f8, key_f9, key_f10, key_f11, key_f12,
                key_mouse1, key_mouse3};
        for (int i = 0; i < countof(keys_e); i++)
                sys_watch(root, keys_e[i],  MOD());