X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FScreen.cc;h=d03fa50e6415d73cd19cc7cbd85be6b427f5de5e;hb=25a18140fad2f111ce681cef90be6c13ae6e8996;hp=3cb6176b3c6abc45d25098f684e6c3a6230ded9c;hpb=03f9d6170bd97dbbb968746f2841d9fa5cb3e977;p=chaz%2Fopenbox diff --git a/src/Screen.cc b/src/Screen.cc index 3cb6176b..d03fa50e 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -544,6 +544,18 @@ void BScreen::saveWorkspaceWarping(bool w) { } +void BScreen::saveRootScrollDirection(int d) { + resource.root_scroll = d; + const char *dir; + switch (resource.root_scroll) { + case NoScroll: dir = "None"; break; + case ReverseScroll: dir = "Reverse"; break; + case NormalScroll: default: dir = "Normal"; break; + } + config->setValue(screenstr + "rootScrollDirection", dir); +} + + void BScreen::save_rc(void) { saveSloppyFocus(resource.sloppy_focus); saveAutoRaise(resource.auto_raise); @@ -572,6 +584,7 @@ void BScreen::save_rc(void) { savePlaceIgnoreMaximized(resource.ignore_maximized); saveAllowScrollLock(resource.allow_scroll_lock); saveWorkspaceWarping(resource.workspace_warping); + saveRootScrollDirection(resource.root_scroll); toolbar->save_rc(); slit->save_rc(); @@ -707,13 +720,21 @@ void BScreen::load_rc(void) { resource.ignore_maximized)) resource.ignore_maximized = true; -if (! config->getValue(screenstr + "disableBindingsWithScrollLock", + if (! config->getValue(screenstr + "disableBindingsWithScrollLock", resource.allow_scroll_lock)) - resource.allow_scroll_lock = false; + resource.allow_scroll_lock = false; if (! config->getValue(screenstr + "workspaceWarping", resource.workspace_warping)) resource.workspace_warping = false; + + resource.root_scroll = NormalScroll; + if (config->getValue(screenstr + "rootScrollDirection", s)) { + if (s == "None") + resource.root_scroll = NoScroll; + else if (s == "Reverse") + resource.root_scroll = ReverseScroll; + } } @@ -1269,9 +1290,14 @@ void BScreen::unmanageWindow(BlackboxWindow *w, bool remap) { if (w->isModal()) w->setModal(False); if (w->getWorkspaceNumber() != BSENTINEL && - w->getWindowNumber() != BSENTINEL) + w->getWindowNumber() != BSENTINEL) { getWorkspace(w->getWorkspaceNumber())->removeWindow(w); - else if (w->isIconic()) + if (w->isStuck()) { + for (unsigned int i = 0; i < getNumberOfWorkspaces(); ++i) + if (i != w->getWorkspaceNumber()) + getWorkspace(i)->removeWindow(w, True); + } + } else if (w->isIconic()) removeIcon(w); if (w->isNormal()) { @@ -1515,6 +1541,10 @@ void BScreen::reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id, if (w->isIconic()) { removeIcon(w); getWorkspace(wkspc_id)->addWindow(w); + if (w->isStuck()) + for (unsigned int i = 0; i < getNumberOfWorkspaces(); ++i) + if (i != w->getWorkspaceNumber()) + getWorkspace(i)->addWindow(w, True); } else if (ignore_sticky || ! w->isStuck()) { if (w->isStuck()) w->stick(); @@ -2233,13 +2263,15 @@ void BScreen::buttonPressEvent(const XButtonEvent *xbutton) { rootmenu->show(); } // mouse wheel up - } else if (xbutton->button == 4) { + } else if ((xbutton->button == 4 && resource.root_scroll == NormalScroll) || + (xbutton->button == 5 && resource.root_scroll == ReverseScroll)) { if (getCurrentWorkspaceID() >= getWorkspaceCount() - 1) changeWorkspaceID(0); else changeWorkspaceID(getCurrentWorkspaceID() + 1); // mouse wheel down - } else if (xbutton->button == 5) { + } else if ((xbutton->button == 5 && resource.root_scroll == NormalScroll) || + (xbutton->button == 4 && resource.root_scroll == ReverseScroll)) { if (getCurrentWorkspaceID() == 0) changeWorkspaceID(getWorkspaceCount() - 1); else