From 3aaf7be9670b09a2f7f9d5a2484e854135453c46 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 14 Oct 2009 12:23:22 +0200 Subject: Another fix for the new tab button... I'm starting hating it!! --- src/mainview.cpp | 24 ++++++++++------ src/mainview.h | 6 ++-- src/mainwindow.cpp | 2 +- src/tabbar.cpp | 82 ++++++++++++++++++++++-------------------------------- src/tabbar.h | 4 +-- 5 files changed, 56 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/mainview.cpp b/src/mainview.cpp index ba7b720e..a0b0c6e7 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -131,7 +131,7 @@ int MainView::webViewIndex(WebView *webView) const } -void MainView::showTabBar() +void MainView::updateTabBar() { if (ReKonfig::alwaysShowTabBar()) { @@ -139,6 +139,7 @@ void MainView::showTabBar() { m_tabBar->show(); } + m_tabBar->updateNewTabButton(); } else { @@ -152,6 +153,7 @@ void MainView::showTabBar() { m_tabBar->show(); } + m_tabBar->updateNewTabButton(); } } } @@ -283,15 +285,15 @@ WebView *MainView::newWebView(bool focused, bool nearParent) insertTab(currentIndex() + 1, webView, i18n("(Untitled)")); else addTab(webView, i18n("(Untitled)")); - + + updateTabBar(); + if (focused) { setCurrentWidget(webView); } emit tabsChanged(); - - showTabBar(); return webView; } @@ -369,7 +371,7 @@ void MainView::slotCloseOtherTabs(int index) slotCloseTab(i); } - showTabBar(); + updateTabBar(); } @@ -383,7 +385,7 @@ void MainView::slotCloneTab(int index) WebView *tab = newWebView(); tab->setUrl(webView(index)->url()); - showTabBar(); + updateTabBar(); } @@ -418,6 +420,7 @@ void MainView::slotCloseTab(int index) QWidget *webView = widget(index); removeTab(index); + updateTabBar(); // UI operation: do it ASAP!! webView->deleteLater(); // webView is scheduled for deletion. emit tabsChanged(); @@ -426,8 +429,6 @@ void MainView::slotCloseTab(int index) { currentWebView()->setFocus(); } - - showTabBar(); } @@ -578,3 +579,10 @@ KUrl::List MainView::recentlyClosedTabs() { return m_recentlyClosedTabs; } + + +void MainView::resizeEvent(QResizeEvent *event) +{ + updateTabBar(); + KTabWidget::resizeEvent(event); +} \ No newline at end of file diff --git a/src/mainview.h b/src/mainview.h index 96710919..db4c455d 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -76,7 +76,7 @@ public: * "Always Show TabBar" option * */ - void showTabBar(); + void updateTabBar(); void clear(); /** @@ -136,7 +136,9 @@ private slots: void windowCloseRequested(); - +protected: + virtual void resizeEvent(QResizeEvent *event); + private: /** * This function creates (if not exists) and returns a QLabel diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c0008cba..a75c3d16 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -451,7 +451,7 @@ void MainWindow::setupSidePanel() void MainWindow::slotUpdateConfiguration() { // ============== General ================== - mainView()->showTabBar(); + mainView()->updateTabBar(); // =========== Fonts ============== QWebSettings *defaultSettings = QWebSettings::globalSettings(); diff --git a/src/tabbar.cpp b/src/tabbar.cpp index 94f2c274..b1b727ae 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -89,11 +89,6 @@ TabBar::~TabBar() void TabBar::postLaunch() { - // HACK this is used to fix add tab button position - QToolButton *secondAddTabButton = new QToolButton(this); - secondAddTabButton->setAutoRaise(true); - secondAddTabButton->setToolButtonStyle(Qt::ToolButtonIconOnly); - // Find the correct MainWindow of this tab button MainWindowList list = Application::instance()->mainWindowList(); Q_FOREACH(QPointer w, list) @@ -101,7 +96,6 @@ void TabBar::postLaunch() if (w->isAncestorOf(this)) { m_addTabButton->setDefaultAction(w->actionByName("new_tab")); - secondAddTabButton->setDefaultAction(w->actionByName("new_tab")); break; } } @@ -109,10 +103,6 @@ void TabBar::postLaunch() m_addTabButton->setAutoRaise(true); m_addTabButton->setToolButtonStyle(Qt::ToolButtonIconOnly); m_addTabButton->show(); - - // stupid tabbar, that's what you gain... - m_parent->setCornerWidget(secondAddTabButton); - m_parent->cornerWidget()->hide(); } @@ -147,13 +137,6 @@ QSize TabBar::tabSizeHint(int index) const } -void TabBar::tabLayoutChange() -{ - setTabButtonPosition(); - KTabBar::tabLayoutChange(); -} - - void TabBar::contextMenuRequested(const QPoint &position) { KMenu menu; @@ -205,37 +188,6 @@ void TabBar::reloadTab() } -void TabBar::setTabButtonPosition() -{ - if(count() >= MIN_WIDTH_DIVISOR - 1) - { - if(m_addTabButton->isVisible()) - { - m_addTabButton->hide(); - m_parent->cornerWidget()->show(); - } - return; - } - - if(m_addTabButton->isHidden()) - { - m_addTabButton->show(); - m_parent->cornerWidget()->hide(); - } - - int tabWidgetWidth = frameSize().width(); - int tabBarWidth = tabSizeHint(0).width()*count(); - int newPosY = height() - m_addTabButton->height(); - int newPosX = tabWidgetWidth - m_addTabButton->width(); - - if (tabBarWidth + m_addTabButton->width() < tabWidgetWidth) - newPosX = tabBarWidth; - - m_addTabButton->move(newPosX, newPosY); - m_addTabButton->show(); -} - - void TabBar::showTabPreview(int tab) { WebView *view = m_parent->webView(tab); @@ -316,3 +268,37 @@ void TabBar::leaveEvent(QEvent *event) KTabBar::leaveEvent(event); } + + +void TabBar::updateNewTabButton() +{ + static bool ButtonInCorner = false; + + int tabWidgetWidth = m_parent->frameSize().width(); + int tabBarWidth = tabSizeHint(0).width() * count(); + + if (tabBarWidth + m_addTabButton->width() > tabWidgetWidth) + { + if(ButtonInCorner) + return; + m_parent->setCornerWidget(m_addTabButton); + ButtonInCorner = true; + } + else + { + if(ButtonInCorner) + { + m_parent->setCornerWidget(0); + m_addTabButton->show(); + ButtonInCorner = false; + } + + int newPosX = tabWidgetWidth - m_addTabButton->width(); + int newPosY = height() - m_addTabButton->height(); + + if (tabBarWidth + m_addTabButton->width() < tabWidgetWidth) + newPosX = tabBarWidth; + + m_addTabButton->move(newPosX, newPosY); + } +} diff --git a/src/tabbar.h b/src/tabbar.h index dd08f7b8..580021c4 100644 --- a/src/tabbar.h +++ b/src/tabbar.h @@ -63,6 +63,7 @@ public: ~TabBar(); void showTabPreview(int tab); + void updateNewTabButton(); signals: void cloneTab(int index); @@ -76,7 +77,6 @@ protected: * Added to fix tab dimension */ virtual QSize tabSizeHint(int index) const; - virtual void tabLayoutChange(); virtual void mouseMoveEvent(QMouseEvent *event); virtual void leaveEvent(QEvent *event); @@ -89,8 +89,6 @@ private slots: void postLaunch(); private: - void setTabButtonPosition(); - MainView *m_parent; QToolButton *m_addTabButton; -- cgit v1.2.1