diff options
author | okan <okan> | 2013-12-02 20:01:19 +0000 |
---|---|---|
committer | okan <okan> | 2013-12-02 20:01:19 +0000 |
commit | 873763f4c6a4369d703274a279296200bfd271a2 (patch) | |
tree | b9e271a8395656cebd2de507b6abffda288d9ed6 /client.c | |
parent | 3c78191e2ef0b51da1f70327cc9b7e087413f88d (diff) | |
parent | 5dc65d9242c423fd4f45ec48c32e525d9f1300f2 (diff) | |
download | cwm-873763f4c6a4369d703274a279296200bfd271a2.tar.gz cwm-873763f4c6a4369d703274a279296200bfd271a2.tar.xz cwm-873763f4c6a4369d703274a279296200bfd271a2.zip |
cvsimport
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 150 |
1 files changed, 60 insertions, 90 deletions
diff --git a/client.c b/client.c index a874c6e..05b1965 100644 --- a/client.c +++ b/client.c @@ -180,53 +180,35 @@ client_delete(struct client_ctx *cc) } void -client_leave(struct client_ctx *cc) +client_setactive(struct client_ctx *cc) { - if (cc == NULL) - cc = client_current(); - if (cc == NULL) - return; -} - -void -client_setactive(struct client_ctx *cc, int fg) -{ - struct screen_ctx *sc; - - if (cc == NULL) - cc = client_current(); - if (cc == NULL) - return; + struct screen_ctx *sc = cc->sc; + struct client_ctx *oldcc; - sc = cc->sc; + XInstallColormap(X_Dpy, cc->colormap); - if (fg) { - XInstallColormap(X_Dpy, cc->colormap); - if ((cc->flags & CLIENT_INPUT) || - ((cc->flags & CLIENT_WM_TAKE_FOCUS) == 0)) { - XSetInputFocus(X_Dpy, cc->win, - RevertToPointerRoot, CurrentTime); - } - if (cc->flags & CLIENT_WM_TAKE_FOCUS) - client_msg(cc, cwmh[WM_TAKE_FOCUS]); - conf_grab_mouse(cc->win); - /* - * If we're in the middle of alt-tabbing, don't change - * the order please. - */ - if (!sc->cycling) - client_mtf(cc); - } else - client_leave(cc); + if ((cc->flags & CLIENT_INPUT) || + ((cc->flags & CLIENT_WM_TAKE_FOCUS) == 0)) { + XSetInputFocus(X_Dpy, cc->win, + RevertToPointerRoot, CurrentTime); + } + if (cc->flags & CLIENT_WM_TAKE_FOCUS) + client_msg(cc, cwmh[WM_TAKE_FOCUS]); - if (fg && cc != client_current()) { - client_setactive(NULL, 0); - _curcc = cc; - xu_ewmh_net_active_window(sc, cc->win); + if ((oldcc = client_current())) { + oldcc->active = 0; + client_draw_border(oldcc); } - cc->active = fg; + /* If we're in the middle of cycing, don't change the order. */ + if (!sc->cycling) + client_mtf(cc); + + _curcc = cc; + cc->active = 1; client_draw_border(cc); + conf_grab_mouse(cc->win); + xu_ewmh_net_active_window(sc, cc->win); } /* @@ -640,12 +622,14 @@ client_cycle(struct screen_ctx *sc, int flags) } void -client_cycle_leave(struct screen_ctx *sc, struct client_ctx *cc) +client_cycle_leave(struct screen_ctx *sc) { + struct client_ctx *cc; + sc->cycling = 0; - client_mtf(NULL); - if (cc) { + if ((cc = client_current())) { + client_mtf(cc); group_sticky_toggle_exit(cc); XUngrabKeyboard(X_Dpy, CurrentTime); } @@ -724,14 +708,8 @@ client_placecalc(struct client_ctx *cc) static void client_mtf(struct client_ctx *cc) { - struct screen_ctx *sc; - - if (cc == NULL) - cc = client_current(); - if (cc == NULL) - return; + struct screen_ctx *sc = cc->sc; - sc = cc->sc; TAILQ_REMOVE(&sc->mruq, cc, mru_entry); TAILQ_INSERT_HEAD(&sc->mruq, cc, mru_entry); } @@ -740,52 +718,46 @@ void client_getsizehints(struct client_ctx *cc) { long tmp; - XSizeHints *size; + XSizeHints size; - if ((size = XAllocSizeHints()) == NULL) - warnx("XAllocSizeHints failure"); + if (!XGetWMNormalHints(X_Dpy, cc->win, &size, &tmp)) + size.flags = 0; - if (!XGetWMNormalHints(X_Dpy, cc->win, size, &tmp)) - size->flags = 0; + cc->hint.flags = size.flags; - cc->hint.flags = size->flags; - - if (size->flags & PBaseSize) { - cc->hint.basew = size->base_width; - cc->hint.baseh = size->base_height; - } else if (size->flags & PMinSize) { - cc->hint.basew = size->min_width; - cc->hint.baseh = size->min_height; + if (size.flags & PBaseSize) { + cc->hint.basew = size.base_width; + cc->hint.baseh = size.base_height; + } else if (size.flags & PMinSize) { + cc->hint.basew = size.min_width; + cc->hint.baseh = size.min_height; } - if (size->flags & PMinSize) { - cc->hint.minw = size->min_width; - cc->hint.minh = size->min_height; - } else if (size->flags & PBaseSize) { - cc->hint.minw = size->base_width; - cc->hint.minh = size->base_height; + if (size.flags & PMinSize) { + cc->hint.minw = size.min_width; + cc->hint.minh = size.min_height; + } else if (size.flags & PBaseSize) { + cc->hint.minw = size.base_width; + cc->hint.minh = size.base_height; } - if (size->flags & PMaxSize) { - cc->hint.maxw = size->max_width; - cc->hint.maxh = size->max_height; + if (size.flags & PMaxSize) { + cc->hint.maxw = size.max_width; + cc->hint.maxh = size.max_height; } - if (size->flags & PResizeInc) { - cc->hint.incw = size->width_inc; - cc->hint.inch = size->height_inc; + if (size.flags & PResizeInc) { + cc->hint.incw = size.width_inc; + cc->hint.inch = size.height_inc; } cc->hint.incw = MAX(1, cc->hint.incw); cc->hint.inch = MAX(1, cc->hint.inch); - if (size->flags & PAspect) { - if (size->min_aspect.x > 0) - cc->hint.mina = (float)size->min_aspect.y / - size->min_aspect.x; - if (size->max_aspect.y > 0) - cc->hint.maxa = (float)size->max_aspect.x / - size->max_aspect.y; + if (size.flags & PAspect) { + if (size.min_aspect.x > 0) + cc->hint.mina = (float)size.min_aspect.y / + size.min_aspect.x; + if (size.max_aspect.y > 0) + cc->hint.maxa = (float)size.max_aspect.x / + size.max_aspect.y; } - - if (size) - XFree(size); } void @@ -803,12 +775,10 @@ client_applysizehints(struct client_ctx *cc) } /* adjust for aspect limits */ - if (cc->hint.mina > 0 && cc->hint.maxa > 0) { - if (cc->hint.maxa < - (float)cc->geom.w / cc->geom.h) + if (cc->hint.mina && cc->hint.maxa) { + if (cc->hint.maxa < (float)cc->geom.w / cc->geom.h) cc->geom.w = cc->geom.h * cc->hint.maxa; - else if (cc->hint.mina < - (float)cc->geom.h / cc->geom.w) + else if (cc->hint.mina < (float)cc->geom.h / cc->geom.w) cc->geom.h = cc->geom.w * cc->hint.mina; } |