X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=client.c;h=8b98c198bc61966955718be40e82f584a063141b;hb=1b9fe55025f84a8430b4be5822784551746eee8d;hp=050e8a3bcacaa0e07d36b21248fb5e78ef44e034;hpb=ad2e77d6350b1f43513d052018735d2a8f949d78;p=dwm.git diff --git a/client.c b/client.c index 050e8a3..8b98c19 100644 --- a/client.c +++ b/client.c @@ -11,6 +11,19 @@ /* static functions */ static void +grabbutton(Client *c, unsigned int button, unsigned int modifier) +{ + XGrabButton(dpy, button, modifier, c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + XGrabButton(dpy, button, modifier | LockMask, c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + XGrabButton(dpy, button, modifier | numlockmask, c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); + XGrabButton(dpy, button, modifier | numlockmask | LockMask, c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); +} + +static void resizetitle(Client *c) { int i; @@ -31,6 +44,15 @@ resizetitle(Client *c) } +static void +ungrabbutton(Client *c, unsigned int button, unsigned int modifier) +{ + XUngrabButton(dpy, button, modifier, c->win); + XUngrabButton(dpy, button, modifier | LockMask, c->win); + XUngrabButton(dpy, button, modifier | numlockmask, c->win); + XUngrabButton(dpy, button, modifier | numlockmask | LockMask, c->win); +} + static int xerrordummy(Display *dsply, XErrorEvent *ee) { @@ -51,13 +73,18 @@ focus(Client *c) { Client *old = sel; - if (!issel) + if(!issel) return; - if(sel && sel->ismax) - togglemax(NULL); - sel = c; - if(old && old != c) + if(!sel) + sel = c; + else if(sel != c) { + if(sel->ismax) + togglemax(NULL); + sel = c; + grabbutton(old, AnyButton, 0); drawtitle(old); + } + ungrabbutton(c, AnyButton, 0); drawtitle(c); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); } @@ -203,8 +230,14 @@ manage(Window w, XWindowAttributes *wa) c->border = 0; setsize(c); + if(c->x + c->w + 2 > sw) + c->x = sw - c->w - 2; + if(c->x < 0) + c->x = 0; + if(c->y + c->h + 2 > sh) + c->y = sh - c->h - 2; if(c->h != sh && c->y < bh) - c->y = c->ty = bh; + c->y = bh; c->proto = getproto(c->win); XSelectInput(dpy, c->win, @@ -224,32 +257,9 @@ manage(Window w, XWindowAttributes *wa) c->next = clients; clients = c; - XGrabButton(dpy, Button1, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY | numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button1, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - - XGrabButton(dpy, Button2, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY | numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button2, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - - XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); - XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); + grabbutton(c, Button1, MODKEY); + grabbutton(c, Button2, MODKEY); + grabbutton(c, Button3, MODKEY); settags(c); if(!c->isfloat) @@ -257,20 +267,6 @@ manage(Window w, XWindowAttributes *wa) || (c->maxw && c->minw && c->maxw == c->minw && c->maxh == c->minh); settitle(c); - - if(trans && (tc = getclient(trans))) { - c->x = (tc->x + tc->w / 2) - (c->w / 2); - c->y = (tc->y + tc->h / 2) - (c->h / 2); - if(c->x < 0 || c->x >= sw) - c->x = (sw / 2) - (c->w / 2); - if(c->y < 0 || c->y >= sh) - c->y = ((sh - bh) / 2) - (c->h / 2) + bh; - } - else { - c->x = (sw / 2) - (c->w / 2); - c->y = ((sh - bh) / 2) - (c->h / 2) + bh; - } - if(isvisible(c)) sel = c; arrange(NULL); @@ -285,7 +281,6 @@ resize(Client *c, Bool sizehints, Corner sticky) { int bottom = c->y + c->h; int right = c->x + c->w; - /*XConfigureEvent e;*/ XWindowChanges wc; if(sizehints) { @@ -302,10 +297,6 @@ resize(Client *c, Bool sizehints, Corner sticky) if(c->maxh && c->h > c->maxh) c->h = c->maxh; } - if(c->x > right) /* might happen on restart */ - c->x = right - c->w; - if(c->y > bottom) - c->y = bottom - c->h; if(sticky == TopRight || sticky == BotRight) c->x = right - c->w; if(sticky == BotLeft || sticky == BotRight)