diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-16 02:52:09 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-16 02:52:09 +0000 |
commit | 5f42daa272e04d603a9e27b8f3a65b2cd9404896 (patch) | |
tree | 37a7201284b197a8f4ffb89c37114f76bccad3eb /gtk2_ardour/canvas_patch_change.cc | |
parent | 0ea8ba3f560bd90dfc8e5401d370176d7aa66734 (diff) |
do NOT call ProcessThread::init() **again** inside a freeze op, since this is a static, single-time call that sets up a per-thread (thread-private) storage key. Should fix #4722
git-svn-id: svn://localhost/ardour2/branches/3.0@12736 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas_patch_change.cc')
-rw-r--r-- | gtk2_ardour/canvas_patch_change.cc | 71 |
1 files changed, 45 insertions, 26 deletions
diff --git a/gtk2_ardour/canvas_patch_change.cc b/gtk2_ardour/canvas_patch_change.cc index ff28295c6e..2db31f1b5c 100644 --- a/gtk2_ardour/canvas_patch_change.cc +++ b/gtk2_ardour/canvas_patch_change.cc @@ -81,41 +81,60 @@ CanvasPatchChange::initialize_popup_menus() const ChannelNameSet::PatchBanks& patch_banks = channel_name_set->patch_banks(); - // fill popup menu: - Gtk::Menu::MenuList& patch_bank_menus = _popup.items(); - - for (ChannelNameSet::PatchBanks::const_iterator bank = patch_banks.begin(); - bank != patch_banks.end(); - ++bank) { - Gtk::Menu& patch_bank_menu = *manage(new Gtk::Menu()); - - const PatchBank::PatchNameList& patches = (*bank)->patch_name_list(); - Gtk::Menu::MenuList& patch_menus = patch_bank_menu.items(); + if (patch_banks.size() > 1) { + // fill popup menu: + Gtk::Menu::MenuList& patch_bank_menus = _popup.items(); + + for (ChannelNameSet::PatchBanks::const_iterator bank = patch_banks.begin(); + bank != patch_banks.end(); + ++bank) { + Gtk::Menu& patch_bank_menu = *manage(new Gtk::Menu()); + + const PatchBank::PatchNameList& patches = (*bank)->patch_name_list(); + Gtk::Menu::MenuList& patch_menus = patch_bank_menu.items(); + + for (PatchBank::PatchNameList::const_iterator patch = patches.begin(); + patch != patches.end(); + ++patch) { + std::string name = (*patch)->name(); + boost::replace_all (name, "_", " "); + + patch_menus.push_back( + Gtk::Menu_Helpers::MenuElem( + name, + sigc::bind( + sigc::mem_fun(*this, &CanvasPatchChange::on_patch_menu_selected), + (*patch)->patch_primary_key())) ); + } + + std::string name = (*bank)->name(); + boost::replace_all (name, "_", " "); + + patch_bank_menus.push_back( + Gtk::Menu_Helpers::MenuElem( + name, + patch_bank_menu) ); + } + } else { + /* only one patch bank, so make it the initial menu */ + const PatchBank::PatchNameList& patches = patch_banks.front()->patch_name_list(); + Gtk::Menu::MenuList& patch_menus = _popup.items(); + for (PatchBank::PatchNameList::const_iterator patch = patches.begin(); patch != patches.end(); ++patch) { std::string name = (*patch)->name(); boost::replace_all (name, "_", " "); - - patch_menus.push_back( - Gtk::Menu_Helpers::MenuElem( - name, - sigc::bind( - sigc::mem_fun(*this, &CanvasPatchChange::on_patch_menu_selected), - (*patch)->patch_primary_key())) ); + + patch_menus.push_back (Gtk::Menu_Helpers::MenuElem (name, + sigc::bind ( + sigc::mem_fun(*this, &CanvasPatchChange::on_patch_menu_selected), + (*patch)->patch_primary_key()))); } - - std::string name = (*bank)->name(); - boost::replace_all (name, "_", " "); - - patch_bank_menus.push_back( - Gtk::Menu_Helpers::MenuElem( - name, - patch_bank_menu) ); } } - + void CanvasPatchChange::on_patch_menu_selected(const PatchPrimaryKey& key) { |