aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client.c39
-rw-r--r--conf.c7
-rw-r--r--xevents.c5
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 <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/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 <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/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 */