From c4d8145dd31b15e7c54fe51e1482690dc2567cf6 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Mon, 31 Jul 2023 18:29:08 +0200 Subject: [PATCH] image: Deny drag gesture for touchscreens ScrolledWindow can handle the panning in images better than we can. This fixes an issue where zoomed in images can't be zoomed or rotated on touchscreens. Issue #176 Part-of: --- src/widgets/image.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/widgets/image.rs b/src/widgets/image.rs index f95cddd..a548e81 100644 --- a/src/widgets/image.rs +++ b/src/widgets/image.rs @@ -421,14 +421,16 @@ mod imp { drag_gesture.connect_drag_begin(glib::clone!(@weak obj => move |gesture, _, _| { // Allow only left and middle button - if ![1, 2].contains(&gesture.current_button()) { + if ![1, 2].contains(&gesture.current_button()) + // Drag gesture for touchscreens is handled by ScrolledWindow + || gesture.device().map(|x| x.source()) == Some(gdk::InputSource::Touchscreen) + { gesture.set_state(gtk::EventSequenceState::Denied); return; } if obj.is_hscrollable() || obj.is_vscrollable() { obj.cancel_deceleration(); - gesture.set_state(gtk::EventSequenceState::Claimed); obj.set_cursor(gdk::Cursor::from_name("grabbing", None).as_ref()); obj.imp().last_drag_value.set(Some((0., 0.))); } else {