provide Tabbable::change_visibility(), which has slightly odd semantics that are neither toggle nor one-shot

This commit is contained in:
Paul Davis
2015-11-20 09:27:41 -05:00
parent c4962ca180
commit 361c8421df
2 changed files with 27 additions and 1 deletions

View 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 ();

View 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);
}