From 9c12d813966e0fdc4542a7001ffa135722840de0 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 22 Sep 2018 13:07:33 +0200 Subject: SubWindow: add 'open last closed tab/tabs' actions --- src/subwindow/tabwidget.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src/subwindow/tabwidget.cpp') diff --git a/src/subwindow/tabwidget.cpp b/src/subwindow/tabwidget.cpp index 5583bcd..27ff1f3 100644 --- a/src/subwindow/tabwidget.cpp +++ b/src/subwindow/tabwidget.cpp @@ -65,6 +65,54 @@ TabWidget::~TabWidget() } } +QMenu *TabWidget::createTabMenu(QWidget *parent) +{ + auto *menu = new QMenu(parent); + + auto *reopenTabAction = menu->addAction(tr("Reopen last tab")); + connect(reopenTabAction, &QAction::triggered, this, [this]() { + if(!m_closedTabs.isEmpty()) { + QWebEnginePage *page = m_closedTabs.takeLast(); + auto *view = new WebView(qobject_cast(page->profile()), this); + view->setPage(page); + addTab(view); + } + }); + + auto *tabHistoryMenu = menu->addMenu(tr("Tab History")); + connect(tabHistoryMenu, &QMenu::aboutToShow, this, [this, tabHistoryMenu]() { + tabHistoryMenu->clear(); + for(QWebEnginePage *page : m_closedTabs) { + auto *openAction = tabHistoryMenu->addAction(page->title()); + connect(openAction, &QAction::triggered, this, [page, this]() { + auto *view = new WebView(qobject_cast(page->profile()), this); + view->setPage(page); + this->addTab(view); + m_closedTabs.removeOne(page); + }); + } + tabHistoryMenu->addSeparator(); + auto *clearTabHistory = tabHistoryMenu->addAction(tr("Clear")); + connect(clearTabHistory, &QAction::triggered, this, [this]() { + while(!m_closedTabs.isEmpty()) { + delete m_closedTabs.dequeue(); + } + }); + }); + + connect(menu, &QMenu::aboutToShow, this, [this, reopenTabAction, tabHistoryMenu]() { + if(m_closedTabs.isEmpty()) { + reopenTabAction->setEnabled(false); + tabHistoryMenu->setEnabled(false); + } else { + reopenTabAction->setEnabled(true); + tabHistoryMenu->setEnabled(true); + } + }); + + return menu; +} + int TabWidget::addTab(WebView *view) { Q_ASSERT_X(view != nullptr, "TabWidget::addTab", "Tried to add null view"); @@ -90,6 +138,15 @@ void TabWidget::deleteTab(int index) { // deleting the widget automatically removes the tab? auto *w = widget(index); + + QWebEnginePage *p = qobject_cast(w)->page(); + p->setParent(nullptr); + m_closedTabs.enqueue(p); + + while(m_closedTabs.length() > 5) { + delete m_closedTabs.dequeue(); + } + disconnect(w); delete w; -- cgit v1.2.1