comparison finch/plugins/grouping.c @ 22186:d1b8c8bef05b

Add a meebo-like grouping, where online contacts show up under the default groups. But the offline contacts are grouped under a pseudo 'Offline' group.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Wed, 23 Jan 2008 18:17:34 +0000
parents 85c365822504
children bcaf4a037704
comparison
equal deleted inserted replaced
22185:bc2e96c13556 22186:d1b8c8bef05b
130 on_offline_create_tooltip, 130 on_offline_create_tooltip,
131 {NULL, NULL, NULL, NULL} 131 {NULL, NULL, NULL, NULL}
132 }; 132 };
133 133
134 /** 134 /**
135 * Meebo-like Grouping.
136 */
137 static PurpleBlistNode meebo = {.type = PURPLE_BLIST_OTHER_NODE};
138 static gpointer meebo_find_parent(PurpleBlistNode *node)
139 {
140 static FinchBlistManager *def = NULL;
141 if (def == NULL)
142 def = finch_blist_manager_find("default");
143
144 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
145 PurpleBuddy *buddy = purple_contact_get_priority_buddy((PurpleContact*)node);
146 if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy)) {
147 GntTree *tree = finch_blist_get_tree();
148 if (!g_list_find(gnt_tree_get_rows(tree), &meebo)) {
149 gnt_tree_add_row_last(tree, &meebo,
150 gnt_tree_create_row(tree, _("Offline")), NULL);
151 }
152 return &meebo;
153 }
154 }
155 return def->find_parent(node);
156 }
157
158 static FinchBlistManager meebo_group =
159 {
160 "meebo",
161 N_("Meebo"),
162 NULL,
163 meebo_find_parent,
164 NULL,
165 {NULL, NULL, NULL, NULL}
166 };
167
168 /**
135 * No Grouping. 169 * No Grouping.
136 */ 170 */
137 static gboolean no_group_can_add_node(PurpleBlistNode *node) 171 static gboolean no_group_can_add_node(PurpleBlistNode *node)
138 { 172 {
139 return on_offline_can_add_node(node); /* These happen to be the same */ 173 return on_offline_can_add_node(node); /* These happen to be the same */
166 200
167 static gboolean 201 static gboolean
168 plugin_load(PurplePlugin *plugin) 202 plugin_load(PurplePlugin *plugin)
169 { 203 {
170 finch_blist_install_manager(&on_offline); 204 finch_blist_install_manager(&on_offline);
205 finch_blist_install_manager(&meebo_group);
171 finch_blist_install_manager(&no_group); 206 finch_blist_install_manager(&no_group);
172 return TRUE; 207 return TRUE;
173 } 208 }
174 209
175 static gboolean 210 static gboolean
176 plugin_unload(PurplePlugin *plugin) 211 plugin_unload(PurplePlugin *plugin)
177 { 212 {
178 finch_blist_uninstall_manager(&on_offline); 213 finch_blist_uninstall_manager(&on_offline);
214 finch_blist_uninstall_manager(&meebo_group);
179 finch_blist_uninstall_manager(&no_group); 215 finch_blist_uninstall_manager(&no_group);
180 return TRUE; 216 return TRUE;
181 } 217 }
182 218
183 static PurplePluginInfo info = 219 static PurplePluginInfo info =