dwm.c
changeset 1344 ba02dda36aee
parent 1343 f4707b7bd3a2
child 1345 169467e68992
child 1346 2765f1a08494
equal deleted inserted replaced
1343:f4707b7bd3a2 1344:ba02dda36aee
   189 static void toggleview(const Arg *arg);
   189 static void toggleview(const Arg *arg);
   190 static void unmanage(Client *c);
   190 static void unmanage(Client *c);
   191 static void unmapnotify(XEvent *e);
   191 static void unmapnotify(XEvent *e);
   192 static void updatebar(void);
   192 static void updatebar(void);
   193 static void updategeom(void);
   193 static void updategeom(void);
       
   194 static void updatenumlockmask(void);
   194 static void updatesizehints(Client *c);
   195 static void updatesizehints(Client *c);
   195 static void updatetitle(Client *c);
   196 static void updatetitle(Client *c);
   196 static void updatewmhints(Client *c);
   197 static void updatewmhints(Client *c);
   197 static void view(const Arg *arg);
   198 static void view(const Arg *arg);
   198 static int xerror(Display *dpy, XErrorEvent *ee);
   199 static int xerror(Display *dpy, XErrorEvent *ee);
   733 	return True;
   734 	return True;
   734 }
   735 }
   735 
   736 
   736 void
   737 void
   737 grabbuttons(Client *c, Bool focused) {
   738 grabbuttons(Client *c, Bool focused) {
   738 	unsigned int i, j;
   739 	updatenumlockmask();
   739 	unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
   740 	{
   740 
   741 		unsigned int i, j;
   741 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   742 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
   742 	if(focused) {
   743 		XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
   743 		for(i = 0; i < LENGTH(buttons); i++)
   744 		if(focused) {
   744 			if(buttons[i].click == ClkClientWin)
   745 			for(i = 0; i < LENGTH(buttons); i++)
   745 				for(j = 0; j < LENGTH(modifiers); j++)
   746 				if(buttons[i].click == ClkClientWin)
   746 					XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   747 					for(j = 0; j < LENGTH(modifiers); j++)
   747 	} else
   748 						XGrabButton(dpy, buttons[i].button, buttons[i].mask | modifiers[j], c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   748 		XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
   749 		} else
   749 		            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
   750 			XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
       
   751 			            BUTTONMASK, GrabModeAsync, GrabModeSync, None, None);
       
   752 	}
   750 }
   753 }
   751 
   754 
   752 void
   755 void
   753 grabkeys(void) {
   756 grabkeys(void) {
   754 	unsigned int i, j;
   757 	updatenumlockmask();
   755 	XModifierKeymap *modmap;
       
   756 
       
   757 	/* update modifier map */
       
   758 	modmap = XGetModifierMapping(dpy);
       
   759 	for(i = 0; i < 8; i++)
       
   760 		for(j = 0; j < modmap->max_keypermod; j++)
       
   761 			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
       
   762 				numlockmask = (1 << i);
       
   763 	XFreeModifiermap(modmap);
       
   764 
       
   765 	{ /* grab keys */
   758 	{ /* grab keys */
       
   759 		unsigned int i, j;
   766 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
   760 		unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
   767 		KeyCode code;
   761 		KeyCode code;
   768 
   762 
   769 		XUngrabKey(dpy, AnyKey, AnyModifier, root);
   763 		XUngrabKey(dpy, AnyKey, AnyModifier, root);
   770 		for(i = 0; i < LENGTH(keys); i++) {
   764 		for(i = 0; i < LENGTH(keys); i++) {
  1574 	/* bar position */
  1568 	/* bar position */
  1575 	by = showbar ? (topbar ? wy - bh : wy + wh) : -bh;
  1569 	by = showbar ? (topbar ? wy - bh : wy + wh) : -bh;
  1576 }
  1570 }
  1577 
  1571 
  1578 void
  1572 void
       
  1573 updatenumlockmask(void) {
       
  1574 	unsigned int i, j;
       
  1575 	XModifierKeymap *modmap;
       
  1576 
       
  1577 	numlockmask = 0;
       
  1578 	modmap = XGetModifierMapping(dpy);
       
  1579 	for(i = 0; i < 8; i++)
       
  1580 		for(j = 0; j < modmap->max_keypermod; j++)
       
  1581 			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
       
  1582 				numlockmask = (1 << i);
       
  1583 	XFreeModifiermap(modmap);
       
  1584 }
       
  1585 
       
  1586 void
  1579 updatesizehints(Client *c) {
  1587 updatesizehints(Client *c) {
  1580 	long msize;
  1588 	long msize;
  1581 	XSizeHints size;
  1589 	XSizeHints size;
  1582 
  1590 
  1583 	XGetWMNormalHints(dpy, c->win, &size, &msize);
  1591 	XGetWMNormalHints(dpy, c->win, &size, &msize);