Mercurial > pidgin.yaz
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; |