diff --git a/picard/ui/filebrowser.py b/picard/ui/filebrowser.py
index 5161efeb9..658b87b9a 100644
--- a/picard/ui/filebrowser.py
+++ b/picard/ui/filebrowser.py
@@ -128,15 +128,18 @@ class FileBrowser(QtWidgets.QTreeView):
def scrollTo(self, index, scrolltype=QtWidgets.QAbstractItemView.EnsureVisible):
# QTreeView.scrollTo resets the horizontal scroll position to 0.
- # Reimplemented to instead scroll to horizontal parent position.
- level = -1
+ # Reimplemented to instead scroll to horizontal parent position or keep previous position.
+ if index and config.setting['filebrowser_horizontal_autoscroll']:
+ level = -1
+ parent = index.parent()
+ root = self.rootIndex()
+ while parent.isValid() and parent != root:
+ parent = parent.parent()
+ level += 1
+ pos_x = max(self.indentation() * level, 0)
+ else:
+ pos_x = self.horizontalScrollBar().value()
super().scrollTo(index, scrolltype)
- parent = self.currentIndex().parent()
- root = self.rootIndex()
- while parent.isValid() and parent != root:
- parent = parent.parent()
- level += 1
- pos_x = max(self.indentation() * level, 0)
self.horizontalScrollBar().setValue(pos_x)
def mousePressEvent(self, event):
diff --git a/picard/ui/options/interface.py b/picard/ui/options/interface.py
index d9401d0ce..1a1a8feca 100644
--- a/picard/ui/options/interface.py
+++ b/picard/ui/options/interface.py
@@ -136,6 +136,7 @@ class InterfaceOptionsPage(OptionsPage):
config.BoolOption("setting", "quit_confirmation", True),
config.TextOption("setting", "ui_language", ""),
config.BoolOption("setting", "use_system_theme", False),
+ config.BoolOption("setting", "filebrowser_horizontal_autoscroll", True),
config.BoolOption("setting", "starting_directory", False),
config.TextOption("setting", "starting_directory_path", _default_starting_dir),
config.TextOption("setting", "load_image_behavior", "append"),
@@ -205,6 +206,7 @@ class InterfaceOptionsPage(OptionsPage):
self.ui.use_system_theme.setChecked(config.setting["use_system_theme"])
current_ui_language = config.setting["ui_language"]
self.ui.ui_language.setCurrentIndex(self.ui.ui_language.findData(current_ui_language))
+ self.ui.filebrowser_horizontal_autoscroll.setChecked(config.setting["filebrowser_horizontal_autoscroll"])
self.ui.starting_directory.setChecked(config.setting["starting_directory"])
self.ui.starting_directory_path.setText(config.setting["starting_directory_path"])
self.populate_action_list()
@@ -242,6 +244,7 @@ class InterfaceOptionsPage(OptionsPage):
dialog.exec_()
config.setting["use_system_theme"] = self.ui.use_system_theme.isChecked()
config.setting["ui_language"] = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex())
+ config.setting["filebrowser_horizontal_autoscroll"] = self.ui.filebrowser_horizontal_autoscroll.isChecked()
config.setting["starting_directory"] = self.ui.starting_directory.isChecked()
config.setting["starting_directory_path"] = os.path.normpath(self.ui.starting_directory_path.text())
self.update_layout_config()
diff --git a/picard/ui/ui_options_interface.py b/picard/ui/ui_options_interface.py
index fe4ab146a..235524389 100644
--- a/picard/ui/ui_options_interface.py
+++ b/picard/ui/ui_options_interface.py
@@ -35,6 +35,9 @@ class Ui_InterfaceOptionsPage(object):
self.quit_confirmation = QtWidgets.QCheckBox(self.groupBox_2)
self.quit_confirmation.setObjectName("quit_confirmation")
self.vboxlayout1.addWidget(self.quit_confirmation)
+ self.filebrowser_horizontal_autoscroll = QtWidgets.QCheckBox(self.groupBox_2)
+ self.filebrowser_horizontal_autoscroll.setObjectName("filebrowser_horizontal_autoscroll")
+ self.vboxlayout1.addWidget(self.filebrowser_horizontal_autoscroll)
self.starting_directory = QtWidgets.QCheckBox(self.groupBox_2)
self.starting_directory.setObjectName("starting_directory")
self.vboxlayout1.addWidget(self.starting_directory)
@@ -134,6 +137,7 @@ class Ui_InterfaceOptionsPage(object):
self.builtin_search.setText(_("Use builtin search rather than looking in browser"))
self.use_adv_search_syntax.setText(_("Use advanced query syntax"))
self.quit_confirmation.setText(_("Show a quit confirmation dialog for unsaved changes"))
+ self.filebrowser_horizontal_autoscroll.setText(_("Adjust horizontal position in file browser automatically"))
self.starting_directory.setText(_("Begin browsing in the following directory:"))
self.starting_directory_browse.setText(_("Browse..."))
self.label.setText(_("User interface language:"))
diff --git a/ui/options_interface.ui b/ui/options_interface.ui
index 1ad4c31a9..31d663a96 100644
--- a/ui/options_interface.ui
+++ b/ui/options_interface.ui
@@ -59,6 +59,13 @@
+ -
+
+
+ Adjust horizontal position in file browser automatically
+
+
+
-