From 081125a829712293653aa13e1657e7df3e24ec99 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 16 Apr 2020 14:24:54 -0400 Subject: [PATCH 1/2] Save gesture state and turn off zoom tool during gesture. --- src/desktop.cpp | 8 ++++++++ src/desktop.h | 3 +++ src/ui/tools/zoom-tool.cpp | 3 +++ 3 files changed, 14 insertions(+) diff --git a/src/desktop.cpp b/src/desktop.cpp index 5cedbbc815..0968152bb0 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -92,6 +92,12 @@ static gdouble _pinch_begin_zoom = 1.; static void _pinch_begin_handler(GtkGesture *gesture, GdkEventSequence *sequence, SPDesktop *desktop) { _pinch_begin_zoom = desktop->current_zoom(); + desktop->active_gesture = true; +} + +static void _pinch_end_handler(GtkGesture *gesture, GdkEventSequence *sequence, SPDesktop *desktop) +{ + desktop->active_gesture = false; } static void _pinch_scale_changed_handler(GtkGesture *gesture, gdouble delta, SPDesktop *desktop) @@ -239,6 +245,8 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (zoomgesture), GTK_PHASE_CAPTURE); g_signal_connect(zoomgesture, "begin", G_CALLBACK(_pinch_begin_handler), this); g_signal_connect(zoomgesture, "scale-changed", G_CALLBACK(_pinch_scale_changed_handler), this); + g_signal_connect(zoomgesture, "end", G_CALLBACK(_pinch_end_handler), this); + g_signal_connect(zoomgesture, "cancel", G_CALLBACK(_pinch_end_handler), this); SP_CANVAS_ARENA (drawing)->drawing.delta = prefs->getDouble("/options/cursortolerance/value", 1.0); // default is 1 px diff --git a/src/desktop.h b/src/desktop.h index 74245d71d8..83b032b3c8 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -188,6 +188,9 @@ public: SPCSSAttr *current; ///< current style bool _focusMode; ///< Whether we're focused working or general working + // True when any Gtk3 gesture is active + bool active_gesture; + unsigned int dkey; unsigned int number; guint window_state; diff --git a/src/ui/tools/zoom-tool.cpp b/src/ui/tools/zoom-tool.cpp index 0372e8d6cf..2f49ea5242 100644 --- a/src/ui/tools/zoom-tool.cpp +++ b/src/ui/tools/zoom-tool.cpp @@ -78,6 +78,9 @@ bool ZoomTool::root_handler(GdkEvent* event) { bool ret = false; + // Tool is deactivated during gestures + if(desktop->active_gesture) return false; + switch (event->type) { case GDK_BUTTON_PRESS: { -- GitLab From 5cf461ed4b00cc62cab327d5225c8172cb1d663c Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 17 Apr 2020 00:13:34 -0400 Subject: [PATCH 2/2] Add g_warnigns to understand CRs issues --- src/desktop.cpp | 2 ++ src/ui/tools/zoom-tool.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/desktop.cpp b/src/desktop.cpp index 0968152bb0..6cb265d60f 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -93,11 +93,13 @@ static void _pinch_begin_handler(GtkGesture *gesture, GdkEventSequence *sequence { _pinch_begin_zoom = desktop->current_zoom(); desktop->active_gesture = true; + g_warning(" <<< Pinch BEGIN!"); } static void _pinch_end_handler(GtkGesture *gesture, GdkEventSequence *sequence, SPDesktop *desktop) { desktop->active_gesture = false; + g_warning(" >>> Pinch END!"); } static void _pinch_scale_changed_handler(GtkGesture *gesture, gdouble delta, SPDesktop *desktop) diff --git a/src/ui/tools/zoom-tool.cpp b/src/ui/tools/zoom-tool.cpp index 2f49ea5242..b4f3b3284e 100644 --- a/src/ui/tools/zoom-tool.cpp +++ b/src/ui/tools/zoom-tool.cpp @@ -79,7 +79,7 @@ bool ZoomTool::root_handler(GdkEvent* event) { bool ret = false; // Tool is deactivated during gestures - if(desktop->active_gesture) return false; + //if(desktop->active_gesture) return false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -88,6 +88,7 @@ bool ZoomTool::root_handler(GdkEvent* event) { Geom::Point const button_dt(desktop->w2d(button_w)); if (event->button.button == 1 && !this->space_panning) { + g_warning(" *** Zooming begin"); // save drag origin xp = (gint) event->button.x; yp = (gint) event->button.y; @@ -159,6 +160,7 @@ bool ZoomTool::root_handler(GdkEvent* event) { ret = true; } + g_warning(" *** Zooming stop"); Inkscape::Rubberband::get(desktop)->stop(); if (this->grabbed) { -- GitLab