From 6a985df81efcfbe21d077a66245e2ffc80c76a11 Mon Sep 17 00:00:00 2001 From: "Julien \"_FrnchFrgg_\" RIVAUD" Date: Tue, 16 Aug 2016 01:57:58 +0200 Subject: [PATCH] Replace positioning function with popup helper Because all uses of the function positioning menus anchored to a widget were as callback argument to Gtk::Menu::popup() where the caller needed to correctly bind arguments, this led to repeated and a bit obscure code. Wrap the logic into an helper function that takes care of all that, and update the callers. --- gtk2_ardour/ardour_dropdown.cc | 8 +------- gtk2_ardour/ardour_dropdown.h | 1 - gtk2_ardour/generic_pluginui.cc | 4 +--- libs/gtkmm2ext/gtkmm2ext/utils.h | 8 ++++---- libs/gtkmm2ext/utils.cc | 18 +++++++++++++++--- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc index 741db8c2ce..6c527f2d27 100644 --- a/gtk2_ardour/ardour_dropdown.cc +++ b/gtk2_ardour/ardour_dropdown.cc @@ -67,17 +67,11 @@ ArdourDropdown::menu_size_request(Requisition *req) { req->width = max(req->width, get_allocation().get_width()); } -void -ArdourDropdown::position_menu(int& x, int& y, bool& push_in) { - Gtkmm2ext::position_menu_anchored (&_menu, this, get_text(), x, y, push_in); -} - bool ArdourDropdown::on_button_press_event (GdkEventButton* ev) { if (ev->type == GDK_BUTTON_PRESS) { - _menu.popup (sigc::mem_fun(this, &ArdourDropdown::position_menu), - 1, ev->time); + Gtkmm2ext::anchored_menu_popup(&_menu, this, get_text(), 1, ev->time); } return true; } diff --git a/gtk2_ardour/ardour_dropdown.h b/gtk2_ardour/ardour_dropdown.h index 5a710ec539..c50304046d 100644 --- a/gtk2_ardour/ardour_dropdown.h +++ b/gtk2_ardour/ardour_dropdown.h @@ -38,7 +38,6 @@ class ArdourDropdown : public ArdourButton bool on_button_press_event (GdkEventButton*); bool on_scroll_event (GdkEventScroll*); - void position_menu(int&, int&, bool&); void menu_size_request(Gtk::Requisition*); void clear_items (); diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 7832dcfbfe..d1accfdd12 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -955,9 +955,7 @@ GenericPluginUI::astate_clicked (ControlUI* cui) items.push_back (MenuElem (_("Touch"), sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Touch, cui))); - automation_menu->popup ( - boost::bind (&Gtkmm2ext::position_menu_anchored, automation_menu, &cui->automate_button, "", _1, _2, _3), - 1, gtk_get_current_event_time()); + anchored_menu_popup(automation_menu, &cui->automate_button, "", 1, gtk_get_current_event_time()); } void diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h index bd09e29912..188da0862d 100644 --- a/libs/gtkmm2ext/gtkmm2ext/utils.h +++ b/libs/gtkmm2ext/gtkmm2ext/utils.h @@ -97,10 +97,10 @@ namespace Gtkmm2ext { int clip_height, Gdk::Color fg); - LIBGTKMM2EXT_API void position_menu_anchored (const Gtk::Menu* const menu, - Gtk::Widget* const anchor, - const std::string& selected, - int& x, int& y, bool& push_in); + LIBGTKMM2EXT_API void anchored_menu_popup (Gtk::Menu* const menu, + Gtk::Widget* const anchor, + const std::string& selected, + guint button, guint32 time); LIBGTKMM2EXT_API void set_popdown_strings (Gtk::ComboBoxText&, const std::vector&); diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc index 2b3a29fc0d..4ba85e2f25 100644 --- a/libs/gtkmm2ext/utils.cc +++ b/libs/gtkmm2ext/utils.cc @@ -310,10 +310,10 @@ Gtkmm2ext::pixbuf_from_string(const string& name, const Pango::FontDescription& } void -Gtkmm2ext::position_menu_anchored (const Gtk::Menu* const menu, +_position_menu_anchored (int& x, int& y, bool& push_in, + const Gtk::Menu* const menu, Gtk::Widget* const anchor, - const std::string& selected, - int& x, int& y, bool& push_in) { + const std::string& selected) { using namespace Gdk; using namespace Gtk; using namespace Gtk::Menu_Helpers; @@ -416,6 +416,18 @@ Gtkmm2ext::position_menu_anchored (const Gtk::Menu* const menu, push_in = false; } +void +Gtkmm2ext::anchored_menu_popup (Gtk::Menu* const menu, + Gtk::Widget* const anchor, + const std::string& selected, + guint button, guint32 time) { + menu->popup( + sigc::bind (sigc::ptr_fun(&_position_menu_anchored), + menu, anchor, selected), + button, + time); +} + void Gtkmm2ext::set_popdown_strings (Gtk::ComboBoxText& cr, const vector& strings) {