aewl
diff event.c @ 76:4bd49f404f10
proceeded with cleaning up, sorting functions, etc
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Sat, 15 Jul 2006 17:00:56 +0200 |
parents | f08271b7cb20 |
children | 38c8f7f7d401 |
line diff
1.1 --- a/event.c Sat Jul 15 16:30:50 2006 +0200 1.2 +++ b/event.c Sat Jul 15 17:00:56 2006 +0200 1.3 @@ -2,17 +2,12 @@ 1.4 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> 1.5 * See LICENSE file for license details. 1.6 */ 1.7 +#include "dwm.h" 1.8 1.9 -#include <fcntl.h> 1.10 -#include <stdio.h> 1.11 #include <stdlib.h> 1.12 -#include <string.h> 1.13 -#include <unistd.h> 1.14 #include <X11/keysym.h> 1.15 #include <X11/Xatom.h> 1.16 1.17 -#include "dwm.h" 1.18 - 1.19 #define ButtonMask (ButtonPressMask | ButtonReleaseMask) 1.20 #define MouseMask (ButtonMask | PointerMotionMask) 1.21 1.22 @@ -54,130 +49,10 @@ 1.23 1.24 /********** CUSTOMIZE **********/ 1.25 1.26 -/* local functions */ 1.27 -static void buttonpress(XEvent *e); 1.28 -static void configurerequest(XEvent *e); 1.29 -static void destroynotify(XEvent *e); 1.30 -static void enternotify(XEvent *e); 1.31 -static void leavenotify(XEvent *e); 1.32 -static void expose(XEvent *e); 1.33 -static void keypress(XEvent *e); 1.34 -static void maprequest(XEvent *e); 1.35 -static void propertynotify(XEvent *e); 1.36 -static void unmapnotify(XEvent *e); 1.37 +/* static functions */ 1.38 1.39 -void (*handler[LASTEvent]) (XEvent *) = { 1.40 - [ButtonPress] = buttonpress, 1.41 - [ConfigureRequest] = configurerequest, 1.42 - [DestroyNotify] = destroynotify, 1.43 - [EnterNotify] = enternotify, 1.44 - [LeaveNotify] = leavenotify, 1.45 - [Expose] = expose, 1.46 - [KeyPress] = keypress, 1.47 - [MapRequest] = maprequest, 1.48 - [PropertyNotify] = propertynotify, 1.49 - [UnmapNotify] = unmapnotify 1.50 -}; 1.51 - 1.52 -void 1.53 -grabkeys() 1.54 -{ 1.55 - static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; 1.56 - unsigned int i; 1.57 - KeyCode code; 1.58 - 1.59 - for(i = 0; i < len; i++) { 1.60 - code = XKeysymToKeycode(dpy, key[i].keysym); 1.61 - XUngrabKey(dpy, code, key[i].mod, root); 1.62 - XGrabKey(dpy, code, key[i].mod, root, True, 1.63 - GrabModeAsync, GrabModeAsync); 1.64 - } 1.65 -} 1.66 - 1.67 -static void 1.68 -keypress(XEvent *e) 1.69 -{ 1.70 - XKeyEvent *ev = &e->xkey; 1.71 - static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; 1.72 - unsigned int i; 1.73 - KeySym keysym; 1.74 - 1.75 - keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); 1.76 - for(i = 0; i < len; i++) 1.77 - if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { 1.78 - if(key[i].func) 1.79 - key[i].func(&key[i].arg); 1.80 - return; 1.81 - } 1.82 -} 1.83 - 1.84 -static void 1.85 -resizemouse(Client *c) 1.86 -{ 1.87 - XEvent ev; 1.88 - int ocx, ocy; 1.89 - 1.90 - ocx = c->x; 1.91 - ocy = c->y; 1.92 - if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, 1.93 - None, cursor[CurResize], CurrentTime) != GrabSuccess) 1.94 - return; 1.95 - XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); 1.96 - for(;;) { 1.97 - XMaskEvent(dpy, MouseMask | ExposureMask, &ev); 1.98 - switch(ev.type) { 1.99 - default: break; 1.100 - case Expose: 1.101 - handler[Expose](&ev); 1.102 - break; 1.103 - case MotionNotify: 1.104 - XFlush(dpy); 1.105 - c->w = abs(ocx - ev.xmotion.x); 1.106 - c->h = abs(ocy - ev.xmotion.y); 1.107 - c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; 1.108 - c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h; 1.109 - resize(c, True); 1.110 - break; 1.111 - case ButtonRelease: 1.112 - XUngrabPointer(dpy, CurrentTime); 1.113 - return; 1.114 - } 1.115 - } 1.116 -} 1.117 - 1.118 -static void 1.119 -movemouse(Client *c) 1.120 -{ 1.121 - XEvent ev; 1.122 - int x1, y1, ocx, ocy, di; 1.123 - unsigned int dui; 1.124 - Window dummy; 1.125 - 1.126 - ocx = c->x; 1.127 - ocy = c->y; 1.128 - if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, 1.129 - None, cursor[CurMove], CurrentTime) != GrabSuccess) 1.130 - return; 1.131 - XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); 1.132 - for(;;) { 1.133 - XMaskEvent(dpy, MouseMask | ExposureMask, &ev); 1.134 - switch (ev.type) { 1.135 - default: break; 1.136 - case Expose: 1.137 - handler[Expose](&ev); 1.138 - break; 1.139 - case MotionNotify: 1.140 - XFlush(dpy); 1.141 - c->x = ocx + (ev.xmotion.x - x1); 1.142 - c->y = ocy + (ev.xmotion.y - y1); 1.143 - resize(c, False); 1.144 - break; 1.145 - case ButtonRelease: 1.146 - XUngrabPointer(dpy, CurrentTime); 1.147 - return; 1.148 - } 1.149 - } 1.150 -} 1.151 +static void movemouse(Client *c); 1.152 +static void resizemouse(Client *c); 1.153 1.154 static void 1.155 buttonpress(XEvent *e) 1.156 @@ -280,15 +155,6 @@ 1.157 } 1.158 1.159 static void 1.160 -leavenotify(XEvent *e) 1.161 -{ 1.162 - XCrossingEvent *ev = &e->xcrossing; 1.163 - 1.164 - if((ev->window == root) && !ev->same_screen) 1.165 - issel = True; 1.166 -} 1.167 - 1.168 -static void 1.169 expose(XEvent *e) 1.170 { 1.171 XExposeEvent *ev = &e->xexpose; 1.172 @@ -303,6 +169,32 @@ 1.173 } 1.174 1.175 static void 1.176 +keypress(XEvent *e) 1.177 +{ 1.178 + XKeyEvent *ev = &e->xkey; 1.179 + static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; 1.180 + unsigned int i; 1.181 + KeySym keysym; 1.182 + 1.183 + keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); 1.184 + for(i = 0; i < len; i++) 1.185 + if((keysym == key[i].keysym) && (key[i].mod == ev->state)) { 1.186 + if(key[i].func) 1.187 + key[i].func(&key[i].arg); 1.188 + return; 1.189 + } 1.190 +} 1.191 + 1.192 +static void 1.193 +leavenotify(XEvent *e) 1.194 +{ 1.195 + XCrossingEvent *ev = &e->xcrossing; 1.196 + 1.197 + if((ev->window == root) && !ev->same_screen) 1.198 + issel = True; 1.199 +} 1.200 + 1.201 +static void 1.202 maprequest(XEvent *e) 1.203 { 1.204 XMapRequestEvent *ev = &e->xmaprequest; 1.205 @@ -322,6 +214,40 @@ 1.206 } 1.207 1.208 static void 1.209 +movemouse(Client *c) 1.210 +{ 1.211 + XEvent ev; 1.212 + int x1, y1, ocx, ocy, di; 1.213 + unsigned int dui; 1.214 + Window dummy; 1.215 + 1.216 + ocx = c->x; 1.217 + ocy = c->y; 1.218 + if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, 1.219 + None, cursor[CurMove], CurrentTime) != GrabSuccess) 1.220 + return; 1.221 + XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); 1.222 + for(;;) { 1.223 + XMaskEvent(dpy, MouseMask | ExposureMask, &ev); 1.224 + switch (ev.type) { 1.225 + default: break; 1.226 + case Expose: 1.227 + handler[Expose](&ev); 1.228 + break; 1.229 + case MotionNotify: 1.230 + XFlush(dpy); 1.231 + c->x = ocx + (ev.xmotion.x - x1); 1.232 + c->y = ocy + (ev.xmotion.y - y1); 1.233 + resize(c, False); 1.234 + break; 1.235 + case ButtonRelease: 1.236 + XUngrabPointer(dpy, CurrentTime); 1.237 + return; 1.238 + } 1.239 + } 1.240 +} 1.241 + 1.242 +static void 1.243 propertynotify(XEvent *e) 1.244 { 1.245 XPropertyEvent *ev = &e->xproperty; 1.246 @@ -355,6 +281,40 @@ 1.247 } 1.248 1.249 static void 1.250 +resizemouse(Client *c) 1.251 +{ 1.252 + XEvent ev; 1.253 + int ocx, ocy; 1.254 + 1.255 + ocx = c->x; 1.256 + ocy = c->y; 1.257 + if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, 1.258 + None, cursor[CurResize], CurrentTime) != GrabSuccess) 1.259 + return; 1.260 + XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); 1.261 + for(;;) { 1.262 + XMaskEvent(dpy, MouseMask | ExposureMask, &ev); 1.263 + switch(ev.type) { 1.264 + default: break; 1.265 + case Expose: 1.266 + handler[Expose](&ev); 1.267 + break; 1.268 + case MotionNotify: 1.269 + XFlush(dpy); 1.270 + c->w = abs(ocx - ev.xmotion.x); 1.271 + c->h = abs(ocy - ev.xmotion.y); 1.272 + c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; 1.273 + c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h; 1.274 + resize(c, True); 1.275 + break; 1.276 + case ButtonRelease: 1.277 + XUngrabPointer(dpy, CurrentTime); 1.278 + return; 1.279 + } 1.280 + } 1.281 +} 1.282 + 1.283 +static void 1.284 unmapnotify(XEvent *e) 1.285 { 1.286 Client *c; 1.287 @@ -363,3 +323,33 @@ 1.288 if((c = getclient(ev->window))) 1.289 unmanage(c); 1.290 } 1.291 + 1.292 +/* extern functions */ 1.293 + 1.294 +void (*handler[LASTEvent]) (XEvent *) = { 1.295 + [ButtonPress] = buttonpress, 1.296 + [ConfigureRequest] = configurerequest, 1.297 + [DestroyNotify] = destroynotify, 1.298 + [EnterNotify] = enternotify, 1.299 + [LeaveNotify] = leavenotify, 1.300 + [Expose] = expose, 1.301 + [KeyPress] = keypress, 1.302 + [MapRequest] = maprequest, 1.303 + [PropertyNotify] = propertynotify, 1.304 + [UnmapNotify] = unmapnotify 1.305 +}; 1.306 + 1.307 +void 1.308 +grabkeys() 1.309 +{ 1.310 + static unsigned int len = key ? sizeof(key) / sizeof(key[0]) : 0; 1.311 + unsigned int i; 1.312 + KeyCode code; 1.313 + 1.314 + for(i = 0; i < len; i++) { 1.315 + code = XKeysymToKeycode(dpy, key[i].keysym); 1.316 + XUngrabKey(dpy, code, key[i].mod, root); 1.317 + XGrabKey(dpy, code, key[i].mod, root, True, 1.318 + GrabModeAsync, GrabModeAsync); 1.319 + } 1.320 +}