@@ -5223,6 +5223,10 @@ static bool _webui_mutex_is_webview_update(_webui_window_t* win, int update) {
52235223
52245224static void _webui_webview_update (_webui_window_t * win ) {
52255225
5226+ #ifdef WEBUI_LOG
5227+ printf ("[Core]\t\t_webui_webview_update(%zu)\n" , win -> num );
5228+ #endif
5229+
52265230 #ifdef _WIN32
52275231 // Windows - WebView2
52285232 _webui_mutex_is_webview_update (win , WEBUI_MUTEX_SET_TRUE );
@@ -11588,38 +11592,34 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1158811592
1158911593 while (true) {
1159011594
11591- // Check if there is any WebUI Messages
11595+ // Wait for WebUI Messages
1159211596
11593- if ( _webui_mutex_is_webview_update ( win , WEBUI_MUTEX_GET_STATUS )) {
11594- _webui_mutex_is_webview_update ( win , WEBUI_MUTEX_SET_FALSE );
11595- if ( win -> webView ) {
11596- // Stop this thread
11597- if ( win -> webView -> stop ) {
11598- break ;
11599- }
11600- // Window Size
11601- if ( win -> webView -> size ) {
11602- win -> webView -> size = false;
11603- _webui_wv_set_size ( win -> webView , win -> webView -> width , win -> webView -> height ) ;
11604- }
11605- // Window Position
11606- if ( win -> webView -> position ) {
11607- win -> webView -> position = false;
11608- _webui_wv_set_position ( win -> webView , win -> webView -> x , win -> webView -> y ) ;
11609- }
11610- // Navigation
11611- if ( win -> webView -> navigate ) {
11612- win -> webView -> navigate = false;
11613- _webui_wv_navigate ( win -> webView , win -> webView -> url ) ;
11614- }
11597+ _webui_mutex_lock ( & win -> mutex_webview_update );
11598+ _webui_condition_wait ( & win -> condition_webview_update , & win -> mutex_webview_update );
11599+
11600+ if ( win -> webView ) {
11601+ // Stop this thread
11602+ if ( win -> webView -> stop ) {
11603+ break ;
11604+ }
11605+ // Window Size
11606+ if ( win -> webView -> size ) {
11607+ win -> webView -> size = false ;
11608+ _webui_wv_set_size ( win -> webView , win -> webView -> width , win -> webView -> height );
11609+ }
11610+ // Window Position
11611+ if ( win -> webView -> position ) {
11612+ win -> webView -> position = false ;
11613+ _webui_wv_set_position ( win -> webView , win -> webView -> x , win -> webView -> y );
11614+ }
11615+ // Navigation
11616+ if ( win -> webView -> navigate ) {
11617+ win -> webView -> navigate = false ;
11618+ _webui_wv_navigate ( win -> webView , win -> webView -> url );
1161511619 }
1161611620 }
11617- else {
1161811621
11619- // At this moment, there is no WebUI messages
11620- // let's IDLE for 250ms in this current thread.
11621- _webui_sleep (250 );
11622- }
11622+ _webui_mutex_unlock (& win -> mutex_webview_update );
1162311623 }
1162411624 }
1162511625
@@ -11813,37 +11813,33 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1181311813
1181411814 // Check if there is any WebUI Messages
1181511815
11816- if ( _webui_mutex_is_webview_update ( win , WEBUI_MUTEX_GET_STATUS )) {
11817- _webui_mutex_is_webview_update ( win , WEBUI_MUTEX_SET_FALSE );
11818- if ( win -> webView ) {
11819- // Stop this thread
11820- if ( win -> webView -> stop ) {
11821- _webui_macos_wv_close (win -> webView -> index );
11822- break ;
11823- }
11824- // Window Size
11825- if ( win -> webView -> size ) {
11826- win -> webView -> size = false;
11827- _webui_wv_set_size ( win -> webView , win -> webView -> width , win -> webView -> height ) ;
11828- }
11829- // Window Position
11830- if ( win -> webView -> position ) {
11831- win -> webView -> position = false;
11832- _webui_wv_set_position ( win -> webView , win -> webView -> x , win -> webView -> y ) ;
11833- }
11834- // Navigation
11835- if ( win -> webView -> navigate ) {
11836- win -> webView -> navigate = false;
11837- _webui_wv_navigate ( win -> webView , win -> webView -> url ) ;
11838- }
11816+ _webui_mutex_lock ( & win -> mutex_webview_update );
11817+ _webui_condition_wait ( & win -> condition_webview_update , & win -> mutex_webview_update );
11818+
11819+ if ( win -> webView ) {
11820+ // Stop this thread
11821+ if (win -> webView -> stop ) {
11822+ _webui_macos_wv_close ( win -> webView -> index ) ;
11823+ break ;
11824+ }
11825+ // Window Size
11826+ if ( win -> webView -> size ) {
11827+ win -> webView -> size = false ;
11828+ _webui_wv_set_size ( win -> webView , win -> webView -> width , win -> webView -> height );
11829+ }
11830+ // Window Position
11831+ if ( win -> webView -> position ) {
11832+ win -> webView -> position = false ;
11833+ _webui_wv_set_position ( win -> webView , win -> webView -> x , win -> webView -> y );
11834+ }
11835+ // Navigation
11836+ if ( win -> webView -> navigate ) {
11837+ win -> webView -> navigate = false ;
11838+ _webui_wv_navigate ( win -> webView , win -> webView -> url );
1183911839 }
1184011840 }
11841- else {
1184211841
11843- // At this moment, there is no WebUI messages
11844- // let's IDLE for 250ms in this current thread.
11845- _webui_sleep (250 );
11846- }
11842+ _webui_mutex_unlock (& win -> mutex_webview_update );
1184711843 }
1184811844 }
1184911845
0 commit comments