diff options
author | okan | 2013-12-11 14:09:21 +0000 |
---|---|---|
committer | okan | 2013-12-11 14:09:21 +0000 |
commit | bca0ab294bb5e82fd02249f93c1f43ee6fd56934 (patch) | |
tree | 2893bc829f94e2a7dca395a5231697b675282b4b | |
parent | 0dd1308bf364ed7c2de8b4c81ded186922c7bc8b (diff) | |
download | cwm-bca0ab294bb5e82fd02249f93c1f43ee6fd56934.tar.gz |
Stash Class and WM Hints in client_ctx
-rw-r--r-- | calmwm.h | 6 | ||||
-rw-r--r-- | client.c | 39 | ||||
-rw-r--r-- | group.c | 8 | ||||
-rw-r--r-- | search.c | 6 |
4 files changed, 27 insertions, 32 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: calmwm.h,v 1.230 2013/11/27 18:34:34 okan Exp $ + * $OpenBSD: calmwm.h,v 1.231 2013/12/11 14:09:21 okan Exp $ */ #ifndef _CALMWM_H_ @@ -177,8 +177,8 @@ struct client_ctx { char *label; char *matchname; struct group_ctx *group; - char *app_class; - char *app_name; + XClassHint ch; + XWMHints *wmh; }; TAILQ_HEAD(client_ctx_q, client_ctx); TAILQ_HEAD(cycle_entry_q, client_ctx); @@ -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.153 2013/12/10 21:27:37 okan Exp $ + * $OpenBSD: client.c,v 1.154 2013/12/11 14:09:21 okan Exp $ */ #include <sys/param.h> @@ -58,9 +58,7 @@ struct client_ctx * client_init(Window win, struct screen_ctx *sc, int mapped) { struct client_ctx *cc; - XClassHint xch; XWindowAttributes wattr; - XWMHints *wmhints; int state; if (win == None) @@ -74,18 +72,16 @@ client_init(Window win, struct screen_ctx *sc, int mapped) cc->sc = sc; cc->win = win; - client_getsizehints(cc); - TAILQ_INIT(&cc->nameq); client_setname(cc); conf_client(cc); - if (XGetClassHint(X_Dpy, cc->win, &xch)) { - cc->app_name = xch.res_name; - cc->app_class = xch.res_class; - } + XGetClassHint(X_Dpy, cc->win, &cc->ch); + cc->wmh = XGetWMHints(X_Dpy, cc->win); client_getmwmhints(cc); + client_wm_protocols(cc); + client_getsizehints(cc); /* Saved pointer position */ cc->ptr.x = -1; @@ -98,22 +94,20 @@ client_init(Window win, struct screen_ctx *sc, int mapped) cc->geom.h = wattr.height; cc->colormap = wattr.colormap; - if ((wmhints = XGetWMHints(X_Dpy, cc->win)) != NULL) { - if (wmhints->flags & InputHint) { - if (wmhints->input == 1) + if (cc->wmh != NULL) { + if (cc->wmh->flags & InputHint) { + if (cc->wmh->input == 1) cc->flags |= CLIENT_INPUT; } } if (wattr.map_state != IsViewable) { client_placecalc(cc); client_move(cc); - if ((wmhints) && (wmhints->flags & StateHint)) { - cc->state = wmhints->initial_state; + if ((cc->wmh) && (cc->wmh->flags & StateHint)) { + cc->state = cc->wmh->initial_state; xu_set_wm_state(cc->win, cc->state); } } - if (wmhints) - XFree(wmhints); client_draw_border(cc); if (xu_get_wm_state(cc->win, &state) < 0) @@ -136,7 +130,6 @@ client_init(Window win, struct screen_ctx *sc, int mapped) xu_ewmh_net_client_list(sc); - client_wm_protocols(cc); xu_ewmh_restore_net_wm_state(cc); if (mapped) @@ -165,17 +158,19 @@ client_delete(struct client_ctx *cc) if (cc == client_current()) client_none(sc); - 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); free(wn->name); free(wn); } + if (cc->ch.res_class) + XFree(cc->ch.res_class); + if (cc->ch.res_name) + XFree(cc->ch.res_name); + if (cc->wmh) + XFree(cc->wmh); + free(cc); } @@ -16,7 +16,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: group.c,v 1.81 2013/10/17 13:59:10 okan Exp $ + * $OpenBSD: group.c,v 1.82 2013/12/11 14:09:21 okan Exp $ */ #include <sys/param.h> @@ -371,7 +371,7 @@ group_autogroup(struct client_ctx *cc) int no = -1, both_match = 0; long *grpno; - if (cc->app_class == NULL || cc->app_name == NULL) + if (cc->ch.res_class == NULL || cc->ch.res_name == NULL) return; if (xu_getprop(cc->win, ewmh[_NET_WM_DESKTOP], @@ -385,9 +385,9 @@ group_autogroup(struct client_ctx *cc) XFree(grpno); } else { TAILQ_FOREACH(aw, &Conf.autogroupq, entry) { - if (strcmp(aw->class, cc->app_class) == 0) { + if (strcmp(aw->class, cc->ch.res_class) == 0) { if ((aw->name != NULL) && - (strcmp(aw->name, cc->app_name) == 0)) { + (strcmp(aw->name, cc->ch.res_name) == 0)) { no = aw->num; both_match = 1; } else if (aw->name == NULL && !both_match) @@ -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: search.c,v 1.33 2013/12/08 13:51:38 okan Exp $ + * $OpenBSD: search.c,v 1.34 2013/12/11 14:09:21 okan Exp $ */ #include <sys/param.h> @@ -85,8 +85,8 @@ search_match_client(struct menu_q *menuq, struct menu_q *resultq, char *search) } /* Then if there is a match on the window class name. */ - if (tier < 0 && strsubmatch(search, cc->app_class, 0)) { - cc->matchname = cc->app_class; + if (tier < 0 && strsubmatch(search, cc->ch.res_class, 0)) { + cc->matchname = cc->ch.res_class; tier = 3; } |