NavigationView
A page-based navigation container.
AdwNavigationView
presents one child at a time, similar to class@Gtk.Stack.
AdwNavigationView
can only contain class@NavigationPage children.
It maintains a navigation stack that can be controlled with method@NavigationView.push and method@NavigationView.pop. The whole navigation stack can also be replaced using method@NavigationView.replace.
AdwNavigationView
allows to manage pages statically or dynamically.
Static pages can be added using the method@NavigationView.add method. The AdwNavigationView
will keep a reference to these pages, but they aren't accessible to the user until method@NavigationView.push is called (except for the first page, which is pushed automatically). Use the method@NavigationView.remove method to remove them. This is useful for applications that have a small number of unique pages and just need navigation between them.
Dynamic pages are automatically destroyed once they are popped off the navigation stack. To add a page like this, push it using the method@NavigationView.push method without calling method@NavigationView.add first.
Tags
Static pages, as well as any pages in the navigation stack, can be accessed by their property@NavigationPage:tag. For example, method@NavigationView.push_by_tag can be used to push a static page that's not in the navigation stack without having to keep a reference to it manually.
Header Bar Integration
When used inside AdwNavigationView
, class@HeaderBar will automatically display a back button that can be used to go back to the previous page when possible. The button also has a context menu, allowing to pop multiple pages at once, potentially across multiple navigation views.
Set property@HeaderBar:show-back-button to FALSE
to disable this behavior in rare scenarios where it's unwanted.
AdwHeaderBar
will also display the title of the AdwNavigationPage
it's placed into, so most applications shouldn't need to customize it at all.
Shortcuts and Gestures
AdwNavigationView
supports the following shortcuts for going to the previous page:
Escape (unless property@NavigationView:pop-on-escape is set to
FALSE
)Alt+←
Back mouse button
Additionally, it supports interactive gestures:
One-finger swipe towards the right on touchscreens
Scrolling towards the right on touchpads (usually two-finger swipe)
These gestures have transitions enabled regardless of the property@NavigationView:animate-transitions value.
Applications can also enable shortcuts for pushing another page onto the navigation stack via connecting to the signal@NavigationView::get-next-page signal, in that case the following shortcuts are supported:
Alt+→
Forward mouse button
Swipe/scrolling towards the left
For right-to-left locales, the gestures and shortcuts are reversed.
property@NavigationPage:can-pop can be used to disable them, along with the header bar back buttons.
Actions
AdwNavigationView
defines actions for controlling the navigation stack. actions for controlling the navigation stack:
navigation.push
takes a string parameter specifying the tag of the page to push, and is equivalent to calling method@NavigationView.push_by_tag.navigation.pop
doesn't take any parameters and pops the current page from the navigation stack, equivalent to calling method@NavigationView.pop.
AdwNavigationView
as GtkBuildable
AdwNavigationView
allows to add pages as children, equivalent to using the method@NavigationView.add method.
Example of an AdwNavigationView
UI definition:
<object class="AdwNavigationView">
<child>
<object class="AdwNavigationPage">
<property name="title" translatable="yes">Page 1</property>
<property name="child">
<object class="AdwToolbarView">
<child type="top">
<object class="AdwHeaderBar"/>
</child>
<property name="content">
<object class="GtkButton">
<property name="label" translatable="yes">Open Page 2</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="action-name">navigation.push</property>
<property name="action-target">'page-2'</property>
<style>
<class name="pill"/>
</style>
</object>
</property>
</object>
</property>
</object>
</child>
<child>
<object class="AdwNavigationPage">
<property name="title" translatable="yes">Page 2</property>
<property name="tag">page-2</property>
<property name="child">
<object class="AdwToolbarView">
<child type="top">
<object class="AdwHeaderBar"/>
</child>
<property name="content">
<!-- ... -->
</property>
</object>
</property>
</object>
</child>
</object>
CSS nodes
AdwNavigationView
has a single CSS node with the name navigation-view
.
Accessibility
AdwNavigationView
uses the GTK_ACCESSIBLE_ROLE_GROUP
role.
Skipped during bindings generation
parameter
pages
: Array parameter of type NavigationPage is not supported
Since
1.4
Constructors
Properties
Whether to animate page transitions.
A list model that contains the pages in navigation stack.
Whether pressing Escape pops the current page.
The currently visible page.
Functions
Permanently adds @page to @self.
Emitted when a push shortcut or a gesture is triggered.
Emitted after @page has been popped from the navigation stack.
Emitted after a page has been pushed to the navigation stack.
Emitted after the navigation stack has been replaced.
Finds a page in @self by its tag.
Gets whether @self animates page transitions.
Gets the progress @self will snap back to after the gesture is canceled.
Gets the swipe distance of @self.
Returns a iface@Gio.ListModel that contains the pages in navigation stack.
Gets whether pressing Escape pops the current page on @self.
Gets the previous page for @page.
Gets the current progress of @self.
Gets the area @self can start a swipe from for the given direction and gesture type.
Gets the currently visible page in @self.
Pops pages from the navigation stack until @page is visible.
Pushes @page onto the navigation stack.
Removes @page from @self.
Replaces the current navigation stack with pages with the tags @tags.
Sets whether @self should animate page transitions.
Sets whether pressing Escape pops the current page on @self.