diff options
| author | Andrea Diamantini <adjam7@gmail.com> | 2010-04-23 01:34:47 +0200 | 
|---|---|---|
| committer | Andrea Diamantini <adjam7@gmail.com> | 2010-04-23 01:34:47 +0200 | 
| commit | e435ee3eae6285fb9d48cc011a1cefc08429b873 (patch) | |
| tree | 7b50558119a413e4939a53e7ddf053eb0f90cd43 | |
| parent | Merge branch 'master' of gitorious.org:rekonq/mainline (diff) | |
| download | rekonq-e435ee3eae6285fb9d48cc011a1cefc08429b873.tar.xz | |
Dramatically improved "detach tab" performances..
Need to round some corners, yet.
| -rw-r--r-- | src/application.cpp | 6 | ||||
| -rw-r--r-- | src/application.h | 2 | ||||
| -rw-r--r-- | src/mainview.cpp | 23 | ||||
| -rw-r--r-- | src/mainview.h | 2 | 
4 files changed, 23 insertions, 10 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..3adc0ec9 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,17 @@ void MainView::detachTab(int index)      if (index < 0 || index >= count())          return; -    KUrl url = webTab(index)->view()->url(); -    closeTab(index); +    WebTab *tab = webTab(index); +    QString label = tab->view()->title(); +    QWidget *bar = _bars->widget(index); +     +    closeTab(index, false); -    Application::instance()->loadUrl(url, Rekonq::NewWindow); +    MainWindow *w = Application::instance()->newMainWindow(false); +    w->mainView()->addTab(tab, Application::icon(tab->url()), 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(); | 
