comparison pidgin/gtkblist.c @ 31544:b76def85cc04

gtkblist: Fix a few memory leaks. Refs #13162. committer: John Bailey <rekkanoryo@rekkanoryo.org>
author morshed.nader@gmail.com
date Wed, 05 Jan 2011 16:20:42 +0000
parents a8cc50c2279f
children fa88dc1dcabb 43f75716a233 917c597beb97
comparison
equal deleted inserted replaced
31543:089a9825076c 31544:b76def85cc04
416 gchar *path_str, 416 gchar *path_str,
417 gpointer user_data) 417 gpointer user_data)
418 { 418 {
419 GtkTreeIter iter; 419 GtkTreeIter iter;
420 GtkTreePath *path = NULL; 420 GtkTreePath *path = NULL;
421 GValue val;
422 PurpleBlistNode *node; 421 PurpleBlistNode *node;
423 const char *text = NULL; 422 const char *text = NULL;
424 423
425 path = gtk_tree_path_new_from_string (path_str); 424 path = gtk_tree_path_new_from_string (path_str);
426 gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 425 gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
427 gtk_tree_path_free (path); 426 gtk_tree_path_free (path);
428 val.g_type = 0; 427 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
429 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
430 node = g_value_get_pointer(&val);
431 428
432 switch (purple_blist_node_get_type(node)) { 429 switch (purple_blist_node_get_type(node)) {
433 case PURPLE_BLIST_CONTACT_NODE: 430 case PURPLE_BLIST_CONTACT_NODE:
434 text = purple_contact_get_alias(PURPLE_CONTACT(node)); 431 text = purple_contact_get_alias(PURPLE_CONTACT(node));
435 break; 432 break;
571 static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1, 568 static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1,
572 char *arg2, PurpleBuddyList *list) 569 char *arg2, PurpleBuddyList *list)
573 { 570 {
574 GtkTreeIter iter; 571 GtkTreeIter iter;
575 GtkTreePath *path; 572 GtkTreePath *path;
576 GValue val;
577 PurpleBlistNode *node; 573 PurpleBlistNode *node;
578 PurpleGroup *dest; 574 PurpleGroup *dest;
579 575
580 editing_blist = FALSE; 576 editing_blist = FALSE;
581 path = gtk_tree_path_new_from_string (arg1); 577 path = gtk_tree_path_new_from_string (arg1);
582 gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 578 gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
583 gtk_tree_path_free (path); 579 gtk_tree_path_free (path);
584 val.g_type = 0; 580 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
585 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
586 node = g_value_get_pointer(&val);
587 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE); 581 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE);
588 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL); 582 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL);
589 583
590 switch (purple_blist_node_get_type(node)) 584 switch (purple_blist_node_get_type(node))
591 { 585 {
1158 } 1152 }
1159 1153
1160 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) 1154 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data)
1161 { 1155 {
1162 PurpleBlistNode *node; 1156 PurpleBlistNode *node;
1163 GValue val; 1157
1164 1158 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &node, -1);
1165 val.g_type = 0;
1166 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &val);
1167
1168 node = g_value_get_pointer(&val);
1169 1159
1170 if (PURPLE_BLIST_NODE_IS_GROUP(node)) { 1160 if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
1171 char *title; 1161 char *title;
1172 1162
1173 title = pidgin_get_group_title(node, TRUE); 1163 title = pidgin_get_group_title(node, TRUE);
1184 } 1174 }
1185 1175
1186 static void gtk_blist_row_collapsed_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) 1176 static void gtk_blist_row_collapsed_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data)
1187 { 1177 {
1188 PurpleBlistNode *node; 1178 PurpleBlistNode *node;
1189 GValue val; 1179
1190 1180 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &node, -1);
1191 val.g_type = 0;
1192 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &val);
1193
1194 node = g_value_get_pointer(&val);
1195 1181
1196 if (PURPLE_BLIST_NODE_IS_GROUP(node)) { 1182 if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
1197 char *title; 1183 char *title;
1198 struct _pidgin_blist_node *gtknode; 1184 struct _pidgin_blist_node *gtknode;
1199 PurpleBlistNode *cnode; 1185 PurpleBlistNode *cnode;
1224 } 1210 }
1225 1211
1226 static void gtk_blist_row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { 1212 static void gtk_blist_row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) {
1227 PurpleBlistNode *node; 1213 PurpleBlistNode *node;
1228 GtkTreeIter iter; 1214 GtkTreeIter iter;
1229 GValue val;
1230 1215
1231 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 1216 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
1232 1217 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
1233 val.g_type = 0;
1234 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
1235 node = g_value_get_pointer(&val);
1236 1218
1237 if(PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_BUDDY(node)) { 1219 if(PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_BUDDY(node)) {
1238 PurpleBuddy *buddy; 1220 PurpleBuddy *buddy;
1239 1221
1240 if(PURPLE_BLIST_NODE_IS_CONTACT(node)) 1222 if(PURPLE_BLIST_NODE_IS_CONTACT(node))
1593 1575
1594 static gboolean 1576 static gboolean
1595 gtk_blist_key_press_cb(GtkWidget *tv, GdkEventKey *event, gpointer data) 1577 gtk_blist_key_press_cb(GtkWidget *tv, GdkEventKey *event, gpointer data)
1596 { 1578 {
1597 PurpleBlistNode *node; 1579 PurpleBlistNode *node;
1598 GValue val;
1599 GtkTreeIter iter, parent; 1580 GtkTreeIter iter, parent;
1600 GtkTreeSelection *sel; 1581 GtkTreeSelection *sel;
1601 GtkTreePath *path; 1582 GtkTreePath *path;
1602 1583
1603 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); 1584 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
1604 if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) 1585 if(!gtk_tree_selection_get_selected(sel, NULL, &iter))
1605 return FALSE; 1586 return FALSE;
1606 1587
1607 val.g_type = 0; 1588 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
1608 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter,
1609 NODE_COLUMN, &val);
1610 node = g_value_get_pointer(&val);
1611 1589
1612 if(event->state & GDK_CONTROL_MASK && 1590 if(event->state & GDK_CONTROL_MASK &&
1613 (event->keyval == 'o' || event->keyval == 'O')) { 1591 (event->keyval == 'o' || event->keyval == 'O')) {
1614 PurpleBuddy *buddy; 1592 PurpleBuddy *buddy;
1615 1593
1946 static gboolean 1924 static gboolean
1947 gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data) 1925 gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data)
1948 { 1926 {
1949 GtkTreePath *path; 1927 GtkTreePath *path;
1950 PurpleBlistNode *node; 1928 PurpleBlistNode *node;
1951 GValue val;
1952 GtkTreeIter iter; 1929 GtkTreeIter iter;
1953 GtkTreeSelection *sel; 1930 GtkTreeSelection *sel;
1954 PurplePlugin *prpl = NULL; 1931 PurplePlugin *prpl = NULL;
1955 PurplePluginProtocolInfo *prpl_info = NULL; 1932 PurplePluginProtocolInfo *prpl_info = NULL;
1956 struct _pidgin_blist_node *gtknode; 1933 struct _pidgin_blist_node *gtknode;
1958 1935
1959 /* Here we figure out which node was clicked */ 1936 /* Here we figure out which node was clicked */
1960 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL)) 1937 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL))
1961 return FALSE; 1938 return FALSE;
1962 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 1939 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
1963 val.g_type = 0; 1940 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
1964 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
1965 node = g_value_get_pointer(&val);
1966 gtknode = (struct _pidgin_blist_node *)node->ui_data; 1941 gtknode = (struct _pidgin_blist_node *)node->ui_data;
1967 1942
1968 /* Right click draws a context menu */ 1943 /* Right click draws a context menu */
1969 if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) { 1944 if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) {
1970 handled = pidgin_blist_show_context_menu(node, NULL, tv, 3, event->time); 1945 handled = pidgin_blist_show_context_menu(node, NULL, tv, 3, event->time);
2019 1994
2020 static gboolean 1995 static gboolean
2021 pidgin_blist_popup_menu_cb(GtkWidget *tv, void *user_data) 1996 pidgin_blist_popup_menu_cb(GtkWidget *tv, void *user_data)
2022 { 1997 {
2023 PurpleBlistNode *node; 1998 PurpleBlistNode *node;
2024 GValue val;
2025 GtkTreeIter iter; 1999 GtkTreeIter iter;
2026 GtkTreeSelection *sel; 2000 GtkTreeSelection *sel;
2027 gboolean handled = FALSE; 2001 gboolean handled = FALSE;
2028 2002
2029 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); 2003 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
2030 if (!gtk_tree_selection_get_selected(sel, NULL, &iter)) 2004 if (!gtk_tree_selection_get_selected(sel, NULL, &iter))
2031 return FALSE; 2005 return FALSE;
2032 2006
2033 val.g_type = 0; 2007 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
2034 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel),
2035 &iter, NODE_COLUMN, &val);
2036 node = g_value_get_pointer(&val);
2037 2008
2038 /* Shift+F10 draws a context menu */ 2009 /* Shift+F10 draws a context menu */
2039 handled = pidgin_blist_show_context_menu(node, pidgin_treeview_popup_menu_position_func, tv, 0, GDK_CURRENT_TIME); 2010 handled = pidgin_blist_show_context_menu(node, pidgin_treeview_popup_menu_position_func, tv, 0, GDK_CURRENT_TIME);
2040 2011
2041 return handled; 2012 return handled;
2272 { 2243 {
2273 GtkTreeRowReference *ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row"); 2244 GtkTreeRowReference *ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row");
2274 GtkTreePath *sourcerow = gtk_tree_row_reference_get_path(ref); 2245 GtkTreePath *sourcerow = gtk_tree_row_reference_get_path(ref);
2275 GtkTreeIter iter; 2246 GtkTreeIter iter;
2276 PurpleBlistNode *node = NULL; 2247 PurpleBlistNode *node = NULL;
2277 GValue val;
2278 if(!sourcerow) 2248 if(!sourcerow)
2279 return; 2249 return;
2280 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, sourcerow); 2250 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, sourcerow);
2281 val.g_type = 0; 2251 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
2282 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
2283 node = g_value_get_pointer(&val);
2284 gtk_selection_data_set (data, 2252 gtk_selection_data_set (data,
2285 gdk_atom_intern ("PURPLE_BLIST_NODE", FALSE), 2253 gdk_atom_intern ("PURPLE_BLIST_NODE", FALSE),
2286 8, /* bits */ 2254 8, /* bits */
2287 (void*)&node, 2255 (void*)&node,
2288 sizeof (node)); 2256 sizeof (node));
2295 GtkTreePath *sourcerow; 2263 GtkTreePath *sourcerow;
2296 GtkTreeIter iter; 2264 GtkTreeIter iter;
2297 PurpleBlistNode *node = NULL; 2265 PurpleBlistNode *node = NULL;
2298 PurpleBuddy *buddy; 2266 PurpleBuddy *buddy;
2299 PurpleConnection *gc; 2267 PurpleConnection *gc;
2300 GValue val;
2301 GString *str; 2268 GString *str;
2302 const char *protocol; 2269 const char *protocol;
2303 2270
2304 ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row"); 2271 ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row");
2305 sourcerow = gtk_tree_row_reference_get_path(ref); 2272 sourcerow = gtk_tree_row_reference_get_path(ref);
2307 if (!sourcerow) 2274 if (!sourcerow)
2308 return; 2275 return;
2309 2276
2310 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, 2277 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter,
2311 sourcerow); 2278 sourcerow);
2312 val.g_type = 0; 2279 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
2313 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter,
2314 NODE_COLUMN, &val);
2315
2316 node = g_value_get_pointer(&val);
2317 2280
2318 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) 2281 if (PURPLE_BLIST_NODE_IS_CONTACT(node))
2319 { 2282 {
2320 buddy = purple_contact_get_priority_buddy((PurpleContact *)node); 2283 buddy = purple_contact_get_priority_buddy((PurpleContact *)node);
2321 } 2284 }
2385 memcpy(&n, sd->data, sizeof(n)); 2348 memcpy(&n, sd->data, sizeof(n));
2386 if(gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) { 2349 if(gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) {
2387 /* if we're here, I think it means the drop is ok */ 2350 /* if we're here, I think it means the drop is ok */
2388 GtkTreeIter iter; 2351 GtkTreeIter iter;
2389 PurpleBlistNode *node; 2352 PurpleBlistNode *node;
2390 GValue val;
2391 struct _pidgin_blist_node *gtknode; 2353 struct _pidgin_blist_node *gtknode;
2392 2354
2393 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), 2355 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel),
2394 &iter, path); 2356 &iter, path);
2395 val.g_type = 0; 2357 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel),
2396 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), 2358 &iter, NODE_COLUMN, &node, -1);
2397 &iter, NODE_COLUMN, &val);
2398 node = g_value_get_pointer(&val);
2399 gtknode = node->ui_data; 2359 gtknode = node->ui_data;
2400 2360
2401 if (PURPLE_BLIST_NODE_IS_CONTACT(n)) { 2361 if (PURPLE_BLIST_NODE_IS_CONTACT(n)) {
2402 PurpleContact *c = (PurpleContact*)n; 2362 PurpleContact *c = (PurpleContact*)n;
2403 if (PURPLE_BLIST_NODE_IS_CONTACT(node) && gtknode->contact_expanded) { 2363 if (PURPLE_BLIST_NODE_IS_CONTACT(node) && gtknode->contact_expanded) {
2538 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), 2498 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget),
2539 x, y, &path, &position)) 2499 x, y, &path, &position))
2540 { 2500 {
2541 GtkTreeIter iter; 2501 GtkTreeIter iter;
2542 PurpleBlistNode *node; 2502 PurpleBlistNode *node;
2543 GValue val;
2544 2503
2545 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), 2504 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel),
2546 &iter, path); 2505 &iter, path);
2547 val.g_type = 0; 2506 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel),
2548 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), 2507 &iter, NODE_COLUMN, &node, -1);
2549 &iter, NODE_COLUMN, &val);
2550 node = g_value_get_pointer(&val);
2551 2508
2552 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) 2509 if (PURPLE_BLIST_NODE_IS_BUDDY(node))
2553 { 2510 {
2554 group = (PurpleGroup *)node->parent->parent; 2511 group = (PurpleGroup *)node->parent->parent;
2555 } 2512 }
2600 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), 2557 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget),
2601 x, y, &path, &position)) 2558 x, y, &path, &position))
2602 { 2559 {
2603 GtkTreeIter iter; 2560 GtkTreeIter iter;
2604 PurpleBlistNode *node; 2561 PurpleBlistNode *node;
2605 GValue val;
2606 2562
2607 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), 2563 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel),
2608 &iter, path); 2564 &iter, path);
2609 val.g_type = 0; 2565 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel),
2610 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), 2566 &iter, NODE_COLUMN, &node, -1);
2611 &iter, NODE_COLUMN, &val);
2612 node = g_value_get_pointer(&val);
2613 2567
2614 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) 2568 if (PURPLE_BLIST_NODE_IS_BUDDY(node))
2615 { 2569 {
2616 group = (PurpleGroup *)node->parent->parent; 2570 group = (PurpleGroup *)node->parent->parent;
2617 } 2571 }
2636 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), 2590 if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget),
2637 x, y, &path, &position)) 2591 x, y, &path, &position))
2638 { 2592 {
2639 GtkTreeIter iter; 2593 GtkTreeIter iter;
2640 PurpleBlistNode *node; 2594 PurpleBlistNode *node;
2641 GValue val;
2642 2595
2643 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), 2596 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel),
2644 &iter, path); 2597 &iter, path);
2645 val.g_type = 0; 2598 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel),
2646 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), 2599 &iter, NODE_COLUMN, &node, -1);
2647 &iter, NODE_COLUMN, &val);
2648 node = g_value_get_pointer(&val);
2649 2600
2650 if (PURPLE_BLIST_NODE_IS_BUDDY(node) || PURPLE_BLIST_NODE_IS_CONTACT(node)) { 2601 if (PURPLE_BLIST_NODE_IS_BUDDY(node) || PURPLE_BLIST_NODE_IS_CONTACT(node)) {
2651 PurpleBuddy *b = PURPLE_BLIST_NODE_IS_BUDDY(node) ? PURPLE_BUDDY(node) : purple_contact_get_priority_buddy(PURPLE_CONTACT(node)); 2602 PurpleBuddy *b = PURPLE_BLIST_NODE_IS_BUDDY(node) ? PURPLE_BUDDY(node) : purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
2652 pidgin_dnd_file_manage(sd, b->account, b->name); 2603 pidgin_dnd_file_manage(sd, b->account, b->name);
2653 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); 2604 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t);
3208 static gboolean pidgin_blist_expand_timeout(GtkWidget *tv) 3159 static gboolean pidgin_blist_expand_timeout(GtkWidget *tv)
3209 { 3160 {
3210 GtkTreePath *path; 3161 GtkTreePath *path;
3211 GtkTreeIter iter; 3162 GtkTreeIter iter;
3212 PurpleBlistNode *node; 3163 PurpleBlistNode *node;
3213 GValue val;
3214 struct _pidgin_blist_node *gtknode; 3164 struct _pidgin_blist_node *gtknode;
3215 3165
3216 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), 3166 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2),
3217 &path, NULL, NULL, NULL)) 3167 &path, NULL, NULL, NULL))
3218 return FALSE; 3168 return FALSE;
3219 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 3169 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
3220 val.g_type = 0; 3170 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
3221 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val);
3222 node = g_value_get_pointer(&val);
3223 3171
3224 if(!PURPLE_BLIST_NODE_IS_CONTACT(node)) { 3172 if(!PURPLE_BLIST_NODE_IS_CONTACT(node)) {
3225 gtk_tree_path_free(path); 3173 gtk_tree_path_free(path);
3226 return FALSE; 3174 return FALSE;
3227 } 3175 }
3321 pidgin_blist_create_tooltip(GtkWidget *widget, GtkTreePath *path, 3269 pidgin_blist_create_tooltip(GtkWidget *widget, GtkTreePath *path,
3322 gpointer null, int *w, int *h) 3270 gpointer null, int *w, int *h)
3323 { 3271 {
3324 GtkTreeIter iter; 3272 GtkTreeIter iter;
3325 PurpleBlistNode *node; 3273 PurpleBlistNode *node;
3326 GValue val;
3327 gboolean editable = FALSE; 3274 gboolean editable = FALSE;
3328 3275
3329 /* If we're editing a cell (e.g. alias editing), don't show the tooltip */ 3276 /* If we're editing a cell (e.g. alias editing), don't show the tooltip */
3330 g_object_get(G_OBJECT(gtkblist->text_rend), "editable", &editable, NULL); 3277 g_object_get(G_OBJECT(gtkblist->text_rend), "editable", &editable, NULL);
3331 if (editable) 3278 if (editable)
3335 gtkblist->tipwindow = NULL; 3282 gtkblist->tipwindow = NULL;
3336 pidgin_blist_destroy_tooltip_data(); 3283 pidgin_blist_destroy_tooltip_data();
3337 } 3284 }
3338 3285
3339 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 3286 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
3340 val.g_type = 0; 3287 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
3341 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); 3288
3342 node = g_value_get_pointer(&val);
3343 return pidgin_blist_create_tooltip_for_node(widget, node, w, h); 3289 return pidgin_blist_create_tooltip_for_node(widget, node, w, h);
3344 } 3290 }
3345 3291
3346 static gboolean pidgin_blist_motion_cb (GtkWidget *tv, GdkEventMotion *event, gpointer null) 3292 static gboolean pidgin_blist_motion_cb (GtkWidget *tv, GdkEventMotion *event, gpointer null)
3347 { 3293 {
7742 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); 7688 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7743 return; 7689 return;
7744 } 7690 }
7745 7691
7746 do { 7692 do {
7747 GValue val;
7748 PurpleBlistNode *n; 7693 PurpleBlistNode *n;
7749 const char *this_name; 7694 const char *this_name;
7750 int cmp; 7695 int cmp;
7751 7696
7752 val.g_type = 0; 7697 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &n, -1);
7753 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7754 n = g_value_get_pointer(&val);
7755 7698
7756 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { 7699 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7757 this_name = purple_contact_get_alias((PurpleContact*)n); 7700 this_name = purple_contact_get_alias((PurpleContact*)n);
7758 } else if(PURPLE_BLIST_NODE_IS_CHAT(n)) { 7701 } else if(PURPLE_BLIST_NODE_IS_CHAT(n)) {
7759 this_name = purple_chat_get_name((PurpleChat*)n); 7702 this_name = purple_chat_get_name((PurpleChat*)n);
7772 gtk_tree_store_insert_before(gtkblist->treemodel, iter, 7715 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7773 &groupiter, &more_z); 7716 &groupiter, &more_z);
7774 return; 7717 return;
7775 } 7718 }
7776 } 7719 }
7777 g_value_unset(&val);
7778 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); 7720 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z));
7779 7721
7780 if(cur) { 7722 if(cur) {
7781 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); 7723 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL);
7782 *iter = *cur; 7724 *iter = *cur;
7813 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); 7755 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7814 return; 7756 return;
7815 } 7757 }
7816 7758
7817 do { 7759 do {
7818 GValue val;
7819 PurpleBlistNode *n; 7760 PurpleBlistNode *n;
7820 gint name_cmp; 7761 gint name_cmp;
7821 gint presence_cmp; 7762 gint presence_cmp;
7822 7763
7823 val.g_type = 0; 7764 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &n, -1);
7824 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7825 n = g_value_get_pointer(&val);
7826 7765
7827 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { 7766 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7828 this_buddy = purple_contact_get_priority_buddy((PurpleContact*)n); 7767 this_buddy = purple_contact_get_priority_buddy((PurpleContact*)n);
7829 } else { 7768 } else {
7830 this_buddy = NULL; 7769 this_buddy = NULL;
7856 gtk_tree_store_insert_before(gtkblist->treemodel, iter, 7795 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7857 &groupiter, &more_z); 7796 &groupiter, &more_z);
7858 return; 7797 return;
7859 } 7798 }
7860 } 7799 }
7861
7862 g_value_unset(&val);
7863 } 7800 }
7864 while (gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel), 7801 while (gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel),
7865 &more_z)); 7802 &more_z));
7866 7803
7867 if (cur) { 7804 if (cur) {
7914 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); 7851 gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0);
7915 return; 7852 return;
7916 } 7853 }
7917 7854
7918 do { 7855 do {
7919 GValue val;
7920 PurpleBlistNode *n; 7856 PurpleBlistNode *n;
7921 PurpleBlistNode *n2; 7857 PurpleBlistNode *n2;
7922 PurpleBuddy *buddy; 7858 PurpleBuddy *buddy;
7923 int cmp; 7859 int cmp;
7924 7860
7925 val.g_type = 0; 7861 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &n, -1);
7926 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val);
7927 n = g_value_get_pointer(&val);
7928 this_log_activity_score = 0; 7862 this_log_activity_score = 0;
7929 7863
7930 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) { 7864 if(PURPLE_BLIST_NODE_IS_CONTACT(n)) {
7931 for (n2 = n->child; n2; n2 = n2->next) { 7865 for (n2 = n->child; n2; n2 = n2->next) {
7932 buddy = (PurpleBuddy*)n2; 7866 buddy = (PurpleBuddy*)n2;
7950 gtk_tree_store_insert_before(gtkblist->treemodel, iter, 7884 gtk_tree_store_insert_before(gtkblist->treemodel, iter,
7951 &groupiter, &more_z); 7885 &groupiter, &more_z);
7952 return; 7886 return;
7953 } 7887 }
7954 } 7888 }
7955 g_value_unset(&val);
7956 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); 7889 } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z));
7957 7890
7958 if (cur != NULL) { 7891 if (cur != NULL) {
7959 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); 7892 gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL);
7960 *iter = *cur; 7893 *iter = *cur;