gtk: Give Windows a button for toggling the sidebar

Users can press this to show and hide the sidebar overlay.

Signed-off-by: Anna Schumaker <anna@nowheycreamery.com>
This commit is contained in:
Anna Schumaker 2023-10-06 16:29:24 -04:00
parent 5621847451
commit b05a9ecc82
2 changed files with 34 additions and 2 deletions

View File

@ -43,9 +43,33 @@ class TestWindow(unittest.TestCase):
self.assertIsInstance(self.window._splitview, Adw.OverlaySplitView)
self.assertEqual(self.window.headerbar.get_next_sibling(),
self.window._splitview)
self.assertFalse(self.window._splitview.props.show_sidebar)
self.assertTrue(self.window._splitview.props.collapsed)
def test_show_sidebar(self):
"""Test the window show sidebar button."""
self.assertIsInstance(self.window._show_sidebar, Gtk.ToggleButton)
self.assertEqual(self.window._show_sidebar.get_ancestor(Adw.HeaderBar),
self.window.headerbar)
self.assertEqual(self.window._show_sidebar.props.icon_name,
"sidebar-show")
self.assertFalse(self.window.show_sidebar)
self.assertFalse(self.window._show_sidebar.props.active)
self.assertFalse(self.window._splitview.props.show_sidebar)
self.window._show_sidebar.props.active = True
self.assertTrue(self.window._splitview.props.show_sidebar)
self.assertTrue(self.window.show_sidebar)
self.window.show_sidebar = False
self.assertFalse(self.window._show_sidebar.props.active)
self.assertFalse(self.window._splitview.props.show_sidebar)
window2 = xfstestsdb.gtk.window.Window(show_sidebar=True)
self.assertTrue(window2.show_sidebar)
self.assertTrue(window2._show_sidebar.props.active)
self.assertTrue(window2._splitview.props.show_sidebar)
def test_content(self):
"""Test the window content property."""
self.assertIsNone(self.window.child)

View File

@ -13,6 +13,7 @@ class Window(Adw.Window):
headerbar = GObject.Property(type=Adw.HeaderBar)
title = GObject.Property(type=Adw.WindowTitle)
runid = GObject.Property(type=int)
show_sidebar = GObject.Property(type=bool, default=False)
def __init__(self, **kwargs):
"""Set up our Window."""
@ -22,15 +23,22 @@ class Window(Adw.Window):
headerbar=Adw.HeaderBar(), **kwargs)
self._splitview = Adw.OverlaySplitView(content=self.child,
collapsed=True,
show_sidebar=False)
show_sidebar=self.show_sidebar)
self._show_sidebar = Gtk.ToggleButton(icon_name="sidebar-show",
active=self.show_sidebar)
self.headerbar.pack_start(self._show_sidebar)
self.headerbar.props.title_widget = self.title
self.headerbar.add_css_class("flat")
self.props.content.append(self.headerbar)
self.props.content.append(self._splitview)
self._show_sidebar.bind_property("active", self, "show-sidebar",
GObject.BindingFlags.BIDIRECTIONAL)
self.bind_property("show-sidebar", self._splitview, "show-sidebar")
self.bind_property("child", self._splitview, "content")
self.connect("notify::runid", self.__notify_runid)
if __debug__: