Add tabs.min_width setting

Controls min width in pixels of non pinned tabs

Closes #3690
This commit is contained in:
Jay Kamat 2018-03-09 02:02:56 -05:00
parent 46533c3367
commit 4a78b0519d
No known key found for this signature in database
GPG Key ID: 5D2E399600F4F7B5
2 changed files with 18 additions and 4 deletions

View File

@ -1406,6 +1406,16 @@ tabs.width:
desc: "Width (in pixels or as percentage of the window) of the tab bar if
it's vertical."
tabs.min_width:
default: -1
type:
name: Int
minval: -1
desc: >-
Minimum width (in pixels) of tabs (-1 to use text contents for min width).
This setting only applies when tabs are horizontal.
tabs.width.indicator:
renamed: tabs.indicator.width

View File

@ -358,7 +358,8 @@ class TabBar(QTabBar):
# Clear _minimum_tab_size_hint_helper cache when appropriate
if option in ["tabs.indicator.padding",
"tabs.padding",
"tabs.indicator.width"]:
"tabs.indicator.width",
"tabs.min_width"]:
self._minimum_tab_size_hint_helper.cache_clear()
def _on_show_switching_delay_changed(self):
@ -495,13 +496,13 @@ class TabBar(QTabBar):
# Never consider ellipsis an option for pinned tabs
ellipsis = False
return self._minimum_tab_size_hint_helper(self.tabText(index),
icon_width,
ellipsis)
icon_width, ellipsis,
pinned)
@functools.lru_cache(maxsize=2**9)
def _minimum_tab_size_hint_helper(self, tab_text: str,
icon_width: int,
ellipsis: bool) -> QSize:
ellipsis: bool, pinned: bool) -> QSize:
"""Helper function to cache tab results.
Config values accessed in here should be added to _on_config_changed to
@ -526,6 +527,9 @@ class TabBar(QTabBar):
height = self.fontMetrics().height() + padding_v
width = (text_width + icon_width +
padding_h + indicator_width)
min_width = config.val.tabs.min_width
if not pinned and not self.vertical and min_width > 0:
width = max(min_width, width)
return QSize(width, height)
def _pinned_statistics(self) -> (int, int):