- }
- } // switch
-}
-
-
-Bool Openbox::handleSignal(int sig) {
- switch (sig) {
- case SIGHUP:
- case SIGUSR1:
- reconfigure();
- break;
-
- case SIGUSR2:
- rereadMenu();
- break;
-
- case SIGPIPE:
- case SIGSEGV:
- case SIGFPE:
- case SIGINT:
- case SIGTERM:
- shutdown();
-
- default:
- return False;
- }
-
- return True;
-}
-
-
-BScreen *Openbox::searchScreen(Window window) {
- ScreenList::iterator it;
- for (it = screenList.begin(); it != screenList.end(); ++it)
- if ((*it)->getRootWindow() == window)
- return *it;
- return (BScreen *) 0;
-}
-
-
-OpenboxWindow *Openbox::searchWindow(Window window) {
- WindowLookup::iterator it = windowSearchList.find(window);
- if (it == windowSearchList.end())
- return (OpenboxWindow *) 0;
- return it->second;
-}
-
-
-OpenboxWindow *Openbox::searchGroup(Window window, OpenboxWindow *win) {
- WindowLookup::iterator it = groupSearchList.find(window);
- if (it != groupSearchList.end())
- if (it->second->getClientWindow() != win->getClientWindow())
- return win;
- return (OpenboxWindow *) 0;
-}
-
-
-Basemenu *Openbox::searchMenu(Window window) {
- MenuLookup::iterator it = menuSearchList.find(window);
- if (it == menuSearchList.end())
- return (Basemenu *) 0;
- return it->second;
-}
-
-
-Toolbar *Openbox::searchToolbar(Window window) {
- ToolbarLookup::iterator it = toolbarSearchList.find(window);
- if (it == toolbarSearchList.end())
- return (Toolbar *) 0;
- return it->second;
-}
-
-
-#ifdef SLIT
-Slit *Openbox::searchSlit(Window window) {
- SlitLookup::iterator it = slitSearchList.find(window);
- if (it == slitSearchList.end())
- return (Slit *) 0;
- return it->second;
-}
-#endif // SLIT
-
-
-void Openbox::saveWindowSearch(Window window, OpenboxWindow *data) {
- windowSearchList.insert(WindowLookupPair(window, data));
-}
-
-
-void Openbox::saveGroupSearch(Window window, OpenboxWindow *data) {
- groupSearchList.insert(WindowLookupPair(window, data));
-}
-
-
-void Openbox::saveMenuSearch(Window window, Basemenu *data) {
- menuSearchList.insert(MenuLookupPair(window, data));
-}
-
-
-void Openbox::saveToolbarSearch(Window window, Toolbar *data) {
- toolbarSearchList.insert(ToolbarLookupPair(window, data));
-}
-
-
-#ifdef SLIT
-void Openbox::saveSlitSearch(Window window, Slit *data) {
- slitSearchList.insert(SlitLookupPair(window, data));
-}
-#endif // SLIT
-
-
-void Openbox::removeWindowSearch(Window window) {
- windowSearchList.erase(window);
-}
-
-
-void Openbox::removeGroupSearch(Window window) {
- groupSearchList.erase(window);
-}
-
-
-void Openbox::removeMenuSearch(Window window) {
- menuSearchList.erase(window);
-}
-
-
-void Openbox::removeToolbarSearch(Window window) {
- toolbarSearchList.erase(window);
-}
-
-
-#ifdef SLIT
-void Openbox::removeSlitSearch(Window window) {
- slitSearchList.erase(window);
-}
-#endif // SLIT
-
-
-void Openbox::restart(const char *prog) {
- shutdown();
-
- if (prog) {
- execlp(prog, prog, NULL);
- perror(prog);
- }
-
- // fall back in case the above execlp doesn't work
- execvp(argv[0], argv);
- execvp(basename(argv[0]), argv);
-}
-
-
-void Openbox::shutdown() {
- BaseDisplay::shutdown();
-
- std::for_each(screenList.begin(), screenList.end(),
- std::mem_fun(&BScreen::shutdown));
-
- focusWindow(0);
-
- XSync(getXDisplay(), False);
-}
-
-
-void Openbox::save() {
- config.setAutoSave(false);
-
- // save all values as they are so that the defaults will be written to the rc
- // file
-
- config.setValue("session.colorsPerChannel",
- resource.colors_per_channel);
- config.setValue("session.styleFile", resource.style_file);
- config.setValue("session.titlebarLayout", resource.titlebar_layout);
- config.setValue("session.doubleClickInterval",
- (long)resource.double_click_interval);
- config.setValue("session.autoRaiseDelay",
- ((resource.auto_raise_delay.tv_sec * 1000) +
- (resource.auto_raise_delay.tv_usec / 1000)));
- config.setValue("session.cacheLife", (long)resource.cache_life / 60000);
- config.setValue("session.cacheMax", (long)resource.cache_max);
-
- std::for_each(screenList.begin(), screenList.end(),
- std::mem_fun(&BScreen::save));
-
- config.setAutoSave(true);
- config.save();
-}
-
-void Openbox::load() {
- if (!config.load())
- config.create();
-
- std::string s;
- long l;
-
- if (config.getValue("session.colorsPerChannel", "Session.ColorsPerChannel",
- l))
- resource.colors_per_channel = (l < 2 ? 2 : (l > 6 ? 6 : l)); // >= 2, <= 6
- else
- resource.colors_per_channel = 4;
-
- if (resource.style_file)
- delete [] resource.style_file;
- if (config.getValue("session.styleFile", "Session.StyleFile", s))
- resource.style_file = bstrdup(s.c_str());
- else
- resource.style_file = bstrdup(DEFAULTSTYLE);
-
- if (resource.titlebar_layout)
- delete [] resource.titlebar_layout;
- if (config.getValue("session.titlebarLayout", "Session.TitlebarLayout", s))
- resource.titlebar_layout = bstrdup(s.c_str());
- else
- resource.titlebar_layout = bstrdup("ILMC");
-
- if (config.getValue("session.doubleClickInterval",
- "Session.DoubleClickInterval", l))
- resource.double_click_interval = l;
- else
- resource.double_click_interval = 250;
-
- if (config.getValue("session.autoRaiseDelay", "Session.AutoRaiseDelay", l))
- resource.auto_raise_delay.tv_usec = l;
- else
- resource.auto_raise_delay.tv_usec = 400;
- resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec / 1000;
- resource.auto_raise_delay.tv_usec -=
- (resource.auto_raise_delay.tv_sec * 1000);
- resource.auto_raise_delay.tv_usec *= 1000;
-
- if (config.getValue("session.cacheLife", "Session.CacheLife", l))
- resource.cache_life = l;
- else
- resource.cache_life = 51;
- resource.cache_life *= 60000;
-
- if (config.getValue("session.cacheMax", "Session.CacheMax", l))
- resource.cache_max = l;
- else
- resource.cache_max = 200;
-}
-
-
-void Openbox::reconfigure() {
- reconfigure_wait = True;
-
- if (! timer->isTiming()) timer->start();
-}
-
-
-void Openbox::real_reconfigure() {
- grab();
-
- load();
-
- for_each(menuTimestamps.begin(), menuTimestamps.end(),
- PointerAssassin());
- menuTimestamps.clear();
-
- std::for_each(screenList.begin(), screenList.end(),
- std::mem_fun(&BScreen::reconfigure));
-
- ungrab();
-}
-
-
-void Openbox::checkMenu() {
- MenuTimestampList::iterator it;
- for (it = menuTimestamps.begin(); it != menuTimestamps.end(); ++it) {
- struct stat buf;
-
- if (stat((*it)->filename, &buf) || (*it)->timestamp != buf.st_ctime) {
- rereadMenu();
- return;
- }
- }