- case 333: // nop
- menu->insert(label);
-
- break;
-
- case 421: // exec
- if ((! *label) && (! *command)) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEXECError,
- "BScreen::parseMenuFile: [exec] error, "
- "no menu label and/or command defined\n"));
- continue;
- }
-
- menu->insert(label, BScreen::Execute, command);
-
- break;
-
- case 442: // exit
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEXITError,
- "BScreen::parseMenuFile: [exit] error, "
- "no menu label defined\n"));
- continue;
- }
-
- menu->insert(label, BScreen::Exit);
-
- break;
-
- case 561: // style
- {
- if ((! *label) || (! *command)) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenSTYLEError,
- "BScreen::parseMenuFile: [style] error, "
- "no menu label and/or filename defined\n"));
- continue;
- }
-
- char style[MAXPATHLEN];
-
- // perform shell style ~ home directory expansion
- char *homedir = 0;
- int homedir_len = 0;
- if (*command == '~' && *(command + 1) == '/') {
- homedir = getenv("HOME");
- homedir_len = strlen(homedir);
- }
-
- if (homedir && homedir_len != 0) {
- strncpy(style, homedir, homedir_len);
-
- strncpy(style + homedir_len, command + 1,
- command_length - 1);
- *(style + command_length + homedir_len - 1) = '\0';
- } else {
- strncpy(style, command, command_length);
- *(style + command_length) = '\0';
- }
-
- menu->insert(label, BScreen::SetStyle, style);
- }
-
- break;
-
- case 630: // config
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenCONFIGError,
- "BScreen::parseMenufile: [config] error, "
- "no label defined"));
- continue;
- }
-
- menu->insert(label, configmenu);
-
- break;
-
- case 740: // include
- {
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenINCLUDEError,
- "BScreen::parseMenuFile: [include] error, "
- "no filename defined\n"));
- continue;
- }
-
- char newfile[MAXPATHLEN];
-
- // perform shell style ~ home directory expansion
- char *homedir = 0;
- int homedir_len = 0;
- if (*label == '~' && *(label + 1) == '/') {
- homedir = getenv("HOME");
- homedir_len = strlen(homedir);
- }
-
- if (homedir && homedir_len != 0) {
- strncpy(newfile, homedir, homedir_len);
-
- strncpy(newfile + homedir_len, label + 1,
- label_length - 1);
- *(newfile + label_length + homedir_len - 1) = '\0';
- } else {
- strncpy(newfile, label, label_length);
- *(newfile + label_length) = '\0';
- }
-
- if (newfile) {
- FILE *submenufile = fopen(newfile, "r");
-
- if (submenufile) {
- struct stat buf;
- if (fstat(fileno(submenufile), &buf) ||
- (! S_ISREG(buf.st_mode))) {
- fprintf(stderr,
- i18n->getMessage(ScreenSet, ScreenINCLUDEErrorReg,
- "BScreen::parseMenuFile: [include] error: "
- "'%s' is not a regular file\n"), newfile);
- break;
- }
-
- if (! feof(submenufile)) {
- if (! parseMenuFile(submenufile, menu))
- openbox.saveMenuFilename(newfile);
-
- fclose(submenufile);
- }
- } else
- perror(newfile);
- }
- }
-
- break;
-
- case 767: // submenu
- {
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenSUBMENUError,
- "BScreen::parseMenuFile: [submenu] error, "
- "no menu label defined\n"));
- continue;
- }
-
- Rootmenu *submenu = new Rootmenu(*this);
-
- if (*command)
- submenu->setLabel(command);
- else
- submenu->setLabel(label);
-
- parseMenuFile(file, submenu);
- submenu->update();
- menu->insert(label, submenu);
- rootmenuList->insert(submenu);
- }
-
- break;
-
- case 773: // restart
- {
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenRESTARTError,
- "BScreen::parseMenuFile: [restart] error, "
- "no menu label defined\n"));
- continue;
- }
-
- if (*command)
- menu->insert(label, BScreen::RestartOther, command);
- else
- menu->insert(label, BScreen::Restart);
- }
-
- break;
-
- case 845: // reconfig
- {
- if (! *label) {
- fprintf(stderr, i18n->getMessage(ScreenSet, ScreenRECONFIGError,
- "BScreen::parseMenuFile: [reconfig] error, "
- "no menu label defined\n"));
- continue;
- }
-
- menu->insert(label, BScreen::Reconfigure);
- }
-
- break;
-
- case 995: // stylesdir
- case 1113: // stylesmenu
- {
- Bool newmenu = ((key == 1113) ? True : False);
-
- if ((! *label) || ((! *command) && newmenu)) {
- fprintf(stderr,
- i18n->getMessage(ScreenSet, ScreenSTYLESDIRError,
- "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
- " error, no directory defined\n"));
- continue;
- }