event.c
changeset 13 5cc5e55a132d
parent 11 ea9c08ec4b48
child 16 359b6e563b95
equal deleted inserted replaced
12:a2b399582afe 13:5cc5e55a132d
     5 
     5 
     6 #include <fcntl.h>
     6 #include <fcntl.h>
     7 #include <stdlib.h>
     7 #include <stdlib.h>
     8 #include <string.h>
     8 #include <string.h>
     9 #include <X11/keysym.h>
     9 #include <X11/keysym.h>
       
    10 #include <X11/Xatom.h>
    10 
    11 
    11 #include "wm.h"
    12 #include "wm.h"
    12 
    13 
    13 /* local functions */
    14 /* local functions */
    14 static void configurerequest(XEvent *e);
    15 static void configurerequest(XEvent *e);
    33 	[PropertyNotify] = propertynotify,
    34 	[PropertyNotify] = propertynotify,
    34 	[UnmapNotify] = unmapnotify
    35 	[UnmapNotify] = unmapnotify
    35 };
    36 };
    36 
    37 
    37 unsigned int
    38 unsigned int
    38 flush_masked_events(long even_mask)
    39 flush_events(long even_mask)
    39 {
    40 {
    40 	XEvent ev;
    41 	XEvent ev;
    41 	unsigned int n = 0;
    42 	unsigned int n = 0;
    42 	while(XCheckMaskEvent(dpy, even_mask, &ev)) n++;
    43 	while(XCheckMaskEvent(dpy, even_mask, &ev)) n++;
    43 	return n;
    44 	return n;
    89 }
    90 }
    90 
    91 
    91 static void
    92 static void
    92 enternotify(XEvent *e)
    93 enternotify(XEvent *e)
    93 {
    94 {
    94 #if 0
       
    95 	XCrossingEvent *ev = &e->xcrossing;
    95 	XCrossingEvent *ev = &e->xcrossing;
    96 	Client *c;
    96 	Client *c;
    97 
    97 
    98 	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
    98 	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
    99 		return;
    99 		return;
   100 
   100 
   101 	if((c = client_of_win(ev->window))) {
   101 	if((c = getclient(ev->window)))
   102 		Frame *f = c->sel;
   102 		focus(c);
   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) {
   103 	else if(ev->window == root) {
   109 		sel_screen = True;
   104 		sel_screen = True;
   110 		draw_frames();
   105 		/*draw_frames();*/
   111 	}
   106 	}
   112 #endif
       
   113 }
   107 }
   114 
   108 
   115 static void
   109 static void
   116 leavenotify(XEvent *e)
   110 leavenotify(XEvent *e)
   117 {
   111 {
   135 }
   129 }
   136 
   130 
   137 static void
   131 static void
   138 keymapnotify(XEvent *e)
   132 keymapnotify(XEvent *e)
   139 {
   133 {
   140 #if 0
       
   141 	update_keys();
   134 	update_keys();
   142 #endif
       
   143 }
   135 }
   144 
   136 
   145 static void
   137 static void
   146 maprequest(XEvent *e)
   138 maprequest(XEvent *e)
   147 {
   139 {
   162 }
   154 }
   163 
   155 
   164 static void
   156 static void
   165 propertynotify(XEvent *e)
   157 propertynotify(XEvent *e)
   166 {
   158 {
   167 #if 0
       
   168 	XPropertyEvent *ev = &e->xproperty;
   159 	XPropertyEvent *ev = &e->xproperty;
       
   160 	long msize;
   169 	Client *c;
   161 	Client *c;
   170 
   162 
   171 	if(ev->state == PropertyDelete)
   163 	if(ev->state == PropertyDelete)
   172 		return; /* ignore */
   164 		return; /* ignore */
   173 
   165 
   174 	if((c = client_of_win(ev->window)))
   166 	if(ev->atom == wm_atom[WMProtocols]) {
   175 		prop_client(c, ev);
   167 		c->proto = win_proto(c->win);
   176 #endif
   168 		return;
       
   169 	}
       
   170 	if((c = getclient(ev->window))) {
       
   171 		switch (ev->atom) {
       
   172 			default: break;
       
   173 			case XA_WM_TRANSIENT_FOR:
       
   174 				XGetTransientForHint(dpy, c->win, &c->trans);
       
   175 				break;
       
   176 			case XA_WM_NORMAL_HINTS:
       
   177 				if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize)
       
   178 						|| !c->size.flags)
       
   179 					c->size.flags = PSize;
       
   180 				if(c->size.flags & PMinSize && c->size.flags & PMaxSize
       
   181 						&& c->size.min_width == c->size.max_width
       
   182 						&& c->size.min_height == c->size.max_height)
       
   183 					c->fixedsize = True;
       
   184 				else
       
   185 					c->fixedsize = False;
       
   186 				break;
       
   187 		}
       
   188 		if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
       
   189 			update_name(c);
       
   190 			/*draw_frame(c->sel);*/
       
   191 		}
       
   192 	}
   177 }
   193 }
   178 
   194 
   179 static void
   195 static void
   180 unmapnotify(XEvent *e)
   196 unmapnotify(XEvent *e)
   181 {
   197 {