Align the currently selected automation state on dropdown
authorJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Wed, 17 Aug 2016 19:14:47 +0000 (21:14 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Wed, 17 Aug 2016 21:56:31 +0000 (23:56 +0200)
By passing the current text of the automation button we can make the
dropdown menu align with the current mode. This will only work for
full-size automation buttons, not when use-knob is true, but in that
case it feels wrong to popup on top of the button anyway.

Also make the menu show on mouse down like a real dropdown.

gtk2_ardour/generic_pluginui.cc
gtk2_ardour/plugin_ui.h

index d1accfdd12539f63b6eadc13f898b000376d4a35..c68c699cafe9ca3acc75ab078c0c43a37701adfa 100644 (file)
@@ -830,9 +830,10 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter&             param,
                        control_ui->automate_button.set_sensitive (false);
                        set_tooltip(control_ui->automate_button, _("This control cannot be automated"));
                } else {
-                       control_ui->automate_button.signal_clicked.connect (sigc::bind (
-                                               sigc::mem_fun(*this, &GenericPluginUI::astate_clicked),
-                                               control_ui));
+                       control_ui->automate_button.signal_button_press_event().connect (
+                                       sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::astate_button_event),
+                                                   control_ui),
+                                       false);
                        mcontrol->alist()->automation_state_changed.connect (
                                        control_connections,
                                        invalidator (*this),
@@ -932,9 +933,13 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter&             param,
        return control_ui;
 }
 
-void
-GenericPluginUI::astate_clicked (ControlUI* cui)
+bool
+GenericPluginUI::astate_button_event (GdkEventButton* ev, ControlUI* cui)
 {
+       if (ev->button != 1) {
+               return true;
+       }
+
        using namespace Menu_Helpers;
 
        if (automation_menu == 0) {
@@ -955,7 +960,10 @@ GenericPluginUI::astate_clicked (ControlUI* cui)
        items.push_back (MenuElem (_("Touch"),
                                   sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Touch, cui)));
 
-       anchored_menu_popup(automation_menu, &cui->automate_button, "", 1, gtk_get_current_event_time());
+       anchored_menu_popup(automation_menu, &cui->automate_button, cui->automate_button.get_text(),
+                           1, ev->time);
+
+       return true;
 }
 
 void
index 046890aa5227abd1d96b406aa22b870d8b0dd05a..57aa138af78dda3d727bf01aedd137852ad50042 100644 (file)
@@ -287,7 +287,7 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
        void update_input_displays (); // workaround for preset load
        void control_combo_changed (ControlUI* cui, float value);
 
-       void astate_clicked (ControlUI*);
+       bool astate_button_event (GdkEventButton* ev, ControlUI*);
        void automation_state_changed (ControlUI*);
        void set_automation_state (ARDOUR::AutoState state, ControlUI* cui);
        void set_all_automation (ARDOUR::AutoState state);