do not create a Gtk::ColorSelectionDialog for every trigger/slot, create on demand
This commit is contained in:
parent
14973bd894
commit
e23f79a8a9
@ -77,6 +77,7 @@ TriggerUI::TriggerUI ()
|
|||||||
, _follow_context_menu (0)
|
, _follow_context_menu (0)
|
||||||
, _context_menu (0)
|
, _context_menu (0)
|
||||||
, _ignore_menu_action (false)
|
, _ignore_menu_action (false)
|
||||||
|
, _color_dialog (nullptr)
|
||||||
{
|
{
|
||||||
if (follow_strings.empty()) {
|
if (follow_strings.empty()) {
|
||||||
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::None)));
|
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::None)));
|
||||||
@ -120,6 +121,7 @@ TriggerUI::TriggerUI ()
|
|||||||
|
|
||||||
TriggerUI::~TriggerUI()
|
TriggerUI::~TriggerUI()
|
||||||
{
|
{
|
||||||
|
delete _color_dialog;
|
||||||
trigger_swap_connection.disconnect ();
|
trigger_swap_connection.disconnect ();
|
||||||
trigger_connections.drop_connections ();
|
trigger_connections.drop_connections ();
|
||||||
}
|
}
|
||||||
@ -142,19 +144,23 @@ TriggerUI::trigger_swap (uint32_t n)
|
|||||||
void
|
void
|
||||||
TriggerUI::choose_color ()
|
TriggerUI::choose_color ()
|
||||||
{
|
{
|
||||||
_color_dialog.get_color_selection()->set_has_opacity_control (false);
|
if (!_color_dialog) {
|
||||||
_color_dialog.get_color_selection()->set_has_palette (true);
|
_color_dialog = new Gtk::ColorSelectionDialog;
|
||||||
_color_dialog.get_ok_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (_color_dialog, &Gtk::Dialog::response), Gtk::RESPONSE_ACCEPT));
|
}
|
||||||
_color_dialog.get_cancel_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (_color_dialog, &Gtk::Dialog::response), Gtk::RESPONSE_CANCEL));
|
|
||||||
|
_color_dialog->get_color_selection()->set_has_opacity_control (false);
|
||||||
|
_color_dialog->get_color_selection()->set_has_palette (true);
|
||||||
|
_color_dialog->get_ok_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (_color_dialog, &Gtk::Dialog::response), Gtk::RESPONSE_ACCEPT));
|
||||||
|
_color_dialog->get_cancel_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (_color_dialog, &Gtk::Dialog::response), Gtk::RESPONSE_CANCEL));
|
||||||
|
|
||||||
Gdk::Color c = Gtkmm2ext::gdk_color_from_rgba(trigger()->color());
|
Gdk::Color c = Gtkmm2ext::gdk_color_from_rgba(trigger()->color());
|
||||||
|
|
||||||
_color_dialog.get_color_selection()->set_previous_color (c);
|
_color_dialog->get_color_selection()->set_previous_color (c);
|
||||||
_color_dialog.get_color_selection()->set_current_color (c);
|
_color_dialog->get_color_selection()->set_current_color (c);
|
||||||
|
|
||||||
switch (_color_dialog.run()) {
|
switch (_color_dialog->run()) {
|
||||||
case Gtk::RESPONSE_ACCEPT: {
|
case Gtk::RESPONSE_ACCEPT: {
|
||||||
c = _color_dialog.get_color_selection()->get_current_color();
|
c = _color_dialog->get_color_selection()->get_current_color();
|
||||||
color_t ct = Gtkmm2ext::gdk_color_to_rgba(c);
|
color_t ct = Gtkmm2ext::gdk_color_to_rgba(c);
|
||||||
trigger()->set_color(ct);
|
trigger()->set_color(ct);
|
||||||
} break;
|
} break;
|
||||||
@ -162,7 +168,7 @@ TriggerUI::choose_color ()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_color_dialog.hide ();
|
_color_dialog->hide ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -122,7 +122,7 @@ protected:
|
|||||||
Gtk::Menu* _context_menu;
|
Gtk::Menu* _context_menu;
|
||||||
bool _ignore_menu_action;
|
bool _ignore_menu_action;
|
||||||
|
|
||||||
Gtk::ColorSelectionDialog _color_dialog;
|
Gtk::ColorSelectionDialog* _color_dialog;
|
||||||
|
|
||||||
void trigger_swap (uint32_t);
|
void trigger_swap (uint32_t);
|
||||||
PBD::ScopedConnection trigger_swap_connection;
|
PBD::ScopedConnection trigger_swap_connection;
|
||||||
|
Loading…
Reference in New Issue
Block a user