def _grab_pointer_outside(self, device, time): if self._outside_grab_active: logger.warning( "grab: outside-popup grab already active: regrabbing") self._ungrab_pointer_outside(device, time) event_mask = (Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) cursor = self._outside_cursor grab_status = device.grab( window=self.get_window(), grab_ownership=Gdk.GrabOwnership.APPLICATION, owner_events=False, event_mask=Gdk.EventMask(event_mask), cursor=cursor, time_=time, ) if grab_status == Gdk.GrabStatus.SUCCESS: logger.debug("grab: acquired grab on %r successfully", device) self._outside_grab_active = True else: logger.warning("grab: failed to acquire grab on %r (status=%s)", device, grab_status.value_nick)