diff --git a/src/vorta/utils.py b/src/vorta/utils.py index 033b486a5..61d693edf 100644 --- a/src/vorta/utils.py +++ b/src/vorta/utils.py @@ -15,7 +15,13 @@ import psutil from PyQt6 import QtCore from PyQt6.QtCore import QFileInfo, QThread, pyqtSignal -from PyQt6.QtWidgets import QApplication, QFileDialog, QSystemTrayIcon +from PyQt6.QtWidgets import ( + QApplication, + QFileDialog, + QListView, + QSystemTrayIcon, + QTreeView, +) from vorta.borg._compatibility import BorgCompatibility from vorta.log import logger @@ -172,6 +178,16 @@ def choose_file_dialog(parent, title, want_folder=True): dialog.setParent(parent, QtCore.Qt.WindowType.Sheet) if want_folder: dialog.setOption(QFileDialog.Option.ShowDirsOnly) + dialog.setFileMode(QFileDialog.FileMode.Directory) + dialog.setOption(QFileDialog.Option.DontUseNativeDialog, True) + list_view = dialog.findChild(QListView, "listView") + if list_view: + list_view.setSelectionMode(QListView.SelectionMode.MultiSelection) + + tree_view = dialog.findChild(QTreeView) + if tree_view: + tree_view.setSelectionMode(QTreeView.SelectionMode.MultiSelection) + return dialog diff --git a/src/vorta/views/archive_tab.py b/src/vorta/views/archive_tab.py index d2af5757b..2daa67762 100644 --- a/src/vorta/views/archive_tab.py +++ b/src/vorta/views/archive_tab.py @@ -642,7 +642,8 @@ def receive(): self.app.jobs_manager.add_job(job) dialog = choose_file_dialog(self, self.tr("Choose Mount Point"), want_folder=True) - dialog.open(receive) + if dialog.exec(): + receive() def mount_result(self, result): if result['returncode'] == 0: @@ -788,7 +789,8 @@ def receive(): self._set_status(params['message']) dialog = choose_file_dialog(self, self.tr("Choose Extraction Point"), want_folder=True) - dialog.open(receive) + if dialog.exec(): + receive() window = ExtractDialog(archive, model) self._toggle_all_buttons(True) diff --git a/src/vorta/views/repo_add_dialog.py b/src/vorta/views/repo_add_dialog.py index cd265a333..62295bf4e 100644 --- a/src/vorta/views/repo_add_dialog.py +++ b/src/vorta/views/repo_add_dialog.py @@ -72,7 +72,8 @@ def receive(): self.is_remote_repo = False dialog = choose_file_dialog(self, self.tr("Choose Location of Borg Repository")) - dialog.open(receive) + if dialog.exec(): + receive() def use_remote_repo_action(self): self.repoURL.setText('') diff --git a/src/vorta/views/source_tab.py b/src/vorta/views/source_tab.py index ed63be2a7..78f665a59 100644 --- a/src/vorta/views/source_tab.py +++ b/src/vorta/views/source_tab.py @@ -302,7 +302,8 @@ def receive(): msg = self.tr("Choose directory to back up") if want_folder else self.tr("Choose file(s) to back up") dialog = choose_file_dialog(self, msg, want_folder=want_folder) - dialog.open(receive) + if dialog.exec(): + receive() def source_copy(self, index=None): """ diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 683271f54..8dffd8d7a 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -190,6 +190,9 @@ def __init__(self, *args, **kwargs): def open(self, func): func() + def exec(self): + return 1 + def selectedFiles(self): if self.subdirectory: return [str(tmpdir.join(self.subdirectory))] diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index e622a2118..2d689d40e 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -86,6 +86,9 @@ def __init__(self, *args, **kwargs): def open(self, func): func() + def exec(self): + return 1 + def selectedFiles(self): return ['/tmp'] diff --git a/tests/unit/test_archives.py b/tests/unit/test_archives.py index e0a7fb1aa..3a04f1470 100644 --- a/tests/unit/test_archives.py +++ b/tests/unit/test_archives.py @@ -14,6 +14,9 @@ class MockFileDialog: def open(self, func): func() + def exec(self): + return 1 + def selectedFiles(self): return ['/tmp']