From 9bf2bbe9bb14425ef228c8e1689bbd14935cac48 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 26 Nov 2012 17:20:15 +0100 Subject: Fix tabs moves when some of them are pinned --- src/sessionmanager.cpp | 3 ++- src/tabwindow/tabbar.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++ src/tabwindow/tabbar.h | 5 +++- src/tabwindow/tabwindow.cpp | 4 +++ 4 files changed, 70 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp index 4903360c..08f576a4 100644 --- a/src/sessionmanager.cpp +++ b/src/sessionmanager.cpp @@ -109,7 +109,8 @@ int loadTabs(TabWindow *tw, QDomElement & window, bool useFirstTab, bool justThe if (tabIsPinned) { tw->tabBar()->setTabData(tabNo, true); - tw->tabBar()->tabButton(tabNo, QTabBar::RightSide)->hide(); // NOTE: this is not good here: where is its proper place? + if (tw->tabBar()->tabButton(tabNo, QTabBar::RightSide)) + tw->tabBar()->tabButton(tabNo, QTabBar::RightSide)->hide(); // NOTE: this is not good here: where is its proper place? } } } diff --git a/src/tabwindow/tabbar.cpp b/src/tabwindow/tabbar.cpp index 70dcd3b1..aaf18dc7 100644 --- a/src/tabwindow/tabbar.cpp +++ b/src/tabwindow/tabbar.cpp @@ -333,10 +333,35 @@ void TabBar::removeAnimation(int index) } +void TabBar::tabInserted(int index) +{ + // Find the available index to move + int availableIndex = index; + for (int i = index; i < count(); i++) + { + if (tabData(i).toBool()) + { + availableIndex++; + break; + } + } + + if (index < availableIndex) + { + TabWindow *w = qobject_cast(parent()); + w->moveTab(index, availableIndex); + } + + KTabBar::tabInserted(index); +} + + void TabBar::tabRemoved(int index) { hideTabPreview(); removeAnimation(index); + + KTabBar::tabRemoved(index); } @@ -396,6 +421,41 @@ void TabBar::mousePressEvent(QMouseEvent *event) } +void TabBar::mouseReleaseEvent(QMouseEvent *event) +{ + // count pinned tabs + int pinnedTabs = 0; + for(int i = 0; i < count(); i++) + { + if (tabData(i).toBool()) + pinnedTabs++; + } + + // fix unpinned ones + for(int i = 0; i < pinnedTabs; i++) + { + if (!tabData(i).toBool()) + { + TabWindow *w = qobject_cast(parent()); + w->moveTab(i, pinnedTabs); + w->setCurrentIndex(pinnedTabs); + } + } + + // fix pinned ones + for (int i = pinnedTabs; i < count(); i++) + { + if (tabData(i).toBool()) + { + TabWindow *w = qobject_cast(parent()); + w->moveTab(i, pinnedTabs - 1); + w->setCurrentIndex(pinnedTabs - 1); + } + } + KTabBar::mouseReleaseEvent(event); +} + + void TabBar::tabLayoutChange() { KTabBar::tabLayoutChange(); diff --git a/src/tabwindow/tabbar.h b/src/tabwindow/tabbar.h index 292f3d6d..b325eab8 100644 --- a/src/tabwindow/tabbar.h +++ b/src/tabwindow/tabbar.h @@ -60,8 +60,11 @@ protected: virtual void mouseMoveEvent(QMouseEvent *event); virtual void leaveEvent(QEvent *event); virtual void mousePressEvent(QMouseEvent *event); + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void tabInserted(int index); virtual void tabRemoved(int index); + virtual void tabLayoutChange(); Q_SIGNALS: @@ -89,7 +92,7 @@ private Q_SLOTS: void showTabPreview(); void hideTabPreview(); - + private: // highlightAnimation TabHighlightEffect *m_tabHighlightEffect; diff --git a/src/tabwindow/tabwindow.cpp b/src/tabwindow/tabwindow.cpp index 4925f8d9..60a9a0eb 100644 --- a/src/tabwindow/tabwindow.cpp +++ b/src/tabwindow/tabwindow.cpp @@ -369,6 +369,10 @@ void TabWindow::tabLoadStarted() if (!tabBar()->tabData(index).toBool()) tabBar()->setTabText(index, i18n("Loading...")); + else + { + tabBar()->tabButton(index, QTabBar::RightSide)->hide(); // NOTE: not really good this, but..."Repetita iuvant"!!! + } } } -- cgit v1.2.1