drop library update window
[omnplay] / src / omnplay.cpp
index d54f78d..8c2bafc 100644 (file)
@@ -124,6 +124,9 @@ void omnplay_destroy(omnplay_instance_t* app)
 
 static int find_index_of_playlist_item(omnplay_instance_t* app, int start, int idx)
 {
+    if(start < 0 || start >= app->playlist.count)
+        return -1;
+
     while(1)
     {
         if(app->playlist.item[start].omn_idx == idx)
@@ -226,6 +229,9 @@ static void* omnplay_thread_proc(void* data)
 
     g_warning("omnplay_thread_proc\n");
 
+    memset(&st_curr, 0, sizeof(OmPlrStatus));
+    memset(&st_prev, 0, sizeof(OmPlrStatus));
+
     /* connect */
     pthread_mutex_lock(&player->app->players.lock);
     r = OmPlrOpen(player->host, player->name, (OmPlrHandle*)&player->handle);
@@ -1093,6 +1099,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 +1125,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 +1178,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 +1191,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 +1204,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 +1230,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,24 +1247,19 @@ 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);
 
@@ -1241,13 +1269,12 @@ void omnplay_init(omnplay_instance_t* app)
 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);
@@ -1271,3 +1298,12 @@ void omnplay_playlist_normalize(omnplay_instance_t* app)
         if(omnplay_library_normalize_item(app, &app->playlist.item[i]))
             omnplay_playlist_draw_item(app, i);
 };
+
+void omnplay_set_status(omnplay_instance_t* app, char* str)
+{
+    gdk_threads_enter();
+//    gtk_label_set_text(GTK_LABEL(data), str);
+    gdk_flush();
+    gdk_threads_leave();
+};
+