def get_desk(i_or_name): if isinstance(i_or_name, int): return i_or_name assert isinstance(i_or_name, basestring) nextdesk = None names = ewmh.get_desktop_names().reply() ci = ewmh.get_current_desktop().reply() visibles = ewmh.get_visible_desktops().reply() cname = names[ci] if ci < len(names) else '' fnames = names[:] if visibles: not_cur_or_vis = lambda (i, nm): i not in visibles or i == ci fnames = [nm for i, nm in filter(not_cur_or_vis, enumerate(fnames))] fnames = filter(lambda n: n.lower().startswith(i_or_name.lower()), fnames) fnames = sorted(fnames) if cname in fnames: posInPrefix = (fnames.index(cname) + 1) % len(fnames) nextdesk = names.index(fnames[posInPrefix]) elif len(fnames): nextdesk = names.index(fnames[0]) return nextdesk
def goto_window(win_name_or_id): wid = win_name_or_id if isinstance(wid, basestring): clients = ewmh.get_client_list().reply() for c in clients: if wid == ewmh.get_wm_name(c).reply(): wid = c break if isinstance(wid, int): wdesk = ewmh.get_wm_desktop(wid).reply() if wdesk not in ewmh.get_visible_desktops().reply(): ewmh.request_current_desktop_checked(wdesk).check() ewmh.request_active_window_checked(wid, source=2).check()
def do_goto_window(letter): if letter not in marked: print("mark %s does not exist" % letter, file=sys.stderr) return wid = marked[letter] try: wdesk = ewmh.get_wm_desktop(wid).reply() desktop = ewmh.get_current_desktop().reply() visibles = ewmh.get_visible_desktops().reply() or [desktop] if wdesk is not None and wdesk not in visibles: ewmh.request_current_desktop_checked(wdesk).check() ewmh.request_active_window_checked(wid, source=1).check() except xproto.BadWindow: print("%d no longer exists" % wid, file=sys.stderr)
def do_goto_window(letter): if letter not in marked: print >> sys.stderr, 'mark %s does not exist' % letter return wid = marked[letter] try: wdesk = ewmh.get_wm_desktop(wid).reply() desktop = ewmh.get_current_desktop().reply() visibles = ewmh.get_visible_desktops().reply() or [desktop] if wdesk is not None and wdesk not in visibles: ewmh.request_current_desktop_checked(wdesk).check() ewmh.request_active_window_checked(wid, source=1).check() except xcb.xproto.BadWindow: print >> sys.stderr, '%d no longer exists' % wid
def cb_property_notify(e): global activewin, desk_num, desktop, monitors, phys_monitors, root_geom, stacking, visibles, workarea aname = util.get_atom_name(e.atom) if aname == "_NET_DESKTOP_GEOMETRY": root_geom = ewmh.get_desktop_geometry().reply() monitors = xinerama.get_monitors() phys_monitors = xinerama.get_physical_mapping(monitors) elif aname == "_NET_ACTIVE_WINDOW": activewin = ewmh.get_active_window().reply() elif aname == "_NET_CURRENT_DESKTOP": desktop = ewmh.get_current_desktop().reply() if visibles is None or len(visibles) == 1: visibles = [desktop] elif aname == "_NET_VISIBLE_DESKTOPS": visibles = ewmh.get_visible_desktops().reply() elif aname == "_NET_NUMBER_OF_DESKTOPS": desk_num = ewmh.get_number_of_desktops().reply() elif aname == "_NET_CLIENT_LIST_STACKING": stacking = ewmh.get_client_list_stacking().reply() elif aname == "_NET_WORKAREA": update_workarea()
def cb_property_notify(e): global activewin, desk_num, desktop, monitors, phys_monitors, root_geom, \ stacking, visibles, workarea aname = util.get_atom_name(e.atom) if aname == '_NET_DESKTOP_GEOMETRY': root_geom = ewmh.get_desktop_geometry().reply() monitors = xinerama.get_monitors() phys_monitors = xinerama.get_physical_mapping(monitors) elif aname == '_NET_ACTIVE_WINDOW': activewin = ewmh.get_active_window().reply() elif aname == '_NET_CURRENT_DESKTOP': desktop = ewmh.get_current_desktop().reply() if visibles is None or len(visibles) == 1: visibles = [desktop] elif aname == '_NET_VISIBLE_DESKTOPS': visibles = ewmh.get_visible_desktops().reply() elif aname == '_NET_NUMBER_OF_DESKTOPS': desk_num = ewmh.get_number_of_desktops().reply() elif aname == '_NET_CLIENT_LIST_STACKING': stacking = ewmh.get_client_list_stacking().reply() elif aname == '_NET_WORKAREA': update_workarea()
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()
elif wm.lower() == 'kwin': utilwm = window.WindowManagers.KWin print '%s window manager is running...' % wm sys.stdout.flush() if not _wmrunning: time.sleep(1) root_geom = ewmh.get_desktop_geometry().reply() monitors = xinerama.get_monitors() phys_monitors = xinerama.get_physical_mapping(monitors) desk_num = ewmh.get_number_of_desktops().reply() activewin = ewmh.get_active_window().reply() desktop = ewmh.get_current_desktop().reply() visibles = ewmh.get_visible_desktops().reply() or [desktop] stacking = ewmh.get_client_list_stacking().reply() workarea = [] def quit(): print 'Exiting...' import tile for tiler in tile.tilers: tile.get_active_tiler(tiler)[0].untile() sys.exit(0) def update_workarea(): ''' We update the current workarea either by autodetecting struts, or by using margins specified in the config file. Never both, though. '''