return;
case Action::nextWindow:
- cycleWindow(true, false);
+ cycleWindow(true);
return;
case Action::prevWindow:
- cycleWindow(false, false);
+ cycleWindow(false);
return;
case Action::nextWindowOnAllWorkspaces:
cycleWindow(false, true);
return;
+ case Action::nextWindowOfClass:
+ cycleWindow(true, false, true);
+ return;
+
+ case Action::prevWindowOfClass:
+ cycleWindow(false, false, true);
+ return;
+
+ case Action::nextWindowOfClassOnAllWorkspaces:
+ cycleWindow(true, true, true);
+ return;
+
+ case Action::prevWindowOfClassOnAllWorkspaces:
+ cycleWindow(false, true, true);
+ return;
+
case Action::changeWorkspace:
changeWorkspace(it->number());
return;
window->lower();
return;
+ case Action::sendToWorkspace:
+ window->sendTo(it->number());
+ return;
+
+ case Action::toggleomnipresent:
+ if (window->desktop() == 0xffffffff)
+ window->sendTo(_active_desktop);
+ else
+ window->sendTo(0xffffffff);
+ return;
+
case Action::toggleshade:
window->shade(! window->shaded());
return;
*/
-void screen::cycleWindow(const bool forward, const bool alldesktops) const {
+void screen::cycleWindow(const bool forward, const bool alldesktops,
+ const bool sameclass) const {
assert(_managed);
if (_clients.empty()) return;
}
} while (target == _clients.end() ||
(*target)->iconic() ||
- (! alldesktops && (*target)->desktop() != _active_desktop));
+ (! alldesktops && (*target)->desktop() != _active_desktop) ||
+ (sameclass && _active != _clients.end() &&
+ (*target)->appClass() != (*_active)->appClass()));
- if (target != _clients.end()) {
- if ((*target)->desktop() != _active_desktop)
- changeWorkspace((*target)->desktop());
-
- // we dont send an ACTIVE_WINDOW client message because that would also
- // unshade the window if it was shaded
- XSetInputFocus(_epist->getXDisplay(), (*target)->window(), RevertToNone,
- CurrentTime);
- XRaiseWindow(_epist->getXDisplay(), (*target)->window());
- }
+ if (target != _clients.end())
+ (*target)->focus();
}