rem: free(entry->text);
add: wfree(entry->text);
context: editEntry(WMenu *menu, WMenuEntry *entry){    WTextInput *text;    XEvent event;    WObjDescriptor *desc;    char *t;    int done = 0;    Window old_focus;    int old_revert;        menu->flags.editing = 1;    text = wTextCreate(menu->menu, 1, menu->entry_height * entry->order,		       menu->menu->width - 2, menu->entry_height - 1);    wTextPutText(text, entry->text);    XGetInputFocus(dpy, &old_focus, &old_revert);    XSetInputFocus(dpy, text->core->window, RevertToNone, CurrentTime);        if (XGrabKeyboard(dpy, text->core->window, True, GrabModeAsync,		      GrabModeAsync, CurrentTime)!=GrabSuccess) {	wwarning("could not grab keyboard");	wTextDestroy(text);		wSetFocusTo(menu->frame->screen_ptr, 		    menu->frame->screen_ptr->focused_window);	return;    }    while (!done && !text->done) {	XSync(dpy, 0);	XAllowEvents(dpy, AsyncKeyboard|AsyncPointer, CurrentTime);	XSync(dpy, 0);	WMNextEvent(dpy, &event);	if (XFindContext(dpy, event.xany.window, wWinContext, 			 (XPointer *)&desc)==XCNOENT)	    desc = NULL;		if ((desc != NULL) && (desc->handle_anything != NULL)) {	    (*desc->handle_anything)(desc, &event);	} else {	    	    switch (event.type) {	     case ButtonPress:		XAllowEvents(dpy, ReplayPointer, CurrentTime);		done = 1;	     default:		WMHandleEvent(&event);		break;	    }	}    }    XSetInputFocus(dpy, old_focus, old_revert, CurrentTime);    wSetFocusTo(menu->frame->screen_ptr, 		menu->frame->screen_ptr->focused_window);    t = wTextGetText(text);    /* if !t, the user has canceled editing */    if (t) {	if (entry->text)	    free(entry->text);	entry->text = wstrdup(t);		menu->flags.realized = 0;    }    wTextDestroy(text);        XUngrabKeyboard(dpy, CurrentTime);        if (t && menu->on_edit)	(*menu->on_edit)(menu, entry);        menu->flags.editing = 0;    if (!menu->flags.realized)	wMenuRealize(menu);}