diff --git a/src/kgx-terminal.c b/src/kgx-terminal.c index b9ff115275dcb8beeacbbeed974aa07cf44ad462..fb2a06304dd217e15e4de9f1ba80a373bc444e14 100644 --- a/src/kgx-terminal.c +++ b/src/kgx-terminal.c @@ -751,6 +751,29 @@ dark_changed (KgxTerminal *self) } } +static gboolean +on_scroll (GtkEventControllerScroll *scroll, + double dx, + double dy, + KgxTerminal *self) +{ + GApplication *app = g_application_get_default (); + GdkModifierType mods = gtk_event_controller_get_current_event_state (GTK_EVENT_CONTROLLER (scroll)); + GAction *action = NULL; + + if ((mods & GDK_CONTROL_MASK) == 0 || dy == 0) { + return FALSE; + } + + if (dy > 0) { + action = g_action_map_lookup_action (G_ACTION_MAP (app), "zoom-in"); + } else { + action = g_action_map_lookup_action (G_ACTION_MAP (app), "zoom-out"); + } + + g_action_activate (action, NULL); + return TRUE; +} static void kgx_terminal_init (KgxTerminal *self) @@ -769,6 +792,14 @@ kgx_terminal_init (KgxTerminal *self) g_signal_connect (gesture, "pressed", G_CALLBACK (long_pressed), self); gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (gesture)); + controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); + gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); + g_signal_connect (controller, + "scroll", + G_CALLBACK (on_scroll), + self); + gtk_widget_add_controller (GTK_WIDGET (self), controller); + controller = gtk_shortcut_controller_new (); gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE); gtk_widget_add_controller (GTK_WIDGET (self), controller);