summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorOkan Demirmen <okan@cvs.openbsd.org>2018-11-13 17:37:14 +0000
committerOkan Demirmen <okan@cvs.openbsd.org>2018-11-13 17:37:14 +0000
commit723e7030b0068873119dd513e1ee5c129f235c44 (patch)
treefe2f05213ff1dde066354f838f0120c25ff30b3b /app
parent48eb4cc92a2a475e99b28eb86db74e4c41092075 (diff)
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.
Diffstat (limited to 'app')
-rw-r--r--app/cwm/client.c39
-rw-r--r--app/cwm/conf.c7
-rw-r--r--app/cwm/xevents.c5
3 files changed, 28 insertions, 23 deletions
diff --git a/app/cwm/client.c b/app/cwm/client.c
index 11fb8fdc6..27658e67b 100644
--- a/app/cwm/client.c
+++ b/app/cwm/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 <sys/types.h>
@@ -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/app/cwm/conf.c b/app/cwm/conf.c
index a2e4694c7..c74f44cf2 100644
--- a/app/cwm/conf.c
+++ b/app/cwm/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 <sys/types.h>
@@ -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/app/cwm/xevents.c b/app/cwm/xevents.c
index 9fc659b0a..8ce32cd79 100644
--- a/app/cwm/xevents.c
+++ b/app/cwm/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 */