diff --git a/src/vorta/utils.py b/src/vorta/utils.py index 3b6229897..658f2b5b7 100644 --- a/src/vorta/utils.py +++ b/src/vorta/utils.py @@ -175,6 +175,8 @@ def choose_file_dialog(parent, title, want_folder=True): dialog.setParent(parent, QtCore.Qt.WindowType.Sheet) if want_folder: dialog.setOption(QFileDialog.Option.ShowDirsOnly) + # Avoid unsupported URL schemes (e.g. smb://) freezing the platform dialog (#1631). + dialog.setSupportedSchemes(['file']) return dialog diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 40d7cb65b..2129152a6 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -2,9 +2,11 @@ import uuid import pytest +from PyQt6.QtWidgets import QWidget from vorta.keyring.abc import VortaKeyring from vorta.utils import ( + choose_file_dialog, find_best_unit_for_sizes, get_path_datasize, is_system_tray_available, @@ -166,3 +168,11 @@ def test_is_system_tray_available(mocker): assert is_system_tray_available() is False mocker.patch('PyQt6.QtWidgets.QSystemTrayIcon.isSystemTrayAvailable', return_value=True) assert is_system_tray_available() is True + + +def test_choose_file_dialog_sets_file_scheme_only(mocker, qapp): + """Local path pickers must not offer unsupported schemes (borgbase/vorta#1631).""" + mock_dialog = mocker.MagicMock() + mocker.patch('vorta.utils.QFileDialog', return_value=mock_dialog) + choose_file_dialog(QWidget(), 'Test') + mock_dialog.setSupportedSchemes.assert_called_once_with(['file'])