move omneon status threads to GThread
[omnplay] / src / omnplay.cpp
index 219f5d6..801cbaa 100644 (file)
@@ -1093,6 +1093,20 @@ static gboolean on_playlist_grid_key(GtkWidget *widget, GdkEventKey *event, gpoi
                 return TRUE;
             };
             break;
+        case GDK_KEY_uparrow:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                omnplay_playlist_item_swap(app, -1);
+                return TRUE;
+            };
+            break;
+        case GDK_KEY_downarrow:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                omnplay_playlist_item_swap(app, -1);
+                return TRUE;
+            };
+            break;
         case GDK_KEY_space:
             omnplay_ctl(app, BUTTON_PLAYER_PLAY);
             return TRUE;
@@ -1105,7 +1119,8 @@ static gboolean on_playlist_grid_key(GtkWidget *widget, GdkEventKey *event, gpoi
         case GDK_KEY_Delete:
             omnplay_playlist_item_del(app);
             return TRUE;
-        case GDK_KEY_BackSpace:
+        case GDK_E:
+        case GDK_e:
             omnplay_playlist_item_edit(app);
             return TRUE;
     };
@@ -1157,6 +1172,12 @@ static gboolean on_library_grid_key(GtkWidget *widget, GdkEventKey *event, gpoin
                 return TRUE;
             };
             break;
+        case GDK_KEY_BackSpace:
+            omnplay_library_add(app, 0);
+            return TRUE;
+        case GDK_KEY_F5:
+            omnplay_library_refresh(app);
+            return TRUE;
     };
 
     return FALSE;
@@ -1164,6 +1185,8 @@ static gboolean on_library_grid_key(GtkWidget *widget, GdkEventKey *event, gpoin
 
 static gboolean on_library_grid_button(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
+//    g_warning("on_library_grid_button: event->button=%d, event->type=%d", event->button, event->type);
+
     if(event->button==1 && event->type==GDK_2BUTTON_PRESS)
     {
         omnplay_library_add((omnplay_instance_t* )data, 0);
@@ -1175,6 +1198,8 @@ static gboolean on_library_grid_button(GtkWidget *widget, GdkEventButton *event,
 
 static gboolean on_playlist_grid_button(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
+//    g_warning("on_playlist_grid_button");
+
     if(event->button==1 && event->type==GDK_2BUTTON_PRESS)
     {
         omnplay_ctl((omnplay_instance_t* )data, BUTTON_PLAYER_CUE);
@@ -1199,10 +1224,12 @@ void omnplay_init(omnplay_instance_t* app)
         GTK_SIGNAL_FUNC(on_main_window_destroy), app);
 
     gtk_widget_add_events(app->playlist_grid, GDK_BUTTON_PRESS_MASK);
+    gtk_widget_add_events(app->playlist_grid, GDK_KEY_PRESS_MASK);
     gtk_signal_connect(GTK_OBJECT(app->playlist_grid), "key-press-event",
         GTK_SIGNAL_FUNC(on_playlist_grid_key), app);
 
     gtk_widget_add_events(app->library_grid, GDK_BUTTON_PRESS_MASK);
+    gtk_widget_add_events(app->library_grid, GDK_KEY_PRESS_MASK);
     gtk_signal_connect(GTK_OBJECT(app->library_grid), "key-press-event",
         GTK_SIGNAL_FUNC(on_library_grid_key), app);
 
@@ -1214,43 +1241,34 @@ void omnplay_init(omnplay_instance_t* app)
 
     /* create lock */
     pthread_mutex_init(&app->players.lock, &attr);
+    pthread_mutex_init(&app->playlist.lock, &attr);
+    pthread_mutex_init(&app->library.lock, &attr);
 
     /* create a omneon status thread */
     for(i = 0; i < app->players.count; i++)
-        pthread_create(&app->players.item[i].thread, NULL,
-            omnplay_thread_proc, &app->players.item[i]);
-
-
-    /* create lock */
-    pthread_mutex_init(&app->playlist.lock, &attr);
+        app->players.item[i].thread = g_thread_create(
+            omnplay_thread_proc, &app->players.item[i], TRUE, NULL);
 
     /* attach buttons click */
     for(i = 1; i < BUTTON_LAST; i++)
         gtk_signal_connect(GTK_OBJECT(app->buttons[i]), "clicked",
             GTK_SIGNAL_FUNC( on_button_click), app );
 
-    /* create lock */
-    pthread_mutex_init(&app->library.lock, &attr);
-
     /* load library */
     omnplay_library_load(app);
 
     pthread_mutexattr_destroy(&attr);
-
-    /* create UI for monitoring update */
-//    ui_library_refresh(app, &app->library.refresh_ui[0], &app->library.refresh_ui[1]);
 };
 
 void omnplay_release(omnplay_instance_t* app)
 {
     int i;
-    void* r;
 
     app->f_exit = 1;
 
     for(i = 0; i < app->players.count; i++)
         /* create a omneon status thread */
-        pthread_join(app->players.item[i].thread, &r);
+        g_thread_join(app->players.item[i].thread);
 
     /* destroy lock */
     pthread_mutex_destroy(&app->players.lock);