def fun(name): names = ewmh.get_desktop_names().reply() if name not in names: names.append(name) ewmh.set_desktop_names_checked(names).check() num_desks = ewmh.get_number_of_desktops().reply() ewmh.request_number_of_desktops_checked(num_desks + 1).check() ewmh.request_wm_desktop_checked(activewin, names.index(name), 2).check()
def set_or_add_desktop(name): names = ewmh.get_desktop_names().reply() if name not in names: names.append(name) ewmh.set_desktop_names_checked(names).check() num_desks = ewmh.get_number_of_desktops().reply() ewmh.request_number_of_desktops_checked(num_desks + 1).check() ewmh.request_current_desktop_checked(names.index(name)).check()
def remove_empty_current_desktop(): # This isn't as straight-forward as decrementing _NET_NUMBER_OF_DESKTOPS. # We need to make sure we remove the right name, too. # AND only do it if there are no clients on this desktop. clients = ewmh.get_client_list().reply() cur = ewmh.get_current_desktop().reply() for c in clients: if ewmh.get_wm_desktop(c).reply() == cur: return names = ewmh.get_desktop_names().reply() if cur < len(names): names.pop(cur) ewmh.set_desktop_names_checked(names).check() # Subtract one from every client's desktop above the current one for c in clients: cdesk = ewmh.get_wm_desktop(c).reply() if cdesk > cur and cdesk != 0xffffffff: ewmh.set_wm_desktop_checked(c, cdesk - 1).check() ndesks = ewmh.get_number_of_desktops().reply() ewmh.request_number_of_desktops_checked(ndesks - 1).check()
def cb_prop_change(widget, e): global activewin, desk_names, desk_num, desktop, stacking, visibles if e.atom == '_NET_DESKTOP_GEOMETRY': root_geom = ewmh.get_desktop_geometry().reply() update_monitor_area() elif e.atom == '_NET_ACTIVE_WINDOW': activewin = ewmh.get_active_window().reply() elif e.atom == '_NET_CURRENT_DESKTOP': desktop = ewmh.get_current_desktop().reply() elif e.atom == '_NET_CLIENT_LIST_STACKING': stacking = ewmh.get_client_list_stacking().reply() elif e.atom == '_NET_VISIBLE_DESKTOPS': visibles = ewmh.get_visible_desktops().reply() elif e.atom in ('_NET_DESKTOP_NAMES', '_NET_NUMBER_OF_DESKTOPS'): desk_num = ewmh.get_number_of_desktops().reply() desk_names = ewmh.get_desktop_names().reply() # This works around what I think is weird behavior in Openbox. # Sometimes Openbox will "fix" the desktop names... please don't! if len(desk_names) > desk_num: names = desk_names[0:desk_num] ewmh.set_desktop_names_checked(names).check() desk_names = ewmh.get_desktop_names().reply()
import config from keymousebind import keybinds xinerama = xpybutil.conn(xinerama.key) gtk_display = gtk.gdk.display_get_default() gtk_screen = gtk_display.get_default_screen() gtk_root = gtk_screen.get_root_window() gtk_rootwin = gtk.Invisible() gtk_root.set_user_data(gtk_rootwin) gtk_root.set_events(gtk.gdk.PROPERTY_CHANGE_MASK | gtk.gdk.KEY_PRESS_MASK) # Initial setup if config.desktops: ewmh.set_desktop_names_checked(config.desktops).check() ewmh.set_desktop_layout_checked(ewmh.Orientation.Horz, len(config.desktops), 1, ewmh.StartingCorner.TopLeft).check() ewmh.request_number_of_desktops_checked(len(config.desktops)).check() # Is this a horizontal or vertical pager? if config.width > config.height: orient = 'H' elif config.width < config.height: orient = 'V' else: # weirdo, could go either way orient = 'V' # Grab keybindings for key_string, fun in keybinds.iteritems():