]> Pileus Git - wmpus/commitdiff
Playing with focus
authorAndy Spencer <andy753421@gmail.com>
Thu, 19 May 2011 07:45:53 +0000 (07:45 +0000)
committerAndy Spencer <andy753421@gmail.com>
Thu, 19 May 2011 07:45:53 +0000 (07:45 +0000)
makefile
sys-win32.c
sys.h
wm-wmii.c

index 5cbe8fb41ff11097fecd65864c44645cabcb4765..ff5ded716d839d573c4237297245cf1ea5449b5f 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,17 +1,17 @@
 WM=wmii
 
 WM=wmii
 
-SYS=x11
-CC=gcc
-PROG=awm
-CFLAGS=-g -Wall -Os
-LIBS=-Wl,--as-needed -lX11
-TEST=DISPLAY=:2.0
+#SYS=x11
+#CC=gcc
+#PROG=awm
+#CFLAGS=-g -Wall -Os
+#LIBS=-Wl,--as-needed -lX11
+#TEST=DISPLAY=:2.0
 
 
-#SYS=win32
-#CC=i686-pc-mingw32-gcc
-#CFLAGS=-g -Wall
-#PROG=awm.exe
-#TEST=wine
+SYS=win32
+CC=i686-pc-mingw32-gcc
+CFLAGS=-g -Wall
+PROG=awm.exe
+TEST=wine
 
 test: $(PROG)
        $(TEST) ./$<
 
 test: $(PROG)
        $(TEST) ./$<
index f6479c5fdc1dabaf233f09c9e3d4811745bffb40..cfaeedf70e614851ab8d25e73ee03fcfd045ca9f 100644 (file)
@@ -26,7 +26,6 @@ typedef struct {
        int   vk;
 } keymap_t;
 
        int   vk;
 } keymap_t;
 
-/* Conversion functions */
 keymap_t key2vk[] = {
        {key_mouse1  , VK_LBUTTON },
        {key_mouse2  , VK_MBUTTON },
 keymap_t key2vk[] = {
        {key_mouse1  , VK_LBUTTON },
        {key_mouse2  , VK_MBUTTON },
@@ -64,6 +63,22 @@ keymap_t key2vk[] = {
        {key_win     , VK_RWIN    },
 };
 
        {key_win     , VK_RWIN    },
 };
 
+/* Helper functions */
+win_t *win_new(HWND hwnd)
+{
+       RECT rect = {};
+       GetWindowRect(hwnd, &rect);
+       win_t *win = new0(win_t);
+       win->x         = rect.left;
+       win->y         = rect.top;
+       win->w         = rect.right  - rect.left;
+       win->h         = rect.bottom - rect.top;
+       win->sys       = new0(win_sys_t);
+       win->sys->hwnd = hwnd;
+       return win;
+}
+
+/* Conversion functions */
 /* - Keycodes */
 Key_t w2key(UINT vk)
 {
 /* - Keycodes */
 Key_t w2key(UINT vk)
 {
@@ -85,19 +100,11 @@ ptr_t getptr(void)
        return (ptr_t){-1, -1, wptr.x, wptr.y};
 }
 
        return (ptr_t){-1, -1, wptr.x, wptr.y};
 }
 
-/* Helper functions */
-win_t *win_new(HWND hwnd)
+win_t *getwin(void)
 {
 {
-       RECT rect = {};
-       GetWindowRect(hwnd, &rect);
-       win_t *win = new0(win_t);
-       win->x         = rect.left;
-       win->y         = rect.top;
-       win->w         = rect.right  - rect.left;
-       win->h         = rect.bottom - rect.top;
-       win->sys       = new0(win_sys_t);
-       win->sys->hwnd = hwnd;
-       return win;
+       POINT wptr;
+       GetCursorPos(&wptr);
+       return win_new(GetAncestor(WindowFromPoint(wptr),GA_ROOT));
 }
 
 /* Callbacks */
 }
 
 /* Callbacks */
@@ -114,15 +121,13 @@ LRESULT CALLBACK KbdProc(int msg, WPARAM wParam, LPARAM lParam)
                        msg, wParam, lParam,
                        st->vkCode, st->scanCode, st->flags,
                        key, mod2int(mod_state));
                        msg, wParam, lParam,
                        st->vkCode, st->scanCode, st->flags,
                        key, mod2int(mod_state));
