From 57eac7947b14fd5ba9e46392a8dbc9c86e77e11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20G=C3=B6llnitz?= Date: Mon, 24 Apr 2023 05:31:48 +0200 Subject: replace deprecated file chooser with file dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file chooser has been deprecated, but can be easily replaced with Gtk.FileDialog. Signed-off-by: Markus Göllnitz --- src/contacts-app.vala | 45 ++++++++++++-------- src/contacts-avatar-selector.vala | 89 ++++++++++++++++++++------------------- src/contacts-main-window.vala | 67 +++++++++++++++-------------- 3 files changed, 108 insertions(+), 93 deletions(-) (limited to 'src') 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 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 -- cgit v1.2.1