def tile_windows(keybind, arrangement): """ Tiles the last active windows. How these are tiled depends on the used shortcut. If the windows were already tiled, they are simply rotated. :param keybind: :type keybind: :param arrangement: :type arrangement: """ #fetch the needed data arrangement_numeric = GeometryParser.parse_arrangement(arrangement) windows = WindowTools.get_normal_windows_on_current_desktop() amount_of_windows = len(windows) if amount_of_windows < len(arrangement_numeric): arrangement_numeric = arrangement_numeric[:amount_of_windows] #if the same windows should be tiled a second time, simply rotate them if keybind == WindowHandler.resize_old_keybind: same_windows = True for i in range(len(arrangement_numeric)): if windows[i] not in WindowHandler.windows_deq: same_windows = False break if same_windows: WindowHandler.rotate_windows(None, None) return else: WindowHandler.resize_old_keybind = keybind #tile the windows WindowHandler.windows_deq.clear() WindowHandler.windows_geo = [] i = 0 arrangement_size = len(arrangement_numeric) while i < arrangement_size: index = i geometry = map (int, arrangement_numeric[index]) windows[index].move_and_resize(*geometry) WindowHandler.windows_deq.append(windows[index]) WindowHandler.windows_geo.append(geometry) i += 1 #sort geometries of windows in such way, that they will rotate clockwise WindowHandler.windows_geo.sort(key=operator.itemgetter(0, 1)) if(len(WindowHandler.windows_geo) == 4): windows_geo_clone = WindowHandler.windows_geo[::] WindowHandler.windows_geo[1] = windows_geo_clone[2] WindowHandler.windows_geo[2] = windows_geo_clone[3] WindowHandler.windows_geo[3] = windows_geo_clone[1]
def move_single_window(keybind, geometry): """ Moves the active window to the given geometry. :param keybind: not used :type keybind: :param geometry: geometry from the shortcut file :type geometry: dict """ active_window = WindowTools.get_active_window() parsed_geometry = GeometryParser.parse_window_move_geometry(active_window, geometry) geometry = map (int, parsed_geometry) active_window.move(*parsed_geometry)
def resize_single_window(keybind, geometries): """ Moves and resize the active window to one of the given geometries. The geometry is chosen via the used shortcut (keybind). :param keybind: The shortcut with which this method was called. :type keybind: :param geometries: :type geometries: list[dict] """ window = WindowTools.get_active_window() if WindowHandler.resize_old_keybind == keybind: WindowHandler.geometry_to_use_index = (WindowHandler.geometry_to_use_index + 1) % len(geometries) else: WindowHandler.resize_old_keybind = keybind WindowHandler.geometry_to_use_index = 0 #geometry consists of the position X, position Y, width, height geometry_numeric = GeometryParser.parse_geometry(geometries[WindowHandler.geometry_to_use_index]) print geometry_numeric geometry = map(int, geometry_numeric) window.move_and_resize(*geometry)