3 weeks ago
use UiGeneric for WebView
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2025 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #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); UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC); if(var) { WebViewData *data = malloc(sizeof(WebViewData)); memset(data, 0, sizeof(WebViewData)); data->widget = webview; UiGeneric *value = var->value; value->get = ui_webview_get; value->get_type = ui_webview_get_type; value->set = ui_webview_set; value->obj = data; if(value->value && value->type && !strcmp(value->type, UI_WEBVIEW_OBJECT_TYPE)) { } } ui_set_widget_groups(obj->ctx, webview, args.groups); UI_APPLY_LAYOUT1(current, args); current->container->add(current->container, webview, FALSE); return webview; } void* ui_webview_get(UiGeneric *g) { return g->value; } const char* ui_webview_get_type(UiGeneric *g) { return UI_WEBVIEW_OBJECT_TYPE; } int ui_webview_set(UiGeneric *g, void *value, const char *type) { if(!type || strcmp(type, UI_WEBVIEW_OBJECT_TYPE)) { return 1; } WebViewData *obj = g->obj; if(!obj->widget) { return 1; } WebViewData *data = value; if(data->type == WEBVIEW_CONTENT_URL) { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(obj->widget), 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); } return 0; } void ui_webview_load_url(UiGeneric *g, const char *url) { WebViewData data = { .uri = (char*)url, .type = WEBVIEW_CONTENT_URL }; g->set(g, &data, UI_WEBVIEW_OBJECT_TYPE); } void ui_webview_load_content( UiGeneric *g, const char *uri, const char *content, size_t contentlength, const char *mimetype, const char *encoding) { WebViewData data; data.uri = (char*)uri; data.content = (char*)content; data.contentlength = contentlength; data.mimetype = (char*)mimetype; data.encoding = (char*)encoding; data.type = WEBVIEW_CONTENT_CONTENT; g->set(g, &data, UI_WEBVIEW_OBJECT_TYPE); } #endif