Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e18cfda

Browse filesBrowse files
committed
FIX: Add version gate to GTK4 calls when necessary
get_current_event() calls within pygobject would cause segfaults. This was fixed in 3.47, so gate the guiEvent information to only access that method in versions that don't segfault.
1 parent dc63ec7 commit e18cfda
Copy full SHA for e18cfda

File tree

Expand file treeCollapse file tree

1 file changed

+10
-8
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+10
-8
lines changed

‎lib/matplotlib/backends/backend_gtk4.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_gtk4.py
+10-8Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
TimerGTK as TimerGTK4,
3030
)
3131

32+
_GOBJECT_GE_3_47 = gi.version_info >= (3, 47, 0)
33+
3234

3335
class FigureCanvasGTK4(_FigureCanvasGTK, Gtk.DrawingArea):
3436
required_interactive_framework = "gtk4"
@@ -115,7 +117,7 @@ def scroll_event(self, controller, dx, dy):
115117
MouseEvent(
116118
"scroll_event", self, *self._mpl_coords(), step=dy,
117119
modifiers=self._mpl_modifiers(controller),
118-
guiEvent=controller.get_current_event(),
120+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
119121
)._process()
120122
return True
121123

@@ -124,7 +126,7 @@ def button_press_event(self, controller, n_press, x, y):
124126
"button_press_event", self, *self._mpl_coords((x, y)),
125127
controller.get_current_button(),
126128
modifiers=self._mpl_modifiers(controller),
127-
guiEvent=controller.get_current_event(),
129+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
128130
)._process()
129131
self.grab_focus()
130132

@@ -133,22 +135,22 @@ def button_release_event(self, controller, n_press, x, y):
133135
"button_release_event", self, *self._mpl_coords((x, y)),
134136
controller.get_current_button(),
135137
modifiers=self._mpl_modifiers(controller),
136-
guiEvent=controller.get_current_event(),
138+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
137139
)._process()
138140

139141
def key_press_event(self, controller, keyval, keycode, state):
140142
KeyEvent(
141143
"key_press_event", self, self._get_key(keyval, keycode, state),
142144
*self._mpl_coords(),
143-
guiEvent=controller.get_current_event(),
145+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
144146
)._process()
145147
return True
146148

147149
def key_release_event(self, controller, keyval, keycode, state):
148150
KeyEvent(
149151
"key_release_event", self, self._get_key(keyval, keycode, state),
150152
*self._mpl_coords(),
151-
guiEvent=controller.get_current_event(),
153+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
152154
)._process()
153155
return True
154156

@@ -157,21 +159,21 @@ def motion_notify_event(self, controller, x, y):
157159
"motion_notify_event", self, *self._mpl_coords((x, y)),
158160
buttons=self._mpl_buttons(controller),
159161
modifiers=self._mpl_modifiers(controller),
160-
guiEvent=controller.get_current_event(),
162+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
161163
)._process()
162164

163165
def enter_notify_event(self, controller, x, y):
164166
LocationEvent(
165167
"figure_enter_event", self, *self._mpl_coords((x, y)),
166168
modifiers=self._mpl_modifiers(),
167-
guiEvent=controller.get_current_event(),
169+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
168170
)._process()
169171

170172
def leave_notify_event(self, controller):
171173
LocationEvent(
172174
"figure_leave_event", self, *self._mpl_coords(),
173175
modifiers=self._mpl_modifiers(),
174-
guiEvent=controller.get_current_event(),
176+
guiEvent=controller.get_current_event() if _GOBJECT_GE_3_47 else None,
175177
)._process()
176178

177179
def resize_event(self, area, width, height):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.