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;