X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_dropdown.cc;h=6c527f2d27b356721bbc7cd71ab5c51fa24ba5db;hb=b2aaffadc51ad38939e52d5f792e3e9a098ff2d7;hp=221fe672d965cc3a3181f93a80d511ce1974979a;hpb=38bae2996a1a89622fb23817082d78ad213327fb;p=ardour.git diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc index 221fe672d9..6c527f2d27 100644 --- a/gtk2_ardour/ardour_dropdown.cc +++ b/gtk2_ardour/ardour_dropdown.cc @@ -35,7 +35,7 @@ #include "ardour_dropdown.h" -#include "i18n.h" +#include "pbd/i18n.h" #define REFLECTION_HEIGHT 2 @@ -43,14 +43,16 @@ using namespace Gdk; using namespace Gtk; using namespace Glib; using namespace PBD; -using std::max; -using std::min; using namespace std; ArdourDropdown::ArdourDropdown (Element e) + : _scrolling_disabled(false) { // signal_button_press_event().connect (sigc::mem_fun(*this, &ArdourDropdown::on_mouse_pressed)); + _menu.signal_size_request().connect (sigc::mem_fun(*this, &ArdourDropdown::menu_size_request)); + + _menu.set_reserve_toggle_size(false); add_elements(e); add_elements(ArdourButton::Menu); @@ -60,11 +62,16 @@ ArdourDropdown::~ArdourDropdown () { } +void +ArdourDropdown::menu_size_request(Requisition *req) { + req->width = max(req->width, get_allocation().get_width()); +} + bool ArdourDropdown::on_button_press_event (GdkEventButton* ev) { if (ev->type == GDK_BUTTON_PRESS) { - _menu.popup (1, gtk_get_current_event_time()); + Gtkmm2ext::anchored_menu_popup(&_menu, this, get_text(), 1, ev->time); } return true; } @@ -74,6 +81,10 @@ ArdourDropdown::on_scroll_event (GdkEventScroll* ev) { using namespace Menu_Helpers; + if (_scrolling_disabled) { + return false; + } + const MenuItem * current_active = _menu.get_active(); const MenuList& items = _menu.items (); int c = 0; @@ -138,8 +149,12 @@ ArdourDropdown::AddMenuElem (Menu_Helpers::Element e) using namespace Menu_Helpers; MenuList& items = _menu.items (); - + items.push_back (e); } - +void +ArdourDropdown::disable_scrolling() +{ + _scrolling_disabled = true; +}