X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=6970fdf68111095befb48096e916cf5eadeafc67;hb=733b4f4a3366eca53dc68fd40069b673b0261c96;hp=60cd8e09bfee6f7ab9fad63b9c981cfbb32eeace;hpb=9fe6b282c0a9c1bd5ce754bc0fbc0e7c619eab14;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 60cd8e09..6970fdf6 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -212,7 +212,7 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) { iconmenu = new Iconmenu(this); configmenu = new Configmenu(this); - if (resource.workspaces != 0) { + if (resource.workspaces > 0) { for (unsigned int i = 0; i < resource.workspaces; ++i) { Workspace *wkspc = new Workspace(this, workspacesList.size()); workspacesList.push_back(wkspc); @@ -537,6 +537,13 @@ void BScreen::saveAllowScrollLock(bool a) { } +void BScreen::saveWorkspaceWarping(bool w) { + resource.workspace_warping = w; + config->setValue(screenstr + "workspaceWarping", + resource.workspace_warping); +} + + void BScreen::save_rc(void) { saveSloppyFocus(resource.sloppy_focus); saveAutoRaise(resource.auto_raise); @@ -564,6 +571,7 @@ void BScreen::save_rc(void) { savePlaceIgnoreShaded(resource.ignore_shaded); savePlaceIgnoreMaximized(resource.ignore_maximized); saveAllowScrollLock(resource.allow_scroll_lock); + saveWorkspaceWarping(resource.workspace_warping); toolbar->save_rc(); slit->save_rc(); @@ -699,9 +707,13 @@ void BScreen::load_rc(void) { resource.ignore_maximized)) resource.ignore_maximized = true; - if (! config->getValue(screenstr + "disableBindingsWithScrollLock", - resource.allow_scroll_lock)) - resource.allow_scroll_lock = false; +if (! config->getValue(screenstr + "disableBindingsWithScrollLock", + resource.allow_scroll_lock)) + resource.allow_scroll_lock = false; + + if (! config->getValue(screenstr + "workspaceWarping", + resource.workspace_warping)) + resource.workspace_warping = false; } @@ -1245,12 +1257,6 @@ void BScreen::manageWindow(Window w) { void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { w->restore(remap); - if (w->getWorkspaceNumber() != BSENTINEL && - w->getWindowNumber() != BSENTINEL) - getWorkspace(w->getWorkspaceNumber())->removeWindow(w); - else if (w->isIconic()) - removeIcon(w); - if (w->isNormal()) { // we don't list non-normal windows as managed windows windowList.remove(w); @@ -1266,9 +1272,6 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { assert(it != end); // the window wasnt a desktop window? } - if (blackbox->getFocusedWindow() == w) - blackbox->setFocusedWindow((BlackboxWindow *) 0); - removeNetizen(w->getClientWindow()); /* @@ -1399,8 +1402,13 @@ void BScreen::updateNetizenConfigNotify(XEvent *e) { void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) { // the 13 represents the number of blackbox windows such as menus + int bbwins = 13; +#ifdef XINERAMA + ++bbwins; +#endif // XINERAMA + Window *session_stack = new - Window[(num + workspacesList.size() + rootmenuList.size() + 13)]; + Window[(num + workspacesList.size() + rootmenuList.size() + bbwins)]; unsigned int i = 0, k = num; XRaiseWindow(blackbox->getXDisplay(), iconmenu->getWindowID()); @@ -1415,6 +1423,9 @@ void BScreen::raiseWindows(Window *workspace_stack, unsigned int num) { *(session_stack + i++) = configmenu->getFocusmenu()->getWindowID(); *(session_stack + i++) = configmenu->getPlacementmenu()->getWindowID(); +#ifdef XINERAMA + *(session_stack + i++) = configmenu->getXineramamenu()->getWindowID(); +#endif // XINERAMA *(session_stack + i++) = configmenu->getWindowID(); *(session_stack + i++) = slit->getMenu()->getDirectionmenu()->getWindowID(); @@ -2074,16 +2085,16 @@ const Rect& BScreen::availableArea(void) const { } -RectList BScreen::allAvailableAreas(void) const { #ifdef XINERAMA - if (isXineramaActive()) - return xineramaUsableArea; -#endif // XINERAMA - - RectList list; - list.push_back(availableArea()); - return list; +const RectList& BScreen::allAvailableAreas(void) const { + assert(isXineramaActive()); + assert(xineramaUsableArea.size() > 0); + fprintf(stderr, "1found x %d y %d w %d h %d\n", + xineramaUsableArea[0].x(), xineramaUsableArea[0].y(), + xineramaUsableArea[0].width(), xineramaUsableArea[0].height()); + return xineramaUsableArea; } +#endif // XINERAMA void BScreen::updateAvailableArea(void) {