comparison gtk3/dw.c @ 2040:2c56a8e245e8

Move saved_thread so it compiles on non-webkit2
author mhessling@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 19 Nov 2019 04:08:30 +0000
parents 48b91f535f82
children a3fbe505307a
comparison
equal deleted inserted replaced
2039:7f2fb0c602f0 2040:2c56a8e245e8
1197 g_object_set_data(G_OBJECT(widget), text, GINT_TO_POINTER(cid)); 1197 g_object_set_data(G_OBJECT(widget), text, GINT_TO_POINTER(cid));
1198 } 1198 }
1199 1199
1200 static void _html_result_event(GObject *object, GAsyncResult *result, gpointer script_data) 1200 static void _html_result_event(GObject *object, GAsyncResult *result, gpointer script_data)
1201 { 1201 {
1202 pthread_t saved_thread = _dw_thread;
1202 #if USE_WEBKIT2 1203 #if USE_WEBKIT2
1203 WebKitJavascriptResult *js_result; 1204 WebKitJavascriptResult *js_result;
1204 #if WEBKIT_CHECK_VERSION(2, 22, 0) 1205 #if WEBKIT_CHECK_VERSION(2, 22, 0)
1205 JSCValue *value; 1206 JSCValue *value;
1206 #else 1207 #else
1209 #endif 1210 #endif
1210 GError *error = NULL; 1211 GError *error = NULL;
1211 int (*htmlresultfunc)(HWND, int, char *, void *, void *) = NULL; 1212 int (*htmlresultfunc)(HWND, int, char *, void *, void *) = NULL;
1212 gint handlerdata = GPOINTER_TO_INT(g_object_get_data(object, "_dw_html_result_id")); 1213 gint handlerdata = GPOINTER_TO_INT(g_object_get_data(object, "_dw_html_result_id"));
1213 void *user_data = NULL; 1214 void *user_data = NULL;
1214 pthread_t saved_thread = _dw_thread;
1215 1215
1216 _dw_thread = (pthread_t)-1; 1216 _dw_thread = (pthread_t)-1;
1217 if(handlerdata) 1217 if(handlerdata)
1218 { 1218 {
1219 SignalHandler work; 1219 SignalHandler work;
1237 return; 1237 return;
1238 } 1238 }
1239 1239
1240 #if WEBKIT_CHECK_VERSION(2, 22, 0) 1240 #if WEBKIT_CHECK_VERSION(2, 22, 0)
1241 value = webkit_javascript_result_get_js_value(js_result); 1241 value = webkit_javascript_result_get_js_value(js_result);
1242 if(jsc_value_is_string(value)) 1242 if(jsc_value_is_string(value))
1243 { 1243 {
1244 gchar *str_value = jsc_value_to_string(value); 1244 gchar *str_value = jsc_value_to_string(value);
1245 JSCException *exception = jsc_context_get_exception(jsc_value_get_context(value)); 1245 JSCException *exception = jsc_context_get_exception(jsc_value_get_context(value));
1246 #else 1246 #else
1247 context = webkit_javascript_result_get_global_context(js_result); 1247 context = webkit_javascript_result_get_global_context(js_result);
1248 value = webkit_javascript_result_get_value(js_result); 1248 value = webkit_javascript_result_get_value(js_result);
1249 if (JSValueIsString(context, value)) 1249 if (JSValueIsString(context, value))
1250 { 1250 {
1251 JSStringRef js_str_value; 1251 JSStringRef js_str_value;
1252 gchar *str_value; 1252 gchar *str_value;
1253 gsize str_length; 1253 gsize str_length;
1254 1254
1255 js_str_value = JSValueToStringCopy(context, value, NULL); 1255 js_str_value = JSValueToStringCopy(context, value, NULL);
1256 str_length = JSStringGetMaximumUTF8CStringSize(js_str_value); 1256 str_length = JSStringGetMaximumUTF8CStringSize(js_str_value);
1257 str_value = (gchar *)g_malloc (str_length); 1257 str_value = (gchar *)g_malloc (str_length);
1258 JSStringGetUTF8CString(js_str_value, str_value, str_length); 1258 JSStringGetUTF8CString(js_str_value, str_value, str_length);
1259 JSStringRelease(js_str_value); 1259 JSStringRelease(js_str_value);
1267 else 1267 else
1268 #endif 1268 #endif
1269 htmlresultfunc((HWND)object, DW_ERROR_NONE, str_value, user_data, script_data); 1269 htmlresultfunc((HWND)object, DW_ERROR_NONE, str_value, user_data, script_data);
1270 } 1270 }
1271 g_free (str_value); 1271 g_free (str_value);
1272 } 1272 }
1273 else if(htmlresultfunc) 1273 else if(htmlresultfunc)
1274 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, NULL, user_data, script_data); 1274 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, NULL, user_data, script_data);
1275 webkit_javascript_result_unref (js_result); 1275 webkit_javascript_result_unref (js_result);
1276 #endif 1276 #endif
1277 _dw_thread = saved_thread; 1277 _dw_thread = saved_thread;
1282 static void _html_changed_event(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer data) 1282 static void _html_changed_event(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer data)
1283 { 1283 {
1284 SignalHandler work = _get_signal_handler(data); 1284 SignalHandler work = _get_signal_handler(data);
1285 char *location = (char *)webkit_web_view_get_uri(web_view); 1285 char *location = (char *)webkit_web_view_get_uri(web_view);
1286 int status = 0; 1286 int status = 0;
1287 1287
1288 switch (load_event) { 1288 switch (load_event) {
1289 case WEBKIT_LOAD_STARTED: 1289 case WEBKIT_LOAD_STARTED:
1290 status = DW_HTML_CHANGE_STARTED; 1290 status = DW_HTML_CHANGE_STARTED;
1291 break; 1291 break;
1292 case WEBKIT_LOAD_REDIRECTED: 1292 case WEBKIT_LOAD_REDIRECTED:
1300 break; 1300 break;
1301 } 1301 }
1302 if(status && location && work.window && work.func) 1302 if(status && location && work.window && work.func)
1303 { 1303 {
1304 int (*htmlchangedfunc)(HWND, int, char *, void *) = work.func; 1304 int (*htmlchangedfunc)(HWND, int, char *, void *) = work.func;
1305 1305
1306 htmlchangedfunc(work.window, status, location, work.data); 1306 htmlchangedfunc(work.window, status, location, work.data);
1307 } 1307 }
1308 } 1308 }
1309 #else 1309 #else
1310 static void _html_changed_event(WebKitWebView *web_view, WebKitWebFrame *frame, gpointer data) 1310 static void _html_changed_event(WebKitWebView *web_view, WebKitWebFrame *frame, gpointer data)
1311 { 1311 {
1312 SignalHandler work = _get_signal_handler(data); 1312 SignalHandler work = _get_signal_handler(data);
1313 char *location = (char *)webkit_web_view_get_uri(web_view); 1313 char *location = (char *)webkit_web_view_get_uri(web_view);
1314 int status = 0; 1314 int status = 0;
1315 void **params = data; 1315 void **params = data;
1316 1316
1317 if(params) 1317 if(params)
1318 status = DW_POINTER_TO_INT(params[3]); 1318 status = DW_POINTER_TO_INT(params[3]);
1319 1319
1320 if(status && location && work.window && work.func) 1320 if(status && location && work.window && work.func)
1321 { 1321 {
1322 int (*htmlchangedfunc)(HWND, int, char *, void *) = work.func; 1322 int (*htmlchangedfunc)(HWND, int, char *, void *) = work.func;
1323 1323
1324 htmlchangedfunc(work.window, status, location, work.data); 1324 htmlchangedfunc(work.window, status, location, work.data);
1325 } 1325 }
1326 } 1326 }
1327 #endif 1327 #endif
1328 #endif 1328 #endif
2019 2019
2020 _dw_init_thread(); 2020 _dw_init_thread();
2021 2021
2022 /* Create a global object for glib activities */ 2022 /* Create a global object for glib activities */
2023 _DWObject = g_object_new(G_TYPE_OBJECT, NULL); 2023 _DWObject = g_object_new(G_TYPE_OBJECT, NULL);
2024 2024
2025 return TRUE; 2025 return TRUE;
2026 } 2026 }
2027 2027
2028 /* 2028 /*
2029 * Runs a message loop for Dynamic Windows. 2029 * Runs a message loop for Dynamic Windows.
2262 char outbuf[1025] = {0}; 2262 char outbuf[1025] = {0};
2263 2263
2264 va_start(args, format); 2264 va_start(args, format);
2265 vsnprintf(outbuf, 1024, format, args); 2265 vsnprintf(outbuf, 1024, format, args);
2266 va_end(args); 2266 va_end(args);
2267 2267
2268 if(flags & DW_MB_ERROR) 2268 if(flags & DW_MB_ERROR)
2269 gtkicon = GTK_MESSAGE_ERROR; 2269 gtkicon = GTK_MESSAGE_ERROR;
2270 else if(flags & DW_MB_WARNING) 2270 else if(flags & DW_MB_WARNING)
2271 gtkicon = GTK_MESSAGE_WARNING; 2271 gtkicon = GTK_MESSAGE_WARNING;
2272 else if(flags & DW_MB_INFORMATION) 2272 else if(flags & DW_MB_INFORMATION)
2273 gtkicon = GTK_MESSAGE_INFO; 2273 gtkicon = GTK_MESSAGE_INFO;
2274 else if(flags & DW_MB_QUESTION) 2274 else if(flags & DW_MB_QUESTION)
2275 gtkicon = GTK_MESSAGE_QUESTION; 2275 gtkicon = GTK_MESSAGE_QUESTION;
2276 2276
2277 if(flags & DW_MB_OKCANCEL) 2277 if(flags & DW_MB_OKCANCEL)
2278 gtkbuttons = GTK_BUTTONS_OK_CANCEL; 2278 gtkbuttons = GTK_BUTTONS_OK_CANCEL;
2279 else if(flags & (DW_MB_YESNO | DW_MB_YESNOCANCEL)) 2279 else if(flags & (DW_MB_YESNO | DW_MB_YESNOCANCEL))
2280 gtkbuttons = GTK_BUTTONS_YES_NO; 2280 gtkbuttons = GTK_BUTTONS_YES_NO;
2281 2281
11278 if(widget) 11278 if(widget)
11279 { 11279 {
11280 WebKitWebView *web_view = (WebKitWebView *)widget; 11280 WebKitWebView *web_view = (WebKitWebView *)widget;
11281 if(WEBKIT_IS_WEB_VIEW(web_view)) 11281 if(WEBKIT_IS_WEB_VIEW(web_view))
11282 return web_view; 11282 return web_view;
11283 #ifndef USE_WEBKIT2 11283 #ifndef USE_WEBKIT2
11284 web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(widget), "_dw_web_view"); 11284 web_view = (WebKitWebView *)g_object_get_data(G_OBJECT(widget), "_dw_web_view");
11285 if(WEBKIT_IS_WEB_VIEW(web_view)) 11285 if(WEBKIT_IS_WEB_VIEW(web_view))
11286 return web_view; 11286 return web_view;
11287 #endif 11287 #endif
11288 } 11288 }
11289 return NULL; 11289 return NULL;
11290 } 11290 }
11291 #endif 11291 #endif
11292 /* 11292 /*
11300 #ifdef USE_WEBKIT 11300 #ifdef USE_WEBKIT
11301 int _locked_by_me = FALSE; 11301 int _locked_by_me = FALSE;
11302 WebKitWebView *web_view; 11302 WebKitWebView *web_view;
11303 11303
11304 DW_MUTEX_LOCK; 11304 DW_MUTEX_LOCK;
11305 11305
11306 if((web_view = _dw_html_web_view(handle))) 11306 if((web_view = _dw_html_web_view(handle)))
11307 { 11307 {
11308 switch(action) 11308 switch(action)
11309 { 11309 {
11310 case DW_HTML_GOBACK: 11310 case DW_HTML_GOBACK:
11316 case DW_HTML_GOHOME: 11316 case DW_HTML_GOHOME:
11317 #ifdef USE_WEBKIT2 11317 #ifdef USE_WEBKIT2
11318 webkit_web_view_load_uri(web_view, DW_HOME_URL); 11318 webkit_web_view_load_uri(web_view, DW_HOME_URL);
11319 #else 11319 #else
11320 webkit_web_view_open(web_view, DW_HOME_URL); 11320 webkit_web_view_open(web_view, DW_HOME_URL);
11321 #endif 11321 #endif
11322 break; 11322 break;
11323 case DW_HTML_RELOAD: 11323 case DW_HTML_RELOAD:
11324 webkit_web_view_reload(web_view); 11324 webkit_web_view_reload(web_view);
11325 break; 11325 break;
11326 case DW_HTML_STOP: 11326 case DW_HTML_STOP:
11330 { 11330 {
11331 #ifdef USE_WEBKIT2 11331 #ifdef USE_WEBKIT2
11332 WebKitPrintOperation *operation = webkit_print_operation_new(web_view); 11332 WebKitPrintOperation *operation = webkit_print_operation_new(web_view);
11333 webkit_print_operation_run_dialog(operation, NULL); 11333 webkit_print_operation_run_dialog(operation, NULL);
11334 g_object_unref(operation); 11334 g_object_unref(operation);
11335 #else 11335 #else
11336 WebKitWebFrame *frame = webkit_web_view_get_focused_frame(web_view); 11336 WebKitWebFrame *frame = webkit_web_view_get_focused_frame(web_view);
11337 webkit_web_frame_print(frame); 11337 webkit_web_frame_print(frame);
11338 #endif 11338 #endif
11339 } 11339 }
11340 break; 11340 break;
11341 } 11341 }
11342 } 11342 }
11343 DW_MUTEX_UNLOCK; 11343 DW_MUTEX_UNLOCK;
11362 DW_MUTEX_LOCK; 11362 DW_MUTEX_LOCK;
11363 if((web_view = _dw_html_web_view(handle))) 11363 if((web_view = _dw_html_web_view(handle)))
11364 { 11364 {
11365 #ifdef USE_WEBKIT2 11365 #ifdef USE_WEBKIT2
11366 webkit_web_view_load_html(web_view, string, "file:///"); 11366 webkit_web_view_load_html(web_view, string, "file:///");
11367 #else 11367 #else
11368 webkit_web_view_load_html_string(web_view, string, "file:///"); 11368 webkit_web_view_load_html_string(web_view, string, "file:///");
11369 #endif 11369 #endif
11370 gtk_widget_show(GTK_WIDGET(handle)); 11370 gtk_widget_show(GTK_WIDGET(handle));
11371 } 11371 }
11372 DW_MUTEX_UNLOCK; 11372 DW_MUTEX_UNLOCK;
11373 return DW_ERROR_NONE; 11373 return DW_ERROR_NONE;
11374 #else 11374 #else
11396 { 11396 {
11397 #ifdef USE_WEBKIT2 11397 #ifdef USE_WEBKIT2
11398 webkit_web_view_load_uri(web_view, url); 11398 webkit_web_view_load_uri(web_view, url);
11399 #else 11399 #else
11400 webkit_web_view_open(web_view, url); 11400 webkit_web_view_open(web_view, url);
11401 #endif 11401 #endif
11402 gtk_widget_show(GTK_WIDGET(handle)); 11402 gtk_widget_show(GTK_WIDGET(handle));
11403 } 11403 }
11404 DW_MUTEX_UNLOCK; 11404 DW_MUTEX_UNLOCK;
11405 return DW_ERROR_NONE; 11405 return DW_ERROR_NONE;
11406 #else 11406 #else
11421 int dw_html_javascript_run(HWND handle, const char *script, void *scriptdata) 11421 int dw_html_javascript_run(HWND handle, const char *script, void *scriptdata)
11422 { 11422 {
11423 #ifdef USE_WEBKIT 11423 #ifdef USE_WEBKIT
11424 int _locked_by_me = FALSE; 11424 int _locked_by_me = FALSE;
11425 WebKitWebView *web_view; 11425 WebKitWebView *web_view;
11426 11426
11427 DW_MUTEX_LOCK; 11427 DW_MUTEX_LOCK;
11428 if((web_view = _dw_html_web_view(handle))) 11428 if((web_view = _dw_html_web_view(handle)))
11429 #ifdef USE_WEBKIT2 11429 #ifdef USE_WEBKIT2
11430 webkit_web_view_run_javascript(web_view, script, NULL, _html_result_event, scriptdata); 11430 webkit_web_view_run_javascript(web_view, script, NULL, _html_result_event, scriptdata);
11431 #else 11431 #else
11494 g_signal_connect(web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL); 11494 g_signal_connect(web_view, "populate-popup", G_CALLBACK(_dw_html_populate_popup_cb), NULL);
11495 /* Create a new websettings and enable java script */ 11495 /* Create a new websettings and enable java script */
11496 settings = webkit_web_settings_new(); 11496 settings = webkit_web_settings_new();
11497 g_object_set(G_OBJECT(settings), "enable-scripts", TRUE, NULL); 11497 g_object_set(G_OBJECT(settings), "enable-scripts", TRUE, NULL);
11498 webkit_web_view_set_settings(WEBKIT_WEB_VIEW(web_view), settings); 11498 webkit_web_view_set_settings(WEBKIT_WEB_VIEW(web_view), settings);
11499 #else 11499 #else
11500 settings = webkit_web_view_get_settings(web_view); 11500 settings = webkit_web_view_get_settings(web_view);
11501 /* Make sure java script is enabled */ 11501 /* Make sure java script is enabled */
11502 webkit_settings_set_enable_javascript(settings, TRUE); 11502 webkit_settings_set_enable_javascript(settings, TRUE);
11503 webkit_web_view_set_settings(web_view, settings); 11503 webkit_web_view_set_settings(web_view, settings);
11504 widget = (GtkWidget *)web_view; 11504 widget = (GtkWidget *)web_view;