diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 1d6e98597..dacc2a06c 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -35,6 +35,12 @@ Added instance. - New setting `statusbar.url.fg.success.https` to set the foreground color for the URL when a page was loaded via HTTPS. +- The scrollbar in the completion is now styled, and the following new options + got added: + * `completion -> scrollbar-width` + * `completion -> scrollbar-padding` + * `colors -> completion.scrollbar.fg` + * `colors -> completion.scrollbar.bg` Changed ~~~~~~~ diff --git a/README.asciidoc b/README.asciidoc index 9ee584709..7f1941703 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -144,10 +144,10 @@ Contributors, sorted by the number of commits in descending order: * Claude * Lamar Pavel * Daniel +* Nathan Isom * Austin Anderson * Artur Shaik * Thorsten Wißmann -* Nathan Isom * Alexey "Averrin" Nabrodov * meles5 * ZDarian diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 2a8502bdd..bd0d9c35e 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -78,6 +78,8 @@ |<>|How many URLs to show in the web history. |<>|Whether to move on to the next part when there's only one possible completion left. |<>|Whether to shrink the completion to be smaller than the configured size if there are no scrollbars. +|<>|Width of the scrollbar in the completion window (in px). +|<>|Padding of scrollbar handle in completion window (in px). |============== .Quick reference for section ``input'' @@ -196,6 +198,8 @@ |<>|Top border color of the completion widget category headers. |<>|Bottom border color of the selected completion item. |<>|Foreground color of the matched text in the completion. +|<>|Color of the scrollbar handle in completion view. +|<>|Color of the scrollbar in completion view |<>|Foreground color of the statusbar. |<>|Background color of the statusbar. |<>|Foreground color of the statusbar if there was an error. @@ -833,6 +837,18 @@ Valid values: Default: +pass:[false]+ +[[completion-scrollbar-width]] +=== scrollbar-width +Width of the scrollbar in the completion window (in px). + +Default: +pass:[12]+ + +[[completion-scrollbar-padding]] +=== scrollbar-padding +Padding of scrollbar handle in completion window (in px). + +Default: +pass:[2]+ + == input Options related to input modes. @@ -1655,6 +1671,18 @@ Foreground color of the matched text in the completion. Default: +pass:[#ff4444]+ +[[colors-completion.scrollbar.fg]] +=== completion.scrollbar.fg +Color of the scrollbar handle in completion view. + +Default: +pass:[${completion.fg}]+ + +[[colors-completion.scrollbar.bg]] +=== completion.scrollbar.bg +Color of the scrollbar in completion view + +Default: +pass:[${completion.bg}]+ + [[colors-statusbar.fg]] === statusbar.fg Foreground color of the statusbar. diff --git a/qutebrowser/completion/completionwidget.py b/qutebrowser/completion/completionwidget.py index 6701413ef..2acd2333d 100644 --- a/qutebrowser/completion/completionwidget.py +++ b/qutebrowser/completion/completionwidget.py @@ -81,10 +81,24 @@ class CompletionView(QTreeView): QTreeView:item::hover { border: 0px; } - """ - # FIXME style scrollbar - # https://github.com/The-Compiler/qutebrowser/issues/117 + QTreeView QScrollBar { + width: {{ config.get('completion', 'scrollbar-width') }}px; + background: {{ color['completion.scrollbar.bg'] }}; + } + + QTreeView QScrollBar::handle { + background: {{ color['completion.scrollbar.fg'] }}; + border: {{ config.get('completion', 'scrollbar-padding') }}px solid + {{ color['completion.scrollbar.bg'] }}; + min-height: 10px; + } + + QTreeView QScrollBar::sub-line, QScrollBar::add-line { + border: none; + background: none; + } + """ resize_completion = pyqtSignal() diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index ec4b051ba..46cdb91eb 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -414,6 +414,14 @@ def data(readonly=False): "Whether to shrink the completion to be smaller than the " "configured size if there are no scrollbars."), + ('scrollbar-width', + SettingValue(typ.Int(minval=0), '12'), + "Width of the scrollbar in the completion window (in px)."), + + ('scrollbar-padding', + SettingValue(typ.Int(minval=0), '2'), + "Padding of scrollbar handle in completion window (in px)."), + readonly=readonly )), @@ -872,6 +880,14 @@ def data(readonly=False): SettingValue(typ.QssColor(), '#ff4444'), "Foreground color of the matched text in the completion."), + ('completion.scrollbar.fg', + SettingValue(typ.QssColor(), '${completion.fg}'), + "Color of the scrollbar handle in completion view."), + + ('completion.scrollbar.bg', + SettingValue(typ.QssColor(), '${completion.bg}'), + "Color of the scrollbar in completion view"), + ('statusbar.fg', SettingValue(typ.QssColor(), 'white'), "Foreground color of the statusbar."), diff --git a/qutebrowser/config/style.py b/qutebrowser/config/style.py index 55d63e923..c176c4b8a 100644 --- a/qutebrowser/config/style.py +++ b/qutebrowser/config/style.py @@ -42,7 +42,8 @@ def get_stylesheet(template_str): """ colordict = ColorDict(config.section('colors')) template = jinja2.Template(template_str) - return template.render(color=colordict, font=config.section('fonts')) + return template.render(color=colordict, font=config.section('fonts'), + config=objreg.get('config')) def set_register_stylesheet(obj): diff --git a/tests/unit/config/test_style.py b/tests/unit/config/test_style.py index c113a7716..02c60b1f9 100644 --- a/tests/unit/config/test_style.py +++ b/tests/unit/config/test_style.py @@ -27,15 +27,25 @@ from PyQt5.QtGui import QColor from qutebrowser.config import style -def test_get_stylesheet(config_stub): +@pytest.mark.parametrize('template, expected', [ + ("{{ color['completion.bg'] }}", "black"), + ("{{ color['completion.fg'] }}", "red"), + ("{{ font['completion'] }}", "foo"), + ("{{ config.get('foo', 'bar') }}", "baz"), +]) +def test_get_stylesheet(config_stub, template, expected): config_stub.data = { - 'colors': {'completion.bg': 'black'}, - 'fonts': {'completion': 'foo'}, + 'colors': { + 'completion.bg': 'black', + 'completion.fg': 'red', + }, + 'fonts': { + 'completion': 'foo', + }, 'foo': {'bar': 'baz'}, } - template = "{{ color['completion.bg'] }}\n{{ font['completion'] }}" rendered = style.get_stylesheet(template) - assert rendered == 'black\nfoo' + assert rendered == expected class Obj(QObject): @@ -105,5 +115,3 @@ class TestColorDict: d['foo'] = QColor() with pytest.raises(TypeError): d['foo'] # pylint: disable=pointless-statement - -