event.c
changeset 18 1efa34c6e1b6
parent 16 359b6e563b95
child 19 b5510d0c6d43
equal deleted inserted replaced
17:aaf520f53110 18:1efa34c6e1b6
    10 #include <X11/Xatom.h>
    10 #include <X11/Xatom.h>
    11 
    11 
    12 #include "wm.h"
    12 #include "wm.h"
    13 
    13 
    14 /* local functions */
    14 /* local functions */
       
    15 static void buttonpress(XEvent *e);
    15 static void configurerequest(XEvent *e);
    16 static void configurerequest(XEvent *e);
    16 static void destroynotify(XEvent *e);
    17 static void destroynotify(XEvent *e);
    17 static void enternotify(XEvent *e);
    18 static void enternotify(XEvent *e);
    18 static void leavenotify(XEvent *e);
    19 static void leavenotify(XEvent *e);
    19 static void expose(XEvent *e);
    20 static void expose(XEvent *e);
    21 static void maprequest(XEvent *e);
    22 static void maprequest(XEvent *e);
    22 static void propertynotify(XEvent *e);
    23 static void propertynotify(XEvent *e);
    23 static void unmapnotify(XEvent *e);
    24 static void unmapnotify(XEvent *e);
    24 
    25 
    25 void (*handler[LASTEvent]) (XEvent *) = {
    26 void (*handler[LASTEvent]) (XEvent *) = {
       
    27 	[ButtonPress] = buttonpress,
    26 	[ConfigureRequest] = configurerequest,
    28 	[ConfigureRequest] = configurerequest,
    27 	[DestroyNotify] = destroynotify,
    29 	[DestroyNotify] = destroynotify,
    28 	[EnterNotify] = enternotify,
    30 	[EnterNotify] = enternotify,
    29 	[LeaveNotify] = leavenotify,
    31 	[LeaveNotify] = leavenotify,
    30 	[Expose] = expose,
    32 	[Expose] = expose,
    34 	[PropertyNotify] = propertynotify,
    36 	[PropertyNotify] = propertynotify,
    35 	[UnmapNotify] = unmapnotify
    37 	[UnmapNotify] = unmapnotify
    36 };
    38 };
    37 
    39 
    38 unsigned int
    40 unsigned int
    39 flush_events(long even_mask)
    41 discard_events(long even_mask)
    40 {
    42 {
    41 	XEvent ev;
    43 	XEvent ev;
    42 	unsigned int n = 0;
    44 	unsigned int n = 0;
    43 	while(XCheckMaskEvent(dpy, even_mask, &ev)) n++;
    45 	while(XCheckMaskEvent(dpy, even_mask, &ev)) n++;
    44 	return n;
    46 	return n;
    45 }
    47 }
    46 
    48 
    47 static void
    49 static void
       
    50 buttonpress(XEvent *e)
       
    51 {
       
    52 	XButtonPressedEvent *ev = &e->xbutton;
       
    53 	Client *c;
       
    54 
       
    55 	if((c = getclient(ev->window))) {
       
    56 		switch(ev->button) {
       
    57 		default:
       
    58 			break;
       
    59 		case Button1:
       
    60 			mmove(c);
       
    61 			break;
       
    62 		case Button2:
       
    63 			XLowerWindow(dpy, c->win);
       
    64 			break;
       
    65 		case Button3:
       
    66 			mresize(c);
       
    67 			break;
       
    68 		}
       
    69 	}
       
    70 }
       
    71 
       
    72 static void
    48 configurerequest(XEvent *e)
    73 configurerequest(XEvent *e)
    49 {
    74 {
    50 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
    75 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
    51 	XWindowChanges wc;
    76 	XWindowChanges wc;
    52 	Client *c;
    77 	Client *c;
    53 
    78 
    54 	c = getclient(ev->window);
       
    55 	ev->value_mask &= ~CWSibling;
    79 	ev->value_mask &= ~CWSibling;
    56 	if(c) {
    80 	if((c = getclient(ev->window))) {
    57 		if(ev->value_mask & CWX)
    81 		if(ev->value_mask & CWX)
    58 			c->r[RFloat].x = ev->x;
    82 			c->r[RFloat].x = ev->x;
    59 		if(ev->value_mask & CWY)
    83 		if(ev->value_mask & CWY)
    60 			c->r[RFloat].y = ev->y;
    84 			c->r[RFloat].y = ev->y;
    61 		if(ev->value_mask & CWWidth)
    85 		if(ev->value_mask & CWWidth)