diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tabwindow/tabwindow.cpp | 60 | ||||
-rw-r--r-- | src/tabwindow/tabwindow.h | 3 |
2 files changed, 57 insertions, 6 deletions
diff --git a/src/tabwindow/tabwindow.cpp b/src/tabwindow/tabwindow.cpp index 83f8151f..cce684cf 100644 --- a/src/tabwindow/tabwindow.cpp +++ b/src/tabwindow/tabwindow.cpp @@ -53,7 +53,7 @@ #include <QWebSettings> -TabWindow::TabWindow(QWidget *parent) +TabWindow::TabWindow(bool withTab, QWidget *parent) : KTabWidget(parent) , _addTabButton(new QToolButton(this)) , _openedTabsCounter(0) @@ -95,10 +95,13 @@ TabWindow::TabWindow(QWidget *parent) connect(this, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int))); // NOTE: NEVER create a tabwindow without AT LEAST one tab... - WebWindow *tab = prepareNewTab(); - addTab(tab, i18n("new tab")); - setCurrentWidget(tab); - + if (withTab) + { + WebWindow *tab = prepareNewTab(); + addTab(tab, i18n("new tab")); + setCurrentWidget(tab); + } + // FIXME: Manage sizes... kDebug() << "SIZE: " << size(); kDebug() << "SIZE HINT: " << sizeHint(); @@ -439,6 +442,53 @@ void TabWindow::closeOtherTabs(int index) } +void TabWindow::detachTab(int index, TabWindow *toWindow) +{ + if (index < 0) + index = currentIndex(); + if (index < 0 || index >= count()) + return; + + WebWindow *tab = webWindow(index); + KUrl u = tab->url(); + if (u.scheme() == QL1S("about")) + { + closeTab(index); + loadUrl(u, Rekonq::NewWindow); + return; + } + // else + + closeTab(index, false); + + TabWindow *w = 0; + w = (toWindow == 0) + ? new TabWindow(false) + : toWindow; + + w->addTab(tab, tab->title()); + w->setCurrentWidget(tab); + + w->show(); + + // disconnect signals from old tabwindow + // WARNING: Code copied from prepareNewTab method. + // Any new changes there should be applied here... + disconnect(tab, SIGNAL(titleChanged(QString)), this, SLOT(tabTitleChanged(QString))); + disconnect(tab, SIGNAL(loadStarted()), this, SLOT(tabLoadStarted())); + disconnect(tab, SIGNAL(loadFinished(bool)), this, SLOT(tabLoadFinished(bool))); + disconnect(tab, SIGNAL(pageCreated(WebPage *)), this, SLOT(pageCreated(WebPage *))); + + // reconnect signals to new tabwindow + // WARNING: Code copied from prepareNewTab method. + // Any new changes there should be applied here... + connect(tab, SIGNAL(titleChanged(QString)), w, SLOT(tabTitleChanged(QString))); + connect(tab, SIGNAL(loadStarted()), w, SLOT(tabLoadStarted())); + connect(tab, SIGNAL(loadFinished(bool)), w, SLOT(tabLoadFinished(bool))); + connect(tab, SIGNAL(pageCreated(WebPage *)), w, SLOT(pageCreated(WebPage *))); +} + + void TabWindow::reloadTab(int index) { // When index is -1 index chooses the current tab diff --git a/src/tabwindow/tabwindow.h b/src/tabwindow/tabwindow.h index 1ec13e88..42755ca6 100644 --- a/src/tabwindow/tabwindow.h +++ b/src/tabwindow/tabwindow.h @@ -79,7 +79,7 @@ class TabWindow : public KTabWidget Q_OBJECT public: - TabWindow(QWidget *parent = 0); + TabWindow(bool withTab = true, QWidget *parent = 0); virtual QSize sizeHint() const; @@ -117,6 +117,7 @@ private Q_SLOTS: void cloneTab(int index = -1); void closeTab(int index = -1, bool del = true); void closeOtherTabs(int index = -1); + void detachTab(int index = -1, TabWindow *toWindow = 0); void reloadTab(int index = -1); void reloadAllTabs(); void restoreClosedTab(int i); |