On Fri, 17 Sep 2010, Tamas TEVESZ wrote:
> later when trying to save. there is still one issue remaining, namely
> that even after having claimed the bad item was cleared, it still
> shows up on the editable menu popup, but it will not be present in the
> saved menu or anywhere, as far as i can tell.
thinking really helps, even if it makes my head hurt. ghost item
showing up fixed.
diff --git a/WPrefs.app/Menu.c b/WPrefs.app/Menu.c
index dccb85b..83e2596 100644
--- a/WPrefs.app/Menu.c
+++ b/WPrefs.app/Menu.c
@@ -509,7 +509,7 @@ static void createPanel(_Panel * p)
data->param.exec.command = "eterm";
data = putNewItem(panel, pad, ExecInfo, _("Run..."));
- data->param.exec.command = _("%a(Run,Type command to run)");
+ data->param.exec.command = _("%A(Run,Type command to run)");
data = putNewItem(panel, pad, ExecInfo, _("Netscape"));
data->param.exec.command = "netscape";
@@ -1030,7 +1030,8 @@ static ItemData *parseCommand(WMPropList * item)
cmd = 11;
} else {
wwarning(_("unknown command '%s' in menu"), command);
- goto error;
+ wfree(data);
+ return NULL;
}
data->type = CommandInfo;
@@ -1043,11 +1044,6 @@ static ItemData *parseCommand(WMPropList * item)
}
return data;
-
- error:
- wfree(data);
-
- return NULL;
}
static void updateFrameTitle(_Panel * panel, char *title, InfoType type)
@@ -1396,13 +1392,22 @@ static WEditMenu *buildSubmenu(_Panel * panel,
WMPropList * pl)
} else {
ItemData *data;
- item = WAddMenuItemWithTitle(menu, title);
-
data = parseCommand(pi);
- if (panel->markerPix[data->type])
- WSetEditMenuItemImage(item,
panel->markerPix[data->type]);
- WSetEditMenuItemData(item, data, (WMCallback *)
freeItemData);
+ if(data != NULL) {
+ item = WAddMenuItemWithTitle(menu, title);
+ if (panel->markerPix[data->type])
+ WSetEditMenuItemImage(item,
panel->markerPix[data->type]);
+ WSetEditMenuItemData(item, data, (WMCallback *)
freeItemData);
+ } else {
+ char *buf = wmalloc(1024);
+ snprintf(buf, 1024, _("Invalid menu command
\"%s\" with label \"%s\" cleared"),
+ WMGetFromPLString(WMGetFromPLArray(pi,
1)),
+ WMGetFromPLString(WMGetFromPLArray(pi,
0)));
+ WMRunAlertPanel(scr, panel->parent,
_("Warning"), buf, _("OK"), NULL, NULL);
+ wfree(buf);
+ }
+
}
}
@@ -1509,6 +1514,9 @@ static WMPropList *processData(char *title, ItemData *
data)
static WMPropList *pomenu = NULL;
int i;
+ if(data == NULL)
+ return NULL;
+
if (!pscut) {
pscut = WMCreatePLString("SHORTCUT");
pomenu = WMCreatePLString("OPEN_MENU");
@@ -1638,7 +1646,7 @@ static WMPropList *processSubmenu(WEditMenu * menu)
pmenu = WMCreatePLArray(pl, NULL);
i = 0;
- while ((item = WGetEditMenuItem(menu, i++))) {
+ while (item = WGetEditMenuItem(menu, i++)) {
WEditMenu *submenu;
s = WGetEditMenuItemTitle(item);
--
[-]
mkdir /nonexistentdiff --git a/WPrefs.app/Menu.c b/WPrefs.app/Menu.c
index dccb85b..83e2596 100644
--- a/WPrefs.app/Menu.c
+++ b/WPrefs.app/Menu.c
@@ -509,7 +509,7 @@ static void createPanel(_Panel * p)
data->param.exec.command = "eterm";
data = putNewItem(panel, pad, ExecInfo, _("Run..."));
- data->param.exec.command = _("%a(Run,Type command to run)");
+ data->param.exec.command = _("%A(Run,Type command to run)");
data = putNewItem(panel, pad, ExecInfo, _("Netscape"));
data->param.exec.command = "netscape";
@@ -1030,7 +1030,8 @@ static ItemData *parseCommand(WMPropList * item)
cmd = 11;
} else {
wwarning(_("unknown command '%s' in menu"), command);
- goto error;
+ wfree(data);
+ return NULL;
}
data->type = CommandInfo;
@@ -1043,11 +1044,6 @@ static ItemData *parseCommand(WMPropList * item)
}
return data;
-
- error:
- wfree(data);
-
- return NULL;
}
static void updateFrameTitle(_Panel * panel, char *title, InfoType type)
@@ -1396,13 +1392,22 @@ static WEditMenu *buildSubmenu(_Panel * panel, WMPropList * pl)
} else {
ItemData *data;
- item = WAddMenuItemWithTitle(menu, title);
-
data = parseCommand(pi);
- if (panel->markerPix[data->type])
- WSetEditMenuItemImage(item, panel->markerPix[data->type]);
- WSetEditMenuItemData(item, data, (WMCallback *) freeItemData);
+ if(data != NULL) {
+ item = WAddMenuItemWithTitle(menu, title);
+ if (panel->markerPix[data->type])
+ WSetEditMenuItemImage(item, panel->markerPix[data->type]);
+ WSetEditMenuItemData(item, data, (WMCallback *) freeItemData);
+ } else {
+ char *buf = wmalloc(1024);
+ snprintf(buf, 1024, _("Invalid menu command \"%s\" with label \"%s\" cleared"),
+ WMGetFromPLString(WMGetFromPLArray(pi, 1)),
+ WMGetFromPLString(WMGetFromPLArray(pi, 0)));
+ WMRunAlertPanel(scr, panel->parent, _("Warning"), buf, _("OK"), NULL, NULL);
+ wfree(buf);
+ }
+
}
}
@@ -1509,6 +1514,9 @@ static WMPropList *processData(char *title, ItemData * data)
static WMPropList *pomenu = NULL;
int i;
+ if(data == NULL)
+ return NULL;
+
if (!pscut) {
pscut = WMCreatePLString("SHORTCUT");
pomenu = WMCreatePLString("OPEN_MENU");
@@ -1638,7 +1646,7 @@ static WMPropList *processSubmenu(WEditMenu * menu)
pmenu = WMCreatePLArray(pl, NULL);
i = 0;
- while ((item = WGetEditMenuItem(menu, i++))) {
+ while (item = WGetEditMenuItem(menu, i++)) {
WEditMenu *submenu;
s = WGetEditMenuItemTitle(item);