From 8604765c3660dbea9cae6996d5750bfb985e6751 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sun, 27 Jul 2025 20:21:07 +0530 Subject: Add web.view.run_js + change rpc js api --- src/widgets/BrowserWindow.cpp | 4 ++++ src/widgets/BrowserWindow.hpp | 1 + src/widgets/Decorations.cpp | 6 ++++++ src/widgets/Decorations.hpp | 1 + src/widgets/EdgeDecoration.cpp | 9 ++++++++- src/widgets/EdgeDecoration.hpp | 1 + src/widgets/IWebViewMediator.hpp | 1 + src/widgets/WebView.cpp | 29 ++++++++++++++++------------- src/widgets/WebView.hpp | 2 ++ src/widgets/WebViewStack.cpp | 10 ++++++++++ src/widgets/WebViewStack.hpp | 1 + 11 files changed, 51 insertions(+), 14 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/BrowserWindow.cpp b/src/widgets/BrowserWindow.cpp index 5d78360..1971b9c 100644 --- a/src/widgets/BrowserWindow.cpp +++ b/src/widgets/BrowserWindow.cpp @@ -93,6 +93,10 @@ void BrowserWindow::set_html(const QString &html, WebViewId webview_id) { get_webview_mediator(webview_id)->set_html(html, webview_id); } +void BrowserWindow::run_javascript(const QString &js_code, WebViewId webview_id) { + get_webview_mediator(webview_id)->run_javascript(js_code, webview_id); +} + void BrowserWindow::expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) { get_webview_mediator(webview_id)->expose_rpc_function(name, action, webview_id); diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp index 3dc9e69..2ea7b88 100644 --- a/src/widgets/BrowserWindow.hpp +++ b/src/widgets/BrowserWindow.hpp @@ -38,6 +38,7 @@ public: bool has_webview(WebViewId webview_id); void open_url(const QUrl &url, OpenType open_type, WebViewId webview_id); void set_html(const QString &html, WebViewId webview_id); + void run_javascript(const QString &js_code, WebViewId webview_id); void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id); bool on_window_key_event(QKeyEvent *event); diff --git a/src/widgets/Decorations.cpp b/src/widgets/Decorations.cpp index 7886442..dc644d5 100644 --- a/src/widgets/Decorations.cpp +++ b/src/widgets/Decorations.cpp @@ -84,6 +84,12 @@ void Decorations::set_html(const QString &html, WebViewId view_id) { decoration.value()->set_html(html); } +void Decorations::run_javascript(const QString &js_code, WebViewId view_id) { + auto decoration = get_decoration_widget_by_view_id(view_id); + if (decoration.has_value()) + decoration.value()->run_javascript(js_code); +} + std::optional Decorations::get_view_id(DecorationType type) { auto decoration = get_decoration_widget_type(type); return decoration.has_value() ? decoration.value()->get_view_id() : std::nullopt; diff --git a/src/widgets/Decorations.hpp b/src/widgets/Decorations.hpp index 9788359..97e0415 100644 --- a/src/widgets/Decorations.hpp +++ b/src/widgets/Decorations.hpp @@ -29,6 +29,7 @@ public: bool has_webview(WebViewId view_id) override; void open_url(const QUrl &url, OpenType open_type, WebViewId view_id) override; void set_html(const QString &html, WebViewId view_id) override; + void run_javascript(const QString &js_code, WebViewId webview_id) override; void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) override; diff --git a/src/widgets/EdgeDecoration.cpp b/src/widgets/EdgeDecoration.cpp index 7351552..bb114bf 100644 --- a/src/widgets/EdgeDecoration.cpp +++ b/src/widgets/EdgeDecoration.cpp @@ -11,7 +11,8 @@ QString default_html_layout = R"HTML(