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