From 477da6002a4a1dbbbed045edff145a552652dbe0 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Thu, 22 Mar 2018 12:55:33 -0400 Subject: [PATCH 1/2] Fix minimum size for vertical tabs --- qutebrowser/mainwindow/tabwidget.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qutebrowser/mainwindow/tabwidget.py b/qutebrowser/mainwindow/tabwidget.py index 72d3cff22..4a34a08cb 100644 --- a/qutebrowser/mainwindow/tabwidget.py +++ b/qutebrowser/mainwindow/tabwidget.py @@ -494,8 +494,8 @@ class TabBar(QTabBar): self.iconSize().width()) + icon_padding pinned = self._tab_pinned(index) - if pinned: - # Never consider ellipsis an option for pinned tabs + if not self.vertical and pinned and config.val.tabs.pinned.shrink: + # Never consider ellipsis an option for horizontal pinned tabs ellipsis = False return self._minimum_tab_size_hint_helper(self.tabText(index), icon_width, ellipsis, From 07d043fe81326d701dfc6fc5299b93b9a39d98ef Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Thu, 22 Mar 2018 14:24:35 -0400 Subject: [PATCH 2/2] Add basic tests for tab width sizing --- tests/unit/mainwindow/test_tabwidget.py | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/unit/mainwindow/test_tabwidget.py b/tests/unit/mainwindow/test_tabwidget.py index 36e6a0c48..de68481a9 100644 --- a/tests/unit/mainwindow/test_tabwidget.py +++ b/tests/unit/mainwindow/test_tabwidget.py @@ -61,6 +61,60 @@ class TestTabWidget: with qtbot.waitExposed(widget): widget.show() + # Sizing tests + + def test_tab_size_same(self, widget, fake_web_tab): + """Ensure by default, all tab sizes are the same.""" + num_tabs = 10 + for i in range(num_tabs): + widget.addTab(fake_web_tab(), 'foobar' + str(i)) + + first_size = widget.tabBar().tabSizeHint(0) + first_size_min = widget.tabBar().minimumTabSizeHint(0) + + for i in range(num_tabs): + assert first_size == widget.tabBar().tabSizeHint(i) + assert first_size_min == widget.tabBar().minimumTabSizeHint(i) + + @pytest.mark.parametrize("shrink_pinned", [True, False]) + @pytest.mark.parametrize("vertical", [True, False]) + def test_pinned_size(self, widget, fake_web_tab, config_stub, + shrink_pinned, vertical): + """Ensure by default, pinned min sizes are forced to title. + + If pinned.shrink is not true, then all tabs should be the same + + If tabs are vertical, all tabs should be the same""" + num_tabs = 10 + for i in range(num_tabs): + widget.addTab(fake_web_tab(), 'foobar' + str(i)) + + # Set pinned title format longer than unpinned + config_stub.val.tabs.title.format_pinned = "_" * 20 + config_stub.val.tabs.title.format = "_" * 2 + config_stub.val.tabs.pinned.shrink = shrink_pinned + if vertical: + # Use pixel width so we don't need to mock main-window + config_stub.val.tabs.width = 50 + config_stub.val.tabs.position = "left" + + pinned_num = [1, num_tabs - 1] + for tab in pinned_num: + widget.set_tab_pinned(widget.widget(tab), True) + + first_size = widget.tabBar().tabSizeHint(0) + first_size_min = widget.tabBar().minimumTabSizeHint(0) + + for i in range(num_tabs): + if i in pinned_num and shrink_pinned and not vertical: + assert (first_size.width() < + widget.tabBar().tabSizeHint(i).width()) + assert (first_size_min.width() < + widget.tabBar().minimumTabSizeHint(i).width()) + else: + assert first_size == widget.tabBar().tabSizeHint(i) + assert first_size_min == widget.tabBar().minimumTabSizeHint(i) + @pytest.mark.parametrize("num_tabs", [4, 10]) def test_update_tab_titles_benchmark(self, benchmark, widget, qtbot, fake_web_tab, num_tabs):