13
0

Align the currently selected automation state on dropdown

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.
This commit is contained in:
Julien "_FrnchFrgg_" RIVAUD 2016-08-17 21:14:47 +02:00
parent 9702020929
commit 606ffe6a35
2 changed files with 15 additions and 7 deletions

View 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

View 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);