added window cycling

This commit is contained in:
Dana Jansens 2002-07-20 09:02:45 +00:00
parent 8e601e4a64
commit c9be3ee061
4 changed files with 56 additions and 7 deletions

View file

@ -39,7 +39,7 @@ public:
raiseWindow,
lowerWindow,
closeWindow,
shade,
toggleshade,
moveWindowUp,
moveWindowDown,
moveWindowLeft,

View file

@ -79,15 +79,23 @@ epist::epist(char **argv, char *dpy_name, char *rc_file)
_actions.push_back(Action(Action::nextWorkspace,
XKeysymToKeycode(getXDisplay(),
XStringToKeysym("Tab")),
Mod1Mask));
ControlMask));
_actions.push_back(Action(Action::prevWorkspace,
XKeysymToKeycode(getXDisplay(),
XStringToKeysym("Tab")),
ControlMask));
_actions.push_back(Action(Action::shade,
ControlMask | ShiftMask));
_actions.push_back(Action(Action::toggleshade,
XKeysymToKeycode(getXDisplay(),
XStringToKeysym("F5")),
Mod1Mask));
_actions.push_back(Action(Action::nextWindow,
XKeysymToKeycode(getXDisplay(),
XStringToKeysym("Tab")),
Mod1Mask));
_actions.push_back(Action(Action::prevWindow,
XKeysymToKeycode(getXDisplay(),
XStringToKeysym("Tab")),
Mod1Mask | ShiftMask));
activateGrabs();
}

View file

@ -157,6 +157,14 @@ void screen::handleKeypress(const XEvent &e) {
cycleWorkspace(false);
return;
case Action::nextWindow:
cycleWindow(true);
return;
case Action::prevWindow:
cycleWindow(false);
return;
case Action::changeWorkspace:
changeWorkspace(it->number());
return;
@ -167,7 +175,7 @@ void screen::handleKeypress(const XEvent &e) {
XWindow *window = *_active;
switch (it->type()) {
case Action::shade:
case Action::toggleshade:
window->shade(! window->shaded());
return;
}
@ -274,6 +282,37 @@ void screen::updateActiveWindow() {
}
*/
void screen::cycleWindow(const bool forward) const {
if (_clients.empty()) return;
WindowList::const_iterator target = _active;
if (target == _clients.end())
target = _clients.begin();
do {
if (forward) {
++target;
if (target == _clients.end())
target = _clients.begin();
} else {
if (target == _clients.begin())
target = _clients.end();
--target;
}
} while (target == _clients.end() || (*target)->iconic());
if (target != _clients.end()) {
// 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());
}
}
void screen::cycleWorkspace(const bool forward) const {
unsigned long currentDesktop = 0;
unsigned long numDesktops = 0;
@ -297,6 +336,7 @@ void screen::cycleWorkspace(const bool forward) const {
}
}
void screen::changeWorkspace(const int num) const {
_xatom->sendClientMessage(_root, XAtom::net_current_desktop, _root, num);
}

View file

@ -65,8 +65,9 @@ public:
void handleKeypress(const XEvent &e);
void cycleWorkspace(const bool forward)const;
void changeWorkspace(const int num)const;
void cycleWindow(const bool forward) const;
void cycleWorkspace(const bool forward) const;
void changeWorkspace(const int num) const;
void toggleShaded(const Window win) const;
};