apprt/gtk: detect keyboard modifier state for mouse events

This commit is contained in:
Mitchell Hashimoto
2023-09-26 12:37:59 -07:00
parent 8afed937d8
commit 8c4d25050a
2 changed files with 13 additions and 2 deletions

View File

@ -1447,6 +1447,8 @@ pub fn mouseButtonCallback(
button: input.MouseButton, button: input.MouseButton,
mods: input.Mods, mods: input.Mods,
) !void { ) !void {
// log.debug("mouse action={} button={} mods={}", .{ action, button, mods });
const tracy = trace(@src()); const tracy = trace(@src());
defer tracy.end(); defer tracy.end();

View File

@ -612,7 +612,11 @@ fn gtkMouseDown(
ud: ?*anyopaque, ud: ?*anyopaque,
) callconv(.C) void { ) callconv(.C) void {
const self = userdataSelf(ud.?); 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 button = translateMouseButton(c.gtk_gesture_single_get_current_button(@ptrCast(gesture)));
const mods = translateMods(gtk_mods);
// If we don't have focus, grab it. // If we don't have focus, grab it.
const gl_widget = @as(*c.GtkWidget, @ptrCast(self.gl_area)); const gl_widget = @as(*c.GtkWidget, @ptrCast(self.gl_area));
@ -620,7 +624,7 @@ fn gtkMouseDown(
_ = c.gtk_widget_grab_focus(gl_widget); _ = 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}); log.err("error in key callback err={}", .{err});
return; return;
}; };
@ -633,9 +637,14 @@ fn gtkMouseUp(
_: c.gdouble, _: c.gdouble,
ud: ?*anyopaque, ud: ?*anyopaque,
) callconv(.C) void { ) 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 button = translateMouseButton(c.gtk_gesture_single_get_current_button(@ptrCast(gesture)));
const mods = translateMods(gtk_mods);
const self = userdataSelf(ud.?); 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}); log.err("error in key callback err={}", .{err});
return; return;
}; };