]> Dogcows Code - chaz/openbox/blobdiff - scripts/callbacks.py
can draw icons in truecolor!
[chaz/openbox] / scripts / callbacks.py
index 6c33bc7792696f83617469984824faaf366cf5d7..1b7bf17761f43dac549fee9849c2e37ce2e7c124 100644 (file)
@@ -185,6 +185,29 @@ def change_desktop(data, num):
     ob.send_client_msg(root, otk.atoms.net_current_desktop,
                        root, num)
 
+def show_desktop(data, show=1):
+    """Shows and focuses the desktop, hiding any client windows. Optionally,
+       if show is zero, this will hide the desktop, leaving show-desktop
+       mode."""
+    root = otk.display.screenInfo(data.screen).rootWindow()
+    ob.send_client_msg(root, otk.atoms.net_showing_desktop, root, show)
+
+def hide_desktop(data):
+    """Hides the desktop, re-showing the client windows. Leaves show-desktop
+       mode."""
+    show_desktop(data, 0)
+
+def toggle_show_desktop(data):
+    """Requests the Openbox to show the desktop, hiding the client windows, or
+       redisplay the clients."""
+    # get the current desktop state
+    root = otk.display.screenInfo(data.screen).rootWindow()
+    result, value = otk.Property_get(root, otk.atoms.net_showing_desktop,
+                                     otk.atoms.cardinal)
+    if not result: return
+    show = not value
+    ob.send_client_msg(root, otk.atoms.net_showing_desktop, root, show)
+
 def next_desktop(data, no_wrap=0):
     """Switches to the next desktop, optionally (by default) cycling around to
        the first when going past the last."""
@@ -209,7 +232,71 @@ def prev_desktop(data, no_wrap=0):
         d = n - 1
     change_desktop(data, d)
 
-def send_to_desktop(data, num):
+def up_desktop(data, num=1):
+    """Switches to the desktop vertically above the current one. This is based
+       on the desktop layout chosen by an EWMH compliant pager. Optionally, num
+       can be specified to move more than one row at a time."""
+    screen = ob.openbox.screen(data.screen)
+    d = screen.desktop()
+    n = screen.numDesktops()
+    l = screen.desktopLayout()
+
+    target = d - num * l.columns
+    if target < 0:
+        target += l.rows * l.columns
+    while target >= n:
+        target -= l.columns
+    change_desktop(data, target)
+
+def down_desktop(data, num=1):
+    """Switches to the desktop vertically below the current one. This is based
+       on the desktop layout chosen by an EWMH compliant pager. Optionally, num
+       can be specified to move more than one row at a time."""
+    screen = ob.openbox.screen(data.screen)
+    d = screen.desktop()
+    n = screen.numDesktops()
+    l = screen.desktopLayout()
+
+    target = d + num * l.columns
+    if target >= n:
+        target -= l.rows * l.columns
+    while target < 0:
+        target += l.columns
+    change_desktop(data, target)
+
+def left_desktop(data, num=1):
+    """Switches to the desktop horizotally left of the current one. This is
+       based on the desktop layout chosen by an EWMH compliant pager.
+       Optionally, num can be specified to move more than one column at a
+       time."""
+    screen = ob.openbox.screen(data.screen)
+    d = screen.desktop()
+    n = screen.numDesktops()
+    l = screen.desktopLayout()
+
+    rowstart = d - d % l.columns
+    target = d - num
+    while target < rowstart:
+        target += l.columns
+    change_desktop(data, target)
+
+def right_desktop(data, num=1):
+    """Switches to the desktop horizotally right of the current one. This is
+       based on the desktop layout chosen by an EWMH compliant pager.
+       Optionally, num can be specified to move more than one column at a
+       time."""
+    screen = ob.openbox.screen(data.screen)
+    d = screen.desktop()
+    n = screen.numDesktops()
+    l = screen.desktopLayout()
+
+    rowstart = d - d % l.columns
+    target = d + num
+    while target >= rowstart + l.columns:
+        target -= l.columns
+    change_desktop(data, target)
+
+def send_to_desktop(data, num=1):
     """Sends a client to a specified desktop"""
     if not data.client: return
     ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(),
This page took 0.026452 seconds and 4 git commands to generate.