diff --git a/gtk/torrent-cell-renderer.c b/gtk/torrent-cell-renderer.c index ebae73bb8..0721eb840 100644 --- a/gtk/torrent-cell-renderer.c +++ b/gtk/torrent-cell-renderer.c @@ -224,6 +224,7 @@ struct TorrentCellRendererPrivate { tr_torrent * tor; GtkCellRenderer * text_renderer; + GtkCellRenderer * text_renderer_err; int bar_height; gboolean minimal; gboolean show_unavailable; @@ -259,20 +260,23 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell, char * str; int w=0, h=0; struct TorrentCellRendererPrivate * p = self->priv; + GtkCellRenderer * text_renderer = torStat->error != 0 + ? p->text_renderer_err + : p->text_renderer; - g_object_set( p->text_renderer, "ellipsize", PANGO_ELLIPSIZE_NONE, NULL ); + g_object_set( text_renderer, "ellipsize", PANGO_ELLIPSIZE_NONE, NULL ); /* above the progressbar */ if( p->minimal ) { int w1, w2, h1, h2; char * shortStatus = getShortStatusString( torStat ); - g_object_set( p->text_renderer, "text", name, NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "text", name, NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w1, &h1 ); str = g_markup_printf_escaped( "%s", shortStatus ); - g_object_set( p->text_renderer, "markup", str, NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "markup", str, NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w2, &h2 ); h += MAX( h1, h2 ); w = MAX( w, w1+GUI_PAD_BIG+w2 ); @@ -285,8 +289,8 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell, char * progressString = getProgressString( info, torStat ); str = g_markup_printf_escaped( "%s\n%s", name, progressString ); - g_object_set( p->text_renderer, "markup", str, NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "markup", str, NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w1, &h1 ); h += h1; w = MAX( w, w1 ); @@ -300,8 +304,8 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell, int w1, h1; char * statusString = getStatusString( torStat ); str = g_markup_printf_escaped( "%s", statusString ); - g_object_set( p->text_renderer, "markup", str, NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "markup", str, NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w1, &h1 ); h += h1; w = MAX( w, w1 ); @@ -498,6 +502,10 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, int xpad, ypad; int w, h; struct TorrentCellRendererPrivate * p = self->priv; + GtkCellRenderer * text_renderer = torStat->error != 0 + ? p->text_renderer_err + : p->text_renderer; + g_object_get( self, "xpad", &xpad, "ypad", &ypad, NULL ); my_bg = *background_area; @@ -512,17 +520,17 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, char * progressString = getProgressString( info, torStat ); char * str = g_markup_printf_escaped( "%s\n%s", name, progressString ); - g_object_set( p->text_renderer, "markup", str, + g_object_set( text_renderer, "markup", str, "ellipsize", PANGO_ELLIPSIZE_NONE, NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w, &h ); my_bg.height = my_cell.height = my_expose.height = h; - g_object_set( p->text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, + g_object_set( text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL ); - gtk_cell_renderer_render( p->text_renderer, + gtk_cell_renderer_render( text_renderer, window, widget, &my_bg, &my_cell, &my_expose, flags ); my_bg.y += h; @@ -540,17 +548,17 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, GdkRectangle tmp_bg, tmp_cell, tmp_expose; /* get the dimensions for the name */ - g_object_set( p->text_renderer, "text", name, - "ellipsize", PANGO_ELLIPSIZE_NONE, - NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "text", name, + "ellipsize", PANGO_ELLIPSIZE_NONE, + NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w1, &h1 ); /* get the dimensions for the short status string */ - g_object_set( p->text_renderer, "markup", str, - "ellipsize", PANGO_ELLIPSIZE_NONE, - NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "markup", str, + "ellipsize", PANGO_ELLIPSIZE_NONE, + NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w2, &h2 ); tmp_h = MAX( h1, h2 ); @@ -561,10 +569,10 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, tmp_bg.width = w2; tmp_bg.height = tmp_h; tmp_expose = tmp_cell = tmp_bg; - g_object_set( p->text_renderer, "markup", str, - "ellipsize", PANGO_ELLIPSIZE_END, - NULL ); - gtk_cell_renderer_render( p->text_renderer, + g_object_set( text_renderer, "markup", str, + "ellipsize", PANGO_ELLIPSIZE_END, + NULL ); + gtk_cell_renderer_render( text_renderer, window, widget, &tmp_bg, &tmp_cell, &tmp_expose, flags ); @@ -572,10 +580,10 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, tmp_bg.x = my_bg.x; tmp_bg.width = my_bg.width - w2 - GUI_PAD_BIG; tmp_expose = tmp_cell = tmp_bg; - g_object_set( p->text_renderer, "text", name, - "ellipsize", PANGO_ELLIPSIZE_END, - NULL ); - gtk_cell_renderer_render( p->text_renderer, + g_object_set( text_renderer, "text", name, + "ellipsize", PANGO_ELLIPSIZE_END, + NULL ); + gtk_cell_renderer_render( text_renderer, window, widget, &tmp_bg, &tmp_cell, &tmp_expose, flags ); @@ -600,15 +608,15 @@ torrent_cell_renderer_render( GtkCellRenderer * cell, char * statusString = getStatusString( torStat ); char * str = g_markup_printf_escaped( "%s", statusString ); - g_object_set( p->text_renderer, "markup", str, - "ellipsize", PANGO_ELLIPSIZE_END, - NULL ); - gtk_cell_renderer_get_size( p->text_renderer, + g_object_set( text_renderer, "markup", str, + "ellipsize", PANGO_ELLIPSIZE_END, + NULL ); + gtk_cell_renderer_get_size( text_renderer, widget, NULL, NULL, NULL, &w, &h ); my_bg.height = my_cell.height = my_expose.height = h; - gtk_cell_renderer_render( p->text_renderer, + gtk_cell_renderer_render( text_renderer, window, widget, &my_bg, &my_cell, &my_expose, flags ); @@ -716,6 +724,7 @@ torrent_cell_renderer_dispose( GObject * o ) if( r && r->priv ) { g_object_unref( G_OBJECT( r->priv->text_renderer ) ); + g_object_unref( G_OBJECT( r->priv->text_renderer_err ) ); r->priv = NULL; } } @@ -826,7 +835,11 @@ torrent_cell_renderer_init( GTypeInstance * instance, gpointer g_class UNUSED ) p->tor = NULL; p->text_renderer = gtk_cell_renderer_text_new( ); + p->text_renderer_err = gtk_cell_renderer_text_new( ); + g_object_set( p->text_renderer_err, "foreground", "red", NULL ); tr_object_ref_sink( p->text_renderer ); + tr_object_ref_sink( p->text_renderer_err ); + p->gradient = TRUE; p->show_unavailable = TRUE; p->bar_height = DEFAULT_BAR_HEIGHT;