Mercurial > pidgin.yaz
diff plugins/gevolution/add_buddy_dialog.c @ 10081:ff4be2d1401d
[gaim-migrate @ 11071]
Merge the gevolution changes back to HEAD.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 06 Oct 2004 03:17:24 +0000 |
parents | c00def44d76a |
children | 692da861f43c |
line wrap: on
line diff
--- a/plugins/gevolution/add_buddy_dialog.c Sun Oct 03 22:59:26 2004 +0000 +++ b/plugins/gevolution/add_buddy_dialog.c Wed Oct 06 03:17:24 2004 +0000 @@ -44,14 +44,17 @@ { gtk_widget_destroy(dialog->win); - g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); - if (dialog->contacts != NULL) + { + g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); g_list_free(dialog->contacts); + } if (dialog->book != NULL) g_object_unref(dialog->book); + gevo_addrbooks_model_unref(dialog->addrbooks); + if (dialog->username != NULL) g_free(dialog->username); @@ -68,7 +71,7 @@ group_name = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(dialog->group_combo)->entry)); - gevo_new_person_dialog_show(NULL, dialog->account, NULL, + gevo_new_person_dialog_show(dialog->book, NULL, dialog->account, NULL, (*group_name ? group_name : NULL), NULL, FALSE); @@ -106,7 +109,7 @@ if (username == NULL || *username == '\0') { - gevo_new_person_dialog_show(NULL, dialog->account, NULL, + gevo_new_person_dialog_show(dialog->book, NULL, dialog->account, NULL, (*group_name ? group_name : NULL), NULL, FALSE); } @@ -119,65 +122,6 @@ } static void -populate_address_books(GevoAddBuddyDialog *dialog) -{ - GtkWidget *item; - GtkWidget *menu; -#if notyet - ESourceList *addressbooks; - GSList *groups, *g; -#endif - - menu = - gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->addressbooks_menu)); - - item = gtk_menu_item_new_with_label(_("Local Addressbook")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - gtk_widget_show(item); - -#if notyet - if (!e_book_get_addressbooks(&addressbooks, NULL)) - { - gaim_debug_error("evolution", - "Unable to fetch list of address books.\n"); - - item = gtk_menu_item_new_with_label(_("None")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - gtk_widget_show(item); - - return; - } - - groups = e_source_list_peek_groups(addressbooks); - - if (groups == NULL) - { - item = gtk_menu_item_new_with_label(_("None")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - gtk_widget_show(item); - - return; - } - - for (g = groups; g != NULL; g = g->next) - { - GSList *sources, *s; - - sources = e_source_group_peek_sources(g->data); - - for (s = sources; s != NULL; s = s->next) - { - ESource *source = E_SOURCE(s->data); - - item = gtk_menu_item_new_with_label(e_source_peek_name(source)); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - gtk_widget_show(item); - } - } -#endif -} - -static void add_columns(GevoAddBuddyDialog *dialog) { GtkCellRenderer *renderer; @@ -288,14 +232,29 @@ } static void -populate_treeview(GevoAddBuddyDialog *dialog) +populate_treeview(GevoAddBuddyDialog *dialog, const gchar *uri) { EBookQuery *query; EBook *book; gboolean status; GList *cards, *c; - if (!gevo_load_addressbook(&book, NULL)) + if (dialog->book != NULL) + { + g_object_unref(dialog->book); + dialog->book = NULL; + } + + if (dialog->contacts != NULL) + { + g_list_foreach(dialog->contacts, (GFunc)g_object_unref, NULL); + g_list_free(dialog->contacts); + dialog->contacts = NULL; + } + + gtk_list_store_clear(dialog->model); + + if (!gevo_load_addressbook(uri, &book, NULL)) { gaim_debug_error("evolution", "Error retrieving default addressbook\n"); @@ -369,6 +328,22 @@ } static void +addrbook_change_cb(GtkComboBox *combo, GevoAddBuddyDialog *dialog) +{ + GtkTreeIter iter; + const char *esource_uri; + + if (!gtk_combo_box_get_active_iter(combo, &iter)) + return; + + gtk_tree_model_get(GTK_TREE_MODEL(dialog->addrbooks), &iter, + ADDRBOOK_COLUMN_URI, &esource_uri, + -1); + + populate_treeview(dialog, esource_uri); +} + +static void selected_cb(GtkTreeSelection *sel, GevoAddBuddyDialog *dialog) { gtk_widget_set_sensitive(dialog->select_button, TRUE); @@ -449,9 +424,9 @@ GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; - GtkWidget *menu; GtkWidget *sep; GtkTreeSelection *selection; + GtkCellRenderer *cell; dialog = g_new0(GevoAddBuddyDialog, 1); @@ -495,17 +470,20 @@ gtk_widget_show(label); /* Addressbooks */ - dialog->addressbooks_menu = gtk_option_menu_new(); - menu = gtk_menu_new(); - gtk_option_menu_set_menu(GTK_OPTION_MENU(dialog->addressbooks_menu), menu); - - populate_address_books(dialog); + dialog->addrbooks = gevo_addrbooks_model_new(); - gtk_option_menu_set_history(GTK_OPTION_MENU(dialog->addressbooks_menu), 0); - - gtk_box_pack_start(GTK_BOX(hbox), dialog->addressbooks_menu, - FALSE, FALSE, 0); - gtk_widget_show(dialog->addressbooks_menu); + dialog->addrbooks_combo = gtk_combo_box_new_with_model( + dialog->addrbooks); + cell = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo), + cell, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo), + cell, + "text", ADDRBOOK_COLUMN_NAME, + NULL); + gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, + FALSE, 0); + gtk_widget_show(dialog->addrbooks_combo); /* Search field */ dialog->search_field = gtk_entry_new(); @@ -554,7 +532,14 @@ add_columns(dialog); - populate_treeview(dialog); + /* + * Catch addressbook selection and populate treeview with the first + * addressbook + */ + gevo_addrbooks_model_populate(dialog->addrbooks); + g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed", + G_CALLBACK(addrbook_change_cb), dialog); + gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0); /* Group box */ hbox = gtk_hbox_new(FALSE, 6);