mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 14:08:06 +01:00
Poke wmgenmenu some more
- change some variable names to better reflect their purpose, do a little write-up how a menu is built - auto-detect what terminal to use for apps in need of a terminal - fix the chunk that adds the terminal-based apps
This commit is contained in:
committed by
Carlos R. Mafra
parent
68f70da310
commit
68a55be998
248
util/wmgenmenu.c
248
util/wmgenmenu.c
@@ -20,19 +20,19 @@
|
|||||||
|
|
||||||
#include "wmgenmenu.h"
|
#include "wmgenmenu.h"
|
||||||
|
|
||||||
static void find_and_write(char *group, char **list);
|
static void find_and_write(char *group, char **list, int this_is_terminals);
|
||||||
static void other_window_managers(void);
|
static void other_window_managers(void);
|
||||||
static void print_help(int print_usage, int exitval);
|
static void print_help(int print_usage, int exitval);
|
||||||
|
|
||||||
extern char *__progname;
|
extern char *__progname;
|
||||||
|
|
||||||
char *path;
|
char *path, *terminal = NULL;
|
||||||
|
|
||||||
WMPropList *MenuRoot, *MenuGroup, *MenuItem;
|
WMPropList *RMenu, *L1Menu, *L2Menu, *L3Menu;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *t, *locale;
|
char *t;
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
struct option longopts[] = {
|
struct option longopts[] = {
|
||||||
@@ -62,7 +62,6 @@ int main(int argc, char *argv[])
|
|||||||
print_help(0, 1);
|
print_help(0, 1);
|
||||||
|
|
||||||
path = getenv("PATH");
|
path = getenv("PATH");
|
||||||
locale = getenv("LANG");
|
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
|
|
||||||
#if HAVE_LIBINTL_H && I18N
|
#if HAVE_LIBINTL_H && I18N
|
||||||
@@ -75,157 +74,184 @@ int main(int argc, char *argv[])
|
|||||||
textdomain("wmgenmenu");
|
textdomain("wmgenmenu");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MenuRoot = WMCreatePLArray(WMCreatePLString(_("Window Maker")), NULL);
|
/*
|
||||||
MenuGroup = WMCreatePLArray(WMCreatePLString(_("Applications")), NULL);
|
* The menu generated is a four-level hierarchy, of which the
|
||||||
|
* top level (RMenu) is only used to hold the others (a single
|
||||||
|
* PLString, which will be the title of the root menu)
|
||||||
|
*
|
||||||
|
* RMenu Window Maker
|
||||||
|
* L1Menu Applications
|
||||||
|
* L2Menu Terminals
|
||||||
|
* L3Menu XTerm
|
||||||
|
* L3Menu RXVT
|
||||||
|
* L2Menu Internet
|
||||||
|
* L3Menu Firefox
|
||||||
|
* L2Menu E-mail
|
||||||
|
* L1Menu Appearance
|
||||||
|
* L2Menu Themes
|
||||||
|
* L1Menu Configure Window Maker
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
RMenu = WMCreatePLArray(WMCreatePLString(_("Window Maker")), NULL);
|
||||||
|
|
||||||
|
L1Menu = WMCreatePLArray(WMCreatePLString(_("Applications")), NULL);
|
||||||
|
|
||||||
/* Submenus in Applications */
|
/* Submenus in Applications */
|
||||||
find_and_write(_("Terminals"), terminals);
|
find_and_write(_("Terminals"), terminals, 1); /* always keep terminals the top item */
|
||||||
find_and_write(_("Internet"), internet);
|
find_and_write(_("Internet"), internet, 0);
|
||||||
find_and_write(_("Email"), email);
|
find_and_write(_("Email"), email, 0);
|
||||||
find_and_write(_("Mathematics"), Mathematiks);
|
find_and_write(_("Mathematics"), Mathematiks, 0);
|
||||||
find_and_write(_("File Managers"), file_managers);
|
find_and_write(_("File Managers"), file_managers, 0);
|
||||||
find_and_write(_("Graphics"), Graphics);
|
find_and_write(_("Graphics"), Graphics, 0);
|
||||||
find_and_write(_("Multimedia"), Multimedia);
|
find_and_write(_("Multimedia"), Multimedia, 0);
|
||||||
find_and_write(_("Editors"), Editors);
|
find_and_write(_("Editors"), Editors, 0);
|
||||||
find_and_write(_("Development"), development);
|
find_and_write(_("Development"), development, 0);
|
||||||
find_and_write(_("Window Maker"), WindowMaker);
|
find_and_write(_("Window Maker"), WindowMaker, 0);
|
||||||
find_and_write(_("Office"), Office);
|
find_and_write(_("Office"), Office, 0);
|
||||||
find_and_write(_("Astronomy"), Astronomie);
|
find_and_write(_("Astronomy"), Astronomie, 0);
|
||||||
find_and_write(_("Sound"), Sound);
|
find_and_write(_("Sound"), Sound, 0);
|
||||||
find_and_write(_("Comics"), Comics);
|
find_and_write(_("Comics"), Comics, 0);
|
||||||
find_and_write(_("Viewers"), Viewers);
|
find_and_write(_("Viewers"), Viewers, 0);
|
||||||
find_and_write(_("Utilities"), Utilities);
|
find_and_write(_("Utilities"), Utilities, 0);
|
||||||
find_and_write(_("System"), System);
|
find_and_write(_("System"), System, 0);
|
||||||
find_and_write(_("Video"), Video);
|
find_and_write(_("Video"), Video, 0);
|
||||||
find_and_write(_("Chat and Talk"), Chat);
|
find_and_write(_("Chat and Talk"), Chat, 0);
|
||||||
find_and_write(_("P2P-Network"), P2P);
|
find_and_write(_("P2P-Network"), P2P, 0);
|
||||||
find_and_write(_("Games"), Games);
|
find_and_write(_("Games"), Games, 0);
|
||||||
find_and_write(_("OpenSUSE"), OpenSUSE);
|
find_and_write(_("OpenSUSE"), OpenSUSE, 0);
|
||||||
find_and_write(_("Mandriva"), Mandriva);
|
find_and_write(_("Mandriva"), Mandriva, 0);
|
||||||
|
|
||||||
WMAddToPLArray(MenuRoot, MenuGroup);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
/* `Run' dialog */
|
/* `Run' dialog */
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Run...")),
|
WMCreatePLString(_("Run...")),
|
||||||
WMCreatePLString("SHEXEC"),
|
WMCreatePLString("SHEXEC"),
|
||||||
WMCreatePLString(_("%A(Run, Type command:)")),
|
WMCreatePLString(_("%A(Run, Type command:)")),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
/* Appearance-related items */
|
/* Appearance-related items */
|
||||||
MenuGroup = WMCreatePLArray(WMCreatePLString(_("Appearance")), NULL);
|
L1Menu = WMCreatePLArray(WMCreatePLString(_("Appearance")), NULL);
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Themes")),
|
WMCreatePLString(_("Themes")),
|
||||||
WMCreatePLString("OPEN_MENU"),
|
WMCreatePLString("OPEN_MENU"),
|
||||||
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/Themes WITH setstyle"),
|
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/Themes WITH setstyle"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Icons")),
|
WMCreatePLString(_("Icons")),
|
||||||
WMCreatePLString("OPEN_MENU"),
|
WMCreatePLString("OPEN_MENU"),
|
||||||
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/IconSets WITH seticons"),
|
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/IconSets WITH seticons"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Background")),
|
WMCreatePLString(_("Background")),
|
||||||
WMCreatePLString("OPEN_MENU"),
|
WMCreatePLString("OPEN_MENU"),
|
||||||
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t"),
|
WMCreatePLString("-noext $HOME/GNUstep/Library/WindowMaker/Backgrounds WITH wmsetbg -u -t"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Save Theme")),
|
WMCreatePLString(_("Save Theme")),
|
||||||
WMCreatePLString("SHEXEC"),
|
WMCreatePLString("SHEXEC"),
|
||||||
WMCreatePLString("getstyle -t $HOME/GNUstep/Library/WindowMaker/Themes/\"%%a(Theme name)\""),
|
WMCreatePLString("getstyle -t $HOME/GNUstep/Library/WindowMaker/Themes/"
|
||||||
|
"\"%a(Theme name, Name to save theme as)\""),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Save Icons")),
|
WMCreatePLString(_("Save Icons")),
|
||||||
WMCreatePLString("SHEXEC"),
|
WMCreatePLString("SHEXEC"),
|
||||||
WMCreatePLString("geticonset $HOME/GNUstep/Library/WindowMaker/IconSets/\"%%a(IconSet name)\""),
|
WMCreatePLString("geticonset $HOME/GNUstep/Library/WindowMaker/IconSets/"
|
||||||
|
"\"%a(IconSet name,Name to save icon set as)\""),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
WMAddToPLArray(MenuRoot, MenuGroup);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
/* Workspace-related items */
|
/* Workspace-related items */
|
||||||
MenuGroup = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Workspaces")),
|
WMCreatePLString(_("Workspaces")),
|
||||||
WMCreatePLString("WORKSPACE_MENU"),
|
WMCreatePLString("WORKSPACE_MENU"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuGroup);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
MenuGroup = WMCreatePLArray(WMCreatePLString(_("Workspace")), NULL);
|
L1Menu = WMCreatePLArray(WMCreatePLString(_("Workspace")), NULL);
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Hide Others")),
|
WMCreatePLString(_("Hide Others")),
|
||||||
WMCreatePLString("HIDE_OTHERS"),
|
WMCreatePLString("HIDE_OTHERS"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
MenuItem = WMCreatePLArray(
|
|
||||||
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Show All")),
|
WMCreatePLString(_("Show All")),
|
||||||
WMCreatePLString("SHOW_ALL"),
|
WMCreatePLString("SHOW_ALL"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
MenuItem = WMCreatePLArray(
|
|
||||||
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Arrange Icons")),
|
WMCreatePLString(_("Arrange Icons")),
|
||||||
WMCreatePLString("ARRANGE_ICONS"),
|
WMCreatePLString("ARRANGE_ICONS"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Refresh")),
|
WMCreatePLString(_("Refresh")),
|
||||||
WMCreatePLString("REFRESH"),
|
WMCreatePLString("REFRESH"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
MenuItem = WMCreatePLArray(
|
|
||||||
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Save Session")),
|
WMCreatePLString(_("Save Session")),
|
||||||
WMCreatePLString("SAVE_SESSION"),
|
WMCreatePLString("SAVE_SESSION"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuGroup, MenuItem);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
MenuItem = WMCreatePLArray(
|
|
||||||
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Clear Session")),
|
WMCreatePLString(_("Clear Session")),
|
||||||
WMCreatePLString("CLEAR_SESSION"),
|
WMCreatePLString("CLEAR_SESSION"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuGroup);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
/* Configuration-related items */
|
/* Configuration-related items */
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Configure Window Maker")),
|
WMCreatePLString(_("Configure Window Maker")),
|
||||||
WMCreatePLString("EXEC"),
|
WMCreatePLString("EXEC"),
|
||||||
WMCreatePLString("WPrefs"),
|
WMCreatePLString("WPrefs"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Info Panel")),
|
WMCreatePLString(_("Info Panel")),
|
||||||
WMCreatePLString("INFO_PANEL"),
|
WMCreatePLString("INFO_PANEL"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Restart")),
|
WMCreatePLString(_("Restart")),
|
||||||
WMCreatePLString("RESTART"),
|
WMCreatePLString("RESTART"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
/* Other window managers */
|
/* Other window managers */
|
||||||
other_window_managers();
|
other_window_managers();
|
||||||
@@ -233,35 +259,45 @@ int main(int argc, char *argv[])
|
|||||||
/* XLock */
|
/* XLock */
|
||||||
t = wfindfile(path, "xlock");
|
t = wfindfile(path, "xlock");
|
||||||
if (t) {
|
if (t) {
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Lock Screen")),
|
WMCreatePLString(_("Lock Screen")),
|
||||||
WMCreatePLString("EXEC"),
|
WMCreatePLString("EXEC"),
|
||||||
WMCreatePLString("xlock -allowroot -usefirst -mode matrix"),
|
WMCreatePLString("xlock -allowroot -usefirst -mode matrix"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
wfree(t);
|
wfree(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit */
|
/* Exit */
|
||||||
MenuItem = WMCreatePLArray(
|
L1Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(_("Exit Window Maker")),
|
WMCreatePLString(_("Exit Window Maker")),
|
||||||
WMCreatePLString("EXIT"),
|
WMCreatePLString("EXIT"),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
WMAddToPLArray(MenuRoot, MenuItem);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
|
|
||||||
printf("%s", WMGetPropListDescription(MenuRoot, True));
|
printf("%s", WMGetPropListDescription(RMenu, True));
|
||||||
|
puts("");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void find_and_write(char *group, char **list)
|
/*
|
||||||
|
* Creates an L2Menu made of L3Menu items
|
||||||
|
* Attaches to L1Menu
|
||||||
|
* - make sure previous menus of these levels are
|
||||||
|
* attached to their parent before calling
|
||||||
|
*/
|
||||||
|
static void find_and_write(char *group, char **list, int this_is_terminals)
|
||||||
{
|
{
|
||||||
int i, argc;
|
int i, argc;
|
||||||
char *t, **argv, buf[PATH_MAX];
|
char *t, **argv, buf[PATH_MAX];
|
||||||
extern char *path;
|
|
||||||
WMPropList *SubGroup = NULL, *SubGroupItem = NULL;
|
/* or else pre-existing menus of these levels
|
||||||
|
* will badly disturb empty group detection */
|
||||||
|
L2Menu = NULL;
|
||||||
|
L3Menu = NULL;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (list[i]) {
|
while (list[i]) {
|
||||||
@@ -269,67 +305,85 @@ static void find_and_write(char *group, char **list)
|
|||||||
wtokensplit(list[i], &argv, &argc);
|
wtokensplit(list[i], &argv, &argc);
|
||||||
t = wfindfile(path, argv[0]);
|
t = wfindfile(path, argv[0]);
|
||||||
if (t) {
|
if (t) {
|
||||||
/* check whether it is to be executed in a terminal */
|
/* find a terminal to be used for cmnds that need a terminal */
|
||||||
if (strcmp("!", argv[argc - 1]) < 0)
|
if (this_is_terminals && !terminal)
|
||||||
SubGroupItem = WMCreatePLArray(
|
terminal = wstrdup(list[i]);
|
||||||
|
if (*(argv[argc-1]) != '!') {
|
||||||
|
L3Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(argv[0]),
|
WMCreatePLString(argv[0]),
|
||||||
WMCreatePLString("EXEC"),
|
WMCreatePLString("EXEC"),
|
||||||
WMCreatePLString(list[i]),
|
WMCreatePLString(list[i]),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
else {
|
} else {
|
||||||
char comm[50], *ptr;
|
char comm[PATH_MAX], *ptr;
|
||||||
|
|
||||||
strcpy(comm, list[i]);
|
strcpy(comm, list[i]);
|
||||||
/* ugly hack to delete character ! from list[i] */
|
/* delete character " !" from the command */
|
||||||
ptr = strchr(comm, '!');
|
ptr = strchr(comm, '!');
|
||||||
while (ptr >= comm && (*ptr == '!' || isspace(*ptr)))
|
while (ptr >= comm && (*ptr == '!' || isspace(*ptr)))
|
||||||
*ptr-- = '\0';
|
*ptr-- = '\0';
|
||||||
snprintf(buf, sizeof(buf), "xterm -e %s", comm);
|
snprintf(buf, sizeof(buf), "%s -e %s", terminal ? terminal : "xterm" , comm);
|
||||||
SubGroupItem = WMCreatePLArray(
|
L3Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(argv[0]),
|
WMCreatePLString(argv[0]),
|
||||||
WMCreatePLString("EXEC"),
|
WMCreatePLString("EXEC"),
|
||||||
WMCreatePLString(comm),
|
WMCreatePLString(buf),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!SubGroup)
|
if (!L2Menu)
|
||||||
SubGroup = WMCreatePLArray(WMCreatePLString(group), NULL);
|
L2Menu = WMCreatePLArray(
|
||||||
WMAddToPLArray(SubGroup, SubGroupItem);
|
WMCreatePLString(group),
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
WMAddToPLArray(L2Menu, L3Menu);
|
||||||
wfree(t);
|
wfree(t);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (SubGroup)
|
if (L2Menu)
|
||||||
WMAddToPLArray(MenuGroup, SubGroup);
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Creates an L1Menu made of L2Menu items
|
||||||
|
* - make sure previous menus of these levels are
|
||||||
|
* attached to their parent before calling
|
||||||
|
* Attaches to RMenu
|
||||||
|
*/
|
||||||
static void other_window_managers(void)
|
static void other_window_managers(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *t, buf[PATH_MAX];
|
char *t, buf[PATH_MAX];
|
||||||
WMPropList *SubGroup = NULL, *SubGroupItem = NULL;
|
|
||||||
|
/* or else pre-existing menus of these levels
|
||||||
|
* will badly disturb empty group detection */
|
||||||
|
L1Menu = NULL;
|
||||||
|
L2Menu = NULL;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (other_wm[i]) {
|
while (other_wm[i]) {
|
||||||
t = wfindfile(path, other_wm[i]);
|
t = wfindfile(path, other_wm[i]);
|
||||||
if (t) {
|
if (t) {
|
||||||
snprintf(buf, sizeof(buf), _("Start %s"), other_wm[i]);
|
snprintf(buf, sizeof(buf), _("Start %s"), other_wm[i]);
|
||||||
SubGroupItem = WMCreatePLArray(
|
L2Menu = WMCreatePLArray(
|
||||||
WMCreatePLString(buf),
|
WMCreatePLString(buf),
|
||||||
WMCreatePLString("RESTART"),
|
WMCreatePLString("RESTART"),
|
||||||
WMCreatePLString(other_wm[i]),
|
WMCreatePLString(other_wm[i]),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (!SubGroup)
|
if (!L1Menu)
|
||||||
SubGroup = WMCreatePLArray(WMCreatePLString(_("Other Window Managers")), NULL);
|
L1Menu = WMCreatePLArray(
|
||||||
WMAddToPLArray(SubGroup, SubGroupItem);
|
WMCreatePLString(_("Other Window Managers")),
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
WMAddToPLArray(L1Menu, L2Menu);
|
||||||
wfree(t);
|
wfree(t);
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (SubGroup)
|
if (L1Menu)
|
||||||
WMAddToPLArray(MenuRoot, SubGroup);
|
WMAddToPLArray(RMenu, L1Menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_help(int print_usage, int exitval)
|
void print_help(int print_usage, int exitval)
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* If the program should run from inside a terminal it has
|
* If the program should run from inside a terminal it has
|
||||||
* to finish with a space followed by '!', e.g.
|
* to end with a space followed by '!', e.g. "mutt !"
|
||||||
* "mutt !"
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *terminals[MAX_NR_APPS] = {
|
char *terminals[MAX_NR_APPS] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user