Changelog for Openbox:
1.2.0:
+ * changed the menu from an rcfile option to a command-
+ line option. use 'openbox -menu <file>' 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)
$ #RCRequiresArg
# error: '-rc' requires an argument\n
+$ #MENURequiresArg
+# error: '-menu' requires an argument\n
$ #DISPLAYRequiresArg
# error: '-display' requires an argument\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tuse display connection.\n\
-rc <string>\t\t\tuse alternate resource file.\n\
+ -menu <string>\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
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tbrug skærm tilslutning.\n\
-rc <string>\t\t\tbrug alternativ resource fil.\n\
+ -menu <string>\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
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tDisplay Verbindung.\n\
-rc <string>\t\t\talternative Konfigurationsdatei.\n\
+ -menu <string>\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
$ #RCRequiresArg
# error: '-rc' requiere un argumento
+$ #MENURequiresArg
+# error: '-menu' requiere un argumento
$ #DISPLAYRequiresArg
# error: '-display' requiere un argumento
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string> conexión de despliegue.\n\
-rc <string> archivo alternativo de recuros.\n\
+ -menu <string> archivo alternativo de menu.\n\
-version mostrar la versión y cerrar.\n\
-help mostrar este texto de ayuda y cerrar.\n\n
$ #CompileOptions
$ #RCRequiresArg
# viga: '-rc' vajab argumenti\n
+$ #MENURequiresArg
+# viga: '-menu' vajab argumenti\n
$ #DISPLAYRequiresArg
# viga: '-display' vajab argumenti\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tkasuta displei ühendust.\n\
-rc <string>\t\t\tkasuta alternatiivseid resursse.\n\
+ -menu <string>\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
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <chaîne>\t\tutilise la connexion à l'affichage.\n\
-rc <chaîne>\t\t\tutilise un autre fichier de configuration.\n\
+ -menu <chaîne>\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
$ #RCRequiresArg
# errore: '-rc' richiede un argomento\n
+$ #MENURequiresArg
+# errore: '-menu' richiede un argomento\n
$ #DISPLAYRequiresArg
# errore: '-display' richiede an argomento\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tusa connessione display.\n\
-rc <string>\t\t\tusa un file risorsa alternativo.\n\
+ -menu <string>\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
$ #RCRequiresArg
# ¥¨¥é¡¼: '-rc' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n
+$ #MENURequiresArg
+# ¥¨¥é¡¼: '-menu' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n
$ #DISPLAYRequiresArg
# ¥¨¥é¡¼: '-display' ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\t»ØÄê¥Ç¥£¥¹¥×¥ì¥¤¤ËÀܳ\n\
-rc <string>\t\t\tÂå¤ê¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ò»ÈÍÑ\n\
+ -menu <string>\t\t\tuse alternate menu file\n\
-version\t\t\t¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¡¢½ªÎ»\n\
-help\t\t\t\t¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¡¢½ªÎ»\n\n
$ #CompileOptions
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <displaynaam> gebruik aangegeven display.\n\
-rc <bestandsnaam> gebruik alternatief resource bestand.\n\
+ -menu <bestandsnaam> gebruik alternatief menu bestand.\n\
-version toon versie en stop.\n\
-help toon deze hulp tekst en stop.\n\n
$ #CompileOptions
$ #RCRequiresArg
# erro: '-rc' requer um argumento\n
+$ #MENURequiresArg
+# erro: '-menu' requer um argumento\n
$ #DISPLAYRequiresArg
# erro: '-display' requer um argumento\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tusar conexão com o display.\n\
-rc <string>\t\t\tusar arquivo alternativo de recursos.\n\
+ -menu <string>\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
$ #RCRequiresArg
# ÏÛÉÂËÁ: '-rc' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n
+$ #MENURequiresArg
+# ÏÛÉÂËÁ: '-menu' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n
$ #DISPLAYRequiresArg
# ÏÛÉÂËÁ: '-display' ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÅ ÁÒÇÕÍÅÎÔÁ\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÚÁÄÁÎÎÙÊ ÄÉÓÐÌÅÊ.\n\
-rc <string>\t\t\tÉÓÐÏÌØÚÏ×ÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ ÆÁÊÌ ÒÅÓÕÒÓÏ×.\n\
+ -menu <string>\t\t\tuse alternate menu file.\n\
-version\t\t\t×Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ É ×ÙÊÔÉ.\n\
-help\t\t\t\t×Ù×ÅÓÔÉ ÜÔÕ ÐÏÄÓËÁÚËÕ É ×ÙÊÔÉ.\n\n
$ #CompileOptions
$ #RCRequiresArg
# napaka: '-rc' zahteva argument\n
+$ #MENURequiresArg
+# napaka: '-menu' zahteva argument\n
$ #DISPLAYRequiresArg
# napaka: '-display' zahteva argument\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tuporabi prikazovalnik.\n\
-rc <string>\t\t\tuporabi nadomestno datoteko z viri.\n\
+ -menu <string>\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
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tanvänd skärmanslutning.\n\
-rc <string>\t\t\tanvänd alternativ resursfil.\n\
+ -menu <string>\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
$ #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
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <metin>\t\tekraný kullan.\n\
-rc <metin>\t\t\tbaþka bir ayarlama dosyasýný kullan.\n\
+ -menu <metin>\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
$ #RCRequiresArg
# ´íÎó: '-rc' ÐèÒª²ÎÊý\n
+$ #MENURequiresArg
+# ´íÎó: '-menu' ÐèÒª²ÎÊý\n
$ #DISPLAYRequiresArg
# ´íÎó: '-display' ÐèÒª²ÎÊý\n
$ #WarnDisplaySet
\t\t\t 1997 - 2000 Brad Hughes\n\n\
-display <string>\t\tʹÓÃÏÔʾÁ¬½Ó.\n\
-rc <string>\t\t\tʹÓÃÆäËûµÄ×ÊÔ´Îļþ.\n\
+ -menu <string>\t\t\tuse alternate menu file.\n\
-version\t\t\tÏÔʾ°æ±¾.\n\
-help\t\t\t\tÏÔʾÕâ¸ö°ïÖú.\n\n
$ #CompileOptions
} 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) {
BScreen::Restart);
rootmenu->insert(i18n->getMessage(ScreenSet, ScreenExit, "Exit"),
BScreen::Exit);
- } else {
- openbox.setMenuFilename(openbox.getMenuFilename());
}
}
}
if (! feof(submenufile)) {
- if (! parseMenuFile(submenufile, menu))
- openbox.setMenuFilename(newfile);
-
- fclose(submenufile);
+ if (!parseMenuFile(submenufile, menu))
+ openbox.addMenuTimestamp(newfile);
+ fclose(submenufile);
}
} else
perror(newfile);
menu->insert(label, stylesmenu);
rootmenuList.push_back(stylesmenu);
}
-
- openbox.setMenuFilename(stylesdir);
+ openbox.addMenuTimestamp(stylesdir);
} else {
fprintf(stderr, i18n->getMessage(ScreenSet,
ScreenSTYLESDIRErrorNotDir,
"\t\t\t 1997 - 2000 Brad Hughes\n\n"
" -display <string>\t\tuse display connection.\n"
" -rc <string>\t\t\tuse alternate resource file.\n"
+ " -menu <string>\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);
int main(int argc, char **argv) {
char *session_display = (char *) 0;
char *rc_file = (char *) 0;
+ char *menu_file = (char *) 0;
NLSInit("openbox.cat");
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
_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);
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())
::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;
for_each(menuTimestamps.begin(), menuTimestamps.end(),
PointerAssassin());
- if (resource.menu_file)
- delete [] resource.menu_file;
-
if (resource.style_file)
delete [] resource.style_file;
delete timer;
delete [] rc_file;
+ delete [] menu_file;
}
// 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);
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
}
+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;
}
-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();
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;
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;
public:
- Openbox(int, char **, char * = 0, char * = 0);
+ Openbox(int, char **, char * = 0, char * = 0, char * = 0);
virtual ~Openbox();
#ifdef HAVE_GETPID
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; }
void shutdown();
void setStyleFilename(const char *);
- void setMenuFilename(const char *);
void saveMenuSearch(Window, Basemenu *);
void saveWindowSearch(Window, OpenboxWindow *);
void saveToolbarSearch(Window, Toolbar *);