Beispiel #1
0
    def on_button_clicked(self, widget):
        screen = widget.get_screen()
        self.time = Gtk.get_current_event_time()
        self.device = Gtk.get_current_event_device()

        self.grab_widget = Gtk.Window(Gtk.WindowType.POPUP)
        self.grab_widget.set_screen(screen)
        self.grab_widget.resize(1, 1)
        self.grab_widget.move(-100, -100)
        self.grab_widget.show()

        self.grab_widget.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK)
        toplevel = widget.get_toplevel()

        if isinstance(toplevel, Gtk.Window):
            if toplevel.has_group():
                toplevel.add_window(grab_widget)

        window = self.grab_widget.get_window()

        picker_cursor = Gdk.Cursor(screen.get_display(), Gdk.CursorType.CROSSHAIR);

        grab_status = self.device.grab(window, Gdk.GrabOwnership.APPLICATION, False,
                                       Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK,
                                       picker_cursor, self.time)

        if grab_status != Gdk.GrabStatus.SUCCESS:
            return

        Gtk.device_grab_add(self.grab_widget, self.device, True)

        self.bp_handler = self.grab_widget.connect("button-press-event", self.mouse_press)
        self.kp_handler = self.grab_widget.connect("key-press-event", self.key_press)
Beispiel #2
0
def window_grab_and_map(window, mask):
    """Returns a list of devices that have a grab or an empty list if
    something failed.

    If somethings failed the window will be hidden.
    """

    device = Gtk.get_current_event_device()
    event_time = Gtk.get_current_event_time()
    if not device:
        return []

    # On wayland we need to grab before mapping and on X11 and everywhere else
    # we can grab after we are mapped
    if not is_wayland():
        window.show()
    else:
        window.realize()

    Gtk.device_grab_add(window, device, True)

    status = device.grab(
        window.get_window(), Gdk.GrabOwnership.WINDOW, True,
        mask, None, event_time)

    if status != Gdk.GrabStatus.SUCCESS:
        Gtk.device_grab_remove(window, device)
        window.hide()
        return []

    associated_device = device.get_associated_device()
    if associated_device is None:
        if is_wayland():
            window.show()
        return [device]

    Gtk.device_grab_add(window, associated_device, True)

    status = associated_device.grab(
        window.get_window(), Gdk.GrabOwnership.WINDOW, True,
        mask, None, event_time)

    if status != Gdk.GrabStatus.SUCCESS:
        Gtk.device_grab_remove(window, associated_device)
        Gtk.device_grab_remove(window, device)
        device.ungrab(event_time)
        window.hide()
        return []

    if is_wayland():
        window.show()

    return [device, associated_device]
Beispiel #3
0
def window_grab_and_map(window, mask):
    """Returns a list of devices that have a grab or an empty list if
    something failed.

    If somethings failed the window will be hidden.
    """

    device = Gtk.get_current_event_device()
    event_time = Gtk.get_current_event_time()
    if not device:
        return []

    # On wayland we need to grab before mapping and on X11 and everywhere else
    # we can grab after we are mapped
    if not is_wayland():
        window.show()
    else:
        window.realize()

    Gtk.device_grab_add(window, device, True)

    status = device.grab(
        window.get_window(), Gdk.GrabOwnership.WINDOW, True,
        mask, None, event_time)

    if status != Gdk.GrabStatus.SUCCESS:
        Gtk.device_grab_remove(window, device)
        window.hide()
        return []

    associated_device = device.get_associated_device()
    if associated_device is None:
        if is_wayland():
            window.show()
        return [device]

    Gtk.device_grab_add(window, associated_device, True)

    status = associated_device.grab(
        window.get_window(), Gdk.GrabOwnership.WINDOW, True,
        mask, None, event_time)

    if status != Gdk.GrabStatus.SUCCESS:
        Gtk.device_grab_remove(window, associated_device)
        Gtk.device_grab_remove(window, device)
        device.ungrab(event_time)
        window.hide()
        return []

    if is_wayland():
        window.show()

    return [device, associated_device]
Beispiel #4
0
	def _grab (self, device):

		if self.gdkwindow is None:
			return

		grabbed = False
		while not grabbed:
			device.set_mode (Gdk.InputMode.SCREEN)
			grabbed = (device.grab (
				self.gdkwindow, Gdk.GrabOwnership.NONE,
				False, Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK,
				None, 0
			) == Gdk.GrabStatus.SUCCESS)
		Gtk.device_grab_add (self.window, device, False)
Beispiel #5
0
    def _get_screen_color(self):
        time = Gtk.get_current_event_time()
        screen = self.__editor._pick_button.get_screen()
        display = self.__editor._pick_button.get_display()

        # XXX(JFlesch): Assumption: mouse is used
        pointer_device = Gtk.get_current_event_device()

        if not self.__dropper_grab_widget:
            self.__dropper_grab_widget = Gtk.Window.new(Gtk.WindowType.POPUP)
            self.__dropper_grab_widget.set_screen(screen)
            self.__dropper_grab_widget.resize(1, 1)
            self.__dropper_grab_widget.move(-100, -100)
            self.__dropper_grab_widget.show()
            self.__dropper_grab_widget.add_events(
                Gdk.EventMask.BUTTON_RELEASE_MASK
            )
            toplevel = self.__editor._pick_button.get_toplevel()

            if isinstance(toplevel, Gtk.Window):
                if toplevel.has_group():
                    toplevel.get_group().add_window(self.__dropper_grab_widget)

        window = self.__dropper_grab_widget.get_window()

        picker_cursor = self._make_picker_cursor(display)
        if (pointer_device.grab(
                window,
                Gdk.GrabOwnership.APPLICATION, False,
                Gdk.EventMask.BUTTON_RELEASE_MASK,
                picker_cursor, time) != Gdk.GrabStatus.SUCCESS):
            logger.warning("Pointer device grab failed !")
            return

        Gtk.device_grab_add(self.__dropper_grab_widget, pointer_device, True)

        self.__grab_time = time
        self.__pointer_device = pointer_device
        self.__has_grab = True

        self.__dropper_grab_widget.connect("button-release-event",
                                           self._on_mouse_release)
Beispiel #6
0
    def _get_screen_color(self):
        time = Gtk.get_current_event_time()
        screen = self.__editor._pick_button.get_screen()
        display = self.__editor._pick_button.get_display()

        # XXX(JFlesch): Assumption: mouse is used
        pointer_device = Gtk.get_current_event_device()

        if not self.__dropper_grab_widget:
            self.__dropper_grab_widget = Gtk.Window.new(Gtk.WindowType.POPUP)
            self.__dropper_grab_widget.set_screen(screen)
            self.__dropper_grab_widget.resize(1, 1)
            self.__dropper_grab_widget.move(-100, -100)
            self.__dropper_grab_widget.show()
            self.__dropper_grab_widget.add_events(
                Gdk.EventMask.BUTTON_RELEASE_MASK)
            toplevel = self.__editor._pick_button.get_toplevel()

            if isinstance(toplevel, Gtk.Window):
                if toplevel.has_group():
                    toplevel.get_group().add_window(self.__dropper_grab_widget)

        window = self.__dropper_grab_widget.get_window()

        picker_cursor = self._make_picker_cursor(display)
        if (pointer_device.grab(window, Gdk.GrabOwnership.APPLICATION, False,
                                Gdk.EventMask.BUTTON_RELEASE_MASK,
                                picker_cursor, time) !=
                Gdk.GrabStatus.SUCCESS):
            logger.warning("Pointer device grab failed !")
            return

        Gtk.device_grab_add(self.__dropper_grab_widget, pointer_device, True)

        self.__grab_time = time
        self.__pointer_device = pointer_device
        self.__has_grab = True

        self.__dropper_grab_widget.connect("button-release-event",
                                           self._on_mouse_release)
    def on_button_clicked(self, widget):
        screen = widget.get_screen()
        self.time = Gtk.get_current_event_time()
        self.device = Gtk.get_current_event_device()

        self.grab_widget = Gtk.Window(Gtk.WindowType.POPUP)
        self.grab_widget.set_screen(screen)
        self.grab_widget.resize(1, 1)
        self.grab_widget.move(-100, -100)
        self.grab_widget.show()

        self.grab_widget.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK
                                    | Gdk.EventMask.BUTTON_PRESS_MASK
                                    | Gdk.EventMask.POINTER_MOTION_MASK)
        toplevel = widget.get_toplevel()

        if isinstance(toplevel, Gtk.Window):
            if toplevel.has_group():
                toplevel.add_window(grab_widget)

        window = self.grab_widget.get_window()

        picker_cursor = Gdk.Cursor(screen.get_display(),
                                   Gdk.CursorType.CROSSHAIR)

        grab_status = self.device.grab(
            window, Gdk.GrabOwnership.APPLICATION, False,
            Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.BUTTON_PRESS_MASK
            | Gdk.EventMask.POINTER_MOTION_MASK, picker_cursor, self.time)

        if grab_status != Gdk.GrabStatus.SUCCESS:
            return

        Gtk.device_grab_add(self.grab_widget, self.device, True)

        self.bp_handler = self.grab_widget.connect("button-press-event",
                                                   self.mouse_press)
        self.kp_handler = self.grab_widget.connect("key-press-event",
                                                   self.key_press)