use GThread for library refresh proc
authorMaksym Veremeyenko <verem@m1stereo.tv>
Sat, 25 Jun 2011 08:32:47 +0000 (11:32 +0300)
committerMaksym Veremeyenko <verem@m1stereo.tv>
Sat, 25 Jun 2011 08:32:47 +0000 (11:32 +0300)
src/library.c
src/omnplay.h

index ab6cee7..d2e73f3 100644 (file)
@@ -237,17 +237,15 @@ static void* omnplay_library_refresh_proc(void* data)
     int count, i;
     playlist_item_t* items;
 
-#ifndef _WIN32
     gdk_threads_enter();
-#endif /* _WIN32 */
+
     /* create UI for monitoring update */
     ui_library_refresh(app, &refresh_ui[0], &refresh_ui[1]);
     gtk_widget_show_all(refresh_ui[0]);
     gtk_window_present(GTK_WINDOW(refresh_ui[0]));
-#ifndef _WIN32
+
     gdk_flush();
     gdk_threads_leave();
-#endif /* _WIN32 */
 
     items = (playlist_item_t*)malloc(sizeof(playlist_item_t) * MAX_LIBRARY_ITEMS);
 
@@ -263,6 +261,11 @@ static void* omnplay_library_refresh_proc(void* data)
         if(app->library.whois[0])
             omnplay_whois_list(app, items, &count);
 
+        gdk_threads_enter();
+        gtk_label_set_text(GTK_LABEL(refresh_ui[1]), "Setting library...");
+        gdk_flush();
+        gdk_threads_leave();
+
         pthread_mutex_lock(&app->library.lock);
 
         for(i = 0; i < count; i++)
@@ -287,26 +290,21 @@ static void* omnplay_library_refresh_proc(void* data)
     gdk_flush();
     gdk_threads_leave();
 
-#ifndef _WIN32
     gdk_threads_enter();
-#endif /* _WIN32 */
     gtk_widget_destroy(refresh_ui[0]);
-#ifndef _WIN32
     gdk_flush();
     gdk_threads_leave();
-#endif /* _WIN32 */
 
     return NULL;
 };
 
 void omnplay_library_refresh(omnplay_instance_t* app)
 {
-    if(app->library.refresh_thread_r)
-        pthread_join(app->library.refresh_thread, NULL);
-    app->library.refresh_thread_r = 1;
+    if(app->library.refresh_thread)
+        g_thread_join(app->library.refresh_thread);
 
-    pthread_create(&app->library.refresh_thread, NULL,
-        omnplay_library_refresh_proc, app);
+    app->library.refresh_thread = g_thread_create(
+        omnplay_library_refresh_proc, app, TRUE, NULL);
 };
 
 void omnplay_library_draw(omnplay_instance_t* app)
index 1fdec39..e70d78b 100644 (file)
@@ -155,8 +155,7 @@ typedef struct omnplay_instance
         char filename[PATH_MAX];
         char whois[PATH_MAX];
         pthread_mutex_t lock;
-        pthread_t refresh_thread;
-        int refresh_thread_r;
+        GThread* refresh_thread;
         GtkWidget *search;
     } library;
     struct