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;