]> Dogcows Code - chaz/openbox/blobdiff - scripts/builtins.py
state_above/below work now
[chaz/openbox] / scripts / builtins.py
index e180c7b5f022207d74b45f16c8b2473edf757424..895339e18eace89f5a27a91998d1cde965316036 100644 (file)
@@ -105,6 +105,11 @@ def unshade(data):
     if not client: return
     OBClient_shade(client, 0)
 
+def change_desktop(data, num):
+    """Switches to a specified desktop"""
+    root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
+    send_client_msg(root, OBProperty_net_current_desktop, root, num)
+
 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."""
@@ -115,7 +120,7 @@ def next_desktop(data, no_wrap=0):
         d = d + 1
     elif not no_wrap:
         d = 0
-    OBScreen_changeDesktop(screen, d)
+    change_desktop(data, d)
     
 def prev_desktop(data, no_wrap=0):
     """Switches to the previous desktop, optionally (by default) cycling around
@@ -127,12 +132,73 @@ def prev_desktop(data, no_wrap=0):
         d = d - 1
     elif not no_wrap:
         d = n - 1
-    OBScreen_changeDesktop(screen, d)
+    change_desktop(data, d)
 
-def change_desktop(data, num):
-    """Switches to a specified desktop"""
+def send_to_desktop(data, num):
+    """Sends a client to a specified desktop"""
+    root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
+    client = Openbox_findClient(openbox, data.window())
+    if client:
+        window = OBClient_window(client)
+        send_client_msg(root, OBProperty_net_wm_desktop, window, num)
+
+def send_to_next_desktop(data, no_wrap=0, follow=1):
+    """Sends a window to the next desktop, optionally (by default) cycling
+       around to the first when going past the last. Also optionally moving to
+       the new desktop after sending the window."""
+    client = Openbox_findClient(openbox, data.window())
+    if not client: return
+    screen = Openbox_screen(openbox, data.screen())
+    d = OBScreen_desktop(screen)
+    n = OBScreen_numDesktops(screen)
+    if (d < (n-1)):
+        d = d + 1
+    elif not no_wrap:
+        d = 0
+    send_to_desktop(data, d)
+    if follow:
+        change_desktop(data, d)
+    
+def send_to_prev_desktop(data, no_wrap=0, follow=1):
+    """Sends a window to the previous desktop, optionally (by default) cycling
+       around to the last when going past the first. Also optionally moving to
+       the new desktop after sending the window."""
+    client = Openbox_findClient(openbox, data.window())
+    if not client: return
     screen = Openbox_screen(openbox, data.screen())
-    OBScreen_changeDesktop(screen, num)
+    d = OBScreen_desktop(screen)
+    n = OBScreen_numDesktops(screen)
+    if (d > 0):
+        d = d - 1
+    elif not no_wrap:
+        d = n - 1
+    send_to_desktop(data, d)
+    if follow:
+        change_desktop(data, d)
+
+def state_above(data, add=2):
+    """Toggles, adds or removes the 'above' state on a window."""
+    client = Openbox_findClient(openbox, data.window())
+    if not client: return
+    root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
+    window = OBClient_window(client)
+    above = OBProperty_atom(Openbox_property(openbox),
+                            OBProperty_net_wm_state_above)
+    print above
+    send_client_msg(root, OBProperty_net_wm_state, window, add,
+                    above)
+    
+def state_below(data, add=2):
+    """Toggles, adds or removes the 'below' state on a window."""
+    client = Openbox_findClient(openbox, data.window())
+    if not client: return
+    root = ScreenInfo_rootWindow(OBDisplay_screenInfo(data.screen()))
+    window = OBClient_window(client)
+    below = OBProperty_atom(Openbox_property(openbox),
+                            OBProperty_net_wm_state_below)
+    print below
+    send_client_msg(root, OBProperty_net_wm_state, window, add,
+                    below)
     
 #########################################
 ### Convenience functions for scripts ###
This page took 0.024015 seconds and 4 git commands to generate.