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)
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)
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()