aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-06-14 23:42:28 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-06-15 19:07:18 +0800
commit094e0583ad0361dd0981e5b9bf238a20e66248a3 (patch)
tree0f7c141df7bdf1b4d8416bef137978e81796f834 /libempathy-gtk
parenta1e8643f99402718f85c96d087cf212fd8f1c6d4 (diff)
downloadgsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar.gz
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar.bz2
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar.lz
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar.xz
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.tar.zst
gsoc2013-empathy-094e0583ad0361dd0981e5b9bf238a20e66248a3.zip
roster-view: display the favorite icon for the 'top' group
https://bugzilla.gnome.org/show_bug.cgi?id=678091
Diffstat (limited to 'libempathy-gtk')
-rw-r--r--libempathy-gtk/empathy-roster-group.c45
-rw-r--r--libempathy-gtk/empathy-roster-group.h3
-rw-r--r--libempathy-gtk/empathy-roster-view.c5
3 files changed, 49 insertions, 4 deletions
diff --git a/libempathy-gtk/empathy-roster-group.c b/libempathy-gtk/empathy-roster-group.c
index bffd6a80d..643fed526 100644
--- a/libempathy-gtk/empathy-roster-group.c
+++ b/libempathy-gtk/empathy-roster-group.c
@@ -9,6 +9,7 @@ G_DEFINE_TYPE (EmpathyRosterGroup, empathy_roster_group, GTK_TYPE_EXPANDER)
enum
{
PROP_NAME = 1,
+ PROP_ICON,
N_PROPS
};
@@ -24,6 +25,7 @@ static guint signals[LAST_SIGNAL];
struct _EmpathyRosterGroupPriv
{
gchar *name;
+ gchar *icon_name;
/* Widgets associated with this group. EmpathyRosterGroup is not responsible
* of packing/displaying these widgets. This hash table is a just a set
@@ -44,6 +46,9 @@ empathy_roster_group_get_property (GObject *object,
case PROP_NAME:
g_value_set_string (value, self->priv->name);
break;
+ case PROP_ICON:
+ g_value_set_string (value, self->priv->icon_name);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -64,6 +69,10 @@ empathy_roster_group_set_property (GObject *object,
g_assert (self->priv->name == NULL); /* construct-only */
self->priv->name = g_value_dup_string (value);
break;
+ case PROP_ICON:
+ g_assert (self->priv->icon_name == NULL); /* construct-only */
+ self->priv->icon_name = g_value_dup_string (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -77,15 +86,38 @@ empathy_roster_group_constructed (GObject *object)
void (*chain_up) (GObject *) =
((GObjectClass *) empathy_roster_group_parent_class)->constructed;
gchar *tmp;
+ GtkWidget *box, *label;
if (chain_up != NULL)
chain_up (object);
g_assert (self->priv->name != NULL);
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+
+ /* Icon, if any */
+ if (!tp_str_empty (self->priv->icon_name))
+ {
+ GtkWidget *icon;
+
+ icon = gtk_image_new_from_icon_name (self->priv->icon_name,
+ GTK_ICON_SIZE_MENU);
+
+ if (icon != NULL)
+ gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0);
+ }
+
+ /* Label */
tmp = g_strdup_printf ("<b>%s</b>", self->priv->name);
- gtk_expander_set_label (GTK_EXPANDER (self), tmp);
+ label = gtk_label_new (tmp);
g_free (tmp);
+
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (box);
+
+ gtk_expander_set_label_widget (GTK_EXPANDER (self), box);
}
static void
@@ -109,6 +141,7 @@ empathy_roster_group_finalize (GObject *object)
((GObjectClass *) empathy_roster_group_parent_class)->finalize;
g_free (self->priv->name);
+ g_free (self->priv->icon_name);
if (chain_up != NULL)
chain_up (object);
@@ -133,6 +166,12 @@ empathy_roster_group_class_init (
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (oclass, PROP_NAME, spec);
+ spec = g_param_spec_string ("icon", "Icon",
+ "Icon name",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (oclass, PROP_ICON, spec);
+
g_type_class_add_private (klass, sizeof (EmpathyRosterGroupPriv));
}
@@ -146,10 +185,12 @@ empathy_roster_group_init (EmpathyRosterGroup *self)
}
GtkWidget *
-empathy_roster_group_new (const gchar *name)
+empathy_roster_group_new (const gchar *name,
+ const gchar *icon)
{
return g_object_new (EMPATHY_TYPE_ROSTER_GROUP,
"name", name,
+ "icon", icon,
"use-markup", TRUE,
"expanded", TRUE,
NULL);
diff --git a/libempathy-gtk/empathy-roster-group.h b/libempathy-gtk/empathy-roster-group.h
index 314ed3b58..405455bf5 100644
--- a/libempathy-gtk/empathy-roster-group.h
+++ b/libempathy-gtk/empathy-roster-group.h
@@ -46,7 +46,8 @@ GType empathy_roster_group_get_type (void);
EMPATHY_TYPE_ROSTER_GROUP, \
EmpathyRosterGroupClass))
-GtkWidget * empathy_roster_group_new (const gchar *name);
+GtkWidget * empathy_roster_group_new (const gchar *name,
+ const gchar *icon);
const gchar * empathy_roster_group_get_name (EmpathyRosterGroup *self);
diff --git a/libempathy-gtk/empathy-roster-view.c b/libempathy-gtk/empathy-roster-view.c
index 130fbab0c..201c5e639 100644
--- a/libempathy-gtk/empathy-roster-view.c
+++ b/libempathy-gtk/empathy-roster-view.c
@@ -221,7 +221,10 @@ ensure_roster_group (EmpathyRosterView *self,
if (roster_group != NULL)
return EMPATHY_ROSTER_GROUP (roster_group);
- roster_group = empathy_roster_group_new (group);
+ if (!tp_strdiff (group, TOP_GROUP))
+ roster_group = empathy_roster_group_new (group, "emblem-favorite-symbolic");
+ else
+ roster_group = empathy_roster_group_new (group, NULL);
g_signal_connect (roster_group, "notify::expanded",
G_CALLBACK (group_expanded_cb), self);