diff --git a/Userland/Applications/Browser/Tab.cpp b/Userland/Applications/Browser/Tab.cpp index 588d71e899..2cc11b5dc1 100644 --- a/Userland/Applications/Browser/Tab.cpp +++ b/Userland/Applications/Browser/Tab.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2020-2021, Andreas Kling * Copyright (c) 2021, Maciej Zygmanowski + * Copyright (c) 2021, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -79,20 +80,6 @@ void Tab::view_source(const URL& url, const String& source) window->show(); } -void Tab::view_dom_tree(const String& dom_tree) -{ - auto window = GUI::Window::construct(&this->window()); - window->resize(300, 500); - window->set_title("DOM inspector"); - window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png")); - window->set_main_widget(); - - auto* inspector_widget = static_cast(window->main_widget()); - inspector_widget->set_dom_json(dom_tree); - window->show(); - window->move_to_front(); -} - Tab::Tab(BrowserWindow& window) { load_from_gml(tab_gml); @@ -290,7 +277,8 @@ Tab::Tab(BrowserWindow& window) }; hooks().on_get_dom_tree = [this](auto& dom_tree) { - view_dom_tree(dom_tree); + if (m_dom_inspector_widget) + m_dom_inspector_widget->set_dom_json(dom_tree); }; hooks().on_js_console_output = [this](auto& method, auto& line) { @@ -479,7 +467,22 @@ BrowserWindow& Tab::window() void Tab::show_inspector_window(Browser::Tab::InspectorTarget) { + if (!m_dom_inspector_widget) { + auto window = GUI::Window::construct(&this->window()); + window->resize(300, 500); + window->set_title("DOM inspector"); + window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png")); + window->on_close = [&]() { + // FIXME: Clear inspected node for OOPWV + }; + m_dom_inspector_widget = window->set_main_widget(); + } + m_web_content_view->inspect_dom_tree(); + + auto* window = m_dom_inspector_widget->window(); + window->show(); + window->move_to_front(); } } diff --git a/Userland/Applications/Browser/Tab.h b/Userland/Applications/Browser/Tab.h index 2cfbef51f9..5e95648001 100644 --- a/Userland/Applications/Browser/Tab.h +++ b/Userland/Applications/Browser/Tab.h @@ -22,6 +22,7 @@ class WebViewHooks; namespace Browser { class BrowserWindow; +class InspectorWidget; class Tab final : public GUI::Widget { C_OBJECT(Tab); @@ -82,7 +83,6 @@ private: void update_bookmark_button(const String& url); void start_download(const URL& url); void view_source(const URL& url, const String& source); - void view_dom_tree(const String&); History m_history; @@ -90,6 +90,7 @@ private: RefPtr m_location_box; RefPtr m_bookmark_button; + RefPtr m_dom_inspector_widget; RefPtr m_console_window; RefPtr m_statusbar; RefPtr m_toolbar_container;