-       HWND fghwnd = GetForegroundWindow();
-       wm_handle_key(win_new(fghwnd), key, mod_state, getptr());
+       wm_handle_key(getwin(), key, mod_state, getptr());
        return CallNextHookEx(0, msg, wParam, lParam);
 }
 
 LRESULT CALLBACK MllProc(int msg, WPARAM wParam, LPARAM lParam)
 {
        Key_t key   = key_none;
        return CallNextHookEx(0, msg, wParam, lParam);
 }
 
 LRESULT CALLBACK MllProc(int msg, WPARAM wParam, LPARAM lParam)
 {
        Key_t key   = key_none;
-       HWND fghwnd = GetForegroundWindow();
        switch (wParam) {
        case WM_LBUTTONDOWN: mod_state.up = 0; key = key_mouse1; break;
        case WM_LBUTTONUP:   mod_state.up = 1; key = key_mouse1; break;
        switch (wParam) {
        case WM_LBUTTONDOWN: mod_state.up = 0; key = key_mouse1; break;
        case WM_LBUTTONUP:   mod_state.up = 1; key = key_mouse1; break;
@@ -130,9 +135,9 @@ LRESULT CALLBACK MllProc(int msg, WPARAM wParam, LPARAM lParam)
        case WM_RBUTTONUP:   mod_state.up = 1; key = key_mouse3; break;
        }
        if (wParam == WM_MOUSEMOVE)
        case WM_RBUTTONUP:   mod_state.up = 1; key = key_mouse3; break;
        }
        if (wParam == WM_MOUSEMOVE)
-               return wm_handle_ptr(win_new(fghwnd), getptr());
+               return wm_handle_ptr(getwin(), getptr());
        else if (key != key_none)
        else if (key != key_none)
-               return wm_handle_key(win_new(fghwnd), key, mod_state, getptr());
+               return wm_handle_key(getwin(), key, mod_state, getptr());
        else
                return CallNextHookEx(0, msg, wParam, lParam);
 }
        else
                return CallNextHookEx(0, msg, wParam, lParam);
 }
@@ -182,6 +187,37 @@ void sys_move(win_t *win, int x, int y, int w, int h)
 void sys_raise(win_t *win)
 {
        printf("sys_raise: %p\n", win);
 void sys_raise(win_t *win)
 {
        printf("sys_raise: %p\n", win);
+       SetForegroundWindow(win->sys->hwnd);
+       //HWND hwnd = win->sys->hwnd;
+       //HWND top  = GetAncestor(hwnd,GA_ROOT);
+       //SetWindowPos(top, HWND_TOPMOST, 0, 0, 0, 0,
+       //              SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
+}
+
+void sys_focus(win_t *win)
+{
+       printf("sys_focus: %p\n", win);
+       //POINT wptr;
+       //GetCursorPos(&wptr);
+       //HWND old  = GetForegroundWindow();
+       //HWND newc = WindowFromPoint(wptr);
+       //HWND new  = GetAncestor(newc,GA_ROOT);
+       //SetWindowPos(new, HWND_NOTOPMOST, 0, 0, 0, 0,
+       //              SWP_NOMOVE|SWP_NOSIZE);
+       //SetWindowPos(old, HWND_NOTOPMOST, 0, 0, 0, 0,
+       //              SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
+       //SetFocus(hwnd);
+       //SetActiveWindow(hwnd);
+
+       // Go to: HKEY_CURRENT_USER\Control Panel\Mouse
+       // Modify/Create DWORD Value of Data type REG_DWORD Named [ActiveWindowTracking] Setting for Value Data: [0 = ActiveWindowTracking Disabled / 1 = ActiveWindowTracking Enabled]
+
+       //LockSetForegroundWindow(LSFW_LOCK);
+       //SetForegroundWindow(win->sys->hwnd);
+       //LockSetForegroundWindow(LSFW_UNLOCK);
+       //SetFocus(win->sys->hwnd);
+       //SetActiveWindow(win->sys->hwnd);
+       //EnableWindow(win->sys->hwnd, TRUE);
 }
 
 void sys_watch(win_t *win, Key_t key, mod_t mod)
 }
 
 void sys_watch(win_t *win, Key_t key, mod_t mod)
diff --git a/sys.h b/sys.h
index ced143ea3595c513269dbba35e29513c125cff99..e35c9d7e548bf25c549a37ba5d25a02623555049 100644 (file)
--- a/sys.h
+++ b/sys.h
@@ -53,6 +53,8 @@ void sys_move(win_t *win, int x, int y, int w, int h);
 
 void sys_raise(win_t *win);
 
 
 void sys_raise(win_t *win);
 
+void sys_focus(win_t *win);
+
 win_t *sys_init(void);
 
 void sys_run(win_t *root);
 win_t *sys_init(void);
 
 void sys_run(win_t *root);
index 63eec36008b520e4d52f63d3d02ea2ffa747e5cd..7a5c5b0c26b17f946a9aa789f0379aeba8f6da1b 100644 (file)
--- a/wm-wmii.c
+++ b/wm-wmii.c
@@ -3,6 +3,8 @@
 #include "sys.h"
 #include "wm.h"
 
 #include "sys.h"
 #include "wm.h"
 
+#define MODKEY ctrl
+
 typedef enum {
        none, move, resize
 } Mode_t;
 typedef enum {
        none, move, resize
 } Mode_t;
@@ -13,15 +15,18 @@ Mode_t mode;
 
 int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
 {
 
 int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
 {
-       if (!win)
-               return;
-       printf("wm_handle_key: %p - %x %hhx\n",
-                       win, key, mod2int(mod));
+       if (!win) return;
+       printf("wm_handle_key: %p - %x\n", win, key);
+
        kptr = ptr;
        kwin = win;
 
        /* Raise */
        kptr = ptr;
        kwin = win;
 
        /* Raise */
-       if ((key == key_f1 && mod.ctrl) ||
+       if (key == key_f2)
+               return sys_focus(win), 1;
+       if (key == key_f4)
+               return sys_raise(win), 1;
+       if ((key == key_f1 && mod.MODKEY) ||
                        (key_mouse0 <= key && key <= key_mouse7))
                sys_raise(win);
 
                        (key_mouse0 <= key && key <= key_mouse7))
                sys_raise(win);
 
@@ -29,9 +34,9 @@ int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
        if (key_mouse0 <= key && key <= key_mouse7 &&
                        mod.up && mode != none)
                return mode = none, 1;
        if (key_mouse0 <= key && key <= key_mouse7 &&
                        mod.up && mode != none)
                return mode = none, 1;
-       else if (key == key_mouse1 && mod.ctrl)
+       else if (key == key_mouse1 && mod.MODKEY)
                return mode = move, 1;
                return mode = move, 1;
-       else if (key == key_mouse3 && mod.ctrl)
+       else if (key == key_mouse3 && mod.MODKEY)
                return mode = resize, 1;
 
        return 0;
                return mode = resize, 1;
 
        return 0;
@@ -43,6 +48,7 @@ int wm_handle_ptr(win_t *win, ptr_t ptr)
                        win, ptr.x, ptr.y, ptr.rx, ptr.ry, mode);
        int dx = ptr.rx - kptr.rx;
        int dy = ptr.ry - kptr.ry;
                        win, ptr.x, ptr.y, ptr.rx, ptr.ry, mode);
        int dx = ptr.rx - kptr.rx;
        int dy = ptr.ry - kptr.ry;
+       //if (win) sys_focus(win);
        if (mode == move)
                sys_move(kwin, kwin->x+dx, kwin->y+dy, kwin->w, kwin->h);
        else if (mode == resize)
        if (mode == move)
                sys_move(kwin, kwin->x+dx, kwin->y+dy, kwin->w, kwin->h);
        else if (mode == resize)
@@ -52,7 +58,7 @@ int wm_handle_ptr(win_t *win, ptr_t ptr)
 
 void wm_init(win_t *root)
 {
 
 void wm_init(win_t *root)
 {
-       sys_watch(root, key_f1,     MOD(.ctrl=1));
-       sys_watch(root, key_mouse1, MOD(.ctrl=1));
-       sys_watch(root, key_mouse3, MOD(.ctrl=1));
+       sys_watch(root, key_f1,     MOD(.MODKEY=1));
+       sys_watch(root, key_mouse1, MOD(.MODKEY=1));
+       sys_watch(root, key_mouse3, MOD(.MODKEY=1));
 }
 }