diff options
author | okan | 2013-04-03 20:22:55 +0000 |
---|---|---|
committer | okan | 2013-04-03 20:22:55 +0000 |
commit | ef080833b83bef6de2a0b63e06d5d9535dcaa7ec (patch) | |
tree | ac42f24d3447cc98c0e09832c211a2527d721863 /client.c | |
parent | adbf049a260d761120d72f367da62352505e57e4 (diff) | |
download | cwm-ef080833b83bef6de2a0b63e06d5d9535dcaa7ec.tar.gz |
- no reason to breakout ClassHints work, so fold into client_{new,delete},
but keep _MOTIF_WM_HINTS separate.
- simplify fetching app/class hint.
- fix _MOTIF_WM_HINTS Atom type.
Diffstat (limited to 'client.c')
-rw-r--r-- | client.c | 40 |
1 files changed, 16 insertions, 24 deletions
@@ -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.120 2013/04/03 19:20:50 okan Exp $ + * $OpenBSD: client.c,v 1.121 2013/04/03 20:22:55 okan Exp $ */ #include <sys/param.h> @@ -37,8 +37,7 @@ static void client_mtf(struct client_ctx *); static void client_none(struct screen_ctx *); static void client_placecalc(struct client_ctx *); static void client_update(struct client_ctx *); -static void client_gethints(struct client_ctx *); -static void client_freehints(struct client_ctx *); +static void client_getmwmhints(struct client_ctx *); static int client_inbound(struct client_ctx *, int, int); struct client_ctx *_curcc = NULL; @@ -59,6 +58,7 @@ struct client_ctx * client_new(Window win, struct screen_ctx *sc, int mapped) { struct client_ctx *cc; + XClassHint xch; XWindowAttributes wattr; XWMHints *wmhints; int state; @@ -82,6 +82,12 @@ client_new(Window win, struct screen_ctx *sc, int mapped) conf_client(cc); + if (XGetClassHint(X_Dpy, cc->win, &xch)) { + cc->app_name = xch.res_name; + cc->app_class = xch.res_class; + } + client_getmwmhints(cc); + /* Saved pointer position */ cc->ptr.x = -1; cc->ptr.y = -1; @@ -126,7 +132,6 @@ client_new(Window win, struct screen_ctx *sc, int mapped) xu_ewmh_net_client_list(sc); - client_gethints(cc); client_update(cc); if (mapped) @@ -162,6 +167,10 @@ client_delete(struct client_ctx *cc) client_none(sc); XFree(cc->size); + if (cc->app_name != NULL) + XFree(cc->app_name); + if (cc->app_class != NULL) + XFree(cc->app_class); while ((wn = TAILQ_FIRST(&cc->nameq)) != NULL) { TAILQ_REMOVE(&cc->nameq, wn, entry); @@ -169,7 +178,6 @@ client_delete(struct client_ctx *cc) free(wn); } - client_freehints(cc); free(cc); } @@ -789,19 +797,12 @@ client_applysizehints(struct client_ctx *cc) } static void -client_gethints(struct client_ctx *cc) +client_getmwmhints(struct client_ctx *cc) { - XClassHint xch; struct mwm_hints *mwmh; - if (XGetClassHint(X_Dpy, cc->win, &xch)) { - if (xch.res_name != NULL) - cc->app_name = xch.res_name; - if (xch.res_class != NULL) - cc->app_class = xch.res_class; - } - - if (xu_getprop(cc->win, cwmh[_MOTIF_WM_HINTS].atom, _MOTIF_WM_HINTS, + if (xu_getprop(cc->win, + cwmh[_MOTIF_WM_HINTS].atom, cwmh[_MOTIF_WM_HINTS].atom, PROP_MWM_HINTS_ELEMENTS, (u_char **)&mwmh) == MWM_NUMHINTS) if (mwmh->flags & MWM_HINTS_DECORATIONS && !(mwmh->decorations & MWM_DECOR_ALL) && @@ -809,15 +810,6 @@ client_gethints(struct client_ctx *cc) cc->bwidth = 0; } -static void -client_freehints(struct client_ctx *cc) -{ - if (cc->app_name != NULL) - XFree(cc->app_name); - if (cc->app_class != NULL) - XFree(cc->app_class); -} - void client_transient(struct client_ctx *cc) { |