From 729f9309743a56d2aa98de408774385c241a8862 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 18 Apr 2022 11:38:21 -0600 Subject: [PATCH] bindings: add a mechanism to prevent binding activation during drag --- libs/gtkmm2ext/bindings.cc | 7 +++++++ libs/gtkmm2ext/gtkmm2ext/bindings.h | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/libs/gtkmm2ext/bindings.cc b/libs/gtkmm2ext/bindings.cc index 3bf927df9d..214cb22909 100644 --- a/libs/gtkmm2ext/bindings.cc +++ b/libs/gtkmm2ext/bindings.cc @@ -46,6 +46,7 @@ using namespace PBD; list Bindings::bindings; /* global. Gulp */ PBD::Signal1 Bindings::BindingsChanged; +int Bindings::_drag_active = 0; template struct ActionNameRegistered @@ -492,6 +493,12 @@ Bindings::activate (KeyboardKey kb, Operation op) action = ActionManager::get_action (k->second.action_name, false); } + /* bindings cannot be used during drags */ + + if (_drag_active) { + return true; + } + if (action) { /* lets do it ... */ if (action->get_sensitive()) { diff --git a/libs/gtkmm2ext/gtkmm2ext/bindings.h b/libs/gtkmm2ext/gtkmm2ext/bindings.h index 9f33d5cffd..5c2b718c30 100644 --- a/libs/gtkmm2ext/gtkmm2ext/bindings.h +++ b/libs/gtkmm2ext/gtkmm2ext/bindings.h @@ -167,6 +167,15 @@ class LIBGTKMM2EXT_API Bindings { static PBD::Signal1 BindingsChanged; + struct DragsBlockBindings { + DragsBlockBindings() { Bindings::_drag_active++; } + ~DragsBlockBindings() { + if (Bindings::_drag_active--) { + Bindings::_drag_active--; + } + } + }; + private: std::string _name; KeybindingMap press_bindings; @@ -197,6 +206,8 @@ class LIBGTKMM2EXT_API Bindings { */ static std::string ardour_action_name (Glib::RefPtr); + static int _drag_active; + friend struct DragsBlockBindings; }; } // namespace