Beispiel #1
0
def click_in_widget(
        window, x=0, y=0, button=1, events=pygps.single_click_events,
        through_gps=True):
    """Simulate a click in a widget. There are various other functions
     adapted for specific widget types"""

    if os.name == 'nt' and button == 3 \
       and events == pygps.single_click_events:

        # ??? work around
        # On Windows sending a BUTTON_PRESS followed by a
        # BUTTON_RELEASE event when opening a contextual menu does
        # not work. The BUTTON_RELEASE close the contextual menu.
        # For now we remove this event.
        events = events[:1]

    for event_type in events:
        if through_gps:
            GPS.send_button_event(
                button=button,
                x=int(x),
                y=int(y),
                window=window,
                type=event_type)
        else:
            event = Gdk.EventButton()
            event.type = event_type
            event.window = window
            event.device = pygps.default_event_device()
            event.x = float(x)
            event.y = float(y)
            event.button = button
            event.put()

    pygps.process_all_events()
    def test_event_strip_boolean(self):
        ev = Gdk.EventButton()
        ev.type = Gdk.EventType.BUTTON_PRESS
        assert ev.get_coords() == (0.0, 0.0)

        # https://gitlab.gnome.org/GNOME/pygobject/issues/85
        ev = Gdk.Event.new(Gdk.EventType.BUTTON_PRESS)
        assert ev.get_coords() == (True, 0.0, 0.0)
 def on_tvw_processes_key_press_event(self, widget, event):
     """Expand and collapse nodes with keyboard arrows"""
     selected_row = get_treeview_selected_row(self.ui.tvw_processes)
     if selected_row and event.keyval in (Gdk.KEY_Left, Gdk.KEY_Right):
         iter_parent = self.ui.store_processes.iter_parent(selected_row)
         if selected_row and iter_parent is None:
             tree_path = self.model.get_path(selected_row)
             expanded = self.ui.tvw_processes.row_expanded(tree_path)
             if event.keyval == Gdk.KEY_Left and expanded:
                 # Collapse the selected node
                 self.ui.tvw_processes.collapse_row(tree_path)
             elif event.keyval == Gdk.KEY_Right and not expanded:
                 # Expand the selected node
                 self.ui.tvw_processes.expand_row(tree_path, False)
     elif event.keyval == Gdk.KEY_Menu:
         # Show popup menu on Menu key press
         event = Gdk.EventButton()
         event.type = Gdk.EventType.BUTTON_RELEASE
         event.button = Gdk.BUTTON_SECONDARY
         self.ui.tvw_processes.event(event)
Beispiel #4
0
    def testMouseButton1(self):
        f = fourway.T("button1", "fourway")
        event = Gdk.EventButton()
        event.button = 1
        event.x, event.y = 1, 1
        widget = Gtk.Window()
        rectangle = Gdk.Rectangle()
        rectangle.width = 100
        rectangle.height = 100
        widget.size_allocate(rectangle)

        f.onButtonPress(widget, event)
        self.assertEqual(f.last_x, 1)

        event.x = 2
        f.onMotionNotify(widget, event)
        self.assertEqual(f.last_x, 2)

        f.onButtonRelease(widget, event)
        self.assertFalse(f.notice_mouse)
Beispiel #5
0
    def click_in_tree(view,
                      path=None,
                      column=0,
                      button=1,
                      events=pygps.single_click_events,
                      process_events=True,
                      control=False,
                      alt=False,
                      shift=False,
                      modifier=None,
                      through_gps=True):
        """Simulate a click in the TreeView on the given path and column.
           This event is sent asynchronously, and you should check its
           result in an idle callback, or call process_all_events() immediately
           after the call to click_in_tree.
           If path is none, the event is sent to the first selected row.

           modifier is a Gdk.ModifierType, overriding control, alt or shift.

           If you are using the third button to display a contextual menu, see
           also activate_contextual()

           To send a double-click, emit an event with type=Gdk._2BUTTON_PRESS
        """
        if not view.get_realized():
            GPS.Logger("TESTSUITE").log("click_in_tree: view is not realized")
            return

        if (os.name == 'nt' and button == 3
                and events == pygps.single_click_events):
            # ??? work around
            # On Windows sending a BUTTON_PRESS followed by a
            # BUTTON_RELEASE event when opening a contextual menu does
            # not work. The BUTTON_RELEASE close the contextual menu.
            # For now we remove this event.
            events = events[:1]

        if not path:
            path = view.get_selection().get_selected_rows()[1][0]
        rect = view.get_cell_area(path, view.get_column(column))

        x = float(rect.x + rect.width / 2)
        y = float(rect.y + rect.height / 2)

        if modifier is not None:
            state = modifier
        else:
            state = Gdk.ModifierType(0)
            if control:
                if sys.platform == 'darwin':
                    # on Mac, we need to also pass the Command key
                    state |= Gdk.ModifierType.MOD2_MASK
                else:
                    state |= Gdk.ModifierType.CONTROL_MASK

            if shift:
                state |= Gdk.ModifierType.SHIFT_MASK
            if alt:
                state |= Gdk.ModifierType.MOD1_MASK

        # TreeView doesn't handle single click well without
        # getting "enter-notify-event" first
        if through_gps:
            GPS.send_crossing_event(type=Gdk.EventType.ENTER_NOTIFY,
                                    window=view.get_bin_window(),
                                    x=int(x),
                                    y=int(y),
                                    state=0)
        else:
            event = Gdk.EventCrossing()
            event.type = Gdk.EventType.ENTER_NOTIFY
            event.window = view.get_bin_window()
            event.device = pygps.default_event_device()
            event.x = x
            event.y = y
            event.state = 0
            event.put()

        for t in events:
            if through_gps:
                GPS.send_button_event(button=button,
                                      x=int(x),
                                      y=int(y),
                                      window=view.get_bin_window(),
                                      state=state,
                                      type=t)
            else:
                # event = Gdk.Event.new(t)
                event = Gdk.EventButton()
                event.type = t
                event.window = view.get_bin_window()
                event.device = pygps.default_event_device()
                event.button = button
                event.x = x
                event.y = y
                event.state = state
                event.put()

        if process_events:
            pygps.process_all_events()