--- evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.glade.code-cleanup 2007-01-03 09:56:26.000000000 -0500 +++ evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.glade 2007-08-01 13:28:00.000000000 -0400 @@ -118,7 +118,10 @@ 0.5 0 0 - optionmenu-category + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -127,23 +130,7 @@ 2 fill - - - - - - True - True - 0 - - - 1 - 2 - 1 - 2 - fill - fill - + @@ -229,6 +216,23 @@ fill + + + + True + Any Category + False + True + + + 1 + 2 + 1 + 2 + fill + fill + + 0 --- evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-list.c.code-cleanup 2007-07-31 16:14:53.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-list.c 2007-08-01 13:28:00.000000000 -0400 @@ -447,7 +447,7 @@ enl_tree_button_press_event (GtkWidget * if (len > 1) { menu_item = gtk_radio_menu_item_new_with_label (group, email); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item)); g_signal_connect (menu_item, "toggled", G_CALLBACK (destination_set_email), destination); } else { menu_item = gtk_menu_item_new_with_label (email); --- evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-entry.c.code-cleanup 2007-07-31 16:14:53.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-entry.c 2007-08-01 13:28:00.000000000 -0400 @@ -2204,7 +2204,7 @@ populate_popup (ENameSelectorEntry *name if (len > 1) { menu_item = gtk_radio_menu_item_new_with_label (group, email); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menu_item)); + group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item)); g_signal_connect (menu_item, "toggled", G_CALLBACK (destination_set_email), destination); } else { menu_item = gtk_menu_item_new_with_label (email); --- evolution-data-server-1.11.6.1/libedataserverui/test-source-option-menu.c.code-cleanup 2007-01-03 09:56:25.000000000 -0500 +++ evolution-data-server-1.11.6.1/libedataserverui/test-source-option-menu.c 2007-08-01 13:28:00.000000000 -0400 @@ -1,5 +1,5 @@ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* test-source-option-menu.c - Test for ESourceOptionMenu. +/* test-source-combo-box.c - Test for ESourceComboBox. * * Copyright (C) 2003 Novell, Inc. * @@ -24,17 +24,17 @@ #include #endif - -#include "e-source-option-menu.h" +#include "e-source-combo-box.h" #include #include static void -source_selected_callback (ESourceOptionMenu *menu, - ESource *source, - void *unused_data) +source_changed_cb (ESourceComboBox *combo_box) { + ESource *source; + + source = e_source_combo_box_get_active (combo_box); g_print ("source selected: \"%s\"\n", e_source_peek_name (source)); } @@ -43,7 +43,7 @@ static int on_idle_create_widget (const char *gconf_path) { GtkWidget *window; - GtkWidget *option_menu; + GtkWidget *combo_box; ESourceList *source_list; GConfClient *gconf_client; @@ -51,10 +51,12 @@ on_idle_create_widget (const char *gconf source_list = e_source_list_new_for_gconf (gconf_client, gconf_path); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - option_menu = e_source_option_menu_new (source_list); - g_signal_connect (option_menu, "source_selected", G_CALLBACK (source_selected_callback), NULL); + combo_box = e_source_combo_box_new (source_list); + g_signal_connect ( + combo_box, "changed", + G_CALLBACK (source_changed_cb), NULL); - gtk_container_add (GTK_CONTAINER (window), option_menu); + gtk_container_add (GTK_CONTAINER (window), combo_box); gtk_widget_show_all (window); g_object_unref (gconf_client); --- evolution-data-server-1.11.6.1/libedataserverui/e-source-option-menu.h.code-cleanup 2007-07-31 16:14:53.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-source-option-menu.h 2007-08-01 13:28:00.000000000 -0400 @@ -23,6 +23,8 @@ #ifndef _E_SOURCE_OPTION_MENU_H_ #define _E_SOURCE_OPTION_MENU_H_ +#ifndef EDS_DISABLE_DEPRECATED + #include "libedataserver/e-source-list.h" #include @@ -60,5 +62,6 @@ ESource *e_source_option_menu_peek_selec void e_source_option_menu_select (ESourceOptionMenu *menu, ESource *source); +#endif /* EDS_DISABLE_DEPRECATED */ #endif /* _E_SOURCE_OPTION_MENU_H_ */ --- /dev/null 2007-07-31 17:57:56.110944649 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-source-combo-box.h 2007-08-01 13:28:00.000000000 -0400 @@ -0,0 +1,79 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ +/* e-source-combo-box.h + * + * Copyright (C) 2007 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _E_SOURCE_COMBO_BOX_H_ +#define _E_SOURCE_COMBO_BOX_H_ + +#include +#include + +#define E_TYPE_SOURCE_COMBO_BOX \ + (e_source_combo_box_get_type ()) +#define E_SOURCE_COMBO_BOX(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST \ + ((obj), E_TYPE_SOURCE_COMBO_BOX, ESourceComboBox)) +#define E_SOURCE_COMBO_BOX_CLASS(cls) \ + (G_TYPE_CHECK_CLASS_CAST \ + ((cls), E_TYPE_SOURCE_COMBO_BOX, ESourceComboBoxClass)) +#define E_IS_SOURCE_COMBO_BOX(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_SOURCE_COMBO_BOX)) +#define E_IS_SOURCE_COMBO_BOX_CLASS(cls) \ + (G_TYPE_CHECK_CLASS_TYPE ((cls), E_TYPE_SOURCE_COMBO_BOX)) +#define E_SOURCE_COMBO_BOX_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS \ + ((obj), E_TYPE_SOURCE_COMBO_BOX, ESourceComboBox)) + +G_BEGIN_DECLS + +typedef struct _ESourceComboBox ESourceComboBox; +typedef struct _ESourceComboBoxClass ESourceComboBoxClass; +typedef struct _ESourceComboBoxPrivate ESourceComboBoxPrivate; + +struct _ESourceComboBox { + GtkComboBox parent; + + ESourceComboBoxPrivate *priv; +}; + +struct _ESourceComboBoxClass { + GtkComboBoxClass parent_class; +}; + +GType e_source_combo_box_get_type (void); +GtkWidget * e_source_combo_box_new (ESourceList *source_list); +ESourceList * e_source_combo_box_get_source_list + (ESourceComboBox *source_combo_box); +void e_source_combo_box_set_source_list + (ESourceComboBox *source_combo_box, + ESourceList *source_list); +ESource * e_source_combo_box_get_active + (ESourceComboBox *source_combo_box); +void e_source_combo_box_set_active + (ESourceComboBox *source_combo_box, + ESource *source); +const gchar * e_source_combo_box_get_active_uid + (ESourceComboBox *source_combo_box); +void e_source_combo_box_set_active_uid + (ESourceComboBox *source_combo_box, + const gchar *uid); + +G_END_DECLS + +#endif /* _E_SOURCE_COMBO_BOX_H_ */ --- evolution-data-server-1.11.6.1/libedataserverui/Makefile.in.code-cleanup 2007-07-31 18:18:45.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/Makefile.in 2007-08-01 13:28:50.000000000 -0400 @@ -73,8 +73,8 @@ am_libedataserverui_1_2_la_OBJECTS = $(a e-name-selector-dialog.lo e-name-selector-entry.lo \ e-name-selector-model.lo e-name-selector-list.lo \ e-passwords.lo e-source-selector.lo \ - e-source-selector-dialog.lo e-source-option-menu.lo \ - e-tree-model-generator.lo + e-source-selector-dialog.lo e-source-combo-box.lo \ + e-source-option-menu.lo e-tree-model-generator.lo libedataserverui_1_2_la_OBJECTS = \ $(am_libedataserverui_1_2_la_OBJECTS) libedataserverui_1_2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -321,6 +321,7 @@ PTHREAD_LIB = @PTHREAD_LIB@ PURIFY = @PURIFY@ RANLIB = @RANLIB@ REGEX_LIBS = @REGEX_LIBS@ +SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ @@ -332,7 +333,6 @@ THREADS_CFLAGS = @THREADS_CFLAGS@ THREADS_LIBS = @THREADS_LIBS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ -WARN_CFLAGS = @WARN_CFLAGS@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ YFLAGS = @YFLAGS@ @@ -424,6 +424,7 @@ libedataserverui_1_2_la_SOURCES = \ e-passwords.c \ e-source-selector.c \ e-source-selector-dialog.c \ + e-source-combo-box.c \ e-source-option-menu.c \ e-tree-model-generator.c @@ -449,6 +450,7 @@ libedataserveruiinclude_HEADERS = \ e-passwords.h \ e-source-selector.h \ e-source-selector-dialog.h \ + e-source-combo-box.h \ e-source-option-menu.h \ e-tree-model-generator.h @@ -587,6 +589,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-name-selector-model.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-name-selector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-passwords.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-source-combo-box.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-source-option-menu.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-source-selector-dialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-source-selector.Plo@am__quote@ --- evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.h.code-cleanup 2007-04-17 12:13:05.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.h 2007-08-01 13:28:00.000000000 -0400 @@ -58,7 +58,6 @@ struct _ENameSelectorDialog { /* Private */ EBook *pending_book; - ESourceList *source_list; ENameSelectorModel *name_selector_model; GtkTreeModelSort *contact_sort; --- evolution-data-server-1.11.6.1/libedataserverui/Makefile.am.code-cleanup 2007-07-30 09:58:51.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/Makefile.am 2007-08-01 13:28:00.000000000 -0400 @@ -31,6 +31,7 @@ libedataserverui_1_2_la_SOURCES = \ e-passwords.c \ e-source-selector.c \ e-source-selector-dialog.c \ + e-source-combo-box.c \ e-source-option-menu.c \ e-tree-model-generator.c @@ -57,6 +58,7 @@ libedataserveruiinclude_HEADERS = \ e-passwords.h \ e-source-selector.h \ e-source-selector-dialog.h \ + e-source-combo-box.h \ e-source-option-menu.h \ e-tree-model-generator.h --- evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.c.code-cleanup 2007-07-31 16:14:53.000000000 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-name-selector-dialog.c 2007-08-01 13:28:00.000000000 -0400 @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include #include #include @@ -64,9 +64,8 @@ struct _ENameSelectorDialogPrivate guint destination_index; }; -static ESource *find_first_source (ESourceList *source_list); static void search_changed (ENameSelectorDialog *name_selector_dialog); -static void source_selected (ENameSelectorDialog *name_selector_dialog, ESource *source); +static void source_changed (ENameSelectorDialog *name_selector_dialog, ESourceComboBox *source_combo_box); static void transfer_button_clicked (ENameSelectorDialog *name_selector_dialog, GtkButton *transfer_button); static void contact_selection_changed (ENameSelectorDialog *name_selector_dialog); static void setup_name_selector_model (ENameSelectorDialog *name_selector_dialog); @@ -106,33 +105,28 @@ e_name_selector_dialog_set_property (GOb { } -/* FIXME: category_list should become part of ENameSelectorDialog structure */ -GList *category_list; - static void e_name_selector_dialog_populate_categories (ENameSelectorDialog *name_selector_dialog) { - GtkWidget *category_option_menu; - GtkWidget *category_menu; - GList *l; - category_option_menu = glade_xml_get_widget (name_selector_dialog->gui, "optionmenu-category"); + GtkWidget *combo_box; + GList *category_list, *iter; - /* Categories are already sorted */ - category_list = e_categories_get_list () ; - category_list = g_list_prepend (category_list, _("Any Category")); - - category_menu = gtk_menu_new (); - l = category_list; - while (l) { - GtkWidget *item; - item = gtk_menu_item_new_with_label (l->data); - gtk_menu_shell_append (GTK_MENU_SHELL (category_menu), item); - l = l->next; - } - gtk_widget_show_all (category_menu); - gtk_option_menu_set_menu (GTK_OPTION_MENU (category_option_menu), category_menu); - - g_signal_connect_swapped (category_option_menu, "changed", G_CALLBACK (search_changed), name_selector_dialog); + /* "Any Category" is preloaded. */ + combo_box = glade_xml_get_widget ( + name_selector_dialog->gui, "combobox-category"); + if (gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box)) == -1) + gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0); + + /* Categories are already sorted. */ + category_list = e_categories_get_list (); + for (iter = category_list; iter != NULL; iter = iter->next) + gtk_combo_box_append_text ( + GTK_COMBO_BOX (combo_box), iter->data); + g_list_free (category_list); + + g_signal_connect_swapped ( + combo_box, "changed", + G_CALLBACK (search_changed), name_selector_dialog); } static void @@ -223,34 +217,26 @@ e_name_selector_dialog_init (ENameSelect name_selector_dialog->name_selector_model = e_name_selector_model_new (); name_selector_dialog->sections = g_array_new (FALSE, FALSE, sizeof (Section)); - name_selector_dialog->source_list = source_list; setup_name_selector_model (name_selector_dialog); /* Create source menu */ - widget = e_source_option_menu_new (name_selector_dialog->source_list); - + widget = e_source_combo_box_new (source_list); + g_signal_connect_swapped ( + widget, "changed", + G_CALLBACK (source_changed), name_selector_dialog); + g_object_unref (source_list); + gconf_client = gconf_client_get_default(); uid = gconf_client_get_string (gconf_client, "/apps/evolution/addressbook/display/primary_addressbook", NULL); g_object_unref (gconf_client); if (uid) { - ESource *source = e_source_list_peek_source_by_uid(name_selector_dialog->source_list, uid); - if (source) { - e_source_option_menu_select ((ESourceOptionMenu *)widget, source); - source_selected (name_selector_dialog, source); - } - else { - source_selected (name_selector_dialog, find_first_source (name_selector_dialog->source_list)); - } + e_source_combo_box_set_active_uid ( + E_SOURCE_COMBO_BOX (widget), uid); g_free (uid); } - else { - source_selected (name_selector_dialog, find_first_source (name_selector_dialog->source_list)); - } - - g_signal_connect_swapped (widget, "source_selected", G_CALLBACK (source_selected), name_selector_dialog); label = glade_xml_get_widget (name_selector_dialog->gui, "AddressBookLabel"); gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget); @@ -308,9 +294,7 @@ e_name_selector_dialog_finalize (GObject ENameSelectorDialog *name_selector_dialog = E_NAME_SELECTOR_DIALOG (object); g_array_free (name_selector_dialog->sections, TRUE); - g_object_unref (name_selector_dialog->source_list); g_object_unref (name_selector_dialog->button_size_group); - g_list_free (category_list); if (G_OBJECT_CLASS (e_name_selector_dialog_parent_class)->finalize) G_OBJECT_CLASS (e_name_selector_dialog_parent_class)->finalize (object); @@ -384,26 +368,6 @@ sort_iter_to_contact_store_iter (ENameSe *email_n = email_n_local; } -static ESource * -find_first_source (ESourceList *source_list) -{ - GSList *groups, *sources, *l, *m; - - groups = e_source_list_peek_groups (source_list); - for (l = groups; l; l = l->next) { - ESourceGroup *group = l->data; - - sources = e_source_group_peek_sources (group); - for (m = sources; m; m = m->next) { - ESource *source = m->data; - - return source; - } - } - - return NULL; -} - static void add_destination (EDestinationStore *destination_store, EContact *contact, gint email_n) { @@ -742,8 +706,13 @@ book_opened (EBook *book, EBookStatus st } static void -source_selected (ENameSelectorDialog *name_selector_dialog, ESource *source) +source_changed (ENameSelectorDialog *name_selector_dialog, + ESourceComboBox *source_combo_box) { + ESource *source; + + source = e_source_combo_box_get_active (source_combo_box); + /* Remove any previous books being shown or loaded */ remove_books (name_selector_dialog); @@ -761,49 +730,54 @@ search_changed (ENameSelectorDialog *nam { EContactStore *contact_store; EBookQuery *book_query; - GtkWidget *category_option_menu; + GtkWidget *combo_box; const gchar *text; - gint category_id; gchar *text_escaped; gchar *query_string; - const gchar *category; + gchar *category; gchar *category_escaped; - category_option_menu = glade_xml_get_widget(name_selector_dialog->gui, "optionmenu-category"); - category_id = gtk_option_menu_get_history (GTK_OPTION_MENU(category_option_menu)); - category = g_list_nth_data (category_list, category_id); - if (!category) - return; + combo_box = glade_xml_get_widget ( + name_selector_dialog->gui, "combobox-category"); + if (gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box)) == -1) + gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0); + + category = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo_box)); category_escaped = escape_sexp_string (category); text = gtk_entry_get_text (name_selector_dialog->search_entry); text_escaped = escape_sexp_string (text); - if ( !strcmp (category, _("Any Category"))) { - query_string = g_strdup_printf ("(or (beginswith \"file_as\" %s) " - " (beginswith \"full_name\" %s) " - " (beginswith \"email\" %s) " - " (beginswith \"nickname\" %s)))", - text_escaped, text_escaped, text_escaped, text_escaped); - } - else { - query_string = g_strdup_printf ("(and (is \"category_list\" %s) " - "(or (beginswith \"file_as\" %s) " - " (beginswith \"full_name\" %s) " - " (beginswith \"email\" %s) " - " (beginswith \"nickname\" %s)))", - category_escaped,text_escaped, text_escaped, text_escaped, text_escaped); - } + if (!strcmp (category, _("Any Category"))) + query_string = g_strdup_printf ( + "(or (beginswith \"file_as\" %s) " + " (beginswith \"full_name\" %s) " + " (beginswith \"email\" %s) " + " (beginswith \"nickname\" %s)))", + text_escaped, text_escaped, + text_escaped, text_escaped); + else + query_string = g_strdup_printf ( + "(and (is \"category_list\" %s) " + "(or (beginswith \"file_as\" %s) " + " (beginswith \"full_name\" %s) " + " (beginswith \"email\" %s) " + " (beginswith \"nickname\" %s)))", + category_escaped, text_escaped, text_escaped, + text_escaped, text_escaped); book_query = e_book_query_from_string (query_string); - g_free (query_string); - g_free (text_escaped); - g_free (category_escaped); - contact_store = e_name_selector_model_peek_contact_store (name_selector_dialog->name_selector_model); + contact_store = e_name_selector_model_peek_contact_store ( + name_selector_dialog->name_selector_model); e_contact_store_set_query (contact_store, book_query); e_book_query_unref (book_query); + + g_free (query_string); + g_free (text_escaped); + g_free (category_escaped); + g_free (category); } static void --- /dev/null 2007-07-31 17:57:56.110944649 -0400 +++ evolution-data-server-1.11.6.1/libedataserverui/e-source-combo-box.c 2007-08-01 13:28:00.000000000 -0400 @@ -0,0 +1,457 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ +/* e-source-option-menu.c + * + * Copyright (C) 2007 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "e-source-combo-box.h" + +#define E_SOURCE_COMBO_BOX_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_SOURCE_COMBO_BOX, ESourceComboBoxPrivate)) + +struct _ESourceComboBoxPrivate { + ESourceList *source_list; + GHashTable *uid_to_row_reference; + gulong handler_id; +}; + +enum { + PROP_0, + PROP_SOURCE_LIST +}; + +enum { + COLUMN_NAME, /* G_TYPE_STRING */ + COLUMN_SENSITIVE, /* G_TYPE_BOOLEAN */ + COLUMN_SOURCE, /* G_TYPE_OBJECT */ + NUM_COLUMNS +}; + +static gpointer parent_class = NULL; + +static void +source_list_changed_cb (ESourceList *source_list, + ESourceComboBox *source_combo_box) +{ + ESourceComboBoxPrivate *priv; + GtkComboBox *combo_box; + GtkTreeModel *model; + GtkListStore *store; + GtkTreeIter iter; + GtkTreePath *path; + GSList *groups; + GSList *sources; + const gchar *name; + const gchar *uid; + gchar *indented_name; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (source_combo_box); + g_hash_table_remove_all (priv->uid_to_row_reference); + + combo_box = GTK_COMBO_BOX (source_combo_box); + gtk_combo_box_set_active (combo_box, -1); + + model = gtk_combo_box_get_model (combo_box); + store = GTK_LIST_STORE (model); + gtk_list_store_clear (store); + + for (groups = e_source_list_peek_groups (source_list); + groups != NULL; groups = groups->next) { + + /* Only show source groups that have sources. */ + if (e_source_group_peek_sources (groups->data) == NULL) + continue; + + name = e_source_group_peek_name (groups->data); + gtk_list_store_append (store, &iter); + gtk_list_store_set ( + store, &iter, + COLUMN_NAME, name, + COLUMN_SENSITIVE, FALSE, + COLUMN_SOURCE, groups->data, + -1); + + for (sources = e_source_group_peek_sources (groups->data); + sources != NULL; sources = sources->next) { + + name = e_source_peek_name (sources->data); + indented_name = g_strconcat (" ", name, NULL); + gtk_list_store_append (store, &iter); + gtk_list_store_set ( + store, &iter, + COLUMN_NAME, indented_name, + COLUMN_SENSITIVE, TRUE, + COLUMN_SOURCE, sources->data, + -1); + g_free (indented_name); + + uid = e_source_peek_uid (sources->data); + path = gtk_tree_model_get_path (model, &iter); + g_hash_table_insert ( + priv->uid_to_row_reference, g_strdup (uid), + gtk_tree_row_reference_new (model, path)); + gtk_tree_path_free (path); + } + } +} + +static GObject * +e_source_combo_box_constructor (GType type, guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + GtkCellRenderer *renderer; + GtkListStore *store; + GObject *object; + + /* Chain up to parent's "constructor" method. */ + object = G_OBJECT_CLASS (parent_class)->constructor ( + type, n_construct_properties, construct_properties); + + store = gtk_list_store_new ( + NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_OBJECT); + gtk_combo_box_set_model ( + GTK_COMBO_BOX (object), GTK_TREE_MODEL (store)); + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start ( + GTK_CELL_LAYOUT (object), renderer, TRUE); + gtk_cell_layout_set_attributes ( + GTK_CELL_LAYOUT (object), renderer, + "text", COLUMN_NAME, + "sensitive", COLUMN_SENSITIVE, + NULL); + + return object; +} + +static void +e_source_combo_box_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + ESourceComboBoxPrivate *priv; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (object); + + switch (property_id) { + case PROP_SOURCE_LIST: + + if (priv->source_list != NULL) { + g_signal_handler_disconnect ( + priv->source_list, priv->handler_id); + g_object_unref (priv->source_list); + } + + priv->source_list = g_value_dup_object (value); + + /* Reset the tree store. */ + source_list_changed_cb ( + priv->source_list, + E_SOURCE_COMBO_BOX (object)); + + /* Watch for source list changes. */ + priv->handler_id = g_signal_connect_object ( + priv->source_list, "changed", + G_CALLBACK (source_list_changed_cb), + object, 0); + + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +e_source_combo_box_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + ESourceComboBoxPrivate *priv; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (object); + + switch (property_id) { + case PROP_SOURCE_LIST: + g_value_set_object (value, priv->source_list); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +e_source_combo_box_dispose (GObject *object) +{ + ESourceComboBoxPrivate *priv; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (object); + + if (priv->source_list != NULL) { + g_object_unref (priv->source_list); + priv->source_list = NULL; + } + + g_hash_table_remove_all (priv->uid_to_row_reference); + + /* Chain up to parent's "dispose" method. */ + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +e_source_combo_box_finalize (GObject *object) +{ + ESourceComboBoxPrivate *priv; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (object); + + g_hash_table_destroy (priv->uid_to_row_reference); + + /* Chain up to parent's "finalize" method. */ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +e_source_combo_box_class_init (ESourceComboBoxClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + + parent_class = g_type_class_peek_parent (class); + + g_type_class_add_private (class, sizeof (ESourceComboBox)); + + object_class->constructor = e_source_combo_box_constructor; + object_class->set_property = e_source_combo_box_set_property; + object_class->get_property = e_source_combo_box_get_property; + object_class->dispose = e_source_combo_box_dispose; + object_class->finalize = e_source_combo_box_finalize; + + g_object_class_install_property ( + object_class, + PROP_SOURCE_LIST, + g_param_spec_object ( + "source-list", + "source-list", + "List of sources to choose from", + E_TYPE_SOURCE_LIST, + G_PARAM_READWRITE)); +} + +static void +e_source_combo_box_init (ESourceComboBox *source_combo_box) +{ + ESourceComboBoxPrivate *priv; + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (source_combo_box); + + priv->uid_to_row_reference = g_hash_table_new_full ( + g_str_hash, g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) gtk_tree_row_reference_free); +} + +GType +e_source_combo_box_get_type (void) +{ + static GType type = 0; + + if (G_UNLIKELY (type == 0)) { + static const GTypeInfo type_info = { + sizeof (ESourceComboBoxClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) e_source_combo_box_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + sizeof (ESourceComboBox), + 0, /* n_preallocs */ + (GInstanceInitFunc) e_source_combo_box_init, + NULL /* value_table */ + }; + + type = g_type_register_static ( + GTK_TYPE_COMBO_BOX, "ESourceComboBox", &type_info, 0); + } + + return type; +} + +/** + * e_source_combo_box_new: + * @source_list: an #ESourceList + * + * Creates a new #ESourceComboBox widget that lets the user pick an #ESource + * from the provided #ESourceList. + * + * Returns: a new #ESourceComboBox + **/ +GtkWidget * +e_source_combo_box_new (ESourceList *source_list) +{ + g_return_val_if_fail (source_list != NULL, NULL); + + return g_object_new ( + E_TYPE_SOURCE_COMBO_BOX, + "source-list", source_list, NULL); +} + +/** + * e_source_combo_box_get_source_list: + * @source_combo_box: an #ESourceComboBox + * + * Returns the #ESourceList which is acting as a data source for + * @source_combo_box. + * + * Returns: an #ESourceList + **/ +ESourceList * +e_source_combo_box_get_source_list (ESourceComboBox *source_combo_box) +{ + ESourceList *source_list; + + g_return_val_if_fail (source_combo_box != NULL, NULL); + + g_object_get (source_combo_box, "source-list", &source_list, NULL); + + return source_list; +} + +/** + * e_source_combo_box_set_source_list: + * @source_combo_box: an #ESourceComboBox + * @source_list: an #ESourceList + * + * Sets the source list used by @source_combo_box to be @source_list. This + * causes the contents of @source_combo_box to be regenerated. + **/ +void +e_source_combo_box_set_source_list (ESourceComboBox *source_combo_box, + ESourceList *source_list) +{ + g_return_if_fail (source_combo_box != NULL); + g_return_if_fail (source_list != NULL); + + g_object_set (source_combo_box, "source-list", source_list, NULL); +} + +/** + * e_source_combo_box_get_active: + * @source_combo_box: an #ESourceComboBox + * + * Returns the #ESource corresponding to the currently active item, or %NULL + * if there is no active item. + * + * Returns: an #ESource or %NULL + **/ +ESource * +e_source_combo_box_get_active (ESourceComboBox *source_combo_box) +{ + GtkComboBox *combo_box; + GtkTreeIter iter; + ESource *source; + + g_return_val_if_fail (source_combo_box != NULL, NULL); + + combo_box = GTK_COMBO_BOX (source_combo_box); + + if (!gtk_combo_box_get_active_iter (combo_box, &iter)) + return NULL; + + gtk_tree_model_get ( + gtk_combo_box_get_model (combo_box), + &iter, COLUMN_SOURCE, &source, -1); + + return source; +} + +/** + * e_source_combo_box_set_active: + * @source_combo_box: an #ESourceComboBox + * @source: an #ESource + * + * Sets the active item to the one corresponding to @source. + **/ +void +e_source_combo_box_set_active (ESourceComboBox *source_combo_box, + ESource *source) +{ + g_return_if_fail (source_combo_box != NULL); + g_return_if_fail (source != NULL); + + e_source_combo_box_set_active_uid ( + source_combo_box, e_source_peek_uid (source)); +} + +/** + * e_source_combo_box_get_active_uid: + * @source_combo_box: an #ESourceComboBox + * + * Returns the unique ID of the #ESource corresponding to the currently + * active item, or %NULL if there is no active item. + * + * Returns: a unique ID string or %NULL + **/ +const gchar * +e_source_combo_box_get_active_uid (ESourceComboBox *source_combo_box) +{ + ESource *source; + + g_return_val_if_fail (source_combo_box != NULL, NULL); + + source = e_source_combo_box_get_active (source_combo_box); + if (source == NULL) + return NULL; + + return e_source_peek_uid (source); +} + +/** + * e_source_combo_box_set_active_uid: + * @source_combo_box: an #ESourceComboBox + * @uid: a unique ID of an #ESource + * + * Sets the active item to the one corresponding to @uid. + **/ +void +e_source_combo_box_set_active_uid (ESourceComboBox *source_combo_box, + const gchar *uid) +{ + ESourceComboBoxPrivate *priv; + GtkTreeRowReference *reference; + GtkComboBox *combo_box; + GtkTreeIter iter; + gboolean iter_was_set; + + g_return_if_fail (source_combo_box != NULL); + g_return_if_fail (uid != NULL); + + priv = E_SOURCE_COMBO_BOX_GET_PRIVATE (source_combo_box); + + combo_box = GTK_COMBO_BOX (source_combo_box); + + reference = g_hash_table_lookup (priv->uid_to_row_reference, uid); + g_return_if_fail (gtk_tree_row_reference_valid (reference)); + + iter_was_set = gtk_tree_model_get_iter ( + gtk_combo_box_get_model (combo_box), &iter, + gtk_tree_row_reference_get_path (reference)); + g_return_if_fail (iter_was_set); + + gtk_combo_box_set_active_iter (combo_box, &iter); +} --- evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui-docs.sgml.code-cleanup 2007-07-30 10:25:09.000000000 -0400 +++ evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui-docs.sgml 2007-08-01 13:28:00.000000000 -0400 @@ -19,6 +19,7 @@ + --- evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui.types.code-cleanup 2007-07-30 10:25:09.000000000 -0400 +++ evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui.types 2007-08-01 13:28:00.000000000 -0400 @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -19,6 +20,7 @@ e_name_selector_dialog_get_type e_name_selector_entry_get_type e_name_selector_list_get_type e_name_selector_model_get_type +e_source_combo_box_get_type e_source_option_menu_get_type e_source_selector_get_type e_source_selector_dialog_get_type --- evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui-sections.txt.code-cleanup 2007-07-30 10:25:09.000000000 -0400 +++ evolution-data-server-1.11.6.1/docs/reference/libedataserverui/libedataserverui-sections.txt 2007-08-01 13:28:00.000000000 -0400 @@ -25,6 +25,29 @@ e_tree_model_generator_get_type
+e-source-combo-box +ESourceComboBox +ESourceComboBox +e_source_combo_box_new +e_source_combo_box_get_source_list +e_source_combo_box_set_source_list +e_source_combo_box_get_active +e_source_combo_box_set_active +e_source_combo_box_get_active_uid +e_source_combo_box_set_active_uid + +E_SOURCE_COMBO_BOX +E_IS_SOURCE_COMBO_BOX +E_TYPE_SOURCE_COMBO_BOX +E_SOURCE_COMBO_BOX_CLASS +E_IS_SOURCE_COMBO_BOX_CLASS +E_SOURCE_COMBO_BOX_GET_CLASS +ESourceComboBoxClass + +e_source_combo_box_get_type +
+ +
e-source-option-menu ESourceOptionMenu ESourceOptionMenu --- evolution-data-server-1.11.6.1/calendar/libical/src/libicalss/icalssyacc.c.code-cleanup 2007-01-22 12:33:48.000000000 -0500 +++ evolution-data-server-1.11.6.1/calendar/libical/src/libicalss/icalssyacc.c 2007-08-01 13:28:00.000000000 -0400 @@ -160,6 +160,7 @@ static void ssyacc_add_select(struct ica static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1); static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l); void sserror(char *s); /* Don't know why I need this.... */ +int sslex(void *YYPARSE_PARAM); --- evolution-data-server-1.11.6.1/calendar/libical/src/libicalss/icalssyacc.y.code-cleanup 2007-01-22 12:29:24.000000000 -0500 +++ evolution-data-server-1.11.6.1/calendar/libical/src/libicalss/icalssyacc.y 2007-08-01 13:28:00.000000000 -0400 @@ -47,6 +47,7 @@ static void ssyacc_add_select(struct ica static void ssyacc_add_from(struct icalgauge_impl* impl, char* str1); static void set_logic(struct icalgauge_impl* impl,icalgaugelogic l); void sserror(char *s); /* Don't know why I need this.... */ +int sslex(void *YYPARSE_PARAM); %} --- evolution-data-server-1.11.6.1/calendar/libical/src/libicalvcal/vcc.c.code-cleanup 2007-08-01 14:10:25.000000000 -0400 +++ evolution-data-server-1.11.6.1/calendar/libical/src/libicalvcal/vcc.c 2007-08-01 14:11:02.000000000 -0400 @@ -273,6 +273,7 @@ static void enterProps(const char *s); static void enterAttr(const char *s1, const char *s2); static void enterValues(const char *value); static void mime_error_(char *s); +static int mime_lex(void); --- evolution-data-server-1.11.6.1/calendar/libical/src/libicalvcal/vcc.y.code-cleanup 2007-01-22 12:29:26.000000000 -0500 +++ evolution-data-server-1.11.6.1/calendar/libical/src/libicalvcal/vcc.y 2007-08-01 13:28:00.000000000 -0400 @@ -170,6 +170,7 @@ static void enterProps(const char *s); static void enterAttr(const char *s1, const char *s2); static void enterValues(const char *value); static void mime_error_(char *s); +static int mime_lex(void); %}