diff --git a/Userland/Applications/Browser/Tab.cpp b/Userland/Applications/Browser/Tab.cpp index 8eca540417..2262c4e899 100644 --- a/Userland/Applications/Browser/Tab.cpp +++ b/Userland/Applications/Browser/Tab.cpp @@ -264,6 +264,17 @@ Tab::Tab(BrowserWindow& window) return this->window().size(); }; + view().on_maximize_window = [this]() { + this->window().set_maximized(true); + return this->window().rect(); + }; + + view().on_minimize_window = [this]() { + this->window().set_minimized(true); + m_web_content_view->set_system_visibility_state(false); + return this->window().rect(); + }; + m_link_context_menu = GUI::Menu::construct(); auto link_default_action = GUI::Action::create("&Open", g_icon_bag.go_to, [this](auto&) { view().on_link_click(m_link_context_menu_url, "", 0); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp index f05acd7f7f..7e6422e869 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.cpp @@ -421,6 +421,20 @@ Gfx::IntSize OutOfProcessWebView::notify_server_did_request_resize_window(Gfx::I return {}; } +Gfx::IntRect OutOfProcessWebView::notify_server_did_request_maximize_window() +{ + if (on_maximize_window) + return on_maximize_window(); + return {}; +} + +Gfx::IntRect OutOfProcessWebView::notify_server_did_request_minimize_window() +{ + if (on_minimize_window) + return on_minimize_window(); + return {}; +} + void OutOfProcessWebView::notify_server_did_request_file(Badge, String const& path, i32 request_id) { auto file = FileSystemAccessClient::Client::the().try_request_file_read_only_approved(window(), path); diff --git a/Userland/Libraries/LibWebView/OutOfProcessWebView.h b/Userland/Libraries/LibWebView/OutOfProcessWebView.h index 830c86c96d..269c5d3313 100644 --- a/Userland/Libraries/LibWebView/OutOfProcessWebView.h +++ b/Userland/Libraries/LibWebView/OutOfProcessWebView.h @@ -115,6 +115,8 @@ public: Function on_restore_window; Function on_reposition_window; Function on_resize_window; + Function on_maximize_window; + Function on_minimize_window; private: OutOfProcessWebView(); @@ -175,6 +177,8 @@ private: virtual void notify_server_did_request_restore_window() override; virtual Gfx::IntPoint notify_server_did_request_reposition_window(Gfx::IntPoint const&) override; virtual Gfx::IntSize notify_server_did_request_resize_window(Gfx::IntSize const&) override; + virtual Gfx::IntRect notify_server_did_request_maximize_window() override; + virtual Gfx::IntRect notify_server_did_request_minimize_window() override; virtual void notify_server_did_request_file(Badge, String const& path, i32) override; void request_repaint(); diff --git a/Userland/Libraries/LibWebView/ViewImplementation.h b/Userland/Libraries/LibWebView/ViewImplementation.h index 306442428a..6294114da7 100644 --- a/Userland/Libraries/LibWebView/ViewImplementation.h +++ b/Userland/Libraries/LibWebView/ViewImplementation.h @@ -53,6 +53,8 @@ public: virtual void notify_server_did_request_restore_window() = 0; virtual Gfx::IntPoint notify_server_did_request_reposition_window(Gfx::IntPoint const&) = 0; virtual Gfx::IntSize notify_server_did_request_resize_window(Gfx::IntSize const&) = 0; + virtual Gfx::IntRect notify_server_did_request_maximize_window() = 0; + virtual Gfx::IntRect notify_server_did_request_minimize_window() = 0; virtual void notify_server_did_request_file(Badge, String const& path, i32) = 0; }; diff --git a/Userland/Libraries/LibWebView/WebContentClient.cpp b/Userland/Libraries/LibWebView/WebContentClient.cpp index 9edadcdab4..c5bb0a8afd 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.cpp +++ b/Userland/Libraries/LibWebView/WebContentClient.cpp @@ -215,6 +215,16 @@ Messages::WebContentClient::DidRequestResizeWindowResponse WebContentClient::did return m_view.notify_server_did_request_resize_window(size); } +Messages::WebContentClient::DidRequestMaximizeWindowResponse WebContentClient::did_request_maximize_window() +{ + return m_view.notify_server_did_request_maximize_window(); +} + +Messages::WebContentClient::DidRequestMinimizeWindowResponse WebContentClient::did_request_minimize_window() +{ + return m_view.notify_server_did_request_minimize_window(); +} + void WebContentClient::did_request_file(String const& path, i32 request_id) { m_view.notify_server_did_request_file({}, path, request_id); diff --git a/Userland/Libraries/LibWebView/WebContentClient.h b/Userland/Libraries/LibWebView/WebContentClient.h index 9c4c26926d..b8ee9f4ab5 100644 --- a/Userland/Libraries/LibWebView/WebContentClient.h +++ b/Userland/Libraries/LibWebView/WebContentClient.h @@ -64,6 +64,8 @@ private: virtual void did_request_restore_window() override; virtual Messages::WebContentClient::DidRequestRepositionWindowResponse did_request_reposition_window(Gfx::IntPoint const&) override; virtual Messages::WebContentClient::DidRequestResizeWindowResponse did_request_resize_window(Gfx::IntSize const&) override; + virtual Messages::WebContentClient::DidRequestMaximizeWindowResponse did_request_maximize_window() override; + virtual Messages::WebContentClient::DidRequestMinimizeWindowResponse did_request_minimize_window() override; virtual void did_request_file(String const& path, i32) override; ViewImplementation& m_view; diff --git a/Userland/Services/WebContent/WebContentClient.ipc b/Userland/Services/WebContent/WebContentClient.ipc index 104c642089..bfe319b0b8 100644 --- a/Userland/Services/WebContent/WebContentClient.ipc +++ b/Userland/Services/WebContent/WebContentClient.ipc @@ -41,6 +41,8 @@ endpoint WebContentClient did_request_restore_window() =| did_request_reposition_window(Gfx::IntPoint position) => (Gfx::IntPoint window_position) did_request_resize_window(Gfx::IntSize size) => (Gfx::IntSize window_size) + did_request_maximize_window() => (Gfx::IntRect window_rect) + did_request_minimize_window() => (Gfx::IntRect window_rect) did_request_file(String path, i32 request_id) =| did_output_js_console_message(i32 message_index) =|