NavigationView

class NavigationView(pointer: <Error class: unknown class><<Error class: unknown class>>) : Swipeable

A page-based navigation container.

navigation-view

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>
navigation-view-example

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

Link copied to clipboard
constructor()

Creates a new AdwNavigationView.

constructor(pointer: <Error class: unknown class><<Error class: unknown class>>)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
val adwNavigationViewPointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
open override val adwSwipeablePointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard

Whether to animate page transitions.

Link copied to clipboard
open val gtkAccessiblePointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
open val gtkBuildablePointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
open val gtkConstraintTargetPointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
val navigationStack: <Error class: unknown class>

A list model that contains the pages in navigation stack.

Link copied to clipboard

Whether pressing Escape pops the current page.

Link copied to clipboard

The currently visible page.

Functions

Link copied to clipboard
fun add(page: NavigationPage)

Permanently adds @page to @self.

Link copied to clipboard
fun connectGetNextPage(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> NavigationPage?): <Error class: unknown class>

Emitted when a push shortcut or a gesture is triggered.

Link copied to clipboard
fun connectPopped(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (page: NavigationPage) -> Unit): <Error class: unknown class>

Emitted after @page has been popped from the navigation stack.

Link copied to clipboard
fun connectPushed(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Unit): <Error class: unknown class>

Emitted after a page has been pushed to the navigation stack.

Link copied to clipboard
fun connectReplaced(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Unit): <Error class: unknown class>

Emitted after the navigation stack has been replaced.

Link copied to clipboard

Finds a page in @self by its tag.

Link copied to clipboard

Gets whether @self animates page transitions.

Link copied to clipboard

Gets the progress @self will snap back to after the gesture is canceled.

Link copied to clipboard
open fun getDistance(): Double

Gets the swipe distance of @self.

Link copied to clipboard
fun getNavigationStack(): <Error class: unknown class>

Returns a iface@Gio.ListModel that contains the pages in navigation stack.

Link copied to clipboard

Gets whether pressing Escape pops the current page on @self.

Link copied to clipboard

Gets the previous page for @page.

Link copied to clipboard
open fun getProgress(): Double

Gets the current progress of @self.

Link copied to clipboard
open fun getSwipeArea(navigationDirection: NavigationDirection, isDrag: Boolean, rect: <Error class: unknown class>)

Gets the area @self can start a swipe from for the given direction and gesture type.

Link copied to clipboard

Gets the currently visible page in @self.

Link copied to clipboard
fun pop(): Boolean

Pops the visible page from the navigation stack.

Link copied to clipboard

Pops pages from the navigation stack until @page is visible.

Link copied to clipboard

Pops pages from the navigation stack until page with the tag @tag is visible.

Link copied to clipboard
fun push(page: NavigationPage)

Pushes @page onto the navigation stack.

Link copied to clipboard
fun pushByTag(tag: String)

Pushes the page with the tag @tag onto the navigation stack.

Link copied to clipboard

Removes @page from @self.

Link copied to clipboard
fun replaceWithTags(tags: List<String>, nTags: Int)

Replaces the current navigation stack with pages with the tags @tags.

Link copied to clipboard
fun setAnimateTransitions(animateTransitions: Boolean)

Sets whether @self should animate page transitions.

Link copied to clipboard
fun setPopOnEscape(popOnEscape: Boolean)

Sets whether pressing Escape pops the current page on @self.