soc.2008.themes: 665142d2: Added text and font coloring for buddies...
ffdragon at soc.pidgin.im
ffdragon at soc.pidgin.im
Thu Jul 31 19:40:48 EDT 2008
-----------------------------------------------------------------
Revision: 665142d25c7f89e22d45ba0980793e5fed08f0dd
Ancestor: 6925e65c49abb10f50e6cfaf373f03ac1aecdf75
Author: ffdragon at soc.pidgin.im
Date: 2008-07-31T23:38:07
Branch: im.pidgin.soc.2008.themes
URL: http://d.pidgin.im/viewmtn/revision/info/665142d25c7f89e22d45ba0980793e5fed08f0dd
Modified files:
pidgin/gtkblist-loader.c pidgin/gtkblist-theme.c
pidgin/gtkblist-theme.h pidgin/gtkblist.c
ChangeLog:
Added text and font coloring for buddies, contacts and chats, as well as fix a few small bugs
-------------- next part --------------
============================================================
--- pidgin/gtkblist-loader.c 2917489361cbcd6aa6d373e356a8e0067f32ee8b
+++ pidgin/gtkblist-loader.c 27979e25d13452d958fa3913bcb7f7128163826a
@@ -41,12 +41,11 @@ pidgin_blist_loader_build(const gchar *d
{
xmlnode *root_node, *sub_node, *sub_sub_node;
gchar *filename, *filename_full, *data;
- const gchar *icon_theme = NULL, *tmp;
+ const gchar *icon_theme = NULL, *temp;
gboolean sucess = TRUE;
- GdkColor *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *buddy_bgcolor1, *buddy_bgcolor2;
+ GdkColor *bgcolor, *expanded_bgcolor, *collapsed_bgcolor, *contact_color;
GdkColor color;
- FontColorPair *expanded, *collapsed, *online, *away, *offline, *message, *status;
- gdouble transparency;
+ FontColorPair *expanded, *collapsed, *contact, *online, *away, *offline, *idle, *message, *status;
PidginBlistLayout *layout;
GDir *gdir;
PidginBlistTheme *theme;
@@ -73,16 +72,18 @@ pidgin_blist_loader_build(const gchar *d
bgcolor = g_new0(GdkColor, 1);
expanded_bgcolor = g_new0(GdkColor, 1);
collapsed_bgcolor = g_new0(GdkColor, 1);
- buddy_bgcolor1 = g_new0(GdkColor, 1);
- buddy_bgcolor2 = g_new0(GdkColor, 1);
layout = g_new0(PidginBlistLayout, 1);
+ contact_color = g_new0(GdkColor, 1);
+
expanded = g_new0(FontColorPair, 1);
collapsed = g_new0(FontColorPair, 1);
+ contact = g_new0(FontColorPair, 1);
online = g_new0(FontColorPair, 1);
away = g_new0(FontColorPair, 1);
offline = g_new0(FontColorPair, 1);
+ idle = g_new0(FontColorPair, 1);
message = g_new0(FontColorPair, 1);
status = g_new0(FontColorPair, 1);
@@ -96,9 +97,7 @@ pidgin_blist_loader_build(const gchar *d
/* <blist> */
if ((sucess = sucess && (sub_node = xmlnode_get_child(root_node, "blist")) != NULL)) {
- transparency = atof(xmlnode_get_attrib(sub_node, "transparency"));
-
- if ((tmp = xmlnode_get_attrib(sub_node, "color")) != NULL && gdk_color_parse(tmp, bgcolor))
+ if ((temp = xmlnode_get_attrib(sub_node, "color")) != NULL && gdk_color_parse(temp, bgcolor))
gdk_colormap_alloc_color(gdk_colormap_get_system(), bgcolor, FALSE, TRUE);
else {
g_free(bgcolor);
@@ -112,12 +111,12 @@ pidgin_blist_loader_build(const gchar *d
expanded->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if ((tmp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(tmp, &color))
- expanded->color = g_strdup(tmp);
- else expanded->color = DEFAULT_TEXT_COLOR;
+ if ((temp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(temp, &color))
+ expanded->color = g_strdup(temp);
+ else expanded->color = g_strdup(DEFAULT_TEXT_COLOR);
- if ((tmp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(tmp, expanded_bgcolor))
+ if ((temp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(temp, expanded_bgcolor))
gdk_colormap_alloc_color(gdk_colormap_get_system(), expanded_bgcolor, FALSE, TRUE);
else {
g_free(expanded_bgcolor);
@@ -126,13 +125,14 @@ pidgin_blist_loader_build(const gchar *d
}
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "collapsed")) != NULL)) {
+
collapsed->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if((tmp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(tmp, &color))
- collapsed->color = g_strdup(tmp);
- else collapsed->color = DEFAULT_TEXT_COLOR;
+ if((temp = xmlnode_get_attrib(sub_sub_node, "text_color")) != NULL && gdk_color_parse(temp, &color))
+ collapsed->color = g_strdup(temp);
+ else collapsed->color = g_strdup(DEFAULT_TEXT_COLOR);
- if ((tmp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(tmp, collapsed_bgcolor))
+ if ((temp = xmlnode_get_attrib(sub_sub_node, "background")) != NULL && gdk_color_parse(temp, collapsed_bgcolor))
gdk_colormap_alloc_color(gdk_colormap_get_system(), collapsed_bgcolor, FALSE, TRUE);
else {
g_free(collapsed_bgcolor);
@@ -144,64 +144,70 @@ pidgin_blist_loader_build(const gchar *d
if ((sucess = sucess && (sub_node = xmlnode_get_child(root_node, "buddys")) != NULL &&
(sub_sub_node = xmlnode_get_child(sub_node, "placement")) != NULL)) {
- layout->status_icon = atoi(xmlnode_get_attrib(sub_sub_node, "status_icon"));
- layout->text = atoi(xmlnode_get_attrib(sub_sub_node, "name"));
- layout->emblem = atoi(xmlnode_get_attrib(sub_sub_node, "emblem"));
- layout->protocol_icon = atoi(xmlnode_get_attrib(sub_sub_node, "protocol_icon"));
- layout->buddy_icon = atoi(xmlnode_get_attrib(sub_sub_node, "buddy_icon"));
- layout->show_status = atoi(xmlnode_get_attrib(sub_sub_node, "status_icon")) != 0;
+ layout->status_icon = (temp = xmlnode_get_attrib(sub_sub_node, "status_icon")) != NULL ? atoi(temp) : 0;
+ layout->text = (temp = xmlnode_get_attrib(sub_sub_node, "name")) != NULL ? atoi(temp) : 1;
+ layout->emblem = (temp = xmlnode_get_attrib(sub_sub_node, "emblem")) != NULL ? atoi(temp) : 2;
+ layout->protocol_icon = (temp = xmlnode_get_attrib(sub_sub_node, "protocol_icon")) != NULL ? atoi(temp) : 3;
+ layout->buddy_icon = (temp = xmlnode_get_attrib(sub_sub_node, "buddy_icon")) != NULL ? atoi(temp) : 4;
+ layout->show_status = (temp = xmlnode_get_attrib(sub_sub_node, "status_icon")) != NULL ? atoi(temp) != 0 : 1;
}
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "background")) != NULL)) {
-
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color1"), buddy_bgcolor1))
- gdk_colormap_alloc_color(gdk_colormap_get_system(), buddy_bgcolor1, FALSE, TRUE);
+ if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), contact_color))
+ gdk_colormap_alloc_color(gdk_colormap_get_system(), contact_color, FALSE, TRUE);
else {
- g_free(buddy_bgcolor1);
- buddy_bgcolor1 = NULL;
+ g_free(contact_color);
+ contact_color = NULL;
}
-
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color2"), buddy_bgcolor2))
- gdk_colormap_alloc_color(gdk_colormap_get_system(), buddy_bgcolor2, FALSE, TRUE);
- else {
- g_free(buddy_bgcolor2);
- buddy_bgcolor2 = NULL;
- }
}
+
+ if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "contact_text")) != NULL)) {
+ online->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ contact->color = g_strdup(temp);
+ else contact->color = g_strdup(DEFAULT_TEXT_COLOR);
+ }
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "online_text")) != NULL)) {
online->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), &color))
- online->color = g_strdup(tmp);
- else online->color = DEFAULT_TEXT_COLOR;
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ online->color = g_strdup(temp);
+ else online->color = g_strdup(DEFAULT_TEXT_COLOR);
}
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "away_text")) != NULL)) {
away->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), &color))
- away->color = g_strdup(tmp);
- else away->color = DEFAULT_TEXT_COLOR;
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ away->color = g_strdup(temp);
+ else away->color = g_strdup(DEFAULT_TEXT_COLOR);
}
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "offline_text")) != NULL)) {
offline->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), &color))
- online->color = g_strdup(tmp);
- else online->color = DEFAULT_TEXT_COLOR;
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ online->color = g_strdup(temp);
+ else online->color = g_strdup(DEFAULT_TEXT_COLOR);
}
+
+ if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "idle_text")) != NULL)) {
+ idle->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ idle->color = g_strdup(temp);
+ else online->color = g_strdup(DEFAULT_TEXT_COLOR);
+ }
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "message_text")) != NULL)) {
message->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), &color))
- message->color = g_strdup(tmp);
- else message->color = DEFAULT_TEXT_COLOR;
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ message->color = g_strdup(temp);
+ else message->color = g_strdup(DEFAULT_TEXT_COLOR);
}
if ((sucess = sucess && sub_node != NULL && (sub_sub_node = xmlnode_get_child(sub_node, "status_text")) != NULL)) {
status->font = g_strdup(xmlnode_get_attrib(sub_sub_node, "font"));
- if(gdk_color_parse(xmlnode_get_attrib(sub_sub_node, "color"), &color))
- status->color = g_strdup(tmp);
- else status->color = DEFAULT_TEXT_COLOR;
+ if(gdk_color_parse(temp = xmlnode_get_attrib(sub_sub_node, "color"), &color))
+ status->color = g_strdup(temp);
+ else status->color = g_strdup(DEFAULT_TEXT_COLOR);
}
/* name is required for theme manager */
@@ -217,17 +223,17 @@ pidgin_blist_loader_build(const gchar *d
"description", data,
"icon-theme", icon_theme,
"background-color", bgcolor,
- "opacity", transparency,
"layout", layout,
"expanded-color", expanded_bgcolor,
"expanded-text", expanded,
"collapsed-color", collapsed_bgcolor,
"collapsed-text", collapsed,
- "buddy-bgcolor1", buddy_bgcolor1,
- "buddy-bgcolor2", buddy_bgcolor2,
+ "contact-color", contact_color,
+ "contact", contact,
"online", online,
"away", away,
"offline", offline,
+ "idle", idle,
"message", message,
"status", status, NULL);
@@ -236,7 +242,7 @@ pidgin_blist_loader_build(const gchar *d
g_object_unref(theme);
theme = NULL;
}
-
+
xmlnode_free(sub_node);
xmlnode_free(root_node);
g_dir_close(gdir);
============================================================
--- pidgin/gtkblist-theme.c a550f5959637e3fe61f2d4c782d67e8bcc37d695
+++ pidgin/gtkblist-theme.c 128984f92e1acb62b29726e2e54745d7dee9fff9
@@ -45,13 +45,16 @@ typedef struct {
FontColorPair *collapsed;
/* buddy */
- GdkColor *buddy_bgcolor1;
- GdkColor *buddy_bgcolor2;
+ GdkColor *contact_color;
+ FontColorPair *contact;
+
FontColorPair *online;
FontColorPair *away;
FontColorPair *offline;
+ FontColorPair *idle;
FontColorPair *message;
+
FontColorPair *status;
} PidginBlistThemePrivate;
@@ -75,11 +78,12 @@ enum {
PROP_EXPANDED_TEXT,
PROP_COLLAPSED_COLOR,
PROP_COLLAPSED_TEXT,
- PROP_BGCOLOR1,
- PROP_BGCOLOR2,
+ PROP_CONTACT_COLOR,
+ PROP_CONTACT,
PROP_ONLINE,
PROP_AWAY,
PROP_OFFLINE,
+ PROP_IDLE,
PROP_MESSAGE,
PROP_STATUS,
};
@@ -88,11 +92,14 @@ enum {
* Helpers
*****************************************************************************/
-static void
+void
free_font_and_color(FontColorPair *pair)
{
if(pair != NULL){
- g_free(pair->font);
+ if (pair->font)
+ g_free(pair->font);
+ if (pair->color)
+ g_free(pair->color);
g_free(pair);
}
}
@@ -106,7 +113,6 @@ pidgin_blist_theme_init(GTypeInstance *i
gpointer klass)
{
(PIDGIN_BLIST_THEME(instance))->priv = g_new0(PidginBlistThemePrivate, 1);
-
}
static void
@@ -140,11 +146,11 @@ pidgin_blist_theme_get_property(GObject
case PROP_COLLAPSED_TEXT:
g_value_set_pointer(value, pidgin_blist_theme_get_collapsed_text_info(theme));
break;
- case PROP_BGCOLOR1:
- g_value_set_pointer(value, pidgin_blist_theme_get_buddy_color_1(theme));
+ case PROP_CONTACT_COLOR:
+ g_value_set_pointer(value, pidgin_blist_theme_get_contact_color(theme));
break;
- case PROP_BGCOLOR2:
- g_value_set_pointer(value, pidgin_blist_theme_get_buddy_color_2(theme));
+ case PROP_CONTACT:
+ g_value_set_pointer(value, pidgin_blist_theme_get_contact_text_info(theme));
break;
case PROP_ONLINE:
g_value_set_pointer(value, pidgin_blist_theme_get_online_text_info(theme));
@@ -155,6 +161,9 @@ pidgin_blist_theme_get_property(GObject
case PROP_OFFLINE:
g_value_set_pointer(value, pidgin_blist_theme_get_offline_text_info(theme));
break;
+ case PROP_IDLE:
+ g_value_set_pointer(value, pidgin_blist_theme_get_idle_text_info(theme));
+ break;
case PROP_MESSAGE:
g_value_set_pointer(value, pidgin_blist_theme_get_unread_message_text_info(theme));
break;
@@ -168,7 +177,7 @@ static void
}
static void
-pidgin_blist_theme_set_property(GObject *obj, guint param_id, const GValue *value,
+pidgin_blist_theme_set_property(GObject *obj, guint param_id, GValue *value,
GParamSpec *psec)
{
PidginBlistTheme *theme = PIDGIN_BLIST_THEME(obj);
@@ -198,11 +207,11 @@ pidgin_blist_theme_set_property(GObject
case PROP_COLLAPSED_TEXT:
pidgin_blist_theme_set_collapsed_text_info(theme, g_value_get_pointer(value));
break;
- case PROP_BGCOLOR1:
- pidgin_blist_theme_set_buddy_color_1(theme, g_value_get_pointer(value));
+ case PROP_CONTACT_COLOR:
+ pidgin_blist_theme_set_contact_color(theme, g_value_get_pointer(value));
break;
- case PROP_BGCOLOR2:
- pidgin_blist_theme_set_buddy_color_2(theme, g_value_get_pointer(value));
+ case PROP_CONTACT:
+ pidgin_blist_theme_set_contact_text_info(theme, g_value_get_pointer(value));
break;
case PROP_ONLINE:
pidgin_blist_theme_set_online_text_info(theme, g_value_get_pointer(value));
@@ -213,6 +222,9 @@ pidgin_blist_theme_set_property(GObject
case PROP_OFFLINE:
pidgin_blist_theme_set_offline_text_info(theme, g_value_get_pointer(value));
break;
+ case PROP_IDLE:
+ pidgin_blist_theme_set_idle_text_info(theme, g_value_get_pointer(value));
+ break;
case PROP_MESSAGE:
pidgin_blist_theme_set_unread_message_text_info(theme, g_value_get_pointer(value));
break;
@@ -240,6 +252,7 @@ pidgin_blist_theme_finalize (GObject *ob
free_font_and_color(priv->collapsed);
/* Buddy */
+ free_font_and_color(priv->contact);
free_font_and_color(priv->online);
free_font_and_color(priv->away);
free_font_and_color(priv->offline);
@@ -276,13 +289,6 @@ pidgin_blist_theme_class_init (PidginBli
G_PARAM_READWRITE);
g_object_class_install_property(obj_class, PROP_BACKGROUND_COLOR, pspec);
- pspec = g_param_spec_double("opacity","Opacity",
- "The transparency of the buddy list",
- 0.0, 1.0,
- 1.0,
- G_PARAM_READWRITE);
- g_object_class_install_property(obj_class, PROP_OPACITY, pspec);
-
pspec = g_param_spec_pointer("layout", "Layout",
"The layout of icons, name, and status of the blist",
G_PARAM_READWRITE);
@@ -311,15 +317,15 @@ pidgin_blist_theme_class_init (PidginBli
g_object_class_install_property(obj_class, PROP_COLLAPSED_TEXT, pspec);
/* Buddy */
- pspec = g_param_spec_pointer("buddy-bgcolor1", "Buddy Background Color 1",
- "The background color of a buddy",
+ pspec = g_param_spec_pointer("contact-color", "Contact/Chat Background Color",
+ "The background color of a contact or chat",
G_PARAM_READWRITE);
- g_object_class_install_property(obj_class, PROP_BGCOLOR1, pspec);
+ g_object_class_install_property(obj_class, PROP_CONTACT_COLOR, pspec);
- pspec = g_param_spec_pointer("buddy-bgcolor2", "Buddy Background Color 2",
- "The background color of a buddy",
- G_PARAM_READWRITE);
- g_object_class_install_property(obj_class, PROP_BGCOLOR2, pspec);
+ pspec = g_param_spec_pointer("contact", "Contact Text",
+ "The text information for when a contact is expanded",
+ G_PARAM_READWRITE);
+ g_object_class_install_property(obj_class, PROP_CONTACT, pspec);
pspec = g_param_spec_pointer("online", "On-line Text",
"The text information for when a buddy is online",
@@ -336,7 +342,12 @@ pidgin_blist_theme_class_init (PidginBli
G_PARAM_READWRITE);
g_object_class_install_property(obj_class, PROP_OFFLINE, pspec);
- pspec = g_param_spec_pointer("message", "Meggage Text",
+ pspec = g_param_spec_pointer("idle", "Idle Text",
+ "The text information for when a buddy is idle",
+ G_PARAM_READWRITE);
+ g_object_class_install_property(obj_class, PROP_IDLE, pspec);
+
+ pspec = g_param_spec_pointer("message", "Message Text",
"The text information for when a buddy is has an unread message",
G_PARAM_READWRITE);
g_object_class_install_property(obj_class, PROP_MESSAGE, pspec);
@@ -352,7 +363,7 @@ pidgin_blist_theme_get_type (void)
{
static GType type = 0;
if (type == 0) {
- static const GTypeInfo info = {
+ static GTypeInfo info = {
sizeof (PidginBlistThemeClass),
NULL, /* base_init */
NULL, /* base_finalize */
@@ -474,7 +485,7 @@ GdkColor *
}
GdkColor *
-pidgin_blist_theme_get_buddy_color_1(PidginBlistTheme *theme)
+pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme)
{
PidginBlistThemePrivate *priv;
@@ -482,11 +493,11 @@ pidgin_blist_theme_get_buddy_color_1(Pid
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- return priv->buddy_bgcolor1;
+ return priv->contact_color;
}
-GdkColor *
-pidgin_blist_theme_get_buddy_color_2(PidginBlistTheme *theme)
+FontColorPair *
+pidgin_blist_theme_get_contact_text_info(PidginBlistTheme *theme)
{
PidginBlistThemePrivate *priv;
@@ -494,7 +505,7 @@ pidgin_blist_theme_get_buddy_color_2(Pid
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- return priv->buddy_bgcolor2;
+ return priv->contact;
}
FontColorPair *
@@ -534,6 +545,18 @@ FontColorPair *
}
FontColorPair *
+pidgin_blist_theme_get_idle_text_info(PidginBlistTheme *theme)
+{
+ PidginBlistThemePrivate *priv;
+
+ g_return_val_if_fail(PIDGIN_IS_BLIST_THEME(theme), NULL);
+
+ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
+
+ return priv->idle;
+}
+
+FontColorPair *
pidgin_blist_theme_get_unread_message_text_info(PidginBlistTheme *theme)
{
PidginBlistThemePrivate *priv;
@@ -580,7 +603,6 @@ pidgin_blist_theme_set_background_color(
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- g_free(priv->bgcolor);
priv->bgcolor = color;
}
@@ -618,7 +640,6 @@ pidgin_blist_theme_set_expanded_backgrou
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- g_free(priv->expanded_color);
priv->expanded_color = color;
}
@@ -644,7 +665,6 @@ pidgin_blist_theme_set_collapsed_backgro
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- g_free(priv->collapsed_color);
priv->collapsed_color = color;
}
@@ -662,7 +682,7 @@ void
}
void
-pidgin_blist_theme_set_buddy_color_1(PidginBlistTheme *theme, GdkColor *color)
+pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, GdkColor *color)
{
PidginBlistThemePrivate *priv;
@@ -670,12 +690,11 @@ pidgin_blist_theme_set_buddy_color_1(Pid
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- g_free(priv->buddy_bgcolor1);
- priv->buddy_bgcolor1 = color;
+ priv->contact_color = color;
}
void
-pidgin_blist_theme_set_buddy_color_2(PidginBlistTheme *theme, GdkColor *color)
+pidgin_blist_theme_set_contact_text_info(PidginBlistTheme *theme, FontColorPair *pair)
{
PidginBlistThemePrivate *priv;
@@ -683,8 +702,8 @@ pidgin_blist_theme_set_buddy_color_2(Pid
priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
- g_free(priv->buddy_bgcolor2);
- priv->buddy_bgcolor2 = color;
+ free_font_and_color(priv->contact);
+ priv->contact = pair;
}
void
@@ -727,6 +746,19 @@ void
}
void
+pidgin_blist_theme_set_idle_text_info(PidginBlistTheme *theme, FontColorPair *pair)
+{
+ PidginBlistThemePrivate *priv;
+
+ g_return_if_fail(PIDGIN_IS_BLIST_THEME(theme));
+
+ priv = PIDGIN_BLIST_THEME_GET_PRIVATE(G_OBJECT(theme));
+
+ free_font_and_color(priv->idle);
+ priv->idle = pair;
+}
+
+void
pidgin_blist_theme_set_unread_message_text_info(PidginBlistTheme *theme, FontColorPair *pair)
{
PidginBlistThemePrivate *priv;
============================================================
--- pidgin/gtkblist-theme.h 8f2001b9368771b87df37565a39e8110cf61eb06
+++ pidgin/gtkblist-theme.h 1a42726bb8ffd7a72c09791780066272aa97eb3d
@@ -78,7 +78,15 @@ typedef struct
} PidginBlistLayout;
+/**************************************************************************/
+/** @name FontColorPair API */
+/**************************************************************************/
+/**
+ * Frees a font and color pair
+ */
+void free_font_and_color(FontColorPair *pair);
+
/**************************************************************************/
/** @name Purple Buddy List Theme API */
/**************************************************************************/
@@ -149,18 +157,18 @@ gdouble pidgin_blist_theme_get_opacity(P
FontColorPair *pidgin_blist_theme_get_collapsed_text_info(PidginBlistTheme *theme);
/**
- * Returns the 1st color to be used for buddys
+ * Returns the colors to be used for contacts and chats
*
- * @returns a gdk color
+ * @returns a gdkcolor for contacts and chats
*/
- GdkColor *pidgin_blist_theme_get_buddy_color_1(PidginBlistTheme *theme);
+ GdkColor *pidgin_blist_theme_get_contact_color(PidginBlistTheme *theme);
/**
- * Returns the 2nd color to be used for buddies
+ * Returns the text font and color to be used for expanded contacts
*
- * @returns a gdk color
+ * @returns a font and color pair
*/
- GdkColor *pidgin_blist_theme_get_buddy_color_2(PidginBlistTheme *theme);
+ FontColorPair *pidgin_blist_theme_get_contact_text_info(PidginBlistTheme *theme);
/**
* Returns the text font and color to be used for online buddies
@@ -184,6 +192,13 @@ gdouble pidgin_blist_theme_get_opacity(P
FontColorPair *pidgin_blist_theme_get_offline_text_info(PidginBlistTheme *theme);
/**
+ * Returns the text font and color to be used for idle buddies
+ *
+ * @returns a font and color pair
+ */
+ FontColorPair *pidgin_blist_theme_get_idle_text_info(PidginBlistTheme *theme);
+
+/**
* Returns the text font and color to be used for buddies with unread messages
*
* @returns a font and color pair
@@ -256,18 +271,18 @@ void pidgin_blist_theme_set_collapsed_te
void pidgin_blist_theme_set_collapsed_text_info(PidginBlistTheme *theme, FontColorPair *pair);
/**
- * Sets the background color to be used for the 1st buddy
+ * Sets the background color to be used for contacts and chats
*
- * @param color the color for the 1st buddy
+ * @param color the color to use for contacts and chats
*/
-void pidgin_blist_theme_set_buddy_color_1(PidginBlistTheme *theme, GdkColor *color);
+void pidgin_blist_theme_set_contact_color(PidginBlistTheme *theme, GdkColor *color);
/**
- * Sets the background color to be used for the 2nd buddy
+ * Sets the text color and font to be used for expanded contacts
*
- * @param color the color for the 2nd buddy
+ * @param pair the new text font at color pair
*/
-void pidgin_blist_theme_set_buddy_color_2(PidginBlistTheme *theme, GdkColor *color);
+void pidgin_blist_theme_set_contact_text_info(PidginBlistTheme *theme, FontColorPair *pair);
/**
* Sets the text color and font to be used for online buddies
@@ -291,6 +306,13 @@ void pidgin_blist_theme_set_offline_text
void pidgin_blist_theme_set_offline_text_info(PidginBlistTheme *theme, FontColorPair *pair);
/**
+ * Sets the text color and font to be used for idle buddies
+ *
+ * @param pair the new text font at color pair
+ */
+void pidgin_blist_theme_set_idle_text_info(PidginBlistTheme *theme, FontColorPair *pair);
+
+/**
* Sets the text color and font to be used for buddies with an unread message
*
* @param pair the new text font at color pair
============================================================
--- pidgin/gtkblist.c 8de65e2221dff48ef676a3b22b496c4f5b22e1f2
+++ pidgin/gtkblist.c 9b1534eff995fd537e7d856a0b9f6e6c7791720d
@@ -3783,19 +3783,22 @@ pidgin_blist_get_status_icon(PurpleBlist
return ret;
}
-gchar *pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased)
+gchar *
+pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased)
{
const char *name;
- char *esc, *text = NULL;
+ char *text = NULL, *name_color, *name_font, *status_color, *status_font;
PurplePlugin *prpl;
PurplePluginProtocolInfo *prpl_info = NULL;
PurpleContact *contact;
PurplePresence *presence;
struct _pidgin_blist_node *gtkcontactnode = NULL;
- char *idletime = NULL, *statustext = NULL;
- time_t t;
+ char *idletime = NULL, *statustext = NULL, *nametext;
PurpleConversation *conv = find_conversation_with_buddy(b);
gboolean hidden_conv = FALSE;
+ gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
+ FontColorPair *pair;
+ PidginBlistTheme *theme;
if (conv != NULL) {
PidginBlistNode *ui = b->node.ui_data;
@@ -3813,175 +3816,157 @@ gchar *pidgin_blist_get_name_markup(Purp
if(contact)
gtkcontactnode = ((PurpleBlistNode*)contact)->ui_data;
+ /* Name */
if(gtkcontactnode && !gtkcontactnode->contact_expanded && contact->alias)
name = contact->alias;
else
name = purple_buddy_get_alias(b);
- esc = g_markup_escape_text(name, strlen(name));
+ nametext = g_markup_escape_text(name, strlen(name));
presence = purple_buddy_get_presence(b);
- if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons") && aliased)
- {
- if (!selected && purple_presence_is_idle(presence))
- {
- text = g_strdup_printf("<span color='%s'>%s</span>",
- dim_grey(), esc);
- g_free(esc);
- if (hidden_conv) {
- char *tmp = text;
- text = g_strdup_printf("<b>%s</b>", text);
+ /* Name is all that is needed */
+ if (biglist || !aliased) {
+
+ /* Status Info */
+ prpl = purple_find_prpl(purple_account_get_protocol_id(b->account));
+
+ if (prpl != NULL)
+ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
+
+ if (prpl_info && prpl_info->status_text && b->account->gc) {
+ char *tmp = prpl_info->status_text(b);
+ const char *end;
+
+ if(tmp && !g_utf8_validate(tmp, -1, &end)) {
+ char *new = g_strndup(tmp,
+ g_utf8_pointer_to_offset(tmp, end));
g_free(tmp);
+ tmp = new;
}
- return text;
- }
- else if (hidden_conv)
- {
- char *tmp = esc;
- esc = g_strdup_printf("<b>%s</b>", esc);
- g_free(tmp);
- }
- return esc;
- }
-
- prpl = purple_find_prpl(purple_account_get_protocol_id(b->account));
-
- if (prpl != NULL)
- prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
-
- if (prpl_info && prpl_info->status_text && b->account->gc) {
- char *tmp = prpl_info->status_text(b);
- const char *end;
-
- if(tmp && !g_utf8_validate(tmp, -1, &end)) {
- char *new = g_strndup(tmp,
- g_utf8_pointer_to_offset(tmp, end));
- g_free(tmp);
- tmp = new;
- }
-
+ /* add ... to messages that are too long, GTK 2.6+ does it automatically */
#if !GTK_CHECK_VERSION(2,6,0)
- if(tmp) {
- char buf[32];
- char *c = tmp;
- int length = 0, vis=0;
- gboolean inside = FALSE;
- g_strdelimit(tmp, "\n", ' ');
- purple_str_strip_char(tmp, '\r');
+ if(tmp) {
+ char buf[32];
+ char *c = tmp;
+ int length = 0, vis=0;
+ gboolean inside = FALSE;
+ g_strdelimit(tmp, "\n", ' ');
+ purple_str_strip_char(tmp, '\r');
+
+ while(*c && vis < 20) {
+ if(*c == '&')
+ inside = TRUE;
+ else if(*c == ';')
+ inside = FALSE;
+ if(!inside)
+ vis++;
+ c = g_utf8_next_char(c); /* this is fun */
+ }
+
+ length = c - tmp;
- while(*c && vis < 20) {
- if(*c == '&')
- inside = TRUE;
- else if(*c == ';')
- inside = FALSE;
- if(!inside)
- vis++;
- c = g_utf8_next_char(c); /* this is fun */
+ if(vis == 20)
+ g_snprintf(buf, sizeof(buf), "%%.%ds...", length);
+ else
+ g_snprintf(buf, sizeof(buf), "%%s ");
+
+ statustext = g_strdup_printf(buf, tmp);purple_presence_is_idle(presence)
+
+ g_free(tmp);
}
-
- length = c - tmp;
-
- if(vis == 20)
- g_snprintf(buf, sizeof(buf), "%%.%ds...", length);
- else
- g_snprintf(buf, sizeof(buf), "%%s ");
-
- statustext = g_strdup_printf(buf, tmp);
-
- g_free(tmp);
+#else
+ if(tmp) {
+ g_strdelimit(tmp, "\n", ' ');
+ purple_str_strip_char(tmp, '\r');
+ }
+ statustext = tmp;
+#endif
}
-#else
- if(tmp) {
- g_strdelimit(tmp, "\n", ' ');
- purple_str_strip_char(tmp, '\r');
- }
- statustext = tmp;
-#endif
- }
-
- if(!purple_presence_is_online(presence) && !statustext)
- statustext = g_strdup(_("Offline"));
- else if (!statustext)
- text = g_strdup(esc);
-
- if (purple_presence_is_idle(presence)) {
- if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time")) {
+
+ if(!purple_presence_is_online(presence) && !statustext)
+ statustext = g_strdup(_("Offline"));
+
+ /* Idle Text */
+ if (purple_presence_is_idle(presence) && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time")) {
time_t idle_secs = purple_presence_get_idle_time(presence);
if (idle_secs > 0) {
int iday, ihrs, imin;
+ time_t t;
time(&t);
iday = (t - idle_secs) / (24 * 60 * 60);
ihrs = ((t - idle_secs) / 60 / 60) % 24;
imin = ((t - idle_secs) / 60) % 60;
-
+
if (iday)
idletime = g_strdup_printf(_("Idle %dd %dh %02dm"), iday, ihrs, imin);
else if (ihrs)
idletime = g_strdup_printf(_("Idle %dh %02dm"), ihrs, imin);
else
idletime = g_strdup_printf(_("Idle %dm"), imin);
- }
- else
- idletime = g_strdup(_("Idle"));
- if (!selected) {
- g_free(text);
- text = g_strdup_printf("<span color='%s'>%s</span>\n"
- "<span color='%s' size='smaller'>%s%s%s</span>",
- dim_grey(), esc, dim_grey(),
- idletime != NULL ? idletime : "",
- (idletime != NULL && statustext != NULL) ? " - " : "",
- statustext != NULL ? statustext : "");
- }
+ } else idletime = g_strdup(_("Idle"));
+ }
+ }
- } else if (!selected && !statustext) {/* We handle selected text later */
- g_free(text);
- text = g_strdup_printf("<span color='%s'>%s</span>", dim_grey(), esc);
- } else if (!selected && !text) {
- g_free(text);
- text = g_strdup_printf("<span color='%s'>%s</span>\n"
- "<span color='%s' size='smaller'>%s</span>",
- dim_grey(), esc, dim_grey(),
- statustext != NULL ? statustext : "");
- }
- } else if (!PURPLE_BUDDY_IS_ONLINE(b)) {
- if (!selected && !statustext) {/* We handle selected text later */
- g_free(text);
- text = g_strdup_printf("<span color='%s'>%s</span>", dim_grey(), esc);
- } else if (!selected && !text)
- text = g_strdup_printf("<span color='%s'>%s</span>\n"
- "<span color='%s' size='smaller'>%s</span>",
- dim_grey(), esc, dim_grey(),
- statustext != NULL ? statustext : "");
+ /* choose the colors of the text */
+ theme = pidgin_blist_get_theme();
+ if (theme == NULL) {
+ status_color = name_color = "dim grey";
+ status_font = name_font = "";
+
+ } else if (purple_presence_is_idle(presence)) {
+ pair = pidgin_blist_theme_get_idle_text_info(theme);
+ status_color = name_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey";
+ status_font = name_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ } else if (!purple_presence_is_online(presence)) {
+ pair = pidgin_blist_theme_get_offline_text_info(theme);
+ name_color = (pair != NULL && pair->color != NULL) ? pair->color : "black";
+ name_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ pair = pidgin_blist_theme_get_status_text_info(theme);
+ status_color = (pair != NULL && pair->color != NULL) ? g_strdup(pair->color) : "dim grey";
+ status_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ } else if (purple_presence_is_available(presence)) {
+ pair = pidgin_blist_theme_get_online_text_info(theme);
+ name_color = (pair != NULL && pair->color != NULL) ? g_strdup(pair->color) : "black";
+ name_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ pair = pidgin_blist_theme_get_status_text_info(theme);
+ status_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey";
+ status_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ } else {
+ pair = pidgin_blist_theme_get_away_text_info(theme);
+ name_color = (pair != NULL && pair->color != NULL) ? pair->color : "black";
+ name_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
+
+ pair = pidgin_blist_theme_get_status_text_info(theme);
+ status_color = (pair != NULL && pair->color != NULL) ? pair->color : "dim grey";
+ status_font = (pair != NULL && pair->font != NULL) ? pair->font : "";
}
- /* Not idle and not selected */
- else if (!selected && !text)
- {
- text = g_strdup_printf("%s\n"
- "<span color='%s' size='smaller'>%s</span>",
- esc, dim_grey(),
- statustext != NULL ? statustext : "");
- }
- /* It is selected. */
- if ((selected && !text) || (selected && idletime)) {
- g_free(text);
- text = g_strdup_printf("%s\n"
- "<span size='smaller'>%s%s%s</span>",
- esc,
- idletime != NULL ? idletime : "",
- (idletime != NULL && statustext != NULL) ? " - " : "",
- statustext != NULL ? statustext : "");
+ if (selected) {
+ name_color = "black";
+ status_color = "black";
}
- g_free(idletime);
- g_free(statustext);
- g_free(esc);
+ /* Put it all together */
+ if (biglist && (statustext || idletime)) {
+ text = g_strdup_printf("<span color='%s'>%s</span>\n<span size='smaller' color='%s'>%s%s%s</span>",
+ name_color, nametext, status_color,
+ idletime != NULL ? idletime : "",
+ (idletime != NULL && statustext != NULL) ? " - " : "",
+ statustext != NULL ? statustext : "");
+ } else text = g_strdup_printf("<span color='%s'>%s</span>", name_color, nametext);
+
if (hidden_conv) {
char *tmp = text;
text = g_strdup_printf("<b>%s</b>", tmp);
@@ -5240,22 +5225,17 @@ pidgin_blist_build_layout(PurpleBuddyLis
PidginBlistLayout *layout;
PidginBlistTheme *theme;
GtkCellRenderer *rend;
- gint i;
+ gint i, status_icon = 0, text = 1, emblem = 2, protocol_icon = 3, buddy_icon = 4;
+
column = gtkblist->text_column;
- if ((theme = pidgin_blist_get_theme()) != NULL)
- layout = pidgin_blist_theme_get_layout(theme);
- else {
- /* Default Layout */
- layout = g_new0(PidginBlistLayout, 1);
-
- layout->status_icon = 0;
- layout->text = 1;
- layout->emblem = 2;
- layout->protocol_icon = 3;
- layout->buddy_icon = 4;
- layout->show_status = 5;
+ if ((theme = pidgin_blist_get_theme()) != NULL && (layout = pidgin_blist_theme_get_layout(theme)) != NULL) {
+ status_icon = layout->status_icon ;
+ text = layout->text;
+ emblem = layout->emblem;
+ protocol_icon = layout->protocol_icon;
+ buddy_icon = layout->buddy_icon;
}
gtk_tree_view_column_clear(column);
@@ -5276,17 +5256,17 @@ pidgin_blist_build_layout(PurpleBuddyLis
rend = pidgin_cell_renderer_expander_new();
gtk_tree_view_column_pack_start(column, rend, FALSE);
gtk_tree_view_column_set_attributes(column, rend,
+ "visible", CONTACT_EXPANDER_VISIBLE_COLUMN,
"expander-visible", CONTACT_EXPANDER_COLUMN,
#if GTK_CHECK_VERSION(2,6,0)
"sensitive", CONTACT_EXPANDER_COLUMN,
"cell-background-gdk", BGCOLOR_COLUMN,
-#endif
- "visible", CONTACT_EXPANDER_VISIBLE_COLUMN,
+#endif
NULL);
for (i = 0; i < 5; i++) {
- if (layout->status_icon == i) {
+ if (status_icon == i) {
/* status icons */
rend = gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_pack_start(column, rend, FALSE);
@@ -5299,7 +5279,7 @@ pidgin_blist_build_layout(PurpleBuddyLis
NULL);
g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL);
- } else if (layout->text == i) {
+ } else if (text == i) {
/* name */
gtkblist->text_rend = rend = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start (column, rend, TRUE);
@@ -5330,7 +5310,7 @@ pidgin_blist_build_layout(PurpleBuddyLis
"cell-background-gdk", BGCOLOR_COLUMN,
#endif
NULL);
- } else if (layout->emblem == i) {
+ } else if (emblem == i) {
/* emblem */
rend = gtk_cell_renderer_pixbuf_new();
g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL);
@@ -5341,7 +5321,7 @@ pidgin_blist_build_layout(PurpleBuddyLis
#endif
"visible", EMBLEM_VISIBLE_COLUMN, NULL);
- } else if (layout->protocol_icon == i) {
+ } else if (protocol_icon == i) {
/* protocol icon */
rend = gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_pack_start(column, rend, FALSE);
@@ -5354,7 +5334,7 @@ pidgin_blist_build_layout(PurpleBuddyLis
NULL);
g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL);
- } else if (layout->buddy_icon == i) {
+ } else if (buddy_icon == i) {
/* buddy icon */
rend = gtk_cell_renderer_pixbuf_new();
g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL);
@@ -5368,6 +5348,7 @@ pidgin_blist_build_layout(PurpleBuddyLis
}
}/* end for loop */
+
}
static void pidgin_blist_show(PurpleBuddyList *list)
@@ -6022,19 +6003,20 @@ static void pidgin_blist_update_group(Pu
gboolean expanded;
GdkColor *bgcolor = NULL;
GdkPixbuf *avatar = NULL;
- PidginBlistTheme *theme;
+ PidginBlistTheme *theme = NULL;
if(!insert_node(list, gnode, &iter))
return;
- theme = pidgin_blist_get_theme();
-
- if (theme == NULL)
- bgcolor = &(gtkblist->treeview->style->bg[GTK_STATE_ACTIVE]);
+ if ((theme = pidgin_blist_get_theme()) == NULL)
+ bgcolor = NULL;
else if (purple_blist_node_get_bool(gnode, "collapsed") || count <= 0)
bgcolor = pidgin_blist_theme_get_collapsed_background_color(theme);
else bgcolor = pidgin_blist_theme_get_expanded_background_color(theme);
+ if (bgcolor == NULL)
+ bgcolor = &(gtkblist->treeview->style->bg[GTK_STATE_ACTIVE]);
+
path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter);
expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(gtkblist->treeview), path);
gtk_tree_path_free(path);
@@ -6075,8 +6057,8 @@ static char *pidgin_get_group_title(Purp
PurpleBlistNode *selected_node = NULL;
GtkTreeIter iter;
FontColorPair *pair;
+ gchar *text_color, *text_font;
PidginBlistTheme *theme;
- const gchar *text_color, *text_font;
group = (PurpleGroup*)gnode;
@@ -6091,24 +6073,20 @@ static char *pidgin_get_group_title(Purp
purple_blist_get_group_online_count(group),
purple_blist_get_group_size(group, FALSE));
}
-
+
theme = pidgin_blist_get_theme();
- if (theme == NULL) {
- text_color = "black";
- text_font = "";
- } else if (expanded) {
- pair = pidgin_blist_theme_get_expanded_text_info(theme);
- text_color = pair->color;
- text_font = pair->font;
- }else {
- pair = pidgin_blist_theme_get_collapsed_text_info(theme);
- text_color = pair->color;
- text_font = pair->font;
- }
-
+ if (theme == NULL)
+ pair = NULL;
+ else if
+ (expanded) pair = pidgin_blist_theme_get_expanded_text_info(theme);
+ else pair = pidgin_blist_theme_get_collapsed_text_info(theme);
+
+ text_color = (pair == NULL || pair->color == NULL) ? "black" : pair->color;
+ text_font = (pair == NULL || pair->font == NULL) ? "" : pair->font;
+
esc = g_markup_escape_text(group->name, -1);
- mark = g_strdup_printf("<span foreground='%s' font_desc='%s'><span weight='bold'>%s</span>%s</span>",
+ mark = g_strdup_printf("<span foreground='%s' font_desc='%s'><b>%s</b>%s</span>",
text_color, text_font, esc ? esc : "", group_count);
g_free(esc);
@@ -6117,14 +6095,15 @@ static void buddy_node(PurpleBuddy *budd
static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *node)
{
- PurplePresence *presence;
+ PurplePresence *presence = purple_buddy_get_presence(buddy);
GdkPixbuf *status, *avatar, *emblem, *prpl_icon;
+ GdkColor *color = NULL;
char *mark;
char *idle = NULL;
gboolean expanded = ((struct _pidgin_blist_node *)(node->parent->ui_data))->contact_expanded;
gboolean selected = (gtkblist->selected_node == node);
gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
- presence = purple_buddy_get_presence(buddy);
+ PidginBlistTheme *theme;
if (editing_blist)
return;
@@ -6148,35 +6127,39 @@ static void buddy_node(PurpleBuddy *budd
emblem = pidgin_blist_get_emblem((PurpleBlistNode*) buddy);
mark = pidgin_blist_get_name_markup(buddy, selected, TRUE);
+ theme = pidgin_blist_get_theme();
+
if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_idle_time") &&
- purple_presence_is_idle(presence) &&
- !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons"))
+ purple_presence_is_idle(presence) && !biglist)
{
time_t idle_secs = purple_presence_get_idle_time(presence);
if (idle_secs > 0)
{
+ FontColorPair *pair = NULL;
+ const gchar *textcolor;
time_t t;
int ihrs, imin;
time(&t);
+
ihrs = (t - idle_secs) / 3600;
imin = ((t - idle_secs) / 60) % 60;
- idle = g_strdup_printf("%d:%02d", ihrs, imin);
- }
- }
- if (purple_presence_is_idle(presence))
- {
- if (idle && !selected) {
- char *i2 = g_strdup_printf("<span color='%s'>%s</span>",
- dim_grey(), idle);
- g_free(idle);
- idle = i2;
+ if (selected) textcolor = "dim grey";
+ else if (theme != NULL && (pair = pidgin_blist_theme_get_idle_text_info(theme)) != NULL && pair->color != NULL)
+ textcolor = pair->color;
+ else textcolor = "black";
+
+ idle = g_strdup_printf("<span color='%s' font_desc='%s'>%d:%02d</span>",
+ textcolor, (pair == NULL || pair->font == NULL) ? "" : pair->color, ihrs, imin);
}
}
prpl_icon = pidgin_create_prpl_icon(buddy->account, PIDGIN_PRPL_ICON_SMALL);
+ if (theme != NULL)
+ color = pidgin_blist_theme_get_contact_color(theme);
+
gtk_tree_store_set(gtkblist->treemodel, iter,
STATUS_ICON_COLUMN, status,
STATUS_ICON_VISIBLE_COLUMN, TRUE,
@@ -6189,7 +6172,7 @@ static void buddy_node(PurpleBuddy *budd
EMBLEM_VISIBLE_COLUMN, (emblem != NULL),
PROTOCOL_ICON_COLUMN, prpl_icon,
PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"),
- BGCOLOR_COLUMN, NULL,
+ BGCOLOR_COLUMN, color,
CONTACT_EXPANDER_COLUMN, NULL,
CONTACT_EXPANDER_VISIBLE_COLUMN, expanded,
GROUP_EXPANDER_VISIBLE_COLUMN, FALSE,
@@ -6247,19 +6230,36 @@ static void pidgin_blist_update_contact(
if(gtknode->contact_expanded) {
GdkPixbuf *status;
- char *mark;
+ gchar *mark;
+ GdkColor *color = NULL;
+ PidginBlistTheme *theme = pidgin_blist_get_theme();
+
+ mark = g_markup_escape_text(purple_contact_get_alias(contact), -1);
+ if (theme != NULL) {
+ FontColorPair *pair = pidgin_blist_theme_get_contact_text_info(theme);
+ color = pidgin_blist_theme_get_contact_color(theme);
+
+ if (pair != NULL) {
+ gchar *temp = g_strdup_printf("<span font_desc='%s' foreground='%s'>%s</span>",
+ (pair->font == NULL) ? "" : pair->font,
+ (pair->color == NULL) ? "black" : pair->color, mark);
+
+ g_free(mark);
+ mark = temp;
+ }
+ }
+
status = pidgin_blist_get_status_icon(cnode,
biglist? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL);
-
- mark = g_markup_escape_text(purple_contact_get_alias(contact), -1);
+
gtk_tree_store_set(gtkblist->treemodel, &iter,
STATUS_ICON_COLUMN, status,
STATUS_ICON_VISIBLE_COLUMN, TRUE,
NAME_COLUMN, mark,
IDLE_COLUMN, NULL,
IDLE_VISIBLE_COLUMN, FALSE,
- BGCOLOR_COLUMN, NULL,
+ BGCOLOR_COLUMN, color,
BUDDY_ICON_COLUMN, NULL,
CONTACT_EXPANDER_COLUMN, TRUE,
CONTACT_EXPANDER_VISIBLE_COLUMN, TRUE,
@@ -6327,12 +6327,15 @@ static void pidgin_blist_update_chat(Pur
if(purple_account_is_connected(chat->account)) {
GtkTreeIter iter;
GdkPixbuf *status, *avatar, *emblem, *prpl_icon;
- char *mark;
+ gchar *mark, *color, *font, *tmp;
gboolean showicons = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
PidginBlistNode *ui;
PurpleConversation *conv;
gboolean hidden;
+ GdkColor *bgcolor = NULL;
+ FontColorPair *pair;
+ PidginBlistTheme *theme;
if (!insert_node(list, node, &iter))
return;
@@ -6352,14 +6355,31 @@ static void pidgin_blist_update_chat(Pur
else
avatar = NULL;
- mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
- if (hidden) {
- char *bold = g_strdup_printf("<b>%s</b>", mark);
- g_free(mark);
- mark = bold;
- }
+ mark = g_markup_escape_text(purple_chat_get_name(chat), -1);
+
+ theme = pidgin_blist_get_theme();
+ if (theme == NULL)
+ pair = NULL;
+ else if (hidden)
+ pair = pidgin_blist_theme_get_unread_message_text_info(theme);
+ else pair = pidgin_blist_theme_get_online_text_info(theme);
+
+ font = (pair == NULL || pair->font == NULL) ? "" : g_strdup(pair->font);
+ color = (pair == NULL || pair->color == NULL) ? "black" : g_strdup(pair->color);
+
+ tmp = g_strdup_printf("<span font_desc='%s' color='%s' weight='%s'>%s</span>",
+ font, color, hidden ? "bold" : "normal", mark);
+
+ g_free(font);
+ g_free(color);
+ g_free(mark);
+ mark = tmp;
+
prpl_icon = pidgin_create_prpl_icon(chat->account, PIDGIN_PRPL_ICON_SMALL);
+
+ if (theme != NULL)
+ bgcolor = pidgin_blist_theme_get_contact_color(theme);
gtk_tree_store_set(gtkblist->treemodel, &iter,
STATUS_ICON_COLUMN, status,
@@ -6371,6 +6391,7 @@ static void pidgin_blist_update_chat(Pur
PROTOCOL_ICON_COLUMN, prpl_icon,
PROTOCOL_ICON_VISIBLE_COLUMN, purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_protocol_icons"),
NAME_COLUMN, mark,
+ BGCOLOR_COLUMN, bgcolor,
GROUP_EXPANDER_VISIBLE_COLUMN, FALSE,
-1);
More information about the Commits
mailing list