diff options
Diffstat (limited to 'plugins/gtkui/widgets.c')
-rw-r--r-- | plugins/gtkui/widgets.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c index 1f474a88..c5fc0a94 100644 --- a/plugins/gtkui/widgets.c +++ b/plugins/gtkui/widgets.c @@ -1798,19 +1798,26 @@ selproperties_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32 return 0; } +static void +w_selproperties_init (struct ddb_gtkui_widget_s *w) { + fill_selproperties_cb (w); +} + ddb_gtkui_widget_t * w_selproperties_create (void) { w_selproperties_t *w = malloc (sizeof (w_selproperties_t)); memset (w, 0, sizeof (w_selproperties_t)); w->base.widget = gtk_scrolled_window_new (NULL, NULL); + w->base.init = w_selproperties_init; + w->base.message = selproperties_message; + gtk_widget_set_can_focus (w->base.widget, FALSE); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (w->base.widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); w->tree = gtk_tree_view_new (); gtk_widget_show (w->tree); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (w->tree), FALSE); gtk_container_add (GTK_CONTAINER (w->base.widget), w->tree); - w->base.message = selproperties_message; GtkListStore *store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_tree_view_set_model (GTK_TREE_VIEW (w->tree), GTK_TREE_MODEL (store)); @@ -1833,38 +1840,46 @@ w_selproperties_create (void) { } ///// cover art display -void -coverart_avail_callback (void *user_data) { +static gboolean +coverart_redraw_cb (void *user_data) { w_coverart_t *w = user_data; gtk_widget_queue_draw (w->drawarea); + return FALSE; +} + +void +coverart_avail_callback (void *user_data) { + g_idle_add (coverart_redraw_cb, user_data); } static gboolean coverart_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data) { DB_playItem_t *it = deadbeef->streamer_get_playing_track (); - if (!it) { - return FALSE; - } GtkAllocation a; gtk_widget_get_allocation (widget, &a); int width = a.width; int height = a.height; - const char *album = deadbeef->pl_find_meta (it, "album"); - const char *artist = deadbeef->pl_find_meta (it, "artist"); - if (!album || !*album) { - album = deadbeef->pl_find_meta (it, "title"); + const char *album = NULL, *artist = NULL; + if (it) { + album = deadbeef->pl_find_meta (it, "album"); + artist = deadbeef->pl_find_meta (it, "artist"); + if (!album || !*album) { + album = deadbeef->pl_find_meta (it, "title"); + } } - GdkPixbuf *pixbuf = get_cover_art_callb (deadbeef->pl_find_meta ((it), ":URI"), artist, album, min(width,height), coverart_avail_callback, user_data); + GdkPixbuf *pixbuf = get_cover_art_callb (it ? deadbeef->pl_find_meta ((it), ":URI") : NULL, artist, album, min(width,height), coverart_avail_callback, user_data); + if (pixbuf) { int pw = gdk_pixbuf_get_width (pixbuf); int ph = gdk_pixbuf_get_height (pixbuf); gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_rectangle (cr, 0, 0, pw, ph); cairo_fill (cr); -// gdk_draw_pixbuf (gtk_widget_get_window (widget), widget->style->white_gc, pixbuf, 0, 0, a.width/2-pw/2, a.height/2-ph/2, pw, ph, GDK_RGB_DITHER_NONE, 0, 0); g_object_unref (pixbuf); } - deadbeef->pl_item_unref (it); + if (it) { + deadbeef->pl_item_unref (it); + } return TRUE; } @@ -1876,13 +1891,6 @@ coverart_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_d return res; } -static gboolean -coverart_redraw_cb (void *user_data) { - w_coverart_t *w = user_data; - gtk_widget_queue_draw (w->drawarea); - return FALSE; -} - static int coverart_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) { w_coverart_t *ca = (w_coverart_t *)w; |