From 6d9f18a4ff82fa620d35f21da32c6a7bea7f0eaf Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 24 Apr 2010 16:21:10 +0200 Subject: Detach tab. last fixes. - Do not detach one tab windows - let detach work with "about" urls --- src/mainview.cpp | 29 +++++++++++++++++++---------- src/tabbar.cpp | 4 +++- src/webtab.cpp | 22 +++++++++++++++++++++- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/mainview.cpp b/src/mainview.cpp index 3adc0ec9..63c10683 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -687,16 +687,25 @@ void MainView::detachTab(int index) return; WebTab *tab = webTab(index); - 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(tab->url()), label); - QStackedWidget *stack = qobject_cast(w->mainView()->urlBarWidget()); - stack->insertWidget(0, bar); - w->mainView()->updateTabBar(); + 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(w->mainView()->urlBarWidget()); + stack->insertWidget(0, bar); + w->mainView()->updateTabBar(); + } } 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; } -- cgit v1.2.1