client.c
changeset 318 1b45d6f14fca
parent 315 d9bef4067cd5
child 319 94d2d7658673
equal deleted inserted replaced
317:45af6a8a0cbf 318:1b45d6f14fca
     7 #include <string.h>
     7 #include <string.h>
     8 #include <X11/Xatom.h>
     8 #include <X11/Xatom.h>
     9 #include <X11/Xutil.h>
     9 #include <X11/Xutil.h>
    10 
    10 
    11 /* static functions */
    11 /* static functions */
       
    12 
       
    13 static void
       
    14 grabbutton(Client *c, unsigned int button, unsigned int modifier)
       
    15 {
       
    16 	XGrabButton(dpy, button, modifier, c->win, False, BUTTONMASK,
       
    17 			GrabModeAsync, GrabModeSync, None, None);
       
    18 	XGrabButton(dpy, button, modifier | LockMask, c->win, False, BUTTONMASK,
       
    19 			GrabModeAsync, GrabModeSync, None, None);
       
    20 	XGrabButton(dpy, button, modifier | numlockmask, c->win, False, BUTTONMASK,
       
    21 			GrabModeAsync, GrabModeSync, None, None);
       
    22 	XGrabButton(dpy, button, modifier | numlockmask | LockMask, c->win, False, BUTTONMASK,
       
    23 			GrabModeAsync, GrabModeSync, None, None);
       
    24 }
    12 
    25 
    13 static void
    26 static void
    14 resizetitle(Client *c)
    27 resizetitle(Client *c)
    15 {
    28 {
    16 	int i;
    29 	int i;
    29 	else
    42 	else
    30 		XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw, c->th);
    43 		XMoveResizeWindow(dpy, c->title, c->tx + 2 * sw, c->ty, c->tw, c->th);
    31 
    44 
    32 }
    45 }
    33 
    46 
       
    47 static void
       
    48 ungrabbutton(Client *c, unsigned int button, unsigned int modifier)
       
    49 {
       
    50 	XUngrabButton(dpy, button, modifier, c->win);
       
    51 	XUngrabButton(dpy, button, modifier | LockMask, c->win);
       
    52 	XUngrabButton(dpy, button, modifier | numlockmask, c->win);
       
    53 	XUngrabButton(dpy, button, modifier | numlockmask | LockMask, c->win);
       
    54 }
       
    55 
    34 static int
    56 static int
    35 xerrordummy(Display *dsply, XErrorEvent *ee)
    57 xerrordummy(Display *dsply, XErrorEvent *ee)
    36 {
    58 {
    37 	return 0;
    59 	return 0;
    38 }
    60 }
    51 {
    73 {
    52 	Client *old = sel;
    74 	Client *old = sel;
    53 
    75 
    54 	if (!issel)
    76 	if (!issel)
    55 		return;
    77 		return;
    56 	if(sel && sel->ismax)
    78 	if(sel && sel->ismax && sel != c)
    57 		togglemax(NULL);
    79 		togglemax(NULL);
    58 	sel = c;
    80 	sel = c;
    59 	if(old && old != c)
    81 	if(old && old != c) {
       
    82 		grabbutton(old, AnyButton, 0);
    60 		drawtitle(old);
    83 		drawtitle(old);
       
    84 	}
       
    85 	ungrabbutton(c, AnyButton, 0);
    61 	drawtitle(c);
    86 	drawtitle(c);
    62 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    87 	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
    63 }
    88 }
    64 
    89 
    65 void
    90 void
   228 	if(clients)
   253 	if(clients)
   229 		clients->prev = c;
   254 		clients->prev = c;
   230 	c->next = clients;
   255 	c->next = clients;
   231 	clients = c;
   256 	clients = c;
   232 
   257 
   233 	XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK,
   258 	grabbutton(c, Button1, MODKEY);
   234 			GrabModeAsync, GrabModeSync, None, None);
   259 	grabbutton(c, Button2, MODKEY);
   235 	XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK,
   260 	grabbutton(c, Button3, MODKEY);
   236 			GrabModeAsync, GrabModeSync, None, None);
       
   237 	XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       
   238 			GrabModeAsync, GrabModeSync, None, None);
       
   239 	XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       
   240 			GrabModeAsync, GrabModeSync, None, None);
       
   241 
       
   242 	XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK,
       
   243 			GrabModeAsync, GrabModeSync, None, None);
       
   244 	XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK,
       
   245 			GrabModeAsync, GrabModeSync, None, None);
       
   246 	XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       
   247 			GrabModeAsync, GrabModeSync, None, None);
       
   248 	XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       
   249 			GrabModeAsync, GrabModeSync, None, None);
       
   250 
       
   251 	XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK,
       
   252 			GrabModeAsync, GrabModeSync, None, None);
       
   253 	XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK,
       
   254 			GrabModeAsync, GrabModeSync, None, None);
       
   255 	XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK,
       
   256 			GrabModeAsync, GrabModeSync, None, None);
       
   257 	XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK,
       
   258 			GrabModeAsync, GrabModeSync, None, None);
       
   259 
   261 
   260 	settags(c);
   262 	settags(c);
   261 	if(!c->isfloat)
   263 	if(!c->isfloat)
   262 		c->isfloat = trans
   264 		c->isfloat = trans
   263 			|| (c->maxw && c->minw &&
   265 			|| (c->maxw && c->minw &&