@@ -753,21 +753,45 @@ static gboolean _input_event(GtkWidget *widget,
753753 case GDK_TOUCHPAD_PINCH :
754754 case GDK_TOUCHPAD_SWIPE :
755755 _touchpad = gdk_event_get_source_device (event );
756+ if (_touchpad )
757+ {
758+ dt_print (DT_DEBUG_INPUT ,
759+ "[touchpad] gesture event type=%d source='%s' source_type=%d" ,
760+ event -> type ,
761+ gdk_device_get_name (_touchpad ),
762+ gdk_device_get_source (_touchpad ));
763+ }
764+ else
765+ {
766+ dt_print (DT_DEBUG_INPUT ,
767+ "[touchpad] gesture event type=%d without source device" ,
768+ event -> type );
769+ }
756770 break ;
757771 default :
758772 break ;
759773 }
760774
761- if (event -> type == GDK_TOUCHPAD_PINCH )
762775 if (event -> type == GDK_TOUCHPAD_PINCH && _touchpad_gestures_enabled ())
763776 {
764777 const GdkEventTouchpadPinch * pinch = & event -> touchpad_pinch ;
778+ dt_print (DT_DEBUG_INPUT ,
779+ "[touchpad] pinch x=%.2f y=%.2f phase=%d scale=%.6f state=0x%x" ,
780+ pinch -> x , pinch -> y , pinch -> phase , pinch -> scale , pinch -> state );
765781 if (dt_view_manager_gesture_pinch (darktable .view_manager , pinch -> x , pinch -> y ,
766782 pinch -> phase , pinch -> scale , pinch -> state & 0xf ))
767783 {
768784 gtk_widget_queue_draw (widget );
769785 return TRUE;
770786 }
787+
788+ dt_print (DT_DEBUG_INPUT ,
789+ "[touchpad] pinch ignored by current view" );
790+ }
791+ else if (event -> type == GDK_TOUCHPAD_PINCH )
792+ {
793+ dt_print (DT_DEBUG_INPUT ,
794+ "[touchpad] pinch received but disabled by preference darkroom/ui/touchpad_gestures" );
771795 }
772796
773797 return FALSE;
@@ -779,31 +803,67 @@ static gboolean _scrolled(GtkWidget *widget,
779803{
780804 (void )user_data ;
781805 GdkDevice * device = gdk_event_get_source_device ((GdkEvent * )event );
782-
783- if (_touchpad_gestures_enabled ()
784- && !dt_modifier_is (event -> state , GDK_CONTROL_MASK )
785- && ((device && gdk_device_get_source (device ) == GDK_SOURCE_TOUCHPAD )
786- || device == _touchpad )
806+ const gboolean touchpad_enabled = _touchpad_gestures_enabled ();
807+ const gboolean ctrl_pressed = dt_modifier_is (event -> state , GDK_CONTROL_MASK );
808+ const gboolean is_touchpad_source = device && gdk_device_get_source (device ) == GDK_SOURCE_TOUCHPAD ;
809+ const gboolean matches_last_gesture_device = (device == _touchpad );
810+
811+ if (touchpad_enabled
812+ && !ctrl_pressed
813+ && (is_touchpad_source || matches_last_gesture_device )
787814 && event -> direction == GDK_SCROLL_SMOOTH && !event -> is_stop )
788815 {
789816 gdouble delta_x = 0.0 , delta_y = 0.0 ;
790817 if (!dt_gui_get_scroll_deltas (event , & delta_x , & delta_y ))
818+ {
819+ dt_print (DT_DEBUG_INPUT ,
820+ "[touchpad] smooth scroll ignored (likely pointer emulated), source='%s' source_type=%d" ,
821+ device ? gdk_device_get_name (device ) : "<none>" ,
822+ device ? gdk_device_get_source (device ) : -1 );
791823 return TRUE;
824+ }
792825
793826 delta_x *= DT_UI_SCROLL_SMOOTH_DELTA_SCALE ;
794827 delta_y *= DT_UI_SCROLL_SMOOTH_DELTA_SCALE ;
795828 if ((delta_x != 0.0 || delta_y != 0.0 )
796829 && dt_view_manager_gesture_pan (darktable .view_manager , event -> x , event -> y ,
797830 delta_x , delta_y , event -> state & 0xf ))
798831 {
832+ dt_print (DT_DEBUG_INPUT ,
833+ "[touchpad] pan x=%.2f y=%.2f dx=%.3f dy=%.3f source='%s'" ,
834+ event -> x , event -> y , delta_x , delta_y ,
835+ device ? gdk_device_get_name (device ) : "<none>" );
799836 gtk_widget_queue_draw (widget );
800837 return TRUE;
801838 }
839+ else if (delta_x != 0.0 || delta_y != 0.0 )
840+ {
841+ dt_print (DT_DEBUG_INPUT ,
842+ "[touchpad] pan not handled by current view (no gesture_pan handler?)"
843+ " dx=%.3f dy=%.3f" ,
844+ delta_x , delta_y );
845+ }
846+ }
847+ else if (event -> direction == GDK_SCROLL_SMOOTH && !event -> is_stop )
848+ {
849+ dt_print (DT_DEBUG_INPUT ,
850+ "[touchpad] smooth scroll not treated as pan: enabled=%d ctrl=%d touchpad_source=%d matches_last_gesture=%d source='%s' source_type=%d" ,
851+ touchpad_enabled ,
852+ ctrl_pressed ,
853+ is_touchpad_source ,
854+ matches_last_gesture_device ,
855+ device ? gdk_device_get_name (device ) : "<none>" ,
856+ device ? gdk_device_get_source (device ) : -1 );
802857 }
803858
804859 int delta_y ;
805860 if (dt_gui_get_scroll_unit_delta (event , & delta_y ))
806861 {
862+ dt_print (DT_DEBUG_INPUT ,
863+ "[scroll] discrete fallback x=%.2f y=%.2f up=%d state=0x%x source='%s' source_type=%d" ,
864+ event -> x , event -> y , delta_y < 0 , event -> state ,
865+ device ? gdk_device_get_name (device ) : "<none>" ,
866+ device ? gdk_device_get_source (device ) : -1 );
807867 dt_view_manager_scrolled (darktable .view_manager , event -> x , event -> y ,
808868 delta_y < 0 ,
809869 event -> state & 0xf );
0 commit comments