From 5fd0a763287891e52ad4bc9e7cf39c08d6982b68 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 9 Nov 2024 16:59:50 +0100 Subject: [PATCH] launchoptions: Use `Gtk.FileDialog` for all file/path pickers Co-authored-by: Hari Rana --- bottles/frontend/windows/launchoptions.py | 40 ++++++++++++++--------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/bottles/frontend/windows/launchoptions.py b/bottles/frontend/windows/launchoptions.py index c711cdfa65b..ace11ce0cc0 100644 --- a/bottles/frontend/windows/launchoptions.py +++ b/bottles/frontend/windows/launchoptions.py @@ -312,25 +312,33 @@ def __reset_post_script(self, *_args): self.btn_post_script_reset.set_visible(False) def __choose_cwd(self, *_args): - def set_path(dialog, response): - if response != Gtk.ResponseType.ACCEPT: - self.action_cwd.set_subtitle(self.__default_cwd_msg) - return - - directory_path = dialog.get_file().get_path() - self.program["folder"] = directory_path - self.action_cwd.set_subtitle(directory_path) - self.btn_cwd_reset.set_visible(True) + def set_path(dialog, result): + try: + directory = dialog.select_folder_finish(result) - dialog = Gtk.FileChooserNative.new( - title=_("Select Working Directory"), - parent=self.window, - action=Gtk.FileChooserAction.SELECT_FOLDER, - ) + if directory is None: + self.action_cwd.set_subtitle(self.__default_cwd_msg) + return + directory_path = directory.get_path() + self.program["folder"] = directory_path + self.action_cwd.set_subtitle(directory_path) + self.btn_cwd_reset.set_visible(True) + except GLib.Error as error: + # also thrown when dialog has been cancelled + if error.code == 2: + # error 2 seems to be 'dismiss' or 'cancel' + if self.program["folder"] is None or self.program["folder"] == "": + self.action_cwd.set_subtitle(self.__default_cwd_msg) + else: + # something else happened... + logging.warning("Error selecting folder: %s" % error) + raise + + dialog = Gtk.FileDialog.new() + dialog.set_title(_("Select Working Directory")) dialog.set_modal(True) - dialog.connect("response", set_path) - dialog.show() + dialog.select_folder(parent=self.window, callback=set_path) def __reset_cwd(self, *_args): """