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;