From 67ab6dd2e6a6349c1eb18d39fbf93e727158178f Mon Sep 17 00:00:00 2001 From: Matthew Costa Date: Wed, 6 Jul 2022 14:36:49 +0100 Subject: [PATCH] Ladybird: Allow browser tabs to be closed This is a small patch which wires up the tab close button. --- Ladybird/BrowserWindow.cpp | 11 +++++++++++ Ladybird/BrowserWindow.h | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Ladybird/BrowserWindow.cpp b/Ladybird/BrowserWindow.cpp index d9ab7edfa5..18014317a3 100644 --- a/Ladybird/BrowserWindow.cpp +++ b/Ladybird/BrowserWindow.cpp @@ -29,6 +29,7 @@ BrowserWindow::BrowserWindow(Core::EventLoop& event_loop) setWindowTitle(m_tabs_container->tabText(index)); setWindowIcon(m_tabs_container->tabIcon(index)); }); + QObject::connect(m_tabs_container, &QTabWidget::tabCloseRequested, this, &BrowserWindow::close_tab); new_tab(); @@ -46,11 +47,21 @@ void BrowserWindow::new_tab() } m_tabs_container->addTab(tab_ptr, "New Tab"); + m_tabs_container->setCurrentWidget(tab_ptr); QObject::connect(tab_ptr, &Tab::title_changed, this, &BrowserWindow::tab_title_changed); QObject::connect(tab_ptr, &Tab::favicon_changed, this, &BrowserWindow::tab_favicon_changed); } +void BrowserWindow::close_tab(int index) +{ + auto* tab = m_tabs_container->widget(index); + m_tabs_container->removeTab(index); + m_tabs.remove_first_matching([&](auto& entry) { + return entry == tab; + }); +} + int BrowserWindow::tab_index(Tab* tab) { return m_tabs_container->indexOf(tab); diff --git a/Ladybird/BrowserWindow.h b/Ladybird/BrowserWindow.h index 2324dd5e58..a6677af187 100644 --- a/Ladybird/BrowserWindow.h +++ b/Ladybird/BrowserWindow.h @@ -5,7 +5,7 @@ */ #include "Tab.h" -#include +#include #include #include #include @@ -33,10 +33,11 @@ public slots: void tab_title_changed(int index, QString const&); void tab_favicon_changed(int index, QIcon icon); void new_tab(); + void close_tab(int index); private: QTabWidget* m_tabs_container { nullptr }; - Vector> m_tabs; + NonnullOwnPtrVector m_tabs; Tab* m_current_tab { nullptr }; Core::EventLoop& m_event_loop;