preserve labels after an edit action is aborted; extending the menu
struct just for this is the least intrusive approach until the menu code is reviewed. inspired by Thomas Pfaff's report on tech@ ok oga@
This commit is contained in:
parent
df3192521d
commit
5d67594356
@ -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.
|
||||
*
|
||||
* $Id: calmwm.h,v 1.115 2010/01/27 03:04:50 okan Exp $
|
||||
* $Id: calmwm.h,v 1.116 2010/02/10 01:23:05 okan Exp $
|
||||
*/
|
||||
|
||||
#ifndef _CALMWM_H_
|
||||
@ -320,6 +320,7 @@ struct menu {
|
||||
char print[MENU_MAXENTRY + 1];
|
||||
void *ctx;
|
||||
short dummy;
|
||||
short abort;
|
||||
};
|
||||
|
||||
TAILQ_HEAD(menu_q, menu);
|
||||
|
@ -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.
|
||||
*
|
||||
* $Id: kbfunc.c,v 1.50 2009/12/15 04:10:42 okan Exp $
|
||||
* $Id: kbfunc.c,v 1.51 2010/02/10 01:23:05 okan Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -400,19 +400,19 @@ kbfunc_client_label(struct client_ctx *cc, union arg *arg)
|
||||
{
|
||||
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
|
||||
|
@ -223,6 +223,7 @@ menu_handle_key(XEvent *e, struct menu_ctx *mc, struct menu_q *menuq,
|
||||
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_ctx *mc, struct menu_q *menuq,
|
||||
mi = xmalloc(sizeof *mi);
|
||||
mi->text[0] = '\0';
|
||||
mi->dummy = 1;
|
||||
mi->abort = 1;
|
||||
return (mi);
|
||||
default:
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user