From a3a23c28f0fa4ed8b42ccde4a4b99aec60583df5 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 15 May 2002 22:23:35 +0000 Subject: [PATCH] moved menu from a rc file option to a command line option --- CHANGELOG | 8 ++++ nls/C/main.m | 3 ++ nls/da_DK/main.m | 3 ++ nls/de_DE/main.m | 3 ++ nls/es_ES/main.m | 3 ++ nls/et_EE/main.m | 3 ++ nls/fr_FR/main.m | 3 ++ nls/it_IT/main.m | 3 ++ nls/ja_JP/main.m | 3 ++ nls/nl_NL/main.m | 3 ++ nls/pt_BR/main.m | 3 ++ nls/ru_RU/main.m | 3 ++ nls/sl_SI/main.m | 3 ++ nls/sv_SE/main.m | 3 ++ nls/tr_TR/main.m | 3 ++ nls/zh_CN/main.m | 3 ++ src/Screen.cc | 115 +++++++++++++++++++++++++---------------------- src/main.cc | 20 +++++++-- src/openbox.cc | 95 +++++++++++++++++++-------------------- src/openbox.h | 10 ++--- 20 files changed, 184 insertions(+), 109 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d3513c79..a192aca4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,14 @@ Changelog for Openbox: 1.2.0: + * changed the menu from an rcfile option to a command- + line option. use 'openbox -menu ' to select an + alternate menu. The default menu used is + ~/.openbox/menu. If the default, or the file you + specify does not exist, the global menu is tried. + And if the global menu also does not exist, a + simple, internal menu is used instead. (Ben Jansens) + * new version of bsetroot ported from blackbox cvs with intent to support Eterm/Esetroot. (Sean Perry) diff --git a/nls/C/main.m b/nls/C/main.m index e7d9f157..9174d9da 100644 --- a/nls/C/main.m +++ b/nls/C/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # error: '-rc' requires an argument\n +$ #MENURequiresArg +# error: '-menu' requires an argument\n $ #DISPLAYRequiresArg # error: '-display' requires an argument\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tuse display connection.\n\ -rc \t\t\tuse alternate resource file.\n\ + -menu \t\t\tuse alternate menu file.\n\ -version\t\t\tdisplay version and exit.\n\ -help\t\t\t\tdisplay this help text and exit.\n\n $ #CompileOptions diff --git a/nls/da_DK/main.m b/nls/da_DK/main.m index 84926a6d..3fe77d46 100644 --- a/nls/da_DK/main.m +++ b/nls/da_DK/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # fejl: '-rc' kræver et argument\n +$ #MENURequiresArg +# fejl: '-menu' kræver et argument\n $ #DISPLAYRequiresArg # fjel: '-display' kræver et argument\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tbrug skærm tilslutning.\n\ -rc \t\t\tbrug alternativ resource fil.\n\ + -menu \t\t\tbrug alternativ menu fil.\n\ -version\t\t\tvis versionsnummer og afslut.\n\ -help\t\t\t\tvis denne hjælp og afslut.\n\n $ #CompileOptions diff --git a/nls/de_DE/main.m b/nls/de_DE/main.m index d20d1fde..c8c13fe0 100644 --- a/nls/de_DE/main.m +++ b/nls/de_DE/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # Fehler: '-rc' benötigt einen Parameter\n +$ #MENURequiresArg +# Fehler: '-menu' benötigt einen Parameter\n $ #DISPLAYRequiresArg # Fehler: '-display' benötigt einen Parameter\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tDisplay Verbindung.\n\ -rc \t\t\talternative Konfigurationsdatei.\n\ + -menu \t\t\talternative menu.\n\ -version\t\t\tzeige Versionsnummer und Beendung.\n\ -help\t\t\t\tzeige diesen Hilfstext und Beendung.\n\n $ #CompileOptions diff --git a/nls/es_ES/main.m b/nls/es_ES/main.m index d80cf938..5640740e 100644 --- a/nls/es_ES/main.m +++ b/nls/es_ES/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # error: '-rc' requiere un argumento +$ #MENURequiresArg +# error: '-menu' requiere un argumento $ #DISPLAYRequiresArg # error: '-display' requiere un argumento $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display conexión de despliegue.\n\ -rc archivo alternativo de recuros.\n\ + -menu archivo alternativo de menu.\n\ -version mostrar la versión y cerrar.\n\ -help mostrar este texto de ayuda y cerrar.\n\n $ #CompileOptions diff --git a/nls/et_EE/main.m b/nls/et_EE/main.m index 984b5565..3a3d0d99 100644 --- a/nls/et_EE/main.m +++ b/nls/et_EE/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # viga: '-rc' vajab argumenti\n +$ #MENURequiresArg +# viga: '-menu' vajab argumenti\n $ #DISPLAYRequiresArg # viga: '-display' vajab argumenti\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tkasuta displei ühendust.\n\ -rc \t\t\tkasuta alternatiivseid resursse.\n\ + -menu \t\t\tkasuta alternatiivseid menu.\n\ -version\t\t\tnäita versiooninumber ja välju.\n\ -help\t\t\t\tnäita seda abiteksti ja välju.\n\n $ #CompileOptions diff --git a/nls/fr_FR/main.m b/nls/fr_FR/main.m index 5963b7c8..da0a96a2 100644 --- a/nls/fr_FR/main.m +++ b/nls/fr_FR/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # Erreur: '-rc' nécessite un argument\n +$ #MENURequiresArg +# Erreur: '-menu' nécessite un argument\n $ #DISPLAYRequiresArg # Erreur: '-display' nécessite un argument\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tutilise la connexion à l'affichage.\n\ -rc \t\t\tutilise un autre fichier de configuration.\n\ + -menu \t\t\tutilise un autre fichier de menu.\n\ -version\t\t\taffiche la version et quitte.\n\ -help\t\t\t\taffiche ce texte d'aide et quitte.\n\n $ #CompileOptions diff --git a/nls/it_IT/main.m b/nls/it_IT/main.m index 0d8507de..386c5da1 100644 --- a/nls/it_IT/main.m +++ b/nls/it_IT/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # errore: '-rc' richiede un argomento\n +$ #MENURequiresArg +# errore: '-menu' richiede un argomento\n $ #DISPLAYRequiresArg # errore: '-display' richiede an argomento\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tusa connessione display.\n\ -rc \t\t\tusa un file risorsa alternativo.\n\ + -menu \t\t\tusa un file menu alternativo.\n\ -version\t\t\tmostra la versione e esci.\n\ -help\t\t\t\tmostra questo aiuto e esci.\n\n $ #CompileOptions diff --git a/nls/ja_JP/main.m b/nls/ja_JP/main.m index 5aa8b23d..831ab076 100644 --- a/nls/ja_JP/main.m +++ b/nls/ja_JP/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # ¥¨¥é¡¼: '-rc' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n +$ #MENURequiresArg +# ¥¨¥é¡¼: '-menu' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n $ #DISPLAYRequiresArg # ¥¨¥é¡¼: '-display' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\t»ØÄê¥Ç¥£¥¹¥×¥ì¥¤¤ËÀܳ\n\ -rc \t\t\tÂå¤ê¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò»ÈÍÑ\n\ + -menu \t\t\tuse alternate menu file\n\ -version\t\t\t¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¡¢½ªÎ»\n\ -help\t\t\t\t¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¡¢½ªÎ»\n\n $ #CompileOptions diff --git a/nls/nl_NL/main.m b/nls/nl_NL/main.m index 8cab5381..8b5bc568 100644 --- a/nls/nl_NL/main.m +++ b/nls/nl_NL/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # fout: '-rc' heeft een argument nodig (bestandsnaam)\n +$ #MENURequiresArg +# fout: '-menu' heeft een argument nodig (bestandsnaam)\n $ #DISPLAYRequiresArg # fout: '-display' heeft een argument nodig (displaynaam)\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display gebruik aangegeven display.\n\ -rc gebruik alternatief resource bestand.\n\ + -menu gebruik alternatief menu bestand.\n\ -version toon versie en stop.\n\ -help toon deze hulp tekst en stop.\n\n $ #CompileOptions diff --git a/nls/pt_BR/main.m b/nls/pt_BR/main.m index a01d01aa..9aa8898b 100644 --- a/nls/pt_BR/main.m +++ b/nls/pt_BR/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # erro: '-rc' requer um argumento\n +$ #MENURequiresArg +# erro: '-menu' requer um argumento\n $ #DISPLAYRequiresArg # erro: '-display' requer um argumento\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tusar conexão com o display.\n\ -rc \t\t\tusar arquivo alternativo de recursos.\n\ + -menu \t\t\tusar arquivo alternativo de menu.\n\ -version\t\t\tmostrar versao e sair.\n\ -help\t\t\t\tmostrar esta ajuda e sair.\n\n $ #CompileOptions diff --git a/nls/ru_RU/main.m b/nls/ru_RU/main.m index a91c112e..b531fc34 100644 --- a/nls/ru_RU/main.m +++ b/nls/ru_RU/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # ÏÛÉÂËÁ: '-rc' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n +$ #MENURequiresArg +# ÏÛÉÂËÁ: '-menu' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n $ #DISPLAYRequiresArg # ÏÛÉÂËÁ: '-display' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tÉÓÐÏÌØÚÏ×ÁÔØ ÚÁÄÁÎÎÙÊ ÄÉÓÐÌÅÊ.\n\ -rc \t\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ ÆÁÊÌ ÒÅÓÕÒÓÏ×.\n\ + -menu \t\t\tuse alternate menu file.\n\ -version\t\t\t×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n\ -help\t\t\t\t×Ù×ÅÓÔÉ ÜÔÕ ÐÏÄÓËÁÚËÕ É ×ÙÊÔÉ.\n\n $ #CompileOptions diff --git a/nls/sl_SI/main.m b/nls/sl_SI/main.m index c6d04725..273bcefa 100644 --- a/nls/sl_SI/main.m +++ b/nls/sl_SI/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # napaka: '-rc' zahteva argument\n +$ #MENURequiresArg +# napaka: '-menu' zahteva argument\n $ #DISPLAYRequiresArg # napaka: '-display' zahteva argument\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tuporabi prikazovalnik.\n\ -rc \t\t\tuporabi nadomestno datoteko z viri.\n\ + -menu \t\t\tuse alternate menu file.\n\ -version\t\t\tprika¾i oznako razlièice in konèaj.\n\ -help\t\t\t\prika¾i ta navodila in konèaj.\n\n $ #CompileOptions diff --git a/nls/sv_SE/main.m b/nls/sv_SE/main.m index 6cfcfb5f..f229c525 100644 --- a/nls/sv_SE/main.m +++ b/nls/sv_SE/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # fel: '-rc' kräver ett argument\n +$ #MENURequiresArg +# fel: '-menu' kräver ett argument\n $ #DISPLAYRequiresArg # fel: '-display' kräver ett argument\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tanvänd skärmanslutning.\n\ -rc \t\t\tanvänd alternativ resursfil.\n\ + -menu \t\t\tanvänd alternativ menu.\n\ -version\t\t\tvisa version och avsluta.\n\ -help\t\t\t\tvisa denna hjälptext och avsluta.\n\n $ #CompileOptions diff --git a/nls/tr_TR/main.m b/nls/tr_TR/main.m index d8f40ae2..0c582a97 100644 --- a/nls/tr_TR/main.m +++ b/nls/tr_TR/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # hata : '-rc' bir argüman bekler\n +$ #MENURequiresArg +# hata : '-menu' bir argüman bekler\n $ #DISPLAYRequiresArg # hata : '-display' bir argüman bekler\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tekraný kullan.\n\ -rc \t\t\tbaþka bir ayarlama dosyasýný kullan.\n\ + -menu \t\t\tuse alternate menu file.\n\ -version\t\t\tnesil bilgisini gösterir ve çýkar.\n\ -help\t\t\t\tbu yardým iletisini gösterir ve çýkar.\n\n $ #CompileOptions diff --git a/nls/zh_CN/main.m b/nls/zh_CN/main.m index 15a4b9e7..890338bc 100644 --- a/nls/zh_CN/main.m +++ b/nls/zh_CN/main.m @@ -2,6 +2,8 @@ $set 14 #main $ #RCRequiresArg # ´íÎó: '-rc' ÐèÒª²ÎÊý\n +$ #MENURequiresArg +# ´íÎó: '-menu' ÐèÒª²ÎÊý\n $ #DISPLAYRequiresArg # ´íÎó: '-display' ÐèÒª²ÎÊý\n $ #WarnDisplaySet @@ -12,6 +14,7 @@ $ #Usage \t\t\t 1997 - 2000 Brad Hughes\n\n\ -display \t\tʹÓÃÏÔʾÁ¬½Ó.\n\ -rc \t\t\tʹÓÃÆäËûµÄ×ÊÔ´Îļþ.\n\ + -menu \t\t\tuse alternate menu file.\n\ -version\t\t\tÏÔʾ°æ±¾.\n\ -help\t\t\t\tÏÔʾÕâ¸ö°ïÖú.\n\n $ #CompileOptions diff --git a/src/Screen.cc b/src/Screen.cc index bc1b9e65..7338f118 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -2265,59 +2265,72 @@ void BScreen::InitMenu(void) { } else { rootmenu = new Rootmenu(*this); } - Bool defaultMenu = True; + bool defaultMenu = true; - if (openbox.getMenuFilename()) { - FILE *menu_file = fopen(openbox.getMenuFilename(), "r"); + FILE *menu_file; + const char *menu_filename = openbox.getMenuFilename(); - if (!menu_file) { - perror(openbox.getMenuFilename()); + if (!(menu_file = fopen(menu_filename, "r"))) { + perror(menu_filename); + menu_filename = (char *) 0; + } + if (menu_filename == (char *) 0) { + // opening the menu file failed, try the DEFAULTMENU + menu_filename = DEFAULTMENU; + if (!(menu_file = fopen(menu_filename, "r"))) { + perror(menu_filename); + menu_filename = (char *) 0; + } + } + + if (menu_filename) { + if (feof(menu_file)) { + fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEmptyMenuFile, + "%s: Empty menu file"), menu_filename); + menu_filename = (char *) 0; } else { - if (feof(menu_file)) { - fprintf(stderr, i18n->getMessage(ScreenSet, ScreenEmptyMenuFile, - "%s: Empty menu file"), - openbox.getMenuFilename()); - } else { - char line[1024], label[1024]; - memset(line, 0, 1024); - memset(label, 0, 1024); - - while (fgets(line, 1024, menu_file) && ! feof(menu_file)) { - if (line[0] != '#') { - int i, key = 0, index = -1, len = strlen(line); - - key = 0; - for (i = 0; i < len; i++) { - if (line[i] == '[') index = 0; - else if (line[i] == ']') break; - else if (line[i] != ' ') - if (index++ >= 0) - key += tolower(line[i]); - } + // successsfully opened a menu file + char line[1024], label[1024]; + memset(line, 0, 1024); + memset(label, 0, 1024); + + while (fgets(line, 1024, menu_file) && ! feof(menu_file)) { + if (line[0] != '#') { + int i, key = 0, index = -1, len = strlen(line); + + key = 0; + for (i = 0; i < len; i++) { + if (line[i] == '[') index = 0; + else if (line[i] == ']') break; + else if (line[i] != ' ') + if (index++ >= 0) + key += tolower(line[i]); + } - if (key == 517) { - index = -1; - for (i = index; i < len; i++) { - if (line[i] == '(') index = 0; - else if (line[i] == ')') break; - else if (index++ >= 0) { - if (line[i] == '\\' && i < len - 1) i++; - label[index - 1] = line[i]; - } - } + if (key == 517) { + index = -1; + for (i = index; i < len; i++) { + if (line[i] == '(') index = 0; + else if (line[i] == ')') break; + else if (index++ >= 0) { + if (line[i] == '\\' && i < len - 1) i++; + label[index - 1] = line[i]; + } + } - if (index == -1) index = 0; - label[index] = '\0'; + if (index == -1) index = 0; + label[index] = '\0'; - rootmenu->setLabel(label); - defaultMenu = parseMenuFile(menu_file, rootmenu); - break; - } - } - } + rootmenu->setLabel(label); + defaultMenu = parseMenuFile(menu_file, rootmenu); + if (!defaultMenu) + openbox.addMenuTimestamp(menu_filename); + break; + } + } } - fclose(menu_file); } + fclose(menu_file); } if (defaultMenu) { @@ -2329,8 +2342,6 @@ void BScreen::InitMenu(void) { BScreen::Restart); rootmenu->insert(i18n->getMessage(ScreenSet, ScreenExit, "Exit"), BScreen::Exit); - } else { - openbox.setMenuFilename(openbox.getMenuFilename()); } } @@ -2530,10 +2541,9 @@ Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) { } if (! feof(submenufile)) { - if (! parseMenuFile(submenufile, menu)) - openbox.setMenuFilename(newfile); - - fclose(submenufile); + if (!parseMenuFile(submenufile, menu)) + openbox.addMenuTimestamp(newfile); + fclose(submenufile); } } else perror(newfile); @@ -2689,8 +2699,7 @@ Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) { menu->insert(label, stylesmenu); rootmenuList.push_back(stylesmenu); } - - openbox.setMenuFilename(stylesdir); + openbox.addMenuTimestamp(stylesdir); } else { fprintf(stderr, i18n->getMessage(ScreenSet, ScreenSTYLESDIRErrorNotDir, diff --git a/src/main.cc b/src/main.cc index 0b2360ab..84e0d90e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -68,6 +68,7 @@ static void showHelp(int exitval) { "\t\t\t 1997 - 2000 Brad Hughes\n\n" " -display \t\tuse display connection.\n" " -rc \t\t\tuse alternate resource file.\n" + " -menu \t\t\tuse alternate menu file.\n" " -version\t\t\tdisplay version and exit.\n" " -help\t\t\t\tdisplay this help text and exit.\n\n"), __openbox_version); @@ -125,6 +126,7 @@ static void showHelp(int exitval) { int main(int argc, char **argv) { char *session_display = (char *) 0; char *rc_file = (char *) 0; + char *menu_file = (char *) 0; NLSInit("openbox.cat"); @@ -134,13 +136,25 @@ int main(int argc, char **argv) { if ((++i) >= argc) { fprintf(stderr, - i18n->getMessage(mainSet, mainRCRequiresArg, - "error: '-rc' requires and argument\n")); + i18n->getMessage(mainSet, mainRCRequiresArg, + "error: '-rc' requires and argument\n")); ::exit(1); } rc_file = argv[i]; + } else if (! strcmp(argv[i], "-menu")) { + // look for alternative menu file to use + + if ((++i) >= argc) { + fprintf(stderr, + i18n->getMessage(mainSet, mainMENURequiresArg, + "error: '-menu' requires and argument\n")); + + ::exit(1); + } + + menu_file = argv[i]; } else if (! strcmp(argv[i], "-display")) { // check for -display option... to run on a display other than the one // set by the environment variable DISPLAY @@ -182,7 +196,7 @@ int main(int argc, char **argv) { _chdir2(getenv("X11ROOT")); #endif // __EMX__ - Openbox openbox(argc, argv, session_display, rc_file); + Openbox openbox(argc, argv, session_display, rc_file, menu_file); openbox.eventLoop(); return(0); diff --git a/src/openbox.cc b/src/openbox.cc index 3a7fb6b9..4b5495bb 100644 --- a/src/openbox.cc +++ b/src/openbox.cc @@ -151,8 +151,8 @@ static Bool queueScanner(Display *, XEvent *e, char *args) { Openbox *openbox; -Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc) - : BaseDisplay(m_argv[0], dpy_name) { +Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc, + char *menu) : BaseDisplay(m_argv[0], dpy_name) { grab(); if (! XSupportsLocale()) @@ -164,25 +164,35 @@ Openbox::Openbox(int m_argc, char **m_argv, char *dpy_name, char *rc) ::openbox = this; argc = m_argc; argv = m_argv; - if (rc == NULL) { + if (rc == NULL || menu == NULL) { char *homedir = getenv("HOME"); - - rc_file = new char[strlen(homedir) + strlen("/.openbox/rc") + 1]; - sprintf(rc_file, "%s/.openbox", homedir); - + char *configdir = new char[strlen(homedir) + strlen("/.openbox") + 1]; + sprintf(configdir, "%s/.openbox", homedir); // try to make sure the ~/.openbox directory exists - mkdir(rc_file, S_IREAD | S_IWRITE | S_IEXEC | S_IRGRP | S_IWGRP | S_IXGRP | + mkdir(configdir, S_IREAD | S_IWRITE | S_IEXEC | + S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH); - sprintf(rc_file, "%s/.openbox/rc", homedir); - } else { - rc_file = bstrdup(rc); + + if (rc == NULL) { + rc_file = new char[strlen(configdir) + strlen("/rc") + 1]; + sprintf(rc_file, "%s/rc", configdir); + } else + rc_file = bstrdup(rc); + + if (menu == NULL) { + menu_file = new char[strlen(configdir) + strlen("/menu") + 1]; + sprintf(menu_file, "%s/menu", configdir); + } else + menu_file = bstrdup(menu); + + delete [] configdir; } config.setFile(rc_file); - + no_focus = False; - resource.menu_file = resource.style_file = NULL; + resource.style_file = NULL; resource.titlebar_layout = NULL; resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec = 0; @@ -240,9 +250,6 @@ Openbox::~Openbox() { for_each(menuTimestamps.begin(), menuTimestamps.end(), PointerAssassin()); - if (resource.menu_file) - delete [] resource.menu_file; - if (resource.style_file) delete [] resource.style_file; @@ -252,6 +259,7 @@ Openbox::~Openbox() { delete timer; delete [] rc_file; + delete [] menu_file; } @@ -883,7 +891,6 @@ void Openbox::save() { // save all values as they are so that the defaults will be written to the rc // file - config.setValue("session.menuFile", getMenuFilename()); config.setValue("session.colorsPerChannel", resource.colors_per_channel); config.setValue("session.styleFile", resource.style_file); @@ -910,13 +917,6 @@ void Openbox::load() { std::string s; long l; - if (resource.menu_file) - delete [] resource.menu_file; - if (config.getValue("session.menuFile", "Session.MenuFile", s)) - resource.menu_file = bstrdup(s.c_str()); - else - resource.menu_file = bstrdup(DEFAULTMENU); - if (config.getValue("session.colorsPerChannel", "Session.ColorsPerChannel", l)) resource.colors_per_channel = (l < 2 ? 2 : (l > 6 ? 6 : l)); // >= 2, <= 6 @@ -1001,6 +1001,29 @@ void Openbox::checkMenu() { } +void Openbox::addMenuTimestamp(const char *filename) { + bool found = false; + + MenuTimestampList::iterator it; + for (it = menuTimestamps.begin(); it != menuTimestamps.end(); ++it) + if (! strcmp((*it)->filename, filename)) { + found = true; + break; + } + if (!found) { + struct stat buf; + + if (! stat(filename, &buf)) { + MenuTimestamp *ts = new MenuTimestamp; + + ts->filename = bstrdup(filename); + ts->timestamp = buf.st_ctime; + + menuTimestamps.push_back(ts); + } + } +} + void Openbox::rereadMenu() { reread_menu_wait = True; @@ -1027,30 +1050,6 @@ void Openbox::setStyleFilename(const char *filename) { } -void Openbox::setMenuFilename(const char *filename) { - bool found = false; - - MenuTimestampList::iterator it; - for (it = menuTimestamps.begin(); it != menuTimestamps.end(); ++it) - if (! strcmp((*it)->filename, filename)) { - found = true; - break; - } - if (!found) { - struct stat buf; - - if (! stat(filename, &buf)) { - MenuTimestamp *ts = new MenuTimestamp; - - ts->filename = bstrdup(filename); - ts->timestamp = buf.st_ctime; - - menuTimestamps.push_back(ts); - } - } -} - - void Openbox::timeout() { if (reconfigure_wait) real_reconfigure(); diff --git a/src/openbox.h b/src/openbox.h index 61d5fdb2..a98b2f14 100644 --- a/src/openbox.h +++ b/src/openbox.h @@ -87,7 +87,7 @@ private: struct resource { Time double_click_interval; - char *menu_file, *style_file; + char *style_file; char *titlebar_layout; int colors_per_channel; timeval auto_raise_delay; @@ -129,7 +129,7 @@ private: Bool no_focus, reconfigure_wait, reread_menu_wait; Time last_time; Window masked; - char *rc_file, **argv; + char *menu_file, *rc_file, **argv; int argc; Resource config; @@ -144,7 +144,7 @@ protected: public: - Openbox(int, char **, char * = 0, char * = 0); + Openbox(int, char **, char * = 0, char * = 0, char * = 0); virtual ~Openbox(); #ifdef HAVE_GETPID @@ -173,7 +173,8 @@ public: inline const char *getStyleFilename() const { return resource.style_file; } inline const char *getMenuFilename() const - { return resource.menu_file; } + { return menu_file; } + void addMenuTimestamp(const char *filename); inline const int &getColorsPerChannel() const { return resource.colors_per_channel; } @@ -197,7 +198,6 @@ public: void shutdown(); void setStyleFilename(const char *); - void setMenuFilename(const char *); void saveMenuSearch(Window, Basemenu *); void saveWindowSearch(Window, OpenboxWindow *); void saveToolbarSearch(Window, Toolbar *); -- 2.39.2