On Sun 2010.01.17 at 16:05 +0100, Thomas Pfaff wrote: > This diff disallows setting blank labels and pressing Esc while editing > the current one will leave it unchanged. I don't see the point in allowing > empty labels as the windows will just show up as blank entries in the menu. > > Also remove `current' variable and just use `cc->label'.
hi, i believe due to the nature of menu_filter(), you'll still run into losing your label using just strlen(). below the least intrusive way until we potentially look back at the menu code. i don't use labels at all, so can you verify this fixes all your cases? cheers, okan Index: calmwm.h =================================================================== RCS file: /home/open/anoncvs/cvs/xenocara/app/cwm/calmwm.h,v retrieving revision 1.115 diff -u -p -r1.115 calmwm.h --- calmwm.h 27 Jan 2010 03:04:50 -0000 1.115 +++ calmwm.h 30 Jan 2010 20:14:49 -0000 @@ -320,6 +320,7 @@ struct menu { char print[MENU_MAXENTRY + 1]; void *ctx; short dummy; + short abort; }; TAILQ_HEAD(menu_q, menu); Index: kbfunc.c =================================================================== RCS file: /home/open/anoncvs/cvs/xenocara/app/cwm/kbfunc.c,v retrieving revision 1.50 diff -u -p -r1.50 kbfunc.c --- kbfunc.c 15 Dec 2009 04:10:42 -0000 1.50 +++ kbfunc.c 30 Jan 2010 20:36:18 -0000 @@ -400,19 +400,19 @@ kbfunc_client_label(struct client_ctx *c { struct menu *mi; struct menu_q menuq; - char *current; TAILQ_INIT(&menuq); - current = cc->label; + /* dummy is set, so this will always return */ + mi = menu_filter(cc->sc, &menuq, "label", cc->label, 1, + search_match_text, NULL); - if ((mi = menu_filter(cc->sc, &menuq, "label", current, 1, - search_match_text, NULL)) != NULL) { + if (!mi->abort) { if (cc->label != NULL) xfree(cc->label); cc->label = xstrdup(mi->text); - xfree(mi); } + xfree(mi); } void Index: menu.c =================================================================== RCS file: /home/open/anoncvs/cvs/xenocara/app/cwm/menu.c,v retrieving revision 1.19 diff -u -p -r1.19 menu.c --- menu.c 15 Dec 2009 04:10:42 -0000 1.19 +++ menu.c 30 Jan 2010 20:35:01 -0000 @@ -223,6 +223,7 @@ menu_handle_key(XEvent *e, struct menu_c mc->searchstr, sizeof(mi->text)); mi->dummy = 1; } + mi->abort = 0; return (mi); case CTL_WIPE: mc->searchstr[0] = '\0'; @@ -235,6 +236,7 @@ menu_handle_key(XEvent *e, struct menu_c mi = xmalloc(sizeof *mi); mi->text[0] = '\0'; mi->dummy = 1; + mi->abort = 1; return (mi); default: break;