+
+void screen::cycleWorkspace(const bool forward) const {
+ unsigned long currentDesktop = 0;
+ unsigned long numDesktops = 0;
+
+ if (_xatom->getValue(_root, XAtom::net_current_desktop, XAtom::cardinal,
+ currentDesktop)) {
+ if (forward)
+ ++currentDesktop;
+ else
+ --currentDesktop;
+
+ _xatom->getValue(_root, XAtom::net_number_of_desktops, XAtom::cardinal,
+ numDesktops);
+
+ if ( ( (signed)currentDesktop) == -1)
+ currentDesktop = numDesktops - 1;
+ else if (currentDesktop >= numDesktops)
+ currentDesktop = 0;
+
+ changeWorkspace(currentDesktop);
+ }
+}
+
+void screen::changeWorkspace(const int num) const {
+ _xatom->sendClientMessage(_root, XAtom::net_current_desktop, _root, num);
+}