From ca79a22e6fffc9639d184a137de8b417c39e8024 Mon Sep 17 00:00:00 2001 From: okan Date: Tue, 13 Nov 2018 17:37:13 +0000 Subject: Allow 'transientfor' clients to inherit group and bwidth either during init or via property notify events. Previously only the flags were set but nothing was in the path to apply said flags and/or bwidth. Required slight of re-orgnaization of client_init. --- client.c | 39 ++++++++++++++++++++++----------------- conf.c | 7 ++----- xevents.c | 5 ++++- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/client.c b/client.c index 11fb8fd..27658e6 100644 --- a/client.c +++ b/client.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.246 2018/11/08 15:49:42 okan Exp $ + * $OpenBSD: client.c,v 1.247 2018/11/13 17:37:13 okan Exp $ */ #include @@ -62,10 +62,9 @@ client_init(Window win, struct screen_ctx *sc, int active) mapped = wattr.map_state != IsUnmapped; } - cc = xmalloc(sizeof(*cc)); - XGrabServer(X_Dpy); + cc = xmalloc(sizeof(*cc)); cc->sc = sc; cc->win = win; cc->label = NULL; @@ -74,30 +73,33 @@ client_init(Window win, struct screen_ctx *sc, int active) cc->stackingorder = 0; memset(&cc->hint, 0, sizeof(cc->hint)); memset(&cc->ch, 0, sizeof(cc->ch)); - TAILQ_INIT(&cc->nameq); - client_setname(cc); + cc->geom.x = wattr.x; + cc->geom.y = wattr.y; + cc->geom.w = wattr.width; + cc->geom.h = wattr.height; + cc->colormap = wattr.colormap; + cc->obwidth = wattr.border_width; + cc->bwidth = Conf.bwidth; + + client_setname(cc); conf_client(cc); XGetClassHint(X_Dpy, cc->win, &cc->ch); client_wm_hints(cc); client_wm_protocols(cc); client_getsizehints(cc); + client_transient(cc); client_mwm_hints(cc); - cc->geom.x = wattr.x; - cc->geom.y = wattr.y; - cc->geom.w = wattr.width; - cc->geom.h = wattr.height; + if ((cc->flags & CLIENT_IGNORE)) + cc->bwidth = 0; cc->dim.w = (cc->geom.w - cc->hint.basew) / cc->hint.incw; cc->dim.h = (cc->geom.h - cc->hint.baseh) / cc->hint.inch; cc->ptr.x = cc->geom.w / 2; cc->ptr.y = cc->geom.h / 2; - cc->colormap = wattr.colormap; - cc->obwidth = wattr.border_width; - if (wattr.map_state != IsViewable) { client_placecalc(cc); client_resize(cc, 0); @@ -114,8 +116,6 @@ client_init(Window win, struct screen_ctx *sc, int active) XAddToSaveSet(X_Dpy, cc->win); - client_transient(cc); - /* Notify client of its configuration. */ client_config(cc); @@ -131,6 +131,10 @@ client_init(Window win, struct screen_ctx *sc, int active) client_unhide(cc); if (mapped) { + if (cc->gc) { + group_movetogroup(cc, cc->gc->num); + goto out; + } if (group_restore(cc)) goto out; if (group_autogroup(cc)) @@ -926,10 +930,11 @@ client_transient(struct client_ctx *cc) Window trans; if (XGetTransientForHint(X_Dpy, cc->win, &trans)) { - if ((tc = client_find(trans)) != NULL && tc->gc) { - group_movetogroup(cc, tc->gc->num); - if (tc->flags & CLIENT_IGNORE) + if ((tc = client_find(trans)) != NULL) { + if (tc->flags & CLIENT_IGNORE) { cc->flags |= CLIENT_IGNORE; + cc->bwidth = tc->bwidth; + } } } } diff --git a/conf.c b/conf.c index a2e4694..c74f44c 100644 --- a/conf.c +++ b/conf.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: conf.c,v 1.241 2018/02/13 15:43:15 okan Exp $ + * $OpenBSD: conf.c,v 1.242 2018/11/13 17:37:13 okan Exp $ */ #include @@ -434,16 +434,13 @@ void conf_client(struct client_ctx *cc) { struct winname *wn; - int ignore = 0; TAILQ_FOREACH(wn, &Conf.ignoreq, entry) { if (strncasecmp(wn->name, cc->name, strlen(wn->name)) == 0) { - ignore = 1; + cc->flags |= CLIENT_IGNORE; break; } } - cc->bwidth = (ignore) ? 0 : Conf.bwidth; - cc->flags |= (ignore) ? CLIENT_IGNORE : 0; } void diff --git a/xevents.c b/xevents.c index 9fc659b..8ce32cd 100644 --- a/xevents.c +++ b/xevents.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: xevents.c,v 1.134 2018/02/04 22:56:26 okan Exp $ + * $OpenBSD: xevents.c,v 1.135 2018/11/13 17:37:13 okan Exp $ */ /* @@ -198,6 +198,9 @@ xev_handle_propertynotify(XEvent *ee) break; case XA_WM_TRANSIENT_FOR: client_transient(cc); + client_draw_border(cc); + if (cc->gc) + group_movetogroup(cc, cc->gc->num); break; default: /* do nothing */ -- cgit v1.2.3-2-gb3c3