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]