]> 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 44dcbdd5e4327a6f7d51d0fb56d482c7e41f9d69..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,23 +80,23 @@ 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,
@@ -93,12 +109,12 @@ def restart(data, 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
@@ -197,11 +227,12 @@ def setup_click_focus(click_raise = 1):
     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("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)
+        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.
@@ -241,14 +272,16 @@ def setup_window_clicks():
     mbind("Left", MC_Handle, MousePress, raise_win)
     mbind("A-Left", MC_Frame, MousePress, raise_win)
     mbind("A-Middle", MC_Frame, MouseClick, lower_win)
-    mbind("Right", MC_Titlebar, MouseClick, lower_win)
-    mbind("Right", MC_Handle, MouseClick, lower_win)
+    mbind("Middle", MC_Titlebar, MouseClick, lower_win)
+    mbind("Middle", MC_Handle, MouseClick, lower_win)
 
     mbind("Left", MC_Titlebar, MouseDoubleClick, toggle_shade)
 
 def setup_window_buttons():
     """Sets up the default behaviors for the buttons in the window titlebar."""
+    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.
@@ -272,34 +305,8 @@ def setup_scroll():
 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."""
-    focus_stack = []
-    def focused(data):
-        #global focus_stack
-        if data.client:
-            window = data.client.window()
-            # add to front the stack
-            if window in focus_stack:
-                focus_stack.remove(window)
-            focus_stack.insert(0, window)
-        else:
-            # pass around focus
-            desktop = openbox.screen(data.screen).desktop()
-            l = len(focus_stack)
-            i = 0
-            while i < l:
-                w = focus_stack[i]
-                client = openbox.findClient(w)
-                if not client: # window is gone, remove it
-                    focus_stack.pop(i)
-                    l = l - 1
-                elif client.desktop() == desktop and \
-                         client.normal() and client.focus():
-                    break
-                else:
-                    i = i + 1
-
-    ebind(EventFocus, focused)
-
+    global ob_focus_fallback # see focus.py
+    ob_focus_fallback = 1
     
 ############################################################################
 ### Window placement algorithms, choose one of these and ebind it to the ###
@@ -311,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.030221 seconds and 4 git commands to generate.