diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 9b005368e..0167c9607 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -59,6 +59,9 @@ Changed - New design for error pages - Link filtering for hints now checks if the text is contained anywhere in the link, and matches case-insensitively. +- The `ui -> remove-finished-downloads` option got changed to an integer and + now takes a time (in milliseconds) to keep the download around after it's + finished. When set to `-1`, downloads are never removed. Fixed ~~~~~ diff --git a/README.asciidoc b/README.asciidoc index 2054c1dab..a28b089cc 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -155,6 +155,7 @@ Contributors, sorted by the number of commits in descending order: * Peter Vilim * Jonas Schürmann * Jimmy +* skinnay * Zach-Button * rikn00 * Patric Schmitz diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 5209baf47..24536dbf5 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -42,7 +42,7 @@ |<>|User stylesheet to use (absolute filename, filename relative to the config directory or CSS string). Will expand environment variables. |<>|Set the CSS media type. |<>|Whether to enable smooth scrolling for webpages. -|<>|Whether to remove finished downloads automatically. +|<>|Number of milliseconds to wait before removing finished downloads. Will not be removed if value is -1. |<>|Whether to hide the statusbar unless a message is shown. |<>|Padding for statusbar (top, bottom, left, right). |<>|The format to use for the window title. The following placeholders are defined: @@ -593,14 +593,9 @@ Default: +pass:[false]+ [[ui-remove-finished-downloads]] === remove-finished-downloads -Whether to remove finished downloads automatically. +Number of milliseconds to wait before removing finished downloads. Will not be removed if value is -1. -Valid values: - - * +true+ - * +false+ - -Default: +pass:[false]+ +Default: +pass:[-1]+ [[ui-hide-statusbar]] === hide-statusbar diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index b6bf651ed..187e23e1c 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,10 @@ 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/config.py b/qutebrowser/config/config.py index 9dbcaf4cf..55502c5da 100644 --- a/qutebrowser/config/config.py +++ b/qutebrowser/config/config.py @@ -255,21 +255,20 @@ def init(parent=None): _init_misc() -def _get_value_transformer(old, new): +def _get_value_transformer(mapping): """Get a function which transforms a value for CHANGED_OPTIONS. Args: - old: The old value - if the supplied value doesn't match this, it's - returned untransformed. - new: The new value. + mapping: A dictionary mapping old values to new values. Value is not + transformed if the supplied value doesn't match the old value. Return: A function which takes a value and transforms it. """ def transformer(val): - if val == old: - return new - else: + try: + return mapping[val] + except KeyError: return val return transformer @@ -352,9 +351,11 @@ class ConfigManager(QObject): ] CHANGED_OPTIONS = { ('content', 'cookies-accept'): - _get_value_transformer('default', 'no-3rdparty'), + _get_value_transformer({'default': 'no-3rdparty'}), ('tabs', 'position'): _transform_position, ('ui', 'downloads-position'): _transform_position, + ('ui', 'remove-finished-downloads'): + _get_value_transformer({'false': '-1', 'true': '1000'}) } changed = pyqtSignal(str, str) 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'),