]> Pileus Git - wmpus/blobdiff - sys-win32.c
Use stack config variable in sys-win32
[wmpus] / sys-win32.c
index d6c1c7fe04d9ce88bc6921d2b75f7ff1b56195ea..c42f8891b9317932fb7fa48a7b0a119cecd5558e 100644 (file)
@@ -31,6 +31,7 @@
 
 /* Configuration */
 static int NO_CAPTURE = 0;
+static int STACK      = 25;
 
 /* Internal structures */
 struct win_sys {
@@ -342,16 +343,21 @@ void sys_focus(win_t *win)
        /* Windows prevents a thread from using SetForegroundInput under
         * certain circumstances and instead flashes the windows toolbar icon.
         * Attaching the thread input queues avoids this behavior */
-       DWORD oldId = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
+       HWND  fgWin = GetForegroundWindow();
+       if (fgWin == win->sys->hwnd)
+               return; // already focused
+       DWORD oldId = GetWindowThreadProcessId(fgWin, NULL);
        DWORD newId = GetCurrentThreadId();
-       AttachThreadInput(oldId, newId, TRUE);
+       if (oldId != newId)
+               AttachThreadInput(oldId, newId, TRUE);
 
        HWND next = GetWindow(win->sys->hwnd, GW_HWNDNEXT);
        SetWindowPos(win->sys->hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
        if (next)
                SetWindowPos(win->sys->hwnd, next, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
 
-       AttachThreadInput(oldId, newId, FALSE);
+       if (oldId != newId)
+               AttachThreadInput(oldId, newId, FALSE);
 }
 
 void sys_show(win_t *win, state_t state)
@@ -366,9 +372,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,STACK), TRUE);
 }
 
 void sys_watch(win_t *win, Key_t key, mod_t mod)
@@ -397,6 +407,7 @@ win_t *sys_init(void)
 
        /* Load configuration */
        NO_CAPTURE = conf_get_int("main.no-capture", NO_CAPTURE);
+       STACK      = conf_get_int("main.stack",      STACK);
 
        /* Setup window class */
        WNDCLASSEX wc    = {