]> Pileus Git - wmpus/blobdiff - sys-win32.c
Misc debugging
[wmpus] / sys-win32.c
index 5e9bae7b9eb631136ccf1b618d8d6ece56c71c69..afacdd2ba99ec8d3b3ab83b923d1462a5e5d44fc 100644 (file)
 #include <winuser.h>
 
 #include "util.h"
+#include "conf.h"
 #include "sys.h"
 #include "wm.h"
 
+/* Configuration */
+static int NO_CAPTURE = 0;
+
 /* Internal structures */
 struct win_sys {
        HWND hwnd;
@@ -40,7 +44,6 @@ typedef struct {
 } keymap_t;
 
 /* Global data */
-static int     running;
 static int     shellhookid;
 static void   *cache;
 static win_t  *root;
@@ -294,6 +297,14 @@ BOOL CALLBACK MonProc(HMONITOR mon, HDC dc, LPRECT rect, LPARAM _screens)
        return TRUE;
 }
 
+BOOL CALLBACK LoopProc(HWND hwnd, LPARAM user)
+{
+       win_t *win;
+       if ((win = win_find(hwnd,1)))
+               wm_insert(win);
+       return TRUE;
+}
+
 /********************
  * System functions *
  ********************/
@@ -375,6 +386,9 @@ win_t *sys_init(void)
        HINSTANCE hInst = GetModuleHandle(NULL);
        HWND      hwnd  = NULL;
 
+       /* Load configuration */
+       NO_CAPTURE = conf_get_int("main.no-capture", NO_CAPTURE);
+
        /* Setup window class */
        WNDCLASSEX wc    = {
                .cbSize        = sizeof(WNDCLASSEX),
@@ -420,9 +434,11 @@ win_t *sys_init(void)
 
 void sys_run(win_t *root)
 {
-       MSG msg;
-       running = 1;
-       while (running && GetMessage(&msg, NULL, 0, 0) > 0) {
+       MSG msg = {};
+       if (!NO_CAPTURE)
+               EnumWindows(LoopProc, 0);
+       while (GetMessage(&msg, NULL, 0, 0) > 0 &&
+              msg.message != WM_QUIT) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
@@ -430,7 +446,7 @@ void sys_run(win_t *root)
 
 void sys_exit(void)
 {
-       running = 0;
+       PostQuitMessage(0);
 }
 
 void sys_free(win_t *root)