def start_drag(self, point = None): self._monitor_rects = None # Find the pointer position for the occasions when we are # not being called from an event (move button). if not point: rootwin = Gdk.get_default_root_window() dunno, x_root, y_root, mask = rootwin.get_pointer() point = (x_root, y_root) # rmember pointer and window positions window = self.get_drag_window() x, y = window.get_position() self._drag_start_pointer = point self._drag_start_offset = [point[0] - x, point[1] - y] self._drag_start_rect = Rect.from_position_size(window.get_position(), window.get_size()) # not yet actually moving the window self._drag_active = False # get the threshold self._drag_threshold = self.get_drag_threshold() # check if the temporary threshold unlocking has expired if not self.drag_protection or \ not self._temporary_unlock_time is None and \ time.time() - self._temporary_unlock_time > \ self.temporary_unlock_delay: self._temporary_unlock_time = None # give keyboard window a chance to react self.on_drag_initiated()
def get_monitor_rects(screen): """ Screen limits, one rect per monitor. Monitors may have different sizes and arbitrary relative positions. """ rects = [] if screen: for i in range(screen.get_n_monitors()): r = screen.get_monitor_geometry(i) rects.append(Rect(r.x, r.y, r.width, r.height)) else: rootwin = Gdk.get_default_root_window() r = Rect.from_position_size(rootwin.get_position(), (rootwin.get_width(), rootwin.get_height())) rects.append(r) return rects
def update_window_rect(self): """ Call this on configure event, the only time when get_position, get_size, etc. can be trusted. """ visible = self.is_visible() if visible: pos = Gtk.Window.get_position(self) size = Gtk.Window.get_size(self) origin = self.get_window().get_origin() if len(origin) == 3: # What is the first parameter for? Gdk bug? origin = origin[1:] self._window_rect = Rect.from_position_size(pos, size) self._origin = origin self._client_offset = (origin[0] - pos[0], origin[1] - pos[1]) self._screen_orientation = self.get_screen_orientation()