- shutdown();
-
- default:
- return False;
- }
-
- return True;
-}
-
-
-BScreen *Openbox::searchScreen(Window window) {
- LinkedListIterator<BScreen> it(screenList);
-
- for (BScreen *curr = it.current(); curr; it++, curr = it.current()) {
- if (curr->getRootWindow() == window) {
- return curr;
- }
- }
-
- return (BScreen *) 0;
-}
-
-
-OpenboxWindow *Openbox::searchWindow(Window window) {
- LinkedListIterator<WindowSearch> it(windowSearchList);
-
- for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- return tmp->getData();
- }
- }
-
- return (OpenboxWindow *) 0;
-}
-
-
-OpenboxWindow *Openbox::searchGroup(Window window, OpenboxWindow *win) {
- OpenboxWindow *w = (OpenboxWindow *) 0;
- LinkedListIterator<WindowSearch> it(groupSearchList);
-
- for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- w = tmp->getData();
- if (w->getClientWindow() != win->getClientWindow())
- return win;
- }
- }
-
- return (OpenboxWindow *) 0;
-}
-
-
-Basemenu *Openbox::searchMenu(Window window) {
- LinkedListIterator<MenuSearch> it(menuSearchList);
-
- for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window)
- return tmp->getData();
- }
-
- return (Basemenu *) 0;
-}
-
-
-Toolbar *Openbox::searchToolbar(Window window) {
- LinkedListIterator<ToolbarSearch> it(toolbarSearchList);
-
- for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window)
- return tmp->getData();
- }
-
- return (Toolbar *) 0;
-}
-
-
-#ifdef SLIT
-Slit *Openbox::searchSlit(Window window) {
- LinkedListIterator<SlitSearch> it(slitSearchList);
-
- for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window)
- return tmp->getData();
- }
-
- return (Slit *) 0;
-}
-#endif // SLIT
-
-
-void Openbox::saveWindowSearch(Window window, OpenboxWindow *data) {
- windowSearchList->insert(new WindowSearch(window, data));
-}
-
-
-void Openbox::saveGroupSearch(Window window, OpenboxWindow *data) {
- groupSearchList->insert(new WindowSearch(window, data));
-}
-
-
-void Openbox::saveMenuSearch(Window window, Basemenu *data) {
- menuSearchList->insert(new MenuSearch(window, data));
-}
-
-
-void Openbox::saveToolbarSearch(Window window, Toolbar *data) {
- toolbarSearchList->insert(new ToolbarSearch(window, data));
-}
-
-
-#ifdef SLIT
-void Openbox::saveSlitSearch(Window window, Slit *data) {
- slitSearchList->insert(new SlitSearch(window, data));
-}
-#endif // SLIT
-
-
-void Openbox::removeWindowSearch(Window window) {
- LinkedListIterator<WindowSearch> it(windowSearchList);
- for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- windowSearchList->remove(tmp);
- delete tmp;
- break;
- }
- }
-}
-
-
-void Openbox::removeGroupSearch(Window window) {
- LinkedListIterator<WindowSearch> it(groupSearchList);
- for (WindowSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- groupSearchList->remove(tmp);
- delete tmp;
- break;
- }
- }
-}
-
-
-void Openbox::removeMenuSearch(Window window) {
- LinkedListIterator<MenuSearch> it(menuSearchList);
- for (MenuSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- menuSearchList->remove(tmp);
- delete tmp;
- break;
- }
- }
-}
-
-
-void Openbox::removeToolbarSearch(Window window) {
- LinkedListIterator<ToolbarSearch> it(toolbarSearchList);
- for (ToolbarSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- toolbarSearchList->remove(tmp);
- delete tmp;
- break;
- }
- }
-}
-
-
-#ifdef SLIT
-void Openbox::removeSlitSearch(Window window) {
- LinkedListIterator<SlitSearch> it(slitSearchList);
- for (SlitSearch *tmp = it.current(); tmp; it++, tmp = it.current()) {
- if (tmp->getWindow() == window) {
- slitSearchList->remove(tmp);
- delete tmp;
- break;
- }
- }
-}
-#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(void) {
- BaseDisplay::shutdown();
-
- XSetInputFocus(getXDisplay(), PointerRoot, None, CurrentTime);
-
- LinkedListIterator<BScreen> it(screenList);
- for (BScreen *s = it.current(); s; it++, s = it.current())
- s->shutdown();
-
- XSync(getXDisplay(), False);
-
- save_rc();
-}
-
-
-void Openbox::save_rc(void) {
- config.setAutoSave(false);
-
- config.setValue("session.menuFile", getMenuFilename());
- config.setValue("session.colorsPerChannel",
- resource.colors_per_channel);
- 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);
-
- LinkedListIterator<BScreen> it(screenList);
- for (BScreen *screen = it.current(); screen; it++, screen = it.current()) {
-// ScreenList::iterator it = screenList.begin();
-// for (; it != screenList.end(); ++it) {
-// BScreen *screen = *it;
- char rc_string[1024];
- const int screen_number = screen->getScreenNumber();
-
- char *placement = (char *) 0;
-
- switch (screen->getSlitPlacement()) {
- case Slit::TopLeft: placement = "TopLeft"; break;
- case Slit::CenterLeft: placement = "CenterLeft"; break;
- case Slit::BottomLeft: placement = "BottomLeft"; break;
- case Slit::TopCenter: placement = "TopCenter"; break;
- case Slit::BottomCenter: placement = "BottomCenter"; break;
- case Slit::TopRight: placement = "TopRight"; break;
- case Slit::BottomRight: placement = "BottomRight"; break;
- case Slit::CenterRight: default: placement = "CenterRight"; break;
- }
- sprintf(rc_string, "session.screen%d.slit.placement", screen_number);
- config.setValue(rc_string, placement);
-
- sprintf(rc_string, "session.screen%d.slit.direction", screen_number);
- config.setValue(rc_string,
- screen->getSlitDirection() == Slit::Horizontal ?
- "Horizontal" : "Vertical");
-
- sprintf(rc_string, "session.screen%d.slit.onTop", screen_number);
- config.setValue(rc_string, screen->getSlit()->isOnTop() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.slit.autoHide", screen_number);
- config.setValue(rc_string, screen->getSlit()->doAutoHide() ?
- "True" : "False");
-
- config.setValue("session.opaqueMove",
- (screen->doOpaqueMove()) ? "True" : "False");
- config.setValue("session.imageDither",
- (screen->getImageControl()->doDither()) ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.fullMaximization", screen_number);
- config.setValue(rc_string, screen->doFullMax() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.focusNewWindows", screen_number);
- config.setValue(rc_string, screen->doFocusNew() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.focusLastWindow", screen_number);
- config.setValue(rc_string, screen->doFocusLast() ? "True" : "False");
-
- sprintf(rc_string, "session.screen%d.rowPlacementDirection", screen_number);
- config.setValue(rc_string,
- screen->getRowPlacementDirection() == BScreen::LeftRight ?
- "LeftToRight" : "RightToLeft");
-
- sprintf(rc_string, "session.screen%d.colPlacementDirection", screen_number);
- config.setValue(rc_string,
- screen->getColPlacementDirection() == BScreen::TopBottom ?
- "TopToBottom" : "BottomToTop");
-
- switch (screen->getPlacementPolicy()) {
- case BScreen::CascadePlacement: placement = "CascadePlacement"; break;
- case BScreen::BestFitPlacement: placement = "BestFitPlacement"; break;
- case BScreen::ColSmartPlacement: placement = "ColSmartPlacement"; break;
- default:
- case BScreen::RowSmartPlacement: placement = "RowSmartPlacement"; break;
- }
- sprintf(rc_string, "session.screen%d.windowPlacement", screen_number);
- config.setValue(rc_string, placement);
-
- sprintf(rc_string, "session.screen%d.focusModel", screen_number);
- config.setValue(rc_string,
- (screen->isSloppyFocus() ?
- (screen->doAutoRaise() ? "AutoRaiseSloppyFocus" :
- "SloppyFocus") : "ClickToFocus"));
-
- sprintf(rc_string, "session.screen%d.workspaces", screen_number);
- config.setValue(rc_string, screen->getWorkspaceCount());
-
- sprintf(rc_string, "session.screen%d.toolbar.onTop", screen_number);
- config.setValue(rc_string, screen->getToolbar()->isOnTop() ?
- "True" : "False");
-
- sprintf(rc_string, "session.screen%d.toolbar.autoHide", screen_number);
- config.setValue(rc_string, screen->getToolbar()->doAutoHide() ?
- "True" : "False");
-
- switch (screen->getToolbarPlacement()) {
- case Toolbar::TopLeft: placement = "TopLeft"; break;
- case Toolbar::BottomLeft: placement = "BottomLeft"; break;
- case Toolbar::TopCenter: placement = "TopCenter"; break;
- case Toolbar::TopRight: placement = "TopRight"; break;
- case Toolbar::BottomRight: placement = "BottomRight"; break;
- default:
- case Toolbar::BottomCenter: placement = "BottomCenter"; break;
- }
-
- sprintf(rc_string, "session.screen%d.toolbar.placement", screen_number);
- config.setValue(rc_string, placement);
-
-#ifdef HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.strftimeFormat", screen_number);
- config.setValue(rc_string, screen->getStrftimeFormat());
-#else // !HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.dateFormat", screen_number);
- config.setValue(rc_string, screen->getDateFormat() == B_EuropeanDate ?
- "European" : "American");
-
- sprintf(rc_string, "session.screen%d.clockFormat", screen_number);
- config.setValue(rc_string, screen->isClock24Hour() ? 24 : 12);
-#endif // HAVE_STRFTIME
-
- sprintf(rc_string, "session.screen%d.edgeSnapThreshold", screen_number);
- config.setValue(rc_string, screen->getEdgeSnapThreshold());
-
- sprintf(rc_string, "session.screen%d.toolbar.widthPercent", screen_number);
- config.setValue(rc_string, screen->getToolbarWidthPercent());
-
- // write out the user's workspace names
- int i, len = 0;
- for (i = 0; i < screen->getWorkspaceCount(); i++)
- len += strlen((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null") + 1;
-
- char *resource_string = new char[len + 1024],
- *save_string = new char[len], *save_string_pos = save_string,
- *name_string_pos;
- if (save_string) {
- for (i = 0; i < screen->getWorkspaceCount(); i++) {
- len = strlen((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null") + 1;
- name_string_pos =
- (char *) ((screen->getWorkspace(i)->getName()) ?
- screen->getWorkspace(i)->getName() : "Null");
-
- while (--len) *(save_string_pos++) = *(name_string_pos++);
- *(save_string_pos++) = ',';
- }
- }
-
- *(--save_string_pos) = '\0';
-
- sprintf(resource_string, "session.screen%d.workspaceNames", screen_number);
- config.setValue(resource_string, save_string);
-
- delete [] resource_string;
- delete [] save_string;
-/*
- std::string save_string = screen->getWorkspace(0)->getName();
- for (unsigned int i = 1; i < screen->getWorkspaceCount(); ++i) {
- save_string += ',';
- save_string += screen->getWorkspace(i)->getName();
- }
-
- char *resource_string = new char[save_string.length() + 48];
- sprintf(resource_string, "session.screen%d.workspaceNames", screen_number);
- config.setValue(rc_string, save_string);