Mercurial > dwm-meillo
annotate event.c @ 9:d567f430a81d
fixed several stuff (gridwm gets better and better)
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Tue, 11 Jul 2006 12:52:57 +0200 |
parents | e0cefb3981c8 |
children | 703255003abb |
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 #if 0 | |
85 Client *c; | |
86 XDestroyWindowEvent *ev = &e->xdestroywindow; | |
87 | |
88 if((c = client_of_win(ev->window))) | |
89 destroy_client(c); | |
90 #endif | |
91 } | |
92 | |
93 static void | |
94 enternotify(XEvent *e) | |
95 { | |
96 #if 0 | |
97 XCrossingEvent *ev = &e->xcrossing; | |
98 Client *c; | |
99 | |
100 if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) | |
101 return; | |
102 | |
103 if((c = client_of_win(ev->window))) { | |
104 Frame *f = c->sel; | |
105 Area *a = f->area; | |
106 if(a->mode == Colmax) | |
107 c = a->sel->client; | |
108 focus(c, False); | |
109 } | |
110 else if(ev->window == root) { | |
111 sel_screen = True; | |
112 draw_frames(); | |
113 } | |
114 #endif | |
115 } | |
116 | |
117 static void | |
118 leavenotify(XEvent *e) | |
119 { | |
120 XCrossingEvent *ev = &e->xcrossing; | |
121 | |
122 if((ev->window == root) && !ev->same_screen) { | |
123 sel_screen = True; | |
124 /*draw_frames();*/ | |
125 } | |
126 } | |
127 | |
128 static void | |
129 expose(XEvent *e) | |
130 { | |
131 XExposeEvent *ev = &e->xexpose; | |
132 | |
133 if(ev->count == 0) { | |
134 if(ev->window == barwin) | |
135 draw_bar(); | |
136 } | |
137 } | |
138 | |
139 static void | |
140 keymapnotify(XEvent *e) | |
141 { | |
142 #if 0 | |
143 update_keys(); | |
144 #endif | |
145 } | |
146 | |
147 static void | |
148 maprequest(XEvent *e) | |
149 { | |
150 XMapRequestEvent *ev = &e->xmaprequest; | |
151 static XWindowAttributes wa; | |
152 | |
153 if(!XGetWindowAttributes(dpy, ev->window, &wa)) | |
154 return; | |
155 | |
156 if(wa.override_redirect) { | |
157 XSelectInput(dpy, ev->window, | |
158 (StructureNotifyMask | PropertyChangeMask)); | |
159 return; | |
160 } | |
161 | |
6 | 162 /*if(!client_of_win(ev->window))*/ |
9
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
163 /*manage(create_client(ev->window, &wa));*/ |
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
164 XMapRaised(dpy, ev->window); |
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
165 XMoveResizeWindow(dpy, ev->window, rect.x, rect.y, rect.width, rect.height - barrect.height); |
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
166 XSetInputFocus(dpy, ev->window, RevertToPointerRoot, CurrentTime); |
d567f430a81d
fixed several stuff (gridwm gets better and better)
Anselm R. Garbe <garbeam@wmii.de>
parents:
6
diff
changeset
|
167 XFlush(dpy); |
5 | 168 } |
169 | |
170 static void | |
171 propertynotify(XEvent *e) | |
172 { | |
173 #if 0 | |
174 XPropertyEvent *ev = &e->xproperty; | |
175 Client *c; | |
176 | |
177 if(ev->state == PropertyDelete) | |
178 return; /* ignore */ | |
179 | |
180 if((c = client_of_win(ev->window))) | |
181 prop_client(c, ev); | |
182 #endif | |
183 } | |
184 | |
185 static void | |
186 unmapnotify(XEvent *e) | |
187 { | |
188 #if 0 | |
189 Client *c; | |
190 XUnmapEvent *ev = &e->xunmap; | |
191 | |
192 if((c = client_of_win(ev->window))) | |
193 destroy_client(c); | |
194 #endif | |
195 } |