icewm/icewm-susemenu.patch
Tomáš Chvátal ab3f97e789 Accepting request 693024 from home:zhengqiang:branches:X11:windowmanagers
- Update to 1.5.3
- Rebase patches
  - icewm-susemenu.patch: rebase "suseprog" function
  - icewm-desktop-nodisplay.patch: rebase, set NoDisplay for
    icewm.desktop
  - icewm-preferences.patch: rebase, only IconPath hunk not in 
    upstream now
- Drop patches 
  - icewm-mate.patch: upstream no longer uses icewm-menu-gnome2 to
    generate a default menu, the current freedesktop.org approach 
    is superior for current distros
  - icewm-use-iproute2-ss-instead-of-netstat.patch: 
    was accepted by upstream

OBS-URL: https://build.opensuse.org/request/show/693024
OBS-URL: https://build.opensuse.org/package/show/X11:windowmanagers/icewm?expand=0&rev=97
2019-04-11 05:49:16 +00:00

90 lines
2.8 KiB
Diff

diff --git a/lib/menu.in b/lib/menu.in
index f200514..3118471 100644
--- a/lib/menu.in
+++ b/lib/menu.in
@@ -12,5 +12,6 @@ prog Firefox mozilla firefox
prog Hexchat xchat hexchat
prog Gimp gimp gimp
includeprog icewm-menu-fdo --sep-before --no-sep-others
-menufile Programs folder programs
+#menufile Programs folder programs
menufile Tool_bar folder toolbar
+menuprog SUSE folder xdg_menu --format icewm
diff --git a/src/wmmenu.cc b/src/wmmenu.cc
index ccee25e..ec2ff81 100644
--- a/src/wmmenu.cc
+++ b/src/wmmenu.cc
@@ -297,6 +297,45 @@ char* MenuLoader::parseMenuProg(char *p, ObjectContainer *container)
return p;
}
+char* MenuLoader::parseSuseProg(char *p, ObjectContainer *container)
+{
+ Argument name;
+
+ p = YConfig::getArgument(&name, p);
+ if (p == 0) return p;
+
+ Argument icons;
+
+ p = YConfig::getArgument(&icons, p);
+ if (p == 0) return p;
+
+ Argument command;
+ YStringArray args;
+
+ p = getCommandArgs(p, &command, args);
+ if (p == 0) {
+ msg(_("Error at prog %s"), name.cstr());
+ return p;
+ }
+
+ ref<YIcon> icon;
+#ifndef LITE
+ if (icons[0] != '-')
+ icon = YIcon::getIcon(icons);
+#endif
+ MSG(("suseprog %s %s", name.cstr(), command.cstr()));
+
+ upath fullPath = findPath(getenv("PATH"), X_OK, command.cstr());
+ if (fullPath != null) {
+ ObjectMenu *progmenu = new MenuProgMenu(
+ app, smActionListener, wmActionListener,
+ name.cstr(), command.cstr(), args, 0);
+ if (progmenu)
+ container->addContainer(name.cstr(), icon, progmenu);
+ }
+ return p;
+}
+
char* MenuLoader::parseMenuProgReload(char *p, ObjectContainer *container)
{
Argument name;
@@ -398,6 +437,9 @@ char* MenuLoader::parseWord(char *word, char *p, ObjectContainer *container)
else if (!strcmp(word, "menuprogreload")) {
p = parseMenuProgReload(p, container);
}
+ else if (!strcmp(word, "suseprog")) {
+ p = parseSuseProg(p, container);
+ }
else if (!strcmp(word, "include")) {
p = parseIncludeStatement(p, container);
}
diff --git a/src/wmprog.h b/src/wmprog.h
index 4e9bd1f..d5b9827 100644
--- a/src/wmprog.h
+++ b/src/wmprog.h
@@ -31,10 +31,12 @@ private:
char* parseMenuFile(char *data, ObjectContainer *container);
char* parseMenuProg(char *data, ObjectContainer *container);
char* parseMenuProgReload(char *data, ObjectContainer *container);
+ char* parseSuseProg(char *p, ObjectContainer *container);
char* parseKey(char *word, char *p);
char* parseProgram(char *word, char *p, ObjectContainer *container);
char* parseWord(char *word, char *p, ObjectContainer *container);
+
IApp *app;
YSMListener *smActionListener;
YActionListener *wmActionListener;