diff --git a/Userland/Applications/Browser/BrowserWindow.cpp b/Userland/Applications/Browser/BrowserWindow.cpp index 7d77766c33..58c32f73b7 100644 --- a/Userland/Applications/Browser/BrowserWindow.cpp +++ b/Userland/Applications/Browser/BrowserWindow.cpp @@ -211,22 +211,7 @@ void BrowserWindow::build_menus() auto js_console_action = GUI::Action::create( "Open &JS Console", { Mod_Ctrl, Key_I }, [this](auto&) { - auto& tab = active_tab(); - if (!tab.m_console_window) { - tab.m_console_window = GUI::Window::construct(this); - tab.m_console_window->resize(500, 300); - tab.m_console_window->set_title("JS Console"); - tab.m_console_window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-javascript.png")); - tab.m_console_window->set_main_widget(); - } - auto* console_widget = static_cast(tab.m_console_window->main_widget()); - console_widget->on_js_input = [&tab](const String& js_source) { - tab.m_web_content_view->js_console_input(js_source); - }; - console_widget->clear_output(); - tab.m_web_content_view->js_console_initialize(); - tab.m_console_window->show(); - tab.m_console_window->move_to_front(); + active_tab().show_console_window(); }, this); js_console_action->set_status_tip("Open JavaScript console for this page"); diff --git a/Userland/Applications/Browser/Tab.cpp b/Userland/Applications/Browser/Tab.cpp index dfd961a146..0a292b4119 100644 --- a/Userland/Applications/Browser/Tab.cpp +++ b/Userland/Applications/Browser/Tab.cpp @@ -294,10 +294,8 @@ Tab::Tab(BrowserWindow& window) }; hooks().on_js_console_output = [this](auto& method, auto& line) { - if (m_console_window) { - auto* console_widget = static_cast(m_console_window->main_widget()); - console_widget->handle_js_console_output(method, line); - } + if (m_console_widget) + m_console_widget->handle_js_console_output(method, line); }; auto focus_location_box_action = GUI::Action::create( @@ -503,4 +501,25 @@ void Tab::show_inspector_window(Browser::Tab::InspectorTarget inspector_target) window->move_to_front(); } +void Tab::show_console_window() +{ + if (!m_console_widget) { + auto console_window = GUI::Window::construct(&window()); + console_window->resize(500, 300); + console_window->set_title("JS Console"); + console_window->set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-javascript.png")); + m_console_widget = console_window->set_main_widget(); + m_console_widget->on_js_input = [this](String const& js_source) { + m_web_content_view->js_console_input(js_source); + }; + } + + m_console_widget->clear_output(); + m_web_content_view->js_console_initialize(); + + auto* window = m_console_widget->window(); + window->show(); + window->move_to_front(); +} + } diff --git a/Userland/Applications/Browser/Tab.h b/Userland/Applications/Browser/Tab.h index 5e95648001..02fbc9e3f9 100644 --- a/Userland/Applications/Browser/Tab.h +++ b/Userland/Applications/Browser/Tab.h @@ -23,6 +23,7 @@ namespace Browser { class BrowserWindow; class InspectorWidget; +class ConsoleWidget; class Tab final : public GUI::Widget { C_OBJECT(Tab); @@ -66,6 +67,8 @@ public: }; void show_inspector_window(InspectorTarget); + void show_console_window(); + const String& title() const { return m_title; } const Gfx::Bitmap* icon() const { return m_icon; } @@ -91,7 +94,7 @@ private: RefPtr m_location_box; RefPtr m_bookmark_button; RefPtr m_dom_inspector_widget; - RefPtr m_console_window; + RefPtr m_console_widget; RefPtr m_statusbar; RefPtr m_toolbar_container;