aboutsummaryrefslogtreecommitdiff
path: root/src/subwindow/tabwidget.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-09-22 13:07:33 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-09-22 13:07:33 +0200
commit9c12d813966e0fdc4542a7001ffa135722840de0 (patch)
tree3e2e382a52d7c1fc6eecfdd7ac1200747d5de3a4 /src/subwindow/tabwidget.cpp
parentAdd updater notes to documentation (diff)
downloadsmolbote-9c12d813966e0fdc4542a7001ffa135722840de0.tar.xz
SubWindow: add 'open last closed tab/tabs' actions
Diffstat (limited to 'src/subwindow/tabwidget.cpp')
-rw-r--r--src/subwindow/tabwidget.cpp57
1 files changed, 57 insertions, 0 deletions
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<WebProfile *>(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<WebProfile *>(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<WebView *>(w)->page();
+ p->setParent(nullptr);
+ m_closedTabs.enqueue(p);
+
+ while(m_closedTabs.length() > 5) {
+ delete m_closedTabs.dequeue();
+ }
+
disconnect(w);
delete w;