From 5cfed4524dd07e4eaba64daa6e54327a134bd253 Mon Sep 17 00:00:00 2001 From: Tyler Dence Date: Tue, 3 Dec 2024 18:32:43 -0500 Subject: [PATCH] Inspector+UI: Close inspector with shortcuts This brings keyboard shortcuts for the inspector up with common convention in FF and Chrome: Ctrl+Shift+C now also opens the inspector, and F12, Ctrl+W, and Ctrl+Shift+I now close the inspector when the inspector window is focused. Resolves #972 --- UI/Qt/BrowserWindow.cpp | 5 +++-- UI/Qt/InspectorWidget.cpp | 9 +++++++++ UI/Qt/InspectorWidget.h | 3 +++ UI/Qt/Tab.cpp | 15 ++++++++++++++- UI/Qt/Tab.h | 2 ++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/UI/Qt/BrowserWindow.cpp b/UI/Qt/BrowserWindow.cpp index 5518d8221be..080011f3946 100644 --- a/UI/Qt/BrowserWindow.cpp +++ b/UI/Qt/BrowserWindow.cpp @@ -355,7 +355,9 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow auto* inspector_action = new QAction("Open &Inspector", this); inspector_action->setIcon(load_icon_from_uri("resource://icons/browser/dom-tree.png"sv)); - inspector_action->setShortcuts({ QKeySequence("Ctrl+Shift+I"), QKeySequence("F12") }); + inspector_action->setShortcuts({ QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_I), + QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C), + QKeySequence(Qt::Key_F12) }); inspect_menu->addAction(inspector_action); QObject::connect(inspector_action, &QAction::triggered, this, [this] { if (m_current_tab) { @@ -472,7 +474,6 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow }); auto* clear_cache_action = new QAction("Clear &Cache", this); - clear_cache_action->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C)); clear_cache_action->setIcon(load_icon_from_uri("resource://icons/browser/clear-cache.png"sv)); debug_menu->addAction(clear_cache_action); QObject::connect(clear_cache_action, &QAction::triggered, this, [this] { diff --git a/UI/Qt/InspectorWidget.cpp b/UI/Qt/InspectorWidget.cpp index bad70798384..36b954c5e67 100644 --- a/UI/Qt/InspectorWidget.cpp +++ b/UI/Qt/InspectorWidget.cpp @@ -25,10 +25,18 @@ InspectorWidget::InspectorWidget(QWidget* tab, WebContentView& content_view) : QWidget(tab, Qt::Window) { m_inspector_view = new WebContentView(this); + m_inspector_view->on_close = [this] { + close(); + }; if (is_using_dark_system_theme(*this)) m_inspector_view->update_palette(WebContentView::PaletteMode::Dark); + auto* inspector_close_action = new QAction("Close Inspector", this); + inspector_close_action->setShortcuts({ QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_I), QKeySequence(Qt::CTRL | Qt::Key_W), QKeySequence(Qt::Key_F12) }); + addAction(inspector_close_action); + connect(inspector_close_action, &QAction::triggered, [this]() { close(); }); + m_inspector_client = make(content_view, *m_inspector_view); m_edit_node_action = new QAction("&Edit node", this); @@ -206,6 +214,7 @@ void InspectorWidget::closeEvent(QCloseEvent* event) { event->accept(); m_inspector_client->clear_selection(); + emit closed(); } } diff --git a/UI/Qt/InspectorWidget.h b/UI/Qt/InspectorWidget.h index 89478080e85..0b7623655bb 100644 --- a/UI/Qt/InspectorWidget.h +++ b/UI/Qt/InspectorWidget.h @@ -35,6 +35,9 @@ public: public slots: void device_pixel_ratio_changed(qreal dpi); +signals: + void closed(); + private: virtual bool event(QEvent*) override; void closeEvent(QCloseEvent*) override; diff --git a/UI/Qt/Tab.cpp b/UI/Qt/Tab.cpp index b8d3b9eb5a5..f34397d57d7 100644 --- a/UI/Qt/Tab.cpp +++ b/UI/Qt/Tab.cpp @@ -899,10 +899,23 @@ void Tab::recreate_toolbar_icons() m_hamburger_button->setIcon(create_tvg_icon_with_theme_colors("hamburger", palette())); } +void Tab::recreate_inspector() +{ + if (m_inspector_widget) + m_inspector_widget->deleteLater(); + + m_inspector_widget = new InspectorWidget(this, view()); + + QObject::connect(m_inspector_widget, &InspectorWidget::closed, [this] { + m_inspector_widget->deleteLater(); + m_inspector_widget = nullptr; + }); +} + void Tab::show_inspector_window(InspectorTarget inspector_target) { if (!m_inspector_widget) - m_inspector_widget = new InspectorWidget(this, view()); + recreate_inspector(); else m_inspector_widget->inspect(); diff --git a/UI/Qt/Tab.h b/UI/Qt/Tab.h index ad04a9b1d60..6b286b50654 100644 --- a/UI/Qt/Tab.h +++ b/UI/Qt/Tab.h @@ -125,6 +125,8 @@ private: void close_sub_widgets(); + void recreate_inspector(); + QBoxLayout* m_layout { nullptr }; QToolBar* m_toolbar { nullptr }; QToolButton* m_hamburger_button { nullptr };