add more webview API

3 weeks ago

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 20 Feb 2025 22:32:58 +0100 (3 weeks ago)
changeset 469
3f6142271f58
parent 468
1f251c462f74
child 470
118e2386d5b4

add more webview API

ui/gtk/webview.c file | annotate | diff | comparison | revisions
ui/gtk/webview.h file | annotate | diff | comparison | revisions
ui/ui/webview.h file | annotate | diff | comparison | revisions
--- a/ui/gtk/webview.c	Wed Feb 19 22:44:49 2025 +0100
+++ b/ui/gtk/webview.c	Thu Feb 20 22:32:58 2025 +0100
@@ -28,19 +28,15 @@
 
 #include "toolkit.h"
 #include "container.h"
-#include "../ui/webview.h"
 
 #include "webview.h"
 
 #ifdef UI_WEBVIEW
 
-#include <webkit/webkit.h>
-
 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) {
     UiObject* current = uic_current_obj(obj);
     
     GtkWidget *webview = webkit_web_view_new();
-    //webkit_web_view_load_uri(WEBKIT_WEB_VIEW(webview), "https://code.unixwork.de");
     
     ui_set_name_and_style(webview, args.name, args.style_class);
     
@@ -48,7 +44,10 @@
     if(var) {
         WebViewData *data = malloc(sizeof(WebViewData));
         memset(data, 0, sizeof(WebViewData));
-        data->widget = webview;
+        data->webview = WEBKIT_WEB_VIEW(webview);
+        WebKitSettings *settings = webkit_web_view_get_settings(data->webview);
+        data->javascript = webkit_settings_get_enable_javascript(settings);
+        data->zoom = webkit_web_view_get_zoom_level(data->webview);
         
         UiGeneric *value = var->value;
         value->get = ui_webview_get;
@@ -56,7 +55,7 @@
         value->set = ui_webview_set;
         value->obj = data;
         if(value->value && value->type && !strcmp(value->type, UI_WEBVIEW_OBJECT_TYPE)) {
-            
+            // TODO
         }
     }
     
@@ -81,22 +80,25 @@
     }
     
     WebViewData *obj = g->obj;
-    if(!obj->widget) {
+    if(!obj->webview) {
         return 1;
     }
     
     WebViewData *data = value;
     if(data->type == WEBVIEW_CONTENT_URL) {
-        webkit_web_view_load_uri(WEBKIT_WEB_VIEW(obj->widget), data->uri);
+        webkit_web_view_load_uri(obj->webview, data->uri);
     } else {
         if(!data->content) {
             return 1;
         }
         
         GBytes *bytes = g_bytes_new(data->content, data->contentlength);
-        webkit_web_view_load_bytes(WEBKIT_WEB_VIEW(obj->widget), bytes, data->mimetype, data->encoding, data->uri);
+        webkit_web_view_load_bytes(obj->webview, bytes, data->mimetype, data->encoding, data->uri);
     }
     
+    ui_webview_enable_javascript(g, data->javascript);
+    webkit_web_view_set_zoom_level(data->webview, data->zoom);
+    
     return 0;
 }
 
@@ -123,5 +125,53 @@
     g->set(g, &data, UI_WEBVIEW_OBJECT_TYPE);
 }
 
+void ui_webview_reload(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    webkit_web_view_reload(webview->webview);
+}
+
+UiBool ui_webview_can_go_back(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    return webkit_web_view_can_go_back(webview->webview);
+}
+
+UiBool ui_webview_can_go_forward(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    return webkit_web_view_can_go_forward(webview->webview);
+}
+
+void ui_webview_go_back(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    webkit_web_view_go_back(webview->webview);
+}
+
+void ui_webview_go_forward(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    webkit_web_view_go_forward(webview->webview);
+}
+
+const char* ui_webview_get_uri(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    return webkit_web_view_get_uri(webview->webview);
+}
+
+void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) {
+    WebViewData *webview = g->obj;
+    WebKitSettings *settings = webkit_web_view_get_settings(webview->webview);
+    webkit_settings_set_enable_javascript(settings, enable);
+}
+
+void ui_webview_set_zoom(UiGeneric *g, double zoom) {
+    WebViewData *webview = g->obj;
+    webkit_web_view_set_zoom_level(webview->webview, zoom);
+    webview->zoom = zoom;
+}
+
+double ui_webview_get_zoom(UiGeneric *g) {
+    WebViewData *webview = g->obj;
+    webview->zoom = webkit_web_view_get_zoom_level(webview->webview);
+    return webview->zoom;
+}
+
 
 #endif
--- a/ui/gtk/webview.h	Wed Feb 19 22:44:49 2025 +0100
+++ b/ui/gtk/webview.h	Thu Feb 20 22:32:58 2025 +0100
@@ -28,6 +28,9 @@
 #ifndef WEBVIEW_H
 #define WEBVIEW_H
 
+#include "../ui/webview.h"
+#include <webkit/webkit.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -38,13 +41,16 @@
 };
     
 typedef struct WebViewData {
-    GtkWidget *widget;
+    WebKitWebView *webview;
     char *uri;
     char *mimetype;
     char *encoding;
     char *content;
     size_t contentlength;
     enum WebViewDataType type;
+    
+    double zoom;
+    UiBool javascript;
 } WebViewData;
 
 void* ui_webview_get(UiGeneric *g);
--- a/ui/ui/webview.h	Wed Feb 19 22:44:49 2025 +0100
+++ b/ui/ui/webview.h	Thu Feb 20 22:32:58 2025 +0100
@@ -71,6 +71,17 @@
         const char *encoding);
 
 
+void ui_webview_reload(UiGeneric *g);
+UiBool ui_webview_can_go_back(UiGeneric *g);
+UiBool ui_webview_can_go_forward(UiGeneric *g);
+void ui_webview_go_back(UiGeneric *g);
+void ui_webview_go_forward(UiGeneric *g);
+const char * ui_webview_get_uri(UiGeneric *g);
+void ui_webview_enable_javascript(UiGeneric *g, UiBool enable);
+void ui_webview_set_zoom(UiGeneric *g, double zoom);
+double ui_webview_get_zoom(UiGeneric *g);
+
+
 #ifdef __cplusplus
 }
 #endif

mercurial