event.c
changeset 491 12395ef46d97
parent 490 303d3384720e
child 492 5df494262dfd
equal deleted inserted replaced
490:303d3384720e 491:12395ef46d97
       
     1 #include <stdio.h>
     1 /*
     2 /*
     2  * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
     3  * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
     3  * See LICENSE file for license details.
     4  * See LICENSE file for license details.
     4  */
     5  */
     5 #include "dwm.h"
     6 #include "dwm.h"
    36 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
    37 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
    37 	for(;;) {
    38 	for(;;) {
    38 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
    39 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
    39 		switch (ev.type) {
    40 		switch (ev.type) {
    40 		case ButtonRelease:
    41 		case ButtonRelease:
       
    42 			resize(c, True, TopLeft);
    41 			XUngrabPointer(dpy, CurrentTime);
    43 			XUngrabPointer(dpy, CurrentTime);
    42 			return;
    44 			return;
    43 		case Expose:
    45 		case Expose:
    44 			handler[Expose](&ev);
    46 			handler[Expose](&ev);
    45 			break;
    47 			break;
    69 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
    71 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
    70 	for(;;) {
    72 	for(;;) {
    71 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
    73 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
    72 		switch(ev.type) {
    74 		switch(ev.type) {
    73 		case ButtonRelease:
    75 		case ButtonRelease:
       
    76 			resize(c, True, TopLeft);
    74 			XUngrabPointer(dpy, CurrentTime);
    77 			XUngrabPointer(dpy, CurrentTime);
    75 			return;
    78 			return;
    76 		case Expose:
    79 		case Expose:
    77 			handler[Expose](&ev);
    80 			handler[Expose](&ev);
    78 			break;
    81 			break;
   149 	Client *c;
   152 	Client *c;
   150 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   153 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   151 	XEvent synev;
   154 	XEvent synev;
   152 	XWindowChanges wc;
   155 	XWindowChanges wc;
   153 
   156 
       
   157 	fputs("configurerequest\n", stderr);
   154 	if((c = getclient(ev->window))) {
   158 	if((c = getclient(ev->window))) {
   155 		c->ismax = False;
   159 		c->ismax = False;
   156 		gravitate(c, True);
   160 		gravitate(c, True);
   157 		if(ev->value_mask & CWX)
   161 		if(ev->value_mask & CWX)
   158 			c->x = ev->x;
   162 			c->x = ev->x;
   170 		wc.width = c->w;
   174 		wc.width = c->w;
   171 		wc.height = c->h;
   175 		wc.height = c->h;
   172 		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
   176 		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
   173 		if(newmask)
   177 		if(newmask)
   174 			XConfigureWindow(dpy, c->win, newmask, &wc);
   178 			XConfigureWindow(dpy, c->win, newmask, &wc);
   175 		else {
   179 		else
   176 			synev.type = ConfigureNotify;
   180 			configure(c);
   177 			synev.xconfigure.display = dpy;
       
   178 			synev.xconfigure.event = c->win;
       
   179 			synev.xconfigure.window = c->win;
       
   180 			synev.xconfigure.x = c->x;
       
   181 			synev.xconfigure.y = c->y;
       
   182 			synev.xconfigure.width = c->w;
       
   183 			synev.xconfigure.height = c->h;
       
   184 			synev.xconfigure.border_width = c->border;
       
   185 			synev.xconfigure.above = None;
       
   186 			XSendEvent(dpy, c->win, True, NoEventMask, &synev);
       
   187 		}
       
   188 		XSync(dpy, False);
   181 		XSync(dpy, False);
   189 		if(c->isfloat)
   182 		if(c->isfloat)
   190 			resize(c, False, TopLeft);
   183 			resize(c, False, TopLeft);
   191 		else
   184 		else
   192 			arrange(NULL);
   185 			arrange(NULL);
   216 static void
   209 static void
   217 enternotify(XEvent *e) {
   210 enternotify(XEvent *e) {
   218 	Client *c;
   211 	Client *c;
   219 	XCrossingEvent *ev = &e->xcrossing;
   212 	XCrossingEvent *ev = &e->xcrossing;
   220 
   213 
       
   214 	fputs("enternotify\n", stderr);
   221 	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
   215 	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
   222 		return;
   216 		return;
   223 
   217 
   224 	if(((c = getclient(ev->window)) || (c = getctitle(ev->window))) && isvisible(c))
   218 	if(((c = getclient(ev->window)) || (c = getctitle(ev->window))) && isvisible(c))
   225 		focus(c);
   219 		focus(c);
   303 propertynotify(XEvent *e) {
   297 propertynotify(XEvent *e) {
   304 	Client *c;
   298 	Client *c;
   305 	Window trans;
   299 	Window trans;
   306 	XPropertyEvent *ev = &e->xproperty;
   300 	XPropertyEvent *ev = &e->xproperty;
   307 
   301 
       
   302 	fputs("propertynotify\n", stderr);
   308 	if(ev->state == PropertyDelete)
   303 	if(ev->state == PropertyDelete)
   309 		return; /* ignore */
   304 		return; /* ignore */
   310 
   305 
   311 	if((c = getclient(ev->window))) {
   306 	if((c = getclient(ev->window))) {
   312 		if(ev->atom == wmatom[WMProtocols]) {
   307 		if(ev->atom == wmatom[WMProtocols]) {