X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fomnplay.cpp;h=8c2bafc02ce9b0e00ef952b06b186e139a528a74;hb=f717f5b0949cf55190ebe9bb41aa07fa7fd545e1;hp=d54f78df9bb8583be6ec1d12448a60060b584336;hpb=e9b0f5d6d408984b64793383616db7ef7c137e0b;p=omnplay diff --git a/src/omnplay.cpp b/src/omnplay.cpp index d54f78d..8c2bafc 100644 --- a/src/omnplay.cpp +++ b/src/omnplay.cpp @@ -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(); +}; +