summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--client.c48
-rw-r--r--group.c2
-rw-r--r--menu.c14
-rw-r--r--search.c17
-rw-r--r--xevents.c2
5 files changed, 40 insertions, 43 deletions
diff --git a/client.c b/client.c
index 59b9fe9..b3bce5d 100644
--- a/client.c
+++ b/client.c
@@ -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;
@@ -121,20 +127,19 @@ client_new(Window win, struct screen_ctx *sc, int mapped)
 	(state == IconicState) ? client_hide(cc) : client_unhide(cc);
 	xu_setstate(cc, cc->state);
 
-	XSync(X_Dpy, False);
-	XUngrabServer(X_Dpy);
-
 	TAILQ_INSERT_TAIL(&sc->mruq, cc, mru_entry);
 	TAILQ_INSERT_TAIL(&Clientq, cc, entry);
 
 	xu_ewmh_net_client_list(sc);
 
-	client_gethints(cc);
 	client_update(cc);
 
 	if (mapped)
 		group_autogroup(cc);
 
+	XSync(X_Dpy, False);
+	XUngrabServer(X_Dpy);
+
 	return (cc);
 }
 
@@ -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);
 }
 
@@ -566,7 +574,7 @@ client_cycle(struct screen_ctx *sc, int flags)
 		return;
 
 	if (oldcc == NULL)
-		oldcc = (flags & CWM_RCYCLE ? 
+		oldcc = (flags & CWM_RCYCLE ?
 		    TAILQ_LAST(&sc->mruq, cycle_entry_q) :
 		    TAILQ_FIRST(&sc->mruq));
 
@@ -598,7 +606,7 @@ client_cycle(struct screen_ctx *sc, int flags)
 }
 
 void
-client_cycle_leave(struct screen_ctx *sc, struct client_ctx *cc) 
+client_cycle_leave(struct screen_ctx *sc, struct client_ctx *cc)
 {
 	sc->cycling = 0;
 
@@ -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)
 {
diff --git a/group.c b/group.c
index e471d63..3b21c68 100644
--- a/group.c
+++ b/group.c
@@ -142,7 +142,7 @@ group_init(struct screen_ctx *sc)
 
 	TAILQ_INIT(&sc->groupq);
 	sc->group_hideall = 0;
-	/* 
+	/*
 	 * See if any group names have already been set and update the
 	 * property with ours if they'll have changed.
 	 */
diff --git a/menu.c b/menu.c
index 5a1c601..90652d6 100644
--- a/menu.c
+++ b/menu.c
@@ -59,8 +59,8 @@ struct menu_ctx {
 	int 			 flags;
 	int			 x;
 	int			 y;
-    	void (*match)(struct menu_q *, struct menu_q *, char *);
-    	void (*print)(struct menu *, int);
+	void (*match)(struct menu_q *, struct menu_q *, char *);
+	void (*print)(struct menu *, int);
 };
 static struct menu	*menu_handle_key(XEvent *, struct menu_ctx *,
 			     struct menu_q *, struct menu_q *);
@@ -75,7 +75,7 @@ static void 		 menu_draw_entry(struct screen_ctx *, struct menu_ctx *,
 static int		 menu_calc_entry(struct screen_ctx *, struct menu_ctx *,
 			     int, int);
 static int		 menu_keycode(XKeyEvent *, enum ctltype *,
-                             char *);
+			     char *);
 
 void
 menu_init(struct screen_ctx *sc)
@@ -88,7 +88,7 @@ menu_init(struct screen_ctx *sc)
 
 struct menu *
 menu_filter(struct screen_ctx *sc, struct menu_q *menuq, char *prompt,
-    char *initial, int flags, 
+    char *initial, int flags,
     void (*match)(struct menu_q *, struct menu_q *, char *),
     void (*print)(struct menu *, int))
 {
@@ -217,7 +217,7 @@ menu_complete_path(struct menu_ctx *mc)
 	
 	menuq_clear(&menuq);
 
-	if (path[0] != '\0') 
+	if (path[0] != '\0')
 		snprintf(mr->text, sizeof(mr->text), "%s \"%s\"",
 			mc->searchstr, path);
 	else if (!mr->abort)
@@ -286,7 +286,7 @@ menu_handle_key(XEvent *e, struct menu_ctx *mc, struct menu_q *menuq,
 		break;
 	case CTL_TAB:
 		if ((mi = TAILQ_FIRST(resultq)) != NULL) {
-			/* 
+			/*
 			 * - We are in exec_path menu mode
 			 * - It is equal to the input
 			 * We got a command, launch the file menu
@@ -296,7 +296,7 @@ menu_handle_key(XEvent *e, struct menu_ctx *mc, struct menu_q *menuq,
 					strlen(mi->text))) == 0)
 				return (menu_complete_path(mc));
 
-			/* 
+			/*
 			 * Put common prefix of the results into searchstr
 			 */
 			(void)strlcpy(mc->searchstr,
diff --git a/search.c b/search.c
index b74c2ef..d419d70 100644
--- a/search.c
+++ b/search.c
@@ -33,8 +33,11 @@
 
 #include "calmwm.h"
 
-#define PATH_EXEC 	0x1
+#define PATH_ANY 	0x0001
+#define PATH_EXEC 	0x0002
 
+static void	search_match_path(struct menu_q *, struct menu_q *,
+		    char *, int);
 static int	strsubmatch(char *, char *, int);
 
 /*
@@ -189,16 +192,16 @@ search_match_path(struct menu_q *menuq, struct menu_q *resultq, char *search, in
 	globfree(&g);
 }
 
-void 
+void
 search_match_path_exec(struct menu_q *menuq, struct menu_q *resultq, char *search)
 {
 	return (search_match_path(menuq, resultq, search, PATH_EXEC));
 }
 
-void 
+void
 search_match_path_any(struct menu_q *menuq, struct menu_q *resultq, char *search)
 {
-	return (search_match_path(menuq, resultq, search, 0));
+	return (search_match_path(menuq, resultq, search, PATH_ANY));
 }
 
 void
@@ -217,6 +220,7 @@ void
 search_match_exec(struct menu_q *menuq, struct menu_q *resultq, char *search)
 {
 	struct menu	*mi, *mj;
+	int		 r;
 
 	TAILQ_INIT(resultq);
 
@@ -225,10 +229,11 @@ search_match_exec(struct menu_q *menuq, struct menu_q *resultq, char *search)
 		    fnmatch(search, mi->text, 0) == FNM_NOMATCH)
 			continue;
 		TAILQ_FOREACH(mj, resultq, resultentry) {
-			if (strcasecmp(mi->text, mj->text) < 0) {
+			r = strcasecmp(mi->text, mj->text);
+			if (r < 0)
 				TAILQ_INSERT_BEFORE(mj, mi, resultentry);
+			if (r <= 0)
 				break;
-			}
 		}
 		if (mj == NULL)
 			TAILQ_INSERT_TAIL(resultq, mi, resultentry);
diff --git a/xevents.c b/xevents.c
index abfaf0e..b1ebdba 100644
--- a/xevents.c
+++ b/xevents.c
@@ -203,7 +203,7 @@ xev_handle_propertynotify(XEvent *ee)
 			break;
 		}
 	} else {
-		TAILQ_FOREACH(sc, &Screenq, entry) 
+		TAILQ_FOREACH(sc, &Screenq, entry)
 			if (sc->rootwin == e->window)
 				goto test;
 		return;