mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
apprt/gtk: detect keyboard modifier state for mouse events
This commit is contained in:
@ -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();
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user