diff -r f38d354623be -r dd9f17feae3e ui/cocoa/webview.m --- a/ui/cocoa/webview.m Thu Aug 06 17:48:19 2026 +0200 +++ b/ui/cocoa/webview.m Sat Aug 08 17:35:52 2026 +0200 @@ -29,6 +29,14 @@ #import "webview.h" #import "Container.h" +static UiWebViewData* create_webview_data(void) { + UiWebViewData *data = malloc(sizeof(UiWebViewData)); + memset(data, 0, sizeof(UiWebViewData)); + data->javascript = TRUE; + data->zoom = 1; + return data; +} + UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); @@ -47,11 +55,8 @@ if(value->value) { ui_webview_set(value, value->value, UI_WEBVIEW_OBJECT_TYPE); } else { - UiWebViewData *data = malloc(sizeof(UiWebViewData)); - memset(data, 0, sizeof(UiWebViewData)); + UiWebViewData *data = create_webview_data(); data->webview = (__bridge void*)webview; - data->javascript = TRUE; - data->zoom = 1; value->value = data; } } @@ -60,10 +65,7 @@ } UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { - UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); - memset(newdata, 0, sizeof(UiWebViewData)); - newdata->zoom = 1; - newdata->javascript = TRUE; + UiWebViewData *newdata = create_webview_data(); if(data) { newdata->uri = data->uri ? strdup(data->uri) : NULL; @@ -98,6 +100,12 @@ UiWebViewData *data = g->value; WKWebView *webview = (__bridge WKWebView*)g->obj; + if(data == NULL) { + data = create_webview_data(); + data->webview = g->obj; + g->value = data; + } + if(data->type == WEBVIEW_CONTENT_URL) { (void)ui_webview_get_uri(g); // this updates data->uri } @@ -157,6 +165,13 @@ void ui_webview_load_url(UiGeneric *g, const char *url) { WKWebView *webview = (__bridge WKWebView*)g->obj; UiWebViewData *data = g->value; + + if(data == NULL) { + data = create_webview_data(); + data->webview = g->obj; + g->value = data; + } + data->type = WEBVIEW_CONTENT_URL; if(!url) { @@ -183,6 +198,12 @@ UiWebViewData *data = g->value; WKWebView *webview = (__bridge WKWebView*)g->obj; + if(data == NULL) { + data = create_webview_data(); + data->webview = g->obj; + g->value = data; + } + data->type = WEBVIEW_CONTENT_CONTENT; free(data->uri);