| 14 |
14 |
| 15 typedef struct |
15 typedef struct |
| 16 { |
16 { |
| 17 GntWidget *window; |
17 GntWidget *window; |
| 18 GntWidget *tree; |
18 GntWidget *tree; |
| |
19 |
| |
20 GaimBuddyList *list; |
| 19 } GGBlist; |
21 } GGBlist; |
| 20 |
22 |
| 21 GGBlist *ggblist; |
23 GGBlist *ggblist; |
| |
24 |
| |
25 static void add_buddy(GaimBuddy *buddy, GGBlist *ggblist); |
| |
26 static void add_group(GaimGroup *group, GGBlist *ggblist); |
| 22 |
27 |
| 23 static void |
28 static void |
| 24 new_node(GaimBlistNode *node) |
29 new_node(GaimBlistNode *node) |
| 25 { |
30 { |
| 26 } |
31 } |
| 27 |
32 |
| 28 static void |
33 static void |
| 29 node_update(GaimBuddyList *list, GaimBlistNode *node) |
34 node_remove(GaimBuddyList *list, GaimBlistNode *node) |
| 30 { |
35 { |
| |
36 GGBlist *ggblist = list->ui_data; |
| |
37 |
| |
38 if (node->ui_data == NULL) |
| |
39 return; |
| |
40 |
| |
41 gnt_tree_remove(GNT_TREE(ggblist->tree), node); |
| |
42 node->ui_data = NULL; |
| |
43 |
| |
44 /* XXX: Depending on the node, we may want to remove the group/contact node if necessary */ |
| |
45 if (GAIM_BLIST_NODE_IS_BUDDY(node)) |
| |
46 { |
| |
47 GaimGroup *group = gaim_buddy_get_group((GaimBuddy*)node); |
| |
48 if (gaim_blist_get_group_online_count(group) == 0) |
| |
49 node_remove(list, (GaimBlistNode*)group); |
| |
50 } |
| 31 } |
51 } |
| 32 |
52 |
| 33 static void |
53 static void |
| 34 node_remove(GaimBuddyList *list, GaimBlistNode *node) |
54 node_update(GaimBuddyList *list, GaimBlistNode *node) |
| 35 { |
55 { |
| |
56 if (GAIM_BLIST_NODE_IS_BUDDY(node)) |
| |
57 { |
| |
58 GaimBuddy *buddy = (GaimBuddy*)node; |
| |
59 } |
| 36 } |
60 } |
| 37 |
61 |
| 38 static void |
62 static void |
| 39 new_list(GaimBuddyList *list) |
63 new_list(GaimBuddyList *list) |
| 40 { |
64 { |
| 41 if (ggblist == NULL) |
|
| 42 gg_blist_init(); |
|
| 43 list->ui_data = ggblist; |
|
| 44 } |
65 } |
| 45 |
66 |
| 46 static GaimBlistUiOps blist_ui_ops = |
67 static GaimBlistUiOps blist_ui_ops = |
| 47 { |
68 { |
| 48 new_list, |
69 new_list, |
| 83 GaimGroup *group; |
104 GaimGroup *group; |
| 84 GaimBlistNode *node = (GaimBlistNode *)buddy; |
105 GaimBlistNode *node = (GaimBlistNode *)buddy; |
| 85 if (node->ui_data) |
106 if (node->ui_data) |
| 86 return; |
107 return; |
| 87 |
108 |
| |
109 node->ui_data = GINT_TO_POINTER(TRUE); |
| 88 group = gaim_buddy_get_group(buddy); |
110 group = gaim_buddy_get_group(buddy); |
| 89 add_group(group, ggblist); |
111 add_group(group, ggblist); |
| 90 |
112 |
| 91 text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); |
113 text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); |
| 92 gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); |
114 gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); |
| 116 gnt_widget_set_focus(widget, FALSE); |
138 gnt_widget_set_focus(widget, FALSE); |
| 117 } |
139 } |
| 118 |
140 |
| 119 void gg_blist_init() |
141 void gg_blist_init() |
| 120 { |
142 { |
| 121 if (ggblist == NULL) |
143 ggblist = g_new0(GGBlist, 1); |
| 122 ggblist = g_new0(GGBlist, 1); |
144 |
| |
145 gaim_get_blist()->ui_data = ggblist; |
| 123 |
146 |
| 124 ggblist->window = gnt_box_new(FALSE, FALSE); |
147 ggblist->window = gnt_box_new(FALSE, FALSE); |
| 125 GNT_WIDGET_UNSET_FLAGS(ggblist->window, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
148 GNT_WIDGET_UNSET_FLAGS(ggblist->window, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
| 126 gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); |
149 gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); |
| 127 gnt_box_set_pad(GNT_BOX(ggblist->window), 0); |
150 gnt_box_set_pad(GNT_BOX(ggblist->window), 0); |
| 137 GAIM_CALLBACK(buddy_signed_on), ggblist); |
160 GAIM_CALLBACK(buddy_signed_on), ggblist); |
| 138 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", gg_blist_get_handle(), |
161 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", gg_blist_get_handle(), |
| 139 GAIM_CALLBACK(buddy_signed_off), ggblist); |
162 GAIM_CALLBACK(buddy_signed_off), ggblist); |
| 140 |
163 |
| 141 g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); |
164 g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); |
| 142 |
165 |
| 143 /*gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", gg_blist_get_handle(),*/ |
166 /*gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", gg_blist_get_handle(),*/ |
| 144 /*GAIM_CALLBACK(received_im_msg), list);*/ |
167 /*GAIM_CALLBACK(received_im_msg), list);*/ |
| 145 /*gaim_signal_connect(gaim_conversations_get_handle(), "sent-im-msg", gg_blist_get_handle(),*/ |
168 /*gaim_signal_connect(gaim_conversations_get_handle(), "sent-im-msg", gg_blist_get_handle(),*/ |
| 146 /*GAIM_CALLBACK(sent_im_msg), NULL);*/ |
169 /*GAIM_CALLBACK(sent_im_msg), NULL);*/ |
| 147 |
170 |