diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index b6bf651ed..12d00547a 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -771,7 +771,7 @@ class DownloadManager(QAbstractListModel): fileobj: The file object to write the answer to. filename: A path to write the data to. auto_remove: Whether to remove the download even if - ui -> remove-finished-downloads is set to false. + ui -> remove-finished-downloads is set to -1. Return: The created DownloadItem. @@ -790,9 +790,10 @@ class DownloadManager(QAbstractListModel): download = DownloadItem(reply, self._win_id, self) download.cancelled.connect( functools.partial(self.remove_item, download)) - if config.get('ui', 'remove-finished-downloads') or auto_remove: + delay = config.get('ui', 'remove-finished-downloads') + if delay > -1 or auto_remove: download.finished.connect( - functools.partial(self.remove_item, download)) + functools.partial(self.remove_item_delayed, download, delay)) download.data_changed.connect( functools.partial(self.on_data_changed, download)) download.error.connect(self.on_error) @@ -1011,6 +1012,12 @@ class DownloadManager(QAbstractListModel): if not self.downloads: self._update_timer.stop() + + def remove_item_delayed(self, download, delay): + """Remove a given download after a short delay.""" + QTimer.singleShot(delay, functools.partial(self.remove_item, download)) + + def remove_items(self, downloads): """Remove an iterable of downloads.""" # On the first pass, we only generate the indices so we get the diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index f4fe2b1a1..a5d4c00b8 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -291,8 +291,9 @@ def data(readonly=False): "Whether to enable smooth scrolling for webpages."), ('remove-finished-downloads', - SettingValue(typ.Bool(), 'false'), - "Whether to remove finished downloads automatically."), + SettingValue(typ.Int(minval=-1), '-1'), + "Number of milliseconds to wait before removing finished " + "downloads. Will not be removed if value is -1."), ('hide-statusbar', SettingValue(typ.Bool(), 'false'),