Mercurial > pidgin.yaz
diff pidgin/gtkblist.c @ 29775:e446b56c01e4
propagate from branch 'im.pidgin.pidgin' (head be77df4826034ac2521177bb6af6b60be3d1b4c4)
to branch 'im.pidgin.pidgin.next.minor' (head c0803026336ad6c803c2982ec7b0153378d71860)
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Tue, 16 Feb 2010 15:16:44 +0000 |
parents | 422889fb57e0 |
children | 185677f47825 |
line wrap: on
line diff
--- a/pidgin/gtkblist.c Tue Feb 16 15:16:28 2010 +0000 +++ b/pidgin/gtkblist.c Tue Feb 16 15:16:44 2010 +0000 @@ -137,13 +137,9 @@ static struct pidgin_blist_sort_method *current_sort_method = NULL; static void sort_method_none(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); -/* The functions we use for sorting aren't available in gtk 2.0.x, and - * segfault in 2.2.0. 2.2.1 is known to work, so I'll require that */ -#if GTK_CHECK_VERSION(2,2,1) static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); static void sort_method_status(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); static void sort_method_log_activity(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); -#endif static PidginBuddyList *gtkblist = NULL; static GList *groups_tree(void); @@ -201,7 +197,6 @@ static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) { -#if GTK_CHECK_VERSION(2,2,0) if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); @@ -223,28 +218,6 @@ if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) pidgin_blist_refresh_timer(purple_get_blist()); } -#else - /* At least gtk+ 2.0.6 does not properly set the change_mask when unsetting a - * GdkWindowState flag. To work around, the window state will be explicitly - * queried on these older versions of gtk+. See pidgin ticket #739. - */ - GdkWindowState new_window_state = gdk_window_get_state(G_OBJECT(gtkblist->window->window)); - - if(new_window_state & GDK_WINDOW_STATE_WITHDRAWN) { - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); - } else { - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE); - pidgin_blist_refresh_timer(purple_get_blist()); - } - - if(new_window_state & GDK_WINDOW_STATE_MAXIMIZED) - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", TRUE); - else - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE); - - if (!(new_window_state & GDK_WINDOW_STATE_ICONIFIED)) - pidgin_blist_refresh_timer(purple_get_blist()); -#endif return FALSE; } @@ -434,7 +407,6 @@ gtk_blist_join_chat(chat); } -#if GTK_CHECK_VERSION(2,6,0) static void gtk_blist_renderer_editing_cancelled_cb(GtkCellRenderer *renderer, PurpleBuddyList *list) { editing_blist = FALSE; @@ -483,7 +455,6 @@ } editing_blist = TRUE; } -#endif static void gtk_blist_do_personize(GList *merges) @@ -763,12 +734,8 @@ g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL); gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE); gtk_widget_grab_focus(gtkblist->treeview); -#if GTK_CHECK_VERSION(2,2,0) gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(gtkblist->treeview), path, gtkblist->text_column, gtkblist->text_rend, TRUE); -#else - gtk_tree_view_set_cursor(GTK_TREE_VIEW(gtkblist->treeview), path, gtkblist->text_column, TRUE); -#endif gtk_tree_path_free(path); } @@ -1241,9 +1208,9 @@ purple_blist_node_set_bool(node, "collapsed", TRUE); - for(cnode = node->child; cnode; cnode = cnode->next) { + for(cnode = purple_blist_node_get_first_child(node); cnode; cnode = purple_blist_node_get_sibling_next(cnode)) { if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { - gtknode = cnode->ui_data; + gtknode = purple_blist_node_get_ui_data(cnode); if (!gtknode->contact_expanded) continue; gtknode->contact_expanded = FALSE; @@ -1275,7 +1242,7 @@ else buddy = (PurpleBuddy*)node; - pidgin_dialogs_im_with_user(buddy->account, buddy->name); + pidgin_dialogs_im_with_user(purple_buddy_get_account(buddy), purple_buddy_get_name(buddy)); } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { gtk_blist_join_chat((PurpleChat *)node); } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { @@ -1295,9 +1262,9 @@ if(gtk_tree_selection_get_selected(sel, NULL, &iter)){ gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); if (PURPLE_BLIST_NODE_IS_BUDDY(node)) - purple_blist_request_add_chat(NULL, (PurpleGroup*)node->parent->parent, NULL, NULL); + purple_blist_request_add_chat(NULL, purple_buddy_get_group(PURPLE_BUDDY(node)), NULL, NULL); if (PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_CHAT(node)) - purple_blist_request_add_chat(NULL, (PurpleGroup*)node->parent, NULL, NULL); + purple_blist_request_add_chat(NULL, purple_contact_get_group(PURPLE_CONTACT(node)), NULL, NULL); else if (PURPLE_BLIST_NODE_IS_GROUP(node)) purple_blist_request_add_chat(NULL, (PurpleGroup*)node, NULL, NULL); } @@ -1315,13 +1282,13 @@ if(gtk_tree_selection_get_selected(sel, NULL, &iter)){ gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { - purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node->parent->parent)->name, - NULL); - } else if (PURPLE_BLIST_NODE_IS_CONTACT(node) - || PURPLE_BLIST_NODE_IS_CHAT(node)) { - purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node->parent)->name, NULL); + PurpleGroup *group = purple_buddy_get_group(PURPLE_BUDDY(node)); + purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL); + } else if (PURPLE_BLIST_NODE_IS_CONTACT(node) || PURPLE_BLIST_NODE_IS_CHAT(node)) { + PurpleGroup *group = purple_contact_get_group(PURPLE_CONTACT(node)); + purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(group), NULL); } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { - purple_blist_request_add_buddy(NULL, NULL, ((PurpleGroup*)node)->name, NULL); + purple_blist_request_add_buddy(NULL, NULL, purple_group_get_name(PURPLE_GROUP(node)), NULL); } } else { @@ -1373,11 +1340,11 @@ if(!PURPLE_BLIST_NODE_IS_CONTACT(node)) return; - gtknode = (struct _pidgin_blist_node *)node->ui_data; + gtknode = purple_blist_node_get_ui_data(node); gtknode->contact_expanded = TRUE; - for(bnode = node->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(node); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) { pidgin_blist_update(NULL, bnode); } @@ -1392,7 +1359,7 @@ /* Let the treeview draw so it knows where to scroll */ ex->treeview = GTK_TREE_VIEW(gtkblist->treeview); ex->path = path; - ex->node = node->child; + ex->node = purple_blist_node_get_first_child(node); g_idle_add(scroll_to_expanded_cell, ex); } } @@ -1406,11 +1373,11 @@ if(!PURPLE_BLIST_NODE_IS_CONTACT(node)) return; - gtknode = (struct _pidgin_blist_node *)node->ui_data; + gtknode = purple_blist_node_get_ui_data(node); gtknode->contact_expanded = FALSE; - for(bnode = node->child; bnode; bnode = bnode->next) { + for(bnode = purple_blist_node_get_first_child(node); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) { pidgin_blist_update(NULL, bnode); } } @@ -1501,10 +1468,10 @@ submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); - for (group = purple_blist_get_root(); group; group = group->next) { - if (group->type != PURPLE_BLIST_GROUP_NODE) + for (group = purple_blist_get_root(); group; group = purple_blist_node_get_sibling_next(group)) { + if (!PURPLE_BLIST_NODE_IS_GROUP(group)) continue; - if (group == node->parent) + if (group == purple_blist_node_get_parent(node)) continue; menuitem = pidgin_new_item_from_stock(submenu, purple_group_get_name((PurpleGroup *)group), NULL, G_CALLBACK(gtk_blist_menu_move_to_cb), node, 0, 0, NULL); @@ -1515,6 +1482,8 @@ void pidgin_blist_make_buddy_menu(GtkWidget *menu, PurpleBuddy *buddy, gboolean sub) { + PurpleAccount *account = NULL; + PurpleConnection *pc = NULL; PurplePluginProtocolInfo *prpl_info; PurpleContact *contact; PurpleBlistNode *node; @@ -1523,13 +1492,16 @@ g_return_if_fail(menu); g_return_if_fail(buddy); - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl); - - node = (PurpleBlistNode*)buddy; + account = purple_buddy_get_account(buddy); + pc = purple_account_get_connection(account); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(pc)); + + node = PURPLE_BLIST_NODE(buddy); contact = purple_buddy_get_contact(buddy); if (contact) { - contact_expanded = ((struct _pidgin_blist_node *)(((PurpleBlistNode*)contact)->ui_data))->contact_expanded; + PidginBlistNode *node = purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(contact)); + contact_expanded = node->contact_expanded; } if (prpl_info && prpl_info->get_info) { @@ -3065,7 +3037,6 @@ current_height-1,td->avatar_width+2, td->avatar_height+2); } -#if GTK_CHECK_VERSION(2,2,0) if (td->status_icon) { if (dir == GTK_TEXT_DIR_RTL) gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, @@ -3092,16 +3063,6 @@ current_height + ((td->name_height / 2) - (PRPL_SIZE / 2)), -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); -#else - if (td->status_icon) { - gdk_pixbuf_render_to_drawable(td->status_icon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 12, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); - } - if(td->avatar) - gdk_pixbuf_render_to_drawable(td->avatar, - GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, - max_width - (td->avatar_width + TOOLTIP_BORDER), - current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); -#endif if (td->name_layout) { if (dir == GTK_TEXT_DIR_RTL) { gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, @@ -3480,12 +3441,13 @@ /* Help */ { N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL }, { N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP }, + { "/Help/sep1", NULL, NULL, 0, "<Separator>", NULL }, + { N_("/Help/_Build Information"), NULL, pidgin_dialogs_buildinfo, 0, "<Item>", NULL }, { N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL }, -#if GTK_CHECK_VERSION(2,6,0) + { N_("/Help/De_veloper Information"), NULL, pidgin_dialogs_developers, 0, "<Item>", NULL }, + { N_("/Help/_Translator Information"), NULL, pidgin_dialogs_translators, 0, "<Item>", NULL }, + { "/Help/sep2", NULL, NULL, 0, "<Separator>", NULL }, { N_("/Help/_About"), NULL, pidgin_dialogs_about, 4, "<StockItem>", GTK_STOCK_ABOUT }, -#else - { N_("/Help/_About"), NULL, pidgin_dialogs_about, 4, "<Item>", NULL }, -#endif }; /********************************************************* @@ -4075,44 +4037,11 @@ g_free(tmp); tmp = new; } - /* add ... to messages that are too long, GTK 2.6+ does it automatically */ -#if !GTK_CHECK_VERSION(2,6,0) - if(tmp) { - char buf[32]; - char *c = tmp; - int length = 0, vis=0; - gboolean inside = FALSE; - g_strdelimit(tmp, "\n", ' '); - purple_str_strip_char(tmp, '\r'); - - while(*c && vis < 20) { - if(*c == '&') - inside = TRUE; - else if(*c == ';') - inside = FALSE; - if(!inside) - vis++; - c = g_utf8_next_char(c); /* this is fun */ - } - - length = c - tmp; - - if(vis == 20) - g_snprintf(buf, sizeof(buf), "%%.%ds...", length); - else - g_snprintf(buf, sizeof(buf), "%%s "); - - statustext = g_strdup_printf(buf, tmp); - - g_free(tmp); - } -#else if(tmp) { g_strdelimit(tmp, "\n", ' '); purple_str_strip_char(tmp, '\r'); } statustext = tmp; -#endif } if(!purple_presence_is_online(presence) && !statustext) @@ -4671,11 +4600,9 @@ const char *id; pidgin_blist_sort_method_reg("none", _("Manually"), sort_method_none); -#if GTK_CHECK_VERSION(2,2,1) pidgin_blist_sort_method_reg("alphabetical", _("Alphabetically"), sort_method_alphabetical); pidgin_blist_sort_method_reg("status", _("By status"), sort_method_status); pidgin_blist_sort_method_reg("log_size", _("By recent log activity"), sort_method_log_activity); -#endif id = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/blist/sort_type"); if (id == NULL) { @@ -4699,9 +4626,7 @@ } redo_buddy_list(purple_get_blist(), FALSE, FALSE); -#if GTK_CHECK_VERSION(2,6,0) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview)); -#endif if (node) { @@ -4737,11 +4662,7 @@ /* this is far too ugly thanks to me not wanting to fix #3989 properly right now */ if (priv->error_scrollbook != NULL) { -#if GTK_CHECK_VERSION(2,2,0) errors = gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->error_scrollbook->notebook)); -#else - errors = g_list_length(GTK_NOTEBOOK(priv->error_scrollbook->notebook)->children); -#endif } if ((list = purple_accounts_get_all_active()) != NULL || errors) { gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkblist->notebook), 1); @@ -4818,23 +4739,11 @@ gdk_window_set_cursor(widget->window, gtkblist->hand_cursor); if (gtkblist->headline_close) { -#if GTK_CHECK_VERSION(2,2,0) gdk_draw_pixbuf(widget->window, NULL, gtkblist->headline_close, -#else - gdk_pixbuf_render_to_drawable(gtkblist->headline_close, - GDK_DRAWABLE(widget->window), NULL, -#endif 0, 0, widget->allocation.width - 2 - HEADLINE_CLOSE_SIZE, 2, HEADLINE_CLOSE_SIZE, HEADLINE_CLOSE_SIZE, GDK_RGB_DITHER_NONE, 0, 0); -#if 0 - /* The presence of one opening paren in each branch of - * GTK_CHECK_VERSION confuses vim's bracket matching for the - * rest of the file. - */ - ) -#endif gtk_paint_focus(widget->style, widget->window, GTK_STATE_PRELIGHT, NULL, widget, NULL, widget->allocation.width - HEADLINE_CLOSE_SIZE - 3, 1, @@ -5193,9 +5102,7 @@ gtk_label_set_markup(GTK_LABEL(label), markup); g_free(markup); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); -#if GTK_CHECK_VERSION(2,6,0) g_object_set(G_OBJECT(label), "ellipsize", PANGO_ELLIPSIZE_END, NULL); -#endif #if GTK_CHECK_VERSION(2,12,0) { /* avoid unused variable warnings on pre-2.12 Gtk */ char *description = @@ -5398,12 +5305,7 @@ return; tooltips = gtk_tooltips_new (); -#if GLIB_CHECK_VERSION(2,10,0) g_object_ref_sink (tooltips); -#else - g_object_ref(tooltips); - gtk_object_sink(GTK_OBJECT(tooltips)); -#endif gtk_tooltips_force_window (tooltips); #if GTK_CHECK_VERSION(2, 12, 0) @@ -5511,10 +5413,8 @@ gtk_tree_view_column_set_attributes(column, rend, "visible", GROUP_EXPANDER_VISIBLE_COLUMN, "expander-visible", GROUP_EXPANDER_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "sensitive", GROUP_EXPANDER_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, -#endif NULL); /* contact */ @@ -5523,10 +5423,8 @@ gtk_tree_view_column_set_attributes(column, rend, "visible", CONTACT_EXPANDER_VISIBLE_COLUMN, "expander-visible", CONTACT_EXPANDER_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "sensitive", CONTACT_EXPANDER_COLUMN, "cell-background-gdk", BGCOLOR_COLUMN, -#endif NULL); for (i = 0; i < 5; i++) { @@ -5538,9 +5436,7 @@ gtk_tree_view_column_set_attributes(column, rend, "pixbuf", STATUS_ICON_COLUMN, "visible", STATUS_ICON_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif NULL); g_object_set(rend, "xalign", 0.0, "xpad", 6, "ypad", 0, NULL); @@ -5549,20 +5445,14 @@ gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(column, rend, TRUE); gtk_tree_view_column_set_attributes(column, rend, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif "markup", NAME_COLUMN, NULL); -#if GTK_CHECK_VERSION(2,6,0) g_signal_connect(G_OBJECT(rend), "editing-started", G_CALLBACK(gtk_blist_renderer_editing_started_cb), NULL); g_signal_connect(G_OBJECT(rend), "editing-canceled", G_CALLBACK(gtk_blist_renderer_editing_cancelled_cb), list); -#endif g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), list); g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); -#if GTK_CHECK_VERSION(2,6,0) g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); -#endif /* idle */ rend = gtk_cell_renderer_text_new(); @@ -5571,9 +5461,7 @@ gtk_tree_view_column_set_attributes(column, rend, "markup", IDLE_COLUMN, "visible", IDLE_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif NULL); } else if (emblem == i) { /* emblem */ @@ -5581,9 +5469,7 @@ g_object_set(rend, "xalign", 1.0, "yalign", 0.5, "ypad", 0, "xpad", 3, NULL); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "pixbuf", EMBLEM_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif "visible", EMBLEM_VISIBLE_COLUMN, NULL); } else if (protocol_icon == i) { @@ -5593,9 +5479,7 @@ gtk_tree_view_column_set_attributes(column, rend, "pixbuf", PROTOCOL_ICON_COLUMN, "visible", PROTOCOL_ICON_VISIBLE_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif NULL); g_object_set(rend, "xalign", 0.0, "xpad", 3, "ypad", 0, NULL); @@ -5605,9 +5489,7 @@ g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); gtk_tree_view_column_pack_start(column, rend, FALSE); gtk_tree_view_column_set_attributes(column, rend, "pixbuf", BUDDY_ICON_COLUMN, -#if GTK_CHECK_VERSION(2,6,0) "cell-background-gdk", BGCOLOR_COLUMN, -#endif "visible", BUDDY_ICON_VISIBLE_COLUMN, NULL); } @@ -6794,9 +6676,6 @@ return; } -#if !GTK_CHECK_VERSION(2,6,0) - gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview)); -#endif } static void pidgin_blist_destroy(PurpleBuddyList *list) @@ -7595,8 +7474,6 @@ sibling ? &sibling_iter : NULL); } -#if GTK_CHECK_VERSION(2,2,1) - static void sort_method_alphabetical(PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) { GtkTreeIter more_z; @@ -7840,8 +7717,6 @@ } } -#endif - static void plugin_act(GtkObject *obj, PurplePluginAction *pam) {