provide Tabbable::change_visibility(), which has slightly odd semantics that are...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 20 Nov 2015 14:27:41 +0000 (09:27 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 22 Feb 2016 20:31:25 +0000 (15:31 -0500)
libs/gtkmm2ext/gtkmm2ext/tabbable.h
libs/gtkmm2ext/tabbable.cc

index 9df2800d97bf048fd9725f551e6fbd2874de9a27..c9b06ac3cafe23aca03170cd9d98d635e7c50882 100644 (file)
@@ -47,6 +47,7 @@ class LIBGTKMM2EXT_API Tabbable : public WindowProxy {
        void add_to_notebook (Gtk::Notebook& notebook, const std::string& tab_title);
        void make_visible ();
        void make_invisible ();
+       void change_visibility ();
        void attach ();
        void detach ();
 
index 928e501751c7be3e2b59a08743b88ded013cef48..1c720591f583f610083a83518617dd656b522189 100644 (file)
@@ -170,6 +170,32 @@ Tabbable::show_window ()
        }
 }
 
+/** If this Tabbable is currently parented by a tab, ensure that the tab is the
+ * current one. If it is parented by a window, then toggle the visibility of
+ * that window.
+ */
+void
+Tabbable::change_visibility ()
+{
+       if (tabbed()) {
+               _parent_notebook->set_current_page (_parent_notebook->page_num (_contents));
+               return;
+       }
+
+       if (tab_requested_by_state) {
+               /* should be tabbed, but currently isn't parented by a notebook */
+               return;
+       }
+
+       if (_window && (current_toplevel() == _window)) {
+               if (_window->is_visible ()) {
+                       _window->hide ();
+               } else {
+                       _window->present ();
+               }
+       }
+}
+
 void
 Tabbable::make_visible ()
 {
@@ -358,4 +384,3 @@ Tabbable::window_unmapped ()
 {
        StateChange (*this);
 }
-