Skip to content

Commit 848f2fc

Browse files
examples: Document/Replace deprecated APIs
1 parent e262bd9 commit 848f2fc

File tree

4 files changed

+32
-31
lines changed

4 files changed

+32
-31
lines changed

examples/gif_paintable/gif_paintable_window/imp.rs

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use gtk::{glib, prelude::*, subclass::prelude::*};
1+
use gtk::{glib, subclass::prelude::*};
22

3-
#[derive(Debug, gtk::CompositeTemplate)]
3+
#[derive(Default, Debug, gtk::CompositeTemplate)]
44
#[template(file = "gif_paintable_window.ui")]
55
pub struct GifPaintableWindow {
66
#[template_child]
77
pub picture: TemplateChild<gtk::Picture>,
8-
pub dialog: gtk::FileChooserNative,
98
}
109

1110
#[glib::object_subclass]
@@ -14,40 +13,15 @@ impl ObjectSubclass for GifPaintableWindow {
1413
type Type = super::GifPaintableWindow;
1514
type ParentType = gtk::ApplicationWindow;
1615

17-
fn new() -> Self {
18-
let gif_filter = gtk::FileFilter::new();
19-
gif_filter.add_mime_type("image/gif");
20-
gif_filter.set_name(Some("GIF Image"));
21-
22-
let dialog = gtk::FileChooserNative::builder()
23-
.title("Open File")
24-
.action(gtk::FileChooserAction::Open)
25-
.accept_label("Open")
26-
.cancel_label("Cancel")
27-
.modal(true)
28-
.build();
29-
30-
dialog.add_filter(&gif_filter);
31-
32-
Self {
33-
dialog,
34-
picture: TemplateChild::default(),
35-
}
36-
}
37-
3816
fn class_init(klass: &mut Self::Class) {
3917
klass.bind_template();
4018
klass.install_action_async(
4119
"win.open",
4220
None,
4321
|win, _action_name, _action_target| async move {
44-
let dialog = &win.imp().dialog;
45-
dialog.set_transient_for(Some(&win));
46-
if dialog.run_future().await == gtk::ResponseType::Accept {
47-
if let Err(error) = win.set_file(dialog.file().unwrap()) {
48-
println!("Error loading the GIF: {error}");
49-
}
50-
}
22+
if let Err(error) = win.open_file().await {
23+
println!("Error loading the GIF: {error}");
24+
};
5125
},
5226
);
5327
}

examples/gif_paintable/gif_paintable_window/mod.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,27 @@ impl GifPaintableWindow {
1515
glib::Object::builder().property("application", app).build()
1616
}
1717

18+
pub async fn open_file(&self) -> Result<(), Box<dyn std::error::Error>> {
19+
let gif_filter = gtk::FileFilter::new();
20+
gif_filter.add_mime_type("image/gif");
21+
gif_filter.set_name(Some("GIF Image"));
22+
23+
let filters = gio::ListStore::new::<gtk::FileFilter>();
24+
filters.append(&gif_filter);
25+
26+
let dialog = gtk::FileDialog::builder()
27+
.title("Open File")
28+
.accept_label("Open")
29+
.modal(true)
30+
.filters(&filters)
31+
.build();
32+
33+
let file = dialog.open_future(Some(self)).await?;
34+
self.set_file(file)?;
35+
36+
Ok(())
37+
}
38+
1839
fn set_file(&self, file: gio::File) -> Result<(), Box<dyn std::error::Error>> {
1940
let paintable = GifPaintable::default();
2041
let (bytes, _) = file.load_contents(gio::Cancellable::NONE)?;

examples/list_box_model/list_box_row/imp.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// gtk::Dialog was deprecated and applications are supposed
2+
// to use plain gtk::Window and structure it however they wish.
3+
#![allow(deprecated)]
14
use std::cell::RefCell;
25

36
use gtk::{

examples/list_box_model/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// gtk::Dialog was deprecated and applications are supposed
2+
// to use plain gtk::Window and structure it however they wish.
3+
#![allow(deprecated)]
14
mod list_box_row;
25
mod model;
36
pub mod row_data;

0 commit comments

Comments
 (0)