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"""
# 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"""
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
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
"""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.
in a window can raise the window to the front of its stacking layer."""
ebind(EventEnterWindow, focus)
if click_focus:
- setup_click_focus(click_raise)
+ mbind("Left", MC_Titlebar, MousePress, focus)
+ mbind("Left", MC_Handle, MousePress, focus)
+ mbind("Left", MC_Grip, MousePress, focus)
+ mbind("Left", MC_Window, 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)
def setup_window_clicks():
"""Sets up the default bindings for various mouse buttons for various
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.
* 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("Up", MC_Titlebar, MouseClick, shade)
+ mbind("Down", 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("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-4", MC_Frame, MouseClick, send_to_next_desktop)
- mbind("C-A-5", MC_Frame, MouseClick, send_to_prev_desktop)
+ mbind("C-A-Up", MC_Frame, MouseClick, send_to_next_desktop)
+ mbind("C-A-Down", MC_Frame, MouseClick, send_to_prev_desktop)
-focus_stack = []
def setup_fallback_focus():
"""Sets up a focus fallback routine so that when no windows are focused,
- the last window on the desktop that had focus will be focused."""
- 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)
-
+ 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 ###
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 = display.screenInfo(data.screen)
+ width = screen.width() - (client_area.width() +
+ frame_size.left + frame_size.right)
+ height = screen.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)