X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fscreen.cc;h=78f3a9d0805b5c2a21707685075ce8552cc3b0cb;hb=df7120d5ff0942dcae5a20bed79052e7be9bc1d1;hp=ce068122107ef624e6c7221c939e7bca7ede5f6f;hpb=843f9726ab6fd99fe3a2f285e6c85bd2880a275f;p=chaz%2Fopenbox diff --git a/util/epist/screen.cc b/util/epist/screen.cc index ce068122..78f3a9d0 100644 --- a/util/epist/screen.cc +++ b/util/epist/screen.cc @@ -25,6 +25,10 @@ #endif // HAVE_CONFIG_H extern "C" { +#ifdef HAVE_STDIO_H +# include +#endif // HAVE_STDIO_H + #ifdef HAVE_UNISTD_H # include # include @@ -182,19 +186,19 @@ void screen::handleKeypress(const XEvent &e) { return; case Action::nextWindowOfClass: - cycleWindow(true, false, true); + cycleWindow(true, false, true, it->string()); return; case Action::prevWindowOfClass: - cycleWindow(false, false, true); + cycleWindow(false, false, true, it->string()); return; case Action::nextWindowOfClassOnAllWorkspaces: - cycleWindow(true, true, true); + cycleWindow(true, true, true, it->string()); return; case Action::prevWindowOfClassOnAllWorkspaces: - cycleWindow(false, true, true); + cycleWindow(false, true, true, it->string()); return; case Action::changeWorkspace: @@ -204,6 +208,9 @@ void screen::handleKeypress(const XEvent &e) { case Action::execute: execCommand(it->string()); return; + + default: + break; } // these actions require an active window @@ -238,9 +245,49 @@ void screen::handleKeypress(const XEvent &e) { window->sendTo(0xffffffff); return; + case Action::moveWindowUp: + window->move(window->x(), window->y() - it->number()); + return; + + case Action::moveWindowDown: + window->move(window->x(), window->y() + it->number()); + return; + + case Action::moveWindowLeft: + window->move(window->x() - it->number(), window->y()); + return; + + case Action::moveWindowRight: + window->move(window->x() + it->number(), window->y()); + return; + + case Action::resizeWindowWidth: + window->resize(window->width() + it->number(), window->height()); + return; + + case Action::resizeWindowHeight: + window->resize(window->width(), window->height() + it->number()); + return; + case Action::toggleshade: window->shade(! window->shaded()); return; + + case Action::toggleMaximizeHorizontal: + window->toggleMaximize(XWindow::Max_Horz); + return; + + case Action::toggleMaximizeVertical: + window->toggleMaximize(XWindow::Max_Vert); + return; + + case Action::toggleMaximizeFull: + window->toggleMaximize(XWindow::Max_Full); + return; + + default: + assert(false); // unhandled action type! + break; } } } @@ -313,7 +360,7 @@ void screen::updateClientList() { break; if (it == end) { // didn't already exist if (doAddWindow(rootclients[i])) { - cout << "Added window: 0x" << hex << rootclients[i] << dec << endl; + //cout << "Added window: 0x" << hex << rootclients[i] << dec << endl; _clients.insert(insert_point, new XWindow(_epist, this, rootclients[i])); } @@ -327,7 +374,7 @@ void screen::updateClientList() { if (**it2 == rootclients[i]) break; if (i == num) { // no longer exists - cout << "Removed window: 0x" << hex << (*it2)->window() << dec << endl; + //cout << "Removed window: 0x" << hex << (*it2)->window() << dec << endl; delete *it2; _clients.erase(it2); } @@ -350,9 +397,9 @@ void screen::updateActiveWindow() { } _active = it; - cout << "Active window is now: "; - if (_active == _clients.end()) cout << "None\n"; - else cout << "0x" << hex << (*_active)->window() << dec << endl; + //cout << "Active window is now: "; + //if (_active == _clients.end()) cout << "None\n"; + //else cout << "0x" << hex << (*_active)->window() << dec << endl; } @@ -382,13 +429,17 @@ void screen::execCommand(const std::string &cmd) const { void screen::cycleWindow(const bool forward, const bool alldesktops, - const bool sameclass) const { + const bool sameclass, const string &cn) const { assert(_managed); if (_clients.empty()) return; WindowList::const_iterator target = _active; + string classname = cn; + if (sameclass && classname.empty() && target != _clients.end()) + classname = (*target)->appClass(); + if (target == _clients.end()) target = _clients.begin(); @@ -405,8 +456,8 @@ void screen::cycleWindow(const bool forward, const bool alldesktops, } while (target == _clients.end() || (*target)->iconic() || (! alldesktops && (*target)->desktop() != _active_desktop) || - (sameclass && _active != _clients.end() && - (*target)->appClass() != (*_active)->appClass())); + (sameclass && ! classname.empty() && + (*target)->appClass() != classname)); if (target != _clients.end()) (*target)->focus();