2 weeks ago
update libs (ucx, toolkit, libidav)
/* * 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 "webview.h" #ifdef UI_WEBVIEW UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) { UiObject* current = uic_current_obj(obj); GtkWidget *webview = webkit_web_view_new(); 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->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; 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)) { // TODO } } 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->webview) { return 1; } WebViewData *data = value; if(data->type == WEBVIEW_CONTENT_URL) { 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(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; } 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); } 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