Mercurial > dwindows
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; |