diff --git a/gtk2_ardour/cuebox_ui.cc b/gtk2_ardour/cuebox_ui.cc index 770e477d4a..f55a024cf4 100644 --- a/gtk2_ardour/cuebox_ui.cc +++ b/gtk2_ardour/cuebox_ui.cc @@ -34,6 +34,7 @@ #include "gtkmm2ext/actions.h" #include "gtkmm2ext/colors.h" +#include "gtkmm2ext/keyboard.h" #include "gtkmm2ext/utils.h" #include "ardour_ui.h" @@ -226,7 +227,7 @@ CueBoxUI::~CueBoxUI () } void -CueBoxUI::context_menu (uint64_t idx) +CueBoxUI::context_menu (GdkEventButton* ev, uint64_t idx) { using namespace Gtk; using namespace Gtk::Menu_Helpers; @@ -298,7 +299,7 @@ CueBoxUI::context_menu (uint64_t idx) items.push_back (SeparatorElem()); items.push_back (MenuElem (_("Clear All..."), sigc::bind (sigc::mem_fun (*this, &CueBoxUI::clear_all_triggers), idx))); - _context_menu->popup (3, gtk_get_current_event_time ()); + _context_menu->popup (ev->button, gtk_get_current_event_time ()); } void @@ -436,21 +437,15 @@ bool CueBoxUI::event (GdkEvent* ev, uint64_t n) { switch (ev->type) { - case GDK_BUTTON_PRESS: - if (ev->button.button==1) { - trigger_cue_row (n); - } - break; - case GDK_2BUTTON_PRESS: - break; - case GDK_BUTTON_RELEASE: - switch (ev->button.button) { - case 3: - context_menu (n); - return true; - } - default: - break; + case GDK_BUTTON_PRESS: + if (ev->button.button == 1) { + trigger_cue_row (n); + } else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) { + context_menu (&ev->button, n); + } + break; + default: + break; } return false; diff --git a/gtk2_ardour/cuebox_ui.h b/gtk2_ardour/cuebox_ui.h index cd7eff7d6b..12e9687558 100644 --- a/gtk2_ardour/cuebox_ui.h +++ b/gtk2_ardour/cuebox_ui.h @@ -84,7 +84,7 @@ private: bool text_event (GdkEvent*, uint64_t); void build (); - void context_menu (uint64_t idx); + void context_menu (GdkEventButton*, uint64_t idx); void get_slots (TriggerList &triggerlist, uint64_t idx); void clear_all_triggers(uint64_t idx); diff --git a/gtk2_ardour/trigger_master.cc b/gtk2_ardour/trigger_master.cc index 23276f6575..d197ffccb9 100644 --- a/gtk2_ardour/trigger_master.cc +++ b/gtk2_ardour/trigger_master.cc @@ -267,6 +267,9 @@ TriggerMaster::event_handler (GdkEvent* ev) } else { _triggerbox->stop_all_quantized (); } + break; + } else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) { + context_menu (&ev->button); } break; case GDK_ENTER_NOTIFY: @@ -281,11 +284,7 @@ TriggerMaster::event_handler (GdkEvent* ev) } redraw (); break; - case GDK_BUTTON_RELEASE: - switch (ev->button.button) { - case 3: - context_menu (); - } + default: break; } @@ -294,7 +293,7 @@ TriggerMaster::event_handler (GdkEvent* ev) } void -TriggerMaster::context_menu () +TriggerMaster::context_menu (GdkEventButton* ev) { using namespace Gtk; using namespace Gtk::Menu_Helpers; @@ -358,7 +357,7 @@ TriggerMaster::context_menu () items.push_back (SeparatorElem()); items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &TriggerMaster::clear_all_triggers))); - _context_menu->popup (1, gtk_get_current_event_time ()); + _context_menu->popup (ev->button, gtk_get_current_event_time ()); } void @@ -576,36 +575,32 @@ bool CueMaster::event_handler (GdkEvent* ev) { switch (ev->type) { - case GDK_BUTTON_PRESS: - if (ev->button.button == 1) { - if (Keyboard::modifier_state_equals (ev->button.state, Keyboard::PrimaryModifier)) { - _session->trigger_stop_all (true); //stop 'now' - } else { - _session->trigger_stop_all (false); //stop quantized (bar end) - } - return true; + case GDK_BUTTON_PRESS: + if (ev->button.button == 1) { + if (Keyboard::modifier_state_equals (ev->button.state, Keyboard::PrimaryModifier)) { + _session->trigger_stop_all (true); //stop 'now' + } else { + _session->trigger_stop_all (false); //stop quantized (bar end) } - break; - case GDK_BUTTON_RELEASE: - switch (ev->button.button) { - case 3: - context_menu (); - return true; - } - break; - case GDK_ENTER_NOTIFY: - if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - stop_shape->set_fill_color (UIConfiguration::instance ().color ("neutral:foreground")); - set_fill_color (HSV (fill_color ()).lighter (0.25).color ()); - } - break; - case GDK_LEAVE_NOTIFY: - if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - set_default_colors (); - } - break; - default: - break; + return true; + } else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) { + context_menu (&ev->button); + } + break; + case GDK_ENTER_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + stop_shape->set_fill_color (UIConfiguration::instance ().color ("neutral:foreground")); + set_fill_color (HSV (fill_color ()).lighter (0.25).color ()); + } + break; + case GDK_LEAVE_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + set_default_colors (); + } + break; + + default: + break; } return false; @@ -652,7 +647,7 @@ CueMaster::ui_parameter_changed (std::string const& p) } void -CueMaster::context_menu () +CueMaster::context_menu (GdkEventButton* ev) { using namespace Gtk; using namespace Gtk::Menu_Helpers; @@ -721,7 +716,7 @@ CueMaster::context_menu () items.push_back (SeparatorElem()); items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &CueMaster::clear_all_triggers))); - _context_menu->popup (3, gtk_get_current_event_time ()); + _context_menu->popup (ev->button, gtk_get_current_event_time ()); } void diff --git a/gtk2_ardour/trigger_master.h b/gtk2_ardour/trigger_master.h index c452c7787c..69f2b94fa7 100644 --- a/gtk2_ardour/trigger_master.h +++ b/gtk2_ardour/trigger_master.h @@ -79,7 +79,7 @@ public: void selection_change (); private: - void context_menu (); + void context_menu (GdkEventButton*); void clear_all_triggers(); void set_all_colors(); @@ -127,7 +127,7 @@ public: bool event_handler (GdkEvent*); private: - void context_menu (); + void context_menu (GdkEventButton*); void get_boxen (TriggerBoxList &boxlist); void clear_all_triggers(); diff --git a/gtk2_ardour/trigger_ui.cc b/gtk2_ardour/trigger_ui.cc index 4dbab205a1..9838d811c0 100644 --- a/gtk2_ardour/trigger_ui.cc +++ b/gtk2_ardour/trigger_ui.cc @@ -411,8 +411,7 @@ TriggerUI::context_menu () items.push_back (MenuElem (_("MIDI Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_learn))); items.push_back (MenuElem (_("MIDI un-Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_unlearn))); - - _context_menu->popup (3, gtk_get_current_event_time ()); + _context_menu->popup (1, gtk_get_current_event_time ()); } void @@ -547,7 +546,7 @@ TriggerUI::launch_context_menu () dynamic_cast (&items.back ())->set_active (true); } - _launch_context_menu->popup (3, gtk_get_current_event_time ()); + _launch_context_menu->popup (1, gtk_get_current_event_time ()); } void diff --git a/gtk2_ardour/triggerbox_ui.cc b/gtk2_ardour/triggerbox_ui.cc index f178f822fb..f6b17c5c68 100644 --- a/gtk2_ardour/triggerbox_ui.cc +++ b/gtk2_ardour/triggerbox_ui.cc @@ -627,42 +627,43 @@ bool TriggerEntry::name_button_event (GdkEvent* ev) { switch (ev->type) { - case GDK_ENTER_NOTIFY: - if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - set_widget_colors (NameEntered); - } - break; - case GDK_LEAVE_NOTIFY: - if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { - set_widget_colors (NoneEntered); - } - break; - case GDK_BUTTON_PRESS: - break; - case GDK_2BUTTON_PRESS: -#if SELECTION_PROPERTIES_BOX_TODO - edit_trigger (); -#endif + case GDK_ENTER_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + set_widget_colors (NameEntered); + } + break; + case GDK_LEAVE_NOTIFY: + if (ev->crossing.detail != GDK_NOTIFY_INFERIOR) { + set_widget_colors (NoneEntered); + } + break; + case GDK_BUTTON_PRESS: + if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) { + PublicEditor::instance ().get_selection ().set (this); + context_menu (); + return true; + } + break; + case GDK_2BUTTON_PRESS: +#if SELECTION_PROPERTIES_BOX_TODO + edit_trigger (); +#endif + return true; + case GDK_BUTTON_RELEASE: + if (Gtkmm2ext::Keyboard::is_delete_event (&ev->button)) { + clear_trigger (); + return true; + } + switch (ev->button.button) { + case 1: + PublicEditor::instance ().get_selection ().set (this); return true; - case GDK_BUTTON_RELEASE: - if (Gtkmm2ext::Keyboard::is_delete_event (&ev->button)) { - clear_trigger (); - return true; - } - switch (ev->button.button) { - case 3: - PublicEditor::instance ().get_selection ().set (this); - context_menu (); - return true; - case 1: - PublicEditor::instance ().get_selection ().set (this); - return true; - default: - break; - } - break; default: break; + } + break; + default: + break; } return false;