]> Dogcows Code - chaz/openbox/blobdiff - scripts/builtins.py
use the proper screen area, which excludes area taken up by struts
[chaz/openbox] / scripts / builtins.py
index 9b909d01aefe8c35b5c1a9a5f3ff98f588bd5697..8bf3cd1df659c8c84c0e08868333c295b2271683 100644 (file)
@@ -5,29 +5,45 @@
 def state_above(data, add=2):
     """Toggles, adds or removes the 'above' state on a window."""
     if not data.client: return
-    send_client_msg(OBDisplay_screenInfo(data.screen).rootWindow(),
-                    OBProperty.net_wm_state, data.client.window(), add,
-                    openbox.property().atom(OBProperty.net_wm_state_above))
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().net_wm_state, data.client.window(), add,
+                    Property_atoms().net_wm_state_above)
     
 def state_below(data, add=2):
     """Toggles, adds or removes the 'below' state on a window."""
     if not data.client: return
-    send_client_msg(OBDisplay_screenInfo(data.screen).rootWindow(),
-                    OBProperty.net_wm_state, data.client.window(), add,
-                    openbox.property().atom(OBProperty.net_wm_state_below))
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().net_wm_state, data.client.window(), add,
+                    Property_atoms().net_wm_state_below)
     
 def state_shaded(data, add=2):
     """Toggles, adds or removes the 'shaded' state on a window."""
     if not data.client: return
-    send_client_msg(OBDisplay_screenInfo(data.screen).rootWindow(),
-                    OBProperty.net_wm_state, data.client.window(), add,
-                    openbox.property().atom(OBProperty.net_wm_state_shaded))
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().net_wm_state, data.client.window(), add,
+                    Property_atoms().net_wm_state_shaded)
+
+def iconify(data):
+    """Iconifies the window on which the event occured"""
+    if not data.client: return
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().wm_change_state,
+                    data.client.window(), 3) # IconicState
+    
+def restore(data):
+    """Un-iconifies the window on which the event occured, but does not focus
+       if. If you want to focus the window too, it is recommended that you
+       use the activate() function."""
+    if not data.client: return
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().wm_change_state,
+                    data.client.window(), 1) # NormalState
     
 def close(data):
     """Closes the window on which the event occured"""
     if not data.client: return
-    send_client_msg(OBDisplay_screenInfo(data.screen).rootWindow(),
-                    OBProperty.net_close_window, data.client.window(), 0)
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().net_close_window, data.client.window(), 0)
 
 def focus(data):
     """Focuses the window on which the event occured"""
@@ -64,41 +80,41 @@ def resize(data):
 
     # pick a corner to anchor
     if not (resize_nearest or data.context == MC_Grip):
-        corner = OBClient.TopLeft
+        corner = Client.TopLeft
     else:
         x = px - data.press_clientx
         y = py - data.press_clienty
         if y < data.press_clientheight / 2:
             if x < data.press_clientwidth / 2:
-                corner = OBClient.BottomRight
+                corner = Client.BottomRight
                 dx *= -1
             else:
-                corner = OBClient.BottomLeft
+                corner = Client.BottomLeft
             dy *= -1
         else:
             if x < data.press_clientwidth / 2:
-                corner = OBClient.TopRight
+                corner = Client.TopRight
                 dx *= -1
             else:
-                corner = OBClient.TopLeft
+                corner = Client.TopLeft
 
     data.client.resize(corner,
                        data.press_clientwidth + dx,
                        data.press_clientheight + dy);
 
-def restart(data):
-    """Restarts openbox"""
-    openbox.restart("")
+def restart(data, other = ""):
+    """Restarts openbox, optionally starting another window manager."""
+    openbox.restart(other)
 
 def raise_win(data):
     """Raises the window on which the event occured"""
     if not data.client: return
-    openbox.screen(data.screen).restack(1, data.client)
+    openbox.screen(data.screen).raiseWindow(data.client)
 
 def lower_win(data):
     """Lowers the window on which the event occured"""
     if not data.client: return
-    openbox.screen(data.screen).restack(0, data.client)
+    openbox.screen(data.screen).lowerWindow(data.client)
 
 def toggle_shade(data):
     """Toggles the shade status of the window on which the event occured"""
@@ -114,8 +130,8 @@ def unshade(data):
 
 def change_desktop(data, num):
     """Switches to a specified desktop"""
-    root = OBDisplay_screenInfo(data.screen).rootWindow()
-    send_client_msg(root, OBProperty.net_current_desktop, root, num)
+    root = display.screenInfo(data.screen).rootWindow()
+    send_client_msg(root, Property_atoms().net_current_desktop, root, num)
 
 def next_desktop(data, no_wrap=0):
     """Switches to the next desktop, optionally (by default) cycling around to
@@ -144,9 +160,23 @@ def prev_desktop(data, no_wrap=0):
 def send_to_desktop(data, num):
     """Sends a client to a specified desktop"""
     if not data.client: return
-    send_client_msg(OBDisplay_screenInfo(data.screen).rootWindow(),
-                    OBProperty.net_wm_desktop, data.client.window(), num)
+    send_client_msg(display.screenInfo(data.screen).rootWindow(),
+                    Property_atoms().net_wm_desktop, data.client.window(), num)
 
+def toggle_all_desktops(data):
+    """Toggles between sending a client to all desktops and to the current
+       desktop."""
+    if not data.client: return
+    if not data.client.desktop() == 0xffffffff:
+        send_to_desktop(data, 0xffffffff)
+    else:
+        send_to_desktop(data, openbox.screen(data.screen).desktop())
+    
+def send_to_all_desktops(data):
+    """Sends a client to all desktops"""
+    if not data.client: return
+    send_to_desktop(data, 0xffffffff)
+    
 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
@@ -193,15 +223,16 @@ def setup_click_focus(click_raise = 1):
     """Sets up for focusing windows by clicking on or in the window.
        Optionally, clicking on or in a window can raise the window to the
        front of its stacking layer."""
-    mbind("1", MC_Titlebar, MousePress, focus)
-    mbind("1", MC_Handle, MousePress, focus)
-    mbind("1", MC_Grip, MousePress, focus)
-    mbind("1", MC_Window, MousePress, focus)
+    mbind("Left", MC_Titlebar, MousePress, focus)
+    mbind("Left", MC_Handle, MousePress, focus)
+    mbind("Left", MC_Grip, MousePress, focus)
+    mbind("Left", MC_Window, MousePress, focus)
+    mbind("A-Left", MC_Frame, MousePress, focus)
     if click_raise:
-        mbind("1", MC_Titlebar, MousePress, raise_win)
-        mbind("1", MC_Handle, MousePress, raise_win)
-        mbind("1", MC_Grip, MousePress, raise_win)
-        mbind("1", MC_Window, MousePress, raise_win)
+        mbind("Left", MC_Titlebar, MousePress, raise_win)
+        mbind("Left", MC_Handle, MousePress, raise_win)
+        mbind("Left", MC_Grip, MousePress, raise_win)
+        mbind("Left", MC_Window, MousePress, raise_win)    
 
 def setup_sloppy_focus(click_focus = 1, click_raise = 0):
     """Sets up for focusing windows when the mouse pointer enters them.
@@ -230,25 +261,27 @@ def setup_window_clicks():
           bottom of its stacking layer.
         * Double-left click on a window's titlebar will toggle shading it
     """
-    mbind("A-1", MC_Frame, MouseMotion, move)
-    mbind("1", MC_Titlebar, MouseMotion, move)
-    mbind("1", MC_Handle, MouseMotion, move)
+    mbind("A-Left", MC_Frame, MouseMotion, move)
+    mbind("Left", MC_Titlebar, MouseMotion, move)
+    mbind("Left", MC_Handle, MouseMotion, move)
 
-    mbind("A-3", MC_Frame, MouseMotion, resize)
-    mbind("1", MC_Grip, MouseMotion, resize)
+    mbind("A-Right", MC_Frame, MouseMotion, resize)
+    mbind("Left", MC_Grip, MouseMotion, resize)
 
-    mbind("1", MC_Titlebar, MousePress, raise_win)
-    mbind("1", MC_Handle, MousePress, raise_win)
-    mbind("A-1", MC_Frame, MousePress, raise_win)
-    mbind("A-2", MC_Frame, MouseClick, lower_win)
-    mbind("2", MC_Titlebar, MouseClick, lower_win)
-    mbind("2", MC_Handle, MouseClick, lower_win)
+    mbind("Left", MC_Titlebar, MousePress, raise_win)
+    mbind("Left", MC_Handle, MousePress, raise_win)
+    mbind("A-Left", MC_Frame, MousePress, raise_win)
+    mbind("A-Middle", MC_Frame, MouseClick, lower_win)
+    mbind("Middle", MC_Titlebar, MouseClick, lower_win)
+    mbind("Middle", MC_Handle, MouseClick, lower_win)
 
-    mbind("1", MC_Titlebar, MouseDoubleClick, toggle_shade)
+    mbind("Left", MC_Titlebar, MouseDoubleClick, toggle_shade)
 
 def setup_window_buttons():
     """Sets up the default behaviors for the buttons in the window titlebar."""
-    mbind("1", MC_CloseButton, MouseClick, close)
+    mbind("Left", MC_AllDesktopsButton, MouseClick, toggle_all_desktops)
+    mbind("Left", MC_CloseButton, MouseClick, close)
+    mbind("Left", MC_IconifyButton, MouseClick, iconify)
 
 def setup_scroll():
     """Sets up the default behaviors for the mouse scroll wheel.
@@ -258,17 +291,23 @@ def setup_scroll():
         * control-alt-scrolling on a window will send it to the next/previous
           desktop, and switch to the desktop with the window
     """
-    mbind("4", MC_Titlebar, MouseClick, shade)
-    mbind("5", MC_Titlebar, MouseClick, unshade)
-
-    mbind("A-4", MC_Frame, MouseClick, next_desktop)
-    mbind("A-4", MC_Root, MouseClick, next_desktop)
-    mbind("A-5", MC_Frame, MouseClick, prev_desktop)
-    mbind("A-5", MC_Root, MouseClick, prev_desktop)
-
-    mbind("C-A-4", MC_Frame, MouseClick, send_to_next_desktop)
-    mbind("C-A-5", MC_Frame, MouseClick, send_to_prev_desktop)
-
+    mbind("Up", MC_Titlebar, MouseClick, shade)
+    mbind("Down", MC_Titlebar, MouseClick, unshade)
+
+    mbind("A-Up", MC_Frame, MouseClick, next_desktop)
+    mbind("A-Up", MC_Root, MouseClick, next_desktop)
+    mbind("A-Down", MC_Frame, MouseClick, prev_desktop)
+    mbind("A-Down", MC_Root, MouseClick, prev_desktop)
+
+    mbind("C-A-Up", MC_Frame, MouseClick, send_to_next_desktop)
+    mbind("C-A-Down", MC_Frame, MouseClick, send_to_prev_desktop)
+
+def setup_fallback_focus():
+    """Sets up a focus fallback routine so that when no windows are focused,
+       the last window to have focus on the desktop will be focused."""
+    global ob_focus_fallback # see focus.py
+    ob_focus_fallback = 1
+    
 ############################################################################
 ### Window placement algorithms, choose one of these and ebind it to the ###
 ### EventPlaceWindow action.                                             ###
@@ -279,13 +318,16 @@ import random
 def placewindows_random(data):
     if not data.client: return
     client_area = data.client.area()
-    screen = OBDisplay_screenInfo(data.screen)
-    width = screen.width() - client_area.width()
-    height = screen.height() - client_area.height()
+    frame_size = data.client.frame.size()
+    screen_area = openbox.screen(data.screen).area()
+    width = screen_area.width() - (client_area.width() +
+                                   frame_size.left + frame_size.right)
+    height = screen_area.height() - (client_area.height() + 
+                                     frame_size.top + frame_size.bottom)
     global ob_rand
     if not ob_rand: ob_rand = random.Random()
-    x = ob_rand.randrange(0, width-1)
-    y = ob_rand.randrange(0, height-1)
+    x = ob_rand.randrange(screen_area.x(), width-1)
+    y = ob_rand.randrange(screen_area.y(), height-1)
     data.client.move(x, y)
 
 
This page took 0.035747 seconds and 4 git commands to generate.