Commit 2a92106a authored by Christopher Davis's avatar Christopher Davis

paginator: Use AdwToolbarView, subclass AdwBin

* GtkBox isn't meant to be subclassed, and apps should not do it. Instead they should subclass AdwBin or GtkWidget depending on their use case. * The main reason we were using GtkBox was to contain our header and our content. Now we use AdwToolbarView for that purpose.
parent a91c4ec7
...@@ -521,12 +521,11 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" ...@@ -521,12 +521,11 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libadwaita" name = "libadwaita"
version = "0.3.1" version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c4efd2020a4fcedbad2c4a97de97bf6045e5dc49d61d5a5d0cfd753db60700" checksum = "1ab9c0843f9f23ff25634df2743690c3a1faffe0a190e60c490878517eb81abf"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel",
"gdk-pixbuf", "gdk-pixbuf",
"gdk4", "gdk4",
"gio", "gio",
...@@ -534,15 +533,14 @@ dependencies = [ ...@@ -534,15 +533,14 @@ dependencies = [
"gtk4", "gtk4",
"libadwaita-sys", "libadwaita-sys",
"libc", "libc",
"once_cell",
"pango", "pango",
] ]
[[package]] [[package]]
name = "libadwaita-sys" name = "libadwaita-sys"
version = "0.3.0" version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0727b85b4fe2b1bed5ac90df6343de15cbf8118bfb96d7c3cc1512681a4b34ac" checksum = "4231cb2499a9f0c4cdfa4885414b33e39901ddcac61150bc0bb4ff8a57ede404"
dependencies = [ dependencies = [
"gdk4-sys", "gdk4-sys",
"gio-sys", "gio-sys",
......
...@@ -9,6 +9,6 @@ edition = "2021" ...@@ -9,6 +9,6 @@ edition = "2021"
gtk = { package = "gtk4", version = "0.6", features= ["gnome_44"]} gtk = { package = "gtk4", version = "0.6", features= ["gnome_44"]}
log = "0.4" log = "0.4"
gettext-rs = { version = "0.7", features = ["gettext-system"] } gettext-rs = { version = "0.7", features = ["gettext-system"] }
adw = {package = "libadwaita", version = "0.3"} adw = {package = "libadwaita", version = "0.4"}
pretty_env_logger = "0.4" pretty_env_logger = "0.4"
regex = "1.5" regex = "1.5"
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<template class="PaginatorWidget" parent="GtkBox"> <template class="PaginatorWidget" parent="AdwBin">
<property name="orientation">vertical</property> <property name="child">
<child> <object class="AdwToolbarView">
<object class="GtkHeaderBar"> <child type="top">
<property name="show-title-buttons">True</property> <object class="GtkHeaderBar">
<property name="title-widget"> <property name="title-widget">
<object class="AdwCarouselIndicatorDots" id="carousel_dots"> <object class="AdwCarouselIndicatorDots" id="carousel_dots">
<property name="carousel">carousel</property> <property name="carousel">carousel</property>
</object> </object>
</property> </property>
<style>
<class name="flat" />
</style>
</object>
</child>
<child>
<object class="GtkOverlay" id="previous_overlay">
<property name="valign">center</property>
<child type="overlay">
<object class="GtkButton" id="previous_btn">
<property name="margin-start">12</property>
<property name="icon-name">left-large-symbolic</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="action-name">win.previous-page</property>
<property name="tooltip-text" translatable="yes">Previous</property>
<style>
<class name="circular" />
</style>
</object> </object>
</child> </child>
<child type="overlay"> <property name="content">
<object class="GtkButton" id="next_btn"> <object class="GtkOverlay" id="previous_overlay">
<property name="margin-end">12</property>
<property name="icon-name">right-large-symbolic</property>
<property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="action-name">win.next-page</property> <child type="overlay">
<property name="tooltip-text" translatable="yes">Next</property> <object class="GtkButton" id="previous_btn">
<style> <property name="margin-start">12</property>
<class name="circular" /> <property name="icon-name">left-large-symbolic</property>
</style> <property name="halign">start</property>
<property name="valign">center</property>
<property name="action-name">win.previous-page</property>
<property name="tooltip-text" translatable="yes">Previous</property>
<style>
<class name="circular" />
</style>
</object>
</child>
<child type="overlay">
<object class="GtkButton" id="next_btn">
<property name="margin-end">12</property>
<property name="icon-name">right-large-symbolic</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="action-name">win.next-page</property>
<property name="tooltip-text" translatable="yes">Next</property>
<style>
<class name="circular" />
</style>
</object>
</child>
<child type="overlay">
<object class="GtkButton" id="start_btn">
<property name="margin-end">12</property>
<property name="icon-name">right-large-symbolic</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="action-name">win.start-tour</property>
<property name="tooltip-text" translatable="yes">Start</property>
<style>
<class name="suggested-action" />
<class name="circular" />
</style>
</object>
</child>
<child>
<object class="AdwCarousel" id="carousel">
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<signal name="notify::position" handler="on_position_notify" swapped="true" />
</object>
</child>
</object> </object>
</child> </property>
<child type="overlay">
<object class="GtkButton" id="start_btn">
<property name="margin-end">12</property>
<property name="icon-name">right-large-symbolic</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="action-name">win.start-tour</property>
<property name="tooltip-text" translatable="yes">Start</property>
<style>
<class name="suggested-action" />
<class name="circular" />
</style>
</object>
</child>
<child>
<object class="AdwCarousel" id="carousel">
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<signal name="notify::position" handler="on_position_notify" swapped="true" />
</object>
</child>
</object> </object>
</child> </property>
<child> <child>
<object class="GtkEventControllerKey"> <object class="GtkEventControllerKey">
<signal name="key-pressed" handler="on_key_pressed" swapped="true" /> <signal name="key-pressed" handler="on_key_pressed" swapped="true" />
......
use gtk::{gdk, glib, prelude::*, subclass::prelude::*}; use adw::subclass::prelude::*;
use gtk::{gdk, glib, prelude::*};
mod imp { mod imp {
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
...@@ -24,7 +25,7 @@ mod imp { ...@@ -24,7 +25,7 @@ mod imp {
#[glib::object_subclass] #[glib::object_subclass]
impl ObjectSubclass for PaginatorWidget { impl ObjectSubclass for PaginatorWidget {
const NAME: &'static str = "PaginatorWidget"; const NAME: &'static str = "PaginatorWidget";
type ParentType = gtk::Box; type ParentType = adw::Bin;
type Type = super::PaginatorWidget; type Type = super::PaginatorWidget;
type Interfaces = (gtk::Buildable,); type Interfaces = (gtk::Buildable,);
...@@ -46,7 +47,7 @@ mod imp { ...@@ -46,7 +47,7 @@ mod imp {
} }
} }
impl WidgetImpl for PaginatorWidget {} impl WidgetImpl for PaginatorWidget {}
impl BoxImpl for PaginatorWidget {} impl BinImpl for PaginatorWidget {}
impl BuildableImpl for PaginatorWidget { impl BuildableImpl for PaginatorWidget {
fn add_child(&self, builder: &gtk::Builder, child: &glib::Object, type_: Option<&str>) { fn add_child(&self, builder: &gtk::Builder, child: &glib::Object, type_: Option<&str>) {
if !self.carousel.is_bound() { if !self.carousel.is_bound() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment