summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Göllnitz <camelcasenick@bewares.it>2023-04-24 05:31:48 +0200
committerNiels De Graef <nielsdegraef@gmail.com>2023-05-02 07:42:23 +0000
commit57eac7947b14fd5ba9e46392a8dbc9c86e77e11d (patch)
tree198ab43e87d1d7a23adfe6789d2d12ce9f61b223
parentbbf835cd6b0f5f17bf5bb843eb0dbc6ba2478c43 (diff)
downloadgnome-contacts-57eac7947b14fd5ba9e46392a8dbc9c86e77e11d.tar.gz
replace deprecated file chooser with file dialog
The file chooser has been deprecated, but can be easily replaced with Gtk.FileDialog. Signed-off-by: Markus Göllnitz <camelcasenick@bewares.it>
-rw-r--r--meson.build2
-rw-r--r--src/contacts-app.vala45
-rw-r--r--src/contacts-avatar-selector.vala89
-rw-r--r--src/contacts-main-window.vala67
4 files changed, 109 insertions, 94 deletions
diff --git a/meson.build b/meson.build
index 25aad9d..afa9dc9 100644
--- a/meson.build
+++ b/meson.build
@@ -48,7 +48,7 @@ gio_unix = dependency('gio-unix-2.0', version: '>=' + min_glib_version)
glib = dependency('glib-2.0', version: '>=' + min_glib_version)
gmodule_export = dependency('gmodule-export-2.0', version: '>=' + min_glib_version)
# gnome_desktop = dependency('gnome-desktop-3.0')
-gtk4_dep = dependency('gtk4', version: '>= 4.6')
+gtk4_dep = dependency('gtk4', version: '>= 4.10')
libadwaita_dep = dependency('libadwaita-1', version: '>= 1.2.alpha')
# E-D-S
libebook = dependency('libebook-1.2', version: '>=' + min_eds_version)
diff --git a/src/contacts-app.vala b/src/contacts-app.vala
index b146820..dda2706 100644
--- a/src/contacts-app.vala
+++ b/src/contacts-app.vala
@@ -322,36 +322,45 @@ public class Contacts.App : Adw.Application {
}
private void on_import (SimpleAction action, Variant? param) {
- var chooser = new Gtk.FileChooserNative (_("Select contact file"),
- this.window,
- Gtk.FileChooserAction.OPEN,
- _("Import"),
- _("Cancel"));
- chooser.modal = true;
- chooser.select_multiple = false;
+ var file_dialog = new Gtk.FileDialog ();
+ file_dialog.title = _("Select contact file");
+ file_dialog.accept_label = _("Import");
+ file_dialog.modal = true;
// TODO: somehow get this from the list of importers we have
+ var filters = new ListStore (typeof (Gtk.FileFilter));
var filter = new Gtk.FileFilter ();
filter.set_filter_name (_("vCard files"));
filter.add_pattern ("*.vcf");
filter.add_pattern ("*.vcard");
- chooser.add_filter (filter);
+ filters.append (filter);
+ file_dialog.filters = filters;
- chooser.response.connect ((response) => {
- if (response != Gtk.ResponseType.ACCEPT) {
- chooser.destroy ();
- return;
- }
- if (chooser.get_file () == null) {
+ file_dialog.open.begin (this.window, null, (obj, response) => {
+ try {
+ var file = file_dialog.open.end (response);
+
+ if (file == null) {
debug ("No file selected, or no path available");
- chooser.destroy ();
+ return;
}
- import_file.begin (chooser.get_file ());
- chooser.destroy ();
+ import_file.begin (file);
+
+ } catch (Error error) {
+ switch (error.code) {
+ case Gtk.DialogError.CANCELLED:
+ case Gtk.DialogError.DISMISSED:
+ debug ("Dismissed opening file: %s", error.message);
+ break;
+ case Gtk.DialogError.FAILED:
+ default:
+ warning ("Could not open file: %s", error.message);
+ break;
+ }
+ }
});
- chooser.show ();
}
private async void import_file (GLib.File file) {
diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala
index b6da6ff..0c31968 100644
--- a/src/contacts-avatar-selector.vala
+++ b/src/contacts-avatar-selector.vala
@@ -205,55 +205,56 @@ public class Contacts.AvatarSelector : Gtk.Window {
[GtkCallback]
private void on_file_clicked (Gtk.Button button) {
- var chooser = new Gtk.FileChooserNative (_("Browse for more pictures"),
- this.get_root () as Gtk.Window,
- Gtk.FileChooserAction.OPEN,
- _("_Open"), _("_Cancel"));
- chooser.set_modal (true);
+ var file_dialog = new Gtk.FileDialog ();
+ file_dialog.title = _("Browse for more pictures");
+ file_dialog.accept_label = _("_Open");
+ file_dialog.modal = true;
- try {
- unowned var pictures_folder = Environment.get_user_special_dir (UserDirectory.PICTURES);
- if (pictures_folder != null)
- chooser.set_current_folder (File.new_for_path (pictures_folder));
- } catch (Error e) {
- warning ("Couldn't set avatar selector to Pictures folder: %s", e.message);
- }
-
- chooser.response.connect ((response) => {
- if (response != Gtk.ResponseType.ACCEPT) {
- chooser.destroy ();
- return;
- }
+ unowned var pictures_folder = Environment.get_user_special_dir (UserDirectory.PICTURES);
+ if (pictures_folder != null)
+ file_dialog.set_initial_folder (File.new_for_path (pictures_folder));
+ file_dialog.open.begin (this.get_root () as Gtk.Window, null, (obj, response) => {
try {
- var file = chooser.get_file ();
- var in_stream = file.read ();
- var pixbuf = new Gdk.Pixbuf.from_stream (in_stream, null);
- in_stream.close ();
- if (pixbuf.get_width () > MAIN_SIZE || pixbuf.get_height () > MAIN_SIZE) {
- var dialog = new CropDialog.for_pixbuf (pixbuf,
- get_root () as Gtk.Window);
- dialog.cropped.connect ((pixbuf) => {
- this.selected_avatar = pixbuf;
- activate_action_variant ("set-avatar", null);
- });
- dialog.present ();
- } else {
- this.selected_avatar = pixbuf;
- activate_action_variant ("set-avatar", null);
+ var file = file_dialog.open.end (response);
+
+ try {
+ var in_stream = file.read ();
+ var pixbuf = new Gdk.Pixbuf.from_stream (in_stream, null);
+ in_stream.close ();
+ if (pixbuf.get_width () > MAIN_SIZE || pixbuf.get_height () > MAIN_SIZE) {
+ var dialog = new CropDialog.for_pixbuf (pixbuf,
+ get_root () as Gtk.Window);
+ dialog.cropped.connect ((pixbuf) => {
+ this.selected_avatar = pixbuf;
+ activate_action_variant ("set-avatar", null);
+ });
+ dialog.present ();
+ } else {
+ this.selected_avatar = pixbuf;
+ activate_action_variant ("set-avatar", null);
+ }
+ } catch (GLib.Error e) {
+ warning ("Failed to set avatar: %s", e.message);
+ var dialog = new Adw.MessageDialog (get_root () as Gtk.Window,
+ null,
+ _("Failed to set avatar."));
+ dialog.add_response ("close", _("_Close"));
+ dialog.default_response = "close";
+ dialog.show();
+ }
+ } catch (Error error) {
+ switch (error.code) {
+ case Gtk.DialogError.CANCELLED:
+ case Gtk.DialogError.DISMISSED:
+ debug ("Dismissed opening file: %s", error.message);
+ break;
+ case Gtk.DialogError.FAILED:
+ default:
+ warning ("Could not open file: %s", error.message);
+ break;
}
- } catch (GLib.Error e) {
- warning ("Failed to set avatar: %s", e.message);
- var dialog = new Adw.MessageDialog (get_root () as Gtk.Window,
- null,
- _("Failed to set avatar."));
- dialog.add_response ("close", _("_Close"));
- dialog.default_response = "close";
- dialog.show();
- } finally {
- chooser.destroy ();
}
});
- chooser.show ();
}
}
diff --git a/src/contacts-main-window.vala b/src/contacts-main-window.vala
index 2946317..6d1770b 100644
--- a/src/contacts-main-window.vala
+++ b/src/contacts-main-window.vala
@@ -598,43 +598,48 @@ public class Contacts.MainWindow : Adw.ApplicationWindow {
public void export_individuals (Gee.List<Individual> individuals) {
// Open up a file chooser
- var chooser = new Gtk.FileChooserNative (_("Export to file"),
- this,
- Gtk.FileChooserAction.SAVE,
- _("_Export"),
- _("_Cancel"));
- chooser.set_current_name (_("contacts.vcf"));
- chooser.modal = true;
- chooser.response.connect ((response) => {
- if (response != Gtk.ResponseType.ACCEPT) {
- chooser.destroy ();
- return;
- }
-
- // Do the actual export
- OutputStream filestream = null;
+ var file_dialog = new Gtk.FileDialog ();
+ file_dialog.title = _("Export to file");
+ file_dialog.accept_label = _("_Export");
+ file_dialog.set_initial_name (_("contacts.vcf"));
+ file_dialog.modal = true;
+ file_dialog.save.begin (this, null, (obj, response) => {
try {
- filestream = chooser.get_file ().replace (null, false, FileCreateFlags.NONE);
- } catch (Error err) {
- warning ("Couldn't create file: %s", err.message);
- return;
- }
+ var file = file_dialog.save.end (response);
- var op = new Io.VCardExportOperation (individuals, filestream);
- this.operations.execute.begin (op, null, (obj, res) => {
+ // Do the actual export
+ OutputStream filestream = null;
try {
- this.operations.execute.end (res);
- filestream.close ();
- } catch (Error e) {
- warning ("ERROR: %s", e.message);
+ filestream = file.replace (null, false, FileCreateFlags.NONE);
+ } catch (Error err) {
+ warning ("Couldn't create file: %s", err.message);
+ return;
}
- });
- chooser.destroy ();
- add_toast_for_operation (op);
+ var op = new Io.VCardExportOperation (individuals, filestream);
+ this.operations.execute.begin (op, null, (obj, res) => {
+ try {
+ this.operations.execute.end (res);
+ filestream.close ();
+ } catch (Error e) {
+ warning ("ERROR: %s", e.message);
+ }
+ });
+
+ add_toast_for_operation (op);
+ } catch (Error error) {
+ switch (error.code) {
+ case Gtk.DialogError.CANCELLED:
+ case Gtk.DialogError.DISMISSED:
+ debug ("Dismissed opening file: %s", error.message);
+ break;
+ case Gtk.DialogError.FAILED:
+ default:
+ warning ("Could not open file: %s", error.message);
+ break;
+ }
+ }
});
-
- chooser.show ();
}
// Little helper