mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
apprt/gtk: handle nullable event from event controller
gtk_event_controller_get_current_event() is documented to possibly return NULL. Fixes: https://github.com/ghostty-org/ghostty/issues/2022 Fixes: https://github.com/ghostty-org/ghostty/issues/3088 Link: https://docs.gtk.org/gtk4/method.EventController.get_current_event.html Signed-off-by: Tristan Partin <tristan@partin.io>
This commit is contained in:
@ -386,6 +386,7 @@ fn keyEvent(
|
||||
|
||||
// Try to process the event as text
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(ec_key));
|
||||
if (event != null)
|
||||
_ = c.gtk_im_context_filter_keypress(self.im_context, event);
|
||||
|
||||
return true;
|
||||
|
@ -1341,8 +1341,9 @@ fn gtkMouseDown(
|
||||
y: c.gdouble,
|
||||
ud: ?*anyopaque,
|
||||
) callconv(.C) void {
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(gesture)) orelse return;
|
||||
|
||||
const self = userdataSelf(ud.?);
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(gesture));
|
||||
const gtk_mods = c.gdk_event_get_modifier_state(event);
|
||||
|
||||
const button = translateMouseButton(c.gtk_gesture_single_get_current_button(@ptrCast(gesture)));
|
||||
@ -1374,7 +1375,8 @@ fn gtkMouseUp(
|
||||
_: c.gdouble,
|
||||
ud: ?*anyopaque,
|
||||
) callconv(.C) void {
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(gesture));
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(gesture)) orelse return;
|
||||
|
||||
const gtk_mods = c.gdk_event_get_modifier_state(event);
|
||||
|
||||
const button = translateMouseButton(c.gtk_gesture_single_get_current_button(@ptrCast(gesture)));
|
||||
@ -1393,6 +1395,8 @@ fn gtkMouseMotion(
|
||||
y: c.gdouble,
|
||||
ud: ?*anyopaque,
|
||||
) callconv(.C) void {
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(ec)) orelse return;
|
||||
|
||||
const self = userdataSelf(ud.?);
|
||||
const scaled = self.scaledCoordinates(x, y);
|
||||
|
||||
@ -1401,13 +1405,6 @@ fn gtkMouseMotion(
|
||||
.y = @floatCast(scaled.y),
|
||||
};
|
||||
|
||||
// GTK can send spurious mouse movement events. Ignore them
|
||||
// because this can cause actual issues:
|
||||
// https://github.com/ghostty-org/ghostty/issues/2022
|
||||
if (pos.x == self.cursor_pos.x and pos.y == self.cursor_pos.y) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Our pos changed, update
|
||||
self.cursor_pos = pos;
|
||||
|
||||
@ -1418,7 +1415,6 @@ fn gtkMouseMotion(
|
||||
}
|
||||
|
||||
// Get our modifiers
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(ec));
|
||||
const gtk_mods = c.gdk_event_get_modifier_state(event);
|
||||
const mods = gtk_key.translateMods(gtk_mods);
|
||||
|
||||
@ -1432,10 +1428,11 @@ fn gtkMouseLeave(
|
||||
ec: *c.GtkEventControllerMotion,
|
||||
ud: ?*anyopaque,
|
||||
) callconv(.C) void {
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(ec)) orelse return;
|
||||
|
||||
const self = userdataSelf(ud.?);
|
||||
|
||||
// Get our modifiers
|
||||
const event = c.gtk_event_controller_get_current_event(@ptrCast(ec));
|
||||
const gtk_mods = c.gdk_event_get_modifier_state(event);
|
||||
const mods = gtk_key.translateMods(gtk_mods);
|
||||
self.core_surface.cursorPosCallback(.{ .x = -1, .y = -1 }, mods) catch |err| {
|
||||
@ -1536,11 +1533,12 @@ pub fn keyEvent(
|
||||
keycode: c.guint,
|
||||
gtk_mods: c.GdkModifierType,
|
||||
) bool {
|
||||
const keyval_unicode = c.gdk_keyval_to_unicode(keyval);
|
||||
const event = c.gtk_event_controller_get_current_event(
|
||||
@ptrCast(ec_key),
|
||||
) orelse return false;
|
||||
|
||||
const keyval_unicode = c.gdk_keyval_to_unicode(keyval);
|
||||
|
||||
// Get the unshifted unicode value of the keyval. This is used
|
||||
// by the Kitty keyboard protocol.
|
||||
const keyval_unicode_unshifted: u21 = gtk_key.keyvalUnicodeUnshifted(
|
||||
|
Reference in New Issue
Block a user