@@ -730,10 +730,41 @@ static gboolean _draw(GtkWidget *da,
730730 return TRUE;
731731}
732732
733+ static gboolean _input_event (GtkWidget * widget ,
734+ GdkEvent * event ,
735+ gpointer user_data )
736+ {
737+ (void )user_data ;
738+
739+ if (event -> type == GDK_TOUCHPAD_PINCH )
740+ {
741+ const GdkEventTouchpadPinch * pinch = & event -> touchpad_pinch ;
742+ if (dt_view_manager_gesture_pinch (darktable .view_manager , pinch -> x , pinch -> y ,
743+ pinch -> phase , pinch -> scale , pinch -> state & 0xf ))
744+ {
745+ gtk_widget_queue_draw (widget );
746+ return TRUE;
747+ }
748+ }
749+
750+ return FALSE;
751+ }
752+
733753static gboolean _scrolled (GtkWidget * widget ,
734754 const GdkEventScroll * event ,
735755 gpointer user_data )
736756{
757+ (void )user_data ;
758+
759+ if (event -> direction == GDK_SCROLL_SMOOTH && !event -> is_stop
760+ && (event -> delta_x != 0.0 || event -> delta_y != 0.0 )
761+ && dt_view_manager_gesture_pan (darktable .view_manager , event -> x , event -> y ,
762+ event -> delta_x , event -> delta_y , event -> state & 0xf ))
763+ {
764+ gtk_widget_queue_draw (widget );
765+ return TRUE;
766+ }
767+
737768 int delta_y ;
738769 if (dt_gui_get_scroll_unit_delta (event , & delta_y ))
739770 {
@@ -1481,10 +1512,13 @@ int dt_gui_gtk_init(dt_gui_gtk_t *gui)
14811512 gtk_widget_add_events (widget ,
14821513 GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK
14831514 | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK
1484- | GDK_LEAVE_NOTIFY_MASK | darktable .gui -> scroll_mask );
1515+ | GDK_LEAVE_NOTIFY_MASK | GDK_TOUCHPAD_GESTURE_MASK
1516+ | darktable .gui -> scroll_mask );
14851517
14861518 g_signal_connect (G_OBJECT (widget ), "draw" ,
14871519 G_CALLBACK (_draw ), NULL );
1520+ g_signal_connect (G_OBJECT (widget ), "event" ,
1521+ G_CALLBACK (_input_event ), NULL );
14881522 g_signal_connect (G_OBJECT (widget ), "motion-notify-event" ,
14891523 G_CALLBACK (_mouse_moved ), gui );
14901524 g_signal_connect (G_OBJECT (widget ), "leave-notify-event" ,
0 commit comments