diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index 1f78b39177..33a136ca75 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -66,6 +66,7 @@ using namespace PBD; TriggerEntry::TriggerEntry (Item* item, TriggerReference tr) : ArdourCanvas::Rectangle (item) + , _grabbed (false) { set_layout_sensitive (true); // why??? @@ -642,7 +643,14 @@ TriggerEntry::play_button_event (GdkEvent* ev) case GDK_BUTTON_PRESS: switch (ev->button.button) { case 1: - trigger()->bang (); + if (trigger()->launch_style () == Trigger::Gate || + trigger()->launch_style () == Trigger::Repeat) { + trigger()->bang (); + _grabbed = true; + play_button->grab(); + } else { + trigger()->bang (); + } return true; default: break; @@ -651,9 +659,10 @@ TriggerEntry::play_button_event (GdkEvent* ev) case GDK_BUTTON_RELEASE: switch (ev->button.button) { case 1: - if (trigger()->launch_style () == Trigger::Gate || - trigger()->launch_style () == Trigger::Repeat) { + if (_grabbed) { trigger()->unbang (); + play_button->ungrab(); + _grabbed = false; } break; case 3: diff --git a/gtk2_ardour/triggerbox_ui.h b/gtk2_ardour/triggerbox_ui.h index 4dabc07b09..90aa1cd73f 100644 --- a/gtk2_ardour/triggerbox_ui.h +++ b/gtk2_ardour/triggerbox_ui.h @@ -73,6 +73,8 @@ public: bool follow_button_event (GdkEvent*); private: + bool _grabbed; + double _poly_size; double _poly_margin; @@ -109,6 +111,8 @@ private: void drag_leave (Glib::RefPtr const&, guint); void drag_data_received (Glib::RefPtr const&, int, int, Gtk::SelectionData const&, guint, guint); + bool triggerbox_event (GdkEvent*); + uint64_t slot_at_y (int) const; sigc::connection _update_connection;