@@ -213,6 +213,10 @@ typedef struct webui_event_inf_t {
213213 typedef void (* gtk_window_set_resizable_func )(void * , int );
214214 typedef void (* gtk_window_set_position_func )(void * , int );
215215 typedef unsigned long (* g_signal_connect_data_func )(void * , const char * , void (* callback )(void ), void * , void * , int );
216+ typedef void (* gtk_widget_set_visual_func )(void * , void * );
217+ typedef void * (* gtk_widget_get_screen_func )(void * );
218+ typedef void * (* gdk_screen_get_rgba_visual_func )(void * );
219+ typedef void (* gtk_widget_set_app_paintable_func )(void * , int );
216220 // GTK Symbol Initialization
217221 static gtk_init_func gtk_init = NULL ;
218222 static gtk_widget_show_all_func gtk_widget_show_all = NULL ;
@@ -236,6 +240,10 @@ typedef struct webui_event_inf_t {
236240 static gtk_window_set_position_func gtk_window_set_position = NULL ;
237241 static g_signal_connect_data_func g_signal_connect_data = NULL ;
238242 static g_idle_add_func g_idle_add = NULL ;
243+ static gtk_widget_set_visual_func gtk_widget_set_visual = NULL ;
244+ static gtk_widget_get_screen_func gtk_widget_get_screen = NULL ;
245+ static gdk_screen_get_rgba_visual_func gdk_screen_get_rgba_visual = NULL ;
246+ static gtk_widget_set_app_paintable_func gtk_widget_set_app_paintable = NULL ;
239247 // GTK Structs
240248 typedef struct {
241249 int x ;
@@ -251,13 +259,15 @@ typedef struct webui_event_inf_t {
251259 typedef int (* webkit_1ptr_arg_2int_func )(void * );
252260 typedef void * (* webkit_1ptr_arg_2ptr_func )(void * );
253261 typedef const char * (* webkit_1ptr_arg_2str_func )(void * );
262+ typedef void (* webkit_web_view_set_background_color_func )(void * , void * );
254263 static webkit_web_view_new_func webkit_web_view_new = NULL ;
255264 static webkit_web_view_load_uri_func webkit_web_view_load_uri = NULL ;
256265 static webkit_web_view_get_title_func webkit_web_view_get_title = NULL ;
257266 static webkit_1ptr_arg_func webkit_policy_decision_ignore = NULL ;
258267 static webkit_1ptr_arg_2int_func webkit_navigation_policy_decision_get_navigation_type = NULL ;
259268 static webkit_1ptr_arg_2ptr_func webkit_navigation_policy_decision_get_request = NULL ;
260269 static webkit_1ptr_arg_2str_func webkit_uri_request_get_uri = NULL ;
270+ static webkit_web_view_set_background_color_func webkit_web_view_set_background_color = NULL ;
261271
262272 typedef struct _webui_wv_linux_t {
263273 // Linux WebView
@@ -12116,9 +12126,38 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1211612126 // Initialize GTK Window
1211712127 win -> webView -> gtk_win = gtk_window_new (0 );
1211812128
12129+ // GTK transparent window
12130+ if (win -> transparent ) {
12131+ // Enable transparency if the APIs are available
12132+ if (gtk_widget_set_visual && gtk_widget_get_screen && gdk_screen_get_rgba_visual ) {
12133+ void * screen = gtk_widget_get_screen (win -> webView -> gtk_win );
12134+ if (screen ) {
12135+ void * visual = gdk_screen_get_rgba_visual (screen );
12136+ if (visual ) {
12137+ gtk_widget_set_visual (win -> webView -> gtk_win , visual );
12138+ }
12139+ }
12140+ }
12141+ // Enable app paintable for transparency
12142+ if (gtk_widget_set_app_paintable ) {
12143+ gtk_widget_set_app_paintable (win -> webView -> gtk_win , 1 );
12144+ }
12145+ }
12146+
1211912147 // Initialize WebView
1212012148 win -> webView -> gtk_wv = webkit_web_view_new ();
1212112149
12150+ // WebView transparent
12151+ if (win -> transparent && webkit_web_view_set_background_color ) {
12152+ struct {
12153+ double red ;
12154+ double green ;
12155+ double blue ;
12156+ double alpha ;
12157+ } transparent_color = {0.0 , 0.0 , 0.0 , 0.0 };
12158+ webkit_web_view_set_background_color (win -> webView -> gtk_wv , & transparent_color );
12159+ }
12160+
1212212161 // Window Settings
1212312162 gtk_window_set_default_size (win -> webView -> gtk_win , win -> webView -> width , win -> webView -> height );
1212412163 gtk_container_add (win -> webView -> gtk_win , win -> webView -> gtk_wv );
@@ -12289,7 +12328,15 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1228912328 libgtk , "g_signal_connect_data" );
1229012329 g_idle_add = (g_idle_add_func )dlsym (
1229112330 libgtk , "g_idle_add" );
12292-
12331+ gtk_widget_set_visual = (gtk_widget_set_visual_func )dlsym (
12332+ libgtk , "gtk_widget_set_visual" );
12333+ gtk_widget_get_screen = (gtk_widget_get_screen_func )dlsym (
12334+ libgtk , "gtk_widget_get_screen" );
12335+ gdk_screen_get_rgba_visual = (gdk_screen_get_rgba_visual_func )dlsym (
12336+ libgtk , "gdk_screen_get_rgba_visual" );
12337+ gtk_widget_set_app_paintable = (gtk_widget_set_app_paintable_func )dlsym (
12338+ libgtk , "gtk_widget_set_app_paintable" );
12339+
1229312340 // WebView Symbol Addresses
1229412341 webkit_web_view_new = (webkit_web_view_new_func )dlsym (
1229512342 libwebkit , "webkit_web_view_new" );
@@ -12305,6 +12352,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1230512352 libwebkit , "webkit_navigation_policy_decision_get_request" );
1230612353 webkit_uri_request_get_uri = (webkit_1ptr_arg_2str_func )dlsym (
1230712354 libwebkit , "webkit_uri_request_get_uri" );
12355+ webkit_web_view_set_background_color = (webkit_web_view_set_background_color_func )dlsym (
12356+ libwebkit , "webkit_web_view_set_background_color" );
1230812357
1230912358 // Check GTK
1231012359 if (
0 commit comments