aboutsummaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'client.c')
-rw-r--r--client.c39
1 files changed, 22 insertions, 17 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;
+ }
}
}
}