diff --git a/src/vorta/utils.py b/src/vorta/utils.py index 033b486a5..7ace88bed 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 ( + QAbstractItemView, + QApplication, + QFileDialog, + QListView, + QSystemTrayIcon, +) from vorta.borg._compatibility import BorgCompatibility from vorta.log import logger @@ -172,6 +178,10 @@ def choose_file_dialog(parent, title, want_folder=True): dialog.setParent(parent, QtCore.Qt.WindowType.Sheet) if want_folder: dialog.setOption(QFileDialog.Option.ShowDirsOnly) + list_view = dialog.findChild(QListView) + if list_view: + list_view.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection) + return dialog diff --git a/src/vorta/views/archive_tab.py b/src/vorta/views/archive_tab.py index d2af5757b..7ef851d36 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) + dialog.exec() + receive() def mount_result(self, result): if result['returncode'] == 0: diff --git a/src/vorta/views/repo_add_dialog.py b/src/vorta/views/repo_add_dialog.py index cd265a333..d0d22c29d 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) + 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..158d932b2 100644 --- a/src/vorta/views/source_tab.py +++ b/src/vorta/views/source_tab.py @@ -301,8 +301,10 @@ def receive(): new_source.save() 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) + + dialog = choose_file_dialog(self, msg, want_folder) + 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']