Mercurial > dwm-meillo
annotate event.c @ 11:ea9c08ec4b48
added gridsel to gridwm
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Tue, 11 Jul 2006 13:21:57 +0200 |
parents | 703255003abb |
children | 5cc5e55a132d |
rev | line source |
---|---|
5 | 1 /* |
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> | |
3 * See LICENSE file for license details. | |
4 */ | |
5 | |
6 #include <fcntl.h> | |
7 #include <stdlib.h> | |
8 #include <string.h> | |
9 #include <X11/keysym.h> | |
10 | |
11 #include "wm.h" | |
12 | |
13 /* local functions */ | |
14 static void configurerequest(XEvent *e); | |
15 static void destroynotify(XEvent *e); | |
16 static void enternotify(XEvent *e); | |
17 static void leavenotify(XEvent *e); | |
18 static void expose(XEvent *e); | |
19 static void keymapnotify(XEvent *e); | |
20 static void maprequest(XEvent *e); | |
21 static void propertynotify(XEvent *e); | |
22 static void unmapnotify(XEvent *e); | |
23 | |
24 void (*handler[LASTEvent]) (XEvent *) = { | |
25 [ConfigureRequest] = configurerequest, | |
26 [DestroyNotify] = destroynotify, | |
27 [EnterNotify] = enternotify, | |
28 [LeaveNotify] = leavenotify, | |
29 [Expose] = expose, | |
30 [KeyPress] = keypress, | |
31 [KeymapNotify] = keymapnotify, | |
32 [MapRequest] = maprequest, | |
33 [PropertyNotify] = propertynotify, | |
34 [UnmapNotify] = unmapnotify | |
35 }; | |
36 | |
37 unsigned int | |
38 flush_masked_events(long even_mask) | |
39 { | |
40 XEvent ev; | |
41 unsigned int n = 0; | |
42 while(XCheckMaskEvent(dpy, even_mask, &ev)) n++; | |
43 return n; | |
44 } | |
45 | |
46 static void | |
47 configurerequest(XEvent *e) | |
48 { | |
49 XConfigureRequestEvent *ev = &e->xconfigurerequest; | |
50 XWindowChanges wc; | |
51 Client *c; | |
52 | |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
53 c = getclient(ev->window); |
5 | 54 ev->value_mask &= ~CWSibling; |
55 if(c) { | |
56 if(ev->value_mask & CWX) | |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
57 c->r[RFloat].x = ev->x; |
5 | 58 if(ev->value_mask & CWY) |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
59 c->r[RFloat].y = ev->y; |
5 | 60 if(ev->value_mask & CWWidth) |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
61 c->r[RFloat].width = ev->width; |
5 | 62 if(ev->value_mask & CWHeight) |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
63 c->r[RFloat].height = ev->height; |
5 | 64 if(ev->value_mask & CWBorderWidth) |
65 c->border = ev->border_width; | |
66 } | |
67 | |
68 wc.x = ev->x; | |
69 wc.y = ev->y; | |
70 wc.width = ev->width; | |
71 wc.height = ev->height; | |
72 wc.border_width = 0; | |
73 wc.sibling = None; | |
74 wc.stack_mode = Above; | |
75 ev->value_mask &= ~CWStackMode; | |
76 ev->value_mask |= CWBorderWidth; | |
77 XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); | |
78 XFlush(dpy); | |
79 } | |
80 | |
81 static void | |
82 destroynotify(XEvent *e) | |
83 { | |
84 Client *c; | |
85 XDestroyWindowEvent *ev = &e->xdestroywindow; | |
86 | |
11 | 87 if((c = getclient(ev->window))) |
88 unmanage(c); | |
5 | 89 } |
90 | |
91 static void | |
92 enternotify(XEvent *e) | |
93 { | |
94 #if 0 | |
95 XCrossingEvent *ev = &e->xcrossing; | |
96 Client *c; | |
97 | |
98 if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) | |
99 return; | |
100 | |
101 if((c = client_of_win(ev->window))) { | |
102 Frame *f = c->sel; | |
103 Area *a = f->area; | |
104 if(a->mode == Colmax) | |
105 c = a->sel->client; | |
106 focus(c, False); | |
107 } | |
108 else if(ev->window == root) { | |
109 sel_screen = True; | |
110 draw_frames(); | |
111 } | |
112 #endif | |
113 } | |
114 | |
115 static void | |
116 leavenotify(XEvent *e) | |
117 { | |
118 XCrossingEvent *ev = &e->xcrossing; | |
119 | |
120 if((ev->window == root) && !ev->same_screen) { | |
121 sel_screen = True; | |
122 /*draw_frames();*/ | |
123 } | |
124 } | |
125 | |
126 static void | |
127 expose(XEvent *e) | |
128 { | |
129 XExposeEvent *ev = &e->xexpose; | |
130 | |
131 if(ev->count == 0) { | |
132 if(ev->window == barwin) | |
133 draw_bar(); | |
134 } | |
135 } | |
136 | |
137 static void | |
138 keymapnotify(XEvent *e) | |
139 { | |
140 #if 0 | |
141 update_keys(); | |
142 #endif | |
143 } | |
144 | |
145 static void | |
146 maprequest(XEvent *e) | |
147 { | |
148 XMapRequestEvent *ev = &e->xmaprequest; | |
149 static XWindowAttributes wa; | |
150 | |
151 if(!XGetWindowAttributes(dpy, ev->window, &wa)) | |
152 return; | |
153 | |
154 if(wa.override_redirect) { | |
155 XSelectInput(dpy, ev->window, | |
156 (StructureNotifyMask | PropertyChangeMask)); | |
157 return; | |
158 } | |
159 | |
10
703255003abb
changed how manage client works
Anselm R. Garbe <garbeam@wmii.de>
parents:
9
diff
changeset
|
160 if(!getclient(ev->window)) |
703255003abb
changed how manage client works
Anselm R. Garbe <garbeam@wmii.de>
parents:
9
diff
changeset
|
161 manage(ev->window, &wa); |
5 | 162 } |
163 | |
164 static void | |
165 propertynotify(XEvent *e) | |
166 { | |
167 #if 0 | |
168 XPropertyEvent *ev = &e->xproperty; | |
169 Client *c; | |
170 | |
171 if(ev->state == PropertyDelete) | |
172 return; /* ignore */ | |
173 | |
174 if((c = client_of_win(ev->window))) | |
175 prop_client(c, ev); | |
176 #endif | |
177 } | |
178 | |
179 static void | |
180 unmapnotify(XEvent *e) | |
181 { | |
182 Client *c; | |
183 XUnmapEvent *ev = &e->xunmap; | |
184 | |
10
703255003abb
changed how manage client works
Anselm R. Garbe <garbeam@wmii.de>
parents:
9
diff
changeset
|
185 if((c = getclient(ev->window))) |
703255003abb
changed how manage client works
Anselm R. Garbe <garbeam@wmii.de>
parents:
9
diff
changeset
|
186 unmanage(c); |
5 | 187 } |