diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index b03a4f52d..35c7dbaea 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -235,10 +235,9 @@ def data(readonly=False): SettingValue(typ.Perc(), '100%'), "The default zoom level."), - ('downloads-at-top', - SettingValue(typ.Bool(), 'true'), - "Whether to show downloaded files at top, " - "false will show at bottom."), + ('downloads-position', + SettingValue(typ.VerticalPosition(), 'north'), + "Where to show the downloaded files."), ('message-timeout', SettingValue(typ.Int(), '2000'), @@ -1011,7 +1010,6 @@ def data(readonly=False): DATA = data(readonly=True) - KEY_FIRST_COMMENT = """ # vim: ft=conf # diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py index b0523f5f4..55159d538 100644 --- a/qutebrowser/config/configtypes.py +++ b/qutebrowser/config/configtypes.py @@ -1264,6 +1264,13 @@ class Position(BaseType): return self.MAPPING[value] +class VerticalPosition(BaseType): + + """The position of the download bar.""" + + valid_values = ValidValues('north', 'south') + + class UrlList(List): """A list of URLs.""" diff --git a/qutebrowser/mainwindow/mainwindow.py b/qutebrowser/mainwindow/mainwindow.py index 8f48c9155..ff50ab354 100644 --- a/qutebrowser/mainwindow/mainwindow.py +++ b/qutebrowser/mainwindow/mainwindow.py @@ -90,18 +90,24 @@ class MainWindow(QWidget): self._vbox.setContentsMargins(0, 0, 0, 0) self._vbox.setSpacing(0) - if config.get('ui', 'downloads-at-top'): - self._init_downloadview() - self._init_tabbed_browser() - else: - self._init_tabbed_browser() - self._init_downloadview() + log.init.debug("Initializing downloads...") + download_manager = downloads.DownloadManager(self.win_id, self) + objreg.register('download-manager', download_manager, scope='window', + window=self.win_id) + + self._downloadview = downloadview.DownloadView(self.win_id) + self._downloadview.show() + + self._tabbed_browser = tabbedbrowser.TabbedBrowser(self.win_id) + objreg.register('tabbed-browser', self._tabbed_browser, scope='window', + window=self.win_id) # We need to set an explicit parent for StatusBar because it does some # show/hide magic immediately which would mean it'd show up as a # window. self.status = bar.StatusBar(self.win_id, parent=self) - self._vbox.addWidget(self.status) + + self._add_widgets() self._completion = completionwidget.CompletionView(self.win_id, self) @@ -134,22 +140,24 @@ class MainWindow(QWidget): """Resize the completion if related config options changed.""" if section == 'completion' and option in ('height', 'shrink'): self.resize_completion() + elif section == 'ui' and option == 'downloads-position': + self._add_widgets() - def _init_downloadview(self): - log.init.debug("Initializing downloads...") - download_manager = downloads.DownloadManager(self.win_id, self) - objreg.register('download-manager', download_manager, scope='window', - window=self.win_id) + def _add_widgets(self): + self._vbox.removeWidget(self._tabbed_browser) + self._vbox.removeWidget(self._downloadview) + self._vbox.removeWidget(self.status) + position = config.get('ui', 'downloads-position') + if position == 'north': + self._vbox.addWidget(self._downloadview) + self._vbox.addWidget(self._tabbed_browser) + elif position == 'south': + self._vbox.addWidget(self._tabbed_browser) + self._vbox.addWidget(self._downloadview) + else: + raise ValueError("Invalid position {}!".format(position)) + self._vbox.addWidget(self.status) - self._downloadview = downloadview.DownloadView(self.win_id) - self._vbox.addWidget(self._downloadview) - self._downloadview.show() - - def _init_tabbed_browser(self): - self._tabbed_browser = tabbedbrowser.TabbedBrowser(self.win_id) - objreg.register('tabbed-browser', self._tabbed_browser, scope='window', - window=self.win_id) - self._vbox.addWidget(self._tabbed_browser) def _load_state_geometry(self): """Load the geometry from the state file."""