add context menus for tabbable visibility buttons
[ardour.git] / gtk2_ardour / ardour_ui_ed.cc
index 9fdde7219f151126865b15bb5b0f6c6a9a1af859..35e8eca25d6ce68ff8f56066b9936140691f2d90 100644 (file)
@@ -577,6 +577,11 @@ ARDOUR_UI::build_menu_bar ()
        mixer_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), mixer));
        prefs_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), rc_option_editor));
 
+       /* catch context clicks so that we can show a menu on these buttons */
+
+       editor_visibility_button.signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_visibility_button_press), X_("editor")), false);
+       mixer_visibility_button.signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_visibility_button_press), X_("mixer")), false);
+       prefs_visibility_button.signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::tabbable_visibility_button_press), X_("preferences")), false);
 
        editor_visibility_button.set_related_action (ActionManager::get_action (X_("Common"), X_("change-editor-visibility")));
        editor_visibility_button.set_name (X_("page switch button"));
@@ -805,3 +810,21 @@ ARDOUR_UI::tabs()
 {
        return _tabs;
 }
+
+bool
+ARDOUR_UI::tabbable_visibility_button_press (GdkEventButton* ev, string const& tabbable_name)
+{
+       if (ev->button != 3) {
+               return false;
+       }
+
+       /* context menu is defined in *.menus.in
+        */
+
+       string menu_name = string ("/ui/") + tabbable_name + X_("TabbableButtonMenu");
+       Gtk::Menu* menu = dynamic_cast<Gtk::Menu*> (ActionManager::get_widget (menu_name.c_str()));
+       if (menu) {
+               menu->popup (3, ev->time);
+       }
+       return true;
+}