diff options
-rw-r--r-- | src/application.cpp | 6 | ||||
-rw-r--r-- | src/application.h | 2 | ||||
-rw-r--r-- | src/mainview.cpp | 34 | ||||
-rw-r--r-- | src/mainview.h | 2 | ||||
-rw-r--r-- | src/tabbar.cpp | 4 | ||||
-rw-r--r-- | src/webtab.cpp | 22 |
6 files changed, 57 insertions, 13 deletions
diff --git a/src/application.cpp b/src/application.cpp index db6d3c32..45d115ae 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -329,10 +329,12 @@ void Application::loadUrl(const KUrl& url, const Rekonq::OpenType& type) } -MainWindow *Application::newMainWindow() +MainWindow *Application::newMainWindow(bool withTab) { MainWindow *w = new MainWindow(); - w->mainView()->newWebTab(); // remember using newWebTab and NOT newTab here!! + + if(withTab) + w->mainView()->newWebTab(); // remember using newWebTab and NOT newTab here!! m_mainWindows.prepend(w); w->show(); diff --git a/src/application.h b/src/application.h index c268d586..fe3c50c1 100644 --- a/src/application.h +++ b/src/application.h @@ -102,7 +102,7 @@ public: static Application *instance(); MainWindow *mainWindow(); - MainWindow *newMainWindow(); + MainWindow *newMainWindow(bool withTab = true); MainWindowList mainWindowList(); static KIcon icon(const KUrl &url); diff --git a/src/mainview.cpp b/src/mainview.cpp index cb2e3b11..63c10683 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -456,7 +456,7 @@ void MainView::cloneTab(int index) // When index is -1 index chooses the current tab -void MainView::closeTab(int index) +void MainView::closeTab(int index, bool del) { // open default homePage if just one tab is opened if (count() == 1) @@ -510,11 +510,15 @@ void MainView::closeTab(int index) removeTab(index); updateTabBar(); // UI operation: do it ASAP!! - tab->deleteLater(); // tab is scheduled for deletion. QWidget *urlbar = _bars->widget(index); _bars->removeWidget(urlbar); - urlbar->deleteLater(); + + if(del) + { + tab->deleteLater(); // tab is scheduled for deletion. + urlbar->deleteLater(); + } emit tabsChanged(); } @@ -682,10 +686,26 @@ void MainView::detachTab(int index) if (index < 0 || index >= count()) return; - KUrl url = webTab(index)->view()->url(); - closeTab(index); - - Application::instance()->loadUrl(url, Rekonq::NewWindow); + WebTab *tab = webTab(index); + KUrl u = tab->url(); + kDebug() << u; + if( u.scheme() == QL1S("about") ) + { + closeTab(index); + Application::instance()->loadUrl(u, Rekonq::NewWindow); + } + else + { + QString label = tab->view()->title(); + QWidget *bar = _bars->widget(index); + closeTab(index, false); + + MainWindow *w = Application::instance()->newMainWindow(false); + w->mainView()->addTab(tab, Application::icon( u ), label); + QStackedWidget *stack = qobject_cast<QStackedWidget *>(w->mainView()->urlBarWidget()); + stack->insertWidget(0, bar); + w->mainView()->updateTabBar(); + } } diff --git a/src/mainview.h b/src/mainview.h index 272cf82e..367fcb13 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -123,7 +123,7 @@ public slots: void newTab(); void cloneTab(int index = -1); - void closeTab(int index = -1); + void closeTab(int index = -1, bool del = true); void closeOtherTabs(int index); void reloadTab(int index = -1); void reloadAllTabs(); diff --git a/src/tabbar.cpp b/src/tabbar.cpp index fca3c6b1..a2f269c4 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -273,7 +273,9 @@ void TabBar::contextMenu(int tab, const QPoint &pos) menu.addAction(mainWindow->actionByName(QLatin1String("new_tab"))); menu.addAction( mainWindow->actionByName("clone_tab") ); - menu.addAction( mainWindow->actionByName("detach_tab") ); + + if(count() > 1) + menu.addAction( mainWindow->actionByName("detach_tab") ); menu.addSeparator(); menu.addAction( mainWindow->actionByName("close_tab") ); menu.addAction( mainWindow->actionByName("close_other_tabs") ); diff --git a/src/webtab.cpp b/src/webtab.cpp index 62de6299..bc051e27 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -118,9 +118,29 @@ WebPage *WebTab::page() } +// TODO: +// Import the "about" check and the one in protocolhandler +// in some (static?) methods in NewTabPage KUrl WebTab::url() { - return KUrl( view()->url() ); + KUrl u = KUrl( view()->url() ); + if( u.scheme() == QL1S("about") ) + { + QWebElement rootElement = page()->mainFrame()->documentElement(); + if( rootElement.document().findAll("#rekonq-newtabpage").count() == 0 ) + return u; + if( rootElement.findAll(".favorites").count() > 0 ) + return KUrl("about:favorites"); + if( rootElement.findAll(".closedTabs").count() > 0 ) + return KUrl("about:closedTabs"); + if( rootElement.findAll(".history").count() > 0 ) + return KUrl("about:history"); + if( rootElement.findAll(".bookmarks").count() > 0 ) + return KUrl("about:bookmarks"); + if( rootElement.findAll(".downloads").count() > 0 ) + return KUrl("about:downloads"); + } + return u; } |