aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorokan2013-12-11 14:09:21 +0000
committerokan2013-12-11 14:09:21 +0000
commitbca0ab294bb5e82fd02249f93c1f43ee6fd56934 (patch)
tree2893bc829f94e2a7dca395a5231697b675282b4b
parent0dd1308bf364ed7c2de8b4c81ded186922c7bc8b (diff)
downloadcwm-bca0ab294bb5e82fd02249f93c1f43ee6fd56934.tar.gz
Stash Class and WM Hints in client_ctx
Diffstat (limited to '')
-rw-r--r--calmwm.h6
-rw-r--r--client.c39
-rw-r--r--group.c8
-rw-r--r--search.c6
4 files changed, 27 insertions, 32 deletions
diff --git a/calmwm.h b/calmwm.h
index 71e0eea..5eca289 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -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);
diff --git a/client.c b/client.c
index 7470472..00be83f 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.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);
}
diff --git a/group.c b/group.c
index cce5b43..f9c6a1d 100644
--- a/group.c
+++ b/group.c
@@ -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)
diff --git a/search.c b/search.c
index d0bf4f9..6f03a4b 100644
--- a/search.c
+++ b/search.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: 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;
}