# HG changeset patch # User Sadrul Habib Chowdhury # Date 1152342809 0 # Node ID 917a71dd02eb8bdd3fbc15a5d82b9aaf51f5465c # Parent 3dbcbc5e57e1c0e292d026ab71d49cdaa8ba223d [gaim-migrate @ 16458] Add text-attributes for rows in a GntTree. Use this feature to dim idle buddies in the buddylist. committer: Tailor Script diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/gntblist.c --- a/console/gntblist.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/gntblist.c Sat Jul 08 07:13:29 2006 +0000 @@ -203,6 +203,10 @@ node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, get_display_name(node), group, NULL); + if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, GNT_TEXT_FLAG_DIM); + else + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, 0); } #if 0 @@ -358,7 +362,6 @@ draw_tooltip(ggblist); } - static gboolean key_pressed(GntWidget *widget, const char *text, GGBlist *ggblist) { @@ -377,11 +380,28 @@ } static void -buddy_status_changed(GaimBuddy *buddy, GaimStatus *old, GaimStatus *now, GGBlist *ggblist) +update_buddy_display(GaimBuddy *buddy, GGBlist *ggblist) { gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, get_display_name((GaimBlistNode*)buddy)); if (ggblist->tnode == (GaimBlistNode*)buddy) draw_tooltip(ggblist); + + if (gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, GNT_TEXT_FLAG_DIM); + else + gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, 0); +} + +static void +buddy_status_changed(GaimBuddy *buddy, GaimStatus *old, GaimStatus *now, GGBlist *ggblist) +{ + update_buddy_display(buddy, ggblist); +} + +static void +buddy_idle_changed(GaimBuddy *buddy, int old, int new, GGBlist *ggblist) +{ + update_buddy_display(buddy, ggblist); } void gg_blist_init() @@ -405,6 +425,8 @@ gaim_signal_connect(gaim_blist_get_handle(), "buddy-status-changed", gg_blist_get_handle(), GAIM_CALLBACK(buddy_status_changed), ggblist); + gaim_signal_connect(gaim_blist_get_handle(), "buddy-idle-changed", gg_blist_get_handle(), + GAIM_CALLBACK(buddy_idle_changed), ggblist); #if 0 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/gntconv.c --- a/console/gntconv.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/gntconv.c Sat Jul 08 07:13:29 2006 +0000 @@ -146,7 +146,7 @@ { GGConv *ggconv = g_hash_table_lookup(ggconvs, conv); char *strip; - GntTextViewFlags fl = 0; + GntTextFormatFlags fl = 0; g_return_if_fail(ggconv != NULL); diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/gntbox.c --- a/console/libgnt/gntbox.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/gntbox.c Sat Jul 08 07:13:29 2006 +0000 @@ -284,7 +284,6 @@ GList *iter; GntBox *box = GNT_BOX(widget); int wchange, hchange; - int wc = 0, hc = 0; wchange = widget->priv.width - width; hchange = widget->priv.height - height; diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/gnttextview.c --- a/console/libgnt/gnttextview.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/gnttextview.c Sat Jul 08 07:13:29 2006 +0000 @@ -7,7 +7,7 @@ typedef struct { - GntTextViewFlags flags; + GntTextFormatFlags flags; char *text; } GntTextSegment; @@ -162,7 +162,7 @@ return widget; } -void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextViewFlags flags) +void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextFormatFlags flags) { GntWidget *widget = GNT_WIDGET(view); int fl = 0; diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/gnttextview.h --- a/console/libgnt/gnttextview.h Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/gnttextview.h Sat Jul 08 07:13:29 2006 +0000 @@ -35,7 +35,7 @@ GNT_TEXT_FLAG_BLINK = 1 << 2, GNT_TEXT_FLAG_DIM = 1 << 3, GNT_TEXT_FLAG_HIGHLIGHT = 1 << 4, -} GntTextViewFlags; +} GntTextFormatFlags; struct _GnTextViewClass { @@ -58,7 +58,7 @@ /* scroll > 0 means scroll up, < 0 means scroll down, == 0 means scroll to the end */ void gnt_text_view_scroll(GntTextView *view, int scroll); -void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextViewFlags flags); +void gnt_text_view_append_text_with_flags(GntTextView *view, const char *text, GntTextFormatFlags flags); /* Move the cursor to the beginning of the next line and resets text-attributes. * It first completes the current line with the current text-attributes. */ diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/gnttree.c --- a/console/libgnt/gnttree.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/gnttree.c Sat Jul 08 07:13:29 2006 +0000 @@ -25,6 +25,7 @@ gboolean choice; /* Is this a choice-box? If choice is true, then child will be NULL */ gboolean isselected; + GntTextFormatFlags flags; GntTreeRow *parent; GntTreeRow *child; @@ -180,6 +181,9 @@ int wr; char format[16] = ""; + GntTextFormatFlags flags = row->flags; + int attr = 0; + deep = TRUE; if (row->parent == NULL && row->child) @@ -208,25 +212,38 @@ str[wr++] = ' '; str[wr] = 0; } - + + if (flags & GNT_TEXT_FLAG_BOLD) + attr |= A_BOLD; + if (flags & GNT_TEXT_FLAG_UNDERLINE) + attr |= A_UNDERLINE; + if (flags & GNT_TEXT_FLAG_BLINK) + attr |= A_BLINK; + if (row == tree->current) { if (gnt_widget_has_focus(widget)) - wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT)); + attr |= COLOR_PAIR(GNT_COLOR_HIGHLIGHT); else - wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); - mvwprintw(widget->window, start, pos, str); - whline(widget->window, ' ', widget->priv.width - pos * 2 - g_utf8_strlen(str, -1)); - wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); + attr |= COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D); } else { - mvwprintw(widget->window, start, pos, str); - whline(widget->window, ' ', widget->priv.width - pos * 2 - g_utf8_strlen(str, -1)); + if (flags & GNT_TEXT_FLAG_DIM) + attr |= (A_DIM | COLOR_PAIR(GNT_COLOR_DISABLED)); + else if (flags & GNT_TEXT_FLAG_HIGHLIGHT) + attr |= (A_DIM | COLOR_PAIR(GNT_COLOR_HIGHLIGHT)); + else + attr |= COLOR_PAIR(GNT_COLOR_NORMAL); } + + wbkgdset(widget->window, '\0' | attr); + mvwprintw(widget->window, start, pos, str); + whline(widget->window, ' ', widget->priv.width - pos * 2 - g_utf8_strlen(str, -1)); tree->bottom = row; } + wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); while (start < widget->priv.height - pos) { mvwhline(widget->window, start, pos, ' ', @@ -682,3 +699,13 @@ return row->isselected; } +void gnt_tree_set_row_flags(GntTree *tree, void *key, GntTextFormatFlags flags) +{ + GntTreeRow *row = g_hash_table_lookup(tree->hash, key); + if (!row) + return; + + row->flags = flags; + redraw_tree(tree); +} + diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/gnttree.h --- a/console/libgnt/gnttree.h Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/gnttree.h Sat Jul 08 07:13:29 2006 +0000 @@ -5,6 +5,7 @@ #include "gnt.h" #include "gntcolors.h" #include "gntkeys.h" +#include "gnttextview.h" #define GNT_TYPE_TREE (gnt_tree_get_gtype()) #define GNT_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNT_TYPE_TREE, GntTree)) @@ -79,6 +80,8 @@ gboolean gnt_tree_get_choice(GntTree *tree, void *key); +void gnt_tree_set_row_flags(GntTree *tree, void *key, GntTextFormatFlags flags); + G_END_DECLS #endif /* GNT_TREE_H */ diff -r 3dbcbc5e57e1 -r 917a71dd02eb console/libgnt/test/multiwin.c --- a/console/libgnt/test/multiwin.c Sat Jul 08 02:11:11 2006 +0000 +++ b/console/libgnt/test/multiwin.c Sat Jul 08 07:13:29 2006 +0000 @@ -58,6 +58,8 @@ gnt_tree_add_row_after(GNT_TREE(tree), "6", "6", "4", NULL); + gnt_tree_set_row_flags(GNT_TREE(tree), "e", GNT_TEXT_FLAG_DIM); + g_timeout_add(5000, show, box2); gnt_main();