Implemented counter for total number of tabs

With this counter we can better control the space on the tabbar.
This commit is contained in:
thuck 2016-11-09 23:50:41 +01:00
parent 6f8aaccc2b
commit d7f5f61f03
3 changed files with 25 additions and 13 deletions

View File

@ -227,6 +227,10 @@ class CommandDispatcher:
tabbar = self._tabbed_browser.tabBar()
selection_override = self._get_selection_override(left, right,
opposite)
if tab.data.pinned:
tabbar.pinned -= 1
if selection_override is None:
self._tabbed_browser.close_tab(tab)
else:

View File

@ -99,9 +99,16 @@ class TabWidget(QTabWidget):
pinned: Pinned tab state.
"""
bar = self.tabBar()
bar.set_tab_data(idx, 'pinned',pinned)
bar.set_tab_data(idx, 'pinned', pinned)
bar.update(bar.tabRect(idx))
if pinned:
bar.pinned += 1
else:
bar.pinned -= 1
bar.refresh()
def set_page_title(self, idx, title):
"""Set the tab title user data."""
self.tabBar().set_tab_data(idx, 'page-title', title)
@ -139,10 +146,6 @@ class TabWidget(QTabWidget):
fields['title_sep'] = ' - ' if page_title else ''
fields['perc_raw'] = tab.progress()
#TODO: Move this to a proper place
if tab.data.pinned:
self.set_tab_pinned(idx, tab.data.pinned)
if tab.load_status() == usertypes.LoadStatus.loading:
fields['perc'] = '[{}%] '.format(tab.progress())
else:
@ -298,6 +301,7 @@ class TabBar(QTabBar):
self._auto_hide_timer.timeout.connect(self._tabhide)
self.setAutoFillBackground(True)
self.set_colors()
self.pinned = 0
config_obj.changed.connect(self.set_colors)
QTimer.singleShot(0, self._tabhide)
config_obj.changed.connect(self.on_tab_colors_changed)
@ -479,14 +483,16 @@ class TabBar(QTabBar):
return size
# If we *do* have enough space, tabs should occupy the whole window
# width.
#looks like this generates high cpu usage
#need to register the number of pin tabs in advance
#nb_of_pins = len([None for item in range(self.count())
# if objreg.get('tab', scope='tab',
# window=self._win_id, tab=item).pin is True])
#width = (self.width() + 40*nb_of_pins) / self.count()
width = self.width() / self.count()
# width. Also taken in consideration the reduced space necessary for
# the pinned tabs.
#TODO: During shutdown the self.count goes down, but the self.pinned not
#this generates some odd bahavior.
#To avoid this we compare self.count against self.pinned.
if self.pinned > 0 and self.count() > self.pinned:
width = (self.width() - 40*self.pinned) / (self.count() - self.pinned)
else:
width = self.width() / self.count()
## If width is not divisible by count, add a pixel to some tabs so
## that there is no ugly leftover space.
if index < self.width() % self.count():

View File

@ -381,6 +381,8 @@ class SessionManager(QObject):
self._load_tab(new_tab, tab)
if tab.get('active', False):
tab_to_focus = i
if new_tab.data.pinned:
tabbed_browser.set_tab_pinned(i, new_tab.data.pinned)
if tab_to_focus is not None:
tabbed_browser.setCurrentIndex(tab_to_focus)
if win.get('active', False):