예제 #1
0
    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]