diff --git a/src/Surface.zig b/src/Surface.zig index fe15e7659..f4979a8e2 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -1447,6 +1447,8 @@ pub fn mouseButtonCallback( button: input.MouseButton, mods: input.Mods, ) !void { + // log.debug("mouse action={} button={} mods={}", .{ action, button, mods }); + const tracy = trace(@src()); defer tracy.end(); diff --git a/src/apprt/gtk/Surface.zig b/src/apprt/gtk/Surface.zig index 6212ed2c1..09aa6206a 100644 --- a/src/apprt/gtk/Surface.zig +++ b/src/apprt/gtk/Surface.zig @@ -612,7 +612,11 @@ fn gtkMouseDown( ud: ?*anyopaque, ) callconv(.C) void { 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))); + const mods = translateMods(gtk_mods); // If we don't have focus, grab it. const gl_widget = @as(*c.GtkWidget, @ptrCast(self.gl_area)); @@ -620,7 +624,7 @@ fn gtkMouseDown( _ = c.gtk_widget_grab_focus(gl_widget); } - self.core_surface.mouseButtonCallback(.press, button, .{}) catch |err| { + self.core_surface.mouseButtonCallback(.press, button, mods) catch |err| { log.err("error in key callback err={}", .{err}); return; }; @@ -633,9 +637,14 @@ fn gtkMouseUp( _: c.gdouble, ud: ?*anyopaque, ) callconv(.C) void { + 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))); + const mods = translateMods(gtk_mods); + const self = userdataSelf(ud.?); - self.core_surface.mouseButtonCallback(.release, button, .{}) catch |err| { + self.core_surface.mouseButtonCallback(.release, button, mods) catch |err| { log.err("error in key callback err={}", .{err}); return; };