+void screen::changeWorkspaceVert(const int num) const {
+ assert(_managed);
+ int width = 0;
+ int num_desktops = (signed)_num_desktops;
+ int active_desktop = (signed)_active_desktop;
+ int wnum = 0;
+
+ _config->getValue(Config::workspaceColumns, width);
+
+ if (width > num_desktops || width <= 0)
+ return;
+
+ // 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);
+ int width = 0;
+ int num_desktops = (signed)_num_desktops;
+ int active_desktop = (signed)_active_desktop;
+ int wnum = 0;
+
+ _config->getValue(Config::workspaceColumns, width);
+
+ 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);
+}
+