]> Pileus Git - wmpus/blob - wm-wmii.c
Playing with focus
[wmpus] / wm-wmii.c
1 #include <stdio.h>
2
3 #include "sys.h"
4 #include "wm.h"
5
6 #define MODKEY ctrl
7
8 typedef enum {
9         none, move, resize
10 } Mode_t;
11
12 win_t *kwin;
13 ptr_t  kptr;
14 Mode_t mode;
15
16 int wm_handle_key(win_t *win, Key_t key, mod_t mod, ptr_t ptr)
17 {
18         if (!win) return;
19         printf("wm_handle_key: %p - %x\n", win, key);
20
21         kptr = ptr;
22         kwin = win;
23
24         /* Raise */
25         if (key == key_f2)
26                 return sys_focus(win), 1;
27         if (key == key_f4)
28                 return sys_raise(win), 1;
29         if ((key == key_f1 && mod.MODKEY) ||
30                         (key_mouse0 <= key && key <= key_mouse7))
31                 sys_raise(win);
32
33         /* Movement */
34         if (key_mouse0 <= key && key <= key_mouse7 &&
35                         mod.up && mode != none)
36                 return mode = none, 1;
37         else if (key == key_mouse1 && mod.MODKEY)
38                 return mode = move, 1;
39         else if (key == key_mouse3 && mod.MODKEY)
40                 return mode = resize, 1;
41
42         return 0;
43 }
44
45 int wm_handle_ptr(win_t *win, ptr_t ptr)
46 {
47         printf("wm_handle_ptr: %p - %d,%d %d,%d (%d) -- \n",
48                         win, ptr.x, ptr.y, ptr.rx, ptr.ry, mode);
49         int dx = ptr.rx - kptr.rx;
50         int dy = ptr.ry - kptr.ry;
51         //if (win) sys_focus(win);
52         if (mode == move)
53                 sys_move(kwin, kwin->x+dx, kwin->y+dy, kwin->w, kwin->h);
54         else if (mode == resize)
55                 sys_move(kwin, kwin->x, kwin->y, kwin->w+dx, kwin->h+dy);
56         return 0;
57 }
58
59 void wm_init(win_t *root)
60 {
61         sys_watch(root, key_f1,     MOD(.MODKEY=1));
62         sys_watch(root, key_mouse1, MOD(.MODKEY=1));
63         sys_watch(root, key_mouse3, MOD(.MODKEY=1));
64 }