+
+void screen::changeWorkspaceVert(const int num) const {
+ assert(_managed);
+ const Config *conf = _epist->getConfig();
+ int width = conf->getNumberValue(Config::workspaceColumns);
+
+ if (width > _num_desktops || width <= 0)
+ return;
+
+ int wnum;
+
+ // a cookie to the person that makes this pretty
+ if (num < 0) {
+ wnum = _active_desktop - width;
+ if (wnum < 0) {
+ wnum = _num_desktops/width * width + _active_desktop;
+ if (wnum >= _num_desktops)
+ wnum = _num_desktops - 1;
+ }
+ }
+ else {
+ wnum = _active_desktop + width;
+ if (wnum >= _num_desktops) {
+ wnum = (_active_desktop + width) % _num_desktops - 1;
+ if (wnum < 0)
+ wnum = 0;
+ }
+ }
+ changeWorkspace(wnum);
+}
+
+void screen::changeWorkspaceHorz(const int num) const {
+ assert(_managed);
+ const Config *conf = _epist->getConfig();
+ int width = conf->getNumberValue(Config::workspaceColumns);
+ int wnum;
+
+ if (width > _num_desktops || width <= 0)
+ return;
+
+ if (num < 0) {
+ if (_active_desktop % width != 0)
+ changeWorkspace(_active_desktop - 1);
+ else {
+ wnum = _active_desktop + width - 1;
+ if (wnum >= _num_desktops)
+ wnum = _num_desktops - 1;
+ }
+ }
+ else {
+ if (_active_desktop % width != width - 1) {
+ wnum = _active_desktop + 1;
+ if (wnum >= _num_desktops)
+ wnum = _num_desktops / width * width;
+ }
+ else
+ wnum = _active_desktop - width + 1;
+ }
+ changeWorkspace(wnum);
+}
+
+void screen::grabKey(const KeyCode keyCode, const int modifierMask) const {
+
+ Display *display = _epist->getXDisplay();
+ int numlockMask, scrolllockMask;
+
+ _epist->getLockModifiers(numlockMask, scrolllockMask);
+
+ XGrabKey(display, keyCode, modifierMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, keyCode,
+ modifierMask|LockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, keyCode,
+ modifierMask|scrolllockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, keyCode,
+ modifierMask|numlockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+
+ XGrabKey(display, keyCode,
+ modifierMask|LockMask|scrolllockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, keyCode,
+ modifierMask|scrolllockMask|numlockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, keyCode,
+ modifierMask|numlockMask|LockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+
+ XGrabKey(display, keyCode,
+ modifierMask|numlockMask|LockMask|scrolllockMask,
+ _root, True, GrabModeAsync, GrabModeAsync);
+}
+
+void screen::ungrabKey(const KeyCode keyCode, const int modifierMask) const {
+
+ Display *display = _epist->getXDisplay();
+ int numlockMask, scrolllockMask;
+
+ _epist->getLockModifiers(numlockMask, scrolllockMask);
+
+ XUngrabKey(display, keyCode, modifierMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|LockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|scrolllockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|numlockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|LockMask|scrolllockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|scrolllockMask|numlockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|numlockMask|LockMask, _root);
+ XUngrabKey(display, keyCode, modifierMask|numlockMask|LockMask|
+ scrolllockMask, _root);
+}