From e165f0fe2b22971ec2c1e9d39b241b025b3086f0 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Tue, 11 Oct 2011 06:34:05 +0200 Subject: [PATCH] Grab server with client_resize border preview --- src/client.c | 6 +++++- src/layout.c | 6 +++++- src/layout.h | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/client.c b/src/client.c index 71f1ee8..654db65 100644 --- a/src/client.c +++ b/src/client.c @@ -619,7 +619,6 @@ client_maximize(struct client *c) client_moveresize(c, &c->geo); } - /* * Client factor resize: allow clients to be resized in * manual tile layout. @@ -727,6 +726,7 @@ client_fac_resize(struct client *c, enum position p, int fac) return; */ + XGrabServer(W->dpy); XGrabKeyboard(W->dpy, W->root, True, GrabModeAsync, GrabModeAsync, CurrentTime); rgc = XCreateGC(W->dpy, c->tag->frame, GCFunction | GCSubwindowMode | GCLineWidth, &xgc); @@ -787,6 +787,8 @@ client_fac_resize(struct client *c, enum position p, int fac) { SLIST_FOREACH(gc, &c->tag->clients, tnext) client_moveresize(gc, &gc->tgeo); + + layout_save_set(c->tag); } /* Aborted with escape, Set back original geos */ else @@ -798,7 +800,9 @@ client_fac_resize(struct client *c, enum position p, int fac) } } + XFreeGC(W->dpy, rgc); + XUngrabServer(W->dpy); XUngrabKeyboard(W->dpy, CurrentTime); } diff --git a/src/layout.c b/src/layout.c index 8676786..da0ff24 100644 --- a/src/layout.c +++ b/src/layout.c @@ -8,7 +8,7 @@ #include "client.h" #include "util.h" -static void +void layout_save_set(struct tag *t) { struct client *c; @@ -233,6 +233,8 @@ layout_split_arrange_closed(struct client *ghost) } } } + + layout_save_set(ghost->tag); } /* Integrate a client in split layout: split sc and fill c in new geo */ @@ -259,6 +261,8 @@ layout_split_integrate(struct client *c, struct client *sc) client_moveresize(c, &g); client_moveresize(sc, &sc->geo); + + layout_save_set(c->tag); } /* Arrange inter-clients holes: diff --git a/src/layout.h b/src/layout.h index 2e6e833..51ca7fc 100644 --- a/src/layout.h +++ b/src/layout.h @@ -29,6 +29,7 @@ /* Debug */ #define DGEO(G) printf(": %d %d %d %d\n", G.x, G.y, G.w, G.h) +void layout_save_set(struct tag *t); void layout_free_set(struct tag *t); void layout_split_integrate(struct client *c, struct client *sc); void layout_split_arrange_closed(struct client *ghost);