diff --git a/.gitignore b/.gitignore index 56bb02d..b094b52 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/evolution-*.tar.xz +evolution-2.10.3.tar.bz2 diff --git a/configurable-dbus-prefix.patch b/configurable-dbus-prefix.patch deleted file mode 100644 index be23739..0000000 --- a/configurable-dbus-prefix.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -up evolution-3.48.1 evolution-3.48 -diff -up evolution-3.48.1/docs/evolution.1 evolution-3.48.1/docs/evolution -diff -up evolution-3.48.1/src/modules/backup-restore/evolution-backup-tool.c.1 evolution-3.48.1/src/modules/backup-restore/evolution-backup-tool.c ---- evolution-3.48.1/src/modules/backup-restore/evolution-backup-tool.c.1 2023-11-27 13:12:25.099463743 -0500 -+++ evolution-3.48.1/src/modules/backup-restore/evolution-backup-tool.c 2023-11-27 13:14:38.640243434 -0500 -@@ -674,7 +674,7 @@ get_source_manager_reload_command (void) - g_string_free (tmp, TRUE); - tmp = NULL; - -- base_filename = g_strdup (EDS_SOURCES_DBUS_SERVICE_NAME); -+ base_filename = g_ascii_strdown (EDS_SOURCES_DBUS_SERVICE_NAME, -1); - - if (!base_filename || !*base_filename) { - g_free (base_filename); -@@ -690,14 +690,16 @@ get_source_manager_reload_command (void) - - while (!tmp) { - const gchar *name; -+ gchar *name_down; - - name = g_dir_read_name (dir); -+ name_down = g_ascii_strdown (name, -1); - - if (!name) - break; - -- if (g_ascii_strncasecmp (name, base_filename, base_filename_len) == 0 && -- g_ascii_strncasecmp (name + strlen (name) - 8, ".service", 8) == 0) { -+ if (strstr (name_down, base_filename) != NULL && -+ strncmp (name_down + strlen (name) - 8, ".service", 8) == 0) { - gchar *filename; - - filename = g_strconcat ("$DBUSDATADIR", G_DIR_SEPARATOR_S, name, NULL); -@@ -724,6 +726,8 @@ get_source_manager_reload_command (void) - g_free (str); - } - } -+ -+ g_free (name_down); - } - - g_free (base_filename); diff --git a/evolution-1.4.4-ldap-x86_64-hack.patch b/evolution-1.4.4-ldap-x86_64-hack.patch new file mode 100644 index 0000000..47cafbd --- /dev/null +++ b/evolution-1.4.4-ldap-x86_64-hack.patch @@ -0,0 +1,11 @@ +--- evolution-1.4.4/configure.ldaphack 2003-08-05 02:06:26.000000000 -0400 ++++ evolution-1.4.4/configure 2003-08-05 02:06:45.000000000 -0400 +@@ -12135,7 +12135,7 @@ + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lldap $LDAP_LDFLAGS $LDAP_LIBS $LIBS" ++LIBS="-lldap -lresolv $LDAP_LDFLAGS $LDAP_LIBS $LIBS" + cat >conftest.$ac_ext <<_ACEOF + #line $LINENO "configure" + /* confdefs.h. */ diff --git a/evolution-2.0.2-fix-145552.patch b/evolution-2.0.2-fix-145552.patch new file mode 100644 index 0000000..ad2edf0 --- /dev/null +++ b/evolution-2.0.2-fix-145552.patch @@ -0,0 +1,26 @@ +--- evolution-2.0.2/mail/em-utils.c.fix-145552 2004-09-24 11:49:29.000000000 -0400 ++++ evolution-2.0.2/mail/em-utils.c 2005-08-02 22:42:04.000000000 -0400 +@@ -1919,10 +1919,22 @@ + * try to do better with the filename check. + */ + ++ /* RH bug 145552: code based on _gnome_vfs_get_mime_type_internal: ++ * So many file types come compressed by gzip ++ * that extensions are more reliable than magic ++ * typing. If the file has a suffix, then use ++ * the type from the suffix: ++ */ + if (magic_type) { + if (name_type + && (!strcmp(magic_type, "text/plain") +- || !strcmp(magic_type, "application/octet-stream"))) ++ || !strcmp(magic_type, "application/octet-stream") ++ || !strcmp(magic_type, "application/octet-stream") ++ || !strcmp(magic_type, "application/x-ole-storage") ++ || !strcmp(magic_type, "text/xml") ++ || !strcmp(magic_type, "application/x-bzip") ++ || !strcmp(magic_type, "application/x-gzip") ++ || !strcmp(magic_type, "application/zip"))) + return name_type; + else + return magic_type; diff --git a/evolution-2.10.0-drop-old-glib-support.patch b/evolution-2.10.0-drop-old-glib-support.patch new file mode 100644 index 0000000..2ece0c8 --- /dev/null +++ b/evolution-2.10.0-drop-old-glib-support.patch @@ -0,0 +1,39 @@ +--- evolution-2.10.0/mail/em-utils.c.drop-old-glib-support 2007-03-18 08:17:46.000000000 -0400 ++++ evolution-2.10.0/mail/em-utils.c 2007-03-18 08:24:07.000000000 -0400 +@@ -42,10 +42,6 @@ + #undef interface + #endif + +-#if !GLIB_CHECK_VERSION (2, 8, 0) +-#define g_access access +-#endif +- + #include + #include + #include +--- evolution-2.10.0/mail/mail-config.c.drop-old-glib-support 2007-01-03 10:34:12.000000000 -0500 ++++ evolution-2.10.0/mail/mail-config.c 2007-03-18 08:24:07.000000000 -0400 +@@ -76,10 +76,6 @@ + #include "mail-mt.h" + #include "mail-tools.h" + +-#if !GLIB_CHECK_VERSION (2, 8, 0) +-#define g_creat creat +-#endif +- + /* Note, the first element of each MailConfigLabel must NOT be translated */ + MailConfigLabel label_defaults[5] = { + { "important", N_("I_mportant"), "#ff0000" }, /* red */ +--- evolution-2.10.0/plugins/save-attachments/save-attachments.c.drop-old-glib-support 2007-03-18 08:17:29.000000000 -0400 ++++ evolution-2.10.0/plugins/save-attachments/save-attachments.c 2007-03-18 08:24:07.000000000 -0400 +@@ -32,10 +32,6 @@ + #include + #include + +-#if !GLIB_CHECK_VERSION (2, 8, 0) +-#define g_access access +-#endif +- + #include + #include + #include diff --git a/evolution-2.10.0-e-passwords.patch b/evolution-2.10.0-e-passwords.patch new file mode 100644 index 0000000..8489dee --- /dev/null +++ b/evolution-2.10.0-e-passwords.patch @@ -0,0 +1,31 @@ +--- evolution-2.10.0/mail/mail-session.c.e-passwords 2007-03-12 23:41:06.000000000 -0400 ++++ evolution-2.10.0/mail/mail-session.c 2007-03-12 23:41:35.000000000 -0400 +@@ -679,8 +679,6 @@ + + d(printf ("Gone non-interactive, checking for outstanding interactive tasks\n")); + +- e_passwords_cancel(); +- + /* flush/cancel pending user messages */ + while ((um = (struct _user_message_msg *) e_dlist_remhead (&message_list))) { + d(printf ("Flusing message request: %s\n", um->prompt)); +--- evolution-2.10.0/shell/main.c.e-passwords 2007-03-12 23:39:38.000000000 -0400 ++++ evolution-2.10.0/shell/main.c 2007-03-12 23:39:54.000000000 -0400 +@@ -565,7 +565,6 @@ + glade_init (); + e_cursors_init (); + e_icon_factory_init (); +- e_passwords_init(); + + gtk_window_set_default_icon_name ("evolution"); + +--- evolution-2.10.0/calendar/gui/alarm-notify/notify-main.c.e-passwords 2007-03-12 23:40:22.000000000 -0400 ++++ evolution-2.10.0/calendar/gui/alarm-notify/notify-main.c 2007-03-12 23:40:36.000000000 -0400 +@@ -169,7 +169,6 @@ + + alarm_done (); + +- e_passwords_shutdown (); + gnome_sound_shutdown (); + + return 0; diff --git a/evolution-2.10.0-e-source-combo-box.patch b/evolution-2.10.0-e-source-combo-box.patch new file mode 100644 index 0000000..fee1e80 --- /dev/null +++ b/evolution-2.10.0-e-source-combo-box.patch @@ -0,0 +1,1155 @@ +diff -up evolution-2.10.3/widgets/misc/e-pilot-settings.c.e-source-combo-box evolution-2.10.3/widgets/misc/e-pilot-settings.c +--- evolution-2.10.3/widgets/misc/e-pilot-settings.c.e-source-combo-box 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.3/widgets/misc/e-pilot-settings.c 2007-08-30 09:59:24.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + #include +-#include ++#include + #include "e-pilot-settings.h" + + struct _EPilotSettingsPrivate +@@ -102,7 +102,7 @@ build_ui (EPilotSettings *ps, ESourceLis + + lbl = gtk_label_new (_("Sync with:")); + gtk_misc_set_alignment (GTK_MISC (lbl), 0.0, 0.5); +- priv->source = e_source_option_menu_new (source_list); ++ priv->source = e_source_combo_box_new (source_list); + gtk_table_attach_defaults (GTK_TABLE (ps), lbl, 0, 1, 0, 1); + gtk_table_attach_defaults (GTK_TABLE (ps), priv->source, 1, 2, 0, 1); + gtk_widget_show (lbl); +@@ -152,8 +152,9 @@ e_pilot_settings_get_source (EPilotSetti + g_return_val_if_fail (E_IS_PILOT_SETTINGS (ps), FALSE); + + priv = ps->priv; +- +- return e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (priv->source)); ++ ++ return e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (priv->source)); + } + + void +@@ -166,7 +167,8 @@ e_pilot_settings_set_source (EPilotSetti + + priv = ps->priv; + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source), source); + } + + gboolean +diff -up evolution-2.10.3/plugins/itip-formatter/itip-formatter.c.e-source-combo-box evolution-2.10.3/plugins/itip-formatter/itip-formatter.c +--- evolution-2.10.3/plugins/itip-formatter/itip-formatter.c.e-source-combo-box 2007-04-09 09:09:15.000000000 -0400 ++++ evolution-2.10.3/plugins/itip-formatter/itip-formatter.c 2007-08-30 09:59:24.000000000 -0400 +@@ -39,7 +39,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +diff -up evolution-2.10.3/plugins/itip-formatter/itip-view.c.e-source-combo-box evolution-2.10.3/plugins/itip-formatter/itip-view.c +--- evolution-2.10.3/plugins/itip-formatter/itip-view.c.e-source-combo-box 2007-04-09 09:09:15.000000000 -0400 ++++ evolution-2.10.3/plugins/itip-formatter/itip-view.c 2007-08-30 09:59:24.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -104,8 +104,8 @@ struct _ItipViewPrivate { + char *description; + + GtkWidget *selector_box; +- GtkWidget *esom; +- GtkWidget *esom_header; ++ GtkWidget *escb; ++ GtkWidget *escb_header; + ESourceList *source_list; + + GtkWidget *rsvp_box; +@@ -1664,10 +1664,12 @@ itip_view_clear_lower_info_items (ItipVi + } + + static void +-source_selected_cb (ESourceOptionMenu *esom, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *escb, ItipView *view) + { +- ItipView *view = data; +- ++ ESource *source; ++ ++ source = e_source_combo_box_get_active (escb); ++ + g_signal_emit (view, signals[SOURCE_SELECTED], 0, source); + } + +@@ -1684,40 +1686,42 @@ itip_view_set_source_list (ItipView *vie + if (priv->source_list) + g_object_unref (priv->source_list); + +- if (priv->esom) +- gtk_widget_destroy (priv->esom); ++ if (priv->escb) ++ gtk_widget_destroy (priv->escb); + + if (!source_list) { +- if (priv->esom_header) +- gtk_widget_destroy (priv->esom_header); ++ if (priv->escb_header) ++ gtk_widget_destroy (priv->escb_header); + + priv->source_list = NULL; +- priv->esom = NULL; +- priv->esom_header = NULL; ++ priv->escb = NULL; ++ priv->escb_header = NULL; + + return; + } + + priv->source_list = g_object_ref (source_list); + +- priv->esom = e_source_option_menu_new (source_list); +- gtk_widget_show (priv->esom); +- g_signal_connect (priv->esom, "source_selected", G_CALLBACK (source_selected_cb), view); ++ priv->escb = e_source_combo_box_new (source_list); ++ gtk_widget_show (priv->escb); ++ g_signal_connect ( ++ priv->escb, "changed", ++ G_CALLBACK (source_changed_cb), view); + +- if (!priv->esom_header) { ++ if (!priv->escb_header) { + if (priv->type == E_CAL_SOURCE_TYPE_EVENT) +- priv->esom_header = gtk_label_new_with_mnemonic (_("_Calendar:")); ++ priv->escb_header = gtk_label_new_with_mnemonic (_("_Calendar:")); + else if (priv->type == E_CAL_SOURCE_TYPE_TODO) +- priv->esom_header = gtk_label_new_with_mnemonic (_("_Tasks :")); ++ priv->escb_header = gtk_label_new_with_mnemonic (_("_Tasks :")); + else if (priv->type == E_CAL_SOURCE_TYPE_JOURNAL) +- priv->esom_header = gtk_label_new_with_mnemonic (_("Memos :")); ++ priv->escb_header = gtk_label_new_with_mnemonic (_("Memos :")); + +- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->esom_header), priv->esom); +- gtk_widget_show (priv->esom_header); ++ gtk_label_set_mnemonic_widget (GTK_LABEL (priv->escb_header), priv->escb); ++ gtk_widget_show (priv->escb_header); + } + +- gtk_box_pack_start (GTK_BOX (priv->selector_box), priv->esom_header, FALSE, TRUE, 6); +- gtk_box_pack_start (GTK_BOX (priv->selector_box), priv->esom, FALSE, TRUE, 0); ++ gtk_box_pack_start (GTK_BOX (priv->selector_box), priv->escb_header, FALSE, TRUE, 6); ++ gtk_box_pack_start (GTK_BOX (priv->selector_box), priv->escb, FALSE, TRUE, 0); + } + + ESourceList * +@@ -1743,10 +1747,11 @@ itip_view_set_source (ItipView *view, ES + + priv = view->priv; + +- if (!priv->esom) ++ if (!priv->escb) + return; + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->esom), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->escb), source); + } + + ESource * +@@ -1759,10 +1764,11 @@ itip_view_get_source (ItipView *view) + + priv = view->priv; + +- if (!priv->esom) ++ if (!priv->escb) + return NULL; + +- return e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (priv->esom)); ++ return e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (priv->escb)); + } + + void +diff -up evolution-2.10.3/plugins/bbdb/gaimbuddies.c.e-source-combo-box evolution-2.10.3/plugins/bbdb/gaimbuddies.c +--- evolution-2.10.3/plugins/bbdb/gaimbuddies.c.e-source-combo-box 2007-05-25 02:43:33.000000000 -0400 ++++ evolution-2.10.3/plugins/bbdb/gaimbuddies.c 2007-08-30 09:59:24.000000000 -0400 +@@ -44,7 +44,7 @@ + #include + + #include +-#include ++#include + + #include + #include +diff -up evolution-2.10.3/plugins/bbdb/bbdb.c.e-source-combo-box evolution-2.10.3/plugins/bbdb/bbdb.c +--- evolution-2.10.3/plugins/bbdb/bbdb.c.e-source-combo-box 2007-06-30 15:29:42.000000000 -0400 ++++ evolution-2.10.3/plugins/bbdb/bbdb.c 2007-08-30 10:03:58.000000000 -0400 +@@ -40,7 +40,7 @@ + #include + + #include +-#include ++#include + + #include + #include +@@ -71,10 +71,49 @@ static gboolean bbdb_timeout (gpointer d + static void bbdb_do_it (EBook *book, const char *name, const char *email); + static void add_email_to_contact (EContact *contact, const char *email); + static void enable_toggled_cb (GtkWidget *widget, gpointer data); +-static void source_changed_cb (GtkWidget *widget, ESource *source, gpointer data); ++static void source_changed_cb (ESourceComboBox *source_combo_box, struct bbdb_stuff *stuff); + static GtkWidget *create_addressbook_option_menu (struct bbdb_stuff *stuff, int type); + static void cleanup_cb (GObject *o, gpointer data); + ++static ESource * ++find_esource_by_uri (ESourceList *source_list, const gchar *target_uri) ++{ ++ GSList *groups; ++ ++ /* XXX This would be unnecessary if the plugin had stored ++ * the addressbook's UID instead of the URI in GConf. ++ * Too late to change it now, I suppose. */ ++ ++ if (source_list == NULL || target_uri == NULL) ++ return NULL; ++ ++ groups = e_source_list_peek_groups (source_list); ++ ++ while (groups != NULL) { ++ GSList *sources; ++ ++ sources = e_source_group_peek_sources (groups->data); ++ ++ while (sources != NULL) { ++ gchar *uri; ++ gboolean match; ++ ++ uri = e_source_get_uri (sources->data); ++ match = (strcmp (uri, target_uri) == 0); ++ g_free (uri); ++ ++ if (match) ++ return sources->data; ++ ++ sources = g_slist_next (sources); ++ } ++ ++ groups = g_slist_next (groups); ++ } ++ ++ return NULL; ++} ++ + int + e_plugin_lib_enable (EPluginLib *ep, int enable) + { +@@ -353,8 +392,23 @@ enable_toggled_cb (GtkWidget *widget, gp + + gtk_widget_set_sensitive (stuff->option_menu, active); + if (active && !gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK, NULL)) { +- selected_source = e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (stuff->option_menu)); +- gconf_client_set_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK, e_source_get_uri (selected_source), NULL); ++ const gchar *uri = NULL; ++ GError *error = NULL; ++ ++ selected_source = e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (stuff->option_menu)); ++ if (selected_source != NULL) ++ uri = e_source_get_uri (selected_source); ++ ++ gconf_client_set_string ( ++ stuff->target->gconf, ++ GCONF_KEY_WHICH_ADDRESSBOOK, ++ uri, &error); ++ ++ if (error != NULL) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } + } + } + +@@ -372,7 +426,8 @@ enable_gaim_toggled_cb (GtkWidget *widge + + gtk_widget_set_sensitive (stuff->gaim_option_menu, active); + if (active && !gconf_client_get_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, NULL)) { +- selected_source = e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (stuff->gaim_option_menu)); ++ selected_source = e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (stuff->gaim_option_menu)); + gconf_client_set_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, e_source_get_uri (selected_source), NULL); + } + } +@@ -384,48 +439,77 @@ synchronize_button_clicked_cb (GtkWidget + } + + static void +-source_changed_cb (GtkWidget *widget, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *source_combo_box, ++ struct bbdb_stuff *stuff) + { +- struct bbdb_stuff *stuff = (struct bbdb_stuff *) data; +- +- gconf_client_set_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK, e_source_get_uri (source), NULL); ++ ESource *source; ++ GError *error = NULL; ++ ++ source = e_source_combo_box_get_active (source_combo_box); ++ g_return_if_fail (source != NULL); ++ ++ gconf_client_set_string ( ++ stuff->target->gconf, ++ GCONF_KEY_WHICH_ADDRESSBOOK, ++ e_source_get_uri (source), &error); ++ ++ if (error != NULL) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } + } + + static void +-gaim_source_changed_cb (GtkWidget *widget, ESource *source, gpointer data) ++gaim_source_changed_cb (ESourceComboBox *source_combo_box, ++ struct bbdb_stuff *stuff) + { +- struct bbdb_stuff *stuff = (struct bbdb_stuff *) data; +- gconf_client_set_string (stuff->target->gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, e_source_get_uri (source), NULL); ++ ESource *source; ++ GError *error = NULL; ++ ++ source = e_source_combo_box_get_active (source_combo_box); ++ g_return_if_fail (source != NULL); ++ ++ gconf_client_set_string ( ++ stuff->target->gconf, ++ GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, ++ e_source_get_uri (source), &error); ++ ++ if (error != NULL) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } + } + + static GtkWidget * + create_addressbook_option_menu (struct bbdb_stuff *stuff, int type) + { +- GtkWidget *menu; ++ GtkWidget *combo_box; + ESourceList *source_list; +- char *selected_source_uri; + ESource *selected_source; ++ char *selected_source_uri; + + GConfClient *gconf = stuff->target->gconf; + + source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/addressbook/sources"); +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + + if (type == GAIM_ADDRESSBOOK) + selected_source_uri = gconf_client_get_string (gconf, GCONF_KEY_WHICH_ADDRESSBOOK_GAIM, NULL); + else + selected_source_uri = gconf_client_get_string (gconf, GCONF_KEY_WHICH_ADDRESSBOOK, NULL); +- if (selected_source_uri != NULL) { +- selected_source = e_source_new_with_absolute_uri ("", selected_source_uri); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (menu), selected_source); +- g_free (selected_source_uri); +- } ++ selected_source = find_esource_by_uri ( ++ source_list, selected_source_uri); ++ g_free (selected_source_uri); ++ ++ if (selected_source != NULL) ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (combo_box), selected_source); + +- gtk_widget_show (menu); ++ gtk_widget_show (combo_box); + + stuff->source_list = source_list; + +- return menu; ++ return combo_box; + } + + GtkWidget * +@@ -491,7 +575,7 @@ bbdb_page_factory (EPlugin *ep, EConfigH + + /* Source selection option menu */ + option = create_addressbook_option_menu (stuff, AUTOMATIC_CONTACTS_ADDRESSBOOK); +- g_signal_connect (option, "source_selected", G_CALLBACK (source_changed_cb), stuff); ++ g_signal_connect (option, "changed", G_CALLBACK (source_changed_cb), stuff); + gtk_widget_set_sensitive (option, gconf_client_get_bool (target->gconf, GCONF_KEY_ENABLE, NULL)); + gtk_box_pack_start (GTK_BOX (inner_vbox), option, FALSE, FALSE, 0); + stuff->option_menu = option; +@@ -527,7 +611,7 @@ bbdb_page_factory (EPlugin *ep, EConfigH + + /* Gaim Source Selection Option Menu */ + gaim_option = create_addressbook_option_menu (stuff, GAIM_ADDRESSBOOK); +- g_signal_connect (gaim_option, "source_selected", G_CALLBACK (gaim_source_changed_cb), stuff); ++ g_signal_connect (gaim_option, "changed", G_CALLBACK (gaim_source_changed_cb), stuff); + gtk_widget_set_sensitive (gaim_option, gconf_client_get_bool (target->gconf, GCONF_KEY_ENABLE_GAIM, NULL)); + gtk_box_pack_start (GTK_BOX (inner_vbox), gaim_option, FALSE, FALSE, 0); + stuff->gaim_option_menu = gaim_option; +diff -up evolution-2.10.3/addressbook/gui/contact-list-editor/contact-list-editor.glade.e-source-combo-box evolution-2.10.3/addressbook/gui/contact-list-editor/contact-list-editor.glade +--- evolution-2.10.3/addressbook/gui/contact-list-editor/contact-list-editor.glade.e-source-combo-box 2007-05-27 14:11:02.000000000 -0400 ++++ evolution-2.10.3/addressbook/gui/contact-list-editor/contact-list-editor.glade 2007-08-30 09:59:24.000000000 -0400 +@@ -158,9 +158,9 @@ + + + +- ++ + True +- e_contact_list_editor_create_source_option_menu ++ e_contact_list_editor_create_source_combo_box + 0 + 0 + Tue, 01 Jun 2004 18:22:38 GMT +diff -up evolution-2.10.3/addressbook/gui/contact-list-editor/e-contact-list-editor.c.e-source-combo-box evolution-2.10.3/addressbook/gui/contact-list-editor/e-contact-list-editor.c +--- evolution-2.10.3/addressbook/gui/contact-list-editor/e-contact-list-editor.c.e-source-combo-box 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.3/addressbook/gui/contact-list-editor/e-contact-list-editor.c 2007-08-30 09:59:24.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + +-#include ++#include + + #include + #include +@@ -78,7 +78,7 @@ static void select_cb (GtkWidget *w, ECo + static void list_name_changed_cb (GtkWidget *w, EContactListEditor *editor); + static void list_image_changed_cb (GtkWidget *w, EContactListEditor *editor); + static void visible_addrs_toggled_cb (GtkWidget *w, EContactListEditor *editor); +-static void source_selected (GtkWidget *source_option_menu, ESource *source, EContactListEditor *editor); ++static void source_changed_cb (ESourceComboBox *source_combo_box, EContactListEditor *editor); + static gboolean email_key_pressed (GtkWidget *w, GdkEventKey *event, EContactListEditor *editor); + static void email_match_selected (GtkWidget *w, EDestination *destination, EContactListEditor *editor); + +@@ -233,7 +233,7 @@ e_contact_list_editor_init (EContactList + editor->list_name_entry = glade_xml_get_widget (gui, "list-name-entry"); + editor->list_image = glade_xml_get_widget (gui, "list-image"); + editor->visible_addrs_checkbutton = glade_xml_get_widget (gui, "visible-addrs-checkbutton"); +- editor->source_menu = glade_xml_get_widget (gui, "source-option-menu-source"); ++ editor->source_menu = glade_xml_get_widget (gui, "source-combo-box-source"); + + editor->ok_button = glade_xml_get_widget (gui, "ok-button"); + editor->cancel_button = glade_xml_get_widget (gui, "cancel-button"); +@@ -276,7 +276,7 @@ e_contact_list_editor_init (EContactList + "changed", G_CALLBACK(list_image_changed_cb), editor); + + g_signal_connect (editor->source_menu, +- "source_selected", G_CALLBACK (source_selected), editor); ++ "changed", G_CALLBACK (source_changed_cb), editor); + + command_state_changed (editor); + +@@ -306,8 +306,9 @@ new_target_cb (EBook *new_book, EBookSta + if (status != E_BOOK_ERROR_OK || new_book == NULL) { + eab_load_error_dialog (NULL, e_book_get_source (new_book), status); + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (editor->source_menu), +- e_book_get_source (editor->book)); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (editor->source_menu), ++ e_book_get_source (editor->book)); + + if (new_book) + g_object_unref (new_book); +@@ -332,8 +333,12 @@ cancel_load (EContactListEditor *editor) + } + + static void +-source_selected (GtkWidget *source_option_menu, ESource *source, EContactListEditor *editor) ++source_changed_cb (ESourceComboBox *source_combo_box, EContactListEditor *editor) + { ++ ESource *source; ++ ++ source = e_source_combo_box_get_active (source_combo_box); ++ + cancel_load (editor); + + if (e_source_equal (e_book_get_source (editor->book), source)) +@@ -795,28 +800,28 @@ select_cb (GtkWidget *w, EContactListEdi + } + + GtkWidget * +-e_contact_list_editor_create_source_option_menu (gchar *name, +- gchar *string1, gchar *string2, +- gint int1, gint int2); ++e_contact_list_editor_create_source_combo_box (gchar *name, ++ gchar *string1, gchar *string2, ++ gint int1, gint int2); + + GtkWidget * +-e_contact_list_editor_create_source_option_menu (gchar *name, +- gchar *string1, gchar *string2, +- gint int1, gint int2) ++e_contact_list_editor_create_source_combo_box (gchar *name, ++ gchar *string1, gchar *string2, ++ gint int1, gint int2) + { + +- GtkWidget *menu; ++ GtkWidget *combo_box; + GConfClient *gconf_client; + ESourceList *source_list; + + gconf_client = gconf_client_get_default (); + source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/addressbook/sources"); + +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + g_object_unref (source_list); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } + + GtkWidget * +@@ -1262,10 +1267,9 @@ fill_in_info(EContactListEditor *editor) + } + + if (editor->book) { +- ESource *source; +- +- source = e_book_get_source (editor->book); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (editor->source_menu), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (editor->source_menu), ++ e_book_get_source (editor->book)); + gtk_widget_set_sensitive (editor->source_menu, editor->is_new_list); + gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "source-label"), editor->is_new_list); + } +diff -up evolution-2.10.3/addressbook/gui/contact-editor/contact-editor.glade.e-source-combo-box evolution-2.10.3/addressbook/gui/contact-editor/contact-editor.glade +--- evolution-2.10.3/addressbook/gui/contact-editor/contact-editor.glade.e-source-combo-box 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.3/addressbook/gui/contact-editor/contact-editor.glade 2007-08-30 09:59:24.000000000 -0400 +@@ -356,9 +356,9 @@ + + + +- ++ + True +- e_contact_editor_create_source_option_menu ++ e_contact_editor_create_source_combo_box + 0 + 0 + Tue, 13 Apr 2004 20:47:50 GMT +diff -up evolution-2.10.3/addressbook/gui/contact-editor/e-contact-editor.c.e-source-combo-box evolution-2.10.3/addressbook/gui/contact-editor/e-contact-editor.c +--- evolution-2.10.3/addressbook/gui/contact-editor/e-contact-editor.c.e-source-combo-box 2007-05-27 12:54:09.000000000 -0400 ++++ evolution-2.10.3/addressbook/gui/contact-editor/e-contact-editor.c 2007-08-30 09:59:24.000000000 -0400 +@@ -46,7 +46,7 @@ + #include + + #include +-#include ++#include + + #include + +@@ -590,15 +590,16 @@ static void + fill_in_source_field (EContactEditor *editor) + { + GtkWidget *source_menu; +- ESource *source; + + if (!editor->target_book) + return; + +- source_menu = glade_xml_get_widget (editor->gui, "source-option-menu-source"); +- source = e_book_get_source (editor->target_book); ++ source_menu = glade_xml_get_widget ( ++ editor->gui, "source-combo-box-source"); + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (source_menu), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (source_menu), ++ e_book_get_source (editor->target_book)); + } + + static void +@@ -2525,13 +2526,15 @@ new_target_cb (EBook *new_book, EBookSta + editor->load_book = NULL; + + if (status != E_BOOK_ERROR_OK || new_book == NULL) { +- GtkWidget *source_option_menu; ++ GtkWidget *source_combo_box; + + eab_load_error_dialog (NULL, e_book_get_source (new_book), status); + +- source_option_menu = glade_xml_get_widget (editor->gui, "source-option-menu-source"); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (source_option_menu), +- e_book_get_source (editor->target_book)); ++ source_combo_box = glade_xml_get_widget ( ++ editor->gui, "source-combo-box-source"); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (source_combo_box), ++ e_book_get_source (editor->target_book)); + + if (new_book) + g_object_unref (new_book); +@@ -2555,8 +2558,12 @@ cancel_load (EContactEditor *editor) + } + + static void +-source_selected (GtkWidget *source_option_menu, ESource *source, EContactEditor *editor) ++source_changed (ESourceComboBox *source_combo_box, EContactEditor *editor) + { ++ ESource *source; ++ ++ source = e_source_combo_box_get_active (source_combo_box); ++ + cancel_load (editor); + + if (e_source_equal (e_book_get_source (editor->target_book), source)) +@@ -3329,8 +3336,8 @@ e_contact_editor_init (EContactEditor *e + g_signal_connect (widget, "clicked", G_CALLBACK (full_name_clicked), e_contact_editor); + widget = glade_xml_get_widget(e_contact_editor->gui, "button-categories"); + g_signal_connect (widget, "clicked", G_CALLBACK (categories_clicked), e_contact_editor); +- widget = glade_xml_get_widget (e_contact_editor->gui, "source-option-menu-source"); +- g_signal_connect (widget, "source_selected", G_CALLBACK (source_selected), e_contact_editor); ++ widget = glade_xml_get_widget (e_contact_editor->gui, "source-combo-box-source"); ++ g_signal_connect (widget, "changed", G_CALLBACK (source_changed), e_contact_editor); + label = glade_xml_get_widget (e_contact_editor->gui, "where-label"); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget); + widget = glade_xml_get_widget (e_contact_editor->gui, "button-ok"); +@@ -3781,25 +3788,25 @@ e_contact_editor_create_web(gchar *name, + } + + GtkWidget * +-e_contact_editor_create_source_option_menu (gchar *name, +- gchar *string1, gchar *string2, +- gint int1, gint int2); ++e_contact_editor_create_source_combo_box (gchar *name, ++ gchar *string1, gchar *string2, ++ gint int1, gint int2); + + GtkWidget * +-e_contact_editor_create_source_option_menu (gchar *name, +- gchar *string1, gchar *string2, +- gint int1, gint int2) ++e_contact_editor_create_source_combo_box (gchar *name, ++ gchar *string1, gchar *string2, ++ gint int1, gint int2) + { +- GtkWidget *menu; ++ GtkWidget *combo_box; + GConfClient *gconf_client; + ESourceList *source_list; + + gconf_client = gconf_client_get_default (); + source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/addressbook/sources"); + +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + g_object_unref (source_list); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } +diff -up evolution-2.10.3/addressbook/gui/contact-editor/e-contact-quick-add.c.e-source-combo-box evolution-2.10.3/addressbook/gui/contact-editor/e-contact-quick-add.c +--- evolution-2.10.3/addressbook/gui/contact-editor/e-contact-quick-add.c.e-source-combo-box 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.3/addressbook/gui/contact-editor/e-contact-quick-add.c 2007-08-30 09:59:24.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "e-contact-editor.h" +@@ -267,8 +267,12 @@ clicked_cb (GtkWidget *w, gint button, g + } + + static void +-source_selected (GtkWidget *source_option_menu, ESource *source, QuickAdd *qa) ++source_changed (ESourceComboBox *source_combo_box, QuickAdd *qa) + { ++ ESource *source; ++ ++ source = e_source_combo_box_get_active (source_combo_box); ++ + if (qa->book) { + g_object_unref (qa->book); + qa->book = NULL; +@@ -317,16 +321,20 @@ build_quick_add_dialog (QuickAdd *qa) + + gconf_client = gconf_client_get_default (); + source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/addressbook/sources"); +- qa->option_menu = e_source_option_menu_new (source_list); ++ qa->option_menu = e_source_combo_box_new (source_list); + book = e_book_new_default_addressbook (NULL); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (qa->option_menu), e_book_get_source(book)); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (qa->option_menu), ++ e_book_get_source (book)); + if (qa->book) { + g_object_unref (qa->book); + qa->book = NULL; + } + qa->book = book ; +- source_selected(qa->option_menu, e_source_option_menu_peek_selected ((ESourceOptionMenu *)qa->option_menu), qa); +- g_signal_connect (qa->option_menu, "source_selected", G_CALLBACK (source_selected), qa); ++ source_changed (E_SOURCE_COMBO_BOX (qa->option_menu), qa); ++ g_signal_connect ( ++ qa->option_menu, "changed", ++ G_CALLBACK (source_changed), qa); + + g_object_unref (source_list); + +diff -up evolution-2.10.3/calendar/gui/dialogs/memo-page.glade.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/memo-page.glade +--- evolution-2.10.3/calendar/gui/dialogs/memo-page.glade.e-source-combo-box 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/memo-page.glade 2007-08-30 09:59:24.000000000 -0400 +@@ -141,7 +141,7 @@ + + + True +- memo_page_create_source_option_menu ++ memo_page_create_source_combo_box + 0 + 0 + Tue, 13 Jan 2004 22:00:00 GMT +diff -up evolution-2.10.3/calendar/gui/dialogs/event-page.glade.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/event-page.glade +--- evolution-2.10.3/calendar/gui/dialogs/event-page.glade.e-source-combo-box 2007-05-27 13:58:15.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/event-page.glade 2007-08-30 09:59:24.000000000 -0400 +@@ -775,7 +775,7 @@ + + + True +- event_page_create_source_option_menu ++ event_page_create_source_combo_box + 0 + 0 + Wed, 17 Dec 2003 18:20:26 GMT +diff -up evolution-2.10.3/calendar/gui/dialogs/task-page.glade.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/task-page.glade +--- evolution-2.10.3/calendar/gui/dialogs/task-page.glade.e-source-combo-box 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/task-page.glade 2007-08-30 09:59:24.000000000 -0400 +@@ -618,7 +618,7 @@ + + 24 + True +- task_page_create_source_option_menu ++ task_page_create_source_combo_box + 0 + 0 + Thu, 18 Dec 2003 01:58:48 GMT +diff -up evolution-2.10.3/calendar/gui/dialogs/memo-page.c.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/memo-page.c +--- evolution-2.10.3/calendar/gui/dialogs/memo-page.c.e-source-combo-box 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/memo-page.c 2007-08-30 09:59:24.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -339,7 +339,6 @@ memo_page_fill_widgets (CompEditorPage * + ECalComponentDateTime d; + GSList *l; + const char *categories; +- ESource *source; + + mpage = MEMO_PAGE (page); + priv = mpage->priv; +@@ -432,8 +431,9 @@ memo_page_fill_widgets (CompEditorPage * + } + + /* Source */ +- source = e_cal_get_source (page->client); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (page->client)); + + priv->updating = FALSE; + +@@ -844,13 +844,12 @@ field_changed_cb (GtkWidget *widget, gpo + } + + static void +-source_changed_cb (GtkWidget *widget, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *source_combo_box, MemoPage *mpage) + { +- MemoPage *mpage; +- MemoPagePrivate *priv; ++ MemoPagePrivate *priv = mpage->priv; ++ ESource *source; + +- mpage = MEMO_PAGE (data); +- priv = mpage->priv; ++ source = e_source_combo_box_get_active (source_combo_box); + + if (!priv->updating) { + ECal *client; +@@ -862,8 +861,9 @@ source_changed_cb (GtkWidget *widget, ES + if (client) + g_object_unref (client); + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), +- e_cal_get_source (COMP_EDITOR_PAGE (mpage)->client)); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (COMP_EDITOR_PAGE (mpage)->client)); + + dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, + GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, +@@ -973,7 +973,7 @@ init_widgets (MemoPage *mpage) + G_CALLBACK (categories_clicked_cb), mpage); + + /* Source selector */ +- g_signal_connect((priv->source_selector), "source_selected", ++ g_signal_connect((priv->source_selector), "changed", + G_CALLBACK (source_changed_cb), mpage); + + /* Connect the default signal handler to use to make sure the "changed" +@@ -1167,21 +1167,22 @@ memo_page_create_date_edit (void) + return dedit; + } + +-GtkWidget *memo_page_create_source_option_menu (void); ++GtkWidget *memo_page_create_source_combo_box (void); + + GtkWidget * +-memo_page_create_source_option_menu (void) ++memo_page_create_source_combo_box (void) + { +- GtkWidget *menu; ++ GtkWidget *combo_box; + GConfClient *gconf_client; + ESourceList *source_list; + + gconf_client = gconf_client_get_default (); +- source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/memos/sources"); ++ source_list = e_source_list_new_for_gconf ( ++ gconf_client, "/apps/evolution/memos/sources"); + +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + g_object_unref (source_list); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } +diff -up evolution-2.10.3/calendar/gui/dialogs/event-page.c.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/event-page.c +--- evolution-2.10.3/calendar/gui/dialogs/event-page.c.e-source-combo-box 2007-08-30 09:59:22.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/event-page.c 2007-08-30 09:59:24.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include "common/authentication.h" + #include "e-util/e-categories-config.h" + #include "e-util/e-dialog-widgets.h" +@@ -967,7 +967,6 @@ event_page_fill_widgets (CompEditorPage + ECalComponentDateTime start_date, end_date; + const char *location, *uid = NULL; + const char *categories; +- ESource *source; + GSList *l; + gboolean validated = TRUE; + +@@ -1163,8 +1162,9 @@ event_page_fill_widgets (CompEditorPage + e_dialog_editable_set (priv->categories, categories); + + /* Source */ +- source = e_cal_get_source (page->client); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (page->client)); + + e_cal_component_get_uid (comp, &uid); + if (!(COMP_EDITOR_PAGE (epage)->flags & COMP_EDITOR_PAGE_DELEGATE) +@@ -2566,7 +2566,8 @@ event_page_sendoptions_clicked_cb (Event + + if (!priv->sod) { + priv->sod = e_sendoptions_dialog_new (); +- source = e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (priv->source_selector)); ++ source = e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector)); + e_sendoptions_utils_set_default_data (priv->sod, source, "calendar"); + priv->sod->data->initialized = TRUE; + } +@@ -2595,13 +2596,12 @@ field_changed_cb (GtkWidget *widget, gpo + } + + static void +-source_changed_cb (GtkWidget *widget, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage) + { +- EventPage *epage; +- EventPagePrivate *priv; ++ EventPagePrivate *priv = epage->priv; ++ ESource *source; + +- epage = EVENT_PAGE (data); +- priv = epage->priv; ++ source = e_source_combo_box_get_active (source_combo_box); + + if (!priv->updating) { + ECal *client; +@@ -2620,8 +2620,9 @@ source_changed_cb (GtkWidget *widget, ES + if (client) + g_object_unref (client); + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), +- e_cal_get_source (COMP_EDITOR_PAGE (epage)->client)); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (COMP_EDITOR_PAGE (epage)->client)); + + dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, + GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, +@@ -2847,7 +2848,7 @@ init_widgets (EventPage *epage) + G_CALLBACK (categories_clicked_cb), epage); + + /* Source selector */ +- g_signal_connect((priv->source_selector), "source_selected", ++ g_signal_connect((priv->source_selector), "changed", + G_CALLBACK (source_changed_cb), epage); + /* Alarms */ + priv->alarm_list_store = e_alarm_list_new (); +@@ -3148,23 +3149,24 @@ make_timezone_entry (void) + return w; + } + +-GtkWidget *event_page_create_source_option_menu (void); ++GtkWidget *event_page_create_source_combo_box (void); + + GtkWidget * +-event_page_create_source_option_menu (void) ++event_page_create_source_combo_box (void) + { +- GtkWidget *menu; ++ GtkWidget *combo_box; + GConfClient *gconf_client; + ESourceList *source_list; + + gconf_client = gconf_client_get_default (); +- source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/calendar/sources"); ++ source_list = e_source_list_new_for_gconf ( ++ gconf_client, "/apps/evolution/calendar/sources"); + +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + g_object_unref (source_list); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } + + GtkWidget *make_status_icons (void); +diff -up evolution-2.10.3/calendar/gui/dialogs/task-page.c.e-source-combo-box evolution-2.10.3/calendar/gui/dialogs/task-page.c +--- evolution-2.10.3/calendar/gui/dialogs/task-page.c.e-source-combo-box 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/dialogs/task-page.c 2007-08-30 09:59:24.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "common/authentication.h" +@@ -513,7 +513,6 @@ task_page_fill_widgets (CompEditorPage * + icalcomponent *icalcomp; + const char *categories, *uid; + icaltimezone *zone, *default_zone; +- ESource *source; + + tpage = TASK_PAGE (page); + priv = tpage->priv; +@@ -657,8 +656,9 @@ task_page_fill_widgets (CompEditorPage * + e_dialog_editable_set (priv->categories, categories); + + /* Source */ +- source = e_cal_get_source (page->client); +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), source); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (page->client)); + + if (priv->is_assignment) { + ECalComponentOrganizer organizer; +@@ -1617,13 +1617,12 @@ field_changed_cb (GtkWidget *widget, gpo + } + + static void +-source_changed_cb (GtkWidget *widget, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage) + { +- TaskPage *tpage; +- TaskPagePrivate *priv; ++ TaskPagePrivate *priv = tpage->priv; ++ ESource *source; + +- tpage = TASK_PAGE (data); +- priv = tpage->priv; ++ source = e_source_combo_box_get_active (source_combo_box); + + if (!priv->updating) { + ECal *client; +@@ -1642,8 +1641,9 @@ source_changed_cb (GtkWidget *widget, ES + if (client) + g_object_unref (client); + +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (priv->source_selector), +- e_cal_get_source (COMP_EDITOR_PAGE (tpage)->client)); ++ e_source_combo_box_set_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector), ++ e_cal_get_source (COMP_EDITOR_PAGE (tpage)->client)); + + dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, + GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, +@@ -1655,7 +1655,7 @@ source_changed_cb (GtkWidget *widget, ES + comp_editor_notify_client_changed ( + COMP_EDITOR (gtk_widget_get_toplevel (priv->main)), + client); +- field_changed_cb (widget, data); ++ field_changed_cb (GTK_WIDGET (source_combo_box), tpage); + if (e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS) && priv->is_assignment) + task_page_show_options (tpage); + else +@@ -1679,7 +1679,8 @@ task_page_sendoptions_clicked_cb (TaskPa + if (!priv->sod) { + priv->sod = e_sendoptions_dialog_new (); + priv->sod->data->initialized = TRUE; +- source = e_source_option_menu_peek_selected (E_SOURCE_OPTION_MENU (priv->source_selector)); ++ source = e_source_combo_box_get_active ( ++ E_SOURCE_COMBO_BOX (priv->source_selector)); + e_sendoptions_utils_set_default_data (priv->sod, source, "task"); + } + +@@ -1734,7 +1735,7 @@ init_widgets (TaskPage *tpage) + G_CALLBACK (categories_clicked_cb), tpage); + + /* Source selector */ +- g_signal_connect((priv->source_selector), "source_selected", ++ g_signal_connect((priv->source_selector), "source_changed", + G_CALLBACK (source_changed_cb), tpage); + + /* Connect the default signal handler to use to make sure the "changed" +@@ -1955,21 +1956,23 @@ task_page_create_date_edit (void) + return dedit; + } + +-GtkWidget *task_page_create_source_option_menu (void); ++GtkWidget *task_page_create_source_combo_box (void); + + GtkWidget * +-task_page_create_source_option_menu (void) ++task_page_create_source_combo_box (void) + { +- GtkWidget *menu; ++ GtkWidget *combo_box; + GConfClient *gconf_client; + ESourceList *source_list; + + gconf_client = gconf_client_get_default (); +- source_list = e_source_list_new_for_gconf (gconf_client, "/apps/evolution/tasks/sources"); ++ source_list = e_source_list_new_for_gconf ( ++ gconf_client, "/apps/evolution/tasks/sources"); + +- menu = e_source_option_menu_new (source_list); ++ combo_box = e_source_combo_box_new (source_list); + g_object_unref (source_list); ++ g_object_unref (gconf_client); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } +diff -up evolution-2.10.3/calendar/gui/e-itip-control.c.e-source-combo-box evolution-2.10.3/calendar/gui/e-itip-control.c +--- evolution-2.10.3/calendar/gui/e-itip-control.c.e-source-combo-box 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/e-itip-control.c 2007-08-30 09:59:24.000000000 -0400 +@@ -44,7 +44,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -226,13 +226,13 @@ typedef struct { + } EItipControlFindData; + + static void +-source_selected_cb (ESourceOptionMenu *esom, ESource *source, gpointer data) ++source_changed_cb (ESourceComboBox *escb, EItipControl *itip) + { +- EItipControl *itip = data; +- EItipControlPrivate *priv; +- +- priv = itip->priv; ++ EItipControlPrivate *priv = itip->priv; ++ ESource *source; + ++ source = e_source_combo_box_get_active (escb); ++ + if (priv->ok) + gtk_widget_set_sensitive (priv->ok, FALSE); + +@@ -273,7 +273,7 @@ find_cal_opened_cb (ECal *ecal, ECalenda + cleanup: + if (fd->count == 0) { + if (fd->show_selector && !priv->current_ecal && priv->vbox) { +- GtkWidget *esom; ++ GtkWidget *escb; + char *uid; + + switch (priv->type) { +@@ -297,17 +297,17 @@ find_cal_opened_cb (ECal *ecal, ECalenda + if (!source) + source = e_source_list_peek_source_any (priv->source_lists[priv->type]); + +- esom = e_source_option_menu_new (priv->source_lists[priv->type]); +- g_signal_connect_object (esom, "source_selected", +- G_CALLBACK (source_selected_cb), +- fd->itip, 0); ++ escb = e_source_combo_box_new (priv->source_lists[priv->type]); ++ g_signal_connect_object ( ++ escb, "changed", ++ G_CALLBACK (source_changed_cb), fd->itip, 0); + +- gtk_box_pack_start (GTK_BOX (priv->vbox), esom, FALSE, TRUE, 0); +- gtk_widget_show (esom); ++ gtk_box_pack_start (GTK_BOX (priv->vbox), escb, FALSE, TRUE, 0); ++ gtk_widget_show (escb); + + /* FIXME What if there is no source? */ + if (source) +- e_source_option_menu_select (E_SOURCE_OPTION_MENU (esom), source); ++ e_source_combo_box_set_active (E_SOURCE_COMBO_BOX (escb), source); + } else { + /* FIXME Display error message to user */ + } diff --git a/evolution-2.10.0-shell-main-cleanups.patch b/evolution-2.10.0-shell-main-cleanups.patch new file mode 100644 index 0000000..2549279 --- /dev/null +++ b/evolution-2.10.0-shell-main-cleanups.patch @@ -0,0 +1,274 @@ +--- evolution-2.10.0/shell/main.c.shell-main-cleanups 2007-03-17 22:19:29.000000000 -0400 ++++ evolution-2.10.0/shell/main.c 2007-03-17 22:21:01.000000000 -0400 +@@ -88,6 +88,9 @@ + + #include "e-util/e-plugin.h" + ++#define SKIP_WARNING_DIALOG_KEY \ ++ "/apps/evolution/shell/skip_warning_dialog" ++ + static EShell *shell = NULL; + + /* Command-line options. */ +@@ -100,7 +103,7 @@ + #endif + static gboolean disable_eplugin = FALSE; + +-static gint idle_cb (void *data); ++static gboolean idle_cb (gchar **uris); + + static char *default_component_id = NULL; + static char *evolution_debug_log = NULL; +@@ -133,6 +136,7 @@ + system (KILL_PROCESS_CMD " -9 evolution-data-server-1.2 2> /dev/null"); + system (KILL_PROCESS_CMD " -9 evolution-data-server-1.4 2> /dev/null"); + system (KILL_PROCESS_CMD " -9 evolution-data-server-1.6 2> /dev/null"); ++ system (KILL_PROCESS_CMD " -9 evolution-data-server-1.8 2> /dev/null"); + + system (KILL_PROCESS_CMD " -9 lt-evolution-alarm-notify 2> /dev/null"); + system (KILL_PROCESS_CMD " -9 evolution-alarm-notify 2> /dev/null"); +@@ -182,35 +186,15 @@ + + /* Warning dialog to scare people off a little bit. */ + +-static void +-warning_dialog_response_callback (GtkDialog *dialog, +- int button_number, +- void *data) +-{ +- GtkCheckButton *dont_bother_me_again_checkbox; +- GConfClient *client; +- +- dont_bother_me_again_checkbox = GTK_CHECK_BUTTON (data); +- +- client = gconf_client_get_default (); +- gconf_client_set_bool (client, "/apps/evolution/shell/skip_warning_dialog", +- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dont_bother_me_again_checkbox)), +- NULL); +- g_object_unref (client); +- +- gtk_widget_destroy (GTK_WIDGET (dialog)); +- +- idle_cb(NULL); +-} +- +-static void ++static gboolean + show_development_warning(void) + { + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *warning_dialog; +- GtkWidget *dont_bother_me_again_checkbox; ++ GtkWidget *checkbox; + GtkWidget *alignment; ++ gboolean skip; + char *text; + + warning_dialog = gtk_dialog_new (); +@@ -262,59 +246,58 @@ + + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + +- dont_bother_me_again_checkbox = gtk_check_button_new_with_label (_("Do not tell me again")); ++ checkbox = gtk_check_button_new_with_label (_("Do not tell me again")); + + alignment = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); + +- gtk_container_add (GTK_CONTAINER (alignment), dont_bother_me_again_checkbox); ++ gtk_container_add (GTK_CONTAINER (alignment), checkbox); + gtk_box_pack_start (GTK_BOX (vbox), alignment, TRUE, TRUE, 0); + + gtk_widget_show_all (warning_dialog); + +- g_signal_connect (warning_dialog, "response", +- G_CALLBACK (warning_dialog_response_callback), +- dont_bother_me_again_checkbox); ++ gtk_dialog_run (GTK_DIALOG (warning_dialog)); ++ ++ skip = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox)); ++ ++ gtk_widget_destroy (warning_dialog); ++ ++ idle_cb (NULL); ++ ++ return skip; + } + + static void +-destroy_config (void) ++destroy_config (GConfClient *client) + { +- GConfClient *gconf; +- +- gconf = gconf_client_get_default (); +- + /* Unset the source stuff */ +- gconf_client_unset (gconf, "/apps/evolution/calendar/sources", NULL); +- gconf_client_unset (gconf, "/apps/evolution/tasks/sources", NULL); +- gconf_client_unset (gconf, "/apps/evolution/addressbook/sources", NULL); +- gconf_client_unset (gconf, "/apps/evolution/addressbook/sources", NULL); ++ gconf_client_unset (client, "/apps/evolution/calendar/sources", NULL); ++ gconf_client_unset (client, "/apps/evolution/tasks/sources", NULL); ++ gconf_client_unset (client, "/apps/evolution/addressbook/sources", NULL); + + /* Reset the version */ +- gconf_client_set_string (gconf, "/apps/evolution/version", "1.4.0", NULL); ++ gconf_client_set_string (client, "/apps/evolution/version", "1.4.0", NULL); + + /* Clear the dir */ + system ("rm -Rf ~/.evolution"); +- +- g_object_unref (gconf); + } + + #endif /* DEVELOPMENT */ + + static void +-open_uris (GNOME_Evolution_Shell corba_shell, GSList *uri_list) ++open_uris (GNOME_Evolution_Shell corba_shell, gchar **uris) + { +- GSList *p; + CORBA_Environment ev; ++ guint n_uris, ii; + +- CORBA_exception_init (&ev); ++ g_assert (uris != NULL); ++ n_uris = g_strv_length (uris); + +- for (p = uri_list; p != NULL; p = p->next) { +- const char *uri; ++ CORBA_exception_init (&ev); + +- uri = (const char *) p->data; +- GNOME_Evolution_Shell_handleURI (corba_shell, uri, &ev); ++ for (ii = 0; ii < n_uris; ii++) { ++ GNOME_Evolution_Shell_handleURI (corba_shell, uris[ii], &ev); + if (ev._major != CORBA_NO_EXCEPTION) { +- g_warning ("Invalid URI: %s", uri); ++ g_warning ("Invalid URI: %s", uris[ii]); + CORBA_exception_free (&ev); + } + } +@@ -324,23 +307,22 @@ + + /* This is for doing stuff that requires the GTK+ loop to be running already. */ + +-static gint +-idle_cb (void *data) ++static gboolean ++idle_cb (gchar **uris) + { +- GSList *uri_list; + GNOME_Evolution_Shell corba_shell; + CORBA_Environment ev; + EShellConstructResult result; + EShellStartupLineMode startup_line_mode; + ++ g_assert (uris == NULL || g_strv_length (uris) > 0); ++ + #ifdef KILL_PROCESS_CMD + kill_old_dataserver (); + #endif + + CORBA_exception_init (&ev); + +- uri_list = (GSList *) data; +- + if (! start_online && ! start_offline) + startup_line_mode = E_SHELL_STARTUP_LINE_MODE_CONFIG; + else if (start_online) +@@ -378,15 +360,16 @@ + } + + if (shell != NULL) { +- if (g_slist_length (uri_list) == 0) ++ if (uris != NULL) ++ open_uris (corba_shell, uris); ++ else + e_shell_create_window (shell, default_component_id, NULL); +- open_uris (corba_shell, uri_list); + } else { + CORBA_Environment ev; + + CORBA_exception_init (&ev); +- if (uri_list != NULL) +- open_uris (corba_shell, uri_list); ++ if (uris != NULL) ++ open_uris (corba_shell, uris); + else + if (default_component_id == NULL) + GNOME_Evolution_Shell_createNewWindow (corba_shell, "", &ev); +@@ -396,8 +379,6 @@ + CORBA_exception_free (&ev); + } + +- g_slist_free (uri_list); +- + CORBA_Object_release (corba_shell, &ev); + + CORBA_exception_free (&ev); +@@ -501,7 +482,6 @@ + GConfClient *client; + gboolean skip_warning_dialog; + #endif +- GSList *uri_list; + GnomeProgram *program; + GOptionContext *context; + char *filename; +@@ -543,8 +523,10 @@ + #endif + + #if DEVELOPMENT ++ client = g_conf_client_get_default (); ++ + if (force_migrate) { +- destroy_config (); ++ destroy_config (client); + } + #endif + +@@ -571,17 +553,6 @@ + if (setup_only) + exit (0); + +- uri_list = NULL; +- +- if (remaining_args != NULL) { +- const char **p; +- +- for (p = (const char**)remaining_args; *p != NULL; p++) +- uri_list = g_slist_prepend (uri_list, (char *) *p); +- } +- uri_list = g_slist_reverse (uri_list); +- +- + gnome_sound_init ("localhost"); + + if (!disable_eplugin) { +@@ -597,15 +568,20 @@ + } + + #if DEVELOPMENT +- client = gconf_client_get_default (); +- skip_warning_dialog = gconf_client_get_bool (client, "/apps/evolution/shell/skip_warning_dialog", NULL); +- g_object_unref (client); ++ skip_warning_dialog = gconf_client_get_bool ( ++ client, SKIP_WARNING_DIALOG_KEY, NULL); + + if (!skip_warning_dialog && !getenv ("EVOLVE_ME_HARDER")) +- show_development_warning(); ++ gconf_client_set_bool ( ++ client, SKIP_WARNING_DIALOG_KEY, ++ show_development_warning (), NULL); + else ++ g_idle_add ((GSourceFunc) idle_cb, remaining_args); ++ ++ g_object_unref (client); ++#else ++ g_idle_add ((GSourceFunc) idle_cb, remaining_args); + #endif +- g_idle_add (idle_cb, uri_list); + + bonobo_main (); + diff --git a/evolution-2.10.0-use-glib-i18n.patch b/evolution-2.10.0-use-glib-i18n.patch new file mode 100644 index 0000000..8e45357 --- /dev/null +++ b/evolution-2.10.0-use-glib-i18n.patch @@ -0,0 +1,3348 @@ +--- evolution-2.10.1/mail/message-tag-followup.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/message-tag-followup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -52,7 +52,7 @@ + #include + + #include +-#include ++#include + + #include "e-util/e-icon-factory.h" + #include "e-util/e-util-private.h" +--- evolution-2.10.1/mail/em-popup.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-popup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -41,7 +41,7 @@ + #include + #include + #include +-#include ++#include + + #include "em-popup.h" + #include "libedataserver/e-msgport.h" +--- evolution-2.10.1/mail/em-composer-utils.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-composer-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + #include +-#include ++#include + + #include "mail-mt.h" + #include "mail-ops.h" +--- evolution-2.10.1/mail/em-account-editor.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-account-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -64,7 +64,7 @@ + #include + #include + +-#include ++#include + #include + #include + +--- evolution-2.10.1/mail/mail-tools.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/mail-tools.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-folder-selection-button.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-selection-button.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + + #include +-#include ++#include + + #include "mail-component.h" + #include "em-folder-tree.h" +--- evolution-2.10.1/mail/em-format-hook.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-format-hook.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + + #include + +-#include ++#include + + + /* class name -> klass map for EMFormat and subclasses */ +--- evolution-2.10.1/mail/em-format-quote.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-format-quote.c 2007-04-30 13:06:43.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + + #include +-#include ++#include + + #include "em-stripsig-filter.h" + #include "em-format-quote.h" +--- evolution-2.10.1/mail/em-utils.c.use-glib-i18n 2007-04-30 13:06:42.000000000 -0400 ++++ evolution-2.10.1/mail/em-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -59,7 +59,7 @@ + #include + #include + #include +-#include ++#include + + #include "mail-component.h" + #include "mail-mt.h" +--- evolution-2.10.1/mail/em-filter-rule.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-filter-rule.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + + #include +-#include ++#include + + #include "em-filter-rule.h" + #include "em-filter-context.h" +--- evolution-2.10.1/mail/mail-component.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-component.c 2007-04-30 13:06:43.000000000 -0400 +@@ -78,7 +78,7 @@ + + #include
+ #include
+-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/importers/mail-importer.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/importers/mail-importer.c 2007-04-30 13:06:43.000000000 -0400 +@@ -38,7 +38,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/mail/mail-send-recv.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-send-recv.c 2007-04-30 13:06:43.000000000 -0400 +@@ -39,7 +39,7 @@ + #include + #include + #include +-#include ++#include + + #include "e-util/e-gtk-utils.h" + #include "libedataserver/e-account-list.h" +--- evolution-2.10.1/mail/em-format-html.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-format-html.c 2007-04-30 13:06:43.000000000 -0400 +@@ -51,7 +51,7 @@ + #include + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-filter-folder-element.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-filter-folder-element.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + + #include +-#include ++#include + + #include "em-filter-folder-element.h" + #include "mail/em-folder-selection-button.h" +--- evolution-2.10.1/mail/em-folder-tree.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-tree.c 2007-04-30 13:06:43.000000000 -0400 +@@ -38,7 +38,7 @@ + #include + #include + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-filter-editor.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-filter-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #endif + + #include +-#include ++#include + + #include "e-util/e-util-private.h" + +--- evolution-2.10.1/mail/em-folder-tree-model.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-tree-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -39,7 +39,7 @@ + + #include + +-#include ++#include + + #include + +--- evolution-2.10.1/mail/message-list.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/message-list.c 2007-04-30 13:06:43.000000000 -0400 +@@ -38,7 +38,7 @@ + + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-folder-properties.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-properties.c 2007-04-30 13:06:43.000000000 -0400 +@@ -44,7 +44,7 @@ + #include + #include + #include +-#include ++#include + + #include "em-folder-properties.h" + #include "em-config.h" +--- evolution-2.10.1/mail/mail-ops.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-ops.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-migrate.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-migrate.c 2007-04-30 13:06:43.000000000 -0400 +@@ -54,7 +54,7 @@ + #include + #include + +-#include ++#include + + #include + #include +@@ -2645,38 +2645,34 @@ + { + GDir *dir; + const char *d; +- struct stat st; +- const GList *l; + char *local, *base; ++ const gchar * const *language_names; + + /* special-case - this means brand new install of evolution */ + /* FIXME: create default folders and stuff... */ + + d(printf("Setting up initial mail tree\n")); + +- base = g_build_filename(evolution_dir, "mail/local", NULL); ++ base = g_build_filename(evolution_dir, "mail", "local", NULL); + if (e_util_mkdir_hier(base, 0777) == -1 && errno != EEXIST) { + g_free(base); + return -1; + } + + /* e.g. try en-AU then en, etc */ +- for (l = gnome_i18n_get_language_list("LC_MESSAGES"); +- l != NULL; +- l = g_list_next(l)) { +- local = g_build_filename(EVOLUTION_PRIVDATADIR, +- "default", +- (char *)l->data, +- "mail/local", NULL); +- if (g_stat(local, &st) == 0) +- goto gotlocal; +- +- g_free(local); +- } +- +- local = g_build_filename(EVOLUTION_PRIVDATADIR, +- "default/C/mail/local", NULL); +-gotlocal: ++ language_names = g_get_language_names (); ++ while (*language_names != NULL) { ++ local = g_build_filename ( ++ EVOLUTION_PRIVDATADIR, "default", ++ *language_names, "mail", "local", NULL); ++ if (g_file_test (local, G_FILE_TEST_EXISTS)) ++ break; ++ g_free (local); ++ language_names++; ++ } ++ ++ /* Make sure we found one. */ ++ g_assert (*language_names != NULL); + + dir = g_dir_open(local, 0, NULL); + if (dir) { +--- evolution-2.10.1/mail/mail-vfolder.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-vfolder.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-folder-selector.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-selector.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-subscribe-editor.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-subscribe-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -44,7 +44,7 @@ + #include "mail-config.h" + + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/mail-autofilter.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/mail-autofilter.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/mail/em-format-html-display.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-format-html-display.c 2007-04-30 13:06:43.000000000 -0400 +@@ -67,7 +67,7 @@ + #include + + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-account-prefs.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-account-prefs.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + +-#include ++#include + + #include "mail-component.h" + #include "mail-config.h" +--- evolution-2.10.1/mail/mail-folder-cache.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-folder-cache.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/mail/em-format.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-format.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-vfolder-editor.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-vfolder-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #endif + + #include +-#include ++#include + + #include "e-util/e-util-private.h" + +--- evolution-2.10.1/mail/mail-mt.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/mail-mt.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + + #include +-#include ++#include + + #include + +--- evolution-2.10.1/mail/em-folder-utils.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/mail/em-folder-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + + #include + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/mail/em-vfolder-rule.c.use-glib-i18n 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.1/mail/em-vfolder-rule.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + + #include + #include +-#include ++#include + + #include "camel/camel-url.h" + #include "em-vfolder-context.h" +--- evolution-2.10.1/a11y/widgets/ea-calendar-item.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/widgets/ea-calendar-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + #include + #include "ea-calendar-item.h" + #include "ea-calendar-cell.h" +--- evolution-2.10.1/a11y/addressbook/ea-minicard-view.c.use-glib-i18n 2007-04-09 09:10:36.000000000 -0400 ++++ evolution-2.10.1/a11y/addressbook/ea-minicard-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -20,11 +20,10 @@ + */ + + #include +-#include + #include + #include + #include +-#include ++#include + #include "ea-minicard.h" + #include "ea-minicard-view.h" + #include "eab-gui-util.h" +--- evolution-2.10.1/a11y/addressbook/ea-addressbook-view.c.use-glib-i18n 2007-04-09 09:10:36.000000000 -0400 ++++ evolution-2.10.1/a11y/addressbook/ea-addressbook-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -22,7 +22,7 @@ + + #include + +-#include ++#include + #include "ea-addressbook-view.h" + + static G_CONST_RETURN gchar* ea_ab_view_get_name (AtkObject *accessible); +--- evolution-2.10.1/a11y/addressbook/ea-minicard.c.use-glib-i18n 2007-04-09 09:10:36.000000000 -0400 ++++ evolution-2.10.1/a11y/addressbook/ea-minicard.c 2007-04-30 13:06:43.000000000 -0400 +@@ -22,7 +22,7 @@ + + #include + #include +-#include ++#include + #include "ea-minicard.h" + #include "ea-minicard-view.h" + #include "e-minicard.h" +--- evolution-2.10.1/a11y/calendar/ea-day-view.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-day-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include "ea-gnome-calendar.h" + #include "calendar-commands.h" + #include +-#include ++#include + + static void ea_day_view_class_init (EaDayViewClass *klass); + +--- evolution-2.10.1/a11y/calendar/ea-jump-button.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-jump-button.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include "ea-week-view.h" + #include "e-week-view.h" + #include +-#include ++#include + + static void ea_jump_button_class_init (EaJumpButtonClass *klass); + +--- evolution-2.10.1/a11y/calendar/ea-cal-view-event.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-cal-view-event.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include "ea-day-view.h" + #include "ea-week-view.h" + #include +-#include ++#include + + static void ea_cal_view_event_class_init (EaCalViewEventClass *klass); + static void ea_cal_view_event_init (EaCalViewEvent *a11y); +--- evolution-2.10.1/a11y/calendar/ea-week-view.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-week-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include "ea-gnome-calendar.h" + #include "calendar-commands.h" + #include +-#include ++#include + + static void ea_week_view_class_init (EaWeekViewClass *klass); + +--- evolution-2.10.1/a11y/calendar/ea-week-view-main-item.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-week-view-main-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include "ea-week-view.h" + #include "ea-week-view-cell.h" + #include "ea-cell-table.h" +-#include ++#include + + /* EaWeekViewMainItem */ + static void ea_week_view_main_item_class_init (EaWeekViewMainItemClass *klass); +--- evolution-2.10.1/a11y/calendar/ea-day-view-main-item.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-day-view-main-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include "ea-day-view.h" + #include "ea-day-view-cell.h" + #include "ea-cell-table.h" +-#include ++#include + + /* EaDayViewMainItem */ + static void ea_day_view_main_item_class_init (EaDayViewMainItemClass *klass); +--- evolution-2.10.1/a11y/calendar/ea-gnome-calendar.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-gnome-calendar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + + static void ea_gnome_calendar_class_init (EaGnomeCalendarClass *klass); + +--- evolution-2.10.1/a11y/calendar/ea-cal-view.c.use-glib-i18n 2007-04-09 09:10:37.000000000 -0400 ++++ evolution-2.10.1/a11y/calendar/ea-cal-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include "calendar-commands.h" + #include "goto.h" + #include +-#include ++#include + + static void ea_cal_view_class_init (EaCalViewClass *klass); + +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-popup.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-popup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include "a11y/gal-a11y-util.h" + #include "table/e-cell-popup.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-cell-popup.h" + #include "gal-a11y-e-cell-registry.h" +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-cell.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-cell.c 2007-04-30 13:06:43.000000000 -0400 +@@ -15,7 +15,7 @@ + #include "a11y/gal-a11y-util.h" + #include "table/e-table.h" + #include "table/e-tree.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-cell.h" + #include "gal-a11y-e-cell-vbox.h" +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-toggle.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-toggle.c 2007-04-30 13:06:43.000000000 -0400 +@@ -2,7 +2,7 @@ + + #include "table/e-cell-toggle.h" + #include "table/e-table-model.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-cell-toggle.h" + +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-text.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-text.c 2007-04-30 13:06:43.000000000 -0400 +@@ -14,7 +14,7 @@ + + #include "a11y/gal-a11y-util.h" + #include "table/e-cell-text.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-cell-text.h" + +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-tree.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-cell-tree.c 2007-04-30 13:06:43.000000000 -0400 +@@ -14,7 +14,7 @@ + #include "table/e-cell-tree.h" + #include "table/e-table.h" + #include "table/e-tree-table-adapter.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-cell-tree.h" + #include "gal-a11y-e-cell-registry.h" +--- evolution-2.10.1/a11y/e-table/gal-a11y-e-table-click-to-add.c.use-glib-i18n 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.1/a11y/e-table/gal-a11y-e-table-click-to-add.c 2007-04-30 13:06:43.000000000 -0400 +@@ -13,7 +13,7 @@ + #include "table/e-table-click-to-add.h" + #include "table/e-table-group.h" + #include "table/e-table-group-leaf.h" +-#include "e-util/e-i18n.h" ++#include + + #include "gal-a11y-e-table-click-to-add.h" + #include "gal-a11y-e-table-click-to-add-factory.h" +--- evolution-2.10.1/filter/rule-editor.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/rule-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + +-#include ++#include + + #include "e-util/e-error.h" + #include "e-util/e-util-private.h" +--- evolution-2.10.1/filter/filter-label.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-label.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/filter/filter-part.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-part.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include + #include +-#include ++#include + + #include "filter-part.h" + #include "rule-context.h" +--- evolution-2.10.1/filter/filter-datespec.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/filter/filter-datespec.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + + #include +-#include ++#include + #include + + #include "filter-datespec.h" +--- evolution-2.10.1/filter/rule-context.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/rule-context.c 2007-04-30 13:06:43.000000000 -0400 +@@ -34,7 +34,7 @@ + + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/filter/filter-option.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-option.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + + #include +-#include ++#include + + #include "filter-option.h" + #include "filter-part.h" +--- evolution-2.10.1/filter/filter-file.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-file.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include + +-#include ++#include + #include + + #include +--- evolution-2.10.1/filter/filter-input.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-input.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + + #include +-#include ++#include + + #include "filter-input.h" + #include "libedataserver/e-sexp.h" +--- evolution-2.10.1/filter/filter-rule.c.use-glib-i18n 2007-04-09 09:09:28.000000000 -0400 ++++ evolution-2.10.1/filter/filter-rule.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + + #include +-#include ++#include + + #include "e-util/e-error.h" + #include "filter-rule.h" +--- evolution-2.10.1/widgets/misc/e-calendar-item.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-calendar-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -43,7 +43,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + +--- evolution-2.10.1/widgets/misc/e-unicode.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-unicode.c 2007-04-30 13:06:43.000000000 -0400 +@@ -42,7 +42,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-unicode.h" + + #define d(x) x +--- evolution-2.10.1/widgets/misc/e-task-widget.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-task-widget.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include ++#include + + + #define SPACING 2 +--- evolution-2.10.1/widgets/misc/e-filter-bar.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-filter-bar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include ++#include + + #include "e-dropdown-button.h" + #include "e-filter-bar.h" +--- evolution-2.10.1/widgets/misc/e-dateedit.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-dateedit.c 2007-04-30 13:06:43.000000000 -0400 +@@ -58,7 +58,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/widgets/misc/e-charset-picker.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-charset-picker.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/widgets/misc/e-clipped-label.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-clipped-label.c 2007-04-30 13:06:43.000000000 -0400 +@@ -40,7 +40,7 @@ + + #include + #include +-#include ++#include + + + static void e_clipped_label_class_init (EClippedLabelClass *class); +--- evolution-2.10.1/widgets/misc/e-cell-percent.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-cell-percent.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + + #include "e-cell-percent.h" + +--- evolution-2.10.1/widgets/misc/e-cell-date-edit.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-cell-date-edit.c 2007-04-30 13:06:43.000000000 -0400 +@@ -44,7 +44,7 @@ + #include
+ + #include +-#include ++#include + + #include + +--- evolution-2.10.1/widgets/misc/e-map.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-map.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + + #include "e-util/e-util-private.h" + #include "e-util/e-util.h" +--- evolution-2.10.1/widgets/misc/e-canvas-background.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-canvas-background.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas.h" + #include "misc/e-canvas-utils.h" +--- evolution-2.10.1/widgets/misc/e-selection-model.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-selection-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-marshal.h" + #include "e-util/e-util.h" + +--- evolution-2.10.1/widgets/misc/e-selection-model-array.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-selection-model-array.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-selection-model-array.h" +--- evolution-2.10.1/widgets/misc/e-send-options.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-send-options.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + +--- evolution-2.10.1/widgets/misc/e-calendar.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-calendar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -43,7 +43,7 @@ + #include + #include + #include +-#include ++#include + + #define E_CALENDAR_SMALL_FONT_PTSIZE 6 + +--- evolution-2.10.1/widgets/misc/e-reflow.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-reflow.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + + #include "text/e-text.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-marshal.h" + #include "e-util/e-util.h" + #include "misc/e-unicode.h" +--- evolution-2.10.1/widgets/misc/e-search-bar.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-search-bar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -42,7 +42,7 @@ + #include + #include + +-#include ++#include + + #include + +--- evolution-2.10.1/widgets/misc/e-attachment-bar.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-attachment-bar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include "e-attachment.h" +--- evolution-2.10.1/widgets/misc/e-attachment.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-attachment.c 2007-04-30 13:06:43.000000000 -0400 +@@ -51,7 +51,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include "e-util/e-mktemp.h" +--- evolution-2.10.1/widgets/misc/e-canvas-vbox.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-canvas-vbox.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-canvas.h" +--- evolution-2.10.1/widgets/misc/e-activity-handler.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-activity-handler.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + +-#include ++#include + #include + + #include +--- evolution-2.10.1/widgets/misc/e-image-chooser.c.use-glib-i18n 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.1/widgets/misc/e-image-chooser.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + + #include +-#include ++#include + + #include "e-image-chooser.h" + #include "e-util/e-util-marshal.h" +--- evolution-2.10.1/widgets/menus/gal-view-new-dialog.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-new-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + + #include "table/e-table-scrolled.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-util-private.h" + #include "misc/e-unicode.h" +@@ -92,7 +92,7 @@ + "gal-view-new-dialog.glade", + NULL); + +- gui = glade_xml_new (filename, NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new (filename, NULL, GETTEXT_PACKAGE); + g_free (filename); + dialog->gui = gui; + +--- evolution-2.10.1/widgets/menus/gal-view-factory-etable.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-factory-etable.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "gal-view-etable.h" +--- evolution-2.10.1/widgets/menus/gal-define-views-model.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-define-views-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "gal-define-views-model.h" +--- evolution-2.10.1/widgets/menus/gal-define-views-dialog.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-define-views-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + + #include "table/e-table-scrolled.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-util-private.h" + +@@ -80,7 +80,7 @@ + } + + /* ETable creation */ +-#define SPEC "" \ ++#define SPEC "" \ + "" \ + " " \ + "" +@@ -250,7 +250,7 @@ + + dialog->collection = NULL; + +- gui = glade_xml_new (filename, NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new (filename, NULL, GETTEXT_PACKAGE); + g_free (filename); + dialog->gui = gui; + +--- evolution-2.10.1/widgets/menus/gal-view-instance-save-as-dialog.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-instance-save-as-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + + #include "table/e-table-scrolled.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-private.h" + + #include "gal-define-views-model.h" +@@ -197,7 +197,7 @@ + + dialog->instance = NULL; + +- gui = glade_xml_new_with_domain (filename , NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new_with_domain (filename , NULL, GETTEXT_PACKAGE); + g_free (filename); + dialog->gui = gui; + +@@ -235,7 +235,7 @@ + + /* For use from libglade. */ + /* ETable creation */ +-#define SPEC "" \ ++#define SPEC "" \ + "" \ + " " \ + "" +--- evolution-2.10.1/widgets/menus/gal-view-instance.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-instance.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-xml-utils.h" + #include "misc/e-unicode.h" +--- evolution-2.10.1/widgets/menus/gal-view-collection.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-collection.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-xml-utils.h" + #include "misc/e-unicode.h" +--- evolution-2.10.1/widgets/menus/gal-view-menus.c.use-glib-i18n 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.1/widgets/menus/gal-view-menus.c 2007-04-30 13:06:43.000000000 -0400 +@@ -20,7 +20,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/widgets/table/e-cell-pixbuf.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-pixbuf.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include + #include "e-cell-pixbuf.h" + +--- evolution-2.10.1/widgets/table/e-table-field-chooser-dialog.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-field-chooser-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-table-field-chooser-dialog.h" +--- evolution-2.10.1/widgets/table/e-table-sorter.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-sorter.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-table-sorter.h" +--- evolution-2.10.1/widgets/table/e-table-selection-model.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-selection-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-table-selection-model.h" +--- evolution-2.10.1/widgets/table/e-table-group-leaf.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-group-leaf.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas.h" + +--- evolution-2.10.1/widgets/table/e-table-field-chooser.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-field-chooser.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-util-private.h" + +@@ -156,7 +156,7 @@ + gchar *filename = g_build_filename (EVOLUTION_GLADEDIR, + "e-table-field-chooser.glade", + NULL); +- gui = glade_xml_new (filename, NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new (filename, NULL, GETTEXT_PACKAGE); + g_free (filename); + etfc->gui = gui; + +--- evolution-2.10.1/widgets/table/e-table-item.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -38,7 +38,7 @@ + + #include "a11y/e-table/gal-a11y-e-table-item-factory.h" + #include "a11y/e-table/gal-a11y-e-table-item.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas.h" + #include "misc/e-canvas-utils.h" +--- evolution-2.10.1/widgets/table/e-table.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + + #include "a11y/e-table/gal-a11y-e-table.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas.h" + #include "misc/e-canvas-background.h" +--- evolution-2.10.1/widgets/table/e-table-group-container.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-group-container.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + + #include "text/e-text.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas-utils.h" + #include "misc/e-canvas.h" +--- evolution-2.10.1/widgets/table/e-cell-float.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-float.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-cell-float.h" +--- evolution-2.10.1/widgets/table/e-tree-scrolled.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-tree-scrolled.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-tree-scrolled.h" +--- evolution-2.10.1/widgets/table/e-table-col.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-col.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-table-col.h" +--- evolution-2.10.1/widgets/table/e-table-scrolled.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-scrolled.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + + #include "e-table.h" + #include "e-table-scrolled.h" +--- evolution-2.10.1/widgets/table/e-table-header-item.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-header-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-marshal.h" + #include "e-util/e-util.h" + #include "e-util/e-xml-utils.h" +@@ -1531,7 +1531,7 @@ + ((ethi->table || ethi->tree) ? 0 : 4) + + ((e_table_header_count (ethi->eth) > 1) ? 0 : 8), + ((e_table_sort_info_get_can_group (ethi->sort_info)) ? 0 : 16) + +- 128, info, E_I18N_DOMAIN); ++ 128, info, GETTEXT_PACKAGE); + + menu_item = gtk_menu_item_new_with_label (_("Sort By")); + gtk_widget_show (menu_item); +@@ -1813,7 +1813,7 @@ + ((ethi->table || ethi->tree) ? 0 : 4) + + ((e_table_header_count (ethi->eth) > 1) ? 0 : 8), + ((e_table_sort_info_get_can_group (ethi->sort_info)) ? 0 : 16) + +- 128, info, E_I18N_DOMAIN); ++ 128, info, GETTEXT_PACKAGE); + g_object_ref (popup); + gtk_object_sink (GTK_OBJECT (popup)); + g_signal_connect (popup, "selection-done", +--- evolution-2.10.1/widgets/table/e-table-field-chooser-item.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-field-chooser-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-xml-utils.h" + #include "misc/e-canvas.h" +--- evolution-2.10.1/widgets/table/e-table-config.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-config.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-private.h" + #include "e-util/e-util.h" + #include "misc/e-unicode.h" +@@ -539,7 +539,7 @@ + } + } + +-char *spec = "" + "" + " " +@@ -1093,14 +1093,14 @@ + g_build_filename (EVOLUTION_GLADEDIR, + "e-table-config.glade", + NULL); +- gui = glade_xml_new (filename, NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new (filename, NULL, GETTEXT_PACKAGE); + g_free (filename); + } else { + gchar *filename = + g_build_filename (EVOLUTION_GLADEDIR, + "e-table-config-no-group.glade", + NULL); +- gui = glade_xml_new (filename, NULL, E_I18N_DOMAIN); ++ gui = glade_xml_new (filename, NULL, GETTEXT_PACKAGE); + g_free (filename); + } + +--- evolution-2.10.1/widgets/table/e-cell-text.c.use-glib-i18n 2007-04-30 13:06:42.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-text.c 2007-04-30 13:06:43.000000000 -0400 +@@ -50,7 +50,7 @@ + #include "a11y/e-table/gal-a11y-e-cell-registry.h" + #include "a11y/e-table/gal-a11y-e-cell-text.h" + #include "text/e-text.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-text-event-processor.h" + #include "e-util/e-text-event-processor-emacs-like.h" + #include "e-util/e-util.h" +--- evolution-2.10.1/widgets/table/e-tree.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-tree.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + + #include "a11y/e-table/gal-a11y-e-tree.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "e-util/e-util-marshal.h" + #include "misc/e-canvas.h" +--- evolution-2.10.1/widgets/table/e-cell-number.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-number.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-cell-number.h" +--- evolution-2.10.1/widgets/table/e-tree-selection-model.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-tree-selection-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + + #include "table/e-tree-table-adapter.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + + #include "e-tree-selection-model.h" +--- evolution-2.10.1/widgets/table/e-cell-combo.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-combo.c 2007-04-30 13:06:43.000000000 -0400 +@@ -59,7 +59,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-unicode.h" + +--- evolution-2.10.1/widgets/table/e-table-click-to-add.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-table-click-to-add.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + + #include "a11y/e-table/gal-a11y-e-table-click-to-add.h" + #include "text/e-text.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-marshal.h" + #include "e-util/e-util.h" + #include "misc/e-canvas-utils.h" +--- evolution-2.10.1/widgets/table/e-cell-date.c.use-glib-i18n 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.1/widgets/table/e-cell-date.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-unicode.h" + +--- evolution-2.10.1/widgets/text/e-text.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/widgets/text/e-text.c 2007-04-30 13:06:43.000000000 -0400 +@@ -52,7 +52,7 @@ + #include "misc/e-canvas.h" + #include "misc/e-canvas-utils.h" + #include "misc/e-unicode.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-text-event-processor-emacs-like.h" + #include "e-util/e-util.h" + +--- evolution-2.10.1/widgets/text/e-completion-view.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/widgets/text/e-completion-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include "table/e-table-scrolled.h" + #include "table/e-table-simple.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util-marshal.h" + + #include "e-completion-view.h" +@@ -623,7 +623,7 @@ + /* XXX toshok - we need to add sorting to this etable, through the use + of undisplayed fields of all the sort keys we want to use */ + static char *simple_spec = +-"" ++"" + " " +--- evolution-2.10.1/widgets/text/e-entry.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/widgets/text/e-entry.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-util.h" + #include "misc/e-canvas.h" + #include "misc/e-canvas-utils.h" +--- evolution-2.10.1/plugins/calendar-file/calendar-file.c.use-glib-i18n 2007-04-09 09:09:11.000000000 -0400 ++++ evolution-2.10.1/plugins/calendar-file/calendar-file.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + + GtkWidget *e_calendar_file_dummy (EPlugin *epl, EConfigHookItemFactoryData *data); +--- evolution-2.10.1/plugins/mark-all-read/mark-all-read.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/mark-all-read/mark-all-read.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/publish-calendar/publish-calendar.c.use-glib-i18n 2007-04-09 09:09:16.000000000 -0400 ++++ evolution-2.10.1/plugins/publish-calendar/publish-calendar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/calendar-weather/calendar-weather.c.use-glib-i18n 2007-04-09 09:09:15.000000000 -0400 ++++ evolution-2.10.1/plugins/calendar-weather/calendar-weather.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/import-ics-attachments/icsimporter.c.use-glib-i18n 2007-04-09 09:09:11.000000000 -0400 ++++ evolution-2.10.1/plugins/import-ics-attachments/icsimporter.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/backup-restore/backup-restore.c.use-glib-i18n 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/backup-restore/backup-restore.c 2007-04-30 13:06:43.000000000 -0400 +@@ -2,7 +2,7 @@ + #include + #include + #include +-#include ++#include + #include "shell/es-menu.h" + + void org_gnome_backup_restore_backup (EPlugin *ep, ESMenuTargetShell *target); +--- evolution-2.10.1/plugins/backup-restore/backup.c.use-glib-i18n 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/backup-restore/backup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -8,7 +8,7 @@ + #include + #include + +-#include ++#include + #include + + #define EVOLUTION "evolution-" BASE_VERSION +--- evolution-2.10.1/plugins/exchange-operations/exchange-send-options.c.use-glib-i18n 2007-04-09 09:09:13.000000000 -0400 ++++ evolution-2.10.1/plugins/exchange-operations/exchange-send-options.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include "e-util/e-util-private.h" +--- evolution-2.10.1/plugins/default-source/default-source.c.use-glib-i18n 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/default-source/default-source.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + GtkWidget* org_gnome_default_book (EPlugin *epl, EConfigHookItemFactoryData *data); + void commit_default_calendar (EPlugin *epl, EConfigTarget *target); +--- evolution-2.10.1/plugins/subject-thread/subject-thread.c.use-glib-i18n 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/subject-thread/subject-thread.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/calendar-http/calendar-http.c.use-glib-i18n 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/calendar-http/calendar-http.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include + + GtkWidget *e_calendar_http_url (EPlugin *epl, EConfigHookItemFactoryData *data); +--- evolution-2.10.1/plugins/itip-formatter/itip-formatter.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/itip-formatter/itip-formatter.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/itip-formatter/itip-view.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/itip-formatter/itip-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/groupwise-features/share-folder-common.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/share-folder-common.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/groupwise-features/junk-settings.c.use-glib-i18n 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/junk-settings.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/groupwise-features/install-shared.c.use-glib-i18n 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/install-shared.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/groupwise-features/process-meeting.c.use-glib-i18n 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/process-meeting.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/plugins/groupwise-features/addressbook-groupwise.c.use-glib-i18n 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/addressbook-groupwise.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + #include + + void commit_groupwise_addressbook (EPlugin *epl, EConfigTarget *target); +--- evolution-2.10.1/plugins/groupwise-features/send-options.c.use-glib-i18n 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-features/send-options.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include "mail/em-account-editor.h" +--- evolution-2.10.1/plugins/bbdb/gaimbuddies.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/bbdb/gaimbuddies.c 2007-04-30 13:06:43.000000000 -0400 +@@ -40,7 +40,7 @@ + #include + + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/plugins/bbdb/bbdb.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/plugins/bbdb/bbdb.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #endif + + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/e-util/e-categories-config.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-categories-config.c 2007-04-30 13:06:43.000000000 -0400 +@@ -10,7 +10,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/e-util/e-text-event-processor.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-text-event-processor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,8 @@ + + #include + +-#include "e-i18n.h" ++#include ++ + #include "e-util-marshal.h" + #include "e-text-event-processor.h" + #include "e-util.h" +--- evolution-2.10.1/e-util/e-util.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-util.c 2007-04-30 13:06:43.000000000 -0400 +@@ -1112,20 +1112,6 @@ + } + } + +-char * +-e_gettext (const char *msgid) +-{ +- static gboolean initialized = FALSE; +- +- if (!initialized) { +- bindtextdomain (E_I18N_DOMAIN, EVOLUTION_LOCALEDIR); +- bind_textdomain_codeset (E_I18N_DOMAIN, "UTF-8"); +- initialized = TRUE; +- } +- +- return dgettext (E_I18N_DOMAIN, msgid); +-} +- + cairo_font_options_t * + get_font_options () + { +--- evolution-2.10.1/e-util/e-popup.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-popup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -42,7 +42,7 @@ + + #include + +-#include ++#include + + #define d(x) + +--- evolution-2.10.1/e-util/e-xml-utils.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-xml-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,155 +36,14 @@ + #include + + #include ++#include + #include + #include + #include + +-#include "e-i18n.h" + #include "e-util.h" + #include "e-xml-utils.h" + +-/* Returns the first child with the name child_name and the "lang" +- * attribute that matches the current LC_MESSAGES, or else, the first +- * child with the name child_name and no "lang" attribute. +- */ +-xmlNode * +-e_xml_get_child_by_name_by_lang (const xmlNode *parent, +- const xmlChar *child_name, +- const gchar *lang) +-{ +-#ifdef G_OS_WIN32 +- gchar *freeme = NULL; +-#endif +- xmlNode *child; +- /* This is the default version of the string. */ +- xmlNode *C = NULL; +- +- g_return_val_if_fail (parent != NULL, NULL); +- g_return_val_if_fail (child_name != NULL, NULL); +- +- if (lang == NULL) { +-#ifndef G_OS_WIN32 +-#ifdef HAVE_LC_MESSAGES +- lang = setlocale (LC_MESSAGES, NULL); +-#else +- lang = setlocale (LC_CTYPE, NULL); +-#endif +-#else +- lang = freeme = g_win32_getlocale (); +-#endif +- } +- for (child = parent->xmlChildrenNode; child != NULL; child = child->next) { +- if (xmlStrcmp (child->name, child_name) == 0) { +- xmlChar *this_lang = xmlGetProp (child, "lang"); +- if (this_lang == NULL) { +- C = child; +- } else if (xmlStrcmp(this_lang, lang) == 0) { +-#ifdef G_OS_WIN32 +- g_free (freeme); +-#endif +- return child; +- } +- } +- } +-#ifdef G_OS_WIN32 +- g_free (freeme); +-#endif +- return C; +-} +- +-static xmlNode * +-e_xml_get_child_by_name_by_lang_list_with_score (const xmlNode *parent, +- const gchar *name, +- const GList *lang_list, +- gint *best_lang_score) +-{ +- xmlNodePtr best_node = NULL, node; +- +- for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { +- xmlChar *lang; +- +- if (node->name == NULL || strcmp (node->name, name) != 0) { +- continue; +- } +- lang = xmlGetProp (node, "xml:lang"); +- if (lang != NULL) { +- const GList *l; +- gint i; +- +- for (l = lang_list, i = 0; +- l != NULL && i < *best_lang_score; +- l = l->next, i++) { +- if (strcmp ((gchar *) l->data, lang) == 0) { +- best_node = node; +- *best_lang_score = i; +- } +- } +- } else { +- if (best_node == NULL) { +- best_node = node; +- } +- } +- xmlFree (lang); +- if (*best_lang_score == 0) { +- return best_node; +- } +- } +- +- return best_node; +-} +- +-/* +- * e_xml_get_child_by_name_by_lang_list: +- * +- */ +-xmlNode * +-e_xml_get_child_by_name_by_lang_list (const xmlNode *parent, +- const gchar *name, +- const GList *lang_list) +-{ +- gint best_lang_score = INT_MAX; +- +- g_return_val_if_fail (parent != NULL, NULL); +- g_return_val_if_fail (name != NULL, NULL); +- +- if (lang_list == NULL) { +- lang_list = gnome_i18n_get_language_list ("LC_MESSAGES"); +- } +- return e_xml_get_child_by_name_by_lang_list_with_score +- (parent,name, +- lang_list, +- &best_lang_score); +-} +- +-/* +- * e_xml_get_child_by_name_no_lang +- * +- */ +-xmlNode * +-e_xml_get_child_by_name_no_lang (const xmlNode *parent, const gchar *name) +-{ +- xmlNodePtr node; +- +- g_return_val_if_fail (parent != NULL, NULL); +- g_return_val_if_fail (name != NULL, NULL); +- +- for (node = parent->xmlChildrenNode; node != NULL; node = node->next) { +- xmlChar *lang; +- +- if (node->name == NULL || strcmp (node->name, name) != 0) { +- continue; +- } +- lang = xmlGetProp (node, "xml:lang"); +- if (lang == NULL) { +- return node; +- } +- xmlFree (lang); +- } +- +- return NULL; +-} +- + gint + e_xml_get_integer_prop_by_name (const xmlNode *parent, const xmlChar *prop_name) + { +--- evolution-2.10.1/e-util/e-config.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-config.c 2007-04-30 13:06:43.000000000 -0400 +@@ -45,7 +45,7 @@ + + #include + +-#include ++#include + + #define d(x) + +--- evolution-2.10.1/e-util/e-dialog-utils.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-dialog-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -46,7 +46,7 @@ + #include + + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/e-util/e-import.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-import.c 2007-04-30 13:06:43.000000000 -0400 +@@ -45,7 +45,7 @@ + + #include + +-#include ++#include + + #define d(x) + +--- evolution-2.10.1/e-util/Makefile.am.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/Makefile.am 2007-04-30 13:06:43.000000000 -0400 +@@ -108,7 +108,6 @@ + eggtrayicon.c \ + eggtrayicon.h \ + e-bit-array.c \ +- e-i18n.h \ + e-sorter.c \ + e-sorter-array.c \ + e-text-event-processor-emacs-like.c \ +--- evolution-2.10.1/e-util/e-error.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-error.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/e-util/e-event.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-event.c 2007-04-30 13:06:43.000000000 -0400 +@@ -42,7 +42,7 @@ + + #include + +-#include ++#include + #include + + #define d(x) +--- evolution-2.10.1/e-util/e-xml-utils.h.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-xml-utils.h 2007-04-30 13:06:43.000000000 -0400 +@@ -30,18 +30,6 @@ + + G_BEGIN_DECLS + +-/* lang set to NULL means use the current locale. */ +-xmlNode *e_xml_get_child_by_name_by_lang (const xmlNode *parent, +- const xmlChar *child_name, +- const gchar *lang); +-/* lang_list set to NULL means use the current locale. */ +-xmlNode *e_xml_get_child_by_name_by_lang_list (const xmlNode *parent, +- const gchar *name, +- const GList *lang_list); +-xmlNode *e_xml_get_child_by_name_no_lang (const xmlNode *parent, +- const gchar *name); +- +- + gint e_xml_get_integer_prop_by_name (const xmlNode *parent, + const xmlChar *prop_name); + gint e_xml_get_integer_prop_by_name_with_default (const xmlNode *parent, +--- evolution-2.10.1/e-util/e-i18n.h.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-i18n.h 2007-04-30 13:06:43.000000000 -0400 +@@ -1,74 +0,0 @@ +-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +-/* +- * e-i18n.h +- * Copyright 2000, 2001, Ximian, Inc. +- * +- * Authors: +- * Chris Lahey +- * +- * Copied from gnome-i18nP.h, because this header is typically not installed +- * +- * This file has to be included before any file from the GNOME libraries +- * to have this override the definitions that are pulled from the gnome-i18n.h +- * +- * the difference is that gnome-i18n.h is used for applications, and this is +- * used by libraries (because libraries have to use dcgettext instead of +- * gettext and they need to provide the translation domain, unlike apps). +- * +- * So you can just put this after you include config.h +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Library General Public +- * License, version 2, as published by the Free Software Foundation. +- * +- * This library 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 +- * Library General Public License for more details. +- * +- * You should have received a copy of the GNU Library General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +- * 02111-1307, USA. +- */ +- +-#ifndef __E_I18N_H__ +-#define __E_I18N_H__ +- +-#include +- +-G_BEGIN_DECLS +- +-#ifdef ENABLE_NLS +- /* this function is defined in e-util.c */ +- extern char *e_gettext (const char *msgid); +-# undef _ +-# ifdef GNOME_EXPLICIT_TRANSLATION_DOMAIN +-/* No parentheses allowed here since that breaks string concatenation. */ +-# define E_I18N_DOMAIN GNOME_EXPLICIT_TRANSLATION_DOMAIN +-# else +-/* No parentheses allowed here since that breaks string concatenation. */ +-# define E_I18N_DOMAIN GETTEXT_PACKAGE +-# endif +-# define _(String) e_gettext (String) +-# ifdef gettext_noop +-# define N_(String) gettext_noop (String) +-# else +-# define N_(String) (String) +-# endif +-#else +-/* Stubs that do something close enough. */ +-# define textdomain(String) (String) +-# define gettext(String) (String) +-# define dgettext(Domain,Message) (Message) +-# define dcgettext(Domain,Message,Type) (Message) +-# define bindtextdomain(Domain,Directory) (Domain) +-# define _(String) (String) +-# define N_(String) (String) +-/* No parentheses allowed here since that breaks string concatenation. */ +-# define E_I18N_DOMAIN "" +-#endif +- +-G_END_DECLS +- +-#endif /* __E_I18N_H__ */ +--- evolution-2.10.1/e-util/Makefile.in.use-glib-i18n 2007-04-30 13:09:50.000000000 -0400 ++++ evolution-2.10.1/e-util/Makefile.in 2007-04-30 13:10:02.000000000 -0400 +@@ -90,7 +90,7 @@ + e-html-utils.c e-icon-factory.c e-import.c e-menu.c e-mktemp.c \ + e-plugin.c e-popup.c e-print.c e-profile-event.c e-request.c \ + e-signature.c e-signature-list.c eggtrayicon.c eggtrayicon.h \ +- e-bit-array.c e-i18n.h e-sorter.c e-sorter-array.c \ ++ e-bit-array.c e-sorter.c e-sorter-array.c \ + e-text-event-processor-emacs-like.c e-text-event-processor.c \ + e-util.c e-util-private.h e-xml-utils.c e-win32-reloc.c + @OS_WIN32_TRUE@am__objects_4 = e-win32-reloc.lo +@@ -588,7 +588,6 @@ + eggtrayicon.c \ + eggtrayicon.h \ + e-bit-array.c \ +- e-i18n.h \ + e-sorter.c \ + e-sorter-array.c \ + e-text-event-processor-emacs-like.c \ +--- evolution-2.10.1/e-util/e-menu.c.use-glib-i18n 2007-04-09 09:10:16.000000000 -0400 ++++ evolution-2.10.1/e-util/e-menu.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + +-#include ++#include + #include + + #include +--- evolution-2.10.1/addressbook/printing/e-contact-print-envelope.c.use-glib-i18n 2007-04-09 09:07:43.000000000 -0400 ++++ evolution-2.10.1/addressbook/printing/e-contact-print-envelope.c 2007-04-30 13:06:43.000000000 -0400 +@@ -22,7 +22,7 @@ + #include + #include "addressbook/printing/e-contact-print-envelope.h" + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/printing/e-contact-print.c.use-glib-i18n 2007-04-09 09:07:43.000000000 -0400 ++++ evolution-2.10.1/addressbook/printing/e-contact-print.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/component/addressbook-config.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook-config.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + #include + #include +-#include ++#include + + #include + +--- evolution-2.10.1/addressbook/gui/component/addressbook.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/component/addressbook-migrate.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook-migrate.c 2007-04-30 13:06:43.000000000 -0400 +@@ -35,7 +35,7 @@ + + #include + #include +-#include ++#include + + #include + +--- evolution-2.10.1/addressbook/gui/component/autocompletion-config.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/autocompletion-config.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/component/addressbook-view.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/contact-list-editor/e-contact-list-editor.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-list-editor/e-contact-list-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/widgets/e-minicard-view-widget.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-minicard-view-widget.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + #include + #include + #include +-#include ++#include + + #include "eab-marshal.h" + #include "e-minicard-view-widget.h" +--- evolution-2.10.1/addressbook/gui/widgets/e-addressbook-reflow-adapter.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-addressbook-reflow-adapter.c 2007-04-30 13:06:43.000000000 -0400 +@@ -4,7 +4,7 @@ + #include + #include + +-#include ++#include + #include "eab-marshal.h" + #include "e-addressbook-reflow-adapter.h" + #include "e-addressbook-model.h" +--- evolution-2.10.1/addressbook/gui/widgets/eab-contact-display.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/eab-contact-display.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include "e-util/e-icon-factory.h" + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/widgets/gal-view-factory-minicard.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/gal-view-factory-minicard.c 2007-04-30 13:06:43.000000000 -0400 +@@ -13,7 +13,7 @@ + #endif + + #include +-#include ++#include + #include "gal-view-factory-minicard.h" + #include "gal-view-minicard.h" + +--- evolution-2.10.1/addressbook/gui/widgets/e-addressbook-view.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-addressbook-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + +-#include ++#include + #include + #include + #include
+--- evolution-2.10.1/addressbook/gui/widgets/e-minicard.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-minicard.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/widgets/e-minicard-label.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-minicard-label.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/widgets/e-minicard-view.c.use-glib-i18n 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/widgets/e-minicard-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + #include "a11y/addressbook/ea-addressbook.h" + +--- evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c.use-glib-i18n 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/contact-editor/e-contact-quick-add.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/e-contact-quick-add.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-address.c.use-glib-i18n 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-address.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/contact-editor/eab-editor.c.use-glib-i18n 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/eab-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + + #include "eab-editor.h" + #include "addressbook/gui/widgets/eab-gui-util.h" +--- evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-im.c.use-glib-i18n 2007-04-09 09:07:40.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor-im.c 2007-04-30 13:06:43.000000000 -0400 +@@ -22,7 +22,7 @@ + #include + #include "e-contact-editor-im.h" + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/contact-editor/e-contact-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/composer/e-msg-composer.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/composer/e-msg-composer.c 2007-04-30 13:06:43.000000000 -0400 +@@ -63,7 +63,7 @@ + + #include + #include +-#include ++#include + #include + #include + +--- evolution-2.10.1/composer/e-msg-composer-select-file.c.use-glib-i18n 2007-04-09 09:09:32.000000000 -0400 ++++ evolution-2.10.1/composer/e-msg-composer-select-file.c 2007-04-30 13:06:43.000000000 -0400 +@@ -41,7 +41,7 @@ + #endif + + #include +-#include ++#include + + #include "e-msg-composer-select-file.h" + #include +--- evolution-2.10.1/composer/e-msg-composer-hdrs.c.use-glib-i18n 2007-04-09 09:09:32.000000000 -0400 ++++ evolution-2.10.1/composer/e-msg-composer-hdrs.c 2007-04-30 13:06:43.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/shell/e-shell-window.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-window.c 2007-04-30 13:06:43.000000000 -0400 +@@ -51,7 +51,7 @@ + #include + #include + +-#include ++#include + #include + + #include +--- evolution-2.10.1/shell/e-shell-utils.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + + #include +-#include ++#include + + #include "e-util/e-util-private.h" + +--- evolution-2.10.1/shell/e-shell.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell.c 2007-04-30 13:06:43.000000000 -0400 +@@ -44,7 +44,7 @@ + #undef interface + #endif + +-#include ++#include + #include + + #include +--- evolution-2.10.1/shell/e-shell-folder-title-bar.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-folder-title-bar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include "misc/e-clipped-label.h" +--- evolution-2.10.1/shell/e-shell-settings-dialog.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-settings-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -148,9 +148,9 @@ + { + EShellSettingsDialogPrivate *priv; + Bonobo_ServerInfoList *control_list; ++ const gchar * const *language_names; + CORBA_Environment ev; +- const GList *l; +- GSList *language_list; ++ GSList *languages = NULL; + GList *page_list; + GList *p; + int i, j; +@@ -168,10 +168,9 @@ + + CORBA_exception_free (&ev); + +- /* Great, one uses GList the other GSList (!) */ +- l = gnome_i18n_get_language_list("LC_MESSAGES"); +- for (language_list=NULL;l;l=l->next) +- language_list = g_slist_append(language_list, l->data); ++ language_names = g_get_language_names (); ++ while (*language_names != NULL) ++ languages = g_list_append (languages, *language_names++); + + page_list = NULL; + for (i = 0; i < control_list->_length; i ++) { +@@ -189,8 +188,8 @@ + + info = & control_list->_buffer[i]; + +- title = bonobo_server_info_prop_lookup (info, "evolution2:config_item:title", language_list); +- description = bonobo_server_info_prop_lookup (info, "evolution2:config_item:description", language_list); ++ title = bonobo_server_info_prop_lookup (info, "evolution2:config_item:title", languages); ++ description = bonobo_server_info_prop_lookup (info, "evolution2:config_item:description", languages); + icon_path = bonobo_server_info_prop_lookup (info, "evolution2:config_item:icon_name", NULL); + type = bonobo_server_info_prop_find (info, "evolution2:config_item:type"); + priority_string = bonobo_server_info_prop_lookup (info, "evolution2:config_item:priority", NULL); +@@ -232,7 +231,7 @@ + + CORBA_exception_free (&ev); + } +- g_slist_free(language_list); ++ g_slist_free(languages); + + page_list = sort_page_list (page_list); + for (p = page_list, i = 0; p != NULL; p = p->next, i++) { +--- evolution-2.10.1/shell/e-user-creatable-items-handler.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-user-creatable-items-handler.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/shell/main.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/shell/main.c 2007-04-30 13:06:43.000000000 -0400 +@@ -55,7 +55,7 @@ + #include + #include + +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/shell/evolution-shell-component-utils.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/evolution-shell-component-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include "e-util/e-dialog-utils.h" + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/shell/e-shell-window-commands.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-window-commands.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + #include + + #include +-#include ++#include + #include + + #include +@@ -611,10 +611,11 @@ + { + char *quickref; + GnomeVFSMimeApplication *app; +- const GList *lang_list = gnome_i18n_get_language_list ("LC_MESSAGES"); ++ const gchar * const *language_names; + +- for (; lang_list != NULL; lang_list = lang_list->next) { +- const char *lang = lang_list->data; ++ language_names = g_get_language_names (); ++ while (*language_names != NULL) { ++ const gchar *lang = *language_names++; + + /* This has to be a valid language AND a language with + * no encoding postfix. The language will come up without +--- evolution-2.10.1/shell/e-component-registry.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-component-registry.c 2007-04-30 13:06:43.000000000 -0400 +@@ -28,7 +28,7 @@ + + #include + +-#include ++#include + + #include + #include +@@ -146,8 +146,9 @@ + query_components (EComponentRegistry *registry) + { + Bonobo_ServerInfoList *info_list; ++ const gchar * const *language_names; + CORBA_Environment ev; +- GSList *language_list; ++ GSList *languages = NULL; + const GList *l; + char *query; + int i; +@@ -170,9 +171,9 @@ + return; + } + +- l = gnome_i18n_get_language_list("LC_MESSAGES"); +- for (language_list=NULL;l;l=l->next) +- language_list = g_slist_append(language_list, l->data); ++ language_names = g_get_language_names (); ++ while (*language_names != NULL) ++ languages = g_slist_append (languages, *language_names++); + + for (i = 0; i < info_list->_length; i++) { + const char *id; +@@ -200,13 +201,13 @@ + continue; + } + +- label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_label", language_list); ++ label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_label", languages); + +- tooltips = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_tooltips", language_list); ++ tooltips = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_tooltips", languages); + +- menu_label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_label", language_list); ++ menu_label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_label", languages); + +- menu_accelerator = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_accelerator", language_list); ++ menu_accelerator = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_accelerator", languages); + + alias = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_alias", NULL); + +@@ -235,7 +236,7 @@ + g_object_unref (menuicon); + bonobo_object_release_unref(iface, NULL); + } +- g_slist_free(language_list); ++ g_slist_free(languages); + + CORBA_free (info_list); + CORBA_exception_free (&ev); +--- evolution-2.10.1/shell/e-shell-importer.c.use-glib-i18n 2007-04-09 09:07:48.000000000 -0400 ++++ evolution-2.10.1/shell/e-shell-importer.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + + #include + +-#include ++#include + + #include + #include +--- evolution-2.10.1/calendar/gui/print.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/print.c 2007-04-30 13:06:43.000000000 -0400 +@@ -34,7 +34,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/calendar-view-factory.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/calendar-view-factory.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include "calendar-view-factory.h" + #include "calendar-view.h" + +--- evolution-2.10.1/calendar/gui/itip-utils.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/itip-utils.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/alarm-notify/util.c.use-glib-i18n 2007-04-09 09:10:29.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/alarm-notify/util.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #include + #endif + +-#include ++#include + #include + #include + #include "config-data.h" +--- evolution-2.10.1/calendar/gui/alarm-notify/alarm-queue.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/alarm-notify/alarm-queue.c 2007-04-30 13:06:43.000000000 -0400 +@@ -43,7 +43,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/alarm-notify/alarm-notify-dialog.c.use-glib-i18n 2007-04-09 09:10:29.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/alarm-notify/alarm-notify-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #if 0 + # include + #endif +--- evolution-2.10.1/calendar/gui/alarm-notify/notify-main.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/alarm-notify/notify-main.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-itip-control.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-itip-control.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-day-view-top-item.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-day-view-top-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #endif + + #include +-#include ++#include + #include "e-util/e-categories-config.h" + #include + #include +--- evolution-2.10.1/calendar/gui/e-meeting-time-sel-item.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-meeting-time-sel-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -34,7 +34,7 @@ + + #include + #include +-#include ++#include + #include "calendar-config.h" + #include "e-meeting-time-sel-item.h" + #include "e-meeting-time-sel.h" +--- evolution-2.10.1/calendar/gui/e-meeting-list-view.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-meeting-list-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/tasks-control.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/tasks-control.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-cal-model-calendar.c.use-glib-i18n 2007-04-09 09:10:34.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-model-calendar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include "e-cal-model-calendar.h" + #include "e-cell-date-edit-text.h" + #include "itip-utils.h" +--- evolution-2.10.1/calendar/gui/dialogs/memo-editor.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/memo-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/task-page.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/task-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/alarm-list-dialog.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/alarm-list-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "e-util/e-dialog-widgets.h" +--- evolution-2.10.1/calendar/gui/dialogs/comp-editor.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/comp-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -34,7 +34,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/recurrence-page.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/recurrence-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -39,7 +39,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/event-page.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/event-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "common/authentication.h" +--- evolution-2.10.1/calendar/gui/dialogs/task-editor.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/task-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + #include +-#include ++#include + + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/calendar-setup.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/calendar-setup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include "calendar-setup.h" +--- evolution-2.10.1/calendar/gui/dialogs/recur-comp.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/recur-comp.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + #include + #include "recur-comp.h" + +--- evolution-2.10.1/calendar/gui/dialogs/delete-comp.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/delete-comp.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + #include +-#include ++#include + #include + #include "e-util/e-error.h" + #include "../calendar-config.h" +--- evolution-2.10.1/calendar/gui/dialogs/comp-editor-page.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/comp-editor-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include "comp-editor-page.h" +--- evolution-2.10.1/calendar/gui/dialogs/delete-error.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/delete-error.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include "delete-error.h" +--- evolution-2.10.1/calendar/gui/dialogs/task-details-page.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/task-details-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/cal-attachment-select-file.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/cal-attachment-select-file.c 2007-04-30 13:06:43.000000000 -0400 +@@ -45,7 +45,7 @@ + #endif + + #include +-#include ++#include + + #include "cal-attachment-select-file.h" + #include +--- evolution-2.10.1/calendar/gui/dialogs/event-editor.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/event-editor.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/cancel-comp.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/cancel-comp.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include "e-util/e-error.h" +--- evolution-2.10.1/calendar/gui/dialogs/comp-editor-util.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/comp-editor-util.c 2007-04-30 13:06:43.000000000 -0400 +@@ -27,7 +27,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/cal-prefs-dialog.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/cal-prefs-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + #include + + static const int week_start_day_map[] = { +--- evolution-2.10.1/calendar/gui/dialogs/schedule-page.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/schedule-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/dialogs/changed-comp.c.use-glib-i18n 2007-04-09 09:10:28.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/changed-comp.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include "changed-comp.h" +--- evolution-2.10.1/calendar/gui/dialogs/memo-page.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/dialogs/memo-page.c 2007-04-30 13:06:43.000000000 -0400 +@@ -33,7 +33,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-meeting-time-sel.c.use-glib-i18n 2007-04-09 09:10:34.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-meeting-time-sel.c 2007-04-30 13:06:43.000000000 -0400 +@@ -51,7 +51,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/calendar/gui/calendar-commands.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/calendar-commands.c 2007-04-30 13:06:43.000000000 -0400 +@@ -47,7 +47,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/memos-control.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/memos-control.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/misc.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/misc.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #include + #include + #include +-#include "e-util/e-i18n.h" ++#include + + #include "misc.h" + +--- evolution-2.10.1/calendar/gui/e-cal-model-tasks.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-model-tasks.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include "calendar-config.h" + #include "e-cal-model-tasks.h" +--- evolution-2.10.1/calendar/gui/e-calendar-view.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-calendar-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-cell-date-edit-text.c.use-glib-i18n 2007-04-09 09:10:34.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cell-date-edit-text.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-timezone-entry.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-timezone-entry.c 2007-04-30 13:06:43.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include "e-timezone-entry.h" + #include + +--- evolution-2.10.1/calendar/gui/e-alarm-list.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-alarm-list.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-day-view.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-day-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -46,7 +46,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-cal-model.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-model.c 2007-04-30 13:06:43.000000000 -0400 +@@ -24,7 +24,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include "comp-util.h" +--- evolution-2.10.1/calendar/gui/weekday-picker.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/weekday-picker.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "weekday-picker.h" +--- evolution-2.10.1/calendar/gui/e-week-view.c.use-glib-i18n 2007-04-30 13:06:42.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-week-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -41,7 +41,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-cal-model-memos.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-model-memos.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #endif + + #include +-#include ++#include + #include "e-cal-model-memos.h" + #include "e-cell-date-edit-text.h" + #include "misc.h" +--- evolution-2.10.1/calendar/gui/main.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/main.c 2007-04-30 13:06:43.000000000 -0400 +@@ -25,7 +25,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/cal-search-bar.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/cal-search-bar.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-day-view-time-item.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-day-view-time-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + #include + #include "e-day-view-time-item.h" + #include "calendar-config.h" +--- evolution-2.10.1/calendar/gui/e-cal-popup.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-popup.c 2007-04-30 13:06:43.000000000 -0400 +@@ -39,7 +39,7 @@ + #include + #include + #include "e-util/e-util.h" +-#include "e-util/e-i18n.h" ++#include + #include "e-util/e-mktemp.h" + #include "e-util/e-dialog-utils.h" + +--- evolution-2.10.1/calendar/gui/e-meeting-store.c.use-glib-i18n 2007-04-30 13:06:43.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-meeting-store.c 2007-04-30 13:06:43.000000000 -0400 +@@ -26,7 +26,7 @@ + #endif + + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-week-view-main-item.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-week-view-main-item.c 2007-04-30 13:06:43.000000000 -0400 +@@ -32,7 +32,7 @@ + + #include + #include +-#include ++#include + #include "e-week-view-main-item.h" + #include "ea-calendar.h" + +--- evolution-2.10.1/calendar/gui/gnome-cal.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/gnome-cal.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/calendar/gui/e-cal-list-view.c.use-glib-i18n 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/e-cal-list-view.c 2007-04-30 13:06:43.000000000 -0400 +@@ -50,7 +50,7 @@ + #include
+ #include + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/smime/lib/e-cert-db.c.use-glib-i18n 2007-04-09 09:07:58.000000000 -0400 ++++ evolution-2.10.1/smime/lib/e-cert-db.c 2007-04-30 13:06:43.000000000 -0400 +@@ -90,7 +90,7 @@ + #include "e-util/e-dialog-utils.h" + #include "e-util/e-util-private.h" + #include +-#include ++#include + #include + #include + #include +--- evolution-2.10.1/smime/lib/e-cert.c.use-glib-i18n 2007-04-09 09:07:58.000000000 -0400 ++++ evolution-2.10.1/smime/lib/e-cert.c 2007-04-30 13:06:43.000000000 -0400 +@@ -62,7 +62,7 @@ + + #include + +-#include ++#include + #include + #include /* for e_utf8_strftime, what about e_time_format_time? */ + +--- evolution-2.10.1/smime/lib/e-pkcs12.c.use-glib-i18n 2007-04-09 09:07:58.000000000 -0400 ++++ evolution-2.10.1/smime/lib/e-pkcs12.c 2007-04-30 13:06:43.000000000 -0400 +@@ -63,7 +63,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +--- evolution-2.10.1/smime/gui/certificate-viewer.c.use-glib-i18n 2007-04-09 09:07:55.000000000 -0400 ++++ evolution-2.10.1/smime/gui/certificate-viewer.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + + #include + +-#include ++#include + #include + + #include "e-util/e-util-private.h" +--- evolution-2.10.1/smime/gui/certificate-manager.c.use-glib-i18n 2007-04-09 09:07:56.000000000 -0400 ++++ evolution-2.10.1/smime/gui/certificate-manager.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + +-#include ++#include + + #include + #include "evolution-config-control.h" +--- evolution-2.10.1/smime/gui/e-cert-selector.c.use-glib-i18n 2007-04-09 09:07:56.000000000 -0400 ++++ evolution-2.10.1/smime/gui/e-cert-selector.c 2007-04-30 13:06:43.000000000 -0400 +@@ -23,7 +23,7 @@ + #include + #endif + +-#include ++#include + + #include + #include +--- evolution-2.10.1/smime/gui/cert-trust-dialog.c.use-glib-i18n 2007-04-09 09:07:56.000000000 -0400 ++++ evolution-2.10.1/smime/gui/cert-trust-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -36,7 +36,7 @@ + #include + #include + +-#include ++#include + #include + + #include "e-util/e-util-private.h" +--- evolution-2.10.1/smime/gui/component.c.use-glib-i18n 2007-04-09 09:07:56.000000000 -0400 ++++ evolution-2.10.1/smime/gui/component.c 2007-04-30 13:06:43.000000000 -0400 +@@ -29,7 +29,7 @@ + + #include + +-#include ++#include + #include + + #include "ca-trust-dialog.h" +--- evolution-2.10.1/smime/gui/ca-trust-dialog.c.use-glib-i18n 2007-04-09 09:07:55.000000000 -0400 ++++ evolution-2.10.1/smime/gui/ca-trust-dialog.c 2007-04-30 13:06:43.000000000 -0400 +@@ -30,7 +30,7 @@ + + #include + +-#include ++#include + #include + + #include "e-util/e-util-private.h" +--- evolution-2.10.1/tools/killev.c.use-glib-i18n 2007-04-09 09:07:44.000000000 -0400 ++++ evolution-2.10.1/tools/killev.c 2007-04-30 13:06:43.000000000 -0400 +@@ -31,7 +31,7 @@ + + #include + #include +-#include ++#include + #include + + typedef struct { +@@ -39,7 +39,7 @@ + GPtrArray *names; + } KillevComponent; + +-static GSList *languages; ++static GSList *languages = NULL; + static GHashTable *components; + + static gboolean +@@ -186,7 +186,7 @@ + int + main (int argc, char **argv) + { +- const GList *l; ++ const gchar * const *language_names; + + bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +@@ -196,9 +196,9 @@ + GNOME_PROGRAM_STANDARD_PROPERTIES, + NULL); + +- l = gnome_i18n_get_language_list("LC_MESSAGES"); +- for (languages=NULL;l;l=l->next) +- languages = g_slist_append(languages, l->data); ++ language_names = g_get_language_names (); ++ while (*language_names != NULL) ++ languages = g_slist_append (languages, *language_names++); + + components = g_hash_table_new (g_str_hash, g_str_equal); + diff --git a/evolution-2.10.1-check-uri-before-strcmp.patch b/evolution-2.10.1-check-uri-before-strcmp.patch new file mode 100644 index 0000000..ff7e766 --- /dev/null +++ b/evolution-2.10.1-check-uri-before-strcmp.patch @@ -0,0 +1,357 @@ +--- evolution-2.10.1/plugins/exchange-operations/exchange-config-listener.c.check-uri-before-strcmp 2007-04-09 09:09:13.000000000 -0400 ++++ evolution-2.10.1/plugins/exchange-operations/exchange-config-listener.c 2007-05-14 13:34:13.000000000 -0400 +@@ -1250,26 +1250,30 @@ + exchange_add_autocompletion_folders (GConfClient *gc_client, ExchangeAccount *account) + { + ESourceList *sl=NULL; +- ESourceGroup *group; + ESource *source; +- GSList *groups, *sources; ++ GSList *groups; + gboolean found_group=FALSE; + + sl = e_source_list_new_for_gconf (gc_client, CONF_KEY_CONTACTS); + groups = e_source_list_peek_groups (sl); + + for ( ; groups != NULL && !found_group; groups = g_slist_next (groups)) { +- group = E_SOURCE_GROUP (groups->data); ++ ESourceGroup *group = E_SOURCE_GROUP (groups->data); ++ + if (strcmp (e_source_group_peek_name (group), account->account_name) == 0 + && + strcmp (e_source_group_peek_base_uri (group), EXCHANGE_URI_PREFIX) == 0) { +- +- sources = e_source_group_peek_sources (group); ++ GSList *sources = e_source_group_peek_sources (group); + + for( ; sources != NULL; sources = g_slist_next (sources)) { +- source = E_SOURCE (sources->data); +- if (g_str_has_prefix (e_source_peek_absolute_uri (source), +- "gal://")) { ++ ESource *source = E_SOURCE (sources->data); ++ const gchar *absolute_uri; ++ ++ g_assert (source != NULL); ++ absolute_uri = e_source_peek_absolute_uri (source); ++ if (absolute_uri == NULL) ++ continue; ++ if (g_str_has_prefix (absolute_uri, "gal://")) { + /* Set autocompletion on GAL alone by default */ + e_source_set_property (source, "completion", "true"); + break; +--- evolution-2.10.1/plugins/groupwise-account-setup/camel-gw-listener.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/plugins/groupwise-account-setup/camel-gw-listener.c 2007-05-14 13:34:13.000000000 -0400 +@@ -254,10 +254,7 @@ + remove_esource (const char *conf_key, const char *group_name, char* source_name, const char* relative_uri) + { + ESourceList *list; +- ESourceGroup *group; +- ESource *source; + GSList *groups; +- GSList *sources; + gboolean found_group; + GConfClient* client; + GSList *ids; +@@ -271,19 +268,21 @@ + found_group = FALSE; + + for ( ; groups != NULL && !found_group; groups = g_slist_next (groups)) { +- +- group = E_SOURCE_GROUP (groups->data); ++ ESourceGroup *group = E_SOURCE_GROUP (groups->data); + + if (strcmp (e_source_group_peek_name (group), group_name) == 0 && + strcmp (e_source_group_peek_base_uri (group), GROUPWISE_URI_PREFIX ) == 0) { +- +- sources = e_source_group_peek_sources (group); ++ GSList *sources = e_source_group_peek_sources (group); + + for( ; sources != NULL; sources = g_slist_next (sources)) { +- +- source = E_SOURCE (sources->data); +- +- if (strcmp (e_source_peek_relative_uri (source), relative_uri) == 0) { ++ ESource *source = E_SOURCE (sources->data); ++ const gchar *source_relative_uri; ++ ++ g_assert (source != NULL); ++ source_relative_uri = e_source_peek_relative_uri (source); ++ if (source_relative_uri == NULL) ++ continue; ++ if (strcmp (source_relative_uri, relative_uri) == 0) { + + if (!strcmp (conf_key, CALENDAR_SOURCES)) + source_selection_key = SELECTED_CALENDARS; +@@ -328,16 +327,12 @@ + modify_esource (const char* conf_key, GwAccountInfo *old_account_info, const char* new_group_name, CamelURL *new_url) + { + ESourceList *list; +- ESourceGroup *group; +- ESource *source; + GSList *groups; +- GSList *sources; + char *old_relative_uri; + CamelURL *url; + gboolean found_group; + GConfClient* client; + const char *poa_address; +- char *new_relative_uri; + const char *new_poa_address; + + url = camel_url_new (old_account_info->source_url, NULL); +@@ -354,20 +349,23 @@ + found_group = FALSE; + + for ( ; groups != NULL && !found_group; groups = g_slist_next (groups)) { +- +- group = E_SOURCE_GROUP (groups->data); ++ ESourceGroup *group = E_SOURCE_GROUP (groups->data); + + if (strcmp (e_source_group_peek_name (group), old_account_info->name) == 0 && + strcmp (e_source_group_peek_base_uri (group), GROUPWISE_URI_PREFIX) == 0) { +- +- sources = e_source_group_peek_sources (group); ++ GSList *sources = e_source_group_peek_sources (group); + + for ( ; sources != NULL; sources = g_slist_next (sources)) { +- +- source = E_SOURCE (sources->data); +- +- if (strcmp (e_source_peek_relative_uri (source), old_relative_uri) == 0) { +- ++ ESource *source = E_SOURCE (sources->data); ++ const gchar *source_relative_uri; ++ ++ g_assert (source != NULL); ++ source_relative_uri = e_source_peek_relative_uri (source); ++ if (source_relative_uri == NULL) ++ continue; ++ if (strcmp (source_relative_uri, old_relative_uri) == 0) { ++ gchar *new_relative_uri; ++ + new_relative_uri = g_strdup_printf ("%s@%s/", new_url->user, new_poa_address); + e_source_group_set_name (group, new_group_name); + e_source_set_relative_uri (source, new_relative_uri); +--- evolution-2.10.1/plugins/hula-account-setup/camel-hula-listener.c.check-uri-before-strcmp 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.1/plugins/hula-account-setup/camel-hula-listener.c 2007-05-14 13:34:13.000000000 -0400 +@@ -241,10 +241,7 @@ + remove_esource (const char *conf_key, const char *group_name, char* source_name, const char* relative_uri) + { + ESourceList *list; +- ESourceGroup *group; +- ESource *source; + GSList *groups; +- GSList *sources; + gboolean found_group; + GConfClient* client; + GSList *ids; +@@ -258,19 +255,21 @@ + found_group = FALSE; + + for ( ; groups != NULL && !found_group; groups = g_slist_next (groups)) { +- +- group = E_SOURCE_GROUP (groups->data); ++ ESourceGroup *group = E_SOURCE_GROUP (groups->data); + + if (strcmp (e_source_group_peek_name (group), group_name) == 0 && + strcmp (e_source_group_peek_base_uri (group), HULA_CALDAV_URI_PREFIX ) == 0) { +- +- sources = e_source_group_peek_sources (group); ++ GSList *sources = e_source_group_peek_sources (group); + + for( ; sources != NULL; sources = g_slist_next (sources)) { +- +- source = E_SOURCE (sources->data); +- +- if (strcmp (e_source_peek_relative_uri (source), relative_uri) == 0) { ++ ESource *source = E_SOURCE (sources->data); ++ const gchar *source_relative_uri; ++ ++ g_assert (source != NULL); ++ source_relative_uri = e_source_peek_relative_uri (source); ++ if (source_relative_uri == NULL) ++ continue; ++ if (strcmp (source_relative_uri, relative_uri) == 0) { + + if (!strcmp (conf_key, CALENDAR_SOURCES)) + source_selection_key = SELECTED_CALENDARS; +@@ -311,15 +310,11 @@ + modify_esource (const char* conf_key, HulaAccountInfo *old_account_info, const char* new_group_name, CamelURL *new_url) + { + ESourceList *list; +- ESourceGroup *group; +- ESource *source; + GSList *groups; +- GSList *sources; + char *old_relative_uri; + CamelURL *url; + gboolean found_group; + GConfClient* client; +- char *new_relative_uri; + + url = camel_url_new (old_account_info->source_url, NULL); + if (!url->host || strlen (url->host) ==0) +@@ -334,19 +329,23 @@ + + for ( ; groups != NULL && !found_group; groups = g_slist_next (groups)) { + +- group = E_SOURCE_GROUP (groups->data); ++ ESourceGroup *group = E_SOURCE_GROUP (groups->data); + + if (strcmp (e_source_group_peek_name (group), old_account_info->name) == 0 && + strcmp (e_source_group_peek_base_uri (group), HULA_CALDAV_URI_PREFIX) == 0) { +- +- sources = e_source_group_peek_sources (group); ++ GSList *sources = e_source_group_peek_sources (group); + + for ( ; sources != NULL; sources = g_slist_next (sources)) { +- +- source = E_SOURCE (sources->data); +- +- if (strcmp (e_source_peek_relative_uri (source), old_relative_uri) == 0) { +- ++ ESource *source = E_SOURCE (sources->data); ++ const gchar *source_relative_uri; ++ ++ g_assert (source != NULL); ++ source_relative_uri = e_source_peek_relative_uri (source); ++ if (source_relative_uri == NULL) ++ continue; ++ if (strcmp (source_relative_uri, old_relative_uri) == 0) { ++ gchar *new_relative_uri; ++ + new_relative_uri = g_strdup_printf ("%s@%s:%d/dav/%s/calendar/Personal", new_url->user, new_url->host, new_url->port, new_url->user); + e_source_group_set_name (group, new_group_name); + e_source_set_relative_uri (source, new_relative_uri); +--- evolution-2.10.1/addressbook/gui/component/addressbook-component.c.check-uri-before-strcmp 2007-04-09 09:07:42.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook-component.c 2007-05-14 13:34:13.000000000 -0400 +@@ -118,7 +118,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + personal_source = source; + break; + } +--- evolution-2.10.1/addressbook/gui/component/addressbook-migrate.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/addressbook/gui/component/addressbook-migrate.c 2007-05-14 13:34:13.000000000 -0400 +@@ -472,7 +472,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + *personal_source = g_object_ref (source); + break; + } +--- evolution-2.10.1/calendar/gui/calendar-component.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/calendar-component.c 2007-05-14 13:34:13.000000000 -0400 +@@ -210,7 +210,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + personal_source = source; + break; + } +--- evolution-2.10.1/calendar/gui/tasks-component.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/tasks-component.c 2007-05-14 13:34:13.000000000 -0400 +@@ -170,7 +170,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + personal_source = source; + break; + } +--- evolution-2.10.1/calendar/gui/memos-component.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/memos-component.c 2007-05-14 13:34:13.000000000 -0400 +@@ -174,7 +174,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + personal_source = source; + break; + } +--- evolution-2.10.1/calendar/gui/migration.c.check-uri-before-strcmp 2007-05-14 13:21:57.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/migration.c 2007-05-14 13:34:13.000000000 -0400 +@@ -466,7 +466,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + *personal_source = g_object_ref (source); + break; + } +@@ -562,7 +568,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + *personal_source = g_object_ref (source); + break; + } +@@ -1070,7 +1082,13 @@ + GSList *s; + for (s = sources; s; s = s->next) { + ESource *source = E_SOURCE (s->data); +- if (!strcmp (PERSONAL_RELATIVE_URI, e_source_peek_relative_uri (source))) { ++ const gchar *relative_uri; ++ ++ g_assert (source != NULL); ++ relative_uri = e_source_peek_relative_uri (source); ++ if (relative_uri == NULL) ++ continue; ++ if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { + *personal_source = g_object_ref (source); + break; + } diff --git a/evolution-2.10.1-en_CA-attribution-format.patch b/evolution-2.10.1-en_CA-attribution-format.patch new file mode 100644 index 0000000..663d243 --- /dev/null +++ b/evolution-2.10.1-en_CA-attribution-format.patch @@ -0,0 +1,11 @@ +--- evolution-2.10.1/po/en_CA.po.en_CA-attribution-format 2007-04-27 22:58:06.000000000 -0400 ++++ evolution-2.10.1/po/en_CA.po 2007-04-27 22:58:36.000000000 -0400 +@@ -10992,7 +10992,7 @@ + "On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} " + "${TimeZone}, ${Sender} wrote:" + msgstr "" +-"On ${AbbrevWeekdayName}, ${Year}-${Day}-${Month} at ${24Hour}:${Minute} " ++"On ${AbbrevWeekdayName}, ${Year}-${Month}-${Day} at ${24Hour}:${Minute} " + "${TimeZone}, ${Sender} wrote:" + + #: ../mail/em-filter-editor.c:155 diff --git a/evolution-2.10.1-fix-uri-handling.patch b/evolution-2.10.1-fix-uri-handling.patch new file mode 100644 index 0000000..53fbe39 --- /dev/null +++ b/evolution-2.10.1-fix-uri-handling.patch @@ -0,0 +1,14 @@ +--- evolution-2.10.1/calendar/gui/GNOME_Evolution_Calendar.server.in.in.fix-uri-handling 2007-04-09 09:10:33.000000000 -0400 ++++ evolution-2.10.1/calendar/gui/GNOME_Evolution_Calendar.server.in.in 2007-05-14 14:11:59.000000000 -0400 +@@ -50,9 +50,11 @@ + + + ++ + + + diff --git a/evolution-2.10.1-saving-attachments.patch b/evolution-2.10.1-saving-attachments.patch new file mode 100644 index 0000000..e52dc6a --- /dev/null +++ b/evolution-2.10.1-saving-attachments.patch @@ -0,0 +1,222 @@ +--- evolution-2.10.2/mail/em-utils.c.saving-attachments 2007-05-29 00:07:55.000000000 -0400 ++++ evolution-2.10.2/mail/em-utils.c 2007-05-29 01:26:46.000000000 -0400 +@@ -354,28 +354,23 @@ + + /* Saving messages... */ + +-static void +-emu_save_part_response(GtkWidget *filesel, int response, CamelMimePart *part) ++static const gchar * ++emu_save_get_filename_for_part (CamelMimePart *part) + { +- char *uri; +- +- if (response == GTK_RESPONSE_OK) { +- uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (filesel)); +- +- if (!e_file_can_save((GtkWindow *)filesel, uri)) { +- g_free(uri); +- return; +- } ++ const gchar *filename; + +- e_file_update_save_path(gtk_file_chooser_get_current_folder_uri( +- GTK_FILE_CHOOSER(filesel)), TRUE); +- /* FIXME: popup error if it fails? */ +- mail_save_part(part, uri, NULL, NULL, FALSE); +- g_free(uri); ++ filename = camel_mime_part_get_filename (part); ++ if (filename == NULL) { ++ if (CAMEL_IS_MIME_MESSAGE (part)) { ++ filename = camel_mime_message_get_subject ( ++ CAMEL_MIME_MESSAGE (part)); ++ if (filename == NULL) ++ filename = _("message"); ++ } else ++ filename = _("attachment"); + } + +- gtk_widget_destroy((GtkWidget *)filesel); +- camel_object_unref(part); ++ return filename; + } + + /** +@@ -387,85 +382,79 @@ + * Saves a mime part to disk (prompting the user for filename). + **/ + void +-em_utils_save_part(GtkWidget *parent, const char *prompt, CamelMimePart *part) ++em_utils_save_part (GtkWidget *parent, const char *prompt, CamelMimePart *part) + { +- const char *name; +- GtkWidget *filesel; ++ GtkWidget *file_chooser; ++ const gchar *filename; ++ gchar *uri = NULL; ++ ++ filename = emu_save_get_filename_for_part (part); + +- name = camel_mime_part_get_filename(part); +- if (name == NULL) { +- if (CAMEL_IS_MIME_MESSAGE(part)) { +- name = camel_mime_message_get_subject((CamelMimeMessage *)part); +- if (name == NULL) +- name = _("message"); +- } else { +- name = _("attachment"); +- } +- } ++ file_chooser = e_file_get_save_filesel ( ++ parent, prompt, filename, GTK_FILE_CHOOSER_ACTION_SAVE); + +- filesel = e_file_get_save_filesel(parent, prompt, name, GTK_FILE_CHOOSER_ACTION_SAVE); +- camel_object_ref(part); +- g_signal_connect (filesel, "response", G_CALLBACK (emu_save_part_response), part); +- gtk_widget_show (filesel); +-} ++ if (gtk_dialog_run (GTK_DIALOG (file_chooser)) != GTK_RESPONSE_OK) ++ goto exit; + +-static void +-emu_save_parts_response (GtkWidget *filesel, int response, GSList *parts) +-{ +- GSList *selected; +- char *uri = NULL; +- if (response == GTK_RESPONSE_OK) { +- uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER (filesel)); +- e_file_update_save_path(uri, FALSE); +- +- for ( selected = parts; selected != NULL; selected = selected->next) { +- const char *file_name; +- char *safe_name = NULL; +- char *file_path; +- CamelMimePart *part = selected->data; +- +- file_name = camel_mime_part_get_filename(part); +- if (file_name == NULL) { +- if (CAMEL_IS_MIME_MESSAGE(part)) { +- file_name = camel_mime_message_get_subject((CamelMimeMessage *)part); +- if (file_name == NULL) +- file_name = _("message"); +- } else { +- file_name = _("attachment"); +- } +- } else { +- safe_name = g_strdup(file_name); +- em_filename_make_safe(safe_name); +- file_name = safe_name; +- } +- +- file_path = g_build_filename (uri, file_name, NULL); +- if (!e_file_check_local(file_path) || !g_file_test(file_path, (G_FILE_TEST_EXISTS)) || e_error_run(NULL, E_ERROR_ASK_FILE_EXISTS_OVERWRITE, file_name, NULL) == GTK_RESPONSE_OK) +- mail_save_part(part, file_path, NULL, NULL, FALSE); +- else +- g_warning ("Could not save %s. File already exists", file_path); ++ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_chooser)); ++ ++ /* XXX Would be nice to mention _why_ we can't save. */ ++ if (!e_file_can_save (GTK_WINDOW (file_chooser), uri)) { ++ g_warning ("Unable to save %s", uri); ++ goto exit; ++ } ++ ++ e_file_update_save_path ( ++ gtk_file_chooser_get_current_folder_uri ( ++ GTK_FILE_CHOOSER (file_chooser)), TRUE); + +- g_free (file_path); +- g_free (safe_name); +- } ++ mail_save_part (part, uri, NULL, NULL, FALSE); + +- g_free (uri); +- } +- +- g_slist_free (parts); +- gtk_widget_destroy((GtkWidget *)filesel); ++exit: ++ gtk_widget_destroy (file_chooser); ++ g_free (uri); + } +- ++ + void +-em_utils_save_parts (GtkWidget *parent, const char *prompt, GSList * parts) ++em_utils_save_parts (GtkWidget *parent, const gchar *prompt, GSList *parts) + { +- GtkWidget *filesel; ++ GtkWidget *file_chooser; ++ gchar *path_uri; ++ GSList *iter; + +- filesel = e_file_get_save_filesel (parent, prompt, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); +- g_signal_connect (filesel, "response", G_CALLBACK (emu_save_parts_response), parts); +- gtk_widget_show (filesel); +-} ++ file_chooser = e_file_get_save_filesel ( ++ parent, prompt, NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); ++ ++ if (gtk_dialog_run (GTK_DIALOG (file_chooser)) != GTK_RESPONSE_OK) ++ goto exit; ++ ++ path_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (file_chooser)); ++ ++ e_file_update_save_path (path_uri, FALSE); ++ ++ for (iter = parts; iter != NULL; iter = iter->next) { ++ CamelMimePart *part = iter->data; ++ const gchar *filename; ++ gchar *uri; ++ ++ filename = emu_save_get_filename_for_part (part); + ++ uri = g_build_path ("/", path_uri, filename, NULL); ++ ++ /* XXX Would be nice to mention _why_ we can't save. */ ++ if (e_file_can_save (GTK_WINDOW (file_chooser), uri)) ++ mail_save_part (part, uri, NULL, NULL, FALSE); ++ else ++ g_warning ("Unable to save %s", uri); ++ ++ g_free (uri); ++ } ++ ++ g_free (path_uri); ++ ++exit: ++ gtk_widget_destroy (file_chooser); ++} + + /** + * em_utils_save_part_to_file: +--- evolution-2.10.2/mail/em-format-html-display.c.saving-attachments 2007-05-29 00:07:55.000000000 -0400 ++++ evolution-2.10.2/mail/em-format-html-display.c 2007-05-29 00:07:55.000000000 -0400 +@@ -2099,12 +2099,24 @@ + } + + static void +-attachments_save_all_clicked(GtkWidget *w, EMFormatHTMLDisplay *efhd) ++attachments_save_all_clicked (GtkWidget *widget, EMFormatHTMLDisplay *efhd) + { + GSList *attachment_parts; ++ guint n_attachment_parts; + +- attachment_parts = e_attachment_bar_get_parts(E_ATTACHMENT_BAR(efhd->priv->attachment_bar)); +- em_utils_save_parts(w, _("Select folder to save all attachments..."), attachment_parts); ++ attachment_parts = e_attachment_bar_get_parts ( ++ E_ATTACHMENT_BAR (efhd->priv->attachment_bar)); ++ n_attachment_parts = g_slist_length (attachment_parts); ++ g_return_if_fail (n_attachment_parts > 0); ++ ++ if (n_attachment_parts == 1) ++ em_utils_save_part ( ++ widget, _("Save attachment as"), ++ attachment_parts->data); ++ else ++ em_utils_save_parts ( ++ widget, _("Select folder to save all attachments"), ++ attachment_parts); + } + + static void diff --git a/evolution-2.10.1-send-recv-dialog.patch b/evolution-2.10.1-send-recv-dialog.patch new file mode 100644 index 0000000..3f26184 --- /dev/null +++ b/evolution-2.10.1-send-recv-dialog.patch @@ -0,0 +1,85 @@ +--- evolution-2.10.1/mail/mail-send-recv.c.send-recv-dialog 2007-05-15 14:26:24.000000000 -0400 ++++ evolution-2.10.1/mail/mail-send-recv.c 2007-05-15 14:30:51.000000000 -0400 +@@ -312,21 +312,6 @@ + return SEND_INVALID; + } + +-gboolean +-dialog_map (GtkWidget *window, GdkEvent *event, GtkWidget *table) +-{ +- int h, w; +- +- w = table->allocation.width + 30 /* Spacing around the table */; +- h = table->allocation.height + 60 /* Cancell All button and Seperator and outer spacing */; +- +- if (w > 750) +- w = 750; +- if (h > 400) +- h = 400; +- gtk_widget_set_usize (window, w, h); +-} +- + static struct _send_data * + build_dialog (EAccountList *accounts, CamelFolder *outbox, const char *destination) + { +@@ -385,7 +370,7 @@ + + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), +- GTK_POLICY_AUTOMATIC, ++ GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), table); +@@ -443,6 +428,7 @@ + recv_icon = e_icon_factory_get_image ("stock_mail-receive", E_ICON_SIZE_LARGE_TOOLBAR); + pretty_url = format_url (source->url, account->name); + label = (GtkLabel *)gtk_label_new (NULL); ++ gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END); + gtk_label_set_markup (label, pretty_url); + g_free (pretty_url); + +@@ -457,10 +443,10 @@ + gtk_misc_set_alignment (GTK_MISC (label), 0, .5); + gtk_misc_set_alignment (GTK_MISC (status_label), 0, .5); + +- gtk_table_attach (table, (GtkWidget *)recv_icon, 0, 1, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); ++ gtk_table_attach (table, (GtkWidget *)recv_icon, 0, 1, row, row+2, 0, 0, 0, 0); + gtk_table_attach (table, (GtkWidget *)label, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); +- gtk_table_attach (table, (GtkWidget *)bar, 2, 3, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); +- gtk_table_attach (table, (GtkWidget *)stop, 3, 4, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); ++ gtk_table_attach (table, (GtkWidget *)bar, 2, 3, row, row+2, 0, 0, 0, 0); ++ gtk_table_attach (table, (GtkWidget *)stop, 3, 4, row, row+2, 0, 0, 0, 0); + gtk_table_attach (table, (GtkWidget *)status_label, 1, 2, row+1, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); + + info->bar = bar; +@@ -496,6 +482,7 @@ + send_icon = e_icon_factory_get_image ("stock_mail-send", E_ICON_SIZE_LARGE_TOOLBAR); + pretty_url = format_url (destination, NULL); + label = (GtkLabel *)gtk_label_new (NULL); ++ gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END); + gtk_label_set_markup (label, pretty_url); + + g_free (pretty_url); +@@ -508,10 +495,10 @@ + gtk_misc_set_alignment (GTK_MISC (label), 0, .5); + gtk_misc_set_alignment (GTK_MISC (status_label), 0, .5); + +- gtk_table_attach (table, GTK_WIDGET (send_icon), 0, 1, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); ++ gtk_table_attach (table, GTK_WIDGET (send_icon), 0, 1, row, row+2, 0, 0, 0, 0); + gtk_table_attach (table, GTK_WIDGET (label), 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); +- gtk_table_attach (table, GTK_WIDGET (bar), 2, 3, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); +- gtk_table_attach (table, GTK_WIDGET (stop), 3, 4, row, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); ++ gtk_table_attach (table, GTK_WIDGET (bar), 2, 3, row, row+2, 0, 0, 0, 0); ++ gtk_table_attach (table, GTK_WIDGET (stop), 3, 4, row, row+2, 0, 0, 0, 0); + gtk_table_attach (table, GTK_WIDGET (status_label), 1, 2, row+1, row+2, GTK_EXPAND | GTK_FILL, 0, 0, 0); + + info->bar = bar; +@@ -526,7 +513,6 @@ + gtk_widget_show (GTK_WIDGET (gd)); + + g_signal_connect (gd, "response", G_CALLBACK (dialog_response), data); +- g_signal_connect (gd, "map-event", G_CALLBACK (dialog_map), table); + + g_object_weak_ref ((GObject *) gd, (GWeakNotify) dialog_destroy_cb, data); + diff --git a/evolution-2.10.3-CVE-2008-0072.patch b/evolution-2.10.3-CVE-2008-0072.patch new file mode 100644 index 0000000..32e3eec --- /dev/null +++ b/evolution-2.10.3-CVE-2008-0072.patch @@ -0,0 +1,48 @@ +diff -up evolution-2.10.3/mail/em-format.c.CVE-2008-0072 evolution-2.10.3/mail/em-format.c +--- evolution-2.10.3/mail/em-format.c.CVE-2008-0072 2008-03-04 15:44:32.000000000 -0500 ++++ evolution-2.10.3/mail/em-format.c 2008-03-04 15:45:23.000000000 -0500 +@@ -1155,7 +1155,7 @@ emf_application_xpkcs7mime(EMFormat *emf + opart = camel_mime_part_new(); + valid = camel_cipher_decrypt(context, part, opart, ex); + if (valid == NULL) { +- em_format_format_error(emf, stream, ex->desc?ex->desc:_("Could not parse S/MIME message: Unknown error")); ++ em_format_format_error(emf, stream, "%s", ex->desc?ex->desc:_("Could not parse S/MIME message: Unknown error")); + em_format_part_as(emf, stream, part, NULL); + } else { + if (emfc == NULL) +@@ -1305,7 +1305,7 @@ emf_multipart_encrypted(EMFormat *emf, C + if (valid == NULL) { + em_format_format_error(emf, stream, ex->desc?("Could not parse S/MIME message"):_("Could not parse S/MIME message: Unknown error")); + if (ex->desc) +- em_format_format_error(emf, stream, ex->desc); ++ em_format_format_error(emf, stream, "%s", ex->desc); + em_format_part_as(emf, stream, part, "multipart/mixed"); + } else { + if (emfc == NULL) +@@ -1470,7 +1470,7 @@ emf_multipart_signed(EMFormat *emf, Came + if (valid == NULL) { + em_format_format_error(emf, stream, ex->desc?_("Error verifying signature"):_("Unknown error verifying signature")); + if (ex->desc) +- em_format_format_error(emf, stream, ex->desc); ++ em_format_format_error(emf, stream, "%s", ex->desc); + em_format_part_as(emf, stream, part, "multipart/mixed"); + } else { + if (emfc == NULL) +@@ -1536,7 +1536,7 @@ emf_inlinepgp_signed(EMFormat *emf, Came + if (!valid) { + em_format_format_error(emf, stream, ex->desc?_("Error verifying signature"):_("Unknown error verifying signature")); + if (ex->desc) +- em_format_format_error(emf, stream, ex->desc); ++ em_format_format_error(emf, stream, "%s", ex->desc); + em_format_format_source(emf, stream, ipart); + /* I think this will loop: em_format_part_as(emf, stream, part, "text/plain"); */ + camel_exception_free(ex); +@@ -1607,7 +1607,7 @@ emf_inlinepgp_encrypted(EMFormat *emf, C + if (!valid) { + em_format_format_error(emf, stream, ex->desc?("Could not parse S/MIME message"):_("Could not parse S/MIME message: Unknown error")); + if (ex->desc) +- em_format_format_error(emf, stream, ex->desc); ++ em_format_format_error(emf, stream, "%s", ex->desc); + em_format_format_source(emf, stream, ipart); + /* I think this will loop: em_format_part_as(emf, stream, part, "text/plain"); */ + camel_exception_free(ex); diff --git a/evolution-2.10.3-CVE-2008-1108.patch b/evolution-2.10.3-CVE-2008-1108.patch new file mode 100644 index 0000000..d577c13 --- /dev/null +++ b/evolution-2.10.3-CVE-2008-1108.patch @@ -0,0 +1,310 @@ +diff -up evolution-2.10.3/calendar/gui/e-itip-control.c.CVE-2008-1108 evolution-2.10.3/calendar/gui/e-itip-control.c +--- evolution-2.10.3/calendar/gui/e-itip-control.c.CVE-2008-1108 2008-06-04 05:55:50.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/e-itip-control.c 2008-06-04 06:00:35.000000000 -0400 +@@ -650,7 +650,7 @@ find_attendee (icalcomponent *ical_comp, + + static void + write_label_piece (EItipControl *itip, ECalComponentDateTime *dt, +- char *buffer, int size, ++ GString *buffer, + const char *stext, const char *etext, + gboolean just_date) + { +@@ -675,13 +675,13 @@ write_label_piece (EItipControl *itip, E + tmp_tm.tm_hour = tmp_tm.tm_min = tmp_tm.tm_sec = 0; + + if (stext != NULL) +- strcat (buffer, stext); ++ g_string_append (buffer, stext); + + e_time_format_date_and_time (&tmp_tm, + calendar_config_get_24_hour_format (), + FALSE, FALSE, + time_buf, sizeof (time_buf)); +- strcat (buffer, time_buf); ++ g_string_append (buffer, time_buf); + + if (!dt->value->is_utc && dt->tzid) { + zone = icalcomponent_get_timezone (priv->top_level, dt->tzid); +@@ -693,21 +693,21 @@ write_label_piece (EItipControl *itip, E + UTF-8. But it probably is not translated. */ + display_name = icaltimezone_get_display_name (zone); + if (display_name && *display_name) { +- strcat (buffer, " ["); ++ g_string_append_len (buffer, " [", 16); + + /* We check if it is one of our builtin timezone names, + in which case we call gettext to translate it. */ + if (icaltimezone_get_builtin_timezone (display_name)) { +- strcat (buffer, _(display_name)); ++ g_string_append_printf (buffer, "%s", _(display_name)); + } else { +- strcat (buffer, display_name); ++ g_string_append_printf (buffer, "%s", display_name); + } +- strcat (buffer, "]"); ++ g_string_append_len (buffer, "]", 8); + } + } + + if (etext != NULL) +- strcat (buffer, etext); ++ g_string_append (buffer, etext); + } + + static const char * +@@ -744,19 +744,17 @@ get_dayname (struct icalrecurrencetype * + + static void + write_recurrence_piece (EItipControl *itip, ECalComponent *comp, +- char *buffer, int size) ++ GString *buffer) + { + GSList *rrules; + struct icalrecurrencetype *r; +- int len, i; ++ int i; + +- strcpy (buffer, "Recurring: "); +- len = strlen (buffer); +- buffer += len; +- size -= len; ++ g_string_append_len (buffer, "Recurring: ", 18); + + if (!e_cal_component_has_simple_recurrence (comp)) { +- strcpy (buffer, _("Yes. (Complex Recurrence)")); ++ g_string_append_printf ( ++ buffer, "%s", _("Yes. (Complex Recurrence)")); + return; + } + +@@ -772,7 +770,10 @@ write_recurrence_piece (EItipControl *it + Every %d day/days" */ + /* For Translators : 'Every day' is event Recurring every day */ + /* For Translators : 'Every %d days' is event Recurring every %d days. %d is a digit */ +- sprintf (buffer, ngettext("Every day", "Every %d days", r->interval), r->interval); ++ g_string_append_printf ( ++ buffer, ngettext ("Every day", ++ "Every %d days", r->interval), ++ r->interval); + break; + + case ICAL_WEEKLY_RECURRENCE: +@@ -782,29 +783,36 @@ write_recurrence_piece (EItipControl *it + Every %d week/weeks" */ + /* For Translators : 'Every week' is event Recurring every week */ + /* For Translators : 'Every %d weeks' is event Recurring every %d weeks. %d is a digit */ +- sprintf (buffer, ngettext("Every week", "Every %d weeks", r->interval), r->interval); ++ g_string_append_printf ( ++ buffer, ngettext ("Every week", ++ "Every %d weeks", r->interval), ++ r->interval); + } else { + /* For Translators : 'Every week on' is event Recurring every week on (dayname) and (dayname) and (dayname) */ + /* For Translators : 'Every %d weeks on' is event Recurring: every %d weeks on (dayname) and (dayname). %d is a digit */ +- sprintf (buffer, ngettext("Every week on ", "Every %d weeks on ", r->interval), r->interval); ++ g_string_append_printf ( ++ buffer, ngettext ("Every week on ", ++ "Every %d weeks on ", r->interval), ++ r->interval); + + for (i = 1; i < 8 && r->by_day[i] != ICAL_RECURRENCE_ARRAY_MAX; i++) { + if (i > 1) +- strcat (buffer, ", "); +- strcat (buffer, get_dayname (r, i - 1)); ++ g_string_append_len (buffer, ", ", 2); ++ g_string_append (buffer, get_dayname (r, i - 1)); + } + if (i > 1) + /* For Translators : 'and' is part of the sentence 'event recurring every week on (dayname) and (dayname)' */ +- strcat (buffer, _(" and ")); +- strcat (buffer, get_dayname (r, i - 1)); ++ g_string_append_printf (buffer, "%s", _(" and ")); ++ g_string_append (buffer, get_dayname (r, i - 1)); + } + break; + + case ICAL_MONTHLY_RECURRENCE: + if (r->by_month_day[0] != ICAL_RECURRENCE_ARRAY_MAX) { + /* For Translators : 'The %s day of' is part of the sentence 'event recurring on the (nth) day of every month.' */ +- sprintf (buffer, _("The %s day of "), +- nth (r->by_month_day[0])); ++ g_string_append_printf ( ++ buffer, _("The %s day of "), ++ nth (r->by_month_day[0])); + } else { + int pos; + +@@ -818,20 +826,21 @@ write_recurrence_piece (EItipControl *it + + /* For Translators : 'The %s %s of' is part of the sentence 'event recurring on the (nth) (dayname) of every month.' + eg,third monday of every month */ +- sprintf (buffer, _("The %s %s of "), +- nth (pos), get_dayname (r, 0)); ++ g_string_append_printf ( ++ buffer, _("The %s %s of "), ++ nth (pos), get_dayname (r, 0)); + } + +- len = strlen (buffer); +- buffer += len; +- size -= len; + /* For Translators: In this can also be translated as "With the period of %d + month/months", where %d is a number. The entire sentence is of the form "Recurring: + Every %d month/months" */ + /* For Translators : 'every month' is part of the sentence 'event recurring on the (nth) day of every month.' */ + /* For Translators : 'every %d months' is part of the sentence 'event recurring on the (nth) day of every %d months.' + %d is a digit */ +- sprintf (buffer, ngettext("every month","every %d months", r->interval), r->interval); ++ g_string_append_printf ( ++ buffer, ngettext ("every month", ++ "every %d months", r->interval), ++ r->interval); + break; + + case ICAL_YEARLY_RECURRENCE: +@@ -840,20 +849,22 @@ write_recurrence_piece (EItipControl *it + Every %d year/years" */ + /* For Translators : 'Every year' is event Recurring every year */ + /* For Translators : 'Every %d years' is event Recurring every %d years. %d is a digit */ +- sprintf (buffer, ngettext("Every year", "Every %d years", r->interval), r->interval); ++ g_string_append_printf ( ++ buffer, ngettext ("Every year", ++ "Every %d years", r->interval), ++ r->interval); + break; + + default: + g_assert_not_reached (); + } + +- len = strlen (buffer); +- buffer += len; +- size -= len; + if (r->count) { + /* For Translators:'a total of %d time' is part of the sentence of the form 'event recurring every day,a total of % time.' %d is a digit*/ + /* For Translators:'a total of %d times' is part of the sentence of the form 'event recurring every day,a total of % times.' %d is a digit*/ +- sprintf (buffer, ngettext("a total of %d time", " a total of %d times", r->count), r->count); ++ g_string_append_printf ( ++ buffer, ngettext ("a total of %d time", ++ " a total of %d times", r->count), r->count); + } else if (!icaltime_is_null_time (r->until)) { + ECalComponentDateTime dt; + +@@ -861,12 +872,12 @@ write_recurrence_piece (EItipControl *it + dt.value = &r->until; + dt.tzid = icaltimezone_get_tzid ((icaltimezone *)r->until.zone); + +- write_label_piece (itip, &dt, buffer, size, ++ write_label_piece (itip, &dt, buffer, + /* For Translators : ', ending on' is part of the sentence of the form 'event recurring every day, ending on (date).'*/ + _(", ending on "), NULL, TRUE); + } + +- strcat (buffer, "
"); ++ g_string_append_len (buffer, "
", 4); + } + + static void +@@ -874,47 +885,51 @@ set_date_label (EItipControl *itip, GtkH + ECalComponent *comp) + { + ECalComponentDateTime datetime; +- static char buffer[1024]; ++ GString *buffer; + gchar *str; + gboolean wrote = FALSE, task_completed = FALSE; + ECalComponentVType type; + ++ buffer = g_string_sized_new (1024); + type = e_cal_component_get_vtype (comp); + +- buffer[0] = '\0'; + e_cal_component_get_dtstart (comp, &datetime); + if (datetime.value) { + /* For Translators : 'starts' is starts:date implying a task starts on what date */ + str = g_strdup_printf ("%s:", _("Starts")); +- write_label_piece (itip, &datetime, buffer, 1024, +- str, +- "
", FALSE); +- gtk_html_write (html, html_stream, buffer, strlen(buffer)); ++ write_label_piece (itip, &datetime, buffer, str, "
", FALSE); ++ gtk_html_write (html, html_stream, buffer->str, buffer->len); + wrote = TRUE; + g_free (str); + } + e_cal_component_free_datetime (&datetime); + +- buffer[0] = '\0'; ++ /* Reset the buffer. */ ++ g_string_truncate (buffer, 0); ++ + e_cal_component_get_dtend (comp, &datetime); + if (datetime.value){ + /* For Translators : 'ends' is ends:date implying a task ends on what date */ + str = g_strdup_printf ("%s:", _("Ends")); +- write_label_piece (itip, &datetime, buffer, 1024, str, "
", FALSE); +- gtk_html_write (html, html_stream, buffer, strlen (buffer)); ++ write_label_piece (itip, &datetime, buffer, str, "
", FALSE); ++ gtk_html_write (html, html_stream, buffer->str, buffer->len); + wrote = TRUE; + g_free (str); + } + e_cal_component_free_datetime (&datetime); + +- buffer[0] = '\0'; ++ /* Reset the buffer. */ ++ g_string_truncate (buffer, 0); ++ + if (e_cal_component_has_recurrences (comp)) { +- write_recurrence_piece (itip, comp, buffer, 1024); +- gtk_html_write (html, html_stream, buffer, strlen (buffer)); ++ write_recurrence_piece (itip, comp, buffer); ++ gtk_html_write (html, html_stream, buffer->str, buffer->len); + wrote = TRUE; + } + +- buffer[0] = '\0'; ++ /* Reset the buffer. */ ++ g_string_truncate (buffer, 0); ++ + datetime.tzid = NULL; + e_cal_component_get_completed (comp, &datetime.value); + if (type == E_CAL_COMPONENT_TODO && datetime.value) { +@@ -922,20 +937,22 @@ set_date_label (EItipControl *itip, GtkH + timezone. */ + str = g_strdup_printf ("%s:", _("Completed")); + datetime.value->is_utc = TRUE; +- write_label_piece (itip, &datetime, buffer, 1024, str, "
", FALSE); +- gtk_html_write (html, html_stream, buffer, strlen (buffer)); ++ write_label_piece (itip, &datetime, buffer, str, "
", FALSE); ++ gtk_html_write (html, html_stream, buffer->str, buffer->len); + wrote = TRUE; + task_completed = TRUE; + g_free (str); + } + e_cal_component_free_datetime (&datetime); + +- buffer[0] = '\0'; ++ /* Reset the buffer. */ ++ g_string_truncate (buffer, 0); ++ + e_cal_component_get_due (comp, &datetime); + if (type == E_CAL_COMPONENT_TODO && !task_completed && datetime.value) { + str = g_strdup_printf ("%s:", _("Due")); +- write_label_piece (itip, &datetime, buffer, 1024, str, "
", FALSE); +- gtk_html_write (html, html_stream, buffer, strlen (buffer)); ++ write_label_piece (itip, &datetime, buffer, str, "
", FALSE); ++ gtk_html_write (html, html_stream, buffer->str, buffer->len); + wrote = TRUE; + g_free (str); + } +@@ -944,6 +961,8 @@ set_date_label (EItipControl *itip, GtkH + + if (wrote) + gtk_html_stream_printf (html_stream, "
"); ++ ++ g_string_free (buffer, TRUE); + } + + static void diff --git a/evolution-2.10.3-CVE-2008-1109.patch b/evolution-2.10.3-CVE-2008-1109.patch new file mode 100644 index 0000000..46cae4d --- /dev/null +++ b/evolution-2.10.3-CVE-2008-1109.patch @@ -0,0 +1,61 @@ +diff -up evolution-2.10.3/calendar/gui/itip-utils.c.CVE-2008-1109 evolution-2.10.3/calendar/gui/itip-utils.c +--- evolution-2.10.3/calendar/gui/itip-utils.c.CVE-2008-1109 2008-06-04 05:55:50.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/itip-utils.c 2008-06-04 05:58:49.000000000 -0400 +@@ -158,50 +158,16 @@ get_attendee (GSList *attendees, char *a + + + static char * +-html_new_lines_for (char *string) ++html_new_lines_for (const char *string) + { +- char *html_string = (char *) malloc (sizeof (char)* (3500)); +- int length = strlen (string); +- int index = 0; +- char *index_ptr = string; +- char *temp = string; ++ gchar **lines; ++ gchar *joined; + +- /*Find the first occurence*/ +- index_ptr = strstr ((const char *)temp, "\n"); ++ lines = g_strsplit_set (string, "\n", -1); ++ joined = g_strjoinv ("
", lines); ++ g_strfreev (lines); + +- /*Doesn't occur*/ +- if (index_ptr == NULL) { +- strcpy (html_string, (const char *)string); +- html_string[length] = '\0'; +- return html_string; +- } +- +- /*Split into chunks inserting
for \n */ +- do{ +- while (temp != index_ptr){ +- html_string[index++] = *temp; +- temp++; +- } +- temp++; +- +- html_string[index++] = '<'; +- html_string[index++] = 'b'; +- html_string[index++] = 'r'; +- html_string[index++] = '>'; +- +- index_ptr = strstr ((const char *)temp, "\n"); +- +- } while (index_ptr); +- +- /*Don't leave out the last chunk*/ +- while (*temp != '\0'){ +- html_string[index++] = *temp; +- temp++; +- } +- +- html_string[index] = '\0'; +- +- return html_string; ++ return joined; + } + + char * diff --git a/evolution-2.10.3-fix-ETreeTableAdapter-crash.patch b/evolution-2.10.3-fix-ETreeTableAdapter-crash.patch new file mode 100644 index 0000000..1591e0e --- /dev/null +++ b/evolution-2.10.3-fix-ETreeTableAdapter-crash.patch @@ -0,0 +1,50 @@ +--- trunk/widgets/table/e-tree-table-adapter.c 2007/08/07 09:35:42 33964 ++++ trunk/widgets/table/e-tree-table-adapter.c 2007/08/24 09:10:55 34090 +@@ -80,6 +80,8 @@ + int node_removed_id; + int node_request_collapse_id; + int sort_info_changed_id; ++ ++ guint resort_idle_id; + }; + + static void etta_sort_info_changed (ETableSortInfo *sort_info, ETreeTableAdapter *etta); +@@ -498,6 +500,11 @@ + { + ETreeTableAdapter *etta = E_TREE_TABLE_ADAPTER (object); + ++ if (etta->priv->resort_idle_id) { ++ g_source_remove (etta->priv->resort_idle_id); ++ etta->priv->resort_idle_id = 0; ++ } ++ + if (etta->priv->root) { + kill_gnode(etta->priv->root, etta); + etta->priv->root = NULL; +@@ -728,6 +735,8 @@ + etta->priv->node_inserted_id = 0; + etta->priv->node_removed_id = 0; + etta->priv->node_request_collapse_id = 0; ++ ++ etta->priv->resort_idle_id = 0; + } + + static void +@@ -746,6 +755,7 @@ + resort_model (ETreeTableAdapter *etta) + { + etta_sort_info_changed (NULL, etta); ++ etta->priv->resort_idle_id = 0; + return FALSE; + } + +@@ -758,7 +768,8 @@ + /* FIXME: Really it shouldnt be required. But a lot of thread + * which were supposed to be present in the list is way below + */ +- g_idle_add (resort_model, etta); ++ if (!etta->priv->resort_idle_id) ++ etta->priv->resort_idle_id = g_idle_add ((GSourceFunc) resort_model, etta); + } + + static void diff --git a/evolution-2.10.3-server-message-double-free.patch b/evolution-2.10.3-server-message-double-free.patch new file mode 100644 index 0000000..8c4316c --- /dev/null +++ b/evolution-2.10.3-server-message-double-free.patch @@ -0,0 +1,15 @@ +diff -up evolution-2.10.3/mail/mail-session.c.server-message-double-free evolution-2.10.3/mail/mail-session.c +--- evolution-2.10.3/mail/mail-session.c.server-message-double-free 2008-03-25 10:01:13.000000000 -0400 ++++ evolution-2.10.3/mail/mail-session.c 2008-03-25 10:01:25.000000000 -0400 +@@ -389,10 +389,8 @@ alert_user(CamelSession *session, CamelS + mail_msg_unref (m); + } + +- if (m->ismain) { +- user_message_free (m); ++ if (m->ismain) + mail_msg_unref (m); +- } + + return result; + } diff --git a/evolution-2.10.3-todo-conduit.patch b/evolution-2.10.3-todo-conduit.patch new file mode 100644 index 0000000..65a2c9b --- /dev/null +++ b/evolution-2.10.3-todo-conduit.patch @@ -0,0 +1,12 @@ +diff -up evolution-2.10.3/calendar/conduits/todo/todo-conduit.c.todo-conduit evolution-2.10.3/calendar/conduits/todo/todo-conduit.c +--- evolution-2.10.3/calendar/conduits/todo/todo-conduit.c.todo-conduit 2007-11-03 15:21:56.000000000 -0400 ++++ evolution-2.10.3/calendar/conduits/todo/todo-conduit.c 2007-11-03 15:22:10.000000000 -0400 +@@ -992,7 +992,7 @@ comp_from_remote_record (GnomePilotCondu + e_cal_component_set_status (comp, ICAL_STATUS_NEEDSACTION); + } + +- if (!is_empty_time (todo.due)) { ++ if (!todo.indefinite && !is_empty_time (todo.due)) { + due = tm_to_icaltimetype (&todo.due, TRUE); + dt.value = &due; + e_cal_component_set_due (comp, &dt); diff --git a/evolution-2.10.3-version-checks.patch b/evolution-2.10.3-version-checks.patch new file mode 100644 index 0000000..9ea0f56 --- /dev/null +++ b/evolution-2.10.3-version-checks.patch @@ -0,0 +1,347 @@ +--- evolution-2.10.3/a11y/Makefile.am.version-checks 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.3/a11y/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -31,4 +31,4 @@ libevolution_a11y_la_LIBADD = \ + e-text/libgal-a11y-etext.la \ + e-table/libgal-a11y-etable.la \ + $(top_builddir)/e-util/libeutil.la \ +- $(EXTRA_GNOME_LIBS) ++ $(GNOME_PLATFORM_LIBS) +--- evolution-2.10.3/a11y/e-text/Makefile.am.version-checks 2007-04-09 09:10:36.000000000 -0400 ++++ evolution-2.10.3/a11y/e-text/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -1,7 +1,7 @@ + INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/widgets \ +- $(EXTRA_GNOME_CFLAGS) \ ++ $(GNOME_PLATFORM_CFLAGS) \ + -DG_LOG_DOMAIN=\"e-text\" + + noinst_LTLIBRARIES = libgal-a11y-etext.la +--- evolution-2.10.3/a11y/e-table/Makefile.am.version-checks 2007-04-09 09:10:38.000000000 -0400 ++++ evolution-2.10.3/a11y/e-table/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -1,7 +1,7 @@ + INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/widgets \ +- $(EXTRA_GNOME_CFLAGS) \ ++ $(GNOME_PLATFORM_CFLAGS) \ + -DG_LOG_DOMAIN=\"e-table\" + + noinst_LTLIBRARIES = libgal-a11y-etable.la +--- evolution-2.10.3/configure.in.version-checks 2007-07-27 10:45:06.000000000 -0400 ++++ evolution-2.10.3/configure.in 2007-07-27 10:55:54.000000000 -0400 +@@ -4,6 +4,34 @@ AC_PREREQ(2.52) + AC_INIT(evolution, 2.10.3, http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution) + AC_CONFIG_SRCDIR(README) + ++# Some requirements have versioned package names ++# XXX In the spirit of getting rid of versioned ++# files, can we drop these suffixes? ++EDS_PACKAGE=1.2 ++GTKHTML_PACKAGE=3.14 ++ ++# Required Packages ++m4_define([gtk_minimum_version], [2.10.0]) ++m4_define([eds_minimum_version], [1.9.4]) ++m4_define([gnome_icon_theme_minimum_version], [1.2.0]) ++m4_define([gnome_vfs_minimum_version], [2.4.0]) ++m4_define([libbonoboui_minimum_version], [2.4.2]) ++m4_define([libgtkhtml_minimum_version], [3.14.0]) ++m4_define([gconf_minimum_version], [2.0.0]) # XXX Just a Guess ++m4_define([libglade_minimum_version], [2.0.0]) # XXX Just a Guess ++m4_define([libgnomecanvas_minimum_version], [2.0.0]) # XXX Just a Guess ++m4_define([libgnomeui_minimum_version], [2.0.0]) # XXX Just a Guess ++m4_define([libxml_minimum_version], [2.0.0]) # XXX Just a Guess ++ ++# Optional Packages ++# ++# FIXME Minimum versions for dbus-glib-1 and libnm_glib ? ++# FIXME Move audio-inline plugin from gstreamer-0.8 to 0.10 ? ++# ++m4_define([dbus_minimum_version], [1.0.0]) ++m4_define([hal_minimum_version], [0.5.4]) ++m4_define([libnotify_minimum_version], [0.3.0]) ++m4_define([gnome_pilot_minimum_version], [2.0.0]) # XXX Just a Guess + + # GNOME Documentation + GNOME_DOC_INIT +@@ -127,6 +155,27 @@ AM_CONDITIONAL(OS_WIN32, [test $os_win32 + AC_SUBST(NO_UNDEFINED) + AC_SUBST(SOEXT) + ++# Check for base dependencies early. ++PKG_CHECK_MODULES(GNOME_PLATFORM, ++ [gtk+-2.0 >= gtk_minimum_version ++ gconf-2.0 >= gconf_minimum_version ++ gnome-vfs-2.0 >= gnome_vfs_minimum_version ++ libbonoboui-2.0 >= libbonoboui_minimum_version ++ libglade-2.0 >= libglade_minimum_version ++ libgnomecanvas-2.0 >= libgnomecanvas_minimum_version ++ libgnomeui-2.0 >= libgnomeui_minimum_version ++ libxml-2.0 >= libxml_minimum_version]) ++AC_SUBST(GNOME_PLATFORM_CFLAGS) ++AC_SUBST(GNOME_PLATFORM_LIBS) ++ ++PKG_CHECK_MODULES(EVOLUTION_DATA_SERVER, ++ [libebook-$EDS_PACKAGE >= eds_minimum_version ++ libecal-$EDS_PACKAGE >= eds_minimum_version ++ libedataserver-$EDS_PACKAGE >= eds_minimum_version ++ libedataserverui-$EDS_PACKAGE >= eds_minimum_version ++ libegroupwise-$EDS_PACKAGE >= eds_minimum_version ++ libexchange-storage-$EDS_PACKAGE >= eds_minimum_version]) ++ + dnl ****************************** + dnl iconv checking + dnl ****************************** +@@ -403,7 +452,7 @@ AC_CHECK_FUNCS(statfs) + dnl ************************************************** + dnl * Gnome Icon Theme + dnl ************************************************** +-PKG_CHECK_MODULES(GIT, gnome-icon-theme >= 1.2.0) ++PKG_CHECK_MODULES(GIT, gnome-icon-theme >= gnome_icon_theme_minimum_version) + + dnl ************************************************** + dnl * Accessibility support +@@ -563,7 +612,8 @@ AC_CHECK_FUNCS(regexec,,[AC_CHECK_LIB(re + [AC_MSG_ERROR([No regex library found])])]) + AC_SUBST(REGEX_LIBS) + +-PKG_CHECK_MODULES(GTKHTML, libgtkhtml-3.14) ++# XXX Drop the version from the package name? ++PKG_CHECK_MODULES(GTKHTML, libgtkhtml-3.14 >= libgtkhtml_minimum_version) + AC_SUBST(GTKHTML_CFLAGS) + AC_SUBST(GTKHTML_LIBS) + GTKHTML_DATADIR=`$PKG_CONFIG --variable gtkhtml_datadir libgtkhtml-3.14` +@@ -580,7 +630,7 @@ dnl ****************************** + AC_ARG_ENABLE(pilot-conduits, + [ --enable-pilot-conduits=[no/yes] Enable support for building pilot conduits.],,enable_pilot_conduits=no) + if test "x$enable_pilot_conduits" = "xyes"; then +- PKG_CHECK_MODULES(GNOME_PILOT, gnome-pilot-2.0) ++ PKG_CHECK_MODULES(GNOME_PILOT, gnome-pilot-2.0 >= gnome_pilot_minimum_version) + + CFLAGS_save="$CFLAGS" + CFLAGS="$CFLAGS $GNOME_PILOT_CFLAGS" +@@ -1178,27 +1228,12 @@ fi + + dnl --- Required version numbers + +-GTKHTML_REQUIRED=3.14.0 +-GTKHTML_PACKAGE=3.14 +-EDS_REQUIRED=1.9.4 +-EDS_PACKAGE=1.2 +-BONOBOUI_REQUIRED=2.4.2 +-GNOME_VFS_REQUIRED=2.4 +- +-AC_SUBST(GTKHTML_REQUIRED) +-AC_SUBST(GTKHTML_PACKAGE) +-AC_SUBST(EDS_REQUIRED) +-AC_SUBST(EDS_PACKAGE) ++BONOBOUI_REQUIRED=libbonoboui_minimum_version + AC_SUBST(BONOBOUI_REQUIRED) +-AC_SUBST(GNOME_VFS_REQUIRED) + + dnl --- Flags to get all the GNOME stuff + +-FULL_GNOME_DEPS="glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0" +- +-EVO_SET_COMPILE_FLAGS(GNOME_FULL, $FULL_GNOME_DEPS) +-AC_SUBST(GNOME_FULL_CFLAGS) +-AC_SUBST(GNOME_FULL_LIBS) ++FULL_GNOME_DEPS="libbonoboui-2.0 gnome-vfs-2.0 libgnomeui-2.0 libglade-2.0" + + CPPFLAGS_save="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I libgnomeui-2.0`" +@@ -1206,11 +1241,7 @@ AC_CHECK_HEADERS(libgnomeui/gnome-icon-l + AC_CHECK_HEADERS(libgnomeui/gnome-thumbnail.h) + CPPFLAGS="$CPPFLAGS_save" + +-PKG_CHECK_MODULES(EXTRA_GNOME, libgnomeprint-2.2 >= 2.7.0 libgnomeprintui-2.2 >= 2.2.1 $FULL_GNOME_DEPS) +-AC_SUBST(EXTRA_GNOME_LIBS) +-AC_SUBST(EXTRA_GNOME_CFLAGS) +- +-PKG_CHECK_MODULES(HAL, hal >= 0.5.4, HAVE_HAL="yes", HAVE_HAL="no") ++PKG_CHECK_MODULES(HAL, hal >= hal_minimum_version, HAVE_HAL="yes", HAVE_HAL="no") + if test "x$HAVE_HAL" = "xyes"; then + AC_DEFINE(HAVE_HAL, 1, [hal available]) + HAL_REQUIREMENT="hal" +@@ -1226,7 +1257,7 @@ EVO_SET_COMPILE_FLAGS(CAMEL, camel-provi + AC_SUBST(CAMEL_CFLAGS) + AC_SUBST(CAMEL_LIBS) + +-EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, camel-provider-$EDS_PACKAGE libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED libegroupwise-$EDS_PACKAGE >= $EDS_REQUIRED) ++EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, camel-provider-$EDS_PACKAGE libedataserver-$EDS_PACKAGE libegroupwise-$EDS_PACKAGE) + AC_SUBST(CAMEL_GROUPWISE_CFLAGS) + AC_SUBST(CAMEL_GROUPWISE_LIBS) + +@@ -1239,33 +1270,33 @@ else + fi + fi + +-EVO_SET_COMPILE_FLAGS(CERT_UI, libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED libglade-2.0 gtk+-2.0 glib-2.0 gobject-2.0 gthread-2.0, ++EVO_SET_COMPILE_FLAGS(CERT_UI, libedataserverui-$EDS_PACKAGE libglade-2.0 gthread-2.0, + $MANUAL_NSS_CFLAGS $MOZILLA_NSS_CFLAGS, + $MOZILLA_L_DIR $MANUAL_NSS_LIBS $MOZILLA_NSS_LIBS) + AC_SUBST(CERT_UI_CFLAGS) + AC_SUBST(CERT_UI_LIBS) + +-EVO_SET_COMPILE_FLAGS(E_NAME, libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED) ++EVO_SET_COMPILE_FLAGS(E_NAME, libgnomeui-2.0 libbonoboui-2.0) + AC_SUBST(E_NAME_CFLAGS) + AC_SUBST(E_NAME_LIBS) + +-EVO_SET_COMPILE_FLAGS(E_UTIL, gthread-2.0 gconf-2.0 libxml-2.0 gtk+-unix-print-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 libgnomeprintui-2.2 libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED $mozilla_nspr $mono_package, $THREADS_CFLAGS $MANUAL_NSPR_CFLAGS, $THREADS_LIBS $MANUAL_NSPR_LIBS) ++EVO_SET_COMPILE_FLAGS(E_UTIL, libbonoboui-2.0 libglade-2.0 libgnomeui-2.0 libedataserver-$EDS_PACKAGE libedataserverui-$EDS_PACKAGE $mozilla_nspr $mono_package, $THREADS_CFLAGS $MANUAL_NSPR_CFLAGS, $THREADS_LIBS $MANUAL_NSPR_LIBS) + AC_SUBST(E_UTIL_CFLAGS) + AC_SUBST(E_UTIL_LIBS) + +-EVO_SET_COMPILE_FLAGS(TZDIALOG, libecal-$EDS_PACKAGE >= $EDS_REQUIRED, $GNOME_FULL_CFLAGS, $GNOME_FULL_LIBS) ++EVO_SET_COMPILE_FLAGS(TZDIALOG, libecal-$EDS_PACKAGE, $GNOME_PLATFORM_CFLAGS, $GNOME_PLATFORM_LIBS) + AC_SUBST(TZDIALOG_CFLAGS) + AC_SUBST(TZDIALOG_LIBS) + +-EVO_SET_COMPILE_FLAGS(E_WIDGETS, glib-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED gnome-vfs-2.0 gnome-vfs-module-2.0 libgnomeui-2.0 libglade-2.0 libgnomecanvas-2.0 libxml-2.0 gconf-2.0 libedataserverui-$EDS_PACKAGE libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED) ++EVO_SET_COMPILE_FLAGS(E_WIDGETS, libbonoboui-2.0 gnome-vfs-module-2.0 libgnomeui-2.0 libglade-2.0 libedataserverui-$EDS_PACKAGE libedataserver-$EDS_PACKAGE) + AC_SUBST(E_WIDGETS_CFLAGS) + AC_SUBST(E_WIDGETS_LIBS) + +-EVO_SET_COMPILE_FLAGS(IMPORTERS, libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED camel-provider-$EDS_PACKAGE camel-$EDS_PACKAGE gconf-2.0 libglade-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libgnomeui-2.0 libebook-$EDS_PACKAGE >= $EDS_REQUIRED) ++EVO_SET_COMPILE_FLAGS(IMPORTERS, libedataserverui-$EDS_PACKAGE camel-provider-$EDS_PACKAGE camel-$EDS_PACKAGE libglade-2.0 libbonoboui-2.0 libgnomeui-2.0 libebook-$EDS_PACKAGE) + AC_SUBST(IMPORTERS_CFLAGS) + AC_SUBST(IMPORTERS_LIBS) + +-EVO_SET_COMPILE_FLAGS(LIBFILTER, libgnome-2.0 libgnomeui-2.0 libglade-2.0 libxml-2.0 gconf-2.0 libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED) ++EVO_SET_COMPILE_FLAGS(LIBFILTER, libgnomeui-2.0 libglade-2.0 libedataserver-$EDS_PACKAGE >= $EDS_REQUIRED) + AC_SUBST(LIBFILTER_CFLAGS) + AC_SUBST(LIBFILTER_LIBS) + +@@ -1292,14 +1323,14 @@ AM_CONDITIONAL(NM_SUPPORT_GLIB, test x$N + AM_CONDITIONAL(NM_SUPPORT, test x$NM_SUPPORT = xyes) + + +-EVO_SET_COMPILE_FLAGS(SHELL, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gnome-vfs-2.0 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED $NM_SUPPORT_PACKAGES) ++EVO_SET_COMPILE_FLAGS(SHELL, libgnomeui-2.0 libbonoboui-2.0 libglade-2.0 gnome-vfs-2.0 libgtkhtml-$GTKHTML_PACKAGE $NM_SUPPORT_PACKAGES) + + AC_SUBST(SHELL_CFLAGS) + AC_SUBST(SHELL_LIBS) + + dnl --- evolution-addressbook flags + +-EVOLUTION_ADDRESSBOOK_DEPS="gconf-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 libgnomeui-2.0 libgnome-2.0 libgnomecanvas-2.0 gtk+-unix-print-2.0 gnome-vfs-2.0 libgnomeprintui-2.2 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libebook-$EDS_PACKAGE >= $EDS_REQUIRED libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED camel-$EDS_PACKAGE" ++EVOLUTION_ADDRESSBOOK_DEPS="libbonoboui-2.0 libglade-2.0 libgnomeui-2.0 gnome-vfs-2.0 libgtkhtml-$GTKHTML_PACKAGE libebook-$EDS_PACKAGE libedataserverui-$EDS_PACKAGE camel-$EDS_PACKAGE" + + EVO_SET_COMPILE_FLAGS(EVOLUTION_ADDRESSBOOK, $EVOLUTION_ADDRESSBOOK_DEPS) + AC_SUBST(EVOLUTION_ADDRESSBOOK_CFLAGS) +@@ -1313,7 +1344,7 @@ fi + + LIBNOTIFY_CFLAGS= + LIBNOTIFY_LIBS= +-PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.3.0, HAVE_LIBNOTIFY="yes", HAVE_LIBNOTIFY="no") ++PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= libnotify_minimum_version, HAVE_LIBNOTIFY="yes", HAVE_LIBNOTIFY="no") + if test "x$HAVE_LIBNOTIFY" = "xyes"; then + AC_DEFINE(HAVE_LIBNOTIFY, 1, [libnotify available]) + libnotify="libnotify" +@@ -1337,7 +1368,7 @@ EVO_SET_COMPILE_FLAGS(LIBSOUP, $LIBSOUP + AC_SUBST(LIBSOUP_CFLAGS) + AC_SUBST(LIBSOUP_LIBS) + +-EVO_SET_COMPILE_FLAGS(EVOLUTION_CALENDAR, libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 libglade-2.0 gnome-vfs-2.0 gtk+-unix-print-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 gnome-vfs-module-2.0 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libebook-$EDS_PACKAGE >= $EDS_REQUIRED libecal-$EDS_PACKAGE >= $EDS_REQUIRED libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED $HAL_REQUIREMENT $libnotify) ++EVO_SET_COMPILE_FLAGS(EVOLUTION_CALENDAR, libgnomeui-2.0 libbonoboui-2.0 libglade-2.0 gnome-vfs-module-2.0 libgtkhtml-$GTKHTML_PACKAGE libebook-$EDS_PACKAGE libecal-$EDS_PACKAGE libedataserverui-$EDS_PACKAGE $HAL_REQUIREMENT $libnotify) + AC_SUBST(EVOLUTION_CALENDAR_CFLAGS) + AC_SUBST(EVOLUTION_CALENDAR_LIBS) + +@@ -1349,7 +1380,7 @@ fi + + dnl --- evolution-mail flags + +-EVO_SET_COMPILE_FLAGS(EVOLUTION_MAIL, camel-provider-$EDS_PACKAGE libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 gnome-vfs-module-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libgtkhtml-$GTKHTML_PACKAGE >= $GTKHTML_REQUIRED libxml-2.0 bonobo-activation-2.0 gthread-2.0 gconf-2.0 gtk+-unix-print-2.0 $mozilla_nss libebook-$EDS_PACKAGE >= $EDS_REQUIRED libedataserverui-$EDS_PACKAGE >= $EDS_REQUIRED) ++EVO_SET_COMPILE_FLAGS(EVOLUTION_MAIL, camel-provider-$EDS_PACKAGE libgnomeui-2.0 libbonoboui-2.0 libglade-2.0 gnome-vfs-module-2.0 libgtkhtml-$GTKHTML_PACKAGE bonobo-activation-2.0 $mozilla_nss libebook-$EDS_PACKAGE libedataserverui-$EDS_PACKAGE) + AC_SUBST(EVOLUTION_MAIL_CFLAGS) + AC_SUBST(EVOLUTION_MAIL_LIBS) + +@@ -1372,7 +1403,7 @@ fi + + dnl --- evolution-test flags + +-EVO_SET_COMPILE_FLAGS(EVOLUTION_TEST, libgnome-2.0 libgnomeui-2.0 libbonobo-2.0 libbonoboui-2.0 >= $BONOBOUI_REQUIRED) ++EVO_SET_COMPILE_FLAGS(EVOLUTION_TEST, libgnomeui-2.0 libbonoboui-2.0) + AC_SUBST(EVOLUTION_TEST_CFLAGS) + AC_SUBST(EVOLUTION_TEST_LIBS) + +@@ -1591,7 +1622,7 @@ if echo ${plugins_enabled} | grep "excha + dnl ************************************************** + dnl * Exchange Operations plugin + dnl ************************************************** +- EVO_SET_COMPILE_FLAGS(CAMEL_EXCHANGE, libbonoboui-2.0 >= $BONOBOUI_REQUIRED libglade-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 gthread-2.0 gconf-2.0 camel-provider-$EDS_PACKAGE libebook-$EDS_PACKAGE >= $EDS_REQUIRED libedataserverui-$EDS_PACKAGE libexchange-storage-$EDS_PACKAGE >= $EDS_REQUIRED libecal-$EDS_PACKAGE) ++ EVO_SET_COMPILE_FLAGS(CAMEL_EXCHANGE, libbonoboui-2.0 libglade-2.0 gconf-2.0 camel-provider-$EDS_PACKAGE libebook-$EDS_PACKAGE libedataserverui-$EDS_PACKAGE libexchange-storage-$EDS_PACKAGE libecal-$EDS_PACKAGE) + AC_SUBST(CAMEL_EXCHANGE_CFLAGS) + AC_SUBST(CAMEL_EXCHANGE_LIBS) + else +--- evolution-2.10.3/widgets/misc/Makefile.am.version-checks 2007-04-09 09:10:24.000000000 -0400 ++++ evolution-2.10.3/widgets/misc/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -10,7 +10,7 @@ INCLUDES = \ + -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ + -DG_LOG_DOMAIN=__FILE__ \ + $(EVOLUTION_MAIL_CFLAGS) \ +- $(EXTRA_GNOME_CFLAGS) \ ++ $(GNOME_PLATFORM_CFLAGS) \ + $(ICONV_CFLAGS) + + +@@ -137,7 +137,7 @@ libemiscwidgets_la_LIBADD = $(top_buildd + $(top_builddir)/a11y/widgets/libevolution-widgets-a11y.la \ + $(top_builddir)/a11y/libevolution-a11y.la \ + $(CAMEL_LIBS) \ +- $(EXTRA_GNOME_LIBS) \ ++ $(GNOME_PLATFORM_LIBS) \ + $(ICONV_LIBS) + + libefilterbar_la_SOURCES = \ +--- evolution-2.10.3/widgets/table/Makefile.am.version-checks 2007-04-09 09:10:21.000000000 -0400 ++++ evolution-2.10.3/widgets/table/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -13,7 +13,7 @@ INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/widgets \ + $(E_WIDGETS_CFLAGS) \ +- $(EXTRA_GNOME_CFLAGS) \ ++ $(GNOME_PLATFORM_CFLAGS) \ + -DEVOLUTION_GLADEDIR=\"$(gladedir)\" \ + -DG_LOG_DOMAIN=\"e-table\" + +@@ -155,7 +155,7 @@ libetable_la_LIBADD = \ + $(top_builddir)/e-util/libeutil.la \ + $(top_builddir)/a11y/libevolution-a11y.la \ + $(E_WIDGETS_LIBS) \ +- $(EXTRA_GNOME_LIBS) ++ $(GNOME_PLATFORM_LIBS) + + icons = \ + add-col.xpm \ +--- evolution-2.10.3/widgets/text/Makefile.am.version-checks 2007-04-09 09:10:17.000000000 -0400 ++++ evolution-2.10.3/widgets/text/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -5,7 +5,7 @@ endif + INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/widgets \ +- $(EXTRA_GNOME_CFLAGS) \ ++ $(GNOME_PLATFORM_CFLAGS) \ + -DG_LOG_DOMAIN=\"e-text\" + + +@@ -44,5 +44,5 @@ libetext_la_LIBADD = \ + $(top_builddir)/e-util/libeutil.la \ + $(top_builddir)/a11y/libevolution-a11y.la \ + $(top_builddir)/widgets/table/libetable.la \ +- $(EXTRA_GNOME_LIBS) \ ++ $(GNOME_PLATFORM_LIBS) \ + $(REGEX_LIBS) +--- evolution-2.10.3/tools/Makefile.am.version-checks 2007-04-09 09:07:44.000000000 -0400 ++++ evolution-2.10.3/tools/Makefile.am 2007-07-27 10:45:41.000000000 -0400 +@@ -16,7 +16,7 @@ INCLUDES = \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DDATADIR=\""$(datadir)"\" \ + -DLIBDIR=\""$(libdir)"\" \ +- $(GNOME_FULL_CFLAGS) ++ $(GNOME_PLATFORM_CFLAGS) + + EXTRA_DIST = verify-evolution-install.sh + diff --git a/evolution-2.4.1-hide-switcher-buttons-by-default.patch b/evolution-2.4.1-hide-switcher-buttons-by-default.patch new file mode 100644 index 0000000..bada5b5 --- /dev/null +++ b/evolution-2.4.1-hide-switcher-buttons-by-default.patch @@ -0,0 +1,11 @@ +--- evolution-2.4.1/shell/apps_evolution_shell.schemas.in.in.hide-switcher-buttons-by-default 2005-10-26 16:21:15.000000000 -0400 ++++ evolution-2.4.1/shell/apps_evolution_shell.schemas.in.in 2005-10-26 16:21:22.000000000 -0400 +@@ -99,7 +99,7 @@ + /apps/evolution/shell/view_defaults/buttons_visible + evolution + bool +- TRUE ++ FALSE + + Window buttons are visible + Whether the window buttons should be visible. diff --git a/evolution-2.5.4-fix-conduit-dir.patch b/evolution-2.5.4-fix-conduit-dir.patch new file mode 100644 index 0000000..cba890a --- /dev/null +++ b/evolution-2.5.4-fix-conduit-dir.patch @@ -0,0 +1,88 @@ +--- evolution-2.9.5/addressbook/conduit/Makefile.am.fix-conduit-dir 2007-01-03 10:32:47.000000000 -0500 ++++ evolution-2.9.5/addressbook/conduit/Makefile.am 2007-01-21 22:05:23.000000000 -0500 +@@ -28,7 +28,7 @@ + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-address-$(BASE_VERSION).conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.9.5/addressbook/conduit/Makefile.in.fix-conduit-dir 2007-01-21 22:05:44.000000000 -0500 ++++ evolution-2.9.5/addressbook/conduit/Makefile.in 2007-01-21 22:06:04.000000000 -0500 +@@ -459,7 +459,7 @@ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_ADDRESSBOOK_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-address-$(BASE_VERSION).conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.9.5/calendar/conduits/todo/Makefile.am.fix-conduit-dir 2007-01-03 10:34:54.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/todo/Makefile.am 2007-01-21 22:05:23.000000000 -0500 +@@ -24,7 +24,7 @@ + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-todo-$(BASE_VERSION).conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.9.5/calendar/conduits/todo/Makefile.in.fix-conduit-dir 2007-01-21 22:06:31.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/todo/Makefile.in 2007-01-21 22:06:39.000000000 -0500 +@@ -454,7 +454,7 @@ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-todo-$(BASE_VERSION).conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.9.5/calendar/conduits/memo/Makefile.am.fix-conduit-dir 2007-01-03 10:34:54.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/memo/Makefile.am 2007-01-21 22:05:23.000000000 -0500 +@@ -24,7 +24,7 @@ + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-memo-$(BASE_VERSION).conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.9.5/calendar/conduits/memo/Makefile.in.fix-conduit-dir 2007-01-21 22:06:46.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/memo/Makefile.in 2007-01-21 22:06:54.000000000 -0500 +@@ -454,7 +454,7 @@ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-memo-$(BASE_VERSION).conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.9.5/calendar/conduits/calendar/Makefile.am.fix-conduit-dir 2007-01-03 10:34:54.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/calendar/Makefile.am 2007-01-21 22:05:23.000000000 -0500 +@@ -24,7 +24,7 @@ + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-calendar-$(BASE_VERSION).conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.9.5/calendar/conduits/calendar/Makefile.in.fix-conduit-dir 2007-01-21 22:06:15.000000000 -0500 ++++ evolution-2.9.5/calendar/conduits/calendar/Makefile.in 2007-01-21 22:06:23.000000000 -0500 +@@ -456,7 +456,7 @@ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-calendar-$(BASE_VERSION).conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) diff --git a/evolution-2.5.4-fix-conduits.patch b/evolution-2.5.4-fix-conduits.patch new file mode 100644 index 0000000..d718ee2 --- /dev/null +++ b/evolution-2.5.4-fix-conduits.patch @@ -0,0 +1,515 @@ +--- evolution-2.5.4/addressbook/conduit/address-conduit.c.fix-conduits 2005-12-08 03:15:02.000000000 -0500 ++++ evolution-2.5.4/addressbook/conduit/address-conduit.c 2006-01-10 19:33:44.000000000 -0500 +@@ -462,14 +462,19 @@ + { + static char buff[ 4096 ]; + struct Address addr; ++ pi_buffer_t piBuf; + + if (remote == NULL) { + sprintf (buff, "[NULL]"); + return buff; + } + ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&addr, 0, sizeof (struct Address)); +- unpack_Address (&addr, remote->record, remote->length); ++ unpack_Address (&addr, &piBuf, address_v1); + + g_snprintf (buff, 4096, "['%s' '%s' '%s']", + addr.entry[entryLastname] ? +@@ -791,7 +796,8 @@ + EAddrConduitContext *ctxt) + { + GnomePilotRecord p; +- static char record[0xffff]; ++ static unsigned char record[0xffff]; ++ pi_buffer_t piBuf; + + g_assert (local->addr != NULL ); + +@@ -803,9 +809,17 @@ + p.archived = local->local.archived; + p.secret = local->local.secret; + ++ memset (&piBuf, 0, sizeof (piBuf)); ++ memset (record, 0, sizeof (record)); ++ pack_Address (local->addr, &piBuf, address_v1); ++ + /* Generate pilot record structure */ ++ if (piBuf.used > 0) ++ memcpy (record, piBuf.data, piBuf.used); + p.record = record; +- p.length = pack_Address (local->addr, p.record, 0xffff); ++ p.length = piBuf.used; ++ if (piBuf.data) ++ free (piBuf.data); + + return p; + } +@@ -834,16 +848,16 @@ + */ + if (local->local.ID != 0) { + struct Address addr; +- char record[0xffff]; ++ pi_buffer_t *buffer = pi_buffer_new (0xffff); + int cat = 0; + + if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, + ctxt->dbi->db_handle, +- local->local.ID, &record, +- NULL, NULL, NULL, &cat) > 0) { ++ local->local.ID, buffer, ++ NULL, NULL, &cat) > 0) { + local->local.category = cat; + memset (&addr, 0, sizeof (struct Address)); +- unpack_Address (&addr, record, 0xffff); ++ unpack_Address (&addr, buffer, address_v1); + for (i = 0; i < 5; i++) { + if (addr.entry[entryPhone1 + i]) + local->addr->entry[entryPhone1 + i] = +@@ -858,6 +872,8 @@ + } + free_Address (&addr); + } ++ ++ pi_buffer_free (buffer); + } + + local->addr->entry[entryFirstname] = e_pilot_utf8_to_pchar (e_contact_get_const (contact, E_CONTACT_GIVEN_NAME)); +@@ -1019,10 +1035,16 @@ + EContactField next_mail, next_home, next_work, next_fax; + EContactField next_other, next_main, next_pager, next_mobile; + int i; ++ pi_buffer_t piBuf; + + g_return_val_if_fail(remote!=NULL,NULL); + memset (&address, 0, sizeof (struct Address)); +- unpack_Address (&address, remote->record, remote->length); ++ ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ ++ unpack_Address (&address, &piBuf, address_v1); + + if (in_contact == NULL) + contact = e_contact_new (); +@@ -1212,7 +1234,7 @@ + EBookQuery *query; + GList *l; + int len; +- unsigned char *buf; ++ pi_buffer_t *buffer; + char *filename; + char *change_id; + char *auth; +@@ -1302,9 +1324,9 @@ + gnome_pilot_conduit_sync_abs_set_num_updated_local_records (abs_conduit, mod_records); + gnome_pilot_conduit_sync_abs_set_num_deleted_local_records(abs_conduit, del_records); + +- buf = (unsigned char*)g_malloc (0xffff); ++ buffer = pi_buffer_new (0xffff); + len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, +- (unsigned char *)buf, 0xffff); ++ -1, buffer); + + if (len < 0) { + WARN (_("Could not read pilot's Address application block")); +@@ -1313,8 +1335,8 @@ + _("Could not read pilot's Address application block")); + return -1; + } +- unpack_AddressAppInfo (&(ctxt->ai), buf, len); +- g_free (buf); ++ unpack_AddressAppInfo (&(ctxt->ai), buffer->data, len); ++ pi_buffer_free (buffer); + + check_for_slow_setting (conduit, ctxt); + if (ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyToPilot +--- evolution-2.5.4/calendar/conduits/calendar/calendar-conduit.c.fix-conduits 2006-01-02 06:38:57.000000000 -0500 ++++ evolution-2.5.4/calendar/conduits/calendar/calendar-conduit.c 2006-01-10 19:33:44.000000000 -0500 +@@ -413,14 +413,20 @@ + { + static char buff[ 4096 ]; + struct Appointment appt; ++ pi_buffer_t piBuf; + + if (remote == NULL) { + sprintf (buff, "[NULL]"); + return buff; + } + ++ ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&appt, 0, sizeof (struct Appointment)); +- unpack_Appointment (&appt, remote->record, remote->length); ++ unpack_Appointment (&appt, &piBuf, datebook_v1); + + g_snprintf (buff, 4096, "[%ld %ld '%s' '%s']", + mktime (&appt.begin), +@@ -818,7 +824,8 @@ + ECalConduitContext *ctxt) + { + GnomePilotRecord p; +- static char record[0xffff]; ++ static unsigned char record[0xffff]; ++ pi_buffer_t piBuf; + + g_assert (local->comp != NULL); + g_assert (local->appt != NULL ); +@@ -829,9 +836,17 @@ + p.archived = local->local.archived; + p.secret = local->local.secret; + ++ memset (&piBuf, 0, sizeof (piBuf)); ++ memset (record, 0, sizeof (record)); ++ pack_Appointment (local->appt, &piBuf, datebook_v1); ++ + /* Generate pilot record structure */ ++ if (piBuf.used > 0) ++ memcpy (record, piBuf.data, piBuf.used); + p.record = record; +- p.length = pack_Appointment (local->appt, p.record, 0xffff); ++ p.length = piBuf.used; ++ if (piBuf.data) ++ free (piBuf.data); + + return p; + } +@@ -867,22 +882,24 @@ + * we don't overwrite them + */ + if (local->local.ID != 0) { +- struct Appointment appt; +- char record[0xffff]; ++ struct Appointment appt; ++ pi_buffer_t *buffer = pi_buffer_new (0xffff); + int cat = 0; + + if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, + ctxt->dbi->db_handle, +- local->local.ID, &record, +- NULL, NULL, NULL, &cat) > 0) { ++ local->local.ID, buffer, ++ NULL, NULL, &cat) > 0) { + local->local.category = cat; + memset (&appt, 0, sizeof (struct Appointment)); +- unpack_Appointment (&appt, record, 0xffff); ++ unpack_Appointment (&appt, buffer, datebook_v1); + local->appt->alarm = appt.alarm; + local->appt->advance = appt.advance; + local->appt->advanceUnits = appt.advanceUnits; + free_Appointment (&appt); + } ++ ++ pi_buffer_free (buffer); + } + + /* STOP: don't replace these with g_strdup, since free_Appointment +@@ -1140,11 +1157,17 @@ + GSList *edl = NULL; + char *txt; + int pos, i; ++ pi_buffer_t piBuf; + + g_return_val_if_fail (remote != NULL, NULL); + ++ ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&appt, 0, sizeof (struct Appointment)); +- unpack_Appointment (&appt, remote->record, remote->length); ++ unpack_Appointment (&appt, &piBuf, datebook_v1); + + if (in_comp == NULL) { + comp = e_cal_component_new (); +@@ -1409,7 +1432,7 @@ + GnomePilotConduitSyncAbs *abs_conduit; + GList *removed = NULL, *added = NULL, *l; + int len; +- unsigned char *buf; ++ pi_buffer_t *buffer; + char *filename, *change_id; + icalcomponent *icalcomp; + gint num_records, add_records = 0, mod_records = 0, del_records = 0; +@@ -1521,9 +1544,9 @@ + gnome_pilot_conduit_sync_abs_set_num_updated_local_records (abs_conduit, mod_records); + gnome_pilot_conduit_sync_abs_set_num_deleted_local_records(abs_conduit, del_records); + +- buf = (unsigned char*)g_malloc (0xffff); ++ buffer = pi_buffer_new (0xffff); + len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, +- (unsigned char *)buf, 0xffff); ++ -1, buffer); + + if (len < 0) { + WARN (_("Could not read pilot's Calendar application block")); +@@ -1532,8 +1555,8 @@ + _("Could not read pilot's Calendar application block")); + return -1; + } +- unpack_AppointmentAppInfo (&(ctxt->ai), buf, len); +- g_free (buf); ++ unpack_AppointmentAppInfo (&(ctxt->ai), buffer->data, len); ++ pi_buffer_free (buffer); + + check_for_slow_setting (conduit, ctxt); + if (ctxt->cfg->sync_type == GnomePilotConduitSyncTypeCopyToPilot +--- evolution-2.5.4/calendar/conduits/todo/todo-conduit.c.fix-conduits 2005-12-08 03:15:03.000000000 -0500 ++++ evolution-2.5.4/calendar/conduits/todo/todo-conduit.c 2006-01-10 19:33:44.000000000 -0500 +@@ -402,14 +402,19 @@ + { + static char buff[ 4096 ]; + struct ToDo todo; ++ pi_buffer_t piBuf; + + if (remote == NULL) { + sprintf (buff, "[NULL]"); + return buff; + } + ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&todo, 0, sizeof (struct ToDo)); +- unpack_ToDo (&todo, remote->record, remote->length); ++ unpack_ToDo (&todo, &piBuf, todo_v1); + + g_snprintf (buff, 4096, "[%d %ld %d %d '%s' '%s' %d]", + todo.indefinite, +@@ -594,7 +599,8 @@ + EToDoConduitContext *ctxt) + { + GnomePilotRecord p; +- static char record[0xffff]; ++ static unsigned char record[0xffff]; ++ pi_buffer_t piBuf; + + g_assert (local->comp != NULL); + g_assert (local->todo != NULL ); +@@ -607,9 +613,17 @@ + p.archived = local->local.archived; + p.secret = local->local.secret; + ++ memset (&piBuf, 0, sizeof (piBuf)); ++ memset (record, 0, sizeof (record)); ++ pack_ToDo (local->todo, &piBuf, todo_v1); ++ + /* Generate pilot record structure */ ++ if (piBuf.used > 0) ++ memcpy (record, piBuf.data, piBuf.used); + p.record = record; +- p.length = pack_ToDo (local->todo, p.record, 0xffff); ++ p.length = piBuf.used; ++ if (piBuf.data) ++ free (piBuf.data); + + return p; + } +@@ -696,15 +710,17 @@ + + /* Don't overwrite the category */ + if (local->local.ID != 0) { +- char record[0xffff]; ++ pi_buffer_t *buffer = pi_buffer_new (0xffff); + int cat = 0; + + if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, + ctxt->dbi->db_handle, +- local->local.ID, &record, +- NULL, NULL, NULL, &cat) > 0) { ++ local->local.ID, buffer, ++ NULL, NULL, &cat) > 0) { + local->local.category = cat; + } ++ ++ pi_buffer_free (buffer); + } + + /* +@@ -859,12 +875,17 @@ + icaltimezone *utc_zone; + int priority; + char *txt; ++ pi_buffer_t piBuf; + char *category; + + g_return_val_if_fail (remote != NULL, NULL); + ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&todo, 0, sizeof (struct ToDo)); +- unpack_ToDo (&todo, remote->record, remote->length); ++ unpack_ToDo (&todo, &piBuf, todo_v1); + + utc_zone = icaltimezone_get_utc_timezone (); + now = icaltime_from_timet_with_zone (time (NULL), FALSE, +@@ -1014,7 +1035,7 @@ + GnomePilotConduitSyncAbs *abs_conduit; + GList *l; + int len; +- unsigned char *buf; ++ pi_buffer_t *buffer; + char *filename, *change_id; + icalcomponent *icalcomp; + gint num_records, add_records = 0, mod_records = 0, del_records = 0; +@@ -1104,9 +1125,9 @@ + g_message("num_records: %d\nadd_records: %d\nmod_records: %d\ndel_records: %d\n", + num_records, add_records, mod_records, del_records); + +- buf = (unsigned char*)g_malloc (0xffff); ++ buffer = pi_buffer_new (0xffff); + len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, +- (unsigned char *)buf, 0xffff); ++ -1, buffer); + + if (len < 0) { + WARN (_("Could not read pilot's ToDo application block")); +@@ -1115,8 +1136,8 @@ + _("Could not read pilot's ToDo application block")); + return -1; + } +- unpack_ToDoAppInfo (&(ctxt->ai), buf, len); +- g_free (buf); ++ unpack_ToDoAppInfo (&(ctxt->ai), buffer->data, len); ++ pi_buffer_free (buffer); + + lastDesktopUniqueID = 128; + +--- evolution-2.5.4/calendar/conduits/memo/memo-conduit.c.fix-conduits 2006-01-10 22:52:28.000000000 -0500 ++++ evolution-2.5.4/calendar/conduits/memo/memo-conduit.c 2006-01-10 23:11:47.000000000 -0500 +@@ -331,14 +331,19 @@ + { + static char buff[ 64 ]; + struct Memo memo; ++ pi_buffer_t piBuf; + + if (remote == NULL) { + sprintf (buff, "[NULL]"); + return buff; + } + ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&memo, 0, sizeof (struct Memo)); +- unpack_Memo (&memo, remote->record, remote->length); ++ unpack_Memo (&memo, &piBuf, memo_v1); + + g_snprintf (buff, 64, "['%s']", + memo.text ? +@@ -451,7 +456,8 @@ + EMemoConduitContext *ctxt) + { + GnomePilotRecord p; +- static char record[0xffff]; ++ static unsigned char record[0xffff]; ++ pi_buffer_t piBuf; + + g_assert (local->comp != NULL); + g_assert (local->memo != NULL ); +@@ -466,8 +472,14 @@ + + /* Generate pilot record structure */ + p.record = record; +- p.length = pack_Memo (local->memo, p.record, 0xffff); +- ++ memset (&piBuf, 0, sizeof (piBuf)); ++ memset (record, 0, sizeof (record)); ++ p.length = pack_Memo (local->memo, &piBuf, memo_v1); ++ if (piBuf.used > 0) ++ memcpy (record, piBuf.data, piBuf.used); ++ p.length = piBuf.used; ++ if (piBuf.data) ++ free (piBuf.data); + return p; + } + +@@ -568,16 +580,17 @@ + + /* Don't overwrite the category */ + if (local->local.ID != 0) { +- char record[0xffff]; ++ pi_buffer_t *buffer = pi_buffer_new (0xffff); + int cat = 0; + + LOG(fprintf(stderr, "local_record_from_comp: calling dlp_ReadRecordById\n")); + if (dlp_ReadRecordById (ctxt->dbi->pilot_socket, + ctxt->dbi->db_handle, +- local->local.ID, &record, +- NULL, NULL, NULL, &cat) > 0) { ++ local->local.ID, buffer, ++ NULL, NULL, &cat) > 0) { + local->local.category = cat; + } ++ pi_buffer_free (buffer); + LOG(fprintf(stderr, "local_record_from_comp: done calling dlp_ReadRecordById\n")); + } + +@@ -699,6 +712,7 @@ + { + ECalComponent *comp; + struct Memo memo; ++ pi_buffer_t piBuf; + struct icaltimetype now; + icaltimezone *utc_zone; + char *txt, *txt2, *txt3; +@@ -707,8 +721,12 @@ + + g_return_val_if_fail (remote != NULL, NULL); + ++ piBuf.data = remote->record; ++ piBuf.allocated = remote->length; ++ piBuf.used = remote->length; ++ + memset (&memo, 0, sizeof (struct Memo)); +- unpack_Memo (&memo, remote->record, remote->length); ++ unpack_Memo (&memo, &piBuf, memo_v1); + + utc_zone = icaltimezone_get_utc_timezone (); + now = icaltime_from_timet_with_zone (time (NULL), FALSE, +@@ -836,7 +854,7 @@ + GnomePilotConduitSyncAbs *abs_conduit; + GList *l; + int len; +- unsigned char *buf; ++ pi_buffer_t *buffer; + char *filename, *change_id; + icalcomponent *icalcomp; + gint num_records, add_records = 0, mod_records = 0, del_records = 0; +@@ -929,9 +947,9 @@ + g_message("num_records: %d\nadd_records: %d\nmod_records: %d\ndel_records: %d\n", + num_records, add_records, mod_records, del_records); + +- buf = (unsigned char*)g_malloc (0xffff); ++ buffer = pi_buffer_new (0xffff); + len = dlp_ReadAppBlock (dbi->pilot_socket, dbi->db_handle, 0, +- (unsigned char *)buf, 0xffff); ++ -1, buffer); + + if (len < 0) { + WARN (_("Could not read pilot's Memo application block")); +@@ -940,8 +958,8 @@ + _("Could not read pilot's Memo application block")); + return -1; + } +- unpack_MemoAppInfo (&(ctxt->ai), buf, len); +- g_free (buf); ++ unpack_MemoAppInfo (&(ctxt->ai), buffer->data, len); ++ pi_buffer_free (buffer); + + lastDesktopUniqueID = 128; + diff --git a/evolution-2.5.5.1-commit-enter-on-calendar.patch b/evolution-2.5.5.1-commit-enter-on-calendar.patch new file mode 100644 index 0000000..84e58f2 --- /dev/null +++ b/evolution-2.5.5.1-commit-enter-on-calendar.patch @@ -0,0 +1,242 @@ +--- evolution-2.5.5.1/calendar/gui/e-day-view.c.commit-enter-on-calendar 2006-01-16 09:42:17.000000000 -0500 ++++ evolution-2.5.5.1/calendar/gui/e-day-view.c 2006-01-25 23:48:24.000000000 -0500 +@@ -334,6 +334,10 @@ + gint event_num, + gchar *initial_text); + static void e_day_view_stop_editing_event (EDayView *day_view); ++static gboolean e_day_view_text_keypress (GnomeCanvasItem *item, ++ guint keyval, ++ guint state, ++ EDayView *day_view); + static gboolean e_day_view_on_text_item_event (GnomeCanvasItem *item, + GdkEvent *event, + EDayView *day_view); +@@ -4484,6 +4488,8 @@ + G_CALLBACK (e_day_view_on_text_item_event), day_view); + g_signal_emit_by_name (G_OBJECT(day_view), + "event_added", event); ++ g_signal_connect (event->canvas_item, "keypress", ++ G_CALLBACK (e_day_view_text_keypress), day_view); + + e_day_view_update_long_event_label (day_view, event_num); + } +@@ -4667,6 +4673,8 @@ + G_CALLBACK (e_day_view_on_text_item_event), day_view); + g_signal_emit_by_name (G_OBJECT(day_view), + "event_added", event); ++ g_signal_connect (event->canvas_item, "keypress", ++ G_CALLBACK (e_day_view_text_keypress), day_view); + + e_day_view_update_event_label (day_view, day, event_num); + } +@@ -5824,46 +5832,74 @@ + } + + static gboolean ++e_day_view_text_keypress (GnomeCanvasItem *item, ++ guint keyval, ++ guint state, ++ EDayView *day_view) ++{ ++ gboolean retval = FALSE; ++ ++ tooltip_destroy (day_view, item); ++ ++ if (keyval == GDK_Return) { ++ EText *text = E_TEXT (item); ++ gint new_pos = 0; ++ ++ /* ++ * HACK: last character which should be \n needs to be deleted ++ * here so that GDK_Return was already processed on EText ++ * before E_TEXT_KEYPRESS event is emitted. ++ */ ++ if (text->selection_end >= 1) ++ new_pos = text->selection_end - 1; ++ ++ text->selection_end = e_text_model_validate_position (text->model, new_pos); ++ e_text_delete_selection (text); ++ ++ day_view->resize_event_num = -1; ++ ++ /* We set the keyboard focus to the EDayView, so the ++ EText item loses it and stops the edit. */ ++ gtk_widget_grab_focus (GTK_WIDGET (day_view)); ++ ++ /* Stop the signal last or we will also stop any ++ other events getting to the EText item. */ ++ gtk_signal_emit_stop_by_name (GTK_OBJECT (item), ++ "event"); ++ ++ retval = TRUE; ++ } else if (keyval == GDK_Escape) { ++ cancel_editing (day_view); ++ gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event"); ++ /* focus should go to day view when stop editing */ ++ gtk_widget_grab_focus (GTK_WIDGET (day_view)); ++ ++ retval = TRUE; ++ } else if ((keyval == GDK_Up) ++ && (state & GDK_SHIFT_MASK) ++ && (state & GDK_CONTROL_MASK) ++ && !(state & GDK_MOD1_MASK)) { ++ e_day_view_change_event_end_time_up (day_view); ++ ++ retval = TRUE; ++ } else if ((keyval == GDK_Down) ++ && (state & GDK_SHIFT_MASK) ++ && (state & GDK_CONTROL_MASK) ++ && !(state & GDK_MOD1_MASK)) { ++ e_day_view_change_event_end_time_down (day_view); ++ ++ retval = TRUE; ++ } ++ ++ return retval; ++} ++ ++static gboolean + e_day_view_on_text_item_event (GnomeCanvasItem *item, + GdkEvent *event, + EDayView *day_view) + { + switch (event->type) { +- case GDK_KEY_PRESS: +- tooltip_destroy (day_view, item); +- if (event && event->key.keyval == GDK_Return) { +- day_view->resize_event_num = -1; +- day_view->resize_event_num = -1; +- +- /* We set the keyboard focus to the EDayView, so the +- EText item loses it and stops the edit. */ +- gtk_widget_grab_focus (GTK_WIDGET (day_view)); +- +- /* Stop the signal last or we will also stop any +- other events getting to the EText item. */ +- gtk_signal_emit_stop_by_name (GTK_OBJECT (item), +- "event"); +- return TRUE; +- } else if (event->key.keyval == GDK_Escape) { +- cancel_editing (day_view); +- gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event"); +- /* focus should go to day view when stop editing */ +- gtk_widget_grab_focus (GTK_WIDGET (day_view)); +- return TRUE; +- } else if ((event->key.keyval == GDK_Up) +- && (event->key.state & GDK_SHIFT_MASK) +- && (event->key.state & GDK_CONTROL_MASK) +- && !(event->key.state & GDK_MOD1_MASK)) { +- e_day_view_change_event_end_time_up (day_view); +- return TRUE; +- } else if ((event->key.keyval == GDK_Down) +- && (event->key.state & GDK_SHIFT_MASK) +- && (event->key.state & GDK_CONTROL_MASK) +- && !(event->key.state & GDK_MOD1_MASK)) { +- e_day_view_change_event_end_time_down (day_view); +- return TRUE; +- } +- break; + case GDK_2BUTTON_PRESS: + #if 0 + g_print ("Item got double-click\n"); +--- evolution-2.5.5.1/calendar/gui/e-week-view.c.commit-enter-on-calendar 2006-01-16 09:42:17.000000000 -0500 ++++ evolution-2.5.5.1/calendar/gui/e-week-view.c 2006-01-25 23:46:43.000000000 -0500 +@@ -175,6 +175,10 @@ + const gchar *uid, + EWeekViewForeachEventCallback callback, + gpointer data); ++static gboolean e_week_view_text_keypress (GnomeCanvasItem *item, ++ guint keyval, ++ guint state, ++ EWeekView *week_view); + static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item, + GdkEvent *event, + EWeekView *week_view); +@@ -2771,6 +2775,8 @@ + week_view); + g_signal_emit_by_name (G_OBJECT(week_view), + "event_added", event); ++ g_signal_connect (span->text_item, "keypress", ++ G_CALLBACK (e_week_view_text_keypress), week_view); + + } + +@@ -3028,6 +3034,51 @@ + } + + static gboolean ++e_week_view_text_keypress (GnomeCanvasItem *item, ++ guint keyval, ++ guint state, ++ EWeekView *week_view) ++{ ++ gboolean retval = FALSE; ++ ++ tooltip_destroy (week_view, item); ++ ++ if (keyval == GDK_Return) { ++ EText *text = E_TEXT (item); ++ gint new_pos = 0; ++ ++ /* ++ * HACK: last charater which should be \n needs to be deleted ++ * here so that GDK_Return was already processed on EText ++ * before E_TEXT_KEYPRESS event is emitted. ++ */ ++ if (text->selection_end >= 1) ++ new_pos = text->selection_end - 1; ++ ++ text->selection_end = e_text_model_validate_position (text->model, new_pos); ++ e_text_delete_selection (text); ++ ++ /* We set the keyboard focus to the EDayView, so the ++ EText item loses it and stops the edit. */ ++ gtk_widget_grab_focus (GTK_WIDGET (week_view)); ++ ++ /* Stop the signal last or we will also stop any ++ other events getting to the EText item. */ ++ gtk_signal_emit_stop_by_name (GTK_OBJECT (item), ++ "event"); ++ retval = TRUE; ++ } else if (keyval == GDK_Escape) { ++ cancel_editing (week_view); ++ gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event"); ++ /* focus should go to week view when stop editing */ ++ gtk_widget_grab_focus (GTK_WIDGET (week_view)); ++ retval = TRUE; ++ } ++ ++ return retval; ++} ++ ++static gboolean + e_week_view_on_text_item_event (GnomeCanvasItem *item, + GdkEvent *gdkevent, + EWeekView *week_view) +@@ -3044,26 +3095,6 @@ + #endif + + switch (gdkevent->type) { +- case GDK_KEY_PRESS: +- tooltip_destroy (week_view, item); +- if (gdkevent && gdkevent->key.keyval == GDK_Return) { +- /* We set the keyboard focus to the EDayView, so the +- EText item loses it and stops the edit. */ +- gtk_widget_grab_focus (GTK_WIDGET (week_view)); +- +- /* Stop the signal last or we will also stop any +- other events getting to the EText item. */ +- gtk_signal_emit_stop_by_name (GTK_OBJECT (item), +- "event"); +- return TRUE; +- } else if (gdkevent->key.keyval == GDK_Escape) { +- cancel_editing (week_view); +- gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event"); +- /* focus should go to week view when stop editing */ +- gtk_widget_grab_focus (GTK_WIDGET (week_view)); +- return TRUE; +- } +- break; + case GDK_2BUTTON_PRESS: + if (!e_week_view_find_event_from_item (week_view, item, + &event_num, &span_num)) diff --git a/evolution-2.6.0-prototypes.patch b/evolution-2.6.0-prototypes.patch new file mode 100644 index 0000000..16fe7ab --- /dev/null +++ b/evolution-2.6.0-prototypes.patch @@ -0,0 +1,21 @@ +--- evolution-2.6.0/calendar/gui/dialogs/event-page.c.prototypes 2006-03-14 01:00:04.000000000 -0500 ++++ evolution-2.6.0/calendar/gui/dialogs/event-page.c 2006-03-14 01:00:21.000000000 -0500 +@@ -59,6 +59,8 @@ + #include "event-page.h" + #include "e-send-options-utils.h" + ++GtkWidget *alarm_list_dialog_peek (ECal *ecal, EAlarmList *list_store); ++ + + + /* Private part of the EventPage structure */ +--- evolution-2.6.0/calendar/gui/dialogs/cal-prefs-dialog.c.prototypes 2006-03-13 14:14:07.000000000 -0500 ++++ evolution-2.6.0/calendar/gui/dialogs/cal-prefs-dialog.c 2006-03-13 14:14:24.000000000 -0500 +@@ -32,6 +32,7 @@ + #include "../calendar-config.h" + #include "cal-prefs-dialog.h" + #include ++#include + #include + #include + #include diff --git a/evolution-2.7.1-no-gnome-common.patch b/evolution-2.7.1-no-gnome-common.patch new file mode 100644 index 0000000..06c2643 --- /dev/null +++ b/evolution-2.7.1-no-gnome-common.patch @@ -0,0 +1,169 @@ +--- evolution-2.10.1/configure.no-gnome-common 2007-04-09 12:32:23.000000000 -0400 ++++ evolution-2.10.1/configure 2007-04-09 12:33:02.000000000 -0400 +@@ -33161,154 +33161,6 @@ + + + +- # Check whether --enable-compile-warnings was given. +-if test "${enable_compile_warnings+set}" = set; then +- enableval=$enable_compile_warnings; +-else +- enable_compile_warnings="yes" +-fi +- +- +- warnCFLAGS= +- if test "x$GCC" != xyes; then +- enable_compile_warnings=no +- fi +- +- warning_flags= +- realsave_CFLAGS="$CFLAGS" +- +- case "$enable_compile_warnings" in +- no) +- warning_flags= +- ;; +- minimum) +- warning_flags="-Wall" +- ;; +- yes) +- warning_flags="-Wall -Wmissing-prototypes" +- ;; +- maximum|error) +- warning_flags="-Wall -Wmissing-prototypes -Wnested-externs -Wpointer-arith" +- CFLAGS="$warning_flags $CFLAGS" +- for option in -Wno-sign-compare; do +- SAVE_CFLAGS="$CFLAGS" +- CFLAGS="$CFLAGS $option" +- { echo "$as_me:$LINENO: checking whether gcc understands $option" >&5 +-echo $ECHO_N "checking whether gcc understands $option... $ECHO_C" >&6; } +- cat >conftest.$ac_ext <<_ACEOF +-/* confdefs.h. */ +-_ACEOF +-cat confdefs.h >>conftest.$ac_ext +-cat >>conftest.$ac_ext <<_ACEOF +-/* end confdefs.h. */ +- +-int +-main () +-{ +- +- ; +- return 0; +-} +-_ACEOF +-rm -f conftest.$ac_objext +-if { (ac_try="$ac_compile" +-case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_compile") 2>conftest.er1 +- ac_status=$? +- grep -v '^ *+' conftest.er1 >conftest.err +- rm -f conftest.er1 +- cat conftest.err >&5 +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); } && +- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' +- { (case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_try") 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; } && +- { ac_try='test -s conftest.$ac_objext' +- { (case "(($ac_try" in +- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +- *) ac_try_echo=$ac_try;; +-esac +-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +- (eval "$ac_try") 2>&5 +- ac_status=$? +- echo "$as_me:$LINENO: \$? = $ac_status" >&5 +- (exit $ac_status); }; }; then +- has_option=yes +-else +- echo "$as_me: failed program was:" >&5 +-sed 's/^/| /' conftest.$ac_ext >&5 +- +- has_option=no +-fi +- +-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +- CFLAGS="$SAVE_CFLAGS" +- { echo "$as_me:$LINENO: result: $has_option" >&5 +-echo "${ECHO_T}$has_option" >&6; } +- if test $has_option = yes; then +- warning_flags="$warning_flags $option" +- fi +- unset has_option +- unset SAVE_CFLAGS +- done +- unset option +- if test "$enable_compile_warnings" = "error" ; then +- warning_flags="$warning_flags -Werror" +- fi +- ;; +- *) +- { { echo "$as_me:$LINENO: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&5 +-echo "$as_me: error: Unknown argument '$enable_compile_warnings' to --enable-compile-warnings" >&2;} +- { (exit 1); exit 1; }; } +- ;; +- esac +- CFLAGS="$realsave_CFLAGS" +- { echo "$as_me:$LINENO: checking what warning flags to pass to the C compiler" >&5 +-echo $ECHO_N "checking what warning flags to pass to the C compiler... $ECHO_C" >&6; } +- { echo "$as_me:$LINENO: result: $warning_flags" >&5 +-echo "${ECHO_T}$warning_flags" >&6; } +- +- # Check whether --enable-iso-c was given. +-if test "${enable_iso_c+set}" = set; then +- enableval=$enable_iso_c; +-else +- enable_iso_c=no +-fi +- +- +- { echo "$as_me:$LINENO: checking what language compliance flags to pass to the C compiler" >&5 +-echo $ECHO_N "checking what language compliance flags to pass to the C compiler... $ECHO_C" >&6; } +- complCFLAGS= +- if test "x$enable_iso_c" != "xno"; then +- if test "x$GCC" = "xyes"; then +- case " $CFLAGS " in +- *\ \ -ansi\ \ *) ;; +- *) complCFLAGS="$complCFLAGS -ansi" ;; +- esac +- case " $CFLAGS " in +- *\ \ -pedantic\ \ *) ;; +- *) complCFLAGS="$complCFLAGS -pedantic" ;; +- esac +- fi +- fi +- { echo "$as_me:$LINENO: result: $complCFLAGS" >&5 +-echo "${ECHO_T}$complCFLAGS" >&6; } +- +- WARN_CFLAGS="$warning_flags $complCFLAGS" +- +- +-CFLAGS="$CFLAGS $WARN_CFLAGS" + case $CFLAGS in + *-Wall*) + # Turn off the annoying "comparison between signed and unsigned" +--- evolution-2.10.1/configure.in.no-gnome-common 2007-04-09 09:11:47.000000000 -0400 ++++ evolution-2.10.1/configure.in 2007-04-09 12:32:23.000000000 -0400 +@@ -1136,9 +1136,6 @@ + dnl ************************* + dnl CFLAGS and LIBS and stuff + dnl ************************* +- +-GNOME_COMPILE_WARNINGS(yes) +-CFLAGS="$CFLAGS $WARN_CFLAGS" + case $CFLAGS in + *-Wall*) + # Turn off the annoying "comparison between signed and unsigned" diff --git a/evolution-2.7.1-notification-cleanups.patch b/evolution-2.7.1-notification-cleanups.patch new file mode 100644 index 0000000..1fb6841 --- /dev/null +++ b/evolution-2.7.1-notification-cleanups.patch @@ -0,0 +1,51 @@ +--- evolution-2.7.2.1/calendar/gui/alarm-notify/alarm-queue.c.notification-cleanups 2006-04-22 00:39:20.000000000 -0400 ++++ evolution-2.7.2.1/calendar/gui/alarm-notify/alarm-queue.c 2006-05-23 16:04:23.000000000 -0400 +@@ -1566,10 +1566,11 @@ + const char *summary, *location; + GtkTooltips *tooltips; + ECalComponentText text; +- char *str, *start_str, *end_str, *alarm_str, *time_str; ++ char *start_str, *end_str, *alarm_str, *time_str; + icaltimezone *current_zone; + ECalComponentOrganizer organiser; + char *body; ++ NotifyNotification *n; + + d(printf("%s:%d (popup_notification)\n",__FILE__, __LINE__)); + +@@ -1601,9 +1602,6 @@ + end_str = timet_to_str_with_zone (qa->instance->occur_end, current_zone); + time_str = calculate_time (qa->instance->occur_start, qa->instance->occur_end); + +- str = g_strdup_printf ("%s %s", +- start_str, time_str); +- + if (organiser.cn) { + if (location) + body = g_strdup_printf ("%s\n%s %s\n%s %s", organiser.cn, _("Location:"), location, start_str, time_str); +@@ -1617,16 +1615,21 @@ + body = g_strdup_printf ("%s %s", start_str, time_str); + } + +- NotifyNotification *n = notify_notification_new (summary, body, "stock_appointment-reminder", NULL); +- if (!notify_notification_show(n, NULL)) ++ n = notify_notification_new (summary, body, "stock_appointment-reminder", NULL); ++ ++ /* Notifications don't timeout: require explicit user action: */ ++ notify_notification_set_timeout (n, NOTIFY_EXPIRES_NEVER); ++ ++ if (!notify_notification_show (n, NULL)) + g_warning ("Could not send notification to daemon\n"); + +- /* create the private structure */ ++ g_object_unref (n); ++ ++ g_free (body); + g_free (start_str); + g_free (end_str); + g_free (alarm_str); + g_free (time_str); +- g_free (str); + + + } diff --git a/evolution-2.7.3-filter-datespec.patch b/evolution-2.7.3-filter-datespec.patch new file mode 100644 index 0000000..000adb1 --- /dev/null +++ b/evolution-2.7.3-filter-datespec.patch @@ -0,0 +1,178 @@ +diff -ur evolution-2.7.3/filter/filter-datespec.c my-evolution-2.7.3/filter/filter-datespec.c +--- evolution-2.7.3/filter/filter-datespec.c 2005-08-09 17:29:27.000000000 -0600 ++++ my-evolution-2.7.3/filter/filter-datespec.c 2006-06-28 20:51:01.000000000 -0600 +@@ -61,8 +61,10 @@ + + typedef struct _timespan { + guint32 seconds; +- const char *singular; +- const char *plural; ++ const char *past_singular; ++ const char *past_plural; ++ const char *future_singular; ++ const char *future_plural; + float max; + } timespan; + +@@ -75,13 +77,13 @@ + #define ngettext(a, b) a, b + + static const timespan timespans[] = { +- { 1, ngettext("1 second ago", "%d seconds ago"), 59.0 }, +- { 60, ngettext("1 minute ago", "%d minutes ago"), 59.0 }, +- { 3600, ngettext("1 hour ago", "%d hours ago"), 23.0 }, +- { 86400, ngettext("1 day ago", "%d days ago"), 31.0 }, +- { 604800, ngettext("1 week ago", "%d weeks ago"), 52.0 }, +- { 2419200, ngettext("1 month ago", "%d months ago"), 12.0 }, +- { 31557600, ngettext("1 year ago", "%d years ago"), 1000.0 }, ++ { 1, ngettext("1 second ago", "%d seconds ago"), ngettext("1 second in the future", "%d seconds in the future"), 59.0 }, ++ { 60, ngettext("1 minute ago", "%d minutes ago"), ngettext("1 minute in the future", "%d minutes in the future"), 59.0 }, ++ { 3600, ngettext("1 hour ago", "%d hours ago"), ngettext("1 hour in the future", "%d hours in the future"), 23.0 }, ++ { 86400, ngettext("1 day ago", "%d days ago"), ngettext("1 day in the future", "%d days in the future"), 31.0 }, ++ { 604800, ngettext("1 week ago", "%d weeks ago"), ngettext("1 week in the future", "%d weeks in the future"), 52.0 }, ++ { 2419200, ngettext("1 month ago", "%d months ago"), ngettext("1 month in the future", "%d months in the future"), 12.0 }, ++ { 31557600, ngettext("1 year ago", "%d years ago"), ngettext("1 year in the future", "%d years in the future"), 1000.0 }, + }; + + /* now we let the compiler see the real function call */ +@@ -92,7 +94,7 @@ + + struct _FilterDatespecPrivate { + GtkWidget *label_button; +- GtkWidget *notebook_type, *option_type, *calendar_specify, *spin_relative, *option_relative; ++ GtkWidget *notebook_type, *option_type, *calendar_specify, *spin_relative, *option_relative, *option_past_future; + FilterDatespec_type type; + int span; + }; +@@ -264,7 +266,7 @@ + get_best_span (time_t val) + { + int i; +- ++ + for (i=N_TIMESPANS-1;i>=0;i--) { + if (val % timespans[i].seconds == 0) + return i; +@@ -302,8 +304,18 @@ + + span = get_best_span(fds->value); + count = fds->value / timespans[span].seconds; ++ sprintf(buf, ngettext(timespans[span].past_singular, timespans[span].past_plural, count), count); ++ } ++ break; ++ case FDST_X_FUTURE: ++ if (fds->value == 0) ++ label = _("now"); ++ else { ++ int span, count; + +- sprintf(buf, ngettext(timespans[span].singular, timespans[span].plural, count), count); ++ span = get_best_span(fds->value); ++ count = fds->value / timespans[span].seconds; ++ sprintf(buf, ngettext(timespans[span].future_singular, timespans[span].future_plural, count), count); + } + break; + } +@@ -329,6 +341,7 @@ + fds->value = mktime(&tm); + /* what about timezone? */ + break; } ++ case FDST_X_FUTURE: + case FDST_X_AGO: { + int val; + +@@ -349,6 +362,8 @@ + struct _FilterDatespecPrivate *p = PRIV(fds); + + p->type = fds->type==FDST_UNKNOWN ? FDST_NOW : fds->type; ++ ++ int note_type = fds->type==FDST_X_FUTURE ? FDST_X_AGO : fds->type; // FUTURE and AGO use the same notebook pages/etc. + + switch (p->type) { + case FDST_NOW: +@@ -368,11 +383,18 @@ + p->span = get_best_span(fds->value); + gtk_spin_button_set_value((GtkSpinButton*)p->spin_relative, fds->value/timespans[p->span].seconds); + gtk_option_menu_set_history((GtkOptionMenu*)p->option_relative, p->span); ++ gtk_option_menu_set_history((GtkOptionMenu*)p->option_past_future, 0); ++ break; ++ case FDST_X_FUTURE: ++ p->span = get_best_span(fds->value); ++ gtk_spin_button_set_value((GtkSpinButton*)p->spin_relative, fds->value/timespans[p->span].seconds); ++ gtk_option_menu_set_history((GtkOptionMenu*)p->option_relative, p->span); ++ gtk_option_menu_set_history((GtkOptionMenu*)p->option_past_future, 1); + break; + } + +- gtk_notebook_set_current_page ((GtkNotebook*) p->notebook_type, p->type); +- gtk_option_menu_set_history ((GtkOptionMenu*) p->option_type, p->type); ++ gtk_notebook_set_current_page ((GtkNotebook*) p->notebook_type, note_type); ++ gtk_option_menu_set_history ((GtkOptionMenu*) p->option_type, note_type); + } + + +@@ -397,6 +419,18 @@ + } + + static void ++set_option_past_future (GtkMenu *menu, FilterDatespec *fds) ++{ ++ GtkWidget *w; ++ ++ w = gtk_menu_get_active (menu); ++ if(g_list_index (GTK_MENU_SHELL (menu)->children, w) == 0) ++ fds->type = fds->priv->type = FDST_X_AGO; ++ else ++ fds->type = fds->priv->type = FDST_X_FUTURE; ++} ++ ++static void + button_clicked (GtkButton *button, FilterDatespec *fds) + { + struct _FilterDatespecPrivate *p = PRIV(fds); +@@ -424,6 +458,7 @@ + p->calendar_specify = glade_xml_get_widget (gui, "calendar_specify"); + p->spin_relative = glade_xml_get_widget (gui, "spin_relative"); + p->option_relative = glade_xml_get_widget (gui, "option_relative"); ++ p->option_past_future = glade_xml_get_widget (gui, "option_past_future"); + + set_values (fds); + +@@ -431,6 +466,8 @@ + G_CALLBACK (set_option_type), fds); + g_signal_connect (GTK_OPTION_MENU (p->option_relative)->menu, "deactivate", + G_CALLBACK (set_option_relative), fds); ++ g_signal_connect (GTK_OPTION_MENU (p->option_past_future)->menu, "deactivate", ++ G_CALLBACK (set_option_past_future), fds); + + gtk_box_pack_start ((GtkBox *) dialog->vbox, toplevel, TRUE, TRUE, 3); + +@@ -486,5 +523,8 @@ + case FDST_X_AGO: + g_string_append_printf (out, "(- (get-current-date) %d)", (int) fds->value); + break; ++ case FDST_X_FUTURE: ++ g_string_append_printf (out, "(+ (get-current-date) %d)", (int) fds->value); ++ break; + } + } +diff -ur evolution-2.7.3/filter/filter-datespec.h my-evolution-2.7.3/filter/filter-datespec.h +--- evolution-2.7.3/filter/filter-datespec.h 2002-11-01 16:22:57.000000000 -0700 ++++ my-evolution-2.7.3/filter/filter-datespec.h 2006-06-28 17:25:55.000000000 -0600 +@@ -42,6 +42,7 @@ + FDST_NOW, + FDST_SPECIFIED, + FDST_X_AGO, ++ FDST_X_FUTURE, + } FilterDatespec_type; + + struct _FilterDatespec { +@@ -52,7 +53,7 @@ + + /* either a timespan, an absolute time, or 0 + * depending on type -- the above mapping to +- * (X_AGO, SPECIFIED, NOW) ++ * (X_FUTURE, X_AGO, SPECIFIED, NOW) + */ + + time_t value; diff --git a/evolution-2.7.3-replicated-cjk-input.patch b/evolution-2.7.3-replicated-cjk-input.patch new file mode 100644 index 0000000..5501bae --- /dev/null +++ b/evolution-2.7.3-replicated-cjk-input.patch @@ -0,0 +1,22 @@ +--- evolution-2.7.3/widgets/text/e-text.c.replicated_cjk_input 2006-07-06 09:57:22.000000000 -0400 ++++ evolution-2.7.3/widgets/text/e-text.c 2006-07-06 09:58:27.000000000 -0400 +@@ -1498,7 +1498,8 @@ + } + + +- insert_preedit_text (text); ++ if (text->im_context_signals_registered) ++ insert_preedit_text (text); + + if (!pango_layout_get_text (text->layout)) + return; +@@ -2212,7 +2213,8 @@ + G_SIGNAL_MATCH_DATA, + 0, 0, NULL, + NULL, save_text); +- save_text->im_context_signals_registered = FALSE; ++ save_text->im_context_signals_registered = FALSE; ++ reset_layout (save_text); + } + + if (text->im_context) { diff --git a/evolution-2.7.4-candidate-window-position-calendar.patch b/evolution-2.7.4-candidate-window-position-calendar.patch new file mode 100644 index 0000000..f8f4e59 --- /dev/null +++ b/evolution-2.7.4-candidate-window-position-calendar.patch @@ -0,0 +1,112 @@ +--- evolution-2.7.4/widgets/text/e-text.h.cal 2006-07-13 10:15:56.000000000 -0400 ++++ evolution-2.7.4/widgets/text/e-text.h 2006-07-13 10:18:20.000000000 -0400 +@@ -109,6 +109,7 @@ + + const gchar *text; /* Text to display --- from the ETextModel */ + gint preedit_len; /* preedit length to display */ ++ gint preedit_pos; /* preedit cursor position */ + PangoLayout *layout; + int num_lines; /* Number of lines of text */ + +--- evolution-2.7.4/widgets/text/e-text.c.cal 2006-07-13 10:15:51.000000000 -0400 ++++ evolution-2.7.4/widgets/text/e-text.c 2006-07-13 10:18:20.000000000 -0400 +@@ -132,6 +132,7 @@ + + static void reset_layout_attrs (EText *text); + ++static void update_im_cursor_position (EText *text); + #if 0 + /* GtkEditable Methods */ + static void e_text_editable_do_insert_text (GtkEditable *editable, +@@ -325,6 +326,8 @@ + pango_layout_set_attributes (text->layout, attrs); + pango_attr_list_unref (attrs); + } ++ ++ update_im_cursor_position (text); + } + + if (preedit_string) +@@ -3723,6 +3726,7 @@ + text->model = e_text_model_new (); + text->text = e_text_model_get_text (text->model); + text->preedit_len = 0; ++ text->preedit_pos = 0; + text->layout = NULL; + + text->revert = NULL; +@@ -3840,17 +3844,71 @@ + } + } + ++/* ++ * Fetch cursor location into Strong or Weak positions so as to ++ * display the preedit candidate selection window in the right place ++ */ ++static void ++e_text_get_cursor_locations (EText *text, ++ GdkRectangle *strong_pos, ++ GdkRectangle *weak_pos) ++{ ++ double x1, y1; ++ PangoRectangle pango_strong_pos; ++ PangoRectangle pango_weak_pos; ++ int cx, cy; ++ gint index; ++ ++ gnome_canvas_item_get_bounds (GNOME_CANVAS_ITEM (text), &x1, &y1, NULL, NULL); ++ ++ gnome_canvas_get_scroll_offsets (GNOME_CANVAS (GNOME_CANVAS_ITEM (text)->canvas), &cx, &cy); ++ ++ index = g_utf8_offset_to_pointer (text->text, text->selection_start) - text->text; ++ ++ pango_layout_get_cursor_pos (text->layout, index + text->preedit_pos, ++ strong_pos ? &pango_strong_pos : NULL, ++ weak_pos ? &pango_weak_pos : NULL); ++ ++ if (strong_pos) { ++ strong_pos->x = x1 - cx - text->xofs_edit + pango_strong_pos.x / PANGO_SCALE; ++ strong_pos->y = y1 - cy - text->yofs_edit + pango_strong_pos.y / PANGO_SCALE; ++ strong_pos->width = 0; ++ strong_pos->height = pango_strong_pos.height / PANGO_SCALE; ++ } ++ ++ if (weak_pos) { ++ weak_pos->x = x1 - cx - text->xofs_edit + pango_weak_pos.x / PANGO_SCALE; ++ weak_pos->y = y1 - cy - text->yofs_edit + pango_weak_pos.y / PANGO_SCALE; ++ weak_pos->width = 0; ++ weak_pos->height = pango_weak_pos.height / PANGO_SCALE; ++ } ++} ++ ++/* Update IM's cursor position to display candidate selection window */ ++static void ++update_im_cursor_position (EText *text) ++{ ++ GdkRectangle area; ++ ++ e_text_get_cursor_locations (text, &area, NULL); ++ ++ gtk_im_context_set_cursor_location (text->im_context, &area); ++} ++ + static void + e_text_preedit_changed_cb (GtkIMContext *context, +- EText *etext) ++ EText *etext) + { + gchar *preedit_string = NULL; ++ gint cursor_pos; + + gtk_im_context_get_preedit_string (context, &preedit_string, +- NULL, NULL); ++ NULL, &cursor_pos); + ++ cursor_pos = CLAMP (cursor_pos, 0, g_utf8_strlen (preedit_string, -1)); + etext->preedit_len = strlen (preedit_string); +- g_free (preedit_string); ++ etext->preedit_pos = g_utf8_offset_to_pointer (preedit_string, cursor_pos) - preedit_string; ++ g_free (preedit_string); + + g_signal_emit (etext, e_text_signals[E_TEXT_KEYPRESS], 0, 0, 0); + } diff --git a/evolution-2.7.4-candidate-window-position-task.patch b/evolution-2.7.4-candidate-window-position-task.patch new file mode 100644 index 0000000..4ccaa5f --- /dev/null +++ b/evolution-2.7.4-candidate-window-position-task.patch @@ -0,0 +1,110 @@ +--- evolution-2.7.4/widgets/table/e-cell-text.c.task 2006-07-13 10:56:19.000000000 -0400 ++++ evolution-2.7.4/widgets/table/e-cell-text.c 2006-07-13 10:56:27.000000000 -0400 +@@ -199,6 +199,7 @@ + gboolean im_context_signals_registered; + + guint16 preedit_length; /* length of preedit string, in bytes */ ++ gint preedit_pos; /* position of preedit cursor */ + + ECellActions actions; + }; +@@ -222,6 +223,7 @@ + static void _insert (ECellTextView *text_view, char *string, int value); + static void _delete_selection (ECellTextView *text_view); + static PangoAttrList* build_attr_list (ECellTextView *text_view, int row, int text_length); ++static void update_im_cursor_location (ECellTextView *tv); + + static ECellClass *parent_class; + +@@ -560,6 +562,9 @@ + if (preedit_attrs) + pango_attr_list_unref (preedit_attrs); + pango_attr_list_unref (attrs); ++ ++ update_im_cursor_location (text_view); ++ + return layout; + } + +@@ -1863,6 +1868,66 @@ + /* IM Context Callbacks */ + + static void ++e_cell_text_get_cursor_locations (ECellTextView *tv, ++ GdkRectangle *strong_pos, ++ GdkRectangle *weak_pos) ++{ ++ GdkRectangle area; ++ CellEdit *edit=tv->edit; ++ ECellView *cell_view = (ECellView *)tv; ++ ETableItem *item = E_TABLE_ITEM ((cell_view)->e_table_item_view); ++ GnomeCanvasItem *parent_item = GNOME_CANVAS_ITEM (item)->parent; ++ PangoRectangle pango_strong_pos; ++ PangoRectangle pango_weak_pos; ++ gint x, y, col, row; ++ gdouble x1,y1; ++ gint cx, cy; ++ gint index; ++ ++ row = edit->row; ++ col = edit->view_col; ++ ++ e_table_item_get_cell_geometry (item, &row, &col, ++ &x, &y, NULL, &area.height); ++ ++ gnome_canvas_item_get_bounds (GNOME_CANVAS_ITEM (parent_item), &x1, &y1, NULL, NULL); ++ ++ gnome_canvas_get_scroll_offsets (GNOME_CANVAS (GNOME_CANVAS_ITEM (parent_item)->canvas), &cx, &cy); ++ ++ index = edit->selection_end + edit->preedit_pos; ++ ++ pango_layout_get_cursor_pos (edit->layout, ++ index, ++ strong_pos ? &pango_strong_pos : NULL, ++ weak_pos ? &pango_weak_pos : NULL); ++ ++ if (strong_pos) { ++ strong_pos->x = x + x1 - cx - edit->xofs_edit + pango_strong_pos.x / PANGO_SCALE; ++ strong_pos->y = y + y1 - cy - edit->yofs_edit + pango_strong_pos.y / PANGO_SCALE; ++ strong_pos->width = 0; ++ strong_pos->height = pango_strong_pos.height / PANGO_SCALE; ++ } ++ ++ if (weak_pos) { ++ weak_pos->x = x + x1 - cx - edit->xofs_edit + pango_weak_pos.x / PANGO_SCALE; ++ weak_pos->y = y + y1 - cy - edit->yofs_edit + pango_weak_pos.y / PANGO_SCALE; ++ weak_pos->width = 0; ++ weak_pos->height = pango_weak_pos.height / PANGO_SCALE; ++ } ++} ++ ++static void ++update_im_cursor_location (ECellTextView *tv) ++{ ++ CellEdit *edit=tv->edit; ++ GdkRectangle area; ++ ++ e_cell_text_get_cursor_locations (tv, &area, NULL); ++ ++ gtk_im_context_set_cursor_location (edit->im_context, &area); ++} ++ ++static void + e_cell_text_preedit_changed_cb (GtkIMContext *context, + ECellTextView *tv) + { +@@ -1871,10 +1936,12 @@ + CellEdit *edit=tv->edit; + gtk_im_context_get_preedit_string (edit->im_context, &preedit_string, + NULL, &cursor_pos); +- ++ + edit->preedit_length = strlen (preedit_string); +- cursor_pos = CLAMP (cursor_pos, 0, g_utf8_strlen (preedit_string, -1)); ++ cursor_pos = CLAMP (cursor_pos, 0, g_utf8_strlen (preedit_string, -1)); ++ edit->preedit_pos = g_utf8_offset_to_pointer (preedit_string, cursor_pos) - preedit_string; + g_free (preedit_string); ++ + ect_queue_redraw (tv, edit->view_col, edit->row); + } + diff --git a/evolution-2.7.4-deleting-preedit-buffer.patch b/evolution-2.7.4-deleting-preedit-buffer.patch new file mode 100644 index 0000000..17e1945 --- /dev/null +++ b/evolution-2.7.4-deleting-preedit-buffer.patch @@ -0,0 +1,110 @@ +--- evolution-2.7.90/widgets/text/e-text.c.deleting-preedit-buffer 2006-07-26 10:16:02.000000000 -0400 ++++ evolution-2.7.90/widgets/text/e-text.c 2006-07-26 10:25:29.000000000 -0400 +@@ -284,7 +284,7 @@ + PangoAttrList *preedit_attrs = NULL; + gchar *preedit_string = NULL; + GString *tmp_string = g_string_new (NULL); +- gint length = 0, cpos = 0, preedit_length = 0; ++ gint length = 0, cpos = 0; + gboolean new_attrs = FALSE; + + if (text->layout == NULL || !GTK_IS_IM_CONTEXT (text->im_context)) +@@ -295,19 +295,15 @@ + + g_string_prepend_len (tmp_string, text->text,length); + +- if (text->preedit_len) +- gtk_im_context_get_preedit_string (text->im_context, +- &preedit_string, &preedit_attrs, +- NULL); ++ /* we came into this function only when text->preedit_len was not 0 ++ so we can saftely fetch the preedit string */ ++ gtk_im_context_get_preedit_string (text->im_context, &preedit_string, &preedit_attrs, NULL); + + if (preedit_string && g_utf8_validate (preedit_string, -1, NULL)) +- text->preedit_len = preedit_length = strlen (preedit_string); +- else +- text->preedit_len = preedit_length = 0; +- +- cpos = g_utf8_offset_to_pointer (text->text, text->selection_start) - text->text; ++ { ++ text->preedit_len = strlen (preedit_string); ++ cpos = g_utf8_offset_to_pointer (text->text, text->selection_start) - text->text; + +- if (preedit_length) { + g_string_insert (tmp_string, cpos, preedit_string); + + reset_layout_attrs (text); +@@ -320,15 +316,17 @@ + + pango_layout_set_text (text->layout, tmp_string->str, tmp_string->len); + +- pango_attr_list_splice (attrs, preedit_attrs, cpos, preedit_length); ++ pango_attr_list_splice (attrs, preedit_attrs, cpos, text->preedit_len); + + if (new_attrs) { + pango_layout_set_attributes (text->layout, attrs); + pango_attr_list_unref (attrs); +- } ++ } + + update_im_cursor_position (text); + } ++ else ++ text->preedit_len = 0; + + if (preedit_string) + g_free (preedit_string); +@@ -385,9 +383,12 @@ + pango_attr_list_insert_before (attrs, attr); + } + } ++ + pango_layout_set_attributes (text->layout, attrs); ++ + if (attrs) + pango_attr_list_unref (attrs); ++ + calc_height (text); + } + +@@ -1510,9 +1511,14 @@ + } + } + +- +- if (text->im_context_signals_registered) +- insert_preedit_text (text); ++ /* Insert preedit text only when im_context signals are connected & text->preedit_len is not zero */ ++ if (text->im_context_signals_registered && text->preedit_len) ++ insert_preedit_text (text); ++ ++ /* Need to reset the layout to cleanly clear the preedit buffer ++ * when typing in CJK & using backspace on the preedit */ ++ if(!text->preedit_len) ++ reset_layout (text); + + if (!pango_layout_get_text (text->layout)) + return; +@@ -2220,11 +2226,12 @@ + */ + + if (save_text && save_text->im_context) { ++ gtk_im_context_focus_out(save_text->im_context); + g_signal_handlers_disconnect_matched (save_text->im_context, + G_SIGNAL_MATCH_DATA, + 0, 0, NULL, + NULL, save_text); +- save_text->im_context_signals_registered = FALSE; ++ save_text->im_context_signals_registered = FALSE; + reset_layout (save_text); + } + +@@ -2240,6 +2247,7 @@ + G_CALLBACK (e_text_delete_surrounding_cb), text); + text->im_context_signals_registered = TRUE; + } ++ gtk_im_context_focus_in(text->im_context); + } + start_editing (text); + text->show_cursor = FALSE; /* so we'll redraw and the cursor will be shown */ diff --git a/evolution-2.8.0-fix-indic-printing.patch b/evolution-2.8.0-fix-indic-printing.patch new file mode 100644 index 0000000..226be93 --- /dev/null +++ b/evolution-2.8.0-fix-indic-printing.patch @@ -0,0 +1,83 @@ +--- evolution-2.9.91/plugins/print-message/print-message.c.fix-indic-printing 2007-02-12 01:58:01.000000000 -0500 ++++ evolution-2.9.91/plugins/print-message/print-message.c 2007-02-12 13:30:17.000000000 -0500 +@@ -83,7 +83,7 @@ + data->config = e_print_load_settings (); + data->preview = 0; + +- data->msg = e_msg_composer_get_message (composer, 1); ++ data->msg = e_msg_composer_get_message_print (composer, 1); + dialog = (GtkDialog *)e_print_get_dialog_with_config (_("Print Message"), 0, data->config); + gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK); + e_dialog_set_transient_for ((GtkWindow *) dialog, (GtkWidget *) composer); +@@ -102,7 +102,7 @@ + data->config = e_print_load_settings (); + data->preview = 0; + +- data->msg = e_msg_composer_get_message (composer, 1); ++ data->msg = e_msg_composer_get_message_print (composer, 1); + + print_response(NULL, GTK_RESPONSE_APPLY, data); + } +--- evolution-2.9.91/composer/e-msg-composer.h.fix-indic-printing 2007-01-22 10:23:06.000000000 -0500 ++++ evolution-2.9.91/composer/e-msg-composer.h 2007-02-12 13:29:24.000000000 -0500 +@@ -101,6 +101,8 @@ + CamelMimePart *part); + CamelMimeMessage *e_msg_composer_get_message (EMsgComposer *composer, + gboolean save_html_object_data); ++CamelMimeMessage *e_msg_composer_get_message_print (EMsgComposer *composer, ++ gboolean save_html_object_data); + CamelMimeMessage *e_msg_composer_get_message_draft (EMsgComposer *composer); + void e_msg_composer_show_sig_file (EMsgComposer *composer); + gboolean e_msg_composer_get_send_html (EMsgComposer *composer); +--- evolution-2.9.91/composer/e-msg-composer.c.fix-indic-printing 2007-02-12 13:29:24.000000000 -0500 ++++ evolution-2.9.91/composer/e-msg-composer.c 2007-02-12 13:29:24.000000000 -0500 +@@ -5267,6 +5267,49 @@ + } + + CamelMimeMessage * ++e_msg_composer_get_message_print (EMsgComposer *composer, gboolean save_html_object_data) ++{ ++ EMsgComposer *temp_composer; ++ CamelMimeMessage *msg; ++ GString *flags; ++ ++ msg = build_message (composer, save_html_object_data); ++ temp_composer = e_msg_composer_new_with_message (msg); ++ camel_object_unref (msg); ++ ++ /* build flags string */ ++ flags = g_string_sized_new (128); ++ if (temp_composer->priv->send_html) ++ g_string_append (flags, "text/html"); ++ else ++ g_string_append (flags, "text/plain"); ++ if (temp_composer->priv->pgp_sign) ++ g_string_append (flags, ", pgp-sign"); ++ if (temp_composer->priv->pgp_encrypt) ++ g_string_append (flags, ", pgp-encrypt"); ++ if (temp_composer->priv->smime_sign) ++ g_string_append (flags, ", smime-sign"); ++ if (temp_composer->priv->smime_encrypt) ++ g_string_append (flags, ", smime-encrypt"); ++ ++ /* override composer flags */ ++ temp_composer->priv->send_html = TRUE; ++ temp_composer->priv->pgp_sign = FALSE; ++ temp_composer->priv->pgp_encrypt = FALSE; ++ temp_composer->priv->smime_sign = FALSE; ++ temp_composer->priv->smime_encrypt = FALSE; ++ ++ msg = build_message (temp_composer, save_html_object_data); ++ camel_medium_set_header (CAMEL_MEDIUM (msg), ++ "X-Evolution-Format", flags->str); ++ ++ e_msg_composer_delete (temp_composer); ++ g_string_free (flags, TRUE); ++ ++ return msg; ++} ++ ++CamelMimeMessage * + e_msg_composer_get_message_draft (EMsgComposer *composer) + { + CamelMimeMessage *msg; diff --git a/evolution-2.8.0-indic-cursor-movement.patch b/evolution-2.8.0-indic-cursor-movement.patch new file mode 100644 index 0000000..6e5a95f --- /dev/null +++ b/evolution-2.8.0-indic-cursor-movement.patch @@ -0,0 +1,117 @@ +--- evolution-2.8.0/widgets/text/e-text.c.indic-cursor-movement 2006-09-13 14:53:39.000000000 -0400 ++++ evolution-2.8.0/widgets/text/e-text.c 2006-09-13 14:53:48.000000000 -0400 +@@ -2876,6 +2876,76 @@ + } + } + ++ ++ ++/* direction = TRUE (move forward), FALSE (move backward) ++ Any error shall return length(text->text) or 0 or text->selection_end (as deemed fit) */ ++static int ++_get_updated_position (EText *text, gboolean direction) ++{ ++ PangoLogAttr *log_attrs = NULL; ++ gint n_attrs; ++ char *p = NULL; ++ gint new_pos = 0; ++ gint length = 0; ++ ++ /* Basic sanity test, return whatever position we are currently at. */ ++ g_return_val_if_fail (text->layout != NULL, text->selection_end); ++ ++ length = g_utf8_strlen (text->text, -1); ++ ++ /* length checks to make sure we are not wandering off into nonexistant memory... */ ++ if((text->selection_end >= length) && (TRUE == direction)) /* forward */ ++ return length; ++ /* checking for -ve value wont hurt! */ ++ if((text->selection_end <= 0) && (FALSE == direction)) /* backward */ ++ return 0; ++ ++ /* check for validness of full text->text */ ++ if(!g_utf8_validate(text->text, -1, NULL)) ++ return text->selection_end; ++ ++ /* get layout's PangoLogAttr to facilitate moving when moving across grapheme cluster as in indic langs */ ++ pango_layout_get_log_attrs (text->layout, &log_attrs, &n_attrs); ++ ++ /* Fetch the current char index in the line & keep moving ++ forward until we can display cursor */ ++ p = g_utf8_offset_to_pointer (text->text, text->selection_end); ++ ++ new_pos = text->selection_end; ++ while(1) ++ { ++ /* check before moving forward/backwards if we have more chars to move or not */ ++ if(TRUE == direction) ++ p = g_utf8_next_char (p); ++ else ++ p = g_utf8_prev_char (p); ++ ++ /* validate the new string & return with original position if check fails */ ++ if(!g_utf8_validate (p, -1, NULL)) ++ break; /* will return old value of new_pos */ ++ ++ new_pos = g_utf8_pointer_to_offset (text->text, p); ++ ++ /* if is_cursor_position is set, cursor can appear in front of character. ++ i.e. this is a grapheme boundary AND make some sanity checks */ ++ if((new_pos >=0) && (new_pos < n_attrs) && (log_attrs[new_pos].is_cursor_position)) ++ break; ++ else if((new_pos < 0) || (new_pos >= n_attrs)) ++ { ++ new_pos = text->selection_end; ++ break; ++ } ++ } ++ ++ if(log_attrs) ++ g_free(log_attrs); ++ ++ return new_pos; ++} ++ ++ ++ + static int + _get_position(EText *text, ETextEventProcessorCommand *command) + { +@@ -2951,15 +3021,14 @@ + if (text->selection_end >= length) + new_pos = length; + else +- new_pos = text->selection_end + 1; +- ++ new_pos = _get_updated_position(text, TRUE); /* get updated position to display cursor */ ++ + break; + + case E_TEP_BACKWARD_CHARACTER: + new_pos = 0; +- if (text->selection_end >= 1) { +- new_pos = text->selection_end - 1; +- } ++ if (text->selection_end >= 1) ++ new_pos = _get_updated_position(text, FALSE); /* get updated position to display cursor */ + + break; + +@@ -3341,6 +3410,7 @@ + if (!text->layout) + create_layout (text); + ++ /* We move cursor only if scroll is TRUE */ + if (scroll && !text->button_down) { + /* XXX do we really need the @trailing logic here? if + we don't we can scrap the loop and just use +@@ -3349,7 +3419,9 @@ + int selection_index; + PangoLayoutIter *iter = pango_layout_get_iter (text->layout); + ++ /* check if we are using selection_start or selection_end for moving? */ + selection_index = use_start ? text->selection_start : text->selection_end; ++ + /* convert to a byte index */ + selection_index = g_utf8_offset_to_pointer (text->text, selection_index) - text->text; + diff --git a/evolution-2.8.1-kill-ethread.patch b/evolution-2.8.1-kill-ethread.patch new file mode 100644 index 0000000..78425b3 --- /dev/null +++ b/evolution-2.8.1-kill-ethread.patch @@ -0,0 +1,7144 @@ +diff -up evolution-2.10.3/mail/mail-send-recv.c.kill-ethread evolution-2.10.3/mail/mail-send-recv.c +--- evolution-2.10.3/mail/mail-send-recv.c.kill-ethread 2007-06-30 15:22:35.000000000 -0400 ++++ evolution-2.10.3/mail/mail-send-recv.c 2007-08-29 22:51:25.000000000 -0400 +@@ -725,23 +725,22 @@ receive_get_folder(CamelFilterDriver *d, + /* ********************************************************************** */ + + struct _refresh_folders_msg { +- struct _mail_msg msg; ++ MailMsg base; + + struct _send_info *info; + GPtrArray *folders; + CamelStore *store; + }; + +-static char * +-refresh_folders_desc (struct _mail_msg *mm, int done) ++static gchar * ++refresh_folders_desc (struct _refresh_folders_msg *m) + { + return g_strdup_printf(_("Checking for new mail")); + } + + static void +-refresh_folders_get (struct _mail_msg *mm) ++refresh_folders_exec (struct _refresh_folders_msg *m) + { +- struct _refresh_folders_msg *m = (struct _refresh_folders_msg *)mm; + int i; + CamelFolder *folder; + CamelException ex = CAMEL_EXCEPTION_INITIALISER; +@@ -761,17 +760,14 @@ refresh_folders_get (struct _mail_msg *m + } + + static void +-refresh_folders_got (struct _mail_msg *mm) ++refresh_folders_done (struct _refresh_folders_msg *m) + { +- struct _refresh_folders_msg *m = (struct _refresh_folders_msg *)mm; +- + receive_done("", m->info); + } + + static void +-refresh_folders_free (struct _mail_msg *mm) ++refresh_folders_free (struct _refresh_folders_msg *m) + { +- struct _refresh_folders_msg *m = (struct _refresh_folders_msg *)mm; + int i; + + for (i=0;ifolders->len;i++) +@@ -780,11 +776,12 @@ refresh_folders_free (struct _mail_msg * + camel_object_unref(m->store); + } + +-static struct _mail_msg_op refresh_folders_op = { +- refresh_folders_desc, +- refresh_folders_get, +- refresh_folders_got, +- refresh_folders_free, ++static MailMsgInfo refresh_folders_info = { ++ sizeof (struct _refresh_folders_msg), ++ (MailMsgDescFunc) refresh_folders_desc, ++ (MailMsgExecFunc) refresh_folders_exec, ++ (MailMsgDoneFunc) refresh_folders_done, ++ (MailMsgFreeFunc) refresh_folders_free + }; + + static void +@@ -817,13 +814,13 @@ receive_update_got_folderinfo(CamelStore + + get_folders(store, folders, info); + +- m = mail_msg_new(&refresh_folders_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&refresh_folders_info); + m->store = store; + camel_object_ref(store); + m->folders = folders; + m->info = sinfo; + +- e_thread_put(mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } else { + receive_done ("", data); + } +diff -up evolution-2.10.3/mail/mail-component.c.kill-ethread evolution-2.10.3/mail/mail-component.c +--- evolution-2.10.3/mail/mail-component.c.kill-ethread 2007-05-27 15:55:12.000000000 -0400 ++++ evolution-2.10.3/mail/mail-component.c 2007-08-29 22:51:25.000000000 -0400 +@@ -982,7 +982,7 @@ impl_handleURI (PortableServer_Servant s + if (camel_url_get_param(url, "uid") != NULL) { + char *curi = em_uri_to_camel(uri); + +- mail_get_folder(curi, 0, handleuri_got_folder, url, mail_thread_new); ++ mail_get_folder(curi, 0, handleuri_got_folder, url, mail_msg_unordered_push); + g_free(curi); + } else { + g_warning("email uri's must include a uid parameter"); +diff -up evolution-2.10.3/mail/mail-ops.c.kill-ethread evolution-2.10.3/mail/mail-ops.c +--- evolution-2.10.3/mail/mail-ops.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-ops.c 2007-08-29 22:51:25.000000000 -0400 +@@ -75,7 +75,7 @@ + /* used for both just filtering a folder + uid's, and for filtering a whole folder */ + /* used both for fetching mail, and for filtering mail */ + struct _filter_mail_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *source_folder; /* where they come from */ + GPtrArray *source_uids; /* uids to copy, or NULL == copy all */ +@@ -99,8 +99,8 @@ struct _fetch_mail_msg { + void *data; + }; + +-static char * +-em_filter_folder_element_describe (struct _mail_msg *mm, int complete) ++static gchar * ++em_filter_folder_element_desc (struct _filter_mail_msg *m) + { + return g_strdup (_("Filtering Selected Messages")); + } +@@ -108,9 +108,8 @@ em_filter_folder_element_describe (struc + /* filter a folder, or a subset thereof, uses source_folder/source_uids */ + /* this is shared with fetch_mail */ + static void +-em_filter_folder_element_filter (struct _mail_msg *mm) ++em_filter_folder_element_exec (struct _filter_mail_msg *m) + { +- struct _filter_mail_msg *m = (struct _filter_mail_msg *)mm; + CamelFolder *folder; + GPtrArray *uids, *folder_uids = NULL; + +@@ -137,15 +136,15 @@ em_filter_folder_element_filter (struct + else + folder_uids = uids = camel_folder_get_uids (folder); + +- camel_filter_driver_filter_folder (m->driver, folder, m->cache, uids, m->delete, &mm->ex); +- camel_filter_driver_flush (m->driver, &mm->ex); ++ camel_filter_driver_filter_folder (m->driver, folder, m->cache, uids, m->delete, &m->base.ex); ++ camel_filter_driver_flush (m->driver, &m->base.ex); + + if (folder_uids) + camel_folder_free_uids (folder, folder_uids); + + /* sync our source folder */ + if (!m->cache) +- camel_folder_sync (folder, FALSE, camel_exception_is_set (&mm->ex) ? NULL : &mm->ex); ++ camel_folder_sync (folder, FALSE, camel_exception_is_set (&m->base.ex) ? NULL : &m->base.ex); + camel_folder_thaw (folder); + + if (m->destination) +@@ -161,15 +160,13 @@ em_filter_folder_element_filter (struct + } + + static void +-em_filter_folder_element_filtered (struct _mail_msg *mm) ++em_filter_folder_element_done (struct _filter_mail_msg *m) + { + } + + static void +-em_filter_folder_element_free (struct _mail_msg *mm) ++em_filter_folder_element_free (struct _filter_mail_msg *m) + { +- struct _filter_mail_msg *m = (struct _filter_mail_msg *)mm; +- + if (m->source_folder) + camel_object_unref (m->source_folder); + +@@ -188,11 +185,12 @@ em_filter_folder_element_free (struct _m + mail_session_flush_filter_log (); + } + +-static struct _mail_msg_op em_filter_folder_element_op = { +- em_filter_folder_element_describe, /* we do our own progress reporting? */ +- em_filter_folder_element_filter, +- em_filter_folder_element_filtered, +- em_filter_folder_element_free, ++static MailMsgInfo em_filter_folder_element_info = { ++ sizeof (struct _filter_mail_msg), ++ (MailMsgDescFunc) em_filter_folder_element_desc, /* we do our own progress reporting? */ ++ (MailMsgExecFunc) em_filter_folder_element_exec, ++ (MailMsgDoneFunc) em_filter_folder_element_done, ++ (MailMsgFreeFunc) em_filter_folder_element_free + }; + + void +@@ -202,7 +200,7 @@ mail_filter_folder (CamelFolder *source_ + { + struct _filter_mail_msg *m; + +- m = mail_msg_new (&em_filter_folder_element_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&em_filter_folder_element_info); + m->source_folder = source_folder; + camel_object_ref (source_folder); + m->source_uids = uids; +@@ -221,7 +219,7 @@ mail_filter_folder (CamelFolder *source_ + camel_filter_driver_remove_rule_by_name (m->driver, "new-mail-notification"); + } + +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* convenience functions for it */ +@@ -260,17 +258,16 @@ uid_cachename_hack (CamelStore *store) + return filename; + } + +-static char * +-fetch_mail_describe (struct _mail_msg *mm, int complete) ++static gchar * ++fetch_mail_desc (struct _fetch_mail_msg *m) + { + return g_strdup (_("Fetching Mail")); + } + + static void +-fetch_mail_fetch (struct _mail_msg *mm) ++fetch_mail_exec (struct _fetch_mail_msg *m) + { +- struct _fetch_mail_msg *m = (struct _fetch_mail_msg *)mm; +- struct _filter_mail_msg *fm = (struct _filter_mail_msg *)mm; ++ struct _filter_mail_msg *fm = (struct _filter_mail_msg *)m; + int i; + + if (m->cancel) +@@ -283,20 +280,20 @@ fetch_mail_fetch (struct _mail_msg *mm) + /* FIXME: this should support keep_on_server too, which would then perform a spool + access thingy, right? problem is matching raw messages to uid's etc. */ + if (!strncmp (m->source_uri, "mbox:", 5)) { +- char *path = mail_tool_do_movemail (m->source_uri, &mm->ex); ++ char *path = mail_tool_do_movemail (m->source_uri, &fm->base.ex); + +- if (path && !camel_exception_is_set (&mm->ex)) { ++ if (path && !camel_exception_is_set (&fm->base.ex)) { + camel_folder_freeze (fm->destination); + camel_filter_driver_set_default_folder (fm->driver, fm->destination); +- camel_filter_driver_filter_mbox (fm->driver, path, m->source_uri, &mm->ex); ++ camel_filter_driver_filter_mbox (fm->driver, path, m->source_uri, &fm->base.ex); + camel_folder_thaw (fm->destination); + +- if (!camel_exception_is_set (&mm->ex)) ++ if (!camel_exception_is_set (&fm->base.ex)) + g_unlink (path); + } + g_free (path); + } else { +- CamelFolder *folder = fm->source_folder = mail_tool_get_inbox (m->source_uri, &mm->ex); ++ CamelFolder *folder = fm->source_folder = mail_tool_get_inbox (m->source_uri, &fm->base.ex); + + if (folder) { + /* this handles 'keep on server' stuff, if we have any new uid's to copy +@@ -322,17 +319,17 @@ fetch_mail_fetch (struct _mail_msg *mm) + camel_uid_cache_free_uids (cache_uids); + + fm->cache = cache; +- em_filter_folder_element_filter (mm); ++ em_filter_folder_element_exec (&fm->base); + + /* need to uncancel so writes/etc. don't fail */ +- if (mm->ex.id == CAMEL_EXCEPTION_USER_CANCEL) ++ if (fm->base.ex.id == CAMEL_EXCEPTION_USER_CANCEL) + camel_operation_uncancel(NULL); + + /* save the cache of uids that we've just downloaded */ + camel_uid_cache_save (cache); + } + +- if (fm->delete && mm->ex.id == CAMEL_EXCEPTION_NONE) { ++ if (fm->delete && fm->base.ex.id == CAMEL_EXCEPTION_NONE) { + /* not keep on server - just delete all the actual messages on the server */ + for (i=0;ilen;i++) { + d(printf("force delete uid '%s'\n", (char *)folder_uids->pdata[i])); +@@ -348,7 +345,7 @@ fetch_mail_fetch (struct _mail_msg *mm) + camel_uid_cache_destroy (cache); + camel_folder_free_uids (folder, folder_uids); + } else { +- em_filter_folder_element_filter (mm); ++ em_filter_folder_element_exec (&fm->base); + } + + /* we unref the source folder here since we +@@ -372,31 +369,28 @@ fail: + } + + static void +-fetch_mail_fetched (struct _mail_msg *mm) ++fetch_mail_done (struct _fetch_mail_msg *m) + { +- struct _fetch_mail_msg *m = (struct _fetch_mail_msg *)mm; +- + if (m->done) + m->done (m->source_uri, m->data); + } + + static void +-fetch_mail_free (struct _mail_msg *mm) ++fetch_mail_free (struct _fetch_mail_msg *m) + { +- struct _fetch_mail_msg *m = (struct _fetch_mail_msg *)mm; +- + g_free (m->source_uri); + if (m->cancel) + camel_operation_unref (m->cancel); + +- em_filter_folder_element_free (mm); ++ em_filter_folder_element_free (&m->fmsg.base); + } + +-static struct _mail_msg_op fetch_mail_op = { +- fetch_mail_describe, /* we do our own progress reporting */ +- fetch_mail_fetch, +- fetch_mail_fetched, +- fetch_mail_free, ++static MailMsgInfo fetch_mail_info = { ++ sizeof (struct _fetch_mail_msg), ++ (MailMsgDescFunc) fetch_mail_desc, ++ (MailMsgExecFunc) fetch_mail_exec, ++ (MailMsgDoneFunc) fetch_mail_done, ++ (MailMsgFreeFunc) fetch_mail_free + }; + + /* ouch, a 'do everything' interface ... */ +@@ -409,7 +403,7 @@ mail_fetch_mail (const char *source, int + struct _fetch_mail_msg *m; + struct _filter_mail_msg *fm; + +- m = mail_msg_new (&fetch_mail_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&fetch_mail_info); + fm = (struct _filter_mail_msg *)m; + m->source_uri = g_strdup (source); + fm->delete = !keep; +@@ -426,7 +420,7 @@ mail_fetch_mail (const char *source, int + if (status) + camel_filter_driver_set_status_func (fm->driver, status, status_data); + +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* ********************************************************************** */ +@@ -657,7 +651,7 @@ exit: + /* ** SEND MAIL QUEUE ***************************************************** */ + + struct _send_queue_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *queue; + char *destination; +@@ -689,9 +683,8 @@ report_status (struct _send_queue_msg *m + } + + static void +-send_queue_send(struct _mail_msg *mm) ++send_queue_exec (struct _send_queue_msg *m) + { +- struct _send_queue_msg *m = (struct _send_queue_msg *)mm; + CamelFolder *sent_folder = mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_SENT); + GPtrArray *uids, *send_uids = NULL; + CamelException ex; +@@ -739,17 +732,17 @@ send_queue_send(struct _mail_msg *mm) + if (camel_exception_is_set (&ex)) { + if (ex.id != CAMEL_EXCEPTION_USER_CANCEL) { + /* merge exceptions into one */ +- if (camel_exception_is_set (&mm->ex)) +- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, "%s\n\n%s", mm->ex.desc, ex.desc); ++ if (camel_exception_is_set (&m->base.ex)) ++ camel_exception_setv (&m->base.ex, CAMEL_EXCEPTION_SYSTEM, "%s\n\n%s", m->base.ex.desc, ex.desc); + else +- camel_exception_xfer (&mm->ex, &ex); ++ camel_exception_xfer (&m->base.ex, &ex); + camel_exception_clear (&ex); + + /* keep track of the number of failures */ + j++; + } else { + /* transfer the USER_CANCEL exeption to the async op exception and then break */ +- camel_exception_xfer (&mm->ex, &ex); ++ camel_exception_xfer (&m->base.ex, &ex); + break; + } + } +@@ -759,7 +752,7 @@ send_queue_send(struct _mail_msg *mm) + + if (j > 0) + report_status (m, CAMEL_FILTER_STATUS_END, 100, _("Failed to send %d of %d messages"), j, send_uids->len); +- else if (mm->ex.id == CAMEL_EXCEPTION_USER_CANCEL) ++ else if (m->base.ex.id == CAMEL_EXCEPTION_USER_CANCEL) + report_status (m, CAMEL_FILTER_STATUS_END, 100, _("Canceled.")); + else + report_status (m, CAMEL_FILTER_STATUS_END, 100, _("Complete.")); +@@ -785,19 +778,15 @@ send_queue_send(struct _mail_msg *mm) + } + + static void +-send_queue_sent(struct _mail_msg *mm) ++send_queue_done (struct _send_queue_msg *m) + { +- struct _send_queue_msg *m = (struct _send_queue_msg *)mm; +- + if (m->done) + m->done(m->destination, m->data); + } + + static void +-send_queue_free(struct _mail_msg *mm) ++send_queue_free (struct _send_queue_msg *m) + { +- struct _send_queue_msg *m = (struct _send_queue_msg *)mm; +- + if (m->driver) + camel_object_unref(m->driver); + camel_object_unref(m->queue); +@@ -806,11 +795,12 @@ send_queue_free(struct _mail_msg *mm) + camel_operation_unref(m->cancel); + } + +-static struct _mail_msg_op send_queue_op = { +- NULL, /* do our own reporting, as with fetch mail */ +- send_queue_send, +- send_queue_sent, +- send_queue_free, ++static MailMsgInfo send_queue_info = { ++ sizeof (struct _send_queue_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) send_queue_exec, ++ (MailMsgDoneFunc) send_queue_done, ++ (MailMsgFreeFunc) send_queue_free + }; + + /* same interface as fetch_mail, just 'cause i'm lazy today (and we need to run it from the same spot?) */ +@@ -823,7 +813,7 @@ mail_send_queue(CamelFolder *queue, cons + { + struct _send_queue_msg *m; + +- m = mail_msg_new(&send_queue_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&send_queue_info); + m->queue = queue; + camel_object_ref(queue); + m->destination = g_strdup(destination); +@@ -839,13 +829,13 @@ mail_send_queue(CamelFolder *queue, cons + m->driver = camel_session_get_filter_driver (session, type, NULL); + camel_filter_driver_set_folder_func (m->driver, get_folder, get_data); + +- e_thread_put(mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* ** APPEND MESSAGE TO FOLDER ******************************************** */ + + struct _append_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + CamelMimeMessage *message; +@@ -856,45 +846,40 @@ struct _append_msg { + void *data; + }; + +-static char * +-append_mail_desc (struct _mail_msg *mm, int done) ++static gchar * ++append_mail_desc (struct _append_msg *m) + { + return g_strdup (_("Saving message to folder")); + } + + static void +-append_mail_append (struct _mail_msg *mm) ++append_mail_exec (struct _append_msg *m) + { +- struct _append_msg *m = (struct _append_msg *)mm; +- + camel_mime_message_set_date(m->message, CAMEL_MESSAGE_DATE_CURRENT, 0); +- camel_folder_append_message(m->folder, m->message, m->info, &m->appended_uid, &mm->ex); ++ camel_folder_append_message(m->folder, m->message, m->info, &m->appended_uid, &m->base.ex); + } + + static void +-append_mail_appended (struct _mail_msg *mm) ++append_mail_done (struct _append_msg *m) + { +- struct _append_msg *m = (struct _append_msg *)mm; +- + if (m->done) +- m->done(m->folder, m->message, m->info, !camel_exception_is_set(&mm->ex), m->appended_uid, m->data); ++ m->done(m->folder, m->message, m->info, !camel_exception_is_set(&m->base.ex), m->appended_uid, m->data); + } + + static void +-append_mail_free (struct _mail_msg *mm) ++append_mail_free (struct _append_msg *m) + { +- struct _append_msg *m = (struct _append_msg *)mm; +- + camel_object_unref(m->message); + camel_object_unref(m->folder); + g_free (m->appended_uid); + } + +-static struct _mail_msg_op append_mail_op = { +- append_mail_desc, +- append_mail_append, +- append_mail_appended, +- append_mail_free ++static MailMsgInfo append_mail_info = { ++ sizeof (struct _append_msg), ++ (MailMsgDescFunc) append_mail_desc, ++ (MailMsgExecFunc) append_mail_exec, ++ (MailMsgDoneFunc) append_mail_done, ++ (MailMsgFreeFunc) append_mail_free + }; + + void +@@ -911,7 +896,7 @@ mail_append_mail (CamelFolder *folder, C + camel_medium_set_header (CAMEL_MEDIUM (message), "X-Mailer", + "Evolution " VERSION SUB_VERSION " " VERSION_COMMENT); + +- m = mail_msg_new (&append_mail_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&append_mail_info); + m->folder = folder; + camel_object_ref(folder); + m->message = message; +@@ -921,13 +906,13 @@ mail_append_mail (CamelFolder *folder, C + m->done = done; + m->data = data; + +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* ** TRANSFER MESSAGES **************************************************** */ + + struct _transfer_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *source; + GPtrArray *uids; +@@ -939,24 +924,21 @@ struct _transfer_msg { + void *data; + }; + +-static char * +-transfer_messages_desc (struct _mail_msg *mm, int done) ++static gchar * ++transfer_messages_desc (struct _transfer_msg *m) + { +- struct _transfer_msg *m = (struct _transfer_msg *)mm; +- + return g_strdup_printf(m->delete?_("Moving messages to %s"):_("Copying messages to %s"), + m->dest_uri); + + } + + static void +-transfer_messages_transfer (struct _mail_msg *mm) ++transfer_messages_exec (struct _transfer_msg *m) + { +- struct _transfer_msg *m = (struct _transfer_msg *)mm; + CamelFolder *dest; + +- dest = mail_tool_uri_to_folder (m->dest_uri, m->dest_flags, &mm->ex); +- if (camel_exception_is_set (&mm->ex)) ++ dest = mail_tool_uri_to_folder (m->dest_uri, m->dest_flags, &m->base.ex); ++ if (camel_exception_is_set (&m->base.ex)) + return; + + if (dest == m->source) { +@@ -968,7 +950,7 @@ transfer_messages_transfer (struct _mail + camel_folder_freeze (m->source); + camel_folder_freeze (dest); + +- camel_folder_transfer_messages_to (m->source, m->uids, dest, NULL, m->delete, &mm->ex); ++ camel_folder_transfer_messages_to (m->source, m->uids, dest, NULL, m->delete, &m->base.ex); + + /* make sure all deleted messages are marked as seen */ + +@@ -987,29 +969,26 @@ transfer_messages_transfer (struct _mail + } + + static void +-transfer_messages_transferred (struct _mail_msg *mm) ++transfer_messages_done (struct _transfer_msg *m) + { +- struct _transfer_msg *m = (struct _transfer_msg *)mm; +- + if (m->done) +- m->done (!camel_exception_is_set (&mm->ex), m->data); ++ m->done (!camel_exception_is_set (&m->base.ex), m->data); + } + + static void +-transfer_messages_free (struct _mail_msg *mm) ++transfer_messages_free (struct _transfer_msg *m) + { +- struct _transfer_msg *m = (struct _transfer_msg *)mm; +- + camel_object_unref (m->source); + g_free (m->dest_uri); + em_utils_uids_free (m->uids); + } + +-static struct _mail_msg_op transfer_messages_op = { +- transfer_messages_desc, +- transfer_messages_transfer, +- transfer_messages_transferred, +- transfer_messages_free, ++static MailMsgInfo transfer_messages_info = { ++ sizeof (struct _transfer_msg), ++ (MailMsgDescFunc) transfer_messages_desc, ++ (MailMsgExecFunc) transfer_messages_exec, ++ (MailMsgDoneFunc) transfer_messages_done, ++ (MailMsgFreeFunc) transfer_messages_free + }; + + void +@@ -1026,7 +1005,7 @@ mail_transfer_messages (CamelFolder *sou + g_assert(uids != NULL); + g_assert(dest_uri != NULL); + +- m = mail_msg_new(&transfer_messages_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&transfer_messages_info); + m->source = source; + camel_object_ref (source); + m->uids = uids; +@@ -1036,13 +1015,13 @@ mail_transfer_messages (CamelFolder *sou + m->done = done; + m->data = data; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ** SCAN SUBFOLDERS ***************************************************** */ + + struct _get_folderinfo_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelStore *store; + CamelFolderInfo *info; +@@ -1050,10 +1029,9 @@ struct _get_folderinfo_msg { + void *data; + }; + +-static char * +-get_folderinfo_desc (struct _mail_msg *mm, int done) ++static gchar * ++get_folderinfo_desc (struct _get_folderinfo_msg *m) + { +- struct _get_folderinfo_msg *m = (struct _get_folderinfo_msg *)mm; + char *ret, *name; + + name = camel_service_get_name((CamelService *)m->store, TRUE); +@@ -1063,25 +1041,22 @@ get_folderinfo_desc (struct _mail_msg *m + } + + static void +-get_folderinfo_get (struct _mail_msg *mm) ++get_folderinfo_exec (struct _get_folderinfo_msg *m) + { +- struct _get_folderinfo_msg *m = (struct _get_folderinfo_msg *)mm; + guint32 flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; + +- m->info = camel_store_get_folder_info (m->store, NULL, flags, &mm->ex); ++ m->info = camel_store_get_folder_info (m->store, NULL, flags, &m->base.ex); + } + + static void +-get_folderinfo_got (struct _mail_msg *mm) ++get_folderinfo_done (struct _get_folderinfo_msg *m) + { +- struct _get_folderinfo_msg *m = (struct _get_folderinfo_msg *)mm; +- +- if (!m->info && camel_exception_is_set (&mm->ex)) { ++ if (!m->info && camel_exception_is_set (&m->base.ex)) { + char *url; + + url = camel_service_get_url (CAMEL_SERVICE (m->store)); + w(g_warning ("Error getting folder info from store at %s: %s", +- url, camel_exception_get_description (&mm->ex))); ++ url, camel_exception_get_description (&m->base.ex))); + g_free (url); + } + +@@ -1090,20 +1065,19 @@ get_folderinfo_got (struct _mail_msg *mm + } + + static void +-get_folderinfo_free (struct _mail_msg *mm) ++get_folderinfo_free (struct _get_folderinfo_msg *m) + { +- struct _get_folderinfo_msg *m = (struct _get_folderinfo_msg *)mm; +- + if (m->info) + camel_store_free_folder_info(m->store, m->info); + camel_object_unref(m->store); + } + +-static struct _mail_msg_op get_folderinfo_op = { +- get_folderinfo_desc, +- get_folderinfo_get, +- get_folderinfo_got, +- get_folderinfo_free, ++static MailMsgInfo get_folderinfo_info = { ++ sizeof (struct _get_folderinfo_msg), ++ (MailMsgDescFunc) get_folderinfo_desc, ++ (MailMsgExecFunc) get_folderinfo_exec, ++ (MailMsgDoneFunc) get_folderinfo_done, ++ (MailMsgFreeFunc) get_folderinfo_free + }; + + int +@@ -1112,19 +1086,19 @@ mail_get_folderinfo (CamelStore *store, + struct _get_folderinfo_msg *m; + int id; + +- m = mail_msg_new(&get_folderinfo_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&get_folderinfo_info); + if (op) { +- camel_operation_unref(m->msg.cancel); +- m->msg.cancel = op; ++ camel_operation_unref(m->base.cancel); ++ m->base.cancel = op; + camel_operation_ref(op); + } + m->store = store; + camel_object_ref(store); + m->done = done; + m->data = data; +- id = m->msg.seq; ++ id = m->base.seq; + +- e_thread_put(mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + + return id; + } +@@ -1196,7 +1170,7 @@ mail_build_attachment(CamelFolder *folde + presumably create a folder ... */ + + struct _get_folder_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *uri; + guint32 flags; +@@ -1205,71 +1179,64 @@ struct _get_folder_msg { + void *data; + }; + +-static char * +-get_folder_desc (struct _mail_msg *mm, int done) ++static gchar * ++get_folder_desc (struct _get_folder_msg *m) + { +- struct _get_folder_msg *m = (struct _get_folder_msg *)mm; +- + return g_strdup_printf(_("Opening folder %s"), m->uri); + } + + static void +-get_folder_get (struct _mail_msg *mm) ++get_folder_exec (struct _get_folder_msg *m) + { +- struct _get_folder_msg *m = (struct _get_folder_msg *)mm; +- +- m->folder = mail_tool_uri_to_folder (m->uri, m->flags, &mm->ex); ++ m->folder = mail_tool_uri_to_folder (m->uri, m->flags, &m->base.ex); + } + + static void +-get_folder_got (struct _mail_msg *mm) ++get_folder_done (struct _get_folder_msg *m) + { +- struct _get_folder_msg *m = (struct _get_folder_msg *)mm; +- + if (m->done) + m->done (m->uri, m->folder, m->data); + } + + static void +-get_folder_free (struct _mail_msg *mm) ++get_folder_free (struct _get_folder_msg *m) + { +- struct _get_folder_msg *m = (struct _get_folder_msg *)mm; +- + g_free (m->uri); + if (m->folder) + camel_object_unref (m->folder); + } + +-static struct _mail_msg_op get_folder_op = { +- get_folder_desc, +- get_folder_get, +- get_folder_got, +- get_folder_free, ++static MailMsgInfo get_folder_info = { ++ sizeof (struct _get_folder_msg), ++ (MailMsgDescFunc) get_folder_desc, ++ (MailMsgExecFunc) get_folder_exec, ++ (MailMsgDoneFunc) get_folder_done, ++ (MailMsgFreeFunc) get_folder_free + }; + + int + mail_get_folder (const char *uri, guint32 flags, + void (*done)(char *uri, CamelFolder *folder, void *data), +- void *data, EThread *thread) ++ void *data, MailMsgDispatchFunc dispatch) + { + struct _get_folder_msg *m; + int id; + +- m = mail_msg_new(&get_folder_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&get_folder_info); + m->uri = g_strdup (uri); + m->flags = flags; + m->data = data; + m->done = done; + +- id = m->msg.seq; +- e_thread_put(thread, (EMsg *)m); ++ id = m->base.seq; ++ dispatch (m); + return id; + } + + /* ** GET STORE ******************************************************* */ + + struct _get_store_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *uri; + CamelStore *store; +@@ -1277,50 +1244,43 @@ struct _get_store_msg { + void *data; + }; + +-static char * +-get_store_desc (struct _mail_msg *mm, int done) ++static gchar * ++get_store_desc (struct _get_store_msg *m) + { +- struct _get_store_msg *m = (struct _get_store_msg *)mm; +- + return g_strdup_printf(_("Opening store %s"), m->uri); + } + + static void +-get_store_get (struct _mail_msg *mm) ++get_store_exec (struct _get_store_msg *m) + { +- struct _get_store_msg *m = (struct _get_store_msg *)mm; +- + /*camel_session_get_store connects us, which we don't want to do on startup. */ + + m->store = (CamelStore *) camel_session_get_service (session, m->uri, + CAMEL_PROVIDER_STORE, +- &mm->ex); ++ &m->base.ex); + } + + static void +-get_store_got (struct _mail_msg *mm) ++get_store_done (struct _get_store_msg *m) + { +- struct _get_store_msg *m = (struct _get_store_msg *)mm; +- + if (m->done) + m->done (m->uri, m->store, m->data); + } + + static void +-get_store_free (struct _mail_msg *mm) ++get_store_free (struct _get_store_msg *m) + { +- struct _get_store_msg *m = (struct _get_store_msg *)mm; +- + g_free (m->uri); + if (m->store) + camel_object_unref (m->store); + } + +-static struct _mail_msg_op get_store_op = { +- get_store_desc, +- get_store_get, +- get_store_got, +- get_store_free, ++static MailMsgInfo get_store_info = { ++ sizeof (struct _get_store_msg), ++ (MailMsgDescFunc) get_store_desc, ++ (MailMsgExecFunc) get_store_exec, ++ (MailMsgDoneFunc) get_store_done, ++ (MailMsgFreeFunc) get_store_free + }; + + int +@@ -1329,25 +1289,25 @@ mail_get_store (const char *uri, CamelOp + struct _get_store_msg *m; + int id; + +- m = mail_msg_new (&get_store_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&get_store_info); + if (op) { +- camel_operation_unref(m->msg.cancel); +- m->msg.cancel = op; ++ camel_operation_unref(m->base.cancel); ++ m->base.cancel = op; + camel_operation_ref(op); + } + m->uri = g_strdup (uri); + m->data = data; + m->done = done; + +- id = m->msg.seq; +- e_thread_put (mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + return id; + } + + /* ** REMOVE FOLDER ******************************************************* */ + + struct _remove_folder_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *uri; + gboolean removed; +@@ -1355,18 +1315,15 @@ struct _remove_folder_msg { + void *data; + }; + +-static char * +-remove_folder_desc (struct _mail_msg *mm, int done) ++static gchar * ++remove_folder_desc (struct _remove_folder_msg *m) + { +- struct _remove_folder_msg *m = (struct _remove_folder_msg *)mm; +- + return g_strdup_printf (_("Removing folder %s"), m->uri); + } + + static void +-remove_folder_get (struct _mail_msg *mm) ++remove_folder_exec (struct _remove_folder_msg *m) + { +- struct _remove_folder_msg *m = (struct _remove_folder_msg *)mm; + CamelStore *store; + CamelFolder *folder; + GPtrArray *uids; +@@ -1374,7 +1331,7 @@ remove_folder_get (struct _mail_msg *mm) + + m->removed = FALSE; + +- folder = mail_tool_uri_to_folder (m->uri, 0, &mm->ex); ++ folder = mail_tool_uri_to_folder (m->uri, 0, &m->base.ex); + if (!folder) + return; + +@@ -1394,16 +1351,14 @@ remove_folder_get (struct _mail_msg *mm) + camel_store_unsubscribe_folder (store, folder->full_name, NULL); + + /* Then delete the folder from the store */ +- camel_store_delete_folder (store, folder->full_name, &mm->ex); +- m->removed = !camel_exception_is_set (&mm->ex); ++ camel_store_delete_folder (store, folder->full_name, &m->base.ex); ++ m->removed = !camel_exception_is_set (&m->base.ex); + camel_object_unref (folder); + } + + static void +-remove_folder_got (struct _mail_msg *mm) ++remove_folder_done (struct _remove_folder_msg *m) + { +- struct _remove_folder_msg *m = (struct _remove_folder_msg *)mm; +- + if (m->removed) { + /* FIXME: Remove this folder from the folder cache ??? */ + } +@@ -1413,18 +1368,17 @@ remove_folder_got (struct _mail_msg *mm) + } + + static void +-remove_folder_free (struct _mail_msg *mm) ++remove_folder_free (struct _remove_folder_msg *m) + { +- struct _remove_folder_msg *m = (struct _remove_folder_msg *)mm; +- + g_free (m->uri); + } + +-static struct _mail_msg_op remove_folder_op = { +- remove_folder_desc, +- remove_folder_get, +- remove_folder_got, +- remove_folder_free, ++static MailMsgInfo remove_folder_info = { ++ sizeof (struct _remove_folder_msg), ++ (MailMsgDescFunc) remove_folder_desc, ++ (MailMsgExecFunc) remove_folder_exec, ++ (MailMsgDoneFunc) remove_folder_done, ++ (MailMsgFreeFunc) remove_folder_free + }; + + void +@@ -1432,59 +1386,56 @@ mail_remove_folder (const char *uri, voi + { + struct _remove_folder_msg *m; + +- m = mail_msg_new (&remove_folder_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&remove_folder_info); + m->uri = g_strdup (uri); + m->data = data; + m->done = done; + +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* ** SYNC FOLDER ********************************************************* */ + + struct _sync_folder_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + void (*done) (CamelFolder *folder, void *data); + void *data; + }; + +-static char *sync_folder_desc(struct _mail_msg *mm, int done) ++static gchar * ++sync_folder_desc (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- + return g_strdup_printf (_("Storing folder \'%s\'"), + camel_folder_get_full_name (m->folder)); + } + +-static void sync_folder_sync(struct _mail_msg *mm) ++static void ++sync_folder_exec (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- +- camel_folder_sync(m->folder, FALSE, &mm->ex); ++ camel_folder_sync(m->folder, FALSE, &m->base.ex); + } + +-static void sync_folder_synced(struct _mail_msg *mm) ++static void ++sync_folder_done (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- + if (m->done) + m->done(m->folder, m->data); + } + +-static void sync_folder_free(struct _mail_msg *mm) ++static void ++sync_folder_free (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- + camel_object_unref((CamelObject *)m->folder); + } + +-static struct _mail_msg_op sync_folder_op = { +- sync_folder_desc, +- sync_folder_sync, +- sync_folder_synced, +- sync_folder_free, ++static MailMsgInfo sync_folder_info = { ++ sizeof (struct _sync_folder_msg), ++ (MailMsgDescFunc) sync_folder_desc, ++ (MailMsgExecFunc) sync_folder_exec, ++ (MailMsgDoneFunc) sync_folder_done, ++ (MailMsgFreeFunc) sync_folder_free + }; + + void +@@ -1492,19 +1443,19 @@ mail_sync_folder(CamelFolder *folder, vo + { + struct _sync_folder_msg *m; + +- m = mail_msg_new(&sync_folder_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&sync_folder_info); + m->folder = folder; + camel_object_ref(folder); + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ** SYNC STORE ********************************************************* */ + + struct _sync_store_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelStore *store; + int expunge; +@@ -1512,9 +1463,9 @@ struct _sync_store_msg { + void *data; + }; + +-static char *sync_store_desc(struct _mail_msg *mm, int done) ++static gchar * ++sync_store_desc (struct _sync_store_msg *m) + { +- struct _sync_store_msg *m = (struct _sync_store_msg *)mm; + char *uri, *res; + + uri = camel_url_to_string(((CamelService *)m->store)->url, CAMEL_URL_HIDE_ALL); +@@ -1527,33 +1478,31 @@ static char *sync_store_desc(struct _mai + return res; + } + +-static void sync_store_sync(struct _mail_msg *mm) ++static void ++sync_store_exec (struct _sync_store_msg *m) + { +- struct _sync_store_msg *m = (struct _sync_store_msg *)mm; +- +- camel_store_sync(m->store, m->expunge, &mm->ex); ++ camel_store_sync(m->store, m->expunge, &m->base.ex); + } + +-static void sync_store_synced(struct _mail_msg *mm) ++static void ++sync_store_done (struct _sync_store_msg *m) + { +- struct _sync_store_msg *m = (struct _sync_store_msg *)mm; +- + if (m->done) + m->done(m->store, m->data); + } + +-static void sync_store_free(struct _mail_msg *mm) ++static void ++sync_store_free (struct _sync_store_msg *m) + { +- struct _sync_store_msg *m = (struct _sync_store_msg *)mm; +- + camel_object_unref(m->store); + } + +-static struct _mail_msg_op sync_store_op = { +- sync_store_desc, +- sync_store_sync, +- sync_store_synced, +- sync_store_free, ++static MailMsgInfo sync_store_info = { ++ sizeof (struct _sync_store_msg), ++ (MailMsgDescFunc) sync_store_desc, ++ (MailMsgExecFunc) sync_store_exec, ++ (MailMsgDoneFunc) sync_store_done, ++ (MailMsgFreeFunc) sync_store_free + }; + + void +@@ -1561,36 +1510,37 @@ mail_sync_store(CamelStore *store, int e + { + struct _sync_store_msg *m; + +- m = mail_msg_new(&sync_store_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&sync_store_info); + m->store = store; + m->expunge = expunge; + camel_object_ref(store); + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ******************************************************************************** */ + +-static char *refresh_folder_desc(struct _mail_msg *mm, int done) ++static gchar * ++refresh_folder_desc (struct _sync_folder_msg *m) + { + return g_strdup(_("Refreshing folder")); + } + +-static void refresh_folder_refresh(struct _mail_msg *mm) ++static void ++refresh_folder_exec (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- +- camel_folder_refresh_info(m->folder, &mm->ex); ++ camel_folder_refresh_info(m->folder, &m->base.ex); + } + + /* we just use the sync stuff where we can, since it would be the same */ +-static struct _mail_msg_op refresh_folder_op = { +- refresh_folder_desc, +- refresh_folder_refresh, +- sync_folder_synced, +- sync_folder_free, ++static MailMsgInfo refresh_folder_info = { ++ sizeof (struct _sync_folder_msg), ++ (MailMsgDescFunc) refresh_folder_desc, ++ (MailMsgExecFunc) refresh_folder_exec, ++ (MailMsgDoneFunc) sync_folder_done, ++ (MailMsgFreeFunc) sync_folder_free + }; + + void +@@ -1598,35 +1548,36 @@ mail_refresh_folder(CamelFolder *folder, + { + struct _sync_folder_msg *m; + +- m = mail_msg_new(&refresh_folder_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&refresh_folder_info); + m->folder = folder; + camel_object_ref(folder); + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ******************************************************************************** */ + +-static char *expunge_folder_desc(struct _mail_msg *mm, int done) ++static gchar * ++expunge_folder_desc (struct _sync_folder_msg *m) + { + return g_strdup(_("Expunging folder")); + } + +-static void expunge_folder_expunge(struct _mail_msg *mm) ++static void ++expunge_folder_exec (struct _sync_folder_msg *m) + { +- struct _sync_folder_msg *m = (struct _sync_folder_msg *)mm; +- +- camel_folder_expunge(m->folder, &mm->ex); ++ camel_folder_expunge(m->folder, &m->base.ex); + } + + /* we just use the sync stuff where we can, since it would be the same */ +-static struct _mail_msg_op expunge_folder_op = { +- expunge_folder_desc, +- expunge_folder_expunge, +- sync_folder_synced, +- sync_folder_free, ++static MailMsgInfo expunge_folder_info = { ++ sizeof (struct _sync_folder_msg), ++ (MailMsgDescFunc) expunge_folder_desc, ++ (MailMsgExecFunc) expunge_folder_exec, ++ (MailMsgDoneFunc) sync_folder_done, ++ (MailMsgFreeFunc) sync_folder_free + }; + + void +@@ -1634,31 +1585,30 @@ mail_expunge_folder(CamelFolder *folder, + { + struct _sync_folder_msg *m; + +- m = mail_msg_new(&expunge_folder_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&expunge_folder_info); + m->folder = folder; + camel_object_ref(folder); + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ******************************************************************************** */ + + struct _empty_trash_msg { +- struct _mail_msg msg; ++ MailMsg base; + + EAccount *account; + void (*done) (EAccount *account, void *data); + void *data; + }; + +-static char *empty_trash_desc(struct _mail_msg *mm, int done) ++static gchar * ++empty_trash_desc (struct _empty_trash_msg *m) + { + /* FIXME after 1.4 is out and we're not in string freeze any more. */ + #if 0 +- struct _empty_trash_msg *m = (struct _empty_trash_msg *)mm; +- + return g_strdup_printf (_("Emptying trash in \'%s\'"), + m->account ? m->account->name : _("Local Folders")); + #else +@@ -1666,49 +1616,48 @@ static char *empty_trash_desc(struct _ma + #endif + } + +-static void empty_trash_empty(struct _mail_msg *mm) ++static void ++empty_trash_exec (struct _empty_trash_msg *m) + { +- struct _empty_trash_msg *m = (struct _empty_trash_msg *)mm; + const char *evolution_dir; + CamelFolder *trash; + char *uri; + + if (m->account) { +- trash = mail_tool_get_trash (m->account->source->url, FALSE, &mm->ex); ++ trash = mail_tool_get_trash (m->account->source->url, FALSE, &m->base.ex); + } else { + evolution_dir = mail_component_peek_base_directory (mail_component_peek ()); + uri = g_strdup_printf ("mbox:%s/mail/local", evolution_dir); +- trash = mail_tool_get_trash (uri, TRUE, &mm->ex); ++ trash = mail_tool_get_trash (uri, TRUE, &m->base.ex); + g_free (uri); + } + + if (trash) +- camel_folder_expunge (trash, &mm->ex); ++ camel_folder_expunge (trash, &m->base.ex); + + camel_object_unref (trash); + } + +-static void empty_trash_emptied(struct _mail_msg *mm) ++static void ++empty_trash_done (struct _empty_trash_msg *m) + { +- struct _empty_trash_msg *m = (struct _empty_trash_msg *)mm; +- + if (m->done) + m->done(m->account, m->data); + } + +-static void empty_trash_free(struct _mail_msg *mm) ++static void ++empty_trash_free (struct _empty_trash_msg *m) + { +- struct _empty_trash_msg *m = (struct _empty_trash_msg *)mm; +- + if (m->account) + g_object_unref(m->account); + } + +-static struct _mail_msg_op empty_trash_op = { +- empty_trash_desc, +- empty_trash_empty, +- empty_trash_emptied, +- empty_trash_free, ++static MailMsgInfo empty_trash_info = { ++ sizeof (struct _empty_trash_msg), ++ (MailMsgDescFunc) empty_trash_desc, ++ (MailMsgExecFunc) empty_trash_exec, ++ (MailMsgDoneFunc) empty_trash_done, ++ (MailMsgFreeFunc) empty_trash_free + }; + + void +@@ -1716,20 +1665,20 @@ mail_empty_trash(EAccount *account, void + { + struct _empty_trash_msg *m; + +- m = mail_msg_new(&empty_trash_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&empty_trash_info); + m->account = account; + if (account) + g_object_ref(account); + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ** GET MESSAGE(s) ***************************************************** */ + + struct _get_message_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + char *uid; +@@ -1739,32 +1688,28 @@ struct _get_message_msg { + CamelOperation *cancel; + }; + +-static char *get_message_desc(struct _mail_msg *mm, int done) ++static gchar * ++get_message_desc (struct _get_message_msg *m) + { +- struct _get_message_msg *m = (struct _get_message_msg *)mm; +- + return g_strdup_printf(_("Retrieving message %s"), m->uid); + } + +-static void get_message_get(struct _mail_msg *mm) ++static void ++get_message_exec (struct _get_message_msg *m) + { +- struct _get_message_msg *m = (struct _get_message_msg *)mm; +- +- m->message = camel_folder_get_message(m->folder, m->uid, &mm->ex); ++ m->message = camel_folder_get_message(m->folder, m->uid, &m->base.ex); + } + +-static void get_message_got(struct _mail_msg *mm) ++static void ++get_message_done (struct _get_message_msg *m) + { +- struct _get_message_msg *m = (struct _get_message_msg *)mm; +- + if (m->done) + m->done(m->folder, m->uid, m->message, m->data); + } + +-static void get_message_free(struct _mail_msg *mm) ++static void ++get_message_free (struct _get_message_msg *m) + { +- struct _get_message_msg *m = (struct _get_message_msg *)mm; +- + g_free (m->uid); + camel_object_unref (m->folder); + camel_operation_unref (m->cancel); +@@ -1773,21 +1718,22 @@ static void get_message_free(struct _mai + camel_object_unref (m->message); + } + +-static struct _mail_msg_op get_message_op = { +- get_message_desc, +- get_message_get, +- get_message_got, +- get_message_free, ++static MailMsgInfo get_message_info = { ++ sizeof (struct _get_message_msg), ++ (MailMsgDescFunc) get_message_desc, ++ (MailMsgExecFunc) get_message_exec, ++ (MailMsgDoneFunc) get_message_done, ++ (MailMsgFreeFunc) get_message_free + }; + + void + mail_get_message(CamelFolder *folder, const char *uid, void (*done) (CamelFolder *folder, const char *uid, + CamelMimeMessage *msg, void *data), +- void *data, EThread *thread) ++ void *data, MailMsgDispatchFunc dispatch) + { + struct _get_message_msg *m; + +- m = mail_msg_new(&get_message_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&get_message_info); + m->folder = folder; + camel_object_ref(folder); + m->uid = g_strdup(uid); +@@ -1795,37 +1741,37 @@ mail_get_message(CamelFolder *folder, co + m->done = done; + m->cancel = camel_operation_new(NULL, NULL); + +- e_thread_put(thread, (EMsg *)m); ++ dispatch (m); + } + + typedef void (*get_done)(CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *); + +-static void get_messagex_got(struct _mail_msg *mm) ++static void ++get_messagex_done (struct _get_message_msg *m) + { +- struct _get_message_msg *m = (struct _get_message_msg *)mm; +- + if (m->done) { + get_done done = (get_done)m->done; +- done(m->folder, m->uid, m->message, m->data, &mm->ex); ++ done(m->folder, m->uid, m->message, m->data, &m->base.ex); + } + } + +-static struct _mail_msg_op get_messagex_op = { +- get_message_desc, +- get_message_get, +- get_messagex_got, +- get_message_free, ++static MailMsgInfo get_messagex_info = { ++ sizeof (struct _get_message_msg), ++ (MailMsgDescFunc) get_message_desc, ++ (MailMsgExecFunc) get_message_exec, ++ (MailMsgDoneFunc) get_messagex_done, ++ (MailMsgFreeFunc) get_message_free + }; + + /* This is temporary, to avoid having to rewrite everything that uses + mail_get_message; it adds an exception argument to the callback */ + void + mail_get_messagex(CamelFolder *folder, const char *uid, void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *), +- void *data, EThread *thread) ++ void *data, MailMsgDispatchFunc dispatch) + { + struct _get_message_msg *m; + +- m = mail_msg_new(&get_messagex_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&get_messagex_info); + m->folder = folder; + camel_object_ref(folder); + m->uid = g_strdup(uid); +@@ -1833,13 +1779,13 @@ mail_get_messagex(CamelFolder *folder, c + m->done = done; + m->cancel = camel_operation_new(NULL, NULL); + +- e_thread_put(thread, (EMsg *)m); ++ dispatch (m); + } + + /* ********************************************************************** */ + + struct _get_messages_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + GPtrArray *uids; +@@ -1849,26 +1795,25 @@ struct _get_messages_msg { + void *data; + }; + +-static char * get_messages_desc(struct _mail_msg *mm, int done) ++static gchar * ++get_messages_desc (struct _get_messages_msg *m) + { +- struct _get_messages_msg *m = (struct _get_messages_msg *)mm; +- + return g_strdup_printf(ngettext("Retrieving %d message", + "Retrieving %d messages", m->uids->len), + m->uids->len); + } + +-static void get_messages_get(struct _mail_msg *mm) ++static void ++get_messages_exec (struct _get_messages_msg *m) + { +- struct _get_messages_msg *m = (struct _get_messages_msg *)mm; + int i; + CamelMimeMessage *message; + + for (i=0; iuids->len; i++) { + int pc = ((i+1) * 100) / m->uids->len; + +- message = camel_folder_get_message(m->folder, m->uids->pdata[i], &mm->ex); +- camel_operation_progress(mm->cancel, pc); ++ message = camel_folder_get_message(m->folder, m->uids->pdata[i], &m->base.ex); ++ camel_operation_progress(m->base.cancel, pc); + if (message == NULL) + break; + +@@ -1876,17 +1821,16 @@ static void get_messages_get(struct _mai + } + } + +-static void get_messages_got(struct _mail_msg *mm) ++static void ++get_messages_done (struct _get_messages_msg *m) + { +- struct _get_messages_msg *m = (struct _get_messages_msg *)mm; +- + if (m->done) + m->done(m->folder, m->uids, m->messages, m->data); + } + +-static void get_messages_free(struct _mail_msg *mm) ++static void ++get_messages_free (struct _get_messages_msg *m) + { +- struct _get_messages_msg *m = (struct _get_messages_msg *)mm; + int i; + + em_utils_uids_free (m->uids); +@@ -1898,11 +1842,12 @@ static void get_messages_free(struct _ma + camel_object_unref(m->folder); + } + +-static struct _mail_msg_op get_messages_op = { +- get_messages_desc, +- get_messages_get, +- get_messages_got, +- get_messages_free, ++static MailMsgInfo get_messages_info = { ++ sizeof (struct _get_messages_msg), ++ (MailMsgDescFunc) get_messages_desc, ++ (MailMsgExecFunc) get_messages_exec, ++ (MailMsgDoneFunc) get_messages_done, ++ (MailMsgFreeFunc) get_messages_free + }; + + void +@@ -1912,7 +1857,7 @@ mail_get_messages(CamelFolder *folder, G + { + struct _get_messages_msg *m; + +- m = mail_msg_new(&get_messages_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&get_messages_info); + m->folder = folder; + camel_object_ref(folder); + m->uids = uids; +@@ -1920,13 +1865,13 @@ mail_get_messages(CamelFolder *folder, G + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } + + /* ** SAVE MESSAGES ******************************************************* */ + + struct _save_messages_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + GPtrArray *uids; +@@ -1935,10 +1880,9 @@ struct _save_messages_msg { + void *data; + }; + +-static char *save_messages_desc(struct _mail_msg *mm, int done) ++static gchar * ++save_messages_desc (struct _save_messages_msg *m) + { +- struct _save_messages_msg *m = (struct _save_messages_msg *)mm; +- + return g_strdup_printf(ngettext("Saving %d message", + "Saving %d messsages", m->uids->len), + m->uids->len); +@@ -1977,9 +1921,8 @@ save_prepare_part (CamelMimePart *mime_p + } + + static void +-save_messages_save (struct _mail_msg *mm) ++save_messages_exec (struct _save_messages_msg *m) + { +- struct _save_messages_msg *m = (struct _save_messages_msg *)mm; + CamelStreamFilter *filtered_stream; + CamelMimeFilterFrom *from_filter; + CamelStream *stream; +@@ -1996,8 +1939,8 @@ save_messages_save (struct _mail_msg *mm + CamelMimeMessage *message; + int pc = ((i+1) * 100) / m->uids->len; + +- message = camel_folder_get_message(m->folder, m->uids->pdata[i], &mm->ex); +- camel_operation_progress(mm->cancel, pc); ++ message = camel_folder_get_message(m->folder, m->uids->pdata[i], &m->base.ex); ++ camel_operation_progress(m->base.cancel, pc); + if (message == NULL) + break; + +@@ -2009,7 +1952,7 @@ save_messages_save (struct _mail_msg *mm + || camel_stream_flush(stream) == -1 + || camel_data_wrapper_write_to_stream((CamelDataWrapper *)message, (CamelStream *)filtered_stream) == -1 + || camel_stream_flush((CamelStream *)filtered_stream) == -1) { +- camel_exception_setv(&mm->ex, CAMEL_EXCEPTION_SYSTEM, ++ camel_exception_setv(&m->base.ex, CAMEL_EXCEPTION_SYSTEM, + _("Error saving messages to: %s:\n %s"), m->path, strerror(errno)); + g_free(from); + camel_object_unref((CamelObject *)message); +@@ -2023,28 +1966,27 @@ save_messages_save (struct _mail_msg *mm + camel_object_unref(stream); + } + +-static void save_messages_saved(struct _mail_msg *mm) ++static void ++save_messages_done (struct _save_messages_msg *m) + { +- struct _save_messages_msg *m = (struct _save_messages_msg *)mm; +- + if (m->done) + m->done(m->folder, m->uids, m->path, m->data); + } + +-static void save_messages_free(struct _mail_msg *mm) ++static void ++save_messages_free (struct _save_messages_msg *m) + { +- struct _save_messages_msg *m = (struct _save_messages_msg *)mm; +- + em_utils_uids_free (m->uids); + camel_object_unref(m->folder); + g_free(m->path); + } + +-static struct _mail_msg_op save_messages_op = { +- save_messages_desc, +- save_messages_save, +- save_messages_saved, +- save_messages_free, ++static MailMsgInfo save_messages_info = { ++ sizeof (struct _save_messages_msg), ++ (MailMsgDescFunc) save_messages_desc, ++ (MailMsgExecFunc) save_messages_exec, ++ (MailMsgDoneFunc) save_messages_done, ++ (MailMsgFreeFunc) save_messages_free + }; + + int +@@ -2054,7 +1996,7 @@ mail_save_messages(CamelFolder *folder, + struct _save_messages_msg *m; + int id; + +- m = mail_msg_new(&save_messages_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&save_messages_info); + m->folder = folder; + camel_object_ref(folder); + m->uids = uids; +@@ -2062,8 +2004,8 @@ mail_save_messages(CamelFolder *folder, + m->data = data; + m->done = done; + +- id = m->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +@@ -2071,7 +2013,7 @@ mail_save_messages(CamelFolder *folder, + /* ** SAVE PART ******************************************************* */ + + struct _save_part_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelMimePart *part; + char *path; +@@ -2080,27 +2022,27 @@ struct _save_part_msg { + gboolean readonly; + }; + +-static char *save_part_desc(struct _mail_msg *mm, int done) ++static gchar * ++save_part_desc (struct _save_part_msg *m) + { + return g_strdup(_("Saving attachment")); + } + + static void +-save_part_save (struct _mail_msg *mm) ++save_part_exec (struct _save_part_msg *m) + { +- struct _save_part_msg *m = (struct _save_part_msg *)mm; + CamelDataWrapper *content; + CamelStream *stream; + + if(!m->readonly){ + if (!(stream = camel_stream_vfs_new_with_uri (m->path, O_WRONLY | O_CREAT | O_TRUNC, 0644))) { +- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, ++ camel_exception_setv (&m->base.ex, CAMEL_EXCEPTION_SYSTEM, + _("Cannot create output file: %s:\n %s"), + m->path, g_strerror (errno)); + return; + } + } else if (!(stream = camel_stream_vfs_new_with_uri (m->path, O_WRONLY | O_CREAT | O_TRUNC, 0444))) { +- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, ++ camel_exception_setv (&m->base.ex, CAMEL_EXCEPTION_SYSTEM, + _("Cannot create output file: %s:\n %s"), + m->path, g_strerror (errno)); + return; +@@ -2110,7 +2052,7 @@ save_part_save (struct _mail_msg *mm) + + if (camel_data_wrapper_decode_to_stream (content, stream) == -1 + || camel_stream_flush (stream) == -1) +- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, ++ camel_exception_setv (&m->base.ex, CAMEL_EXCEPTION_SYSTEM, + _("Could not write data: %s"), + g_strerror (errno)); + +@@ -2118,27 +2060,25 @@ save_part_save (struct _mail_msg *mm) + } + + static void +-save_part_saved (struct _mail_msg *mm) ++save_part_done (struct _save_part_msg *m) + { +- struct _save_part_msg *m = (struct _save_part_msg *)mm; +- + if (m->done) +- m->done (m->part, m->path, !camel_exception_is_set (&mm->ex), m->data); ++ m->done (m->part, m->path, !camel_exception_is_set (&m->base.ex), m->data); + } + + static void +-save_part_free (struct _mail_msg *mm) ++save_part_free (struct _save_part_msg *m) + { +- struct _save_part_msg *m = (struct _save_part_msg *)mm; + camel_object_unref (m->part); + g_free (m->path); + } + +-static struct _mail_msg_op save_part_op = { +- save_part_desc, +- save_part_save, +- save_part_saved, +- save_part_free, ++static MailMsgInfo save_part_info = { ++ sizeof (struct _save_part_msg), ++ (MailMsgDescFunc) save_part_desc, ++ (MailMsgExecFunc) save_part_exec, ++ (MailMsgDoneFunc) save_part_done, ++ (MailMsgFreeFunc) save_part_free + }; + + int +@@ -2147,7 +2087,7 @@ mail_save_part (CamelMimePart *part, con + { + struct _save_part_msg *m; + int id; +- m = mail_msg_new (&save_part_op, NULL, sizeof (*m)); ++ m = mail_msg_new (&save_part_info); + m->part = part; + camel_object_ref (part); + m->path = g_strdup (path); +@@ -2155,8 +2095,8 @@ mail_save_part (CamelMimePart *part, con + m->done = done; + m->readonly = readonly; + +- id = m->msg.seq; +- e_thread_put (mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +@@ -2165,7 +2105,7 @@ mail_save_part (CamelMimePart *part, con + /* ** PREPARE OFFLINE ***************************************************** */ + + struct _prep_offline_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelOperation *cancel; + char *uri; +@@ -2173,22 +2113,22 @@ struct _prep_offline_msg { + void *data; + }; + +-static void prep_offline_do(struct _mail_msg *mm) ++static void ++prep_offline_exec (struct _prep_offline_msg *m) + { +- struct _prep_offline_msg *m = (struct _prep_offline_msg *)mm; + CamelFolder *folder; + + if (m->cancel) + camel_operation_register(m->cancel); + +- folder = mail_tool_uri_to_folder(m->uri, 0, &mm->ex); ++ folder = mail_tool_uri_to_folder(m->uri, 0, &m->base.ex); + if (folder) { + if (CAMEL_IS_DISCO_FOLDER(folder)) { + camel_disco_folder_prepare_for_offline((CamelDiscoFolder *)folder, + "(match-all)", +- &mm->ex); ++ &m->base.ex); + } else if (CAMEL_IS_OFFLINE_FOLDER (folder)) { +- camel_offline_folder_downsync ((CamelOfflineFolder *) folder, "(match-all)", &mm->ex); ++ camel_offline_folder_downsync ((CamelOfflineFolder *) folder, "(match-all)", &m->base.ex); + } + /* prepare_for_offline should do this? */ + /* of course it should all be atomic, but ... */ +@@ -2200,28 +2140,27 @@ static void prep_offline_do(struct _mail + camel_operation_unregister(m->cancel); + } + +-static void prep_offline_done(struct _mail_msg *mm) ++static void ++prep_offline_done (struct _prep_offline_msg *m) + { +- struct _prep_offline_msg *m = (struct _prep_offline_msg *)mm; +- + if (m->done) + m->done(m->uri, m->data); + } + +-static void prep_offline_free(struct _mail_msg *mm) ++static void ++prep_offline_free (struct _prep_offline_msg *m) + { +- struct _prep_offline_msg *m = (struct _prep_offline_msg *)mm; +- + if (m->cancel) + camel_operation_unref(m->cancel); + g_free(m->uri); + } + +-static struct _mail_msg_op prep_offline_op = { +- NULL, /* DO NOT CHANGE THIS, IT MUST BE NULL FOR CANCELLATION TO WORK */ +- prep_offline_do, +- prep_offline_done, +- prep_offline_free, ++static MailMsgInfo prep_offline_info = { ++ sizeof (struct _prep_offline_msg), ++ (MailMsgDescFunc) NULL, /* DO NOT CHANGE THIS, IT MUST BE NULL FOR CANCELLATION TO WORK */ ++ (MailMsgExecFunc) prep_offline_exec, ++ (MailMsgDoneFunc) prep_offline_done, ++ (MailMsgFreeFunc) prep_offline_free + }; + + void +@@ -2232,7 +2171,7 @@ mail_prep_offline(const char *uri, + { + struct _prep_offline_msg *m; + +- m = mail_msg_new(&prep_offline_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&prep_offline_info); + m->cancel = cancel; + if (cancel) + camel_operation_ref(cancel); +@@ -2240,13 +2179,13 @@ mail_prep_offline(const char *uri, + m->data = data; + m->done = done; + +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ mail_msg_slow_ordered_push (m); + } + + /* ** GO OFFLINE ***************************************************** */ + + struct _set_offline_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelStore *store; + gboolean offline; +@@ -2254,9 +2193,9 @@ struct _set_offline_msg { + void *data; + }; + +-static char *set_offline_desc(struct _mail_msg *mm, int done) ++static gchar * ++set_offline_desc (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; + char *service_name = camel_service_get_name (CAMEL_SERVICE (m->store), TRUE); + char *msg; + +@@ -2266,61 +2205,59 @@ static char *set_offline_desc(struct _ma + return msg; + } + +-static void set_offline_do(struct _mail_msg *mm) ++static void ++set_offline_exec (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; +- + if (CAMEL_IS_DISCO_STORE (m->store)) { + if (!m->offline) { + camel_disco_store_set_status (CAMEL_DISCO_STORE (m->store), + CAMEL_DISCO_STORE_ONLINE, +- &mm->ex); ++ &m->base.ex); + return; + } else if (camel_disco_store_can_work_offline (CAMEL_DISCO_STORE (m->store))) { + camel_disco_store_set_status (CAMEL_DISCO_STORE (m->store), + CAMEL_DISCO_STORE_OFFLINE, +- &mm->ex); ++ &m->base.ex); + return; + } + } else if (CAMEL_IS_OFFLINE_STORE (m->store)) { + if (!m->offline) { + camel_offline_store_set_network_state (CAMEL_OFFLINE_STORE (m->store), + CAMEL_OFFLINE_STORE_NETWORK_AVAIL, +- &mm->ex); ++ &m->base.ex); + return; + } else { + camel_offline_store_set_network_state (CAMEL_OFFLINE_STORE (m->store), + CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL, +- &mm->ex); ++ &m->base.ex); + return; + } + } + + if (m->offline) + camel_service_disconnect (CAMEL_SERVICE (m->store), +- TRUE, &mm->ex); ++ TRUE, &m->base.ex); + } + +-static void set_offline_done(struct _mail_msg *mm) ++static void ++set_offline_done (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; +- + if (m->done) + m->done(m->store, m->data); + } + +-static void set_offline_free(struct _mail_msg *mm) ++static void ++set_offline_free (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; +- + camel_object_unref(m->store); + } + +-static struct _mail_msg_op set_offline_op = { +- set_offline_desc, +- set_offline_do, +- set_offline_done, +- set_offline_free, ++static MailMsgInfo set_offline_info = { ++ sizeof (struct _set_offline_msg), ++ (MailMsgDescFunc) set_offline_desc, ++ (MailMsgExecFunc) set_offline_exec, ++ (MailMsgDoneFunc) set_offline_done, ++ (MailMsgFreeFunc) set_offline_free + }; + + int +@@ -2337,15 +2274,15 @@ mail_store_set_offline (CamelStore *stor + if (offline) + camel_service_cancel_connect (CAMEL_SERVICE (store)); + +- m = mail_msg_new(&set_offline_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&set_offline_info); + m->store = store; + camel_object_ref(store); + m->offline = offline; + m->data = data; + m->done = done; + +- id = m->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +@@ -2363,7 +2300,7 @@ mail_execute_shell_command (CamelFilterD + + /* Async service-checking/authtype-lookup code. */ + struct _check_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *url; + CamelProviderType type; +@@ -2373,51 +2310,47 @@ struct _check_msg { + void *data; + }; + +-static char * +-check_service_describe(struct _mail_msg *mm, int complete) ++static gchar * ++check_service_desc (struct _check_msg *m) + { + return g_strdup(_("Checking Service")); + } + + static void +-check_service_check(struct _mail_msg *mm) ++check_service_exec (struct _check_msg *m) + { +- struct _check_msg *m = (struct _check_msg *)mm; + CamelService *service; + +- service = camel_session_get_service(session, m->url, m->type, &mm->ex); ++ service = camel_session_get_service(session, m->url, m->type, &m->base.ex); + if (!service) { +- camel_operation_unregister(mm->cancel); ++ camel_operation_unregister(m->base.cancel); + return; + } + +- m->authtypes = camel_service_query_auth_types(service, &mm->ex); ++ m->authtypes = camel_service_query_auth_types(service, &m->base.ex); + camel_object_unref(service); + } + + static void +-check_service_done(struct _mail_msg *mm) ++check_service_done (struct _check_msg *m) + { +- struct _check_msg *m = (struct _check_msg *)mm; +- + if (m->done) + m->done(m->url, m->type, m->authtypes, m->data); + } + + static void +-check_service_free(struct _mail_msg *mm) ++check_service_free (struct _check_msg *m) + { +- struct _check_msg *m = (struct _check_msg *)mm; +- + g_free(m->url); + g_list_free(m->authtypes); + } + +-static struct _mail_msg_op check_service_op = { +- check_service_describe, +- check_service_check, +- check_service_done, +- check_service_free, ++static MailMsgInfo check_service_info = { ++ sizeof (struct _check_msg), ++ (MailMsgDescFunc) check_service_desc, ++ (MailMsgExecFunc) check_service_exec, ++ (MailMsgDoneFunc) check_service_done, ++ (MailMsgFreeFunc) check_service_free + }; + + int +@@ -2426,14 +2359,14 @@ mail_check_service(const char *url, Came + struct _check_msg *m; + int id; + +- m = mail_msg_new (&check_service_op, NULL, sizeof(*m)); ++ m = mail_msg_new (&check_service_info); + m->url = g_strdup(url); + m->type = type; + m->done = done; + m->data = data; + +- id = m->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +diff -up evolution-2.10.3/mail/em-folder-utils.c.kill-ethread evolution-2.10.3/mail/em-folder-utils.c +--- evolution-2.10.3/mail/em-folder-utils.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-folder-utils.c 2007-08-29 22:51:25.000000000 -0400 +@@ -84,7 +84,7 @@ emfu_is_special_local_folder (const char + } + + struct _EMCopyFolders { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + CamelStore *fromstore; +@@ -96,18 +96,15 @@ struct _EMCopyFolders { + int delete; + }; + +-static char * +-emft_copy_folders__desc (struct _mail_msg *mm, int complete) ++static gchar * ++emft_copy_folders__desc (struct _EMCopyFolders *m, gint complete) + { +- struct _EMCopyFolders *m = (struct _EMCopyFolders *) mm; +- + return g_strdup_printf (_("Copying `%s' to `%s'"), m->frombase, m->tobase); + } + + static void +-emft_copy_folders__copy (struct _mail_msg *mm) ++emft_copy_folders__exec (struct _EMCopyFolders *m) + { +- struct _EMCopyFolders *m = (struct _EMCopyFolders *) mm; + guint32 flags = CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_RECURSIVE | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; + GList *pending = NULL, *deleting = NULL, *l; + GString *fromname, *toname; +@@ -115,7 +112,7 @@ emft_copy_folders__copy (struct _mail_ms + const char *tmp; + int fromlen; + +- if (!(fi = camel_store_get_folder_info (m->fromstore, m->frombase, flags, &mm->ex))) ++ if (!(fi = camel_store_get_folder_info (m->fromstore, m->frombase, flags, &m->base.ex))) + return; + + pending = g_list_append (pending, fi); +@@ -155,8 +152,8 @@ emft_copy_folders__copy (struct _mail_ms + if ((info->flags & CAMEL_FOLDER_NOSELECT) == 0) { + d(printf ("this folder is selectable\n")); + if (m->tostore == m->fromstore && m->delete) { +- camel_store_rename_folder (m->fromstore, info->full_name, toname->str, &mm->ex); +- if (camel_exception_is_set (&mm->ex)) ++ camel_store_rename_folder (m->fromstore, info->full_name, toname->str, &m->base.ex); ++ if (camel_exception_is_set (&m->base.ex)) + goto exception; + + /* this folder no longer exists, unsubscribe it */ +@@ -165,16 +162,16 @@ emft_copy_folders__copy (struct _mail_ms + + deleted = 1; + } else { +- if (!(fromfolder = camel_store_get_folder (m->fromstore, info->full_name, 0, &mm->ex))) ++ if (!(fromfolder = camel_store_get_folder (m->fromstore, info->full_name, 0, &m->base.ex))) + goto exception; + +- if (!(tofolder = camel_store_get_folder (m->tostore, toname->str, CAMEL_STORE_FOLDER_CREATE, &mm->ex))) { ++ if (!(tofolder = camel_store_get_folder (m->tostore, toname->str, CAMEL_STORE_FOLDER_CREATE, &m->base.ex))) { + camel_object_unref (fromfolder); + goto exception; + } + + uids = camel_folder_get_uids (fromfolder); +- camel_folder_transfer_messages_to (fromfolder, uids, tofolder, NULL, m->delete, &mm->ex); ++ camel_folder_transfer_messages_to (fromfolder, uids, tofolder, NULL, m->delete, &m->base.ex); + camel_folder_free_uids (fromfolder, uids); + + if (m->delete) +@@ -185,7 +182,7 @@ emft_copy_folders__copy (struct _mail_ms + } + } + +- if (camel_exception_is_set (&mm->ex)) ++ if (camel_exception_is_set (&m->base.ex)) + goto exception; + else if (m->delete && !deleted) + deleting = g_list_prepend (deleting, info); +@@ -226,10 +223,8 @@ emft_copy_folders__copy (struct _mail_ms + } + + static void +-emft_copy_folders__free (struct _mail_msg *mm) ++emft_copy_folders__free (struct _EMCopyFolders *m) + { +- struct _EMCopyFolders *m = (struct _EMCopyFolders *) mm; +- + camel_object_unref (m->fromstore); + camel_object_unref (m->tostore); + +@@ -237,11 +232,12 @@ emft_copy_folders__free (struct _mail_ms + g_free (m->tobase); + } + +-static struct _mail_msg_op copy_folders_op = { +- emft_copy_folders__desc, +- emft_copy_folders__copy, +- NULL, +- emft_copy_folders__free, ++static MailMsgInfo copy_folders_info = { ++ sizeof (struct _EMCopyFolders), ++ (MailMsgDescFunc) emft_copy_folders__desc, ++ (MailMsgExecFunc) emft_copy_folders__exec, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) emft_copy_folders__free + }; + + int +@@ -250,7 +246,7 @@ em_folder_utils_copy_folders(CamelStore + struct _EMCopyFolders *m; + int seq; + +- m = mail_msg_new (©_folders_op, NULL, sizeof (struct _EMCopyFolders)); ++ m = mail_msg_new (©_folders_info); + camel_object_ref (fromstore); + m->fromstore = fromstore; + camel_object_ref (tostore); +@@ -258,9 +254,9 @@ em_folder_utils_copy_folders(CamelStore + m->frombase = g_strdup (frombase); + m->tobase = g_strdup (tobase); + m->delete = delete; +- seq = m->msg.seq; ++ seq = m->base.seq; + +- e_thread_put (mail_thread_new, (EMsg *) m); ++ mail_msg_unordered_push (m); + + return seq; + } +@@ -557,7 +553,7 @@ em_folder_utils_rename_folder (CamelFold + } + + struct _EMCreateFolder { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + CamelStore *store; +@@ -573,41 +569,33 @@ struct _EMCreateFolder { + void *user_data; + }; + +-static char * +-emfu_create_folder__desc (struct _mail_msg *mm, int done) ++static gchar * ++emfu_create_folder__desc (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + return g_strdup_printf (_("Creating folder `%s'"), m->full_name); + } + + static void +-emfu_create_folder__create (struct _mail_msg *mm) ++emfu_create_folder__exec (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + d(printf ("creating folder parent='%s' name='%s' full_name='%s'\n", m->parent, m->name, m->full_name)); + +- if ((m->fi = camel_store_create_folder (m->store, m->parent, m->name, &mm->ex))) { ++ if ((m->fi = camel_store_create_folder (m->store, m->parent, m->name, &m->base.ex))) { + if (camel_store_supports_subscriptions (m->store)) +- camel_store_subscribe_folder (m->store, m->full_name, &mm->ex); ++ camel_store_subscribe_folder (m->store, m->full_name, &m->base.ex); + } + } + + static void +-emfu_create_folder__created (struct _mail_msg *mm) ++emfu_create_folder__done (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + if (m->done) + m->done (m->fi, m->user_data); + } + + static void +-emfu_create_folder__free (struct _mail_msg *mm) ++emfu_create_folder__free (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + camel_store_free_folder_info (m->store, m->fi); + camel_object_unref (m->store); + g_free (m->full_name); +@@ -615,11 +603,12 @@ emfu_create_folder__free (struct _mail_m + g_free (m->name); + } + +-static struct _mail_msg_op create_folder_op = { +- emfu_create_folder__desc, +- emfu_create_folder__create, +- emfu_create_folder__created, +- emfu_create_folder__free, ++static MailMsgInfo create_folder_info = { ++ sizeof (struct _EMCreateFolder), ++ (MailMsgDescFunc) emfu_create_folder__desc, ++ (MailMsgExecFunc) emfu_create_folder__exec, ++ (MailMsgDoneFunc) emfu_create_folder__done, ++ (MailMsgFreeFunc) emfu_create_folder__free + }; + + +@@ -640,7 +629,7 @@ emfu_create_folder_real (CamelStore *sto + parent = namebuf; + } + +- m = mail_msg_new (&create_folder_op, NULL, sizeof (struct _EMCreateFolder)); ++ m = mail_msg_new (&create_folder_info); + camel_object_ref (store); + m->store = store; + m->full_name = g_strdup (full_name); +@@ -651,8 +640,8 @@ emfu_create_folder_real (CamelStore *sto + + g_free (namebuf); + +- id = m->msg.seq; +- e_thread_put (mail_thread_new, (EMsg *) m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +diff -up evolution-2.10.3/mail/importers/elm-importer.c.kill-ethread evolution-2.10.3/mail/importers/elm-importer.c +--- evolution-2.10.3/mail/importers/elm-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 ++++ evolution-2.10.3/mail/importers/elm-importer.c 2007-08-29 22:51:25.000000000 -0400 +@@ -51,7 +51,7 @@ + #define d(x) x + + struct _elm_import_msg { +- struct _mail_msg msg; ++ MailMsg base; + + EImport *import; + EImportTargetHome *target; +@@ -186,8 +186,8 @@ elm_supported(EImport *ei, EImportTarget + return mailexists; + } + +-static char * +-elm_import_describe (struct _mail_msg *mm, int complete) ++static gchar * ++elm_import_desc (struct _elm_import_msg *m) + { + return g_strdup (_("Importing Elm data")); + } +@@ -198,9 +198,8 @@ static MailImporterSpecial elm_special_f + }; + + static void +-elm_import_import(struct _mail_msg *mm) ++elm_import_exec (struct _elm_import_msg *m) + { +- struct _elm_import_msg *m = (struct _elm_import_msg *) mm; + const char *maildir; + char *elmdir; + +@@ -218,13 +217,11 @@ elm_import_import(struct _mail_msg *mm) + } + + static void +-elm_import_imported(struct _mail_msg *mm) ++elm_import_done(struct _elm_import_msg *m) + { +- struct _elm_import_msg *m = (struct _elm_import_msg *)mm; +- + printf("importing complete\n"); + +- if (!camel_exception_is_set(&mm->ex)) { ++ if (!camel_exception_is_set(&m->base.ex)) { + GConfClient *gconf; + + gconf = gconf_client_get_default(); +@@ -236,10 +233,8 @@ elm_import_imported(struct _mail_msg *mm + } + + static void +-elm_import_free(struct _mail_msg *mm) ++elm_import_free(struct _elm_import_msg *m) + { +- struct _elm_import_msg *m = (struct _elm_import_msg *)mm; +- + camel_operation_unref(m->status); + + g_free(m->status_what); +@@ -288,11 +283,12 @@ elm_status_timeout(void *data) + return TRUE; + } + +-static struct _mail_msg_op elm_import_op = { +- elm_import_describe, +- elm_import_import, +- elm_import_imported, +- elm_import_free, ++static MailMsgInfo elm_import_info = { ++ sizeof (struct _elm_import_msg), ++ (MailMsgDescFunc) elm_import_desc, ++ (MailMsgExecFunc) elm_import_exec, ++ (MailMsgDoneFunc) elm_import_done, ++ (MailMsgFreeFunc) elm_import_free + }; + + static int +@@ -301,7 +297,7 @@ mail_importer_elm_import(EImport *ei, EI + struct _elm_import_msg *m; + int id; + +- m = mail_msg_new(&elm_import_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&elm_import_info); + g_datalist_set_data(&target->data, "elm-msg", m); + m->import = ei; + g_object_ref(m->import); +@@ -310,9 +306,9 @@ mail_importer_elm_import(EImport *ei, EI + m->status_lock = g_mutex_new(); + m->status = camel_operation_new(elm_status, m); + +- id = m->msg.seq; ++ id = m->base.seq; + +- e_thread_put(mail_thread_queued, (EMsg *)m); ++ mail_msg_fast_ordered_push (m); + + return id; + } +diff -up evolution-2.10.3/mail/importers/mail-importer.c.kill-ethread evolution-2.10.3/mail/importers/mail-importer.c +--- evolution-2.10.3/mail/importers/mail-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 ++++ evolution-2.10.3/mail/importers/mail-importer.c 2007-08-29 22:51:25.000000000 -0400 +@@ -132,7 +132,7 @@ struct _BonoboObject *mail_importer_fact + } + + struct _import_mbox_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *path; + char *uri; +@@ -142,8 +142,8 @@ struct _import_mbox_msg { + void *done_data; + }; + +-static char * +-import_mbox_describe(struct _mail_msg *mm, int complete) ++static gchar * ++import_mbox_desc (struct _import_mbox_msg *m) + { + return g_strdup (_("Importing mailbox")); + } +@@ -190,9 +190,8 @@ decode_mozilla_status(const char *tmp) + } + + static void +-import_mbox_import(struct _mail_msg *mm) ++import_mbox_exec (struct _import_mbox_msg *m) + { +- struct _import_mbox_msg *m = (struct _import_mbox_msg *) mm; + CamelFolder *folder; + CamelMimeParser *mp = NULL; + struct stat st; +@@ -207,7 +206,7 @@ import_mbox_import(struct _mail_msg *mm) + if (m->uri == NULL || m->uri[0] == 0) + folder = mail_component_get_folder(NULL, MAIL_COMPONENT_FOLDER_INBOX); + else +- folder = mail_tool_uri_to_folder(m->uri, CAMEL_STORE_FOLDER_CREATE, &mm->ex); ++ folder = mail_tool_uri_to_folder(m->uri, CAMEL_STORE_FOLDER_CREATE, &m->base.ex); + + if (folder == NULL) + return; +@@ -262,11 +261,11 @@ import_mbox_import(struct _mail_msg *mm) + flags |= decode_status(tmp); + + camel_message_info_set_flags(info, flags, ~0); +- camel_folder_append_message(folder, msg, info, NULL, &mm->ex); ++ camel_folder_append_message(folder, msg, info, NULL, &m->base.ex); + camel_message_info_free(info); + camel_object_unref(msg); + +- if (camel_exception_is_set(&mm->ex)) ++ if (camel_exception_is_set(&m->base.ex)) + break; + + camel_mime_parser_step(mp, 0, 0); +@@ -286,30 +285,27 @@ fail1: + } + + static void +-import_mbox_done(struct _mail_msg *mm) ++import_mbox_done (struct _import_mbox_msg *m) + { +- struct _import_mbox_msg *m = (struct _import_mbox_msg *)mm; +- + if (m->done) +- m->done(m->done_data, &mm->ex); ++ m->done(m->done_data, &m->base.ex); + } + + static void +-import_mbox_free (struct _mail_msg *mm) ++import_mbox_free (struct _import_mbox_msg *m) + { +- struct _import_mbox_msg *m = (struct _import_mbox_msg *)mm; +- + if (m->cancel) + camel_operation_unref(m->cancel); + g_free(m->uri); + g_free(m->path); + } + +-static struct _mail_msg_op import_mbox_op = { +- import_mbox_describe, +- import_mbox_import, +- import_mbox_done, +- import_mbox_free, ++static MailMsgInfo import_mbox_info = { ++ sizeof (struct _import_mbox_msg), ++ (MailMsgDescFunc) import_mbox_desc, ++ (MailMsgExecFunc) import_mbox_exec, ++ (MailMsgDoneFunc) import_mbox_done, ++ (MailMsgFreeFunc) import_mbox_free + }; + + int +@@ -318,7 +314,7 @@ mail_importer_import_mbox(const char *pa + struct _import_mbox_msg *m; + int id; + +- m = mail_msg_new(&import_mbox_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&import_mbox_info); + m->path = g_strdup(path); + m->uri = g_strdup(folderuri); + m->done = done; +@@ -328,8 +324,8 @@ mail_importer_import_mbox(const char *pa + camel_operation_ref(cancel); + } + +- id = m->msg.seq; +- e_thread_put(mail_thread_queued, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_fast_ordered_push (m); + + return id; + } +@@ -339,7 +335,7 @@ mail_importer_import_mbox_sync(const cha + { + struct _import_mbox_msg *m; + +- m = mail_msg_new(&import_mbox_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&import_mbox_info); + m->path = g_strdup(path); + m->uri = g_strdup(folderuri); + if (cancel) { +@@ -347,9 +343,9 @@ mail_importer_import_mbox_sync(const cha + camel_operation_ref(cancel); + } + +- import_mbox_import(&m->msg); +- import_mbox_done(&m->msg); +- mail_msg_free(&m->msg); ++ import_mbox_exec(&m->base); ++ import_mbox_done(&m->base); ++ mail_msg_unref(m); + } + + struct _import_folders_data { +diff -up evolution-2.10.3/mail/importers/pine-importer.c.kill-ethread evolution-2.10.3/mail/importers/pine-importer.c +--- evolution-2.10.3/mail/importers/pine-importer.c.kill-ethread 2007-04-09 09:09:26.000000000 -0400 ++++ evolution-2.10.3/mail/importers/pine-importer.c 2007-08-29 22:51:25.000000000 -0400 +@@ -56,7 +56,7 @@ + #define d(x) x + + struct _pine_import_msg { +- struct _mail_msg msg; ++ MailMsg base; + + EImport *import; + EImportTarget *target; +@@ -223,8 +223,8 @@ import_contacts(void) + g_object_unref(book); + } + +-static char * +-pine_import_describe (struct _mail_msg *mm, int complete) ++static gchar * ++pine_import_desc (struct _pine_import_msg *m) + { + return g_strdup (_("Importing Pine data")); + } +@@ -236,10 +236,8 @@ static MailImporterSpecial pine_special_ + }; + + static void +-pine_import_import(struct _mail_msg *mm) ++pine_import_exec(struct _pine_import_msg *m) + { +- struct _pine_import_msg *m = (struct _pine_import_msg *) mm; +- + if (GPOINTER_TO_INT(g_datalist_get_data(&m->target->data, "pine-do-addr"))) + import_contacts(); + +@@ -253,13 +251,11 @@ pine_import_import(struct _mail_msg *mm) + } + + static void +-pine_import_imported(struct _mail_msg *mm) ++pine_import_done(struct _pine_import_msg *m) + { +- struct _pine_import_msg *m = (struct _pine_import_msg *)mm; +- + printf("importing complete\n"); + +- if (!camel_exception_is_set(&mm->ex)) { ++ if (!camel_exception_is_set(&m->base.ex)) { + GConfClient *gconf; + + gconf = gconf_client_get_default(); +@@ -274,10 +270,8 @@ pine_import_imported(struct _mail_msg *m + } + + static void +-pine_import_free(struct _mail_msg *mm) ++pine_import_free(struct _pine_import_msg *m) + { +- struct _pine_import_msg *m = (struct _pine_import_msg *)mm; +- + camel_operation_unref(m->status); + + g_free(m->status_what); +@@ -326,11 +320,12 @@ pine_status_timeout(void *data) + return TRUE; + } + +-static struct _mail_msg_op pine_import_op = { +- pine_import_describe, +- pine_import_import, +- pine_import_imported, +- pine_import_free, ++static MailMsgInfo pine_import_info = { ++ sizeof (struct _pine_import_msg), ++ (MailMsgDescFunc) pine_import_desc, ++ (MailMsgExecFunc) pine_import_exec, ++ (MailMsgDoneFunc) pine_import_done, ++ (MailMsgFreeFunc) pine_import_free + }; + + static int +@@ -339,7 +334,7 @@ mail_importer_pine_import(EImport *ei, E + struct _pine_import_msg *m; + int id; + +- m = mail_msg_new(&pine_import_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&pine_import_info); + g_datalist_set_data(&target->data, "pine-msg", m); + m->import = ei; + g_object_ref(m->import); +@@ -348,9 +343,9 @@ mail_importer_pine_import(EImport *ei, E + m->status_lock = g_mutex_new(); + m->status = camel_operation_new(pine_status, m); + +- id = m->msg.seq; ++ id = m->base.seq; + +- e_thread_put(mail_thread_queued, (EMsg *)m); ++ mail_msg_fast_ordered_push (m); + + return id; + } +diff -up evolution-2.10.3/mail/em-utils.c.kill-ethread evolution-2.10.3/mail/em-utils.c +--- evolution-2.10.3/mail/em-utils.c.kill-ethread 2007-08-29 22:51:25.000000000 -0400 ++++ evolution-2.10.3/mail/em-utils.c 2007-08-29 22:51:25.000000000 -0400 +@@ -1915,7 +1915,7 @@ em_utils_in_addressbook(CamelInternetAdd + ESource *source = s->data; + GList *contacts; + EBook *book; +- void *hook; ++ GHook *hook; + + d(printf(" checking '%s'\n", e_source_get_uri(source))); + +diff -up evolution-2.10.3/mail/mail-vfolder.c.kill-ethread evolution-2.10.3/mail/mail-vfolder.c +--- evolution-2.10.3/mail/mail-vfolder.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-vfolder.c 2007-08-29 22:51:25.000000000 -0400 +@@ -21,7 +21,7 @@ + */ + + #include +- ++#include + #include + + #include +@@ -75,7 +75,7 @@ static void rule_changed(FilterRule *rul + /* ********************************************************************** */ + + struct _setup_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + char *query; +@@ -83,18 +83,15 @@ struct _setup_msg { + GList *sources_folder; + }; + +-static char * +-vfolder_setup_desc(struct _mail_msg *mm, int done) ++static gchar * ++vfolder_setup_desc (struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; +- + return g_strdup_printf(_("Setting up Search Folder: %s"), m->folder->full_name); + } + + static void +-vfolder_setup_do(struct _mail_msg *mm) ++vfolder_setup_exec (struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; + GList *l, *list = NULL; + CamelFolder *folder; + +@@ -105,12 +102,12 @@ vfolder_setup_do(struct _mail_msg *mm) + l = m->sources_uri; + while (l && !shutdown) { + d(printf(" Adding uri: %s\n", (char *)l->data)); +- folder = mail_tool_uri_to_folder (l->data, 0, &mm->ex); ++ folder = mail_tool_uri_to_folder (l->data, 0, &m->base.ex); + if (folder) { + list = g_list_append(list, folder); + } else { + g_warning("Could not open vfolder source: %s", (char *)l->data); +- camel_exception_clear(&mm->ex); ++ camel_exception_clear(&m->base.ex); + } + l = l->next; + } +@@ -135,17 +132,13 @@ vfolder_setup_do(struct _mail_msg *mm) + } + + static void +-vfolder_setup_done(struct _mail_msg *mm) ++vfolder_setup_done (struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; +- +- m = m; + } + + static void +-vfolder_setup_free (struct _mail_msg *mm) ++vfolder_setup_free (struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; + GList *l; + + camel_object_unref(m->folder); +@@ -166,11 +159,12 @@ vfolder_setup_free (struct _mail_msg *mm + g_list_free(m->sources_folder); + } + +-static struct _mail_msg_op vfolder_setup_op = { +- vfolder_setup_desc, +- vfolder_setup_do, +- vfolder_setup_done, +- vfolder_setup_free, ++static MailMsgInfo vfolder_setup_info = { ++ sizeof (struct _setup_msg), ++ (MailMsgDescFunc) vfolder_setup_desc, ++ (MailMsgExecFunc) vfolder_setup_exec, ++ (MailMsgDoneFunc) vfolder_setup_done, ++ (MailMsgFreeFunc) vfolder_setup_free + }; + + /* sources_uri should be camel uri's */ +@@ -180,15 +174,15 @@ vfolder_setup(CamelFolder *folder, const + struct _setup_msg *m; + int id; + +- m = mail_msg_new(&vfolder_setup_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&vfolder_setup_info); + m->folder = folder; + camel_object_ref(folder); + m->query = g_strdup(query); + m->sources_uri = sources_uri; + m->sources_folder = sources_folder; + +- id = m->msg.seq; +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_slow_ordered_push (m); + + return id; + } +@@ -196,17 +190,16 @@ vfolder_setup(CamelFolder *folder, const + /* ********************************************************************** */ + + struct _adduri_msg { +- struct _mail_msg msg; ++ MailMsg base; + + char *uri; + GList *folders; + int remove; + }; + +-static char * +-vfolder_adduri_desc(struct _mail_msg *mm, int done) ++static gchar * ++vfolder_adduri_desc (struct _adduri_msg *m) + { +- struct _adduri_msg *m = (struct _adduri_msg *)mm; + char *euri, *desc = NULL; + + /* Yuck yuck. Lookup the account name and use that to describe the path */ +@@ -250,9 +243,8 @@ vfolder_adduri_desc(struct _mail_msg *mm + } + + static void +-vfolder_adduri_do(struct _mail_msg *mm) ++vfolder_adduri_exec (struct _adduri_msg *m) + { +- struct _adduri_msg *m = (struct _adduri_msg *)mm; + GList *l; + CamelFolder *folder = NULL; + +@@ -269,7 +261,7 @@ vfolder_adduri_do(struct _mail_msg *mm) + } + + if (folder == NULL) +- folder = mail_tool_uri_to_folder (m->uri, 0, &mm->ex); ++ folder = mail_tool_uri_to_folder (m->uri, 0, &m->base.ex); + + if (folder != NULL) { + l = m->folders; +@@ -285,28 +277,24 @@ vfolder_adduri_do(struct _mail_msg *mm) + } + + static void +-vfolder_adduri_done(struct _mail_msg *mm) ++vfolder_adduri_done(struct _adduri_msg *m) + { +- struct _adduri_msg *m = (struct _adduri_msg *)mm; +- +- m = m; + } + + static void +-vfolder_adduri_free (struct _mail_msg *mm) ++vfolder_adduri_free (struct _adduri_msg *m) + { +- struct _adduri_msg *m = (struct _adduri_msg *)mm; +- + g_list_foreach(m->folders, (GFunc)camel_object_unref, NULL); + g_list_free(m->folders); + g_free(m->uri); + } + +-static struct _mail_msg_op vfolder_adduri_op = { +- vfolder_adduri_desc, +- vfolder_adduri_do, +- vfolder_adduri_done, +- vfolder_adduri_free, ++static MailMsgInfo vfolder_adduri_info = { ++ sizeof (struct _adduri_msg), ++ (MailMsgDescFunc) vfolder_adduri_desc, ++ (MailMsgExecFunc) vfolder_adduri_exec, ++ (MailMsgDoneFunc) vfolder_adduri_done, ++ (MailMsgFreeFunc) vfolder_adduri_free + }; + + +@@ -317,13 +305,13 @@ vfolder_adduri(const char *uri, GList *f + struct _adduri_msg *m; + int id; + +- m = mail_msg_new(&vfolder_adduri_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&vfolder_adduri_info); + m->folders = folders; + m->uri = g_strdup(uri); + m->remove = remove; + +- id = m->msg.seq; +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_slow_ordered_push (m); + + return id; + } +@@ -447,7 +435,7 @@ mail_vfolder_add_uri(CamelStore *store, + return; + } + +- g_assert(pthread_equal(pthread_self(), mail_gui_thread)); ++ g_assert(mail_in_main_thread()); + + is_ignore = uri_is_ignore(store, curi); + +@@ -540,7 +528,7 @@ mail_vfolder_delete_uri(CamelStore *stor + + d(printf ("Deleting uri to check: %s\n", uri)); + +- g_assert (pthread_equal(pthread_self(), mail_gui_thread)); ++ g_assert (mail_in_main_thread()); + + changed = g_string_new (""); + +@@ -615,7 +603,7 @@ mail_vfolder_rename_uri(CamelStore *stor + if (context == NULL || uri_is_spethal(store, cfrom) || uri_is_spethal(store, cto)) + return; + +- g_assert(pthread_equal(pthread_self(), mail_gui_thread)); ++ g_assert(mail_in_main_thread()); + + from = em_uri_from_camel(cfrom); + to = em_uri_from_camel(cto); +diff -up evolution-2.10.3/mail/em-format-html.c.kill-ethread evolution-2.10.3/mail/em-format-html.c +--- evolution-2.10.3/mail/em-format-html.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-format-html.c 2007-08-29 22:51:25.000000000 -0400 +@@ -166,7 +166,7 @@ efh_gtkhtml_destroy(GtkHTML *html, EMFor + if (efh->priv->format_timeout_id != 0) { + g_source_remove(efh->priv->format_timeout_id); + efh->priv->format_timeout_id = 0; +- mail_msg_free(efh->priv->format_timeout_msg); ++ mail_msg_unref(efh->priv->format_timeout_msg); + efh->priv->format_timeout_msg = NULL; + } + +@@ -1180,7 +1180,7 @@ efh_builtin_init(EMFormatHTMLClass *efhc + + /* Sigh, this is so we have a cancellable, async rendering thread */ + struct _format_msg { +- struct _mail_msg msg; ++ MailMsg base; + + EMFormatHTML *format; + EMFormat *format_source; +@@ -1190,14 +1190,15 @@ struct _format_msg { + CamelMimeMessage *message; + }; + +-static char *efh_format_desc(struct _mail_msg *mm, int done) ++static gchar * ++efh_format_desc (struct _format_msg *m) + { + return g_strdup(_("Formatting message")); + } + +-static void efh_format_do(struct _mail_msg *mm) ++static void ++efh_format_exec (struct _format_msg *m) + { +- struct _format_msg *m = (struct _format_msg *)mm; + struct _EMFormatHTMLJob *job; + struct _EMFormatPURITree *puri_level; + int cancelled = FALSE; +@@ -1282,10 +1283,9 @@ static void efh_format_do(struct _mail_m + ((EMFormat *)m->format)->pending_uri_level = puri_level; + } + +-static void efh_format_done(struct _mail_msg *mm) ++static void ++efh_format_done (struct _format_msg *m) + { +- struct _format_msg *m = (struct _format_msg *)mm; +- + d(printf("formatting finished\n")); + + m->format->load_http_now = FALSE; +@@ -1293,10 +1293,9 @@ static void efh_format_done(struct _mail + g_signal_emit_by_name(m->format, "complete"); + } + +-static void efh_format_free(struct _mail_msg *mm) ++static void ++efh_format_free (struct _format_msg *m) + { +- struct _format_msg *m = (struct _format_msg *)mm; +- + d(printf("formatter freed\n")); + g_object_unref(m->format); + if (m->estream) { +@@ -1312,11 +1311,12 @@ static void efh_format_free(struct _mail + g_object_unref(m->format_source); + } + +-static struct _mail_msg_op efh_format_op = { +- efh_format_desc, +- efh_format_do, +- efh_format_done, +- efh_format_free, ++static MailMsgInfo efh_format_info = { ++ sizeof (struct _format_msg), ++ (MailMsgDescFunc) efh_format_desc, ++ (MailMsgExecFunc) efh_format_exec, ++ (MailMsgDoneFunc) efh_format_done, ++ (MailMsgFreeFunc) efh_format_free + }; + + static gboolean +@@ -1327,7 +1327,7 @@ efh_format_timeout(struct _format_msg *m + struct _EMFormatHTMLPrivate *p = efh->priv; + + if (m->format->html == NULL) { +- mail_msg_free(m); ++ mail_msg_unref(m); + return FALSE; + } + +@@ -1355,7 +1355,7 @@ efh_format_timeout(struct _format_msg *m + if (m->message == NULL) { + hstream = gtk_html_begin(efh->html); + gtk_html_stream_close(hstream, GTK_HTML_STREAM_OK); +- mail_msg_free(m); ++ mail_msg_unref(m); + p->last_part = NULL; + } else { + hstream = NULL; +@@ -1374,8 +1374,8 @@ efh_format_timeout(struct _format_msg *m + p->last_part = m->message; + } + +- efh->priv->format_id = m->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)m); ++ efh->priv->format_id = m->base.seq; ++ mail_msg_unordered_push (m); + } + + efh->priv->format_timeout_id = 0; +@@ -1399,11 +1399,11 @@ static void efh_format_clone(EMFormat *e + d(printf(" timeout for last still active, removing ...\n")); + g_source_remove(efh->priv->format_timeout_id); + efh->priv->format_timeout_id = 0; +- mail_msg_free(efh->priv->format_timeout_msg); ++ mail_msg_unref(efh->priv->format_timeout_msg); + efh->priv->format_timeout_msg = NULL; + } + +- m = mail_msg_new(&efh_format_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&efh_format_info); + m->format = (EMFormatHTML *)emf; + g_object_ref(emf); + m->format_source = emfsource; +diff -up evolution-2.10.3/mail/em-folder-properties.c.kill-ethread evolution-2.10.3/mail/em-folder-properties.c +--- evolution-2.10.3/mail/em-folder-properties.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-folder-properties.c 2007-08-29 22:51:25.000000000 -0400 +@@ -386,7 +386,7 @@ em_folder_properties_show(GtkWindow *par + } + + if (folder == NULL) +- mail_get_folder(uri, 0, emfp_dialog_got_folder, NULL, mail_thread_new); ++ mail_get_folder(uri, 0, emfp_dialog_got_folder, NULL, mail_msg_unordered_push); + else + emfp_dialog_got_folder((char *)uri, folder, NULL); + } +diff -up evolution-2.10.3/mail/em-folder-tree.c.kill-ethread evolution-2.10.3/mail/em-folder-tree.c +--- evolution-2.10.3/mail/em-folder-tree.c.kill-ethread 2007-05-28 09:06:42.000000000 -0400 ++++ evolution-2.10.3/mail/em-folder-tree.c 2007-08-29 22:51:25.000000000 -0400 +@@ -834,7 +834,7 @@ fail: + /* TODO: Merge the drop handling code/menu's into one spot using a popup target for details */ + /* Drop handling */ + struct _DragDataReceivedAsync { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + GdkDragContext *context; +@@ -859,7 +859,7 @@ emft_drop_folder(struct _DragDataReceive + + d(printf(" * Drop folder '%s' onto '%s'\n", m->selection->data, m->full_name)); + +- if (!(src = mail_tool_uri_to_folder(m->selection->data, 0, &m->msg.ex))) ++ if (!(src = mail_tool_uri_to_folder(m->selection->data, 0, &m->base.ex))) + return; + + em_folder_utils_copy_folders(src->parent_store, src->full_name, m->store, m->full_name?m->full_name:"", m->move); +@@ -867,7 +867,7 @@ emft_drop_folder(struct _DragDataReceive + } + + static char * +-emft_drop_async_desc (struct _mail_msg *mm, int done) ++emft_drop_async__desc (struct _mail_msg *mm, int done) + { + struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; + CamelURL *url; +@@ -893,9 +893,8 @@ emft_drop_async_desc (struct _mail_msg * + } + + static void +-emft_drop_async_drop (struct _mail_msg *mm) ++emft_drop_async__exec (struct _DragDataReceivedAsync *m) + { +- struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; + CamelFolder *folder; + + /* for types other than folder, we can't drop to the root path */ +@@ -903,14 +902,14 @@ emft_drop_async_drop (struct _mail_msg * + /* copy or move (aka rename) a folder */ + emft_drop_folder(m); + } else if (m->full_name == NULL) { +- camel_exception_set (&mm->ex, CAMEL_EXCEPTION_SYSTEM, ++ camel_exception_set (&m->base.ex, CAMEL_EXCEPTION_SYSTEM, + _("Cannot drop message(s) into toplevel store")); +- } else if ((folder = camel_store_get_folder (m->store, m->full_name, 0, &mm->ex))) { ++ } else if ((folder = camel_store_get_folder (m->store, m->full_name, 0, &m->base.ex))) { + switch (m->info) { + case DND_DROP_TYPE_UID_LIST: + /* import a list of uids from another evo folder */ +- em_utils_selection_get_uidlist(m->selection, folder, m->move, &mm->ex); +- m->moved = m->move && !camel_exception_is_set(&mm->ex); ++ em_utils_selection_get_uidlist(m->selection, folder, m->move, &m->base.ex); ++ m->moved = m->move && !camel_exception_is_set(&m->base.ex); + break; + case DND_DROP_TYPE_MESSAGE_RFC822: + /* import a message/rfc822 stream */ +@@ -928,9 +927,8 @@ emft_drop_async_drop (struct _mail_msg * + } + + static void +-emft_drop_async_done (struct _mail_msg *mm) ++emft_drop_async__done (struct _DragDataReceivedAsync *m) + { +- struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; + gboolean success, delete; + + /* ?? */ +@@ -938,7 +936,7 @@ emft_drop_async_done (struct _mail_msg * + success = FALSE; + delete = FALSE; + } else { +- success = !camel_exception_is_set (&mm->ex); ++ success = !camel_exception_is_set (&m->base.ex); + delete = success && m->move && !m->moved; + } + +@@ -946,10 +944,8 @@ emft_drop_async_done (struct _mail_msg * + } + + static void +-emft_drop_async_free (struct _mail_msg *mm) ++emft_drop_async__free (struct _DragDataReceivedAsync *m) + { +- struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; +- + g_object_unref(m->context); + camel_object_unref(m->store); + g_free(m->full_name); +@@ -958,18 +954,19 @@ emft_drop_async_free (struct _mail_msg * + g_free(m->selection); + } + +-static struct _mail_msg_op emft_drop_async_op = { +- emft_drop_async_desc, +- emft_drop_async_drop, +- emft_drop_async_done, +- emft_drop_async_free, ++static MailMsgInfo emft_drop_async_info = { ++ sizeof (struct _DragDataReceivedAsync), ++ (MailMsgDescFunc) emft_drop_async__desc, ++ (MailMsgExecFunc) emft_drop_async__exec, ++ (MailMsgDoneFunc) emft_drop_async__done, ++ (MailMsgFreeFunc) emft_drop_async__free + }; + + static void + tree_drag_data_action(struct _DragDataReceivedAsync *m) + { + m->move = m->action == GDK_ACTION_MOVE; +- e_thread_put (mail_thread_new, (EMsg *) m); ++ mail_msg_unordered_push (m); + } + + static void +@@ -996,7 +993,7 @@ emft_drop_popup_cancel(EPopup *ep, EPopu + struct _DragDataReceivedAsync *m = data; + + m->aborted = TRUE; +- mail_msg_free(&m->msg); ++ mail_msg_unref(m); + } + + static EPopupItem emft_drop_popup_menu[] = { +@@ -1052,7 +1049,7 @@ tree_drag_data_received(GtkWidget *widge + return; + } + +- m = mail_msg_new (&emft_drop_async_op, NULL, sizeof (struct _DragDataReceivedAsync)); ++ m = mail_msg_new (&emft_drop_async_info); + m->context = context; + g_object_ref(context); + m->store = store; +@@ -1686,7 +1683,7 @@ dump_fi (CamelFolderInfo *fi, int depth) + #endif + + struct _EMFolderTreeGetFolderInfo { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + GtkTreeRowReference *root; +@@ -1699,10 +1696,9 @@ struct _EMFolderTreeGetFolderInfo { + CamelFolderInfo *fi; + }; + +-static char * +-emft_get_folder_info__desc(struct _mail_msg *mm, int done) ++static gchar * ++emft_get_folder_info__desc (struct _EMFolderTreeGetFolderInfo *m) + { +- struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *)mm; + char *ret, *name; + + name = camel_service_get_name((CamelService *)m->store, TRUE); +@@ -1712,18 +1708,16 @@ emft_get_folder_info__desc(struct _mail_ + } + + static void +-emft_get_folder_info__get (struct _mail_msg *mm) ++emft_get_folder_info__exec (struct _EMFolderTreeGetFolderInfo *m) + { +- struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; + guint32 flags = m->flags | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; + +- m->fi = camel_store_get_folder_info (m->store, m->top, flags, &mm->ex); ++ m->fi = camel_store_get_folder_info (m->store, m->top, flags, &m->base.ex); + } + + static void +-emft_get_folder_info__got (struct _mail_msg *mm) ++emft_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m) + { +- struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; + struct _EMFolderTreePrivate *priv = m->emft->priv; + struct _EMFolderTreeModelStoreInfo *si; + GtkTreeIter root, iter; +@@ -1751,7 +1745,7 @@ emft_get_folder_info__got (struct _mail_ + gtk_tree_model_get_iter ((GtkTreeModel *) model, &root, path); + + /* if we had an error, then we need to re-set the load subdirs state and collapse the node */ +- if (!m->fi && camel_exception_is_set(&mm->ex)) { ++ if (!m->fi && camel_exception_is_set(&m->base.ex)) { + gtk_tree_store_set(model, &root, COL_BOOL_LOAD_SUBDIRS, TRUE, -1); + gtk_tree_view_collapse_row (priv->treeview, path); + gtk_tree_path_free (path); +@@ -1806,10 +1800,8 @@ emft_get_folder_info__got (struct _mail_ + } + + static void +-emft_get_folder_info__free (struct _mail_msg *mm) ++emft_get_folder_info__free (struct _EMFolderTreeGetFolderInfo *m) + { +- struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; +- + camel_store_free_folder_info (m->store, m->fi); + + gtk_tree_row_reference_free (m->root); +@@ -1818,11 +1810,12 @@ emft_get_folder_info__free (struct _mail + g_free (m->top); + } + +-static struct _mail_msg_op get_folder_info_op = { +- emft_get_folder_info__desc, +- emft_get_folder_info__get, +- emft_get_folder_info__got, +- emft_get_folder_info__free, ++static MailMsgInfo get_folder_info_info = { ++ sizeof (struct _EMFolderTreeGetFolderInfo), ++ (MailMsgDescFunc) emft_get_folder_info__desc, ++ (MailMsgExecFunc) emft_get_folder_info__exec, ++ (MailMsgDoneFunc) emft_get_folder_info__done, ++ (MailMsgFreeFunc) emft_get_folder_info__free + }; + + static void +@@ -1906,7 +1899,7 @@ emft_tree_row_expanded (GtkTreeView *tre + + gtk_tree_store_set((GtkTreeStore *)model, root, COL_BOOL_LOAD_SUBDIRS, FALSE, -1); + +- m = mail_msg_new (&get_folder_info_op, NULL, sizeof (struct _EMFolderTreeGetFolderInfo)); ++ m = mail_msg_new (&get_folder_info_info); + m->root = gtk_tree_row_reference_new (model, tree_path); + camel_object_ref (store); + m->store = store; +@@ -1915,7 +1908,7 @@ emft_tree_row_expanded (GtkTreeView *tre + m->top = full_name; + m->flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST; + +- e_thread_put (mail_thread_new, (EMsg *) m); ++ mail_msg_unordered_push (m); + } + + static gboolean +diff -up evolution-2.10.3/mail/em-folder-browser.c.kill-ethread evolution-2.10.3/mail/em-folder-browser.c +--- evolution-2.10.3/mail/em-folder-browser.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-folder-browser.c 2007-08-29 22:51:25.000000000 -0400 +@@ -838,7 +838,7 @@ get_view_query (ESearchBar *esb) + + + struct _setup_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + char *query; +@@ -846,16 +846,15 @@ struct _setup_msg { + GList *sources_folder; + }; + +-static char * +-vfolder_setup_desc(struct _mail_msg *mm, int done) ++static gchar * ++vfolder_setup_desc(struct _setup_msg *m) + { + return g_strdup(_("Searching")); + } + + static void +-vfolder_setup_do(struct _mail_msg *mm) ++vfolder_setup_exec(struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; + GList *l, *list = NULL; + CamelFolder *folder; + +@@ -866,12 +865,12 @@ vfolder_setup_do(struct _mail_msg *mm) + l = m->sources_uri; + while (l) { + d(printf(" Adding uri: %s\n", (char *)l->data)); +- folder = mail_tool_uri_to_folder (l->data, 0, &mm->ex); ++ folder = mail_tool_uri_to_folder (l->data, 0, &m->base.ex); + if (folder) { + list = g_list_append(list, folder); + } else { + g_warning("Could not open vfolder source: %s", (char *)l->data); +- camel_exception_clear(&mm->ex); ++ camel_exception_clear(&m->base.ex); + } + l = l->next; + } +@@ -895,17 +894,13 @@ vfolder_setup_do(struct _mail_msg *mm) + } + + static void +-vfolder_setup_done(struct _mail_msg *mm) ++vfolder_setup_done(struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; +- +- m = m; + } + + static void +-vfolder_setup_free (struct _mail_msg *mm) ++vfolder_setup_free (struct _setup_msg *m) + { +- struct _setup_msg *m = (struct _setup_msg *)mm; + GList *l; + + camel_object_unref(m->folder); +@@ -926,11 +921,12 @@ vfolder_setup_free (struct _mail_msg *mm + g_list_free(m->sources_folder); + } + +-static struct _mail_msg_op vfolder_setup_op = { +- vfolder_setup_desc, +- vfolder_setup_do, +- vfolder_setup_done, +- vfolder_setup_free, ++static MailMsgInfo vfolder_setup_info = { ++ sizeof (struct _setup_msg), ++ (MailMsgDescFunc) vfolder_setup_desc, ++ (MailMsgExecFunc) vfolder_setup_exec, ++ (MailMsgDoneFunc) vfolder_setup_done, ++ (MailMsgFreeFunc) vfolder_setup_free + }; + + /* sources_uri should be camel uri's */ +@@ -940,15 +936,15 @@ vfolder_setup(CamelFolder *folder, const + struct _setup_msg *m; + int id; + +- m = mail_msg_new(&vfolder_setup_op, NULL, sizeof (*m)); ++ m = mail_msg_new(&vfolder_setup_info); + m->folder = folder; + camel_object_ref(folder); + m->query = g_strdup(query); + m->sources_uri = sources_uri; + m->sources_folder = sources_folder; + +- id = m->msg.seq; +- e_thread_put(mail_thread_queued_slow, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_slow_ordered_push (m); + + return id; + } +diff -up evolution-2.10.3/mail/message-list.c.kill-ethread evolution-2.10.3/mail/message-list.c +--- evolution-2.10.3/mail/message-list.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/message-list.c 2007-08-29 22:51:25.000000000 -0400 +@@ -1802,7 +1802,7 @@ ml_tree_drag_data_get (ETree *tree, int + /* TODO: merge this with the folder tree stuff via empopup targets */ + /* Drop handling */ + struct _drop_msg { +- struct _mail_msg msg; ++ MailMsg base; + + GdkDragContext *context; + +@@ -1819,11 +1819,9 @@ struct _drop_msg { + unsigned int aborted:1; + }; + +-static char * +-ml_drop_async_desc (struct _mail_msg *mm, int done) ++static gchar * ++ml_drop_async_desc (struct _drop_msg *m) + { +- struct _drop_msg *m = (struct _drop_msg *) mm; +- + if (m->move) + return g_strdup_printf(_("Moving messages into folder %s"), m->folder->full_name); + else +@@ -1831,13 +1829,11 @@ ml_drop_async_desc (struct _mail_msg *mm + } + + static void +-ml_drop_async_drop(struct _mail_msg *mm) ++ml_drop_async_exec (struct _drop_msg *m) + { +- struct _drop_msg *m = (struct _drop_msg *)mm; +- + switch (m->info) { + case DND_X_UID_LIST: +- em_utils_selection_get_uidlist(m->selection, m->folder, m->action == GDK_ACTION_MOVE, &mm->ex); ++ em_utils_selection_get_uidlist(m->selection, m->folder, m->action == GDK_ACTION_MOVE, &m->base.ex); + break; + case DND_MESSAGE_RFC822: + em_utils_selection_get_message(m->selection, m->folder); +@@ -1849,9 +1845,8 @@ ml_drop_async_drop(struct _mail_msg *mm) + } + + static void +-ml_drop_async_done(struct _mail_msg *mm) ++ml_drop_async_done (struct _drop_msg *m) + { +- struct _drop_msg *m = (struct _drop_msg *)mm; + gboolean success, delete; + + /* ?? */ +@@ -1859,7 +1854,7 @@ ml_drop_async_done(struct _mail_msg *mm) + success = FALSE; + delete = FALSE; + } else { +- success = !camel_exception_is_set (&mm->ex); ++ success = !camel_exception_is_set (&m->base.ex); + delete = success && m->move && !m->moved; + } + +@@ -1867,10 +1862,8 @@ ml_drop_async_done(struct _mail_msg *mm) + } + + static void +-ml_drop_async_free(struct _mail_msg *mm) ++ml_drop_async_free (struct _drop_msg *m) + { +- struct _drop_msg *m = (struct _drop_msg *)mm; +- + g_object_unref(m->context); + camel_object_unref(m->folder); + +@@ -1878,18 +1871,19 @@ ml_drop_async_free(struct _mail_msg *mm) + g_free(m->selection); + } + +-static struct _mail_msg_op ml_drop_async_op = { +- ml_drop_async_desc, +- ml_drop_async_drop, +- ml_drop_async_done, +- ml_drop_async_free, ++static MailMsgInfo ml_drop_async_info = { ++ sizeof (struct _drop_msg), ++ (MailMsgDescFunc) ml_drop_async_desc, ++ (MailMsgExecFunc) ml_drop_async_exec, ++ (MailMsgDoneFunc) ml_drop_async_done, ++ (MailMsgFreeFunc) ml_drop_async_free + }; + + static void + ml_drop_action(struct _drop_msg *m) + { + m->move = m->action == GDK_ACTION_MOVE; +- e_thread_put (mail_thread_new, (EMsg *) m); ++ mail_msg_unordered_push (m); + } + + static void +@@ -1916,7 +1910,7 @@ ml_drop_popup_cancel(EPopup *ep, EPopupI + struct _drop_msg *m = data; + + m->aborted = TRUE; +- mail_msg_free(&m->msg); ++ mail_msg_unref(m); + } + + static EPopupItem ml_drop_popup_menu[] = { +@@ -1946,7 +1940,7 @@ ml_tree_drag_data_received (ETree *tree, + if (data->data == NULL || data->length == -1) + return; + +- m = mail_msg_new(&ml_drop_async_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&ml_drop_async_info); + m->context = context; + g_object_ref(context); + m->folder = ml->folder; +@@ -3676,7 +3670,7 @@ save_hide_state (MessageList *ml) + + /* ** REGENERATE MESSAGELIST ********************************************** */ + struct _regen_list_msg { +- struct _mail_msg msg; ++ MailMsg base; + + int complete; + +@@ -3704,16 +3698,15 @@ struct _regen_list_msg { + + */ + +-static char * +-regen_list_describe (struct _mail_msg *mm, gint complete) ++static gchar * ++regen_list_desc (struct _regen_list_msg *m) + { + return g_strdup (_("Generating message list")); + } + + static void +-regen_list_regen (struct _mail_msg *mm) ++regen_list_exec (struct _regen_list_msg *m) + { +- struct _regen_list_msg *m = (struct _regen_list_msg *)mm; + GPtrArray *uids, *uidnew, *showuids, *searchuids = NULL; + CamelMessageInfo *info; + int i; +@@ -3743,7 +3736,7 @@ regen_list_regen (struct _mail_msg *mm) + } else + expr = "(match-all (not (system-flag \"deleted\")))"; + } +- searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &mm->ex); ++ searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex); + } else { + char *expr; + +@@ -3753,23 +3746,23 @@ regen_list_regen (struct _mail_msg *mm) + sprintf(expr, "(and (match-all (not (system-flag \"junk\")))\n %s)", m->search); + } else + expr = "(match-all (not (system-flag \"junk\")))"; +- searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &mm->ex); ++ searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex); + } else { + if (m->search) +- searchuids = uids = camel_folder_search_by_expression (m->folder, m->search, &mm->ex); ++ searchuids = uids = camel_folder_search_by_expression (m->folder, m->search, &m->base.ex); + else + uids = camel_folder_get_uids (m->folder); + } + } + +- if (camel_exception_is_set (&mm->ex)) ++ if (camel_exception_is_set (&m->base.ex)) + return; + + /* perform hiding */ + if (m->hideexpr && camel_folder_has_search_capability(m->folder)) { +- uidnew = camel_folder_search_by_expression (m->ml->folder, m->hideexpr, &mm->ex); ++ uidnew = camel_folder_search_by_expression (m->ml->folder, m->hideexpr, &m->base.ex); + /* well, lets not abort just because this faileld ... */ +- camel_exception_clear (&mm->ex); ++ camel_exception_clear (&m->base.ex); + + if (uidnew) { + MESSAGE_LIST_LOCK(m->ml, hide_lock); +@@ -3844,7 +3837,7 @@ regen_list_regen (struct _mail_msg *mm) + + e_profile_event_emit("list.threaduids", m->folder->full_name, 0); + +- if (!camel_operation_cancel_check(mm->cancel)) { ++ if (!camel_operation_cancel_check(m->base.cancel)) { + /* update/build a new tree */ + if (m->dotree) { + if (m->tree) +@@ -3873,17 +3866,15 @@ regen_list_regen (struct _mail_msg *mm) + } + + static void +-regen_list_regened (struct _mail_msg *mm) ++regen_list_done (struct _regen_list_msg *m) + { +- struct _regen_list_msg *m = (struct _regen_list_msg *)mm; +- + if (m->ml->priv->destroyed) + return; + + if (!m->complete) + return; + +- if (camel_operation_cancel_check(mm->cancel)) ++ if (camel_operation_cancel_check(m->base.cancel)) + return; + + if (m->ml->folder != m->folder) +@@ -3934,9 +3925,8 @@ regen_list_regened (struct _mail_msg *mm + } + + static void +-regen_list_free (struct _mail_msg *mm) ++regen_list_free (struct _regen_list_msg *m) + { +- struct _regen_list_msg *m = (struct _regen_list_msg *)mm; + int i; + + e_profile_event_emit("list.regenerated", m->folder->full_name, 0); +@@ -3964,11 +3954,12 @@ regen_list_free (struct _mail_msg *mm) + g_object_unref(m->ml); + } + +-static struct _mail_msg_op regen_list_op = { +- regen_list_describe, +- regen_list_regen, +- regen_list_regened, +- regen_list_free, ++static MailMsgInfo regen_list_info = { ++ sizeof (struct _regen_list_msg), ++ (MailMsgDescFunc) regen_list_desc, ++ (MailMsgExecFunc) regen_list_exec, ++ (MailMsgDoneFunc) regen_list_done, ++ (MailMsgFreeFunc) regen_list_free + }; + + static gboolean +@@ -3978,7 +3969,7 @@ ml_regen_timeout(struct _regen_list_msg + + m->ml->regen = g_list_prepend(m->ml->regen, m); + /* TODO: we should manage our own thread stuff, would make cancelling outstanding stuff easier */ +- e_thread_put (mail_thread_queued, (EMsg *)m); ++ mail_msg_fast_ordered_push (m); + + m->ml->regen_timeout_msg = NULL; + m->ml->regen_timeout_id = 0; +@@ -3994,7 +3985,7 @@ mail_regen_cancel(MessageList *ml) + GList *l = ml->regen; + + while (l) { +- struct _mail_msg *mm = l->data; ++ MailMsg *mm = l->data; + + if (mm->cancel) + camel_operation_cancel(mm->cancel); +@@ -4006,7 +3997,7 @@ mail_regen_cancel(MessageList *ml) + if (ml->regen_timeout_id) { + g_source_remove(ml->regen_timeout_id); + ml->regen_timeout_id = 0; +- mail_msg_free((struct _mail_msg *)ml->regen_timeout_msg); ++ mail_msg_unref(ml->regen_timeout_msg); + ml->regen_timeout_msg = NULL; + } + } +@@ -4041,7 +4032,7 @@ mail_regen_list (MessageList *ml, const + } + #endif + +- m = mail_msg_new (®en_list_op, NULL, sizeof (*m)); ++ m = mail_msg_new (®en_list_info); + m->ml = ml; + m->search = g_strdup (search); + m->hideexpr = g_strdup (hideexpr); +diff -up evolution-2.10.3/mail/em-sync-stream.h.kill-ethread evolution-2.10.3/mail/em-sync-stream.h +--- evolution-2.10.3/mail/em-sync-stream.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-sync-stream.h 2007-08-29 22:51:25.000000000 -0400 +@@ -29,41 +29,45 @@ requests are always handled in the main + #ifndef EM_SYNC_STREAM_H + #define EM_SYNC_STREAM_H + +-#ifdef __cplusplus +-extern "C" { +-#pragma } +-#endif /* __cplusplus */ +- +-#define EM_SYNC_STREAM_TYPE (em_sync_stream_get_type ()) +-#define EM_SYNC_STREAM(obj) (CAMEL_CHECK_CAST((obj), EM_SYNC_STREAM_TYPE, EMSyncStream)) +-#define EM_SYNC_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), EM_SYNC_STREAM_TYPE, EMSyncStreamClass)) +-#define EM_IS_SYNC_STREAM(o) (CAMEL_CHECK_TYPE((o), EM_SYNC_STREAM_TYPE)) +- + #include + #include + +-typedef struct _EMSyncStream { +- CamelStream parent_stream; +- +- struct _EMSyncStreamPrivate *priv; ++#define EM_SYNC_STREAM_TYPE \ ++ (em_sync_stream_get_type ()) ++#define EM_SYNC_STREAM(obj) \ ++ (CAMEL_CHECK_CAST \ ++ ((obj), EM_SYNC_STREAM_TYPE, EMSyncStream)) ++#define EM_SYNC_STREAM_CLASS(cls) \ ++ (CAMEL_CHECK_CLASS_CAST \ ++ ((cls), EM_SYNC_STREAM_TYPE, EMSyncStreamClass)) ++#define EM_IS_SYNC_STREAM(obj) \ ++ (CAMEL_CHECK_TYPE ((obj), EM_SYNC_STREAM_TYPE)) ++ ++G_BEGIN_DECLS ++ ++typedef struct _EMSyncStream EMSyncStream; ++typedef struct _EMSyncStreamClass EMSyncStreamClass; ++ ++struct _EMSyncStream { ++ CamelStream parent; ++ GString *buffer; ++ gboolean cancel; ++}; + +- int cancel; +-} EMSyncStream; +- +-typedef struct { ++struct _EMSyncStreamClass { + CamelStreamClass parent_class; + +- ssize_t (*sync_write) (CamelStream *stream, const char *buffer, size_t n); +- int (*sync_close) (CamelStream *stream); +- int (*sync_flush) (CamelStream *stream); +- +-} EMSyncStreamClass; +- +-CamelType em_sync_stream_get_type (void); +-void em_sync_stream_set_buffer_size(EMSyncStream *, size_t size); +- +-#ifdef __cplusplus +-} +-#endif /* __cplusplus */ ++ gssize (*sync_write) (CamelStream *stream, ++ const gchar *string, ++ gsize len); ++ int (*sync_close) (CamelStream *stream); ++ int (*sync_flush) (CamelStream *stream); ++}; ++ ++CamelType em_sync_stream_get_type (void); ++void em_sync_stream_set_buffer_size (EMSyncStream *stream, ++ gsize size); ++ ++G_END_DECLS + + #endif /* EM_SYNC_STREAM_H */ +diff -up evolution-2.10.3/mail/em-format-html-print.c.kill-ethread evolution-2.10.3/mail/em-format-html-print.c +--- evolution-2.10.3/mail/em-format-html-print.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-format-html-print.c 2007-08-29 22:51:25.000000000 -0400 +@@ -262,7 +262,7 @@ int em_format_html_print_message(EMForma + g_object_ref(source); + g_object_ref(efhp); + +- mail_get_message(folder, uid, emfhp_got_message, efhp, mail_thread_new); ++ mail_get_message(folder, uid, emfhp_got_message, efhp, mail_msg_unordered_push); + + return 0; /* damn async ... */ + } +diff -up evolution-2.10.3/mail/em-sync-stream.c.kill-ethread evolution-2.10.3/mail/em-sync-stream.c +--- evolution-2.10.3/mail/em-sync-stream.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-sync-stream.c 2007-08-29 22:51:25.000000000 -0400 +@@ -25,42 +25,17 @@ + #include + #endif + +-#include ++#include "em-sync-stream.h" ++ + #include +-#include ++#include + #include +-#include +-#include "em-sync-stream.h" ++#include + + #include "mail-mt.h" + +-#define LOG_STREAM +- +-#define d(x) +- + #define EMSS_CLASS(x) ((EMSyncStreamClass *)(((CamelObject *)(x))->klass)) + +-struct _EMSyncStreamPrivate { +- /* FIXME: use a single data port/gui channel for all instances */ +- /* TODO: possibly just use one of the mail-mt ports ... */ +- struct _EMsgPort *data_port, *reply_port; +- struct _GIOChannel *gui_channel; +- guint gui_watch; +- +- char *buf_data; +- int buf_used; +- int buf_size; +- +-#ifdef LOG_STREAM +- FILE *logfd; +-#endif +-}; +- +-#ifdef LOG_STREAM +-int dolog; +-#endif +- +-/* Should probably expose messages to outside world ... so subclasses can extend */ + enum _write_msg_t { + EMSS_WRITE, + EMSS_FLUSH, +@@ -68,275 +43,168 @@ enum _write_msg_t { + }; + + struct _write_msg { +- EMsg msg; ++ EMSyncStream *emss; ++ EFlag *done; + + enum _write_msg_t op; + +- const char *data; +- size_t n; ++ const gchar *string; ++ gsize len; + }; + +-static void em_sync_stream_class_init (EMSyncStreamClass *klass); +-static void em_sync_stream_init (CamelObject *object); +-static void em_sync_stream_finalize (CamelObject *object); +- +-static ssize_t stream_write(CamelStream *stream, const char *buffer, size_t n); +-static int stream_close(CamelStream *stream); +-static int stream_flush(CamelStream *stream); +- + static CamelStreamClass *parent_class = NULL; + +-CamelType +-em_sync_stream_get_type (void) +-{ +- static CamelType type = CAMEL_INVALID_TYPE; +- +- if (type == CAMEL_INVALID_TYPE) { +-#ifdef LOG_STREAM +- dolog = getenv("EVOLUTION_MAIL_LOG_HTML") != NULL; +-#endif +- type = camel_type_register (CAMEL_STREAM_TYPE, +- "EMSyncStream", +- sizeof (EMSyncStream), +- sizeof (EMSyncStreamClass), +- (CamelObjectClassInitFunc) em_sync_stream_class_init, +- NULL, +- (CamelObjectInitFunc) em_sync_stream_init, +- (CamelObjectFinalizeFunc) em_sync_stream_finalize); +- } +- +- return type; +-} +- +-static void +-em_sync_stream_class_init (EMSyncStreamClass *klass) +-{ +- CamelStreamClass *stream_class = CAMEL_STREAM_CLASS (klass); +- +- parent_class = (CamelStreamClass *) CAMEL_STREAM_TYPE; +- +- /* virtual method overload */ +- stream_class->write = stream_write; +- stream_class->flush = stream_flush; +- stream_class->close = stream_close; +-} +- + static gboolean +-emcs_gui_received(GIOChannel *source, GIOCondition cond, void *data) ++emss_process_message (struct _write_msg *msg) + { +- EMSyncStream *emss = data; +- struct _EMSyncStreamPrivate *p = emss->priv; +- struct _write_msg *msg; +- +- d(printf("%p: gui sync op job waiting\n", emss)); +- +- msg = (struct _write_msg *)e_msgport_get(p->data_port); +- /* Should never happen ... */ +- if (msg == NULL) +- return TRUE; +- +- d(printf("%p: running sync op %d\n", emss, msg->op)); +- +- /* force out any pending data before doing anything else */ +- if (p->buf_used > 0) { +- EMSS_CLASS(emss)->sync_write((CamelStream *)emss, p->buf_data, p->buf_used); +-#ifdef LOG_STREAM +- if (p->logfd) +- fwrite(p->buf_data, 1, p->buf_used, p->logfd); +-#endif +- p->buf_used = 0; +- } ++ struct _EMSyncStream *emss = msg->emss; + +- /* FIXME: need to handle return values */ ++ /* Force out any pending data before doing anything else. */ ++ if (emss->buffer != NULL && emss->buffer->len > 0) { ++ EMSS_CLASS (emss)->sync_write ( ++ CAMEL_STREAM (emss), emss->buffer->str, ++ emss->buffer->len); ++ g_string_set_size (emss->buffer, 0); ++ } + + switch (msg->op) { +- case EMSS_WRITE: +- EMSS_CLASS(emss)->sync_write((CamelStream *)emss, msg->data, msg->n); +-#ifdef LOG_STREAM +- if (p->logfd) +- fwrite(msg->data, 1, msg->n, p->logfd); +-#endif +- break; +- case EMSS_FLUSH: +- EMSS_CLASS(emss)->sync_flush((CamelStream *)emss); +- break; +- case EMSS_CLOSE: +- EMSS_CLASS(emss)->sync_close((CamelStream *)emss); +-#ifdef LOG_STREAM +- if (p->logfd) { +- fclose(p->logfd); +- p->logfd = NULL; +- } +-#endif +- break; ++ case EMSS_WRITE: ++ EMSS_CLASS (emss)->sync_write ( ++ CAMEL_STREAM (emss), msg->string, msg->len); ++ break; ++ case EMSS_FLUSH: ++ EMSS_CLASS (emss)->sync_flush ( ++ CAMEL_STREAM (emss)); ++ break; ++ case EMSS_CLOSE: ++ EMSS_CLASS (emss)->sync_close ( ++ CAMEL_STREAM (emss)); ++ break; + } +- +- e_msgport_reply((EMsg *)msg); +- d(printf("%p: gui sync op jobs done\n", emss)); +- +- return TRUE; +-} +- +-static void +-em_sync_stream_init (CamelObject *object) +-{ +- EMSyncStream *emss = (EMSyncStream *)object; +- struct _EMSyncStreamPrivate *p; +- +- p = emss->priv = g_malloc0(sizeof(*p)); + +- p->data_port = e_msgport_new(); +- p->reply_port = e_msgport_new(); ++ e_flag_set (msg->done); + +-#ifndef G_OS_WIN32 +- p->gui_channel = g_io_channel_unix_new(e_msgport_fd(p->data_port)); +-#else +- p->gui_channel = g_io_channel_win32_new_socket(e_msgport_fd(p->data_port)); +-#endif +- p->gui_watch = g_io_add_watch(p->gui_channel, G_IO_IN, emcs_gui_received, emss); +- +-#ifdef LOG_STREAM +- if (dolog) { +- char name[32]; +- static int count; +- +- sprintf(name, "sync-stream.%d.html", count++); +- printf("Saving raw data stream to '%s'\n", name); +- p->logfd = fopen(name, "w"); +- } +-#endif +- +- d(printf("%p: new emss\n", emss)); ++ return FALSE; + } + + static void +-sync_op(EMSyncStream *emss, enum _write_msg_t op, const char *data, size_t n) ++emss_sync_op (EMSyncStream *emss, enum _write_msg_t op, ++ const gchar *string, gsize len) + { +- struct _EMSyncStreamPrivate *p = emss->priv; + struct _write_msg msg; +- EMsg *reply_msg; +- +- d(printf("%p: launching sync op %d\n", emss, op)); + +- /* we do everything synchronous, we should never have any locks, and +- this prevents overflow from banked up data */ +- +- msg.msg.reply_port = p->reply_port; ++ msg.done = e_flag_new (); ++ msg.emss = emss; + msg.op = op; +- msg.data = data; +- msg.n = n; +- +- e_msgport_put(p->data_port, &msg.msg); +- reply_msg = e_msgport_wait(p->reply_port); +- g_assert(reply_msg == &msg.msg); +- +- d(printf("%p: returned sync op %d\n", emss, op)); +-} +- +-static void +-em_sync_stream_finalize (CamelObject *object) +-{ +- EMSyncStream *emss = (EMSyncStream *)object; +- struct _EMSyncStreamPrivate *p = emss->priv; +- +- /* TODO: is this stuff safe to do in another thread? */ +- g_source_remove(p->gui_watch); +- g_io_channel_unref(p->gui_channel); ++ msg.string = string; ++ msg.len = len; + +- e_msgport_destroy(p->data_port); +- e_msgport_destroy(p->reply_port); ++ camel_object_ref (emss); + +- p->data_port = NULL; +- p->reply_port = NULL; ++ g_idle_add ((GSourceFunc) emss_process_message, &msg); + +- g_free(p->buf_data); ++ e_flag_wait (msg.done); ++ e_flag_free (msg.done); + +-#ifdef LOG_STREAM +- if (p->logfd) +- fclose(p->logfd); +-#endif +- +- g_free(p); ++ camel_object_unref (emss); + } + +-static ssize_t +-stream_write (CamelStream *stream, const char *buffer, size_t n) ++static gssize ++emss_stream_write (CamelStream *stream, const gchar *string, gsize len) + { + EMSyncStream *emss = EM_SYNC_STREAM (stream); +- struct _EMSyncStreamPrivate *p = emss->priv; + + if (emss->cancel) + return -1; + +- if (pthread_equal(pthread_self(), mail_gui_thread)) { +- EMSS_CLASS(emss)->sync_write(stream, buffer, n); +-#ifdef LOG_STREAM +- if (p->logfd) +- fwrite(buffer, 1, n, p->logfd); +-#endif +- } else if (p->buf_size > 0) { +- size_t left = p->buf_size-p->buf_used; +- +- if (n >= left) { +- sync_op(emss, EMSS_WRITE, buffer, n); +- } else { +- memcpy(p->buf_data + p->buf_used, buffer, n); +- p->buf_used += n; +- } ++ if (mail_in_main_thread ()) { ++ EMSS_CLASS (emss)->sync_write (stream, string, len); ++ } else if (emss->buffer != NULL) { ++ if (len < (emss->buffer->allocated_len - emss->buffer->len)) ++ g_string_append_len (emss->buffer, string, len); ++ else ++ emss_sync_op (emss, EMSS_WRITE, string, len); + } else { +- sync_op(emss, EMSS_WRITE, buffer, n); ++ emss_sync_op(emss, EMSS_WRITE, string, len); + } + +- return (ssize_t) n; ++ return (gssize) len; + } + + static int +-stream_flush(CamelStream *stream) ++emss_stream_flush (CamelStream *stream) + { +- EMSyncStream *emss = (EMSyncStream *)stream; ++ EMSyncStream *emss = EM_SYNC_STREAM (stream); + + if (emss->cancel) + return -1; + +- if (pthread_equal(pthread_self(), mail_gui_thread)) +- return ((EMSyncStreamClass *)(((CamelObject *)emss)->klass))->sync_flush(stream); ++ if (mail_in_main_thread ()) ++ return EMSS_CLASS (emss)->sync_flush (stream); + else +- sync_op(emss, EMSS_FLUSH, NULL, 0); ++ emss_sync_op (emss, EMSS_FLUSH, NULL, 0); + + return 0; + } + + static int +-stream_close(CamelStream *stream) ++emss_stream_close (CamelStream *stream) + { +- EMSyncStream *emss = (EMSyncStream *)stream; ++ EMSyncStream *emss = EM_SYNC_STREAM (stream); + + if (emss->cancel) + return -1; + +- d(printf("%p: closing stream\n", stream)); +- +- if (pthread_equal(pthread_self(), mail_gui_thread)) { +-#ifdef LOG_STREAM +- if (emss->priv->logfd) { +- fclose(emss->priv->logfd); +- emss->priv->logfd = NULL; +- } +-#endif +- return ((EMSyncStreamClass *)(((CamelObject *)emss)->klass))->sync_close(stream); +- } else +- sync_op(emss, EMSS_CLOSE, NULL, 0); ++ if (mail_in_main_thread ()) ++ return EMSS_CLASS (emss)->sync_close (stream); ++ else ++ emss_sync_op (emss, EMSS_CLOSE, NULL, 0); + + return 0; + } + +-void +-em_sync_stream_set_buffer_size(EMSyncStream *emss, size_t size) ++static void ++em_sync_stream_class_init (EMSyncStreamClass *class) ++{ ++ CamelStreamClass *stream_class = CAMEL_STREAM_CLASS (class); ++ ++ parent_class = (CamelStreamClass *) CAMEL_STREAM_TYPE; ++ ++ stream_class->write = emss_stream_write; ++ stream_class->flush = emss_stream_flush; ++ stream_class->close = emss_stream_close; ++} ++ ++static void ++em_sync_stream_finalize (EMSyncStream *emss) ++{ ++ if (emss->buffer != NULL) ++ g_string_free (emss->buffer, TRUE); ++} ++ ++CamelType ++em_sync_stream_get_type (void) + { +- struct _EMSyncStreamPrivate *p = emss->priv; ++ static CamelType type = CAMEL_INVALID_TYPE; ++ ++ if (G_UNLIKELY (type == CAMEL_INVALID_TYPE)) ++ type = camel_type_register ( ++ CAMEL_STREAM_TYPE, ++ "EMSyncStream", ++ sizeof (EMSyncStream), ++ sizeof (EMSyncStreamClass), ++ (CamelObjectClassInitFunc) em_sync_stream_class_init, ++ NULL, ++ (CamelObjectInitFunc) NULL, ++ (CamelObjectFinalizeFunc) em_sync_stream_finalize); + +- g_free(p->buf_data); +- p->buf_data = g_malloc(size); +- p->buf_size = size; +- p->buf_used = 0; ++ return type; ++} ++ ++void ++em_sync_stream_set_buffer_size (EMSyncStream *emss, gsize size) ++{ ++ if (emss->buffer != NULL) ++ g_string_free (emss->buffer, TRUE); ++ emss->buffer = g_string_sized_new (size); + } +diff -up evolution-2.10.3/mail/em-subscribe-editor.c.kill-ethread evolution-2.10.3/mail/em-subscribe-editor.c +--- evolution-2.10.3/mail/em-subscribe-editor.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-subscribe-editor.c 2007-08-29 22:51:25.000000000 -0400 +@@ -175,7 +175,7 @@ sub_unref(EMSubscribe *sub) + /* ** Subscribe folder operation **************************************** */ + + struct _zsubscribe_msg { +- struct _mail_msg msg; ++ MailMsg base; + + EMSubscribe *sub; + EMSubscribeNode *node; +@@ -184,20 +184,18 @@ struct _zsubscribe_msg { + }; + + static void +-sub_folder_subscribe (struct _mail_msg *mm) ++sub_folder_exec (struct _zsubscribe_msg *m) + { +- struct _zsubscribe_msg *m = (struct _zsubscribe_msg *) mm; +- + if (m->subscribe) +- camel_store_subscribe_folder (m->sub->store, m->node->info->full_name, &mm->ex); ++ camel_store_subscribe_folder (m->sub->store, m->node->info->full_name, &m->base.ex); + else +- camel_store_unsubscribe_folder (m->sub->store, m->node->info->full_name, &mm->ex); ++ camel_store_unsubscribe_folder (m->sub->store, m->node->info->full_name, &m->base.ex); + } + + static void +-sub_folder_subscribed (struct _mail_msg *mm) ++sub_folder_done (struct _zsubscribe_msg *m) + { +- struct _zsubscribe_msg *m = (struct _zsubscribe_msg *)mm, *next; ++ struct _zsubscribe_msg *next; + GtkTreeIter iter; + GtkTreeModel *model; + EMSubscribeNode *node; +@@ -207,7 +205,7 @@ sub_folder_subscribed (struct _mail_msg + if (m->sub->cancel) + return; + +- if (!camel_exception_is_set(&mm->ex)) { ++ if (!camel_exception_is_set(&m->base.ex)) { + if (m->subscribe) + m->node->info->flags |= CAMEL_FOLDER_SUBSCRIBED; + else +@@ -228,8 +226,8 @@ sub_folder_subscribed (struct _mail_msg + /* queue any further ones, or if out, update the ui */ + next = (struct _zsubscribe_msg *)e_dlist_remhead(&m->sub->subscribe); + if (next) { +- next->sub->subscribe_id = next->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)next); ++ next->sub->subscribe_id = next->base.seq; ++ mail_msg_unordered_push (next); + } else { + /* should it go off the model instead? */ + sub_selection_changed(gtk_tree_view_get_selection(m->sub->tree), m->sub); +@@ -237,19 +235,18 @@ sub_folder_subscribed (struct _mail_msg + } + + static void +-sub_folder_free (struct _mail_msg *mm) ++sub_folder_free (struct _zsubscribe_msg *m) + { +- struct _zsubscribe_msg *m = (struct _zsubscribe_msg *) mm; +- + g_free(m->path); + sub_unref(m->sub); + } + +-static struct _mail_msg_op sub_subscribe_folder_op = { +- NULL, /*subscribe_folder_desc,*/ +- sub_folder_subscribe, +- sub_folder_subscribed, +- sub_folder_free, ++static MailMsgInfo sub_subscribe_folder_info = { ++ sizeof (struct _zsubscribe_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) sub_folder_exec, ++ (MailMsgDoneFunc) sub_folder_done, ++ (MailMsgFreeFunc) sub_folder_free + }; + + /* spath is tree path in string form */ +@@ -259,18 +256,18 @@ sub_subscribe_folder (EMSubscribe *sub, + struct _zsubscribe_msg *m; + int id; + +- m = mail_msg_new (&sub_subscribe_folder_op, NULL, sizeof(*m)); ++ m = mail_msg_new (&sub_subscribe_folder_info); + m->sub = sub; + sub_ref(sub); + m->node = node; + m->subscribe = state; + m->path = g_strdup(spath); + +- id = m->msg.seq; ++ id = m->base.seq; + if (sub->subscribe_id == -1) { + sub->subscribe_id = id; + d(printf("running subscribe folder '%s'\n", spath)); +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + } else { + d(printf("queueing subscribe folder '%s'\n", spath)); + e_dlist_addtail(&sub->subscribe, (EDListNode *)m); +@@ -341,7 +338,7 @@ sub_fill_level(EMSubscribe *sub, CamelFo + /* async query of folderinfo */ + + struct _emse_folderinfo_msg { +- struct _mail_msg msg; ++ MailMsg base; + + int seq; + +@@ -351,31 +348,29 @@ struct _emse_folderinfo_msg { + }; + + static void +-sub_folderinfo_get (struct _mail_msg *mm) ++sub_folderinfo_exec (struct _emse_folderinfo_msg *m) + { +- struct _emse_folderinfo_msg *m = (struct _emse_folderinfo_msg *) mm; + char *pub_full_name=NULL; + + if (m->seq == m->sub->seq) { +- camel_operation_register(mm->cancel); +- m->info = camel_store_get_folder_info(m->sub->store, m->node?m->node->info->full_name:pub_full_name, CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_NO_VIRTUAL, &mm->ex); +- camel_operation_unregister(mm->cancel); ++ camel_operation_register(m->base.cancel); ++ m->info = camel_store_get_folder_info(m->sub->store, m->node?m->node->info->full_name:pub_full_name, CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_NO_VIRTUAL, &m->base.ex); ++ camel_operation_unregister(m->base.cancel); + } + } + + static void +-sub_folderinfo_got(struct _mail_msg *mm) ++sub_folderinfo_done (struct _emse_folderinfo_msg *m) + { +- struct _emse_folderinfo_msg *m = (struct _emse_folderinfo_msg *) mm; + EMSubscribeNode *node; + + m->sub->pending_id = -1; + if (m->sub->cancel || m->seq != m->sub->seq) + return; + +- if (camel_exception_is_set (&mm->ex)) { ++ if (camel_exception_is_set (&m->base.ex)) { + g_warning ("Error getting folder info from store: %s", +- camel_exception_get_description (&mm->ex)); ++ camel_exception_get_description (&m->base.ex)); + } + + if (m->info) { +@@ -396,10 +391,8 @@ sub_folderinfo_got(struct _mail_msg *mm) + } + + static void +-sub_folderinfo_free(struct _mail_msg *mm) ++sub_folderinfo_free (struct _emse_folderinfo_msg *m) + { +- struct _emse_folderinfo_msg *m = (struct _emse_folderinfo_msg *) mm; +- + if (m->info) + m->sub->info_list = g_slist_prepend(m->sub->info_list, m->info); + +@@ -415,11 +408,12 @@ sub_folderinfo_free(struct _mail_msg *mm + sub_unref(m->sub); + } + +-static struct _mail_msg_op sub_folderinfo_op = { +- NULL, /*sub_folderinfo_desc, we do our own progress reporting/cancellation */ +- sub_folderinfo_get, +- sub_folderinfo_got, +- sub_folderinfo_free, ++static MailMsgInfo sub_folderinfo_info = { ++ sizeof (struct _emse_folderinfo_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) sub_folderinfo_exec, ++ (MailMsgDoneFunc) sub_folderinfo_done, ++ (MailMsgFreeFunc) sub_folderinfo_free + }; + + static int +@@ -431,19 +425,19 @@ sub_queue_fill_level(EMSubscribe *sub, E + d(printf("%s:%d:%s: Starting get folderinfo of '%s'\n", __FILE__, __LINE__, __GNUC_PRETTY_FUNCTION__, + node?node->info->full_name:"")); + +- m = mail_msg_new (&sub_folderinfo_op, NULL, sizeof(*m)); ++ m = mail_msg_new (&sub_folderinfo_info); + sub_ref(sub); + m->sub = sub; + m->node = node; + m->seq = sub->seq; + +- sub->pending_id = m->msg.seq; ++ sub->pending_id = m->base.seq; + + sub_editor_busy(sub->editor, 1); + +- id = m->msg.seq; ++ id = m->base.seq; + +- e_thread_put (mail_thread_new, (EMsg *)m); ++ mail_msg_unordered_push (m); + return id; + } + +@@ -573,7 +567,7 @@ sub_destroy(GtkWidget *w, EMSubscribe *s + mail_msg_cancel(sub->subscribe_id); + + while ( (m = (struct _zsubscribe_msg *)e_dlist_remhead(&sub->subscribe)) ) +- mail_msg_free(m); ++ mail_msg_unref(m); + + sub_unref(sub); + } +diff -up evolution-2.10.3/mail/mail-mt.h.kill-ethread evolution-2.10.3/mail/mail-mt.h +--- evolution-2.10.3/mail/mail-mt.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-mt.h 2007-08-29 22:51:25.000000000 -0400 +@@ -23,47 +23,64 @@ + #ifndef _MAIL_MT + #define _MAIL_MT + +-#include + #include "camel/camel-exception.h" +-#include "libedataserver/e-msgport.h" + #include "camel/camel-object.h" + #include "camel/camel-operation.h" + +-typedef struct _mail_msg { +- EMsg msg; /* parent type */ +- struct _mail_msg_op *ops; /* operation functions */ ++typedef struct _MailMsg MailMsg; ++typedef struct _MailMsgInfo MailMsgInfo; ++typedef struct _MailMsgPrivate MailMsgPrivate; ++ ++typedef gchar * (*MailMsgDescFunc) (MailMsg *msg); ++typedef void (*MailMsgExecFunc) (MailMsg *msg); ++typedef void (*MailMsgDoneFunc) (MailMsg *msg); ++typedef void (*MailMsgFreeFunc) (MailMsg *msg); ++typedef void (*MailMsgDispatchFunc) (gpointer msg); ++ ++struct _MailMsg { ++ MailMsgInfo *info; ++ volatile gint ref_count; + unsigned int seq; /* seq number for synchronisation */ ++ gint priority; /* priority (default = 0) */ + CamelOperation *cancel; /* a cancellation/status handle */ + CamelException ex; /* an initialised camel exception, upto the caller to use this */ +- struct _mail_msg_priv *priv; /* private for internal use */ +-} mail_msg_t; ++ MailMsgPrivate *priv; ++}; + +-/* callback functions for thread message */ +-typedef struct _mail_msg_op { +- char *(*describe_msg)(struct _mail_msg *msg, int complete); +- +- void (*receive_msg)(struct _mail_msg *msg); /* message received */ +- void (*reply_msg)(struct _mail_msg *msg); /* message replied */ +- void (*destroy_msg)(struct _mail_msg *msg); /* finalise message */ +-} mail_msg_op_t; ++struct _MailMsgInfo { ++ gsize size; ++ MailMsgDescFunc desc; ++ MailMsgExecFunc exec; ++ MailMsgDoneFunc done; ++ MailMsgFreeFunc free; ++}; + + /* setup ports */ + void mail_msg_init(void); + void mail_msg_cleanup (void); + ++gboolean mail_in_main_thread (void); ++ + /* allocate a new message */ +-void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size); +-void mail_msg_free(void *msg); +-void mail_msg_check_error(void *msg); ++gpointer mail_msg_new (MailMsgInfo *info); ++gpointer mail_msg_ref (gpointer msg); ++void mail_msg_unref (gpointer msg); ++void mail_msg_check_error (gpointer msg); + void mail_msg_cancel(unsigned int msgid); + void mail_msg_wait(unsigned int msgid); + void mail_msg_wait_all(void); + int mail_msg_active(unsigned int msgid); + ++/* dispatch a message */ ++void mail_msg_main_loop_push (gpointer msg); ++void mail_msg_unordered_push (gpointer msg); ++void mail_msg_fast_ordered_push (gpointer msg); ++void mail_msg_slow_ordered_push (gpointer msg); ++ + /* To implement the stop button */ +-void *mail_cancel_hook_add(GDestroyNotify func, void *data); +-void mail_cancel_hook_remove(void *handle); +-void mail_cancel_all(void); ++GHook * mail_cancel_hook_add (GHookFunc func, gpointer data); ++void mail_cancel_hook_remove (GHook *hook); ++void mail_cancel_all (void); + + /* request a string/password */ + char *mail_get_password (CamelService *service, const char *prompt, +@@ -112,24 +129,6 @@ void *mail_call_main(mail_call_t type, M + void mail_enable_stop(void); + void mail_disable_stop(void); + +-/* a message port that receives messages in the gui thread, used for sending port */ +-extern EMsgPort *mail_gui_port; +-/* a message port that receives messages in the gui thread, used for the reply port */ +-extern EMsgPort *mail_gui_reply_port; +- +-/* some globally available threads */ +-#ifndef G_OS_WIN32 +-extern EThread *mail_thread_queued; /* for operations that can (or should) be queued */ +-#else +-EThread *mail_win32_get_mail_thread_queued (void); +-#define mail_thread_queued mail_win32_get_mail_thread_queued () +-#endif +-extern EThread *mail_thread_new; /* for operations that should run in a new thread each time */ +-extern EThread *mail_thread_queued_slow; /* for operations that can (or should) be queued, but take a long time */ +- +-/* The main thread. */ +-extern pthread_t mail_gui_thread; +- + /* A generic proxy event for anything that can be proxied during the life of the mailer (almost nothing) */ + /* Note that almost all objects care about the lifecycle of their events, so this cannot be used */ + extern MailAsyncEvent *mail_async_event; +diff -up evolution-2.10.3/mail/mail-ops.h.kill-ethread evolution-2.10.3/mail/mail-ops.h +--- evolution-2.10.3/mail/mail-ops.h.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-ops.h 2007-08-29 22:51:25.000000000 -0400 +@@ -30,13 +30,14 @@ extern "C" { + #pragma } + #endif /* __cplusplus */ + ++#include "mail-mt.h" ++ + #include "camel/camel-store.h" + #include "camel/camel-folder.h" + #include "camel/camel-filter-driver.h" + #include "camel/camel-mime-message.h" + #include "camel/camel-operation.h" + +-#include "libedataserver/e-msgport.h" + #include "libedataserver/e-account.h" + + void mail_append_mail (CamelFolder *folder, CamelMimeMessage *message, CamelMessageInfo *info, +@@ -55,12 +56,12 @@ void mail_transfer_messages (CamelFolder + void mail_get_message (CamelFolder *folder, const char *uid, + void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data), + void *data, +- EThread *thread); ++ MailMsgDispatchFunc dispatch); + + void + mail_get_messagex(CamelFolder *folder, const char *uid, + void (*done) (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data, CamelException *), +- void *data, EThread *thread); ++ void *data, MailMsgDispatchFunc dispatch); + + /* get several messages */ + void mail_get_messages (CamelFolder *folder, GPtrArray *uids, +@@ -70,7 +71,7 @@ void mail_get_messages (CamelFolder *fol + /* same for a folder */ + int mail_get_folder (const char *uri, guint32 flags, + void (*done) (char *uri, CamelFolder *folder, void *data), void *data, +- EThread *thread); ++ MailMsgDispatchFunc dispatch); + + /* and for a store */ + int mail_get_store (const char *uri, CamelOperation *op, +diff -up evolution-2.10.3/mail/em-composer-utils.c.kill-ethread evolution-2.10.3/mail/em-composer-utils.c +--- evolution-2.10.3/mail/em-composer-utils.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/em-composer-utils.c 2007-08-29 22:51:25.000000000 -0400 +@@ -534,7 +534,7 @@ em_utils_composer_save_draft_cb (EMsgCom + strcmp (account->drafts_folder_uri, default_drafts_folder_uri) != 0) { + int id; + +- id = mail_get_folder (account->drafts_folder_uri, 0, save_draft_folder, &folder, mail_thread_new); ++ id = mail_get_folder (account->drafts_folder_uri, 0, save_draft_folder, &folder, mail_msg_unordered_push); + mail_msg_wait (id); + + if (!folder || !account->enabled) { +@@ -1085,7 +1085,7 @@ em_utils_redirect_message_by_uid (CamelF + g_return_if_fail (CAMEL_IS_FOLDER (folder)); + g_return_if_fail (uid != NULL); + +- mail_get_message (folder, uid, redirect_msg, NULL, mail_thread_new); ++ mail_get_message (folder, uid, redirect_msg, NULL, mail_msg_unordered_push); + } + + static void +@@ -1116,7 +1116,7 @@ em_utils_handle_receipt (CamelFolder *fo + } + + if (msg == NULL) { +- mail_get_messagex(folder, uid, emu_handle_receipt_message, NULL, mail_thread_new); ++ mail_get_messagex(folder, uid, emu_handle_receipt_message, NULL, mail_msg_unordered_push); + camel_message_info_free(info); + return; + } +@@ -1916,7 +1916,7 @@ em_utils_reply_to_message(CamelFolder *f + rd->source = source; + if (rd->source) + g_object_ref(rd->source); +- mail_get_message(folder, uid, reply_to_message, rd, mail_thread_new); ++ mail_get_message(folder, uid, reply_to_message, rd, mail_msg_unordered_push); + + return; + } +@@ -2088,5 +2088,5 @@ em_utils_post_reply_to_message_by_uid (C + g_return_if_fail (CAMEL_IS_FOLDER (folder)); + g_return_if_fail (uid != NULL); + +- mail_get_message (folder, uid, post_reply_to_message, NULL, mail_thread_new); ++ mail_get_message (folder, uid, post_reply_to_message, NULL, mail_msg_unordered_push); + } +diff -up evolution-2.10.3/mail/mail-folder-cache.c.kill-ethread evolution-2.10.3/mail/mail-folder-cache.c +--- evolution-2.10.3/mail/mail-folder-cache.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-folder-cache.c 2007-08-29 22:51:25.000000000 -0400 +@@ -843,15 +843,14 @@ update_folders(CamelStore *store, CamelF + + + struct _ping_store_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelStore *store; + }; + +-static char * +-ping_store_desc (struct _mail_msg *mm, int done) ++static gchar * ++ping_store_desc (struct _ping_store_msg *m) + { +- struct _ping_store_msg *m = (struct _ping_store_msg *) mm; + char *service_name = camel_service_get_name (CAMEL_SERVICE (m->store), TRUE); + char *msg; + +@@ -862,10 +861,9 @@ ping_store_desc (struct _mail_msg *mm, i + } + + static void +-ping_store_ping (struct _mail_msg *mm) ++ping_store_exec (struct _ping_store_msg *m) + { + gboolean online = FALSE; +- struct _ping_store_msg *m = (struct _ping_store_msg *) mm; + + if (CAMEL_SERVICE (m->store)->status == CAMEL_SERVICE_CONNECTED) { + if (CAMEL_IS_DISCO_STORE (m->store) && +@@ -876,22 +874,21 @@ ping_store_ping (struct _mail_msg *mm) + online = TRUE; + } + if (online) +- camel_store_noop (m->store, &mm->ex); ++ camel_store_noop (m->store, &m->base.ex); + } + + static void +-ping_store_free (struct _mail_msg *mm) ++ping_store_free (struct _ping_store_msg *m) + { +- struct _ping_store_msg *m = (struct _ping_store_msg *) mm; +- + camel_object_unref (m->store); + } + +-static struct _mail_msg_op ping_store_op = { +- ping_store_desc, +- ping_store_ping, +- NULL, +- ping_store_free ++static MailMsgInfo ping_store_info = { ++ sizeof (struct _ping_store_msg), ++ (MailMsgDescFunc) ping_store_desc, ++ (MailMsgExecFunc) ping_store_exec, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) ping_store_free + }; + + static void +@@ -903,11 +900,11 @@ ping_store (gpointer key, gpointer val, + if (CAMEL_SERVICE (store)->status != CAMEL_SERVICE_CONNECTED) + return; + +- m = mail_msg_new (&ping_store_op, NULL, sizeof (struct _ping_store_msg)); ++ m = mail_msg_new (&ping_store_info); + m->store = store; + camel_object_ref (store); + +- e_thread_put (mail_thread_queued_slow, (EMsg *) m); ++ mail_msg_slow_ordered_push (m); + } + + static gboolean +@@ -952,7 +949,7 @@ mail_note_store(CamelStore *store, Camel + int hook = 0; + + g_assert(CAMEL_IS_STORE(store)); +- g_assert(pthread_equal(pthread_self(), mail_gui_thread)); ++ g_assert(mail_in_main_thread()); + + LOCK(info_lock); + +diff -up evolution-2.10.3/mail/em-folder-view.c.kill-ethread evolution-2.10.3/mail/em-folder-view.c +--- evolution-2.10.3/mail/em-folder-view.c.kill-ethread 2007-06-17 23:30:46.000000000 -0400 ++++ evolution-2.10.3/mail/em-folder-view.c 2007-08-29 22:51:25.000000000 -0400 +@@ -68,6 +68,7 @@ + #include + + #include ++#include + + #include "menus/gal-view-etable.h" + #include "menus/gal-view-factory-etable.h" +@@ -693,7 +694,7 @@ emfv_got_folder(char *uri, CamelFolder * + static void + emfv_set_folder_uri(EMFolderView *emfv, const char *uri) + { +- mail_get_folder(uri, 0, emfv_got_folder, emfv, mail_thread_queued); ++ mail_get_folder(uri, 0, emfv_got_folder, emfv, mail_msg_fast_ordered_push); + } + + static void +@@ -1651,7 +1652,7 @@ filter_type_uid (CamelFolder *folder, co + data->type = type; + data->source = source; + +- mail_get_message (folder, uid, filter_type_got_message, data, mail_thread_new); ++ mail_get_message (folder, uid, filter_type_got_message, data, mail_msg_unordered_push); + } + + static void +@@ -1749,7 +1750,7 @@ vfolder_type_uid (CamelFolder *folder, c + data->type = type; + data->uri = g_strdup (uri); + +- mail_get_message (folder, uid, vfolder_type_got_message, data, mail_thread_new); ++ mail_get_message (folder, uid, vfolder_type_got_message, data, mail_msg_unordered_push); + } + + static void +@@ -2408,7 +2409,7 @@ emfv_message_selected_timeout(void *data + g_object_ref (emfv); + /* TODO: we should manage our own thread stuff, would make cancelling outstanding stuff easier */ + e_profile_event_emit("goto.load", emfv->displayed_uid, 0); +- mail_get_messagex(emfv->folder, emfv->displayed_uid, emfv_list_done_message_selected, emfv, mail_thread_queued); ++ mail_get_messagex(emfv->folder, emfv->displayed_uid, emfv_list_done_message_selected, emfv, mail_msg_fast_ordered_push); + } else { + e_profile_event_emit("goto.empty", "", 0); + g_free(emfv->priv->selected_uid); +diff -up evolution-2.10.3/mail/mail-session.c.kill-ethread evolution-2.10.3/mail/mail-session.c +--- evolution-2.10.3/mail/mail-session.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-session.c 2007-08-29 22:51:25.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + + #include +-#include ++#include + + #include /* FIXME: this is where camel_init is defined, it shouldn't include everything else */ + #include +@@ -256,148 +256,145 @@ forget_password (CamelSession *session, + + /* ********************************************************************** */ + +-static GtkDialog *message_dialog; +-static EDList message_list = E_DLIST_INITIALISER(message_list); ++static gpointer user_message_dialog; ++static GQueue user_message_queue = { NULL, NULL, 0 }; + + struct _user_message_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelSessionAlertType type; + char *prompt; ++ EFlag *done; + + unsigned int allow_cancel:1; + unsigned int result:1; + unsigned int ismain:1; + }; + +-static void do_user_message (struct _mail_msg *mm); ++static void user_message_exec (struct _user_message_msg *m); + + /* clicked, send back the reply */ + static void + user_message_response (GtkDialog *dialog, int button, struct _user_message_msg *m) + { + gtk_widget_destroy ((GtkWidget *) dialog); +- +- message_dialog = NULL; +- ++ ++ user_message_dialog = NULL; ++ + /* if !allow_cancel, then we've already replied */ + if (m->allow_cancel) { + m->result = button == GTK_RESPONSE_OK; +- e_msgport_reply((EMsg *)m); ++ e_flag_set (m->done); + } + + /* check for pendings */ +- if ((m = (struct _user_message_msg *)e_dlist_remhead(&message_list))) +- do_user_message((struct _mail_msg *)m); +-} +- +-static void +-user_message_destroy_notify (struct _user_message_msg *m, GObject *deadbeef) +-{ +- message_dialog = NULL; ++ if (!g_queue_is_empty (&user_message_queue)) { ++ m = g_queue_pop_head (&user_message_queue); ++ user_message_exec (m); ++ mail_msg_unref (m); ++ } + } + +-/* This is kinda ugly/inefficient, but oh well, it works */ +-static const char *error_type[] = { +- "mail:session-message-info", "mail:session-message-warning", "mail:session-message-error", +- "mail:session-message-info-cancel", "mail:session-message-warning-cancel", "mail:session-message-error-cancel" +-}; +- + static void +-do_user_message (struct _mail_msg *mm) ++user_message_exec (struct _user_message_msg *m) + { +- struct _user_message_msg *m = (struct _user_message_msg *)mm; +- int type; ++ const gchar *error_type; + +- if (!m->ismain && message_dialog != NULL) { +- e_dlist_addtail (&message_list, (EDListNode *)m); ++ if (!m->ismain && user_message_dialog != NULL) { ++ g_queue_push_tail (&user_message_queue, mail_msg_ref (m)); + return; + } + + switch (m->type) { +- case CAMEL_SESSION_ALERT_INFO: +- type = 0; +- break; +- case CAMEL_SESSION_ALERT_WARNING: +- type = 1; +- break; +- case CAMEL_SESSION_ALERT_ERROR: +- type = 2; +- break; +- default: +- type = 0; +- } +- +- if (m->allow_cancel) +- type += 3; +- +- message_dialog = (GtkDialog *)e_error_new(NULL, error_type[type], m->prompt, NULL); +- g_object_set ((GObject *) message_dialog, "allow_shrink", TRUE, "allow_grow", TRUE, NULL); +- +- /* We only need to wait for the result if we allow cancel otherwise show but send result back instantly */ +- if (m->allow_cancel) { +- if (m->ismain) { +- user_message_response(message_dialog, gtk_dialog_run (message_dialog), m); +- } else { +- g_signal_connect (message_dialog, "response", G_CALLBACK (user_message_response), m); +- gtk_widget_show ((GtkWidget *) message_dialog); +- } ++ case CAMEL_SESSION_ALERT_INFO: ++ error_type = m->allow_cancel ? ++ "mail:session-message-info-cancel" : ++ "mail:session-message-info"; ++ break; ++ case CAMEL_SESSION_ALERT_WARNING: ++ error_type = m->allow_cancel ? ++ "mail:session-message-warning-cancel" : ++ "mail:session-message-warning"; ++ break; ++ case CAMEL_SESSION_ALERT_ERROR: ++ error_type = m->allow_cancel ? ++ "mail:session-message-error-cancel" : ++ "mail:session-message-error"; ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ user_message_dialog = e_error_new (NULL, error_type, m->prompt, NULL); ++ g_object_set ( ++ user_message_dialog, "allow_shrink", TRUE, ++ "allow_grow", TRUE, NULL); ++ ++ /* We only need to wait for the result if we allow cancel ++ * otherwise show but send result back instantly */ ++ if (m->allow_cancel && m->ismain) { ++ gint response = gtk_dialog_run (user_message_dialog); ++ user_message_response (user_message_dialog, response, m); + } else { +- g_signal_connect (message_dialog, "response", G_CALLBACK (gtk_widget_destroy), message_dialog); +- g_object_weak_ref ((GObject *) message_dialog, (GWeakNotify) user_message_destroy_notify, m); +- gtk_widget_show ((GtkWidget *) message_dialog); +- mail_msg_free(m); ++ g_signal_connect ( ++ user_message_dialog, "response", ++ G_CALLBACK (user_message_response), m); ++ gtk_widget_show (user_message_dialog); + } + } + + static void +-free_user_message(struct _mail_msg *mm) ++user_message_free (struct _user_message_msg *m) + { +- struct _user_message_msg *m = (struct _user_message_msg *)mm; +- + g_free(m->prompt); ++ e_flag_free(m->done); + } + +-static struct _mail_msg_op user_message_op = { NULL, do_user_message, NULL, free_user_message }; ++static MailMsgInfo user_message_info = { ++ sizeof (struct _user_message_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) user_message_exec, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) user_message_free ++}; + + static gboolean + alert_user(CamelSession *session, CamelSessionAlertType type, const char *prompt, gboolean cancel) + { + MailSession *mail_session = MAIL_SESSION (session); +- struct _user_message_msg *m, *r; +- EMsgPort *user_message_reply = NULL; +- gboolean ret; ++ struct _user_message_msg *m; ++ gboolean result = TRUE; + + if (!mail_session->interactive) + return FALSE; + +- if (cancel) +- user_message_reply = e_msgport_new (); +- m = mail_msg_new (&user_message_op, user_message_reply, sizeof (*m)); +- m->ismain = pthread_equal(pthread_self(), mail_gui_thread); ++ m = mail_msg_new (&user_message_info); ++ m->ismain = mail_in_main_thread (); + m->type = type; +- m->prompt = g_strdup(prompt); ++ m->prompt = g_strdup (prompt); ++ m->done = e_flag_new (); + m->allow_cancel = cancel; + +- if (m->ismain) +- do_user_message((struct _mail_msg *)m); +- else { +- extern EMsgPort *mail_gui_port2; ++ if (cancel) ++ mail_msg_ref (m); + +- e_msgport_put(mail_gui_port2, (EMsg *)m); +- } ++ if (m->ismain) ++ user_message_exec (m); ++ else ++ mail_msg_main_loop_push (m); + + if (cancel) { +- r = (struct _user_message_msg *)e_msgport_wait(user_message_reply); +- g_assert(m == r); ++ e_flag_wait (m->done); ++ result = m->result; ++ mail_msg_unref (m); ++ } + +- ret = m->result; +- mail_msg_free(m); +- e_msgport_destroy(user_message_reply); +- } else +- ret = TRUE; ++ if (m->ismain) { ++ user_message_free (m); ++ mail_msg_unref (m); ++ } + +- return ret; ++ return result; + } + + static CamelFolder * +@@ -533,7 +530,7 @@ get_filter_driver (CamelSession *session + /* TODO: This is very temporary, until we have a better way to do the progress reporting, + we just borrow a dummy mail-mt thread message and hook it onto out camel thread message */ + +-static mail_msg_op_t ms_thread_ops_dummy = { NULL }; ++static MailMsgInfo ms_thread_info_dummy = { sizeof (MailMsg) }; + + static void *ms_thread_msg_new(CamelSession *session, CamelSessionThreadOps *ops, unsigned int size) + { +@@ -542,7 +539,7 @@ static void *ms_thread_msg_new(CamelSess + /* We create a dummy mail_msg, and then copy its cancellation port over to ours, so + we get cancellation and progress in common with hte existing mail code, for free */ + if (msg) { +- struct _mail_msg *m = mail_msg_new(&ms_thread_ops_dummy, NULL, sizeof(struct _mail_msg)); ++ MailMsg *m = mail_msg_new(&ms_thread_info_dummy); + + msg->data = m; + camel_operation_unref(msg->op); +@@ -555,7 +552,7 @@ static void *ms_thread_msg_new(CamelSess + + static void ms_thread_msg_free(CamelSession *session, CamelSessionThreadMsg *m) + { +- mail_msg_free(m->data); ++ mail_msg_unref(m->data); + ms_parent_class->thread_msg_free(session, m); + } + +@@ -678,22 +675,23 @@ mail_session_set_interactive (gboolean i + MAIL_SESSION (session)->interactive = interactive; + + if (!interactive) { +- struct _user_message_msg *um; ++ struct _user_message_msg *msg; + + d(printf ("Gone non-interactive, checking for outstanding interactive tasks\n")); + + e_passwords_cancel(); + + /* flush/cancel pending user messages */ +- while ((um = (struct _user_message_msg *) e_dlist_remhead (&message_list))) { +- d(printf ("Flusing message request: %s\n", um->prompt)); +- e_msgport_reply((EMsg *) um); ++ while (!g_queue_is_empty (&user_message_queue)) { ++ msg = g_queue_pop_head (&user_message_queue); ++ e_flag_set (msg->done); ++ mail_msg_unref (msg); + } + + /* and the current */ +- if (message_dialog) { ++ if (user_message_dialog) { + d(printf("Destroying message dialogue\n")); +- gtk_widget_destroy ((GtkWidget *) message_dialog); ++ gtk_widget_destroy ((GtkWidget *) user_message_dialog); + } + } + } +diff -up evolution-2.10.3/mail/mail-mt.c.kill-ethread evolution-2.10.3/mail/mail-mt.c +--- evolution-2.10.3/mail/mail-mt.c.kill-ethread 2007-04-09 09:09:27.000000000 -0400 ++++ evolution-2.10.3/mail/mail-mt.c 2007-08-29 22:51:25.000000000 -0400 +@@ -29,8 +29,8 @@ + #include + #include + +-#include + #include ++#include + + #include + #include +@@ -63,7 +63,7 @@ static void mail_operation_status(struct + #endif + + /* background operation status stuff */ +-struct _mail_msg_priv { ++struct _MailMsgPrivate { + int activity_state; /* sigh sigh sigh, we need to keep track of the state external to the + pointer itself for locking/race conditions */ + int activity_id; +@@ -82,15 +82,12 @@ static GHashTable *mail_msg_active_table + static pthread_mutex_t mail_msg_lock = PTHREAD_MUTEX_INITIALIZER; + static pthread_cond_t mail_msg_cond = PTHREAD_COND_INITIALIZER; + +-pthread_t mail_gui_thread; +- + MailAsyncEvent *mail_async_event; + +-static void mail_msg_destroy(EThread *e, EMsg *msg, void *data); +- +-void *mail_msg_new(mail_msg_op_t *ops, EMsgPort *reply_port, size_t size) ++gpointer ++mail_msg_new (MailMsgInfo *info) + { +- struct _mail_msg *msg; ++ MailMsg *msg; + + MAIL_MT_LOCK(mail_msg_lock); + +@@ -112,7 +109,6 @@ void *mail_msg_new(mail_msg_op_t *ops, E + fprintf(log, "Logging async operations\n"); + + if (log_locks) { +- fprintf(log, "Logging lock operations, mail_gui_thread = %" G_GINT64_MODIFIER "x\n\n", e_util_pthread_id(mail_gui_thread)); + fprintf(log, "%" G_GINT64_MODIFIER "x: lock mail_msg_lock\n", e_util_pthread_id(pthread_self())); + } + } else { +@@ -122,13 +118,13 @@ void *mail_msg_new(mail_msg_op_t *ops, E + } + } + #endif +- msg = g_malloc0(size); +- msg->ops = ops; ++ msg = g_slice_alloc0 (info->size); ++ msg->info = info; ++ msg->ref_count = 1; + msg->seq = mail_msg_seq++; +- msg->msg.reply_port = reply_port; + msg->cancel = camel_operation_new(mail_operation_status, GINT_TO_POINTER(msg->seq)); + camel_exception_init(&msg->ex); +- msg->priv = g_malloc0(sizeof(*msg->priv)); ++ msg->priv = g_slice_new0 (MailMsgPrivate); + + g_hash_table_insert(mail_msg_active_table, GINT_TO_POINTER(msg->seq), msg); + +@@ -143,12 +139,15 @@ void *mail_msg_new(mail_msg_op_t *ops, E + return msg; + } + +- +-static void end_event_callback (CamelObject *o, void *event_data, void *data) ++static void ++end_event_callback (CamelObject *o, void *event_data, void *data) + { +- EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ()); ++ MailComponent *component; ++ EActivityHandler *activity_handler; + guint activity_id = GPOINTER_TO_INT (event_data); + ++ component = mail_component_peek (); ++ activity_handler = mail_component_peek_activity_handler (component); + e_activity_handler_operation_finished (activity_handler, activity_id); + } + +@@ -177,58 +176,93 @@ checkmem(void *p) + } + #endif + +-void mail_msg_free(void *msg) ++static void ++mail_msg_free (MailMsg *mail_msg) + { +- struct _mail_msg *m = msg; +- int activity_id; ++ /* XXX This function is broken out from mail_msg_unref() ++ * only for the benefit of op_status_exec() below. */ ++ ++ if (mail_msg->cancel != NULL) { ++ camel_operation_mute (mail_msg->cancel); ++ camel_operation_unref (mail_msg->cancel); ++ } ++ ++ camel_exception_clear (&mail_msg->ex); ++ g_slice_free (MailMsgPrivate, mail_msg->priv); ++ g_slice_free1 (mail_msg->info->size, mail_msg); ++} ++ ++gpointer ++mail_msg_ref (gpointer msg) ++{ ++ MailMsg *mail_msg = msg; ++ ++ g_return_val_if_fail (mail_msg != NULL, msg); ++ g_return_val_if_fail (mail_msg->ref_count > 0, msg); ++ ++ g_atomic_int_add (&mail_msg->ref_count, 1); ++ return msg; ++} ++ ++void ++mail_msg_unref (gpointer msg) ++{ ++ MailMsg *mail_msg = msg; ++ gint activity_id; ++ ++ g_return_if_fail (mail_msg != NULL); ++ g_return_if_fail (mail_msg->ref_count > 0); ++ ++ if (g_atomic_int_exchange_and_add (&mail_msg->ref_count, -1) > 1) ++ return; + + #ifdef MALLOC_CHECK +- checkmem(m); +- checkmem(m->cancel); +- checkmem(m->priv); ++ checkmem(mail_msg); ++ checkmem(mail_msg->cancel); ++ checkmem(mail_msg->priv); + #endif + d(printf("Free message %p\n", msg)); + +- if (m->ops->destroy_msg) +- m->ops->destroy_msg(m); ++ if (mail_msg->info->free) ++ mail_msg->info->free(mail_msg); + + MAIL_MT_LOCK(mail_msg_lock); + + #ifdef LOG_OPS +- if (log_ops) +- fprintf(log, "%p: Free (exception `%s')\n", msg, +- camel_exception_get_description(&m->ex)?camel_exception_get_description(&m->ex):"None"); ++ if (log_ops) { ++ const gchar *description; ++ ++ description = camel_exception_get_description (&mail_msg->ex); ++ if (description == NULL) ++ description = "None"; ++ fprintf(log, "%p: Free (exception `%s')\n", msg, description); ++ } + #endif +- g_hash_table_remove(mail_msg_active_table, GINT_TO_POINTER(m->seq)); +- pthread_cond_broadcast(&mail_msg_cond); ++ g_hash_table_remove ( ++ mail_msg_active_table, GINT_TO_POINTER (mail_msg->seq)); ++ pthread_cond_broadcast (&mail_msg_cond); + + /* We need to make sure we dont lose a reference here YUCK YUCK */ + /* This is tightly integrated with the code in do_op_status, + as it closely relates to the CamelOperation setup in msg_new() above */ +- if (m->priv->activity_state == 1) { +- m->priv->activity_state = 3; /* tell the other thread +- * to free it itself (yuck yuck) */ ++ if (mail_msg->priv->activity_state == 1) { ++ /* tell the other to free it itself */ ++ mail_msg->priv->activity_state = 3; + MAIL_MT_UNLOCK(mail_msg_lock); + return; + } else { +- activity_id = m->priv->activity_id; ++ activity_id = mail_msg->priv->activity_id; + } + + MAIL_MT_UNLOCK(mail_msg_lock); + +- if (m->cancel) { +- camel_operation_mute(m->cancel); +- camel_operation_unref(m->cancel); +- } +- +- camel_exception_clear(&m->ex); +- /*g_free(m->priv->what);*/ +- g_free(m->priv); +- g_free(m); ++ mail_msg_free (mail_msg); + + if (activity_id != 0) +- mail_async_event_emit(mail_async_event, MAIL_ASYNC_GUI, (MailAsyncFunc) end_event_callback, +- NULL, GINT_TO_POINTER (activity_id), NULL); ++ mail_async_event_emit ( ++ mail_async_event, MAIL_ASYNC_GUI, ++ (MailAsyncFunc) end_event_callback, ++ NULL, GINT_TO_POINTER (activity_id), NULL); + } + + /* hash table of ops->dialogue of active errors */ +@@ -244,9 +278,10 @@ static void error_response(GtkObject *o, + gtk_widget_destroy((GtkWidget *)o); + } + +-void mail_msg_check_error(void *msg) ++void ++mail_msg_check_error (gpointer msg) + { +- struct _mail_msg *m = msg; ++ MailMsg *m = msg; + char *what; + GtkDialog *gd; + +@@ -271,27 +306,27 @@ void mail_msg_check_error(void *msg) + /* check to see if we have dialogue already running for this operation */ + /* we key on the operation pointer, which is at least accurate enough + for the operation type, although it could be on a different object. */ +- if (g_hash_table_lookup(active_errors, m->ops)) { ++ if (g_hash_table_lookup(active_errors, m->info)) { + g_warning("Error occurred while existing dialogue active:\n%s", camel_exception_get_description(&m->ex)); + return; + } + +- if (m->ops->describe_msg +- && (what = m->ops->describe_msg(m, FALSE))) { ++ if (m->info->desc ++ && (what = m->info->desc (m))) { + gd = (GtkDialog *)e_error_new(NULL, "mail:async-error", what, camel_exception_get_description(&m->ex), NULL); + g_free(what); + } else + gd = (GtkDialog *)e_error_new(NULL, "mail:async-error-nodescribe", camel_exception_get_description(&m->ex), NULL); + +- g_hash_table_insert(active_errors, m->ops, gd); +- g_signal_connect(gd, "response", G_CALLBACK(error_response), m->ops); +- g_signal_connect(gd, "destroy", G_CALLBACK(error_destroy), m->ops); ++ g_hash_table_insert(active_errors, m->info, gd); ++ g_signal_connect(gd, "response", G_CALLBACK(error_response), m->info); ++ g_signal_connect(gd, "destroy", G_CALLBACK(error_destroy), m->info); + gtk_widget_show((GtkWidget *)gd); + } + + void mail_msg_cancel(unsigned int msgid) + { +- struct _mail_msg *m; ++ MailMsg *m; + + MAIL_MT_LOCK(mail_msg_lock); + m = g_hash_table_lookup(mail_msg_active_table, GINT_TO_POINTER(msgid)); +@@ -304,13 +339,12 @@ void mail_msg_cancel(unsigned int msgid) + + + /* waits for a message to be finished processing (freed) +- the messageid is from struct _mail_msg->seq */ ++ the messageid is from MailMsg->seq */ + void mail_msg_wait(unsigned int msgid) + { +- struct _mail_msg *m; +- int ismain = pthread_equal(pthread_self(), mail_gui_thread); ++ MailMsg *m; + +- if (ismain) { ++ if (mail_in_main_thread ()) { + MAIL_MT_LOCK(mail_msg_lock); + m = g_hash_table_lookup(mail_msg_active_table, GINT_TO_POINTER(msgid)); + while (m) { +@@ -347,9 +381,7 @@ int mail_msg_active(unsigned int msgid) + + void mail_msg_wait_all(void) + { +- int ismain = pthread_equal(pthread_self(), mail_gui_thread); +- +- if (ismain) { ++ if (mail_in_main_thread ()) { + MAIL_MT_LOCK(mail_msg_lock); + while (g_hash_table_size(mail_msg_active_table) > 0) { + MAIL_MT_UNLOCK(mail_msg_lock); +@@ -367,294 +399,239 @@ void mail_msg_wait_all(void) + } + + /* **************************************** */ +-struct _cancel_hook_data { +- struct _cancel_hook_data *next; +- struct _cancel_hook_data *prev; + +- GDestroyNotify func; +- void *data; +-}; ++static GHookList cancel_hook_list; + +-static EDList cancel_hook_list = E_DLIST_INITIALISER(cancel_hook_list); +- +-void *mail_cancel_hook_add(GDestroyNotify func, void *data) ++GHook * ++mail_cancel_hook_add (GHookFunc func, gpointer data) + { +- struct _cancel_hook_data *d; ++ GHook *hook; + +- d = g_malloc0(sizeof(*d)); +- d->func = func; +- d->data = data; ++ MAIL_MT_LOCK (mail_msg_lock); + +- MAIL_MT_LOCK(mail_msg_lock); +- e_dlist_addtail(&cancel_hook_list, (EDListNode *)d); +- MAIL_MT_UNLOCK(mail_msg_lock); ++ if (!cancel_hook_list.is_setup) ++ g_hook_list_init (&cancel_hook_list, sizeof (GHook)); + +- return (void *)d; +-} ++ hook = g_hook_alloc (&cancel_hook_list); ++ hook->func = func; ++ hook->data = data; + +-void mail_cancel_hook_remove(void *handle) +-{ +- struct _cancel_hook_data *d = handle; ++ g_hook_append (&cancel_hook_list, hook); + +- MAIL_MT_LOCK(mail_msg_lock); +- e_dlist_remove((EDListNode *)d); +- MAIL_MT_UNLOCK(mail_msg_lock); +- g_free(d); ++ MAIL_MT_UNLOCK (mail_msg_lock); ++ ++ return hook; + } + +-void mail_cancel_all(void) ++void ++mail_cancel_hook_remove (GHook *hook) + { +- struct _cancel_hook_data *d, *n; ++ MAIL_MT_LOCK (mail_msg_lock); + +- camel_operation_cancel(NULL); ++ g_assert (cancel_hook_list.is_setup); ++ g_hook_destroy_link (&cancel_hook_list, hook); + +- /* I can ssee a deadlock coming on ... */ +- MAIL_MT_LOCK(mail_msg_lock); +- d = (struct _cancel_hook_data *)cancel_hook_list.head; +- n = d->next; +- while (n) { +- d->func(d->data); +- d = n; +- n = n->next; +- } +- MAIL_MT_UNLOCK(mail_msg_lock); ++ MAIL_MT_UNLOCK (mail_msg_lock); + } + +-EMsgPort *mail_gui_port; +-static GIOChannel *mail_gui_channel; +-static guint mail_gui_watch; +- +-/* TODO: Merge these, gui_port2 doesn't do any mail_msg processing on the request (replies, forwards, frees) */ +-EMsgPort *mail_gui_port2; +-static GIOChannel *mail_gui_channel2; +-static guint mail_gui_watch2; +- +-EMsgPort *mail_gui_reply_port; +-static GIOChannel *mail_gui_reply_channel; +- +-/* a couple of global threads available */ +-#ifdef G_OS_WIN32 +-#undef mail_thread_queued +-static +-#endif +-EThread *mail_thread_queued; /* for operations that can (or should) be queued */ +-EThread *mail_thread_queued_slow; /* for operations that can (or should) be queued, but take a long time */ +-EThread *mail_thread_new; /* for operations that should run in a new thread each time */ +- +-#ifdef G_OS_WIN32 +-EThread * +-mail_win32_get_mail_thread_queued (void) ++void ++mail_cancel_all (void) + { +- return mail_thread_queued; ++ camel_operation_cancel (NULL); ++ ++ MAIL_MT_LOCK (mail_msg_lock); ++ ++ if (cancel_hook_list.is_setup) ++ g_hook_list_invoke (&cancel_hook_list, FALSE); ++ ++ MAIL_MT_UNLOCK (mail_msg_lock); + } +-#endif ++ ++static guint idle_source_id = 0; ++G_LOCK_DEFINE_STATIC (idle_source_id); ++static GAsyncQueue *main_loop_queue = NULL; ++static GAsyncQueue *msg_reply_queue = NULL; ++static GThread *main_thread = NULL; + + static gboolean +-mail_msgport_replied(GIOChannel *source, GIOCondition cond, void *d) ++mail_msg_idle_cb (void) + { +- EMsgPort *port = (EMsgPort *)d; +- mail_msg_t *m; ++ MailMsg *msg; + +- while (( m = (mail_msg_t *)e_msgport_get(port))) { ++ g_assert (main_loop_queue != NULL); ++ g_assert (msg_reply_queue != NULL); + +-#ifdef MALLOC_CHECK +- checkmem(m); +- checkmem(m->cancel); +- checkmem(m->priv); +-#endif +- +-#ifdef LOG_OPS +- if (log_ops) +- fprintf(log, "%p: Replied to GUI thread (exception `%s'\n", m, +- camel_exception_get_description(&m->ex)?camel_exception_get_description(&m->ex):"None"); +-#endif +- +- if (m->ops->reply_msg) +- m->ops->reply_msg(m); +- mail_msg_check_error(m); +- mail_msg_free(m); ++ G_LOCK (idle_source_id); ++ idle_source_id = 0; ++ G_UNLOCK (idle_source_id); ++ ++ /* check the main loop queue */ ++ while ((msg = g_async_queue_try_pop (main_loop_queue)) != NULL) { ++ if (msg->info->exec != NULL) ++ msg->info->exec (msg); ++ if (msg->info->done != NULL) ++ msg->info->done (msg); ++ mail_msg_unref (msg); ++ } ++ ++ /* check the reply queue */ ++ while ((msg = g_async_queue_try_pop (msg_reply_queue)) != NULL) { ++ if (msg->info->done != NULL) ++ msg->info->done (msg); ++ mail_msg_check_error (msg); ++ mail_msg_unref (msg); + } + +- return TRUE; ++ return FALSE; + } + +-static gboolean +-mail_msgport_received(GIOChannel *source, GIOCondition cond, void *d) ++static void ++mail_msg_proxy (MailMsg *msg) + { +- EMsgPort *port = (EMsgPort *)d; +- mail_msg_t *m; +- +- while (( m = (mail_msg_t *)e_msgport_get(port))) { +-#ifdef MALLOC_CHECK +- checkmem(m); +- checkmem(m->cancel); +- checkmem(m->priv); +-#endif +- +-#ifdef LOG_OPS +- if (log_ops) +- fprintf(log, "%p: Received at GUI thread\n", m); +-#endif +- +- if (m->ops->receive_msg) +- m->ops->receive_msg(m); +- if (m->msg.reply_port) +- e_msgport_reply((EMsg *)m); +- else { +- if (m->ops->reply_msg) +- m->ops->reply_msg(m); +- mail_msg_free(m); +- } ++ if (msg->info->desc != NULL) { ++ gchar *text = msg->info->desc (msg); ++ camel_operation_register (msg->cancel); ++ camel_operation_start (msg->cancel, "%s", text); ++ g_free (text); ++ } ++ ++ if (msg->info->exec != NULL) { ++ mail_enable_stop (); ++ msg->info->exec (msg); ++ mail_disable_stop (); ++ } ++ ++ if (msg->info->desc != NULL) { ++ camel_operation_end (msg->cancel); ++ camel_operation_unregister (msg->cancel); ++ MAIL_MT_LOCK (mail_msg_lock); ++ camel_operation_unref (msg->cancel); ++ msg->cancel = NULL; ++ MAIL_MT_UNLOCK (mail_msg_lock); + } + +- return TRUE; ++ g_async_queue_push (msg_reply_queue, msg); ++ ++ G_LOCK (idle_source_id); ++ if (idle_source_id == 0) ++ idle_source_id = g_idle_add ( ++ (GSourceFunc) mail_msg_idle_cb, NULL); ++ G_UNLOCK (idle_source_id); + } + +-/* Test code, lighterwight, more configurable calls */ +-static gboolean +-mail_msgport_received2(GIOChannel *source, GIOCondition cond, void *d) ++void ++mail_msg_cleanup (void) + { +- EMsgPort *port = (EMsgPort *)d; +- mail_msg_t *m; ++ mail_msg_wait_all(); + +- while (( m = (mail_msg_t *)e_msgport_get(port))) { +-#ifdef LOG_OPS +- if (log_ops) +- fprintf(log, "%p: Received at GUI2 thread\n", m); +-#endif ++ G_LOCK (idle_source_id); ++ if (idle_source_id != 0) { ++ GSource *source; + +- if (m->ops->receive_msg) +- m->ops->receive_msg(m); +- else +- mail_msg_free(m); ++ /* Cancel the idle source. */ ++ source = g_main_context_find_source_by_id ( ++ g_main_context_default (), idle_source_id); ++ g_assert (source != NULL); ++ g_source_destroy (source); ++ idle_source_id = 0; + } ++ G_UNLOCK (idle_source_id); + +- return TRUE; +-} ++ g_assert (main_loop_queue != NULL); ++ g_async_queue_unref (main_loop_queue); ++ main_loop_queue = NULL; + ++ g_assert (msg_reply_queue != NULL); ++ g_async_queue_unref (msg_reply_queue); ++ msg_reply_queue = NULL; ++} + +-static void +-mail_msg_destroy(EThread *e, EMsg *msg, void *data) ++void ++mail_msg_init (void) + { +- mail_msg_t *m = (mail_msg_t *)msg; ++ main_loop_queue = g_async_queue_new (); ++ msg_reply_queue = g_async_queue_new (); + +-#ifdef MALLOC_CHECK +- checkmem(m); +- checkmem(m->cancel); +- checkmem(m->priv); +-#endif ++ mail_msg_active_table = g_hash_table_new (NULL, NULL); ++ main_thread = g_thread_self (); + +- mail_msg_free(m); ++ mail_async_event = mail_async_event_new (); + } + +-static void +-mail_msg_received(EThread *e, EMsg *msg, void *data) ++static gint ++mail_msg_compare (const MailMsg *msg1, const MailMsg *msg2) + { +- mail_msg_t *m = (mail_msg_t *)msg; ++ gint priority1 = msg1->priority; ++ gint priority2 = msg2->priority; + +-#ifdef MALLOC_CHECK +- checkmem(m); +- checkmem(m->cancel); +- checkmem(m->priv); +-#endif +- +- if (m->ops->describe_msg) { +- char *text = m->ops->describe_msg(m, FALSE); ++ if (priority1 == priority2) ++ return 0; + +-#ifdef LOG_OPS +- if (log_ops) +- fprintf(log, "%p: Received at thread %" G_GINT64_MODIFIER "x: '%s'\n", m, e_util_pthread_id(pthread_self()), text); +-#endif ++ return (priority1 < priority2) ? 1 : -1; ++} + +- d(printf("message received at thread\n")); +- camel_operation_register(m->cancel); +- camel_operation_start(m->cancel, "%s", text); +- g_free(text); +- } +-#ifdef LOG_OPS +- else +- if (log_ops) +- fprintf(log, "%p: Received at thread %" G_GINT64_MODIFIER "x\n", m, e_util_pthread_id(pthread_self())); +-#endif ++static gpointer ++create_thread_pool (gpointer data) ++{ ++ GThreadPool *thread_pool; ++ gint max_threads = GPOINTER_TO_INT (data); + +- if (m->ops->receive_msg) { +- mail_enable_stop(); +- m->ops->receive_msg(m); +- mail_disable_stop(); +- } ++ /* once created, run forever */ ++ thread_pool = g_thread_pool_new ( ++ (GFunc) mail_msg_proxy, NULL, max_threads, FALSE, NULL); ++ g_thread_pool_set_sort_function ( ++ thread_pool, (GCompareDataFunc) mail_msg_compare, NULL); + +- if (m->ops->describe_msg) { +- camel_operation_end(m->cancel); +- camel_operation_unregister(m->cancel); +- MAIL_MT_LOCK(mail_msg_lock); +- camel_operation_unref(m->cancel); +- m->cancel = NULL; +- MAIL_MT_UNLOCK(mail_msg_lock); +- } ++ return thread_pool; + } + +-void mail_msg_cleanup(void) ++void ++mail_msg_main_loop_push (gpointer msg) + { +- mail_msg_wait_all(); ++ g_async_queue_push_sorted (main_loop_queue, msg, ++ (GCompareDataFunc) mail_msg_compare, NULL); + +- e_thread_destroy(mail_thread_queued_slow); +- e_thread_destroy(mail_thread_queued); +- e_thread_destroy(mail_thread_new); ++ G_LOCK (idle_source_id); ++ if (idle_source_id == 0) ++ idle_source_id = g_idle_add ( ++ (GSourceFunc) mail_msg_idle_cb, NULL); ++ G_UNLOCK (idle_source_id); ++} ++ ++void ++mail_msg_unordered_push (gpointer msg) ++{ ++ static GOnce once = G_ONCE_INIT; + +- g_io_channel_unref(mail_gui_channel); +- g_io_channel_unref(mail_gui_reply_channel); ++ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (10)); + +- e_msgport_destroy(mail_gui_port); +- e_msgport_destroy(mail_gui_reply_port); ++ g_thread_pool_push ((GThreadPool *) once.retval, msg, NULL); + } + +-static guint +-em_channel_setup(EMsgPort **port, GIOChannel **channel, GIOFunc func) ++void ++mail_msg_fast_ordered_push (gpointer msg) + { +- GSource *source; +- guint id; ++ static GOnce once = G_ONCE_INIT; + +- *port = e_msgport_new(); +-#ifndef G_OS_WIN32 +- *channel = g_io_channel_unix_new(e_msgport_fd(*port)); +-#else +- *channel = g_io_channel_win32_new_socket(e_msgport_fd(*port)); +-#endif +- source = g_io_create_watch(*channel, G_IO_IN); +- g_source_set_callback(source, (GSourceFunc)func, *port, NULL); +- g_source_set_can_recurse(source, FALSE); +- id = g_source_attach(source, NULL); +- g_source_unref(source); ++ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (1)); + +- return id; ++ g_thread_pool_push ((GThreadPool *) once.retval, msg, NULL); + } + +-void mail_msg_init(void) ++void ++mail_msg_slow_ordered_push (gpointer msg) + { +- em_channel_setup(&mail_gui_reply_port, &mail_gui_reply_channel, mail_msgport_replied); +- mail_gui_watch = em_channel_setup(&mail_gui_port, &mail_gui_channel, mail_msgport_received); +- mail_gui_watch2 = em_channel_setup(&mail_gui_port2, &mail_gui_channel2, mail_msgport_received2); +- +- mail_thread_queued = e_thread_new(E_THREAD_QUEUE); +- e_thread_set_msg_destroy(mail_thread_queued, mail_msg_destroy, 0); +- e_thread_set_msg_received(mail_thread_queued, mail_msg_received, 0); +- e_thread_set_reply_port(mail_thread_queued, mail_gui_reply_port); +- +- mail_thread_queued_slow = e_thread_new(E_THREAD_QUEUE); +- e_thread_set_msg_destroy(mail_thread_queued_slow, mail_msg_destroy, 0); +- e_thread_set_msg_received(mail_thread_queued_slow, mail_msg_received, 0); +- e_thread_set_reply_port(mail_thread_queued_slow, mail_gui_reply_port); +- +- mail_thread_new = e_thread_new(E_THREAD_NEW); +- e_thread_set_msg_destroy(mail_thread_new, mail_msg_destroy, 0); +- e_thread_set_msg_received(mail_thread_new, mail_msg_received, 0); +- e_thread_set_reply_port(mail_thread_new, mail_gui_reply_port); +- e_thread_set_queue_limit(mail_thread_new, 10); ++ static GOnce once = G_ONCE_INIT; ++ ++ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (1)); + +- mail_msg_active_table = g_hash_table_new(NULL, NULL); +- mail_gui_thread = pthread_self(); ++ g_thread_pool_push ((GThreadPool *) once.retval, msg, NULL); ++} + +- mail_async_event = mail_async_event_new(); ++gboolean ++mail_in_main_thread (void) ++{ ++ return (g_thread_self () == main_thread); + } + + /* ********************************************************************** */ +@@ -665,7 +642,8 @@ static pthread_mutex_t status_lock = PTH + /* ********************************************************************** */ + + struct _proxy_msg { +- struct _mail_msg msg; ++ MailMsg base; ++ + MailAsyncEvent *ea; + mail_async_event_t type; + +@@ -679,10 +657,8 @@ struct _proxy_msg { + }; + + static void +-do_async_event(struct _mail_msg *mm) ++do_async_event(struct _proxy_msg *m) + { +- struct _proxy_msg *m = (struct _proxy_msg *)mm; +- + m->thread = pthread_self(); + m->have_thread = TRUE; + m->func(m->o, m->event_data, m->data); +@@ -697,16 +673,17 @@ static int + idle_async_event(void *mm) + { + do_async_event(mm); +- mail_msg_free(mm); ++ mail_msg_unref(mm); + + return FALSE; + } + +-static struct _mail_msg_op async_event_op = { +- NULL, +- do_async_event, +- NULL, +- NULL, ++static MailMsgInfo async_event_info = { ++ sizeof (struct _proxy_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) do_async_event, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) NULL + }; + + MailAsyncEvent *mail_async_event_new(void) +@@ -723,10 +700,9 @@ int mail_async_event_emit(MailAsyncEvent + { + struct _proxy_msg *m; + int id; +- int ismain = pthread_equal(pthread_self(), mail_gui_thread); + + /* we dont have a reply port for this, we dont care when/if it gets executed, just queue it */ +- m = mail_msg_new(&async_event_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&async_event_info); + m->func = func; + m->o = o; + m->event_data = event_data; +@@ -735,7 +711,7 @@ int mail_async_event_emit(MailAsyncEvent + m->type = type; + m->have_thread = FALSE; + +- id = m->msg.seq; ++ id = m->base.seq; + g_mutex_lock(ea->lock); + ea->tasks = g_slist_prepend(ea->tasks, m); + g_mutex_unlock(ea->lock); +@@ -743,12 +719,12 @@ int mail_async_event_emit(MailAsyncEvent + /* We use an idle function instead of our own message port only because the + gui message ports's notification buffer might overflow and deadlock us */ + if (type == MAIL_ASYNC_GUI) { +- if (ismain) ++ if (mail_in_main_thread ()) + g_idle_add(idle_async_event, m); + else +- e_msgport_put(mail_gui_port, (EMsg *)m); ++ mail_msg_main_loop_push(m); + } else +- e_thread_put(mail_thread_queued, (EMsg *)m); ++ mail_msg_fast_ordered_push (m); + + return id; + } +@@ -762,7 +738,7 @@ int mail_async_event_destroy(MailAsyncEv + g_mutex_lock(ea->lock); + while (ea->tasks) { + m = ea->tasks->data; +- id = m->msg.seq; ++ id = m->base.seq; + if (m->have_thread && pthread_equal(m->thread, thread)) { + g_warning("Destroying async event from inside an event, returning EDEADLK"); + g_mutex_unlock(ea->lock); +@@ -784,17 +760,18 @@ int mail_async_event_destroy(MailAsyncEv + /* ********************************************************************** */ + + struct _call_msg { +- struct _mail_msg msg; ++ MailMsg base; ++ + mail_call_t type; + MailMainFunc func; + void *ret; + va_list ap; ++ EFlag *done; + }; + + static void +-do_call(struct _mail_msg *mm) ++do_call(struct _call_msg *m) + { +- struct _call_msg *m = (struct _call_msg *)mm; + void *p1, *p2, *p3, *p4, *p5; + int i1; + va_list ap; +@@ -842,45 +819,47 @@ do_call(struct _mail_msg *mm) + m->ret = m->func(p1, p2, i1, p3, p4, p5); + break; + } ++ ++ if (m->done != NULL) ++ e_flag_set (m->done); + } + +-static struct _mail_msg_op mail_call_op = { +- NULL, +- do_call, +- NULL, +- NULL, ++static MailMsgInfo mail_call_info = { ++ sizeof (struct _call_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) do_call, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) NULL + }; + +-void *mail_call_main(mail_call_t type, MailMainFunc func, ...) ++void * ++mail_call_main (mail_call_t type, MailMainFunc func, ...) + { + struct _call_msg *m; + void *ret; + va_list ap; +- EMsgPort *reply = NULL; +- int ismain = pthread_equal(pthread_self(), mail_gui_thread); + + va_start(ap, func); + +- if (!ismain) +- reply = e_msgport_new(); +- +- m = mail_msg_new(&mail_call_op, reply, sizeof(*m)); ++ m = mail_msg_new (&mail_call_info); + m->type = type; + m->func = func; + G_VA_COPY(m->ap, ap); + +- if (!ismain) { +- e_msgport_put(mail_gui_port, (EMsg *)m); +- e_msgport_wait(reply); +- e_msgport_destroy(reply); +- } else { +- do_call(&m->msg); ++ if (mail_in_main_thread ()) ++ do_call (m); ++ else { ++ mail_msg_ref (m); ++ m->done = e_flag_new (); ++ mail_msg_main_loop_push (m); ++ e_flag_wait (m->done); ++ e_flag_free (m->done); + } + + va_end(ap); + + ret = m->ret; +- mail_msg_free(m); ++ mail_msg_unref (m); + + return ret; + } +@@ -889,40 +868,42 @@ void *mail_call_main(mail_call_t type, M + /* locked via status_lock */ + static int busy_state; + +-static void do_set_busy(struct _mail_msg *mm) ++static void ++do_set_busy(MailMsg *mm) + { + set_stop(busy_state > 0); + } + +-static struct _mail_msg_op set_busy_op = { +- NULL, +- do_set_busy, +- NULL, +- NULL, ++static MailMsgInfo set_busy_info = { ++ sizeof (MailMsg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) do_set_busy, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) NULL + }; + + void mail_enable_stop(void) + { +- struct _mail_msg *m; ++ MailMsg *m; + + MAIL_MT_LOCK(status_lock); + busy_state++; + if (busy_state == 1) { +- m = mail_msg_new(&set_busy_op, NULL, sizeof(*m)); +- e_msgport_put(mail_gui_port, (EMsg *)m); ++ m = mail_msg_new(&set_busy_info); ++ mail_msg_main_loop_push(m); + } + MAIL_MT_UNLOCK(status_lock); + } + + void mail_disable_stop(void) + { +- struct _mail_msg *m; ++ MailMsg *m; + + MAIL_MT_LOCK(status_lock); + busy_state--; + if (busy_state == 0) { +- m = mail_msg_new(&set_busy_op, NULL, sizeof(*m)); +- e_msgport_put(mail_gui_port, (EMsg *)m); ++ m = mail_msg_new(&set_busy_info); ++ mail_msg_main_loop_push(m); + } + MAIL_MT_UNLOCK(status_lock); + } +@@ -930,7 +911,7 @@ void mail_disable_stop(void) + /* ******************************************************************************** */ + + struct _op_status_msg { +- struct _mail_msg msg; ++ MailMsg base; + + struct _CamelOperation *op; + char *what; +@@ -938,16 +919,16 @@ struct _op_status_msg { + void *data; + }; + +-static void do_op_status(struct _mail_msg *mm) ++static void ++op_status_exec (struct _op_status_msg *m) + { + EActivityHandler *activity_handler = mail_component_peek_activity_handler (mail_component_peek ()); +- struct _op_status_msg *m = (struct _op_status_msg *)mm; +- struct _mail_msg *msg; +- struct _mail_msg_priv *data; ++ MailMsg *msg; ++ MailMsgPrivate *data; + char *out, *p, *o, c; + int pc; + +- g_assert (pthread_equal(mail_gui_thread, pthread_self ())); ++ g_assert (mail_in_main_thread ()); + + MAIL_MT_LOCK (mail_msg_lock); + +@@ -986,8 +967,8 @@ static void do_op_status(struct _mail_ms + progress_icon = e_icon_factory_get_icon ("stock_mail-unread", E_ICON_SIZE_MENU); + + MAIL_MT_UNLOCK (mail_msg_lock); +- if (msg->ops->describe_msg) +- what = msg->ops->describe_msg (msg, FALSE); ++ if (msg->info->desc) ++ what = msg->info->desc (msg); + /* uncommenting because message is not very useful for a user, see bug 271734*/ + else { + what = g_strdup(""); +@@ -1001,11 +982,7 @@ static void do_op_status(struct _mail_ms + MAIL_MT_LOCK (mail_msg_lock); + if (data->activity_state == 3) { + MAIL_MT_UNLOCK (mail_msg_lock); +- if (msg->cancel) +- camel_operation_unref (msg->cancel); +- camel_exception_clear (&msg->ex); +- g_free (msg->priv); +- g_free (msg); ++ mail_msg_free (msg); + } else { + data->activity_state = 2; + MAIL_MT_UNLOCK (mail_msg_lock); +@@ -1021,18 +998,17 @@ static void do_op_status(struct _mail_ms + } + + static void +-do_op_status_free (struct _mail_msg *mm) ++op_status_free (struct _op_status_msg *m) + { +- struct _op_status_msg *m = (struct _op_status_msg *)mm; +- + g_free (m->what); + } + +-static struct _mail_msg_op op_status_op = { +- NULL, +- do_op_status, +- NULL, +- do_op_status_free, ++static MailMsgInfo op_status_info = { ++ sizeof (struct _op_status_msg), ++ (MailMsgDescFunc) NULL, ++ (MailMsgExecFunc) op_status_exec, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) op_status_free + }; + + static void +@@ -1042,7 +1018,7 @@ mail_operation_status (struct _CamelOper + + d(printf("got operation statys: %s %d%%\n", what, pc)); + +- m = mail_msg_new(&op_status_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&op_status_info); + m->op = op; + m->what = g_strdup(what); + switch (pc) { +@@ -1055,7 +1031,7 @@ mail_operation_status (struct _CamelOper + } + m->pc = pc; + m->data = data; +- e_msgport_put(mail_gui_port, (EMsg *)m); ++ mail_msg_main_loop_push(m); + } + + /* ******************** */ +diff -up evolution-2.10.3/plugins/folder-unsubscribe/folder-unsubscribe.c.kill-ethread evolution-2.10.3/plugins/folder-unsubscribe/folder-unsubscribe.c +--- evolution-2.10.3/plugins/folder-unsubscribe/folder-unsubscribe.c.kill-ethread 2007-04-09 09:09:11.000000000 -0400 ++++ evolution-2.10.3/plugins/folder-unsubscribe/folder-unsubscribe.c 2007-08-29 22:51:25.000000000 -0400 +@@ -44,32 +44,30 @@ void org_gnome_mail_folder_unsubscribe ( + + + struct _folder_unsub_t { +- struct _mail_msg msg; ++ MailMsg base; + + char *uri; + }; + +-static char * +-folder_unsubscribe__desc (struct _mail_msg *mm, int done) ++static gchar * ++folder_unsubscribe_desc (struct _folder_unsub_t *msg) + { +- struct _folder_unsub_t *unsub = (struct _folder_unsub_t *) mm; +- +- return g_strdup_printf (_("Unsubscribing from folder \"%s\""), unsub->uri); ++ return g_strdup_printf ( ++ _("Unsubscribing from folder \"%s\""), msg->uri); + } + + static void +-folder_unsubscribe__unsub (struct _mail_msg *mm) ++folder_unsubscribe_exec (struct _folder_unsub_t *msg) + { +- struct _folder_unsub_t *unsub = (struct _folder_unsub_t *) mm; + extern CamelSession *session; + const char *path = NULL; + CamelStore *store; + CamelURL *url; + +- if (!(store = camel_session_get_store (session, unsub->uri, &mm->ex))) ++ if (!(store = camel_session_get_store (session, msg->uri, &mm->ex))) + return; + +- url = camel_url_new (unsub->uri, NULL); ++ url = camel_url_new (msg->uri, NULL); + if (((CamelService *) store)->provider->url_flags & CAMEL_URL_FRAGMENT_IS_PATH) + path = url->fragment; + else if (url->path && url->path[0]) +@@ -82,18 +80,17 @@ folder_unsubscribe__unsub (struct _mail_ + } + + static void +-folder_unsubscribe__free (struct _mail_msg *mm) ++folder_unsubscribe_free (struct _folder_unsub_t *msg) + { +- struct _folder_unsub_t *unsub = (struct _folder_unsub_t *) mm; +- +- g_free (unsub->uri); ++ g_free (msg->uri); + } + +-static struct _mail_msg_op unsubscribe_op = { +- folder_unsubscribe__desc, +- folder_unsubscribe__unsub, +- NULL, +- folder_unsubscribe__free, ++static MailMsgInfo unsubscribe_info = { ++ sizeof (struct _folder_unsub_t), ++ (MailMsgDescFunc) folder_unsubscribe_desc, ++ (MailMsgExecFunc) folder_unsubscribe_exec, ++ (MailMsgDoneFunc) NULL, ++ (MailMsgFreeFunc) folder_unsubscribe_free + }; + + +@@ -105,8 +102,8 @@ org_gnome_mail_folder_unsubscribe (EPlug + if (target->uri == NULL) + return; + +- unsub = mail_msg_new (&unsubscribe_op, NULL, sizeof (struct _folder_unsub_t)); ++ unsub = mail_msg_new (&unsubscribe_info); + unsub->uri = g_strdup (target->uri); + +- e_thread_put (mail_thread_new, (EMsg *) unsub); ++ mail_msg_unordered_push (unsub); + } +diff -up evolution-2.10.3/plugins/mark-all-read/mark-all-read.c.kill-ethread evolution-2.10.3/plugins/mark-all-read/mark-all-read.c +--- evolution-2.10.3/plugins/mark-all-read/mark-all-read.c.kill-ethread 2007-05-27 14:21:10.000000000 -0400 ++++ evolution-2.10.3/plugins/mark-all-read/mark-all-read.c 2007-08-29 22:51:25.000000000 -0400 +@@ -44,7 +44,7 @@ org_gnome_mark_all_read (EPlugin *ep, EM + return; + } + +- mail_get_folder(t->uri, 0, mar_got_folder, NULL, mail_thread_new); ++ mail_get_folder(t->uri, 0, mar_got_folder, NULL, mail_msg_unordered_push); + } + + static void +diff -up evolution-2.10.3/plugins/exchange-operations/exchange-folder.c.kill-ethread evolution-2.10.3/plugins/exchange-operations/exchange-folder.c +--- evolution-2.10.3/plugins/exchange-operations/exchange-folder.c.kill-ethread 2007-05-25 02:43:33.000000000 -0400 ++++ evolution-2.10.3/plugins/exchange-operations/exchange-folder.c 2007-08-29 22:51:25.000000000 -0400 +@@ -140,7 +140,7 @@ org_gnome_exchange_folder_inbox_unsubscr + inbox_physical_uri = e_folder_get_physical_uri (inbox); + + /* To get the CamelStore/Folder */ +- mail_get_folder (inbox_physical_uri, 0, exchange_get_folder, target_uri, mail_thread_new); ++ mail_get_folder (inbox_physical_uri, 0, exchange_get_folder, target_uri, mail_msg_unordered_push); + + + } +diff -up evolution-2.10.3/plugins/save-attachments/save-attachments.c.kill-ethread evolution-2.10.3/plugins/save-attachments/save-attachments.c +--- evolution-2.10.3/plugins/save-attachments/save-attachments.c.kill-ethread 2007-04-09 09:09:15.000000000 -0400 ++++ evolution-2.10.3/plugins/save-attachments/save-attachments.c 2007-08-29 22:51:25.000000000 -0400 +@@ -407,5 +407,5 @@ org_gnome_save_attachments_save(EPlugin + camel_object_ref(data->folder); + data->uid = g_strdup(target->uids->pdata[0]); + +- mail_get_message(data->folder, data->uid, save_got_message, data, mail_thread_new); ++ mail_get_message(data->folder, data->uid, save_got_message, data, mail_msg_unordered_push); + } +diff -up evolution-2.10.3/plugins/mailing-list-actions/mailing-list-actions.c.kill-ethread evolution-2.10.3/plugins/mailing-list-actions/mailing-list-actions.c +--- evolution-2.10.3/plugins/mailing-list-actions/mailing-list-actions.c.kill-ethread 2007-04-09 09:09:14.000000000 -0400 ++++ evolution-2.10.3/plugins/mailing-list-actions/mailing-list-actions.c 2007-08-29 22:51:25.000000000 -0400 +@@ -89,7 +89,7 @@ void emla_list_action (EPlugin *item, EM + data->uri = strdup (sel->uri); + + mail_get_message (sel->folder, (const char*) g_ptr_array_index (sel->uids, 0), +- emla_list_action_do, data, mail_thread_new); ++ emla_list_action_do, data, mail_msg_unordered_push); + } + + void emla_list_action_do (CamelFolder *folder, const char *uid, CamelMimeMessage *msg, void *data) +diff -up evolution-2.10.3/plugins/groupwise-features/share-folder-common.c.kill-ethread evolution-2.10.3/plugins/groupwise-features/share-folder-common.c +--- evolution-2.10.3/plugins/groupwise-features/share-folder-common.c.kill-ethread 2007-04-09 09:09:12.000000000 -0400 ++++ evolution-2.10.3/plugins/groupwise-features/share-folder-common.c 2007-08-29 22:51:25.000000000 -0400 +@@ -121,7 +121,7 @@ shared_folder_abort (EPlugin *ep, EConfi + } + + struct _EMCreateFolder { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + CamelStore *store; +@@ -137,31 +137,26 @@ struct _EMCreateFolder { + void *user_data; + }; + +-static char * +-create_folder__desc (struct _mail_msg *mm, int done) ++static gchar * ++create_folder_desc (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + return g_strdup_printf (_("Creating folder `%s'"), m->full_name); + } + + static void +-create_folder__create (struct _mail_msg *mm) ++create_folder_exec (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + d(printf ("creating folder parent='%s' name='%s' full_name='%s'\n", m->parent, m->name, m->full_name)); + +- if ((m->fi = camel_store_create_folder (m->store, m->parent, m->name, &mm->ex))) { ++ if ((m->fi = camel_store_create_folder (m->store, m->parent, m->name, &m->base.ex))) { + if (camel_store_supports_subscriptions (m->store)) +- camel_store_subscribe_folder (m->store, m->full_name, &mm->ex); ++ camel_store_subscribe_folder (m->store, m->full_name, &m->base.ex); + } + } + + static void +-create_folder__created (struct _mail_msg *mm) ++create_folder_done (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; + struct ShareInfo *ssi = (struct ShareInfo *) m->user_data; + CamelStore *store = CAMEL_STORE (m->store) ; + EGwConnection *ccnc; +@@ -180,10 +175,8 @@ create_folder__created (struct _mail_msg + } + + static void +-create_folder__free (struct _mail_msg *mm) ++create_folder_free (struct _EMCreateFolder *m) + { +- struct _EMCreateFolder *m = (struct _EMCreateFolder *) mm; +- + camel_store_free_folder_info (m->store, m->fi); + camel_object_unref (m->store); + g_free (m->full_name); +@@ -191,11 +184,12 @@ create_folder__free (struct _mail_msg *m + g_free (m->name); + } + +-static struct _mail_msg_op create_folder_op = { +- create_folder__desc, +- create_folder__create, +- create_folder__created, +- create_folder__free, ++static MailMsgInfo create_folder_info = { ++ sizeof (struct _EMCreateFolder), ++ (MailMsgDescFunc) create_folder_desc, ++ (MailMsgExecFunc) create_folder_exec, ++ (MailMsgDoneFunc) create_folder_done, ++ (MailMsgFreeFunc) create_folder_free + }; + + static void +@@ -229,7 +223,7 @@ create_folder (CamelStore *store, const + parent = namebuf; + } + +- m = mail_msg_new (&create_folder_op, NULL, sizeof (struct _EMCreateFolder)); ++ m = mail_msg_new (&create_folder_info); + camel_object_ref (store); + m->store = store; + m->full_name = g_strdup (full_name); +@@ -238,8 +232,8 @@ create_folder (CamelStore *store, const + m->user_data = (struct ShareInfo *) user_data; + m->done = done; + g_free (namebuf); +- id = m->msg.seq; +- e_thread_put (mail_thread_new, (EMsg *) m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +diff -up evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.h.kill-ethread evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.h +--- evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.h.kill-ethread 2007-04-09 09:10:29.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.h 2007-08-29 22:51:25.000000000 -0400 +@@ -39,19 +39,6 @@ typedef struct _AlarmNotifyClass AlarmNo + + typedef struct _AlarmNotifyPrivate AlarmNotifyPrivate; + +-typedef struct _AlarmMsg AlarmMsg; +-typedef struct _AlarmMsgPrivate AlarmMsgPrivate; +- +-struct _AlarmMsg { +- EMsg msg; +- +- void (*receive_msg)(EThread *e, struct _AlarmMsg *msg, void *data); /* message received */ +- void *data; +- +- /* Private Usage */ +- struct _AlarmMsgPrivate *priv; +-}; +- + struct _AlarmNotify { + BonoboObject object; + +diff -up evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.c.kill-ethread evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.c +--- evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.c.kill-ethread 2007-04-09 09:10:29.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/alarm-notify/alarm-notify.c 2007-08-29 22:51:25.000000000 -0400 +@@ -45,10 +45,6 @@ struct _AlarmNotifyPrivate { + GMutex *mutex; + }; + +-EThread *alarm_operation_thread; /* for operations that can (or should) be queued */ +-EMsgPort *alarm_reply_port; +-static GIOChannel *alarm_reply_channel; +- + #define d(x) x + + +@@ -286,72 +282,12 @@ alarm_notify_finalize (GObject *object) + g_mutex_free (priv->mutex); + g_free (priv); + +- e_thread_destroy(alarm_operation_thread); +- g_io_channel_unref(alarm_reply_channel); +- e_msgport_destroy(alarm_reply_port); + if (G_OBJECT_CLASS (parent_class)->finalize) + (* G_OBJECT_CLASS (parent_class)->finalize) (object); + } + + + +-static guint +-alarm_channel_setup(EMsgPort **port, GIOChannel **channel, GIOFunc func) +-{ +- GSource *source; +- guint id; +- +- d (printf("%s:%d (alarm_channel_setup) - Channel Setup\n ", __FILE__, __LINE__)); +- *port = e_msgport_new(); +-#ifndef G_OS_WIN32 +- *channel = g_io_channel_unix_new(e_msgport_fd(*port)); +-#else +- *channel = g_io_channel_win32_new_socket(e_msgport_fd(*port)); +-#endif +- source = g_io_create_watch(*channel, G_IO_IN); +- g_source_set_callback(source, (GSourceFunc)func, *port, NULL); +- g_source_set_can_recurse(source, FALSE); +- id = g_source_attach(source, NULL); +- g_source_unref(source); +- +- return id; +-} +- +-static void +-alarm_msg_destroy(EThread *e, EMsg *msg, void *data) +-{ +- AlarmMsg *m = (AlarmMsg *)msg; +- +- /* Free the private */ +- g_free (m->data); /* Mostly it is a structure allocated as a carrier*/ +- g_free (m); +-} +- +-static gboolean +-alarm_msgport_replied(GIOChannel *source, GIOCondition cond, void *d) +-{ +- EMsgPort *port = (EMsgPort *)d; +- EMsg *m; +- +- while (( m = e_msgport_get(port))) { +- d (printf("%s:%d (alarm_msgport_replied) - %p: Replied to GUI thread\n", __FILE__, __LINE__, m)); +- alarm_msg_destroy(NULL, m, NULL); +- } +- +- return TRUE; +-} +- +-static void +-alarm_msg_received(EThread *e, EMsg *msg, void *data) +-{ +- AlarmMsg *m = (AlarmMsg *)msg; +- +- d(printf("%s:%d (alarm_msg_received) - %p: Received at thread %" G_GINT64_MODIFIER "x\n", __FILE__, __LINE__, m, e_util_pthread_id(pthread_self()))); +- if (m->receive_msg) { +- m->receive_msg (e, m, data); +- } +-} +- + /** + * alarm_notify_new: + * +@@ -363,23 +299,10 @@ alarm_msg_received(EThread *e, EMsg *msg + AlarmNotify * + alarm_notify_new (void) + { +- AlarmNotify *an; +- +- d (printf("%s:%d (alarm_notify_new) - Alarm Notify New \n ", __FILE__, __LINE__)); +- +- /* Create a thread for alarm queue operation*/ +- alarm_channel_setup(&alarm_reply_port, &alarm_reply_channel, alarm_msgport_replied); +- +- alarm_operation_thread = e_thread_new(E_THREAD_QUEUE); +- e_thread_set_msg_destroy(alarm_operation_thread, alarm_msg_destroy, 0); +- e_thread_set_msg_received(alarm_operation_thread, alarm_msg_received, 0); +- e_thread_set_reply_port(alarm_operation_thread, alarm_reply_port); +- +- an = g_object_new (TYPE_ALARM_NOTIFY, +- "poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_REQUEST, NULL), +- NULL); +- +- return an; ++ return g_object_new (TYPE_ALARM_NOTIFY, ++ "poa", bonobo_poa_get_threaded ( ++ ORBIT_THREAD_HINT_PER_REQUEST, NULL), ++ NULL); + } + + static void +diff -up evolution-2.10.3/calendar/gui/alarm-notify/alarm-queue.c.kill-ethread evolution-2.10.3/calendar/gui/alarm-notify/alarm-queue.c +--- evolution-2.10.3/calendar/gui/alarm-notify/alarm-queue.c.kill-ethread 2007-04-09 09:10:29.000000000 -0400 ++++ evolution-2.10.3/calendar/gui/alarm-notify/alarm-queue.c 2007-08-29 23:10:45.000000000 -0400 +@@ -115,9 +115,6 @@ static int tray_blink_id = -1; + static int tray_blink_state = FALSE; + static AlarmNotify *an; + +-/* Main Tasks thread for dealing with the global structures */ +-extern EThread *alarm_operation_thread; +- + /* Structure that stores a client we are monitoring */ + typedef struct { + /* Monitored client */ +@@ -199,6 +196,40 @@ static void on_dialog_objs_removed_cb (E + static void load_alarms_for_today (ClientAlarms *ca); + static void midnight_refresh_cb (gpointer alarm_id, time_t trigger, gpointer data); + ++/* Simple asynchronous message dispatcher */ ++ ++typedef struct _Message Message; ++typedef void (*MessageFunc) (Message *msg); ++ ++struct _Message { ++ MessageFunc func; ++}; ++ ++static void ++message_proxy (Message *msg) ++{ ++ g_return_if_fail (msg->func != NULL); ++ ++ msg->func (msg); ++} ++ ++static gpointer ++create_thread_pool (void) ++{ ++ /* once created, run forever */ ++ return g_thread_pool_new ((GFunc) message_proxy, NULL, 1, FALSE, NULL); ++} ++ ++static void ++message_push (Message *msg) ++{ ++ static GOnce once = G_ONCE_INIT; ++ ++ g_once (&once, (GThreadFunc) create_thread_pool, NULL); ++ ++ g_thread_pool_push ((GThreadPool *) once.retval, msg, NULL); ++} ++ + /* Queues an alarm trigger for midnight so that we can load the next day's worth + * of alarms. + */ +@@ -237,47 +268,41 @@ add_client_alarms_cb (gpointer key, gpoi + } + + struct _midnight_refresh_msg { ++ Message header; + gboolean remove; + }; + + /* Loads the alarms for the new day every midnight */ + static void +-midnight_refresh_async (EThread *e, AlarmMsg *msg, void *data) ++midnight_refresh_async (struct _midnight_refresh_msg *msg) + { +- struct _midnight_refresh_msg *list = msg->data; +- + d(printf("%s:%d (midnight_refresh_async) \n",__FILE__, __LINE__)); + + /* Re-load the alarms for all clients */ + g_hash_table_foreach (client_alarms_hash, add_client_alarms_cb, NULL); + + /* Re-schedule the midnight update */ +- if (list->remove && midnight_refresh_id != NULL) { ++ if (msg->remove && midnight_refresh_id != NULL) { + d(printf("%s:%d (midnight_refresh_async) - Reschedule the midnight update \n",__FILE__, __LINE__)); + alarm_remove (midnight_refresh_id); + midnight_refresh_id = NULL; + } + + queue_midnight_refresh (); ++ ++ g_slice_free (struct _midnight_refresh_msg, msg); + } + + static void + midnight_refresh_cb (gpointer alarm_id, time_t trigger, gpointer data) + { +- AlarmMsg *msg; +- struct _midnight_refresh_msg *list; +- +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = midnight_refresh_async; +- +- list = malloc (sizeof (struct _midnight_refresh_msg)); ++ struct _midnight_refresh_msg *msg; + +- list->remove = TRUE; +- msg->data = list; ++ msg = g_slice_new (struct _midnight_refresh_msg); ++ msg->header.func = (MessageFunc) midnight_refresh_async; ++ msg->remove = TRUE; + +- d(printf("%s:%d (midnight_refresh_cb) - Invoking task for midnight refresh\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + /* Looks up a client in the client alarms hash table */ +@@ -636,6 +661,7 @@ remove_comp (ClientAlarms *ca, ECalCompo + * alarms. + */ + struct _query_msg { ++ Message header; + ECal *client; + GList *objects; + gpointer data; +@@ -669,7 +695,7 @@ duplicate_ecal (GList *in_list) + } + + static void +-query_objects_changed_async (EThread *e, AlarmMsg *msg, void *data) ++query_objects_changed_async (struct _query_msg *msg) + { + ClientAlarms *ca; + time_t from, day_end; +@@ -678,13 +704,12 @@ query_objects_changed_async (EThread *e, + icaltimezone *zone; + CompQueuedAlarms *cqa; + GList *l; +- struct _query_msg *list = msg->data; + ECal *client; + GList *objects; + +- client = list->client; +- ca = list->data; +- objects = list->objects; ++ client = msg->client; ++ ca = msg->data; ++ objects = msg->objects; + + from = config_data_get_last_notification_time (); + if (from == -1) +@@ -773,43 +798,38 @@ query_objects_changed_async (EThread *e, + comp = NULL; + } + g_list_free (objects); ++ ++ g_slice_free (struct _query_msg, msg); + } + + static void + query_objects_changed_cb (ECal *client, GList *objects, gpointer data) + { +- AlarmMsg *msg; +- struct _query_msg *list; ++ struct _query_msg *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = query_objects_changed_async; +- list = malloc (sizeof (struct _query_msg)); +- list->client = client; +- list->objects = duplicate_ical (objects); +- list->data = data; +- msg->data = list; +- +- d(printf("%s:%d (query_objects_changed_cb) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ msg = g_slice_new (struct _query_msg); ++ msg->header.func = (MessageFunc) query_objects_changed_async; ++ msg->client = client; ++ msg->objects = duplicate_ical (objects); ++ msg->data = data; + ++ message_push ((Message *) msg); + } + + /* Called when a calendar component is removed; we must delete its corresponding + * alarms. + */ + static void +-query_objects_removed_async (EThread *e, AlarmMsg *msg, void *data) ++query_objects_removed_async (struct _query_msg *msg) + { + ClientAlarms *ca; + GList *l; +- struct _query_msg *list = msg->data; + ECal *client; + GList *objects; + +- client = list->client; +- ca = list->data; +- objects = list->objects; ++ client = msg->client; ++ ca = msg->data; ++ objects = msg->objects; + + d(printf("%s:%d (query_objects_removed_async) - Removing %d objects\n",__FILE__, __LINE__, g_list_length(objects))); + +@@ -822,27 +842,22 @@ query_objects_removed_async (EThread *e, + } + + g_list_free (objects); ++ ++ g_slice_free (struct _query_msg, msg); + } + + static void + query_objects_removed_cb (ECal *client, GList *objects, gpointer data) + { +- AlarmMsg *msg; +- struct _query_msg *list; +- +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = query_objects_removed_async; +- +- list = malloc (sizeof (struct _query_msg)); +- list->client = client; +- list->objects = duplicate_ecal (objects); +- list->data = data; +- msg->data = list; ++ struct _query_msg *msg; + +- d(printf("%s:%d (query_objects_removed_cb) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ msg = g_slice_new (struct _query_msg); ++ msg->header.func = (MessageFunc) query_objects_removed_async; ++ msg->client = client; ++ msg->objects = duplicate_ecal (objects); ++ msg->data = data; + ++ message_push ((Message *) msg); + } + + +@@ -989,20 +1004,19 @@ free_tray_icon_data (TrayIconData *tray_ + } + + static void +-on_dialog_objs_removed_async (EThread *e, AlarmMsg *msg, void *data) ++on_dialog_objs_removed_async (struct _query_msg *msg) + { + const char *our_uid; + GList *l; + TrayIconData *tray_data; +- struct _query_msg *list = msg->data; + ECal *client; + GList *objects; + + d(printf("%s:%d (on_dialog_objs_removed_async)\n",__FILE__, __LINE__)); + +- client = list->client; +- tray_data = list->data; +- objects = list->objects; ++ client = msg->client; ++ tray_data = msg->data; ++ objects = msg->objects; + + e_cal_component_get_uid (tray_data->comp, &our_uid); + g_return_if_fail (our_uid && *our_uid); +@@ -1020,37 +1034,33 @@ on_dialog_objs_removed_async (EThread *e + tray_data = NULL; + } + } ++ ++ g_slice_free (struct _query_msg, msg); + } + + static void + on_dialog_objs_removed_cb (ECal *client, GList *objects, gpointer data) + { +- AlarmMsg *msg; +- struct _query_msg *list; ++ struct _query_msg *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = on_dialog_objs_removed_async; +- +- list = malloc (sizeof (struct _query_msg)); +- list->client = client; +- list->objects = objects; +- list->data = data; +- msg->data = list; ++ msg = g_slice_new (struct _query_msg); ++ msg->header.func = (MessageFunc) on_dialog_objs_removed_async; ++ msg->client = client; ++ msg->objects = objects; ++ msg->data = data; + +- d(printf("%s:%d (on_dialog_objs_removed_cb) - Posting a task \n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + struct _tray_cqa_msg { ++ Message header; + CompQueuedAlarms *cqa; + }; + + static void +-tray_list_remove_cqa_async(EThread *e, AlarmMsg *msg, void *data) ++tray_list_remove_cqa_async (struct _tray_cqa_msg *msg) + { +- struct _tray_cqa_msg *tmsg = msg->data; +- CompQueuedAlarms *cqa = tmsg->cqa; ++ CompQueuedAlarms *cqa = msg->cqa; + GList *list = tray_icons_list; + + d(printf("%s:%d (tray_list_remove_cqa_async) - Removing CQA %p from tray list\n",__FILE__, __LINE__, cqa)); +@@ -1087,28 +1097,25 @@ tray_list_remove_cqa_async(EThread *e, A + gtk_tree_selection_select_iter (sel, &iter); + } + } ++ ++ g_slice_free (struct _tray_cqa_msg, msg); + } + + static void + tray_list_remove_cqa (CompQueuedAlarms *cqa) + { +- AlarmMsg *msg; +- struct _tray_cqa_msg *list; +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = tray_list_remove_cqa_async; +- +- list = malloc (sizeof (struct _tray_cqa_msg)); +- list->cqa = cqa; +- msg->data = list; ++ struct _tray_cqa_msg *msg; ++ ++ msg = g_slice_new (struct _tray_cqa_msg); ++ msg->header.func = (MessageFunc) tray_list_remove_cqa_async; ++ msg->cqa = cqa; + +- d(printf("%s:%d (tray_list_remove_cqa) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + /* Callback used from the alarm notify dialog */ + static void +-tray_list_remove_async(EThread *e, AlarmMsg *msg, void *data) ++tray_list_remove_async (Message *msg) + { + GList *list = tray_icons_list; + +@@ -1138,55 +1145,50 @@ tray_list_remove_async(EThread *e, Alarm + } else + list = list->next; + } ++ ++ g_slice_free (Message, msg); + } + + static void +-tray_list_remove_icons () ++tray_list_remove_icons (void) + { +- AlarmMsg *msg; +- +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = tray_list_remove_async; ++ Message *msg; + +- msg->data = NULL; ++ msg = g_slice_new (Message); ++ msg->func = tray_list_remove_async; + +- d(printf("%s:%d (tray_list_remove_icons) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push (msg); + } + + struct _tray_msg { ++ Message header; + TrayIconData *data; + }; + + static void +-tray_list_remove_data_async(EThread *e, AlarmMsg *msg, void *data) ++tray_list_remove_data_async (struct _tray_msg *msg) + { +- struct _tray_msg *tmsg = msg->data; +- TrayIconData *tray_data = tmsg->data; ++ TrayIconData *tray_data = msg->data; + + d(printf("%s:%d (tray_list_remove_data_async) - Removing %p from tray list\n",__FILE__, __LINE__, tray_data)); + + tray_icons_list = g_list_remove_all (tray_icons_list, tray_data); + free_tray_icon_data (tray_data); + tray_data = NULL; ++ ++ g_slice_free (struct _tray_msg, msg); + } + + static void + tray_list_remove_data (TrayIconData *data) + { +- AlarmMsg *msg; +- struct _tray_msg *list; +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = tray_list_remove_data_async; +- +- list = malloc (sizeof (struct _tray_msg)); +- list->data = data; +- msg->data = list; ++ struct _tray_msg *msg; ++ ++ msg = g_slice_new (struct _tray_msg); ++ msg->header.func = (MessageFunc) tray_list_remove_data_async; ++ msg->data = data; + +- d(printf("%s:%d (tray_list_remove_data) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + static void +@@ -1394,29 +1396,24 @@ tray_icon_blink_cb (gpointer data) + /* Add a new data to tray list */ + + static void +-tray_list_add_async (EThread *e, AlarmMsg *msg, void *data) ++tray_list_add_async (struct _tray_msg *msg) + { +- struct _tray_msg *list = msg->data; +- d(printf("%s:%d (tray_list_add_async) - Add %p\n",__FILE__, __LINE__, list->data)); +- tray_icons_list = g_list_prepend (tray_icons_list, list->data); ++ d(printf("%s:%d (tray_list_add_async) - Add %p\n",__FILE__, __LINE__, msg->data)); ++ tray_icons_list = g_list_prepend (tray_icons_list, msg->data); ++ ++ g_slice_free (struct _tray_msg, msg); + } + + static void + tray_list_add_new (TrayIconData *data) + { +- AlarmMsg *msg; +- struct _tray_msg *list; ++ struct _tray_msg *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = tray_list_add_async; +- +- list = malloc (sizeof (struct _tray_msg)); +- list->data = data; +- msg->data = list; +- +- d(printf("%s:%d (tray_list_add_new) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ msg = g_slice_new (struct _tray_msg); ++ msg->header.func = (MessageFunc) tray_list_add_async; ++ msg->data = data; ++ ++ message_push ((Message *) msg); + } + + /* Performs notification of a display alarm */ +@@ -1840,21 +1837,13 @@ check_midnight_refresh (gpointer user_da + new_midnight = time_day_end_with_zone (time (NULL), zone); + + if (new_midnight > midnight) { +- AlarmMsg *msg; +- struct _midnight_refresh_msg *list; +- +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = midnight_refresh_async; +- +- list = malloc (sizeof (struct _midnight_refresh_msg)); ++ struct _midnight_refresh_msg *msg; + +- list->remove = FALSE; +- /* We dont need it. So set it to NULL */ +- msg->data = list; ++ msg = g_slice_new (struct _midnight_refresh_msg); ++ msg->header.func = (MessageFunc) midnight_refresh_async; ++ msg->remove = FALSE; + +- d(printf("%s:%d (check_midnight_refresh) - Posting a task to refresh\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + return TRUE; +@@ -1985,14 +1974,15 @@ hash_ids (gpointer a) + } + + struct _alarm_client_msg { ++ Message header; + ECal *client; + }; + +-static void alarm_queue_add_async (EThread *e, AlarmMsg *msg, void *data) ++static void ++alarm_queue_add_async (struct _alarm_client_msg *msg) + { + ClientAlarms *ca; +- struct _alarm_client_msg *list = msg->data; +- ECal *client = list->client; ++ ECal *client = msg->client; + + g_return_if_fail (alarm_queue_inited); + g_return_if_fail (client != NULL); +@@ -2023,6 +2013,8 @@ static void alarm_queue_add_async (EThre + G_CALLBACK (cal_opened_cb), + ca); + } ++ ++ g_slice_free (struct _alarm_client_msg, msg); + } + + /** +@@ -2042,20 +2034,13 @@ static void alarm_queue_add_async (EThre + void + alarm_queue_add_client (ECal *client) + { +- AlarmMsg *msg; +- struct _alarm_client_msg *list; ++ struct _alarm_client_msg *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = alarm_queue_add_async; +- +- list = malloc (sizeof (struct _alarm_client_msg)); +- list->client = client; +- g_object_ref (client); +- msg->data = list; ++ msg = g_slice_new (struct _alarm_client_msg); ++ msg->header.func = (MessageFunc) alarm_queue_add_async; ++ msg->client = g_object_ref (client); + +- d(printf("%s:%d (alarm_queue_add_client) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + /* Removes a component an its alarms */ +@@ -2107,11 +2092,10 @@ remove_client_alarms (ClientAlarms *ca) + * Removes a calendar client from the alarm queueing system. + **/ + static void +-alarm_queue_remove_async (EThread *e, AlarmMsg *msg, void *data) ++alarm_queue_remove_async (struct _alarm_client_msg *msg) + { + ClientAlarms *ca; +- struct _alarm_client_msg *list = msg->data; +- ECal *client = list->client; ++ ECal *client = msg->client; + + g_return_if_fail (alarm_queue_inited); + g_return_if_fail (client != NULL); +@@ -2148,24 +2132,20 @@ alarm_queue_remove_async (EThread *e, Al + g_free (ca); + + g_hash_table_remove (client_alarms_hash, client); ++ ++ g_slice_free (struct _alarm_client_msg, msg); + } + + void + alarm_queue_remove_client (ECal *client) + { +- AlarmMsg *msg; +- struct _alarm_client_msg *list; ++ struct _alarm_client_msg *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = alarm_queue_remove_async; +- +- list = malloc (sizeof (struct _alarm_client_msg)); +- list->client = client; +- msg->data = list; ++ msg = g_slice_new (struct _alarm_client_msg); ++ msg->header.func = (MessageFunc) alarm_queue_remove_async; ++ msg->client = client; + +- d(printf("%s:%d (alarm_queue_remove_client) - Posting a task\n",__FILE__, __LINE__)); +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ message_push ((Message *) msg); + } + + /* Update non-time related variables for various structures on modification of an existing component diff --git a/evolution-2.9.1-first-ascii.patch b/evolution-2.9.1-first-ascii.patch new file mode 100644 index 0000000..7fffebe --- /dev/null +++ b/evolution-2.9.1-first-ascii.patch @@ -0,0 +1,91 @@ +--- evolution-2.9.1/calendar/gui/e-day-view.c.first-ascii 2006-11-06 11:25:23.000000000 -0500 ++++ evolution-2.9.1/calendar/gui/e-day-view.c 2006-11-06 11:34:32.000000000 -0500 +@@ -333,7 +333,7 @@ + static void e_day_view_start_editing_event (EDayView *day_view, + gint day, + gint event_num, +- gchar *initial_text); ++ GdkEventKey *key_event); + static void e_day_view_stop_editing_event (EDayView *day_view); + static gboolean e_day_view_text_keypress (GnomeCanvasItem *item, + guint keyval, +@@ -6012,7 +6012,6 @@ + ECalModel *model; + ECalComponent *comp; + gint day, event_num; +- gchar *initial_text; + guint keyval; + gboolean stop_emission; + time_t dtstart, dtend; +@@ -6153,15 +6152,12 @@ + + /* We only want to start an edit with a return key or a simple + character. */ +- if (keyval == GDK_Return) { +- initial_text = NULL; +- } else if (((keyval >= 0x20) && (keyval <= 0xFF) +- && (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) +- || (event->length == 0) +- || (keyval == GDK_Tab)) { ++ if ((keyval != GDK_Return) && ++ (((keyval >= 0x20) && (keyval <= 0xFF) ++ && (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) ++ || (event->length == 0) ++ || (keyval == GDK_Tab))) + return FALSE; +- } else +- initial_text = e_utf8_from_gtk_event_key (widget, event->keyval, event->string); + + /* Add a new event covering the selected range */ + icalcomp = e_cal_model_create_component_with_defaults (model); +@@ -6207,15 +6203,11 @@ + gtk_widget_queue_draw (day_view->main_canvas); + + if (e_day_view_find_event_from_uid (day_view, ecal, uid, NULL, &day, &event_num)) { +- e_day_view_start_editing_event (day_view, day, event_num, +- initial_text); ++ e_day_view_start_editing_event (day_view, day, event_num, event); + } else { + g_warning ("Couldn't find event to start editing.\n"); + } + +- if (initial_text) +- g_free (initial_text); +- + g_object_unref (comp); + + return TRUE; +@@ -6897,7 +6889,7 @@ + e_day_view_start_editing_event (EDayView *day_view, + gint day, + gint event_num, +- gchar *initial_text) ++ GdkEventKey *key_event) + { + EDayViewEvent *event; + ETextEventProcessor *event_processor = NULL; +@@ -6937,10 +6929,20 @@ + rid of the start and end times. */ + e_canvas_item_grab_focus (event->canvas_item, TRUE); + +- if (initial_text) { +- gnome_canvas_item_set (event->canvas_item, +- "text", initial_text, +- NULL); ++ if (key_event) { ++ if (gtk_im_context_filter_keypress (((EText *)(event->canvas_item))->im_context, key_event)) { ++ ((EText *)(event->canvas_item))->need_im_reset = TRUE; ++ } ++ else { ++ char *initial_text; ++ ++ initial_text = e_utf8_from_gtk_event_key (GTK_WIDGET (day_view), key_event->keyval, key_event->string); ++ gnome_canvas_item_set (event->canvas_item, ++ "text", initial_text, ++ NULL); ++ if (initial_text) ++ g_free (initial_text); ++ } + } + + /* Try to move the cursor to the end of the text. */ diff --git a/evolution-2.9.1-im-context-reset.patch b/evolution-2.9.1-im-context-reset.patch new file mode 100644 index 0000000..76e9d98 --- /dev/null +++ b/evolution-2.9.1-im-context-reset.patch @@ -0,0 +1,12 @@ +--- evolution-2.9.1/calendar/gui/e-day-view.c.im-context-reset 2006-11-06 10:14:26.000000000 -0500 ++++ evolution-2.9.1/calendar/gui/e-day-view.c 2006-11-06 10:15:39.000000000 -0500 +@@ -6928,6 +6928,9 @@ + if (!event->canvas_item) + return; + ++ /* Reset IM context. */ ++ gtk_im_context_reset (E_TEXT (event->canvas_item)->im_context); ++ + /* We must grab the focus before setting the initial text, since + grabbing the focus will result in a call to + e_day_view_on_editing_started(), which will reset the text to get diff --git a/evolution-2.9.1-kill-ememory.patch b/evolution-2.9.1-kill-ememory.patch new file mode 100644 index 0000000..d873dba --- /dev/null +++ b/evolution-2.9.1-kill-ememory.patch @@ -0,0 +1,299 @@ +--- evolution-2.9.1/mail/message-list.c.ememory 2006-10-25 11:11:34.000000000 -0400 ++++ evolution-2.9.1/mail/message-list.c 2006-10-25 11:15:12.000000000 -0400 +@@ -412,70 +412,28 @@ + return info; + } + +-static const char * +-get_normalised_string (MessageList *message_list, CamelMessageInfo *info, int col) ++static const gchar * ++get_normalised_string (MessageList *message_list, const gchar *string) + { +- const char *string, *str; +- char *normalised; +- EPoolv *poolv; +- int index; +- +- switch (col) { +- case COL_SUBJECT_NORM: +- string = camel_message_info_subject (info); +- index = NORMALISED_SUBJECT; +- break; +- case COL_FROM_NORM: +- string = camel_message_info_from (info); +- index = NORMALISED_FROM; +- break; +- case COL_TO_NORM: +- string = camel_message_info_to (info); +- index = NORMALISED_TO; +- break; +- default: +- string = NULL; +- index = NORMALISED_LAST; +- g_assert_not_reached (); +- } +- +- /* slight optimisation */ +- if (string == NULL || string[0] == '\0') ++ GHashTable *hash_table = message_list->normalised_hash; ++ GStringChunk *string_chunk = message_list->string_chunk; ++ gchar *collation_key, *temp; ++ ++ if (string == NULL || *string == '\0') + return ""; +- +- poolv = g_hash_table_lookup (message_list->normalised_hash, camel_message_info_uid (info)); +- if (poolv == NULL) { +- poolv = e_poolv_new (NORMALISED_LAST); +- g_hash_table_insert (message_list->normalised_hash, (char *) camel_message_info_uid (info), poolv); +- } else { +- str = e_poolv_get (poolv, index); +- if (*str) +- return str; +- } +- +- if (col == COL_SUBJECT_NORM) { +- const unsigned char *subject; +- +- subject = (const unsigned char *) string; +- while (!g_ascii_strncasecmp (subject, "Re:", 3)) { +- subject += 3; +- +- /* jump over any spaces */ +- while (*subject && isspace ((int) *subject)) +- subject++; +- } +- +- /* jump over any spaces */ +- while (*subject && isspace ((int) *subject)) +- subject++; +- +- string = (const char *) subject; +- } +- +- normalised = g_utf8_collate_key (string, -1); +- e_poolv_set (poolv, index, normalised, TRUE); +- +- return e_poolv_get (poolv, index); ++ ++ collation_key = g_hash_table_lookup (hash_table, string); ++ if (collation_key != NULL) ++ return collation_key; ++ ++ temp = g_utf8_collate_key (string, -1); ++ collation_key = g_string_chunk_insert_const (string_chunk, temp); ++ g_free (temp); ++ ++ temp = g_string_chunk_insert_const (string_chunk, string); ++ g_hash_table_insert (hash_table, temp, collation_key); ++ ++ return collation_key; + } + + static void +@@ -1283,12 +1241,23 @@ + str = camel_message_info_from (msg_info); + return (void *)(str ? str : ""); + case COL_FROM_NORM: +- return (void *) get_normalised_string (message_list, msg_info, col); ++ str = camel_message_info_from (msg_info); ++ return (void *) get_normalised_string (message_list, str); + case COL_SUBJECT: + str = camel_message_info_subject (msg_info); + return (void *)(str ? str : ""); + case COL_SUBJECT_NORM: +- return (void *) get_normalised_string (message_list, msg_info, col); ++ str = camel_message_info_subject (msg_info); ++ while (str != NULL && *str != '\0') { ++ /* skip over spaces and reply prefixes */ ++ if (g_ascii_strncasecmp (str, "Re:", 3) == 0) ++ str += 3; ++ else if (g_ascii_isspace (*str)) ++ str++; ++ else ++ break; ++ } ++ return (void *) get_normalised_string (message_list, str); + case COL_SENT: { + ETreePath child; + +@@ -1312,7 +1281,8 @@ + str = camel_message_info_to (msg_info); + return (void *)(str ? str : ""); + case COL_TO_NORM: +- return (void *) get_normalised_string (message_list, msg_info, col); ++ str = camel_message_info_to (msg_info); ++ return (void *) get_normalised_string (message_list, str); + case COL_SIZE: + return GINT_TO_POINTER (camel_message_info_size(msg_info)); + case COL_DELETED: +@@ -2023,9 +1993,10 @@ + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (message_list), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + + message_list->normalised_hash = g_hash_table_new (g_str_hash, g_str_equal); ++ message_list->string_chunk = g_string_chunk_new (1024); + + message_list->hidden = NULL; +- message_list->hidden_pool = NULL; ++ message_list->hidden_string_chunk = NULL; + message_list->hide_before = ML_HIDE_NONE_START; + message_list->hide_after = ML_HIDE_NONE_END; + +@@ -2054,14 +2025,6 @@ + g_signal_connect (((GtkScrolledWindow *) message_list)->vscrollbar, "value-changed", G_CALLBACK (ml_scrolled), message_list); + } + +-static gboolean +-normalised_free (gpointer key, gpointer value, gpointer user_data) +-{ +- e_poolv_destroy (value); +- +- return TRUE; +-} +- + static void + message_list_destroy(GtkObject *object) + { +@@ -2127,17 +2090,17 @@ + MessageList *message_list = MESSAGE_LIST (object); + struct _MessageListPrivate *p = message_list->priv; + +- g_hash_table_foreach (message_list->normalised_hash, (GHFunc) normalised_free, NULL); + g_hash_table_destroy (message_list->normalised_hash); ++ g_string_chunk_free (message_list->string_chunk); + + if (message_list->thread_tree) + camel_folder_thread_messages_unref(message_list->thread_tree); + + if (message_list->hidden) { + g_hash_table_destroy(message_list->hidden); +- e_mempool_destroy(message_list->hidden_pool); ++ g_string_chunk_free(message_list->hidden_string_chunk); + message_list->hidden = NULL; +- message_list->hidden_pool = NULL; ++ message_list->hidden_string_chunk = NULL; + } + + g_free(message_list->search); +@@ -2940,17 +2903,6 @@ + d(printf("changed = %d added = %d removed = %d\n", + changes->uid_changed->len, changes->uid_added->len, changes->uid_removed->len)); + +- for (i = 0; i < changes->uid_removed->len; i++) { +- /* uncache the normalised strings for these uids */ +- EPoolv *poolv; +- +- poolv = g_hash_table_lookup (ml->normalised_hash, changes->uid_removed->pdata[i]); +- if (poolv != NULL) { +- g_hash_table_remove (ml->normalised_hash, changes->uid_removed->pdata[i]); +- e_poolv_destroy (poolv); +- } +- } +- + /* check if the hidden state has changed, if so modify accordingly, then regenerate */ + if (ml->hidejunk || ml->hidedeleted) + mail_folder_hide_by_flag (folder, ml, &changes, (ml->hidejunk ? CAMEL_MESSAGE_JUNK : 0) | (ml->hidedeleted ? CAMEL_MESSAGE_DELETED : 0)); +@@ -3028,7 +2980,11 @@ + } + + /* reset the normalised sort performance hack */ +- g_hash_table_foreach_remove (message_list->normalised_hash, normalised_free, NULL); ++ /* XXX GLib 2.12 added g_hash_table_remove_all() */ ++ g_hash_table_destroy (message_list->normalised_hash); ++ message_list->normalised_hash = g_hash_table_new (g_str_hash, g_str_equal); ++ g_string_chunk_free (message_list->string_chunk); ++ message_list->string_chunk = g_string_chunk_new (1024); + + mail_regen_cancel(message_list); + +@@ -3479,14 +3435,14 @@ + MESSAGE_LIST_LOCK (ml, hide_lock); + if (ml->hidden == NULL) { + ml->hidden = g_hash_table_new (g_str_hash, g_str_equal); +- ml->hidden_pool = e_mempool_new (512, 256, E_MEMPOOL_ALIGN_BYTE); ++ ml->hidden_string_chunk = g_string_chunk_new (512); + } + +- uid = e_mempool_strdup (ml->hidden_pool, uids->pdata[i]); ++ uid = g_string_chunk_insert (ml->hidden_string_chunk, uids->pdata[i]); + g_hash_table_insert (ml->hidden, uid, uid); + for ( ; i < uids->len; i++) { + if (g_hash_table_lookup (ml->uid_nodemap, uids->pdata[i])) { +- uid = e_mempool_strdup (ml->hidden_pool, uids->pdata[i]); ++ uid = g_string_chunk_insert (ml->hidden_string_chunk, uids->pdata[i]); + g_hash_table_insert (ml->hidden, uid, uid); + } + } +@@ -3507,9 +3463,9 @@ + MESSAGE_LIST_LOCK (ml, hide_lock); + if (ml->hidden) { + g_hash_table_destroy (ml->hidden); +- e_mempool_destroy (ml->hidden_pool); ++ g_string_chunk_free (ml->hidden_string_chunk); + ml->hidden = NULL; +- ml->hidden_pool = NULL; ++ ml->hidden_string_chunk = NULL; + } + ml->hide_before = ML_HIDE_NONE_START; + ml->hide_after = ML_HIDE_NONE_END; +@@ -3545,9 +3501,9 @@ + MESSAGE_LIST_LOCK(ml, hide_lock); + if (ml->hidden) { + g_hash_table_destroy (ml->hidden); +- e_mempool_destroy (ml->hidden_pool); ++ g_string_chunk_free (ml->hidden_string_chunk); + ml->hidden = NULL; +- ml->hidden_pool = NULL; ++ ml->hidden_string_chunk = NULL; + } + ml->hide_before = ML_HIDE_NONE_START; + ml->hide_after = ML_HIDE_NONE_END; +@@ -3558,7 +3514,7 @@ + camel_file_util_decode_fixed_int32 (in, &version); + if (version == HIDE_STATE_VERSION) { + ml->hidden = g_hash_table_new(g_str_hash, g_str_equal); +- ml->hidden_pool = e_mempool_new(512, 256, E_MEMPOOL_ALIGN_BYTE); ++ ml->hidden_string_chunk = g_string_chunk_new(512); + camel_file_util_decode_fixed_int32 (in, &lower); + ml->hide_before = lower; + camel_file_util_decode_fixed_int32 (in, &upper); +@@ -3567,7 +3523,7 @@ + char *olduid, *uid; + + if (camel_file_util_decode_string (in, &olduid) != -1) { +- uid = e_mempool_strdup(ml->hidden_pool, olduid); ++ uid = g_string_chunk_insert(ml->hidden_string_chunk, olduid); + g_free (olduid); + g_hash_table_insert(ml->hidden, uid, uid); + } +@@ -3717,12 +3673,12 @@ + + if (m->ml->hidden == NULL) { + m->ml->hidden = g_hash_table_new (g_str_hash, g_str_equal); +- m->ml->hidden_pool = e_mempool_new (512, 256, E_MEMPOOL_ALIGN_BYTE); ++ m->ml->hidden_string_chunk = g_string_chunk_new (512); + } + + for (i = 0; i < uidnew->len; i++) { + if (g_hash_table_lookup (m->ml->hidden, uidnew->pdata[i]) == 0) { +- char *uid = e_mempool_strdup (m->ml->hidden_pool, uidnew->pdata[i]); ++ char *uid = g_string_chunk_insert (m->ml->hidden_string_chunk, uidnew->pdata[i]); + g_hash_table_insert (m->ml->hidden, uid, uid); + } + } +--- evolution-2.9.1/mail/message-list.h.ememory 2006-09-28 04:56:51.000000000 -0400 ++++ evolution-2.9.1/mail/message-list.h 2006-10-25 11:15:12.000000000 -0400 +@@ -102,11 +102,12 @@ + GHashTable *uid_nodemap; /* uid (from info) -> tree node mapping */ + + GHashTable *normalised_hash; ++ GStringChunk *string_chunk; + + /* UID's to hide. Keys in the mempool */ + /* IMPORTANT: You MUST have obtained the hide lock, to operate on this data */ + GHashTable *hidden; +- struct _EMemPool *hidden_pool; ++ GStringChunk *hidden_string_chunk; + int hide_unhidden; /* total length, before hiding */ + int hide_before, hide_after; /* hide ranges of messages */ + diff --git a/evolution-2.9.2-gtk-font-button.patch b/evolution-2.9.2-gtk-font-button.patch new file mode 100644 index 0000000..a218e05 --- /dev/null +++ b/evolution-2.9.2-gtk-font-button.patch @@ -0,0 +1,153 @@ +--- evolution-2.9.2/mail/em-mailer-prefs.c.gtk-font-button 2006-08-09 04:43:27.000000000 -0400 ++++ evolution-2.9.2/mail/em-mailer-prefs.c 2006-11-11 08:31:53.000000000 -0500 +@@ -36,8 +36,8 @@ + #include + + #include +-#include + #include ++#include + + #include + +@@ -535,12 +535,14 @@ + } + + static void +-font_changed (GnomeFontPicker *fontpicker, const char *arg1, EMMailerPrefs *prefs) ++font_changed (GtkFontButton *font_button, EMMailerPrefs *prefs) + { +- const char *key; ++ const gchar *key; ++ const gchar *font_name; + +- key = g_object_get_data ((GObject *) fontpicker, "key"); +- gconf_client_set_string (prefs->gconf, key, gnome_font_picker_get_font_name (fontpicker), NULL); ++ key = g_object_get_data (G_OBJECT (font_button), "key"); ++ font_name = gtk_font_button_get_font_name (font_button); ++ gconf_client_set_string (prefs->gconf, key, font_name, NULL); + } + + static void +@@ -841,8 +843,8 @@ + + /* Mail Fonts */ + font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/monospace", NULL); +- prefs->font_fixed = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "FontFixed")); +- gnome_font_picker_set_font_name (prefs->font_fixed, font); ++ prefs->font_fixed = GTK_FONT_BUTTON (glade_xml_get_widget (gui, "FontFixed")); ++ gtk_font_button_set_font_name (prefs->font_fixed, font); + g_free (font); + g_object_set_data ((GObject *) prefs->font_fixed, "key", "/apps/evolution/mail/display/fonts/monospace"); + g_signal_connect (prefs->font_fixed, "font-set", G_CALLBACK (font_changed), prefs); +@@ -850,8 +852,8 @@ + gtk_widget_set_sensitive ((GtkWidget *) prefs->font_fixed, FALSE); + + font = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/fonts/variable", NULL); +- prefs->font_variable = GNOME_FONT_PICKER (glade_xml_get_widget (gui, "FontVariable")); +- gnome_font_picker_set_font_name (prefs->font_variable, font); ++ prefs->font_variable = GTK_FONT_BUTTON (glade_xml_get_widget (gui, "FontVariable")); ++ gtk_font_button_set_font_name (prefs->font_variable, font); + g_free (font); + g_object_set_data ((GObject *) prefs->font_variable, "key", "/apps/evolution/mail/display/fonts/variable"); + g_signal_connect (prefs->font_variable, "font-set", G_CALLBACK (font_changed), prefs); +--- evolution-2.9.2/mail/em-mailer-prefs.h.gtk-font-button 2006-05-25 00:59:47.000000000 -0400 ++++ evolution-2.9.2/mail/em-mailer-prefs.h 2006-11-11 08:31:53.000000000 -0500 +@@ -39,7 +39,7 @@ + struct _GladeXML; + struct _GnomeColorPicker; + struct _GtkFileChooserbutton; +-struct _GnomeFontPicker; ++struct _GtkFontButton; + struct _GConfClient; + struct _GtkButton; + struct _GtkTreeView; +@@ -92,8 +92,8 @@ + struct _GtkFileChooserButton *notify_sound_file; + + /* HTML Mail tab */ +- struct _GnomeFontPicker *font_variable; +- struct _GnomeFontPicker *font_fixed; ++ struct _GtkFontButton *font_variable; ++ struct _GtkFontButton *font_fixed; + struct _GtkToggleButton *font_share; + + /* Loading Images */ +--- evolution-2.9.2/mail/mail-config.glade.gtk-font-button 2006-07-19 11:26:27.000000000 -0400 ++++ evolution-2.9.2/mail/mail-config.glade 2006-11-11 08:31:53.000000000 -0500 +@@ -4700,14 +4700,14 @@ + + + +- ++ + True + True + Select HTML fixed width font +- GNOME_FONT_PICKER_MODE_FONT_INFO ++ True + True +- False +- 14 ++ False ++ False + True + + +@@ -4722,14 +4722,14 @@ + + + +- ++ + True + True + Select HTML variable width font +- GNOME_FONT_PICKER_MODE_FONT_INFO ++ True + True +- False +- 14 ++ False ++ False + True + + +@@ -8484,14 +8484,14 @@ + + + +- ++ + True + True + Select HTML fixed width font for printing +- GNOME_FONT_PICKER_MODE_FONT_INFO ++ True + True +- False +- 14 ++ False ++ False + True + + +@@ -8506,14 +8506,14 @@ + + + +- ++ + True + True + Select HTML variable width font for printing +- GNOME_FONT_PICKER_MODE_FONT_INFO ++ True + True +- False +- 14 ++ False ++ False + True + + diff --git a/evolution-2.9.3-gtk-color-button.patch b/evolution-2.9.3-gtk-color-button.patch new file mode 100644 index 0000000..665175b --- /dev/null +++ b/evolution-2.9.3-gtk-color-button.patch @@ -0,0 +1,1219 @@ +--- evolution-2.9.91/mail/em-composer-prefs.c.gtk-color-button 2007-01-03 10:27:18.000000000 -0500 ++++ evolution-2.9.91/mail/em-composer-prefs.c 2007-02-12 13:32:03.000000000 -0500 +@@ -56,9 +56,8 @@ + #include + #include + #include +- ++#include + #include +-#include + + #include + +@@ -545,7 +544,7 @@ + GtkTreeIter iter; + GError *err = NULL; + char **strv = NULL; +- guint r, g, b; ++ GdkColor color; + gboolean go; + char *lang; + int i; +@@ -580,21 +579,33 @@ + if (strv != NULL) + g_strfreev (strv); + +- r = gconf_client_get_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_red", NULL); +- g = gconf_client_get_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_green", NULL); +- b = gconf_client_get_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_blue", NULL); +- +- gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (prefs->colour), r, g, b, 0xffff); ++ color.red = gconf_client_get_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_red", NULL); ++ color.green = gconf_client_get_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_green", NULL); ++ color.blue = gconf_client_get_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_blue", NULL); ++ gtk_color_button_set_color (GTK_COLOR_BUTTON (prefs->color), &color); + + prefs->spell_active = TRUE; + } + + static void +-spell_color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, EMComposerPrefs *prefs) ++spell_color_set (GtkColorButton *color_button, EMComposerPrefs *prefs) + { +- gconf_client_set_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_red", r, NULL); +- gconf_client_set_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_green", g, NULL); +- gconf_client_set_int (prefs->gconf, GNOME_SPELL_GCONF_DIR "/spell_error_color_blue", b, NULL); ++ GdkColor color; ++ ++ gtk_color_button_get_color (GTK_COLOR_BUTTON (color_button), &color); ++ ++ gconf_client_set_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_red", ++ color.red, NULL); ++ gconf_client_set_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_green", ++ color.green, NULL); ++ gconf_client_set_int (prefs->gconf, ++ GNOME_SPELL_GCONF_DIR "/spell_error_color_blue", ++ color.blue, NULL); + } + + static char * +@@ -676,7 +687,7 @@ + + spell_set_ui (prefs); + +- widget = glade_xml_get_widget (prefs->gui, "colorpickerSpellCheckColor"); ++ widget = glade_xml_get_widget (prefs->gui, "colorButtonSpellCheckColor"); + g_signal_connect (widget, "color_set", G_CALLBACK (spell_color_set), prefs); + } + +@@ -922,7 +933,7 @@ + g_free (buf); + + /* Spell Checking: GNOME Spell part */ +- prefs->colour = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerSpellCheckColor")); ++ prefs->color = GTK_COLOR_BUTTON (glade_xml_get_widget (gui, "colorButtonSpellCheckColor")); + prefs->language = GTK_TREE_VIEW (glade_xml_get_widget (gui, "listSpellCheckLanguage")); + model = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER); + gtk_tree_view_set_model (prefs->language, (GtkTreeModel *) model); +@@ -942,7 +953,7 @@ + info_pixmap = glade_xml_get_widget (gui, "pixmapSpellInfo"); + gtk_image_set_from_stock (GTK_IMAGE (info_pixmap), GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_BUTTON); + if (!spell_setup_check_options (prefs)) { +- gtk_widget_hide (GTK_WIDGET (prefs->colour)); ++ gtk_widget_hide (GTK_WIDGET (prefs->color)); + gtk_widget_hide (GTK_WIDGET (prefs->language)); + } + +--- evolution-2.9.91/mail/mail-config.glade.gtk-color-button 2007-02-12 13:32:03.000000000 -0500 ++++ evolution-2.9.91/mail/mail-config.glade 2007-02-12 13:32:03.000000000 -0500 +@@ -5138,10 +5138,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -6079,10 +6078,9 @@ + 6 + + +- ++ + True + True +- True + False + Pick a color + True +@@ -6098,10 +6096,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -6117,10 +6114,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -6136,10 +6132,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -6155,10 +6150,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -8315,7 +8309,7 @@ + 0.5 + 0 + 0 +- colorpickerSpellCheckColor ++ colorButtonSpellCheckColor + PANGO_ELLIPSIZE_NONE + -1 + False +@@ -8329,10 +8323,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +--- evolution-2.9.91/mail/em-mailer-prefs.h.gtk-color-button 2007-02-12 13:32:03.000000000 -0500 ++++ evolution-2.9.91/mail/em-mailer-prefs.h 2007-02-12 13:32:03.000000000 -0500 +@@ -37,7 +37,6 @@ + struct _GdkPixbuf; + struct _GtkWidget; + struct _GladeXML; +-struct _GnomeColorPicker; + struct _GtkFileChooserbutton; + struct _GtkFontButton; + struct _GConfClient; +@@ -80,7 +79,7 @@ + struct _GtkSpinButton *mlimit_count; + struct _GtkOptionMenu *charset; + struct _GtkToggleButton *citation_highlight; +- struct _GnomeColorPicker *citation_color; ++ struct _GtkColorButton *citation_color; + + /* Deleting Mail */ + struct _GtkToggleButton *empty_trash; +@@ -110,7 +109,7 @@ + /* Labels and Colours tab */ + struct { + struct _GtkEntry *name; +- struct _GnomeColorPicker *color; ++ struct _GtkColorButton *color; + } labels[5]; + struct _GtkButton *restore_labels; + +--- evolution-2.9.91/mail/em-composer-prefs.h.gtk-color-button 2007-01-03 10:27:18.000000000 -0500 ++++ evolution-2.9.91/mail/em-composer-prefs.h 2007-02-12 13:32:03.000000000 -0500 +@@ -48,7 +48,6 @@ + struct _GdkPixbuf; + struct _GtkWidget; + struct _GladeXML; +-struct _GnomeColorPicker; + struct _GConfClient; + struct _GtkButton; + struct _GtkTreeView; +@@ -71,7 +70,7 @@ + struct _GtkOptionMenu *charset; + + struct _GtkToggleButton *spell_check; +- struct _GnomeColorPicker *colour; ++ struct _GtkColorButton *color; + struct _GtkTreeView *language; + CORBA_sequence_GNOME_Spell_Language *language_seq; + gboolean spell_active; +--- evolution-2.9.91/mail/em-mailer-prefs.c.gtk-color-button 2007-02-12 13:32:03.000000000 -0500 ++++ evolution-2.9.91/mail/em-mailer-prefs.c 2007-02-12 13:32:03.000000000 -0500 +@@ -35,7 +35,7 @@ + #include "misc/e-charset-picker.h" + #include + +-#include ++#include + #include + #include + +@@ -157,49 +157,27 @@ + + + static void +-colorpicker_set_color (GnomeColorPicker *color, const char *str) ++color_button_set_color (GtkColorButton *color_button, const gchar *spec) + { +- GdkColor colour; +- guint32 rgb; +- +- gdk_color_parse (str, &colour); +- rgb = ((colour.red & 0xff00) << 8) | (colour.green & 0xff00) | ((colour.blue & 0xff00) >> 8); +- +- gnome_color_picker_set_i8 (color, (rgb & 0xff0000) >> 16, (rgb & 0xff00) >> 8, rgb & 0xff, 0xff); +-} ++ GdkColor color; + +-static guint32 +-colorpicker_get_color (GnomeColorPicker *color) +-{ +- guint8 r, g, b, a; +- guint32 rgb = 0; +- +- gnome_color_picker_get_i8 (color, &r, &g, &b, &a); +- +- rgb = r; +- rgb <<= 8; +- rgb |= g; +- rgb <<= 8; +- rgb |= b; +- +- return rgb; ++ if (gdk_color_parse (spec, &color)) ++ gtk_color_button_set_color (color_button, &color); + } + + static void +-citation_color_set (GtkWidget *widget, guint r, guint g, guint b, guint a, EMMailerPrefs *prefs) ++citation_color_set (GtkColorButton *color_button, EMMailerPrefs *prefs) + { +- guint32 rgb = 0; +- char buf[20]; +- +- rgb = r & 0xff; +- rgb <<= 8; +- rgb |= g & 0xff; +- rgb <<= 8; +- rgb |= b & 0xff; +- +- sprintf (buf, "#%06x", rgb & 0xffffff); +- +- gconf_client_set_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", buf, NULL); ++ GdkColor color; ++ gchar spec[16]; ++ ++ gtk_color_button_get_color (color_button, &color); ++ g_snprintf (spec, sizeof (spec), "#%04x%04x%04x", ++ color.red, color.green, color.blue); ++ ++ gconf_client_set_string (prefs->gconf, ++ "/apps/evolution/mail/display/citation_colour", ++ spec, NULL); + } + + static void +@@ -212,9 +190,12 @@ + int i; + + for (i = 4; i >= 0; i--) { ++ GdkColor color; ++ + cstring = gtk_entry_get_text (prefs->labels[i].name); +- rgb = colorpicker_get_color (prefs->labels[i].color); +- string = g_strdup_printf ("%s:#%06x", cstring, rgb & 0xffffff); ++ gtk_color_button_get_color (prefs->labels[i].color, &color); ++ string = g_strdup_printf ("%s:#%04x%04x%04x", cstring, ++ color.red, color.green, color.blue); + list = g_slist_prepend (list, string); + } + +@@ -249,7 +230,7 @@ + + for (i = 0; i < 5; i++) { + gtk_entry_set_text (prefs->labels[i].name, _(label_defaults[i].name)); +- colorpicker_set_color (prefs->labels[i].color, label_defaults[i].colour); ++ color_button_set_color (prefs->labels[i].color, label_defaults[i].colour); + atk_object_set_name(gtk_widget_get_accessible((GtkWidget *)prefs->labels[i].color), _(label_defaults[i].name)); + } + } +@@ -812,9 +793,9 @@ + "/apps/evolution/mail/display/mark_citations", + G_CALLBACK (toggle_button_toggled)); + +- prefs->citation_color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, "colorpickerHighlightCitations")); ++ prefs->citation_color = GTK_COLOR_BUTTON (glade_xml_get_widget (gui, "colorButtonHighlightCitations")); + buf = gconf_client_get_string (prefs->gconf, "/apps/evolution/mail/display/citation_colour", NULL); +- colorpicker_set_color (prefs->citation_color, buf ? buf : "#737373"); ++ color_button_set_color (prefs->citation_color, buf ? buf : "#737373"); + g_signal_connect (prefs->citation_color, "color-set", G_CALLBACK (citation_color_set), prefs); + if (!gconf_client_key_is_writable (prefs->gconf, "/apps/evolution/mail/display/citation_colour", NULL)) + gtk_widget_set_sensitive ((GtkWidget *) prefs->citation_color, FALSE); +@@ -935,14 +916,14 @@ + g_free (widget_name); + + widget_name = g_strdup_printf ("colorLabel%d", i); +- prefs->labels[i].color = GNOME_COLOR_PICKER (glade_xml_get_widget (gui, widget_name)); ++ prefs->labels[i].color = GTK_COLOR_BUTTON (glade_xml_get_widget (gui, widget_name)); + gtk_widget_set_sensitive ((GtkWidget *) prefs->labels[i].color, !locked); + g_free (widget_name); + + gtk_entry_set_text (prefs->labels[i].name, label->name); + g_signal_connect (prefs->labels[i].name, "changed", G_CALLBACK (label_entry_changed), prefs); + +- colorpicker_set_color (prefs->labels[i].color, label->colour); ++ color_button_set_color (prefs->labels[i].color, label->colour); + g_signal_connect (prefs->labels[i].color, "color-set", G_CALLBACK (label_color_set), prefs); + + atk_object_set_name(gtk_widget_get_accessible((GtkWidget *)prefs->labels[i].color), label->name); +--- evolution-2.9.91/filter/filter-colour.h.gtk-color-button 2007-01-03 10:27:18.000000000 -0500 ++++ evolution-2.9.91/filter/filter-colour.h 2007-02-12 13:32:03.000000000 -0500 +@@ -39,7 +39,7 @@ + struct _FilterColour { + FilterElement parent_object; + +- guint16 r, g, b, a; ++ GdkColor color; + }; + + struct _FilterColourClass { +--- evolution-2.9.91/filter/filter-colour.c.gtk-color-button 2007-01-03 10:27:18.000000000 -0500 ++++ evolution-2.9.91/filter/filter-colour.c 2007-02-12 13:32:03.000000000 -0500 +@@ -26,7 +26,7 @@ + #endif + + #include +-#include ++#include + + #include "libedataserver/e-sexp.h" + #include "filter-colour.h" +@@ -120,13 +120,11 @@ + static int + colour_eq (FilterElement *fe, FilterElement *cm) + { +- FilterColour *fc = (FilterColour *)fe, *cc = (FilterColour *)cm; +- +- return FILTER_ELEMENT_CLASS (parent_class)->eq (fe, cm) +- && fc->r == cc->r +- && fc->g == cc->g +- && fc->b == cc->b +- && fc->a == cc->a; ++ FilterColour *fc = (FilterColour *) fe; ++ FilterColour *cc = (FilterColour *) cm; ++ ++ return FILTER_ELEMENT_CLASS (parent_class)->eq (fe, cm) ++ && gdk_color_equal (&fc->color, &cc->color); + } + + static void +@@ -139,76 +137,70 @@ + static xmlNodePtr + xml_encode (FilterElement *fe) + { +- xmlNodePtr value; + FilterColour *fc = (FilterColour *)fe; +- char hex[16]; +- +- d(printf("Encoding colour as xml\n")); ++ xmlNodePtr value; ++ gchar spec[16]; ++ ++ g_snprintf (spec, sizeof (spec), "#%04x%04x%04x", ++ fc->color.red, fc->color.green, fc->color.blue); ++ + value = xmlNewNode(NULL, "value"); + xmlSetProp(value, "name", fe->name); + xmlSetProp(value, "type", "colour"); +- +- sprintf(hex, "%04x", fc->r); +- xmlSetProp(value, "red", hex); +- sprintf(hex, "%04x", fc->g); +- xmlSetProp(value, "green", hex); +- sprintf(hex, "%04x", fc->b); +- xmlSetProp(value, "blue", hex); +- sprintf(hex, "%04x", fc->a); +- xmlSetProp(value, "alpha", hex); +- +- return value; +-} ++ xmlSetProp(value, "spec", spec); + +-static guint16 +-get_value (xmlNodePtr node, char *name) +-{ +- unsigned int ret; +- char *value; +- +- value = xmlGetProp(node, name); +- sscanf(value, "%04x", &ret); +- xmlFree(value); +- return ret; ++ return value; + } + +- + static int + xml_decode (FilterElement *fe, xmlNodePtr node) + { + FilterColour *fc = (FilterColour *)fe; +- ++ xmlChar *prop; ++ + xmlFree (fe->name); + fe->name = xmlGetProp(node, "name"); +- fc->r = get_value(node, "red"); +- fc->g = get_value(node, "green"); +- fc->b = get_value(node, "blue"); +- fc->a = get_value(node, "alpha"); +- ++ ++ prop = xmlGetProp(node, "spec"); ++ if (prop != NULL) { ++ gdk_color_parse(prop, &fc->color); ++ xmlFree (prop); ++ } else { ++ /* try reading the old RGB properties */ ++ prop = xmlGetProp(node, "red"); ++ sscanf(prop, "%" G_GINT16_MODIFIER "x", &fc->color.red); ++ xmlFree (prop); ++ prop = xmlGetProp(node, "green"); ++ sscanf(prop, "%" G_GINT16_MODIFIER "x", &fc->color.green); ++ xmlFree (prop); ++ prop = xmlGetProp(node, "blue"); ++ sscanf(prop, "%" G_GINT16_MODIFIER "x", &fc->color.blue); ++ xmlFree (prop); ++ } ++ + return 0; + } + + static void +-set_colour (GnomeColorPicker *cp, guint r, guint g, guint b, guint a, FilterColour *fc) ++set_color (GtkColorButton *color_button, FilterColour *fc) + { +- fc->r = r; +- fc->g = g; +- fc->b = b; +- fc->a = a; ++ gtk_color_button_get_color (color_button, &fc->color); + } + + static GtkWidget * + get_widget (FilterElement *fe) + { + FilterColour *fc = (FilterColour *) fe; +- GnomeColorPicker *cp; +- +- cp = (GnomeColorPicker *) gnome_color_picker_new (); +- gnome_color_picker_set_i16 (cp, fc->r, fc->g, fc->b, fc->a); +- gtk_widget_show ((GtkWidget *) cp); +- g_signal_connect (cp, "color_set", G_CALLBACK (set_colour), fe); ++ GtkWidget *color_button; ++ ++ color_button = gtk_color_button_new_with_color (&fc->color); ++ gtk_widget_show (color_button); ++ ++ g_signal_connect ( ++ G_OBJECT (color_button), "color_set", ++ G_CALLBACK (set_color), fe); + +- return (GtkWidget *) cp; ++ return color_button; + } + + static void +@@ -221,9 +213,9 @@ + format_sexp (FilterElement *fe, GString *out) + { + FilterColour *fc = (FilterColour *)fe; +- char *str; +- +- str = g_strdup_printf ("#%02x%02x%02x", (fc->r >> 8) & 0xff, (fc->g >> 8) & 0xff, (fc->b >> 8) & 0xff); +- e_sexp_encode_string (out, str); +- g_free (str); ++ gchar spec[16]; ++ ++ g_snprintf (spec, sizeof (spec), "#%04x%04x%04x", ++ fc->color.red, fc->color.green, fc->color.blue); ++ e_sexp_encode_string (out, spec); + } +--- evolution-2.9.91/filter/filter-element.c.gtk-color-button 2007-01-03 10:27:18.000000000 -0500 ++++ evolution-2.9.91/filter/filter-element.c 2007-02-12 13:32:03.000000000 -0500 +@@ -293,12 +293,10 @@ + } + } else if (IS_FILTER_COLOUR(se)) { + if (IS_FILTER_COLOUR(de)) { +- FilterColour *s = (FilterColour *)se, *d = (FilterColour *)de; ++ FilterColour *s = (FilterColour *)se; ++ FilterColour *d = (FilterColour *)de; + +- d->r = s->r; +- d->g = s->g; +- d->b = s->b; +- d->a = s->a; ++ d->color = s->color; + } + } else if (IS_FILTER_DATESPEC(se)) { + if (IS_FILTER_DATESPEC(de)) { +--- evolution-2.9.91/plugins/groupwise-account-setup/camel-gw-listener.c.gtk-color-button 2007-02-09 15:16:33.000000000 -0500 ++++ evolution-2.9.91/plugins/groupwise-account-setup/camel-gw-listener.c 2007-02-12 13:41:50.000000000 -0500 +@@ -212,12 +212,13 @@ + e_source_set_property (source, "use_ssl", use_ssl); + e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); + if (parent_id_name) { +- guint32 color; ++ char *color; + e_source_set_property (source, "parent_id_name", parent_id_name); +- color = (guint32) atoi((char *)(camel_url_get_param (url, "color"))); +- e_source_set_color (source, color); ++ color = g_strdup_printf ("#%s", camel_url_get_param (url, "color")); ++ e_source_set_color_spec (source, color); ++ g_free (color); + } else +- e_source_set_color (source, 0xEEBC60); ++ e_source_set_color_spec (source, "#EEBC60"); + e_source_group_add_source (group, source, -1); + e_source_list_sync (source_list, NULL); + +--- evolution-2.9.91/calendar/gui/tasks-component.c.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/tasks-component.c 2007-02-12 13:32:03.000000000 -0500 +@@ -209,7 +209,7 @@ + calendar_config_set_tasks_selected (&selected); + } + +- e_source_set_color (source, 0xBECEDD); ++ e_source_set_color_spec (source, "#BECEDD"); + personal_source = source; + } + +--- evolution-2.9.91/calendar/gui/dialogs/cal-prefs-dialog.c.gtk-color-button 2007-02-12 13:32:02.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/dialogs/cal-prefs-dialog.c 2007-02-12 13:32:03.000000000 -0500 +@@ -96,21 +96,6 @@ + return glade_xml_get_widget (prefs->gui, item->label); + } + +-/* Returns a pointer to a static string with an X color spec for the current +- * value of a color picker. +- */ +-static const char * +-spec_from_picker (GtkWidget *picker) +-{ +- static char spec[8]; +- guint8 r, g, b; +- +- gnome_color_picker_get_i8 (GNOME_COLOR_PICKER (picker), &r, &g, &b, NULL); +- g_snprintf (spec, sizeof (spec), "#%02x%02x%02x", r, g, b); +- +- return spec; +-} +- + static void + working_days_changed (GtkWidget *widget, CalendarPrefsDialog *prefs) + { +@@ -277,15 +262,21 @@ + } + + static void +-tasks_due_today_set_color (GnomeColorPicker *picker, guint r, guint g, guint b, guint a, CalendarPrefsDialog *prefs) ++tasks_due_today_set_color (GtkColorButton *color_button, CalendarPrefsDialog *prefs) + { +- calendar_config_set_tasks_due_today_color (spec_from_picker (prefs->tasks_due_today_color)); ++ GdkColor color; ++ ++ gtk_color_button_get_color (color_button, &color); ++ calendar_config_set_tasks_due_today_color (&color); + } + + static void +-tasks_overdue_set_color (GnomeColorPicker *picker, guint r, guint g, guint b, guint a, CalendarPrefsDialog *prefs) ++tasks_overdue_set_color (GtkColorButton *color_button, CalendarPrefsDialog *prefs) + { +- calendar_config_set_tasks_overdue_color (spec_from_picker (prefs->tasks_overdue_color)); ++ GdkColor color; ++ ++ gtk_color_button_get_color (color_button, &color); ++ calendar_config_set_tasks_overdue_color (&color); + } + + static void +@@ -417,22 +408,6 @@ + g_signal_connect (G_OBJECT (prefs->template_url), "changed", G_CALLBACK (template_url_changed), prefs); + } + +-/* Sets the color in a color picker from an X color spec */ +-static void +-set_color_picker (GtkWidget *picker, const char *spec) +-{ +- GdkColor color; +- +- if (!spec || !gdk_color_parse (spec, &color)) +- color.red = color.green = color.blue = 0; +- +- gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (picker), +- color.red, +- color.green, +- color.blue, +- 65535); +-} +- + /* Shows the current Free/Busy settings in the dialog */ + static void + show_fb_config (CalendarPrefsDialog *prefs) +@@ -449,11 +424,18 @@ + static void + show_task_list_config (CalendarPrefsDialog *prefs) + { ++ GtkColorButton *color_button; ++ GdkColor color; + CalUnits units; + gboolean hide_completed_tasks = FALSE; + +- set_color_picker (prefs->tasks_due_today_color, calendar_config_get_tasks_due_today_color ()); +- set_color_picker (prefs->tasks_overdue_color, calendar_config_get_tasks_overdue_color ()); ++ color_button = GTK_COLOR_BUTTON (prefs->tasks_due_today_color); ++ calendar_config_get_tasks_due_today_color (&color); ++ gtk_color_button_set_color (color_button, &color); ++ ++ color_button = GTK_COLOR_BUTTON (prefs->tasks_overdue_color); ++ calendar_config_get_tasks_overdue_color (&color); ++ gtk_color_button_set_color (color_button, &color); + + /* Hide Completed Tasks. */ + e_dialog_toggle_set (prefs->tasks_hide_completed, calendar_config_get_hide_completed_tasks ()); +--- evolution-2.9.91/calendar/gui/dialogs/calendar-setup.c.gtk-color-button 2007-01-03 10:27:56.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/dialogs/calendar-setup.c 2007-02-12 13:32:03.000000000 -0500 +@@ -73,44 +73,22 @@ + } + + static void +-colorpicker_set_color (GnomeColorPicker *color, guint32 rgb) +-{ +- gnome_color_picker_set_i8 (color, (rgb & 0xff0000) >> 16, (rgb & 0xff00) >> 8, rgb & 0xff, 0xff); +-} +- +-static guint32 +-colorpicker_get_color (GnomeColorPicker *color) +-{ +- guint8 r, g, b, a; +- guint32 rgb = 0; +- +- gnome_color_picker_get_i8 (color, &r, &g, &b, &a); +- +- rgb = r; +- rgb <<= 8; +- rgb |= g; +- rgb <<= 8; +- rgb |= b; +- +- return rgb; +-} +- +-static void + eccp_commit (EConfig *ec, GSList *items, void *data) + { + CalendarSourceDialog *sdialog = data; + xmlNodePtr xml; + + if (sdialog->original_source) { +- guint32 color; ++ const gchar *color_spec; + + xml = xmlNewNode (NULL, "dummy"); + e_source_dump_to_xml_node (sdialog->source, xml); + e_source_update_from_xml_node (sdialog->original_source, xml->children, NULL); + xmlFreeNode (xml); + +- if (e_source_get_color (sdialog->source, &color)) +- e_source_set_color (sdialog->original_source, color); ++ color_spec = e_source_peek_color_spec (sdialog->source); ++ if (color_spec != NULL) ++ e_source_set_color_spec (sdialog->original_source, color_spec); + } else { + e_source_group_add_source (sdialog->source_group, sdialog->source, -1); + e_source_list_sync (sdialog->source_list, NULL); +@@ -304,63 +282,80 @@ + } + + static void +-color_changed (GnomeColorPicker *picker, guint r, guint g, guint b, guint a, ECalConfigTargetSource *t) ++color_changed (GtkColorButton *color_button, ECalConfigTargetSource *target) + { +- ESource *source = t->source; +- e_source_set_color (source, colorpicker_get_color (picker)); ++ ESource *source = target->source; ++ gchar color_spec[16]; ++ GdkColor color; ++ ++ gtk_color_button_get_color (color_button, &color); ++ g_snprintf (color_spec, sizeof (color_spec), "#%04x%04x%04x", ++ color.red, color.green, color.blue); ++ e_source_set_color_spec (source, color_spec); ++} ++ ++static const gchar * ++choose_initial_color (void) ++{ ++ static const gchar *colors[] = { ++ "#BECEDD", /* 190 206 221 Blue */ ++ "#E2F0EF", /* 226 240 239 Light Blue */ ++ "#C6E2B7", /* 198 226 183 Green */ ++ "#E2F0D3", /* 226 240 211 Light Green */ ++ "#E2D4B7", /* 226 212 183 Khaki */ ++ "#EAEAC1", /* 234 234 193 Light Khaki */ ++ "#F0B8B7", /* 240 184 183 Pink */ ++ "#FED4D3", /* 254 212 211 Light Pink */ ++ "#E2C6E1", /* 226 198 225 Purple */ ++ "#F0E2EF" /* 240 226 239 Light Purple */ ++ }; ++ ++ return colors[g_random_int_range (0, G_N_ELEMENTS (colors))]; + } + + static GtkWidget * + eccp_get_source_color (EConfig *ec, EConfigItem *item, struct _GtkWidget *parent, struct _GtkWidget *old, void *data) + { + CalendarSourceDialog *sdialog = data; +- static GtkWidget *label, *picker; +- int row; +- ECalConfigTargetSource *t = (ECalConfigTargetSource *) ec->target; +- static guint32 assigned_colors[] = { +- 0xBECEDD, /* 190 206 221 Blue */ +- 0xE2F0EF, /* 226 240 239 Light Blue */ +- 0xC6E2B7, /* 198 226 183 Green */ +- 0xE2F0D3, /* 226 240 211 Light Green */ +- 0xE2D4B7, /* 226 212 183 Khaki */ +- 0xEAEAC1, /* 234 234 193 Light Khaki */ +- 0xF0B8B7, /* 240 184 183 Pink */ +- 0xFED4D3, /* 254 212 211 Light Pink */ +- 0xE2C6E1, /* 226 198 225 Purple */ +- 0xF0E2EF /* 240 226 239 Light Purple */ +- }; +- GRand *rand = g_rand_new (); +- guint32 color; ++ static GtkWidget *label, *color_button; ++ guint row = GTK_TABLE (parent)->nrows; ++ const gchar *color_spec = NULL; ++ GdkColor color; + + if (old) + gtk_widget_destroy (label); + +- row = ((GtkTable*)parent)->nrows; ++ if (sdialog->original_source) ++ color_spec = e_source_peek_color_spec (sdialog->original_source); ++ ++ if (color_spec == NULL) { ++ color_spec = choose_initial_color (); ++ e_source_set_color_spec (sdialog->source, color_spec); ++ } + +- color = assigned_colors[g_rand_int_range (rand, 0, 9)]; +- g_rand_free (rand); ++ if (!gdk_color_parse (color_spec, &color)) ++ g_warning ("Unknown color \"%s\" in calendar \"%s\"", ++ color_spec, e_source_peek_name (sdialog->source)); + + label = gtk_label_new_with_mnemonic (_("C_olor:")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); ++ gtk_table_attach ( ++ GTK_TABLE (parent), label, ++ 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); + gtk_widget_show (label); +- gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0); +- +- picker = gnome_color_picker_new (); +- gtk_widget_show (picker); +- gtk_label_set_mnemonic_widget (GTK_LABEL (label), picker); +- gtk_table_attach (GTK_TABLE (parent), picker, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0); +- g_signal_connect (G_OBJECT (picker), "color-set", G_CALLBACK (color_changed), t); +- +- if (sdialog->original_source) +- e_source_get_color (sdialog->original_source, &color); +- else +- /* since we don't have an original source here, we want to set +- * the initial color */ +- e_source_set_color (sdialog->source, color); + +- colorpicker_set_color (GNOME_COLOR_PICKER (picker), color); ++ color_button = gtk_color_button_new_with_color (&color); ++ gtk_label_set_mnemonic_widget (GTK_LABEL (label), color_button); ++ gtk_table_attach ( ++ GTK_TABLE (parent), color_button, ++ 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); ++ gtk_widget_show (color_button); ++ ++ g_signal_connect ( ++ G_OBJECT (color_button), "color-set", ++ G_CALLBACK (color_changed), ec->target); + +- return picker; ++ return color_button; + } + + static ECalConfigItem eccp_items[] = { +@@ -414,7 +409,7 @@ + ECalConfigTargetSource *target; + + if (source) { +- guint32 color; ++ const gchar *color_spec; + + sdialog->original_source = source; + g_object_ref (source); +@@ -423,8 +418,9 @@ + sdialog->source = e_source_new_from_standalone_xml (xml); + g_free (xml); + +- if (e_source_get_color (source, &color)) +- e_source_set_color (sdialog->source, color); ++ color_spec = e_source_peek_color_spec (source); ++ if (color_spec != NULL) ++ e_source_set_color_spec (sdialog->source, color_spec); + } else { + GConfClient *gconf; + GSList *l, *ptr, *temp = NULL; +@@ -504,7 +500,7 @@ + ECalConfigTargetSource *target; + + if (source) { +- guint32 color; ++ const gchar *color_spec; + + sdialog->original_source = source; + g_object_ref (source); +@@ -513,8 +509,8 @@ + sdialog->source = e_source_new_from_standalone_xml (xml); + g_free (xml); + +- e_source_get_color (source, &color); +- e_source_set_color (sdialog->source, color); ++ color_spec = e_source_peek_color_spec (source); ++ e_source_set_color_spec (sdialog->source, color_spec); + } else { + GConfClient *gconf; + GSList *l, *ptr, *temp = NULL; +@@ -589,7 +585,7 @@ + ECalConfigTargetSource *target; + + if (source) { +- guint32 color; ++ const gchar *color_spec; + + sdialog->original_source = source; + g_object_ref (source); +@@ -598,8 +594,8 @@ + sdialog->source = e_source_new_from_standalone_xml (xml); + g_free (xml); + +- e_source_get_color (source, &color); +- e_source_set_color (sdialog->source, color); ++ color_spec = e_source_peek_color_spec (source); ++ e_source_set_color_spec (sdialog->source, color_spec); + } else { + GConfClient *gconf; + GSList *l; +--- evolution-2.9.91/calendar/gui/dialogs/cal-prefs-dialog.glade.gtk-color-button 2007-01-03 10:27:56.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/dialogs/cal-prefs-dialog.glade 2007-02-12 13:32:03.000000000 -0500 +@@ -1231,10 +1231,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +@@ -1250,10 +1249,9 @@ + + + +- ++ + True + True +- True + False + Pick a color + True +--- evolution-2.9.91/calendar/gui/e-cal-model-tasks.c.gtk-color-button 2007-01-08 09:50:33.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/e-cal-model-tasks.c 2007-02-12 13:32:03.000000000 -0500 +@@ -1025,14 +1025,28 @@ + static const char * + ecmt_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data) + { ++ static gchar color_spec[16]; ++ GdkColor color; ++ + g_return_val_if_fail (E_IS_CAL_MODEL_TASKS (model), NULL); + g_return_val_if_fail (comp_data != NULL, NULL); + ++ /* XXX ECalModel's get_color_for_component() method should really ++ * get a GdkColor instead of a color specification string. */ ++ + switch (get_due_status ((ECalModelTasks *) model, comp_data)) { + case E_CAL_MODEL_TASKS_DUE_TODAY: +- return calendar_config_get_tasks_due_today_color (); ++ /* XXX ugly hack */ ++ calendar_config_get_tasks_due_today_color (&color); ++ g_snprintf (color_spec, sizeof (color_spec), "#%04x%04x%04x", ++ color.red, color.green, color.blue); ++ return color_spec; + case E_CAL_MODEL_TASKS_DUE_OVERDUE: +- return calendar_config_get_tasks_overdue_color (); ++ /* XXX ugly hack */ ++ calendar_config_get_tasks_overdue_color (&color); ++ g_snprintf (color_spec, sizeof (color_spec), "#%04x%04x%04x", ++ color.red, color.green, color.blue); ++ return color_spec; + case E_CAL_MODEL_TASKS_DUE_NEVER: + case E_CAL_MODEL_TASKS_DUE_FUTURE: + case E_CAL_MODEL_TASKS_DUE_COMPLETE: +--- evolution-2.9.91/calendar/gui/memos-component.c.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/memos-component.c 2007-02-12 13:32:03.000000000 -0500 +@@ -213,7 +213,7 @@ + calendar_config_set_memos_selected (&selected); + } + +- e_source_set_color (source, 0xBECEDD); ++ e_source_set_color_spec (source, "#BECEDD"); + personal_source = source; + } + +--- evolution-2.9.91/calendar/gui/calendar-component.c.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/calendar-component.c 2007-02-12 13:32:03.000000000 -0500 +@@ -252,7 +252,7 @@ + } + + g_free (primary_calendar); +- e_source_set_color (personal_source, 0xBECEDD); ++ e_source_set_color_spec (personal_source, "#BECEDD"); + } + + if (!on_the_web) { +--- evolution-2.9.91/calendar/gui/e-cal-model.c.gtk-color-button 2007-01-08 09:50:33.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/e-cal-model.c 2007-02-12 13:32:03.000000000 -0500 +@@ -947,7 +947,7 @@ + ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data) + { + ESource *source; +- guint32 source_color; ++ const gchar *color_spec; + gint i, first_empty = 0; + static AssignedColorData assigned_colors[] = { + { "#BECEDD", NULL }, /* 190 206 221 Blue */ +@@ -965,9 +965,10 @@ + g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL); + + source = e_cal_get_source (comp_data->client); +- if (e_source_get_color (source, &source_color)) { ++ color_spec = e_source_peek_color_spec (source); ++ if (color_spec != NULL) { + g_free (comp_data->color); +- comp_data->color = g_strdup_printf ("#%06x", source_color & 0xffffff); ++ comp_data->color = g_strdup (color_spec); + return comp_data->color; + } + +--- evolution-2.9.91/calendar/gui/calendar-config.h.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/calendar-config.h 2007-02-12 13:32:03.000000000 -0500 +@@ -31,6 +31,7 @@ + #define _CALENDAR_CONFIG_H_ + + #include ++#include + #include + #include + +@@ -201,11 +202,11 @@ + guint calendar_config_add_notification_primary_memos (GConfClientNotifyFunc func, gpointer data); + + /* Colors for the task list */ +-const char *calendar_config_get_tasks_due_today_color (void); +-void calendar_config_set_tasks_due_today_color (const char *color); ++void calendar_config_get_tasks_due_today_color (GdkColor *color); ++void calendar_config_set_tasks_due_today_color (GdkColor *color); + +-const char *calendar_config_get_tasks_overdue_color (void); +-void calendar_config_set_tasks_overdue_color (const char *color); ++void calendar_config_get_tasks_overdue_color (GdkColor *color); ++void calendar_config_set_tasks_overdue_color (GdkColor *color); + + /* Settings to hide completed tasks. */ + gboolean calendar_config_get_hide_completed_tasks (void); +--- evolution-2.9.91/calendar/gui/migration.c.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/migration.c 2007-02-12 13:32:03.000000000 -0500 +@@ -406,7 +406,7 @@ + e_source_group_add_source (group, source, -1); + g_object_unref (source); + +- e_source_set_color (source, 0xFED4D3); ++ e_source_set_color_spec (source, "#FED4D3"); + e_source_group_set_readonly (group, TRUE); + + return group; +@@ -497,7 +497,7 @@ + } + + g_free (primary_calendar); +- e_source_set_color (source, 0xBECEDD); ++ e_source_set_color_spec (source, "#BECEDD"); + *personal_source = source; + } + +@@ -590,7 +590,7 @@ + calendar_config_set_tasks_selected (&selected); + } + +- e_source_set_color (source, 0xBECEDD); ++ e_source_set_color_spec (source, "#BECEDD"); + *personal_source = source; + } + +@@ -1098,7 +1098,7 @@ + calendar_config_set_memos_selected (&selected); + } + +- e_source_set_color (source, 0xBECEDD); ++ e_source_set_color_spec (source, "#BECEDD"); + *personal_source = source; + } + +@@ -1161,7 +1161,7 @@ + e_source_set_property (source, "use_ssl", use_ssl); + e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); + +- e_source_set_color (source, 0xEEBC60); ++ e_source_set_color_spec (source, "#EEBC60"); + e_source_group_add_source (group, source, -1); + + ids = gconf_client_get_list (client, CALENDAR_CONFIG_MEMOS_SELECTED_MEMOS, GCONF_VALUE_STRING, NULL); +--- evolution-2.9.91/calendar/gui/calendar-config.c.gtk-color-button 2007-01-03 10:28:00.000000000 -0500 ++++ evolution-2.9.91/calendar/gui/calendar-config.c 2007-02-12 13:32:03.000000000 -0500 +@@ -1219,68 +1219,104 @@ + + /** + * calendar_config_get_tasks_due_today_color: ++ * @color: the location to store the color + * + * Queries the color to be used to display tasks that are due today. +- * +- * Return value: An X color specification. + **/ +-const char * +-calendar_config_get_tasks_due_today_color (void) ++void ++calendar_config_get_tasks_due_today_color (GdkColor *color) + { +- static char *color = NULL; ++ const gchar *key = CALENDAR_CONFIG_TASKS_DUE_TODAY_COLOR; ++ GError *error = NULL; ++ gchar *color_spec; + +- if (color) +- g_free (color); ++ g_return_if_fail (color != NULL); + +- color = gconf_client_get_string (config, CALENDAR_CONFIG_TASKS_DUE_TODAY_COLOR, NULL); +- return color; ++ color_spec = gconf_client_get_string (config, key, &error); ++ ++ if (color_spec != NULL && !gdk_color_parse (color_spec, color)) ++ g_warning ("Unknown color \"%s\"", color_spec); ++ else if (error != NULL) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } ++ ++ g_free (color_spec); + } + + /** + * calendar_config_set_tasks_due_today_color: +- * @color: X color specification ++ * @color: a #GdkColor + * + * Sets the color to be used to display tasks that are due today. + **/ + void +-calendar_config_set_tasks_due_today_color (const char *color) ++calendar_config_set_tasks_due_today_color (GdkColor *color) + { ++ const gchar *key = CALENDAR_CONFIG_TASKS_DUE_TODAY_COLOR; ++ GError *error = NULL; ++ gchar color_spec[16]; ++ + g_return_if_fail (color != NULL); + +- gconf_client_set_string (config, CALENDAR_CONFIG_TASKS_DUE_TODAY_COLOR, color, NULL); ++ g_snprintf (color_spec, sizeof (color_spec), "#%04x%04x%04x", ++ color->red, color->green, color->blue); ++ ++ if (!gconf_client_set_string (config, key, color_spec, &error)) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } + } + + /** + * calendar_config_get_tasks_overdue_color: ++ * @color: the location to store the color + * + * Queries the color to be used to display overdue tasks. +- * +- * Return value: An X color specification. + **/ +-const char * +-calendar_config_get_tasks_overdue_color (void) ++void ++calendar_config_get_tasks_overdue_color (GdkColor *color) + { +- static char *color = NULL; ++ const gchar *key = CALENDAR_CONFIG_TASKS_OVERDUE_COLOR; ++ GError *error = NULL; ++ gchar *color_spec; + +- if (color) +- g_free (color); ++ g_return_if_fail (color != NULL); + +- color = gconf_client_get_string (config, CALENDAR_CONFIG_TASKS_OVERDUE_COLOR, NULL); +- return color; ++ color_spec = gconf_client_get_string (config, key, &error); ++ ++ if (color_spec != NULL && !gdk_color_parse (color_spec, color)) ++ g_warning ("Unknown color \"%s\"", color_spec); ++ else if (error != NULL) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } ++ ++ g_free (color_spec); + } + + /** + * calendar_config_set_tasks_overdue_color: +- * @color: X color specification ++ * @color: a #GdkColor + * + * Sets the color to be used to display overdue tasks. + **/ + void +-calendar_config_set_tasks_overdue_color (const char *color) ++calendar_config_set_tasks_overdue_color (GdkColor *color) + { ++ const gchar *key = CALENDAR_CONFIG_TASKS_OVERDUE_COLOR; ++ GError *error = NULL; ++ gchar color_spec[16]; ++ + g_return_if_fail (color != NULL); + +- gconf_client_set_string (config, CALENDAR_CONFIG_TASKS_OVERDUE_COLOR, color, NULL); ++ g_snprintf (color_spec, sizeof (color_spec), "#%04x%04x%04x", ++ color->red, color->green, color->blue); ++ ++ if (!gconf_client_set_string (config, key, color_spec, &error)) { ++ g_warning ("%s", error->message); ++ g_error_free (error); ++ } + } + + /** diff --git a/evolution-2.9.3-meeting-list-view.patch b/evolution-2.9.3-meeting-list-view.patch new file mode 100644 index 0000000..9b87a14 --- /dev/null +++ b/evolution-2.9.3-meeting-list-view.patch @@ -0,0 +1,86 @@ +--- evolution-2.9.3/calendar/gui/e-meeting-list-view.c.meeting-list-view 2006-12-11 23:13:47.000000000 -0500 ++++ evolution-2.9.3/calendar/gui/e-meeting-list-view.c 2006-12-11 23:14:17.000000000 -0500 +@@ -623,18 +623,45 @@ + + } + ++void ++attendee_added_cb (EMeetingStore *store, GtkTreePath *path, ++ GtkTreeIter *iter, EMeetingListView *view) ++{ ++ EMeetingAttendee *attendee; ++ gint row; ++ ++ /* Add the new attendee to the name selector. */ ++ row = gtk_tree_path_get_indices (path) [0]; ++ attendee = e_meeting_store_find_attendee_at_row (store, row); ++ e_meeting_list_view_add_attendee_to_name_selector (view, attendee); ++} ++ ++void ++attendee_deleted_cb (EMeetingStore *store, GtkTreePath *path, ++ EMeetingListView *view) ++{ ++ EMeetingAttendee *attendee; ++ gint row; ++ ++ /* Remove the old attendee from the name selector. */ ++ row = gtk_tree_path_get_indices (path) [0]; ++ attendee = e_meeting_store_find_attendee_at_row (store, row); ++ e_meeting_list_view_remove_attendee_from_name_selector (view, attendee); ++} + + EMeetingListView * + e_meeting_list_view_new (EMeetingStore *store) + { +- EMeetingListView *view = g_object_new (E_TYPE_MEETING_LIST_VIEW, NULL); ++ EMeetingListView *view; + GtkTreeSelection *selection; + +- if (view) { +- view->priv->store = store; +- gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (store)); +- build_table (view); +- } ++ view = g_object_new (E_TYPE_MEETING_LIST_VIEW, NULL); ++ view->priv->store = store; ++ gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (store)); ++ build_table (view); ++ ++ g_signal_connect (store, "row-inserted", G_CALLBACK (attendee_added_cb), view); ++ g_signal_connect (store, "row-deleted", G_CALLBACK (attendee_deleted_cb), view); + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); + g_signal_connect (selection, "changed", G_CALLBACK (row_activated_cb), view); +--- evolution-2.9.3/calendar/gui/e-meeting-store.c.meeting-list-view 2006-12-04 10:44:42.000000000 -0500 ++++ evolution-2.9.3/calendar/gui/e-meeting-store.c 2006-12-11 23:14:17.000000000 -0500 +@@ -794,14 +794,13 @@ + } + + if (row != -1) { +- +- g_ptr_array_remove_index (store->priv->attendees, row); +- g_object_unref (attendee); +- + path = gtk_tree_path_new (); + gtk_tree_path_append_index (path, row); + gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), path); + gtk_tree_path_free (path); ++ ++ g_ptr_array_remove_index (store->priv->attendees, row); ++ g_object_unref (attendee); + } + } + +@@ -815,10 +814,10 @@ + + for (i = 0; i < store->priv->attendees->len; i++) { + EMeetingAttendee *attendee = g_ptr_array_index (store->priv->attendees, i); +- g_object_unref (attendee); + + gtk_tree_model_row_deleted (GTK_TREE_MODEL (store), path); + gtk_tree_path_next (path); ++ g_object_unref (attendee); + } + + g_ptr_array_set_size (store->priv->attendees, 0); diff --git a/evolution-2.9.3-source-path-entry.patch b/evolution-2.9.3-source-path-entry.patch new file mode 100644 index 0000000..2a6337a --- /dev/null +++ b/evolution-2.9.3-source-path-entry.patch @@ -0,0 +1,19 @@ +--- evolution-2.9.3/mail/mail-config.glade.source-path-entry 2006-12-08 20:15:16.000000000 -0500 ++++ evolution-2.9.3/mail/mail-config.glade 2006-12-08 20:16:13.000000000 -0500 +@@ -1343,7 +1343,7 @@ + + True + Mailbox location +- GTK_FILE_CHOOSER_ACTION_OPEN ++ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER + True + False + False +@@ -1354,7 +1354,6 @@ + 2 + 2 + 3 +- fill + + + diff --git a/evolution-2.9.3-unread-messages.patch b/evolution-2.9.3-unread-messages.patch new file mode 100644 index 0000000..9eb3b97 --- /dev/null +++ b/evolution-2.9.3-unread-messages.patch @@ -0,0 +1,63 @@ +--- evolution-2.9.3/mail/em-folder-properties.c.unread-messages 2006-12-09 09:00:08.000000000 -0500 ++++ evolution-2.9.3/mail/em-folder-properties.c 2006-12-09 09:00:09.000000000 -0500 +@@ -145,27 +145,27 @@ + gtk_widget_show (table); + gtk_box_pack_start ((GtkBox *) parent, table, TRUE, TRUE, 0); + +- /* TODO: can this be done in a loop? */ + /* to be on the safe side, ngettext is used here, see e.g. comment #3 at bug 272567 */ +- label = gtk_label_new (ngettext ("Total messages:", "Total messages:", prop_data->total)); ++ label = gtk_label_new (ngettext ("Unread messages:", "Unread messages:", prop_data->unread)); + gtk_widget_show (label); + gtk_misc_set_alignment ((GtkMisc *) label, 0.0, 0.5); + gtk_table_attach ((GtkTable *) table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0); + +- sprintf(countstr, "%d", prop_data->total); ++ sprintf(countstr, "%d", prop_data->unread); + label = gtk_label_new (countstr); + gtk_widget_show (label); + gtk_misc_set_alignment ((GtkMisc *) label, 1.0, 0.5); + gtk_table_attach ((GtkTable *) table, label, 1, 2, row, row+1, GTK_FILL | GTK_EXPAND, 0, 0, 0); + row++; + ++ /* TODO: can this be done in a loop? */ + /* to be on the safe side, ngettext is used here, see e.g. comment #3 at bug 272567 */ +- label = gtk_label_new (ngettext ("Unread messages:", "Unread messages:", prop_data->unread)); ++ label = gtk_label_new (ngettext ("Total messages:", "Total messages:", prop_data->total)); + gtk_widget_show (label); + gtk_misc_set_alignment ((GtkMisc *) label, 0.0, 0.5); + gtk_table_attach ((GtkTable *) table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0); + +- sprintf(countstr, "%d", prop_data->unread); ++ sprintf(countstr, "%d", prop_data->total); + label = gtk_label_new (countstr); + gtk_widget_show (label); + gtk_misc_set_alignment ((GtkMisc *) label, 1.0, 0.5); +--- evolution-2.9.3/mail/mail-component.c.unread-messages 2006-12-09 09:00:08.000000000 -0500 ++++ evolution-2.9.3/mail/mail-component.c 2006-12-09 09:00:09.000000000 -0500 +@@ -544,6 +544,9 @@ + || g_ascii_strcasecmp(emfv->folder->full_name, ".") == 0) + bits |= 8; + ++ if (selected->len > 1) ++ g_string_append_printf(tmp, ngettext ("%d selected, ", "%d selected, ", selected->len), selected->len); ++ + if (bits == 1) + g_string_append_printf(tmp, ngettext ("%d draft", "%d drafts", visible), visible); + else if (bits == 2) +@@ -553,13 +556,11 @@ + else { + if (!emfv->hide_deleted) + visible += deleted; ++ if (unread && selected->len <= 1) ++ g_string_append_printf(tmp, ngettext ("%d unread, ", "%d unread, ", unread), unread); + g_string_append_printf(tmp, ngettext ("%d total", "%d total", visible), visible); +- if (unread && selected->len <=1) +- g_string_append_printf(tmp, ngettext (", %d unread", ", %d unread", unread), unread); + } + +- if (selected->len > 1) +- g_string_append_printf(tmp, ngettext (", %d selected", ", %d selected", selected->len), selected->len); + message_list_free_uids(emfv->list, selected); + } + diff --git a/evolution-2.9.3-view-attachment-uri.patch b/evolution-2.9.3-view-attachment-uri.patch new file mode 100644 index 0000000..a506488 --- /dev/null +++ b/evolution-2.9.3-view-attachment-uri.patch @@ -0,0 +1,46 @@ +--- evolution-2.9.3/mail/mail-ops.c.view-attachment-uri 2006-12-06 10:26:24.000000000 -0500 ++++ evolution-2.9.3/mail/mail-ops.c 2006-12-06 11:16:46.000000000 -0500 +@@ -2089,21 +2089,23 @@ + save_part_save (struct _mail_msg *mm) + { + struct _save_part_msg *m = (struct _save_part_msg *)mm; ++ mode_t mode = S_IRUSR | S_IRGRP | S_IROTH; ++ int flags = O_WRONLY | O_CREAT | O_TRUNC; + CamelDataWrapper *content; + CamelStream *stream; +- +- if(!m->readonly){ +- if (!(stream = camel_stream_vfs_new_with_uri (m->path, O_WRONLY | O_CREAT | O_TRUNC, 0644))) { +- camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, +- _("Cannot create output file: %s:\n %s"), +- m->path, g_strerror (errno)); +- return; +- } +- } else if (!(stream = camel_stream_vfs_new_with_uri (m->path, O_WRONLY | O_CREAT | O_TRUNC, 0444))) { ++ gchar *uri; ++ ++ uri = g_filename_to_uri (m->path, NULL, NULL); ++ ++ if (!m->readonly) ++ mode |= S_IWUSR; ++ ++ stream = camel_stream_vfs_new_with_uri (uri, flags, mode); ++ if (stream == NULL) { + camel_exception_setv (&mm->ex, CAMEL_EXCEPTION_SYSTEM, + _("Cannot create output file: %s:\n %s"), + m->path, g_strerror (errno)); +- return; ++ goto exit; + } + + content = camel_medium_get_content_object (CAMEL_MEDIUM (m->part)); +@@ -2115,6 +2117,9 @@ + g_strerror (errno)); + + camel_object_unref (stream); ++ ++exit: ++ g_free (uri); + } + + static void diff --git a/evolution-2.9.4-view-message-source.patch b/evolution-2.9.4-view-message-source.patch new file mode 100644 index 0000000..bd0ed6d --- /dev/null +++ b/evolution-2.9.4-view-message-source.patch @@ -0,0 +1,11 @@ +--- evolution-2.9.4/mail/em-format-html.c.view-message-source 2006-12-20 10:51:00.000000000 -0500 ++++ evolution-2.9.4/mail/em-format-html.c 2006-12-21 10:08:02.000000000 -0500 +@@ -1872,7 +1872,7 @@ + filtered_stream = camel_stream_filter_new_with_stream ((CamelStream *) stream); + html_filter = camel_mime_filter_tohtml_new (CAMEL_MIME_FILTER_TOHTML_CONVERT_NL + | CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES +- | CAMEL_MIME_FILTER_TOHTML_ESCAPE_8BIT, 0); ++ | CAMEL_MIME_FILTER_TOHTML_PRESERVE_8BIT, 0); + camel_stream_filter_add(filtered_stream, html_filter); + camel_object_unref(html_filter); + diff --git a/evolution.spec b/evolution.spec index 527cd79..1da6855 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,603 +1,2273 @@ -%undefine __cmake_in_source_build - -%global _changelog_trimtime %(date +%s -d "1 year ago") -%global _python_bytecompile_extra 0 - -# correct Obsoletes for evolution-tests when this is changed -%global enable_installed_tests 0 - -%global tnef_support 0 -%if 0%{?fedora} -%global tnef_support 1 -%endif - -%define glib2_version 2.66 -%define gtk3_version 3.22 -%define gnome_autoar_version 0.1.1 -%define gnome_desktop_version 2.91.3 +%define bug_buddy_version 2.15.90 +%define dbus_glib_version 0.70 +%define dbus_version 0.90 +%define eds_version 1.9.4 +%define gnome_doc_utils_version 0.8.0 +%define gnome_icon_theme_version 1.3.6 +%define gnome_pilot_version 2.0.13 +%define gnomevfs2_version 2.4 +%define gtkhtml_version 3.13.92 %define intltool_version 0.35.5 -%define libgweather_version 3.91 -%define geocode_glib_version 3.26.3 -%define sqlite_version 3.7.17 -%define libsoup_version 3.1.1 -%define webkit2gtk_version 2.34.0 - -%define last_anjal_version 0.3.2-3 %define last_libgal2_version 2:2.5.3-2 -%define last_evo_nm_version 3.5.0 -%define last_evo_perl_version 3.21.90 +%define libbonoboui_version 2.4.2 +%define libgnomeprint22_version 2.8.0 +%define libgnomeprintui22_version 2.2.1 +%define orbit2_version 2.9.8 +%define pilot_link_version 2:0.12.1 +%define redhat_menus_version 5.0.4 +%define scrollkeeper_version 0.1.4 +%define soup_version 2.2.2 +%define evo_major 2.10 + +%define exchange_support 1 +%define inline_audio_support 0 %define ldap_support 1 %define libnotify_support 1 -%define libpst_support 1 - -# Coverity scan can override this to 0, to skip checking in gtk-doc generated code -%{!?with_docs: %global with_docs 1} - -%if 0%{?flatpak} -%global with_docs 0 +%define krb5_support 1 +%define nntp_support 1 +%ifnarch s390 s390x +%define nm_support 1 +%else +%define nm_support 0 %endif +%ifarch s390 s390x +%define pilot_support 0 +%else +%define pilot_support 1 +%endif +%define use_mozilla_nss 1 -%define evo_plugin_dir %{_libdir}/evolution/plugins +# Use stricter build settings than required by upstream. +%define strict_build_settings 1 + +%define evo_plugin_dir %{_libdir}/evolution/%{evo_major}/plugins ### Abstract ### Name: evolution -Version: 3.59.1 -Release: 2%{?dist} -Summary: Mail and calendar client for GNOME -License: GPL-2.0-or-later AND GFDL-1.3-or-later -URL: https://gitlab.gnome.org/GNOME/evolution/-/wikis/home -Source: http://download.gnome.org/sources/%{name}/3.59/%{name}-%{version}.tar.xz -Source1: flatpak-evolution-fix-service-names.sh -Source2: flatpak-evolution-wrapper.sh.in +Version: 2.10.3 +Release: 10%{?dist} +License: GPL +Group: Applications/Productivity +Summary: GNOME's next-generation groupware suite +URL: http://www.gnome.org/projects/evolution/ +BuildRoot: %{_tmppath}/%{name}-%{version}-root +Source: evolution-%{version}.tar.bz2 -# 0-99: General patches -# enable corresponding autopatch below to make them applied +### Patches ### -# 100-199: Flatpak-specific patches -# https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/144 -Patch100: configurable-dbus-prefix.patch +# bad hack +Patch10: evolution-1.4.4-ldap-x86_64-hack.patch -# Approximate version number -Provides: bundled(libgnomecanvas) = 2.30.0 +# Fix for RH bug #154360: +Patch11: evolution-2.5.5.1-commit-enter-on-calendar.patch -Obsoletes: anjal <= %{last_anjal_version} -Obsoletes: libgal2 <= %{last_libgal2_version} -Obsoletes: evolution-NetworkManager < %{last_evo_nm_version} -Obsoletes: evolution-perl < %{last_evo_perl_version} -Obsoletes: evolution-rss < 3.45.2 +# Fix for RH bug 164957 (was for 145552): +Patch13: evolution-2.0.2-fix-145552.patch -%if !%{enable_installed_tests} -Obsoletes: evolution-tests <= 3.31.1 -%endif +# Part of RH bug 170799: +Patch14: evolution-2.4.1-hide-switcher-buttons-by-default.patch -%global eds_version %{version} +# Patches for conduits, based upon +# rh-161817-attach-116019-conduit_pilot_link_updates.diff +# (the latter patch was originally by Mark G. Adams): +# Patch15: evolution-2.5.4-fix-conduits.patch + +# Move .conduit files from share to lib (for the sake of multilib) +# This patch effects other parts of evolution.spec and so is necessary +# for a successful build. +Patch16: evolution-2.5.4-fix-conduit-dir.patch + +# Remove gnome-common macros from configure.in. +# We do not ship gnome-common (or at least we're not supposed to). +Patch17: evolution-2.7.1-no-gnome-common.patch + +#Patch18: evolution-2.7.1-notification-cleanups.patch +Patch19: evolution-2.6.0-prototypes.patch + +# RH bug #157400 / GNOME bug #303877 +Patch20: evolution-2.7.4-candidate-window-position-task.patch + +# RH bug #157505 / GNOME bug #303878 +Patch21: evolution-2.7.4-candidate-window-position-calendar.patch + +# RH bug #190359 / GNOME bug #211058 +Patch22: evolution-2.7.3-filter-datespec.patch + +# RH bug #166231 / GNOME bug #264485 +Patch23: evolution-2.7.3-replicated-cjk-input.patch + +# RH bug #178295 / GNOME bug #348638 +Patch24: evolution-2.7.4-deleting-preedit-buffer.patch + +# RH bug #161885 / GNOME bug #309166 +Patch26: evolution-2.8.0-indic-cursor-movement.patch + +# RH bug #202751 / GNOME bug #355766 +Patch29: evolution-2.8.0-fix-indic-printing.patch + +# GNOME bug #362638 +Patch31: evolution-2.8.1-kill-ethread.patch + +# GNOME bug #363695 +Patch32: evolution-2.9.1-kill-ememory.patch + +# RH bug #176400 +Patch33: evolution-2.9.1-im-context-reset.patch + +# RH bug #182247 +Patch34: evolution-2.9.1-first-ascii.patch + +# GNOME bug #373837 +Patch35: evolution-2.9.2-gtk-font-button.patch + +# RH bug #216537 / GNOME bug #383047 +#Patch36: evolution-2.9.3-view-attachment-uri.patch + +# RH bug #215478 / GNOME bug #383842 +Patch38: evolution-2.9.3-source-path-entry.patch + +# RH bug #218801 / GNOME bug #383953 +Patch39: evolution-2.9.3-unread-messages.patch + +# RH bug #215467 / GNOME bug #380644 +Patch40: evolution-2.9.3-meeting-list-view.patch + +# GNOME bug #373116 +Patch41: evolution-2.9.3-gtk-color-button.patch + +# GNOME bug #218898 +Patch42: evolution-2.9.4-view-message-source.patch + +# GNOME bug #376991 +Patch43: evolution-2.10.0-e-passwords.patch + +# GNOME bug #417999 +Patch44: evolution-2.10.0-e-source-combo-box.patch + +# GNOME bug #419469 +Patch45: evolution-2.10.0-shell-main-cleanups.patch + +# GNOME bug #419524 +Patch46: evolution-2.10.0-use-glib-i18n.patch + +# GNOME bug #418971 +Patch47: evolution-2.10.0-drop-old-glib-support.patch + +# RH bug #234315 / GNOME bug #423766 +Patch49: evolution-2.10.1-saving-attachments.patch + +# RH bug #236860 / GNOME bug #407104 +Patch50: evolution-2.10.1-fix-uri-handling.patch + +# RH bug #236399 / GNOME bug #434019 +Patch51: evolution-2.10.1-en_CA-attribution-format.patch + +# RH bug #238155 / GNOME bug #427232 +Patch53: evolution-2.10.1-check-uri-before-strcmp.patch + +# RH bug #240147 / GNOME bug #335241 +Patch54: evolution-2.10.1-send-recv-dialog.patch + +# GNOME bug #380534 +Patch55: evolution-2.10.3-version-checks.patch + +# GNOME bug #239441 +Patch56: evolution-2.10.3-fix-ETreeTableAdapter-crash.patch + +# RH bug #249640 / GNOME bug #442329 +Patch57: evolution-2.10.3-todo-conduit.patch + +# RH bug #436080 / CVE-2008-0072 +Patch58: evolution-2.10.3-CVE-2008-0072.patch + +# GNOME bug #524310 +Patch59: evolution-2.10.3-server-message-double-free.patch + +# RH bug #449922 / CVE-2008-1108 +Patch60: evolution-2.10.3-CVE-2008-1108.patch + +# RH bug #449922 / CVE-2008-1109 +Patch61: evolution-2.10.3-CVE-2008-1109.patch ## Dependencies ### -%if ! 0%{?flatpak} -Requires: %{_bindir}/killall -Requires: gvfs -%endif +Requires(post): GConf2 +Requires(post): scrollkeeper >= %{scrollkeeper_version} +Requires(postun): scrollkeeper >= %{scrollkeeper_version} + +Requires: ORBit2 >= %{orbit2_version} +Requires: dbus >= %{dbus_version} Requires: evolution-data-server >= %{eds_version} -Requires: gspell -Requires: highlight -Requires: %{name}-langpacks = %{version}-%{release} +Requires: gnome-icon-theme >= %{gnome_icon_theme_version} +Requires: gnome-spell >= 1.0.2 +Requires: gnome-vfs2 >= %{gnomevfs2_version} +Requires: gnutls +Requires: gtk2 >= 2.4.0 +Requires: libbonoboui >= %{libbonoboui_version} +Requires: libgnomeprint22 >= %{libgnomeprint22_version} +Requires: libgnomeprintui22 >= %{libgnomeprintui22_version} +Requires: libsoup >= %{soup_version} +Requires: redhat-menus >= %{redhat_menus_version} +Requires: spamassassin + +%if %{libnotify_support} +Requires: libnotify >= 0.4 +%endif + +Obsoletes: libgal2 <= %{last_libgal2_version} ### Build Dependencies ### -%if ! 0%{?flatpak} -BuildRequires: %{_bindir}/killall -%endif -BuildRequires: cmake -BuildRequires: gcc +BuildRequires: GConf2-devel +BuildRequires: ORBit2-devel >= %{orbit2_version} +BuildRequires: atk-devel +BuildRequires: autoconf >= 2.59 +BuildRequires: automake >= 1.9 +BuildRequires: bison +BuildRequires: byacc +BuildRequires: dbus-devel >= %{dbus_version} +BuildRequires: dbus-glib-devel >= %{dbus_glib_version} +BuildRequires: desktop-file-utils +BuildRequires: evolution-data-server-devel >= %{eds_version} +BuildRequires: flex BuildRequires: gettext -%if %{with_docs} +BuildRequires: gnome-doc-utils >= %{gnome_doc_utils_version} +BuildRequires: gnome-vfs2-devel >= %{gnomevfs2_version} +BuildRequires: gnutls-devel BuildRequires: gtk-doc -%endif -BuildRequires: highlight +BuildRequires: gtkhtml3-devel >= %{gtkhtml_version} BuildRequires: intltool >= %{intltool_version} -BuildRequires: itstool +BuildRequires: libbonobo-devel >= 2.0 +BuildRequires: libbonoboui-devel >= %{libbonoboui_version} +BuildRequires: libgnomecanvas-devel >= 2.0 +BuildRequires: libgnomeprint22-devel >= %{libgnomeprint22_version} +BuildRequires: libgnomeprintui22-devel >= %{libgnomeprintui22_version} +BuildRequires: libgnomeui-devel >= 2.0 +BuildRequires: libsoup-devel >= %{soup_version} +BuildRequires: libtool >= 1.5 +BuildRequires: libxml2-devel BuildRequires: pkgconfig -BuildRequires: yelp-tools -BuildRequires: pkgconfig(atk) -BuildRequires: pkgconfig(cairo-gobject) -BuildRequires: pkgconfig(camel-1.2) >= %{eds_version} -BuildRequires: pkgconfig(enchant-2) -BuildRequires: pkgconfig(gail-3.0) >= %{gtk3_version} -BuildRequires: pkgconfig(gdk-pixbuf-2.0) -BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} -BuildRequires: pkgconfig(gmodule-2.0) >= %{glib2_version} -BuildRequires: pkgconfig(gnome-autoar-0) >= %{gnome_autoar_version} -BuildRequires: pkgconfig(gnome-autoar-gtk-0) >= %{gnome_autoar_version} -BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version} -BuildRequires: pkgconfig(gsettings-desktop-schemas) -BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} -BuildRequires: pkgconfig(gspell-1) -BuildRequires: pkgconfig(gweather4) >= %{libgweather_version} -BuildRequires: pkgconfig(geocode-glib-2.0) >= %{geocode_glib_version} -BuildRequires: pkgconfig(iso-codes) -BuildRequires: pkgconfig(libcanberra-gtk3) -BuildRequires: pkgconfig(libcmark) -BuildRequires: pkgconfig(libebackend-1.2) >= %{eds_version} -BuildRequires: pkgconfig(libebook-1.2) >= %{eds_version} -BuildRequires: pkgconfig(libecal-2.0) >= %{eds_version} -BuildRequires: pkgconfig(libedataserver-1.2) >= %{eds_version} -BuildRequires: pkgconfig(libedataserverui-1.2) >= %{eds_version} -BuildRequires: pkgconfig(libsoup-3.0) >= %{libsoup_version} -BuildRequires: pkgconfig(libxml-2.0) -BuildRequires: pkgconfig(nspr) -BuildRequires: pkgconfig(nss) -BuildRequires: pkgconfig(shared-mime-info) -BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version} -BuildRequires: pkgconfig(webkit2gtk-4.1) >= %{webkit2gtk_version} -BuildRequires: pkgconfig(webkit2gtk-web-extension-4.1) >= %{webkit2gtk_version} - -%if %{tnef_support} -BuildRequires: pkgconfig(libytnef) +%if %{use_mozilla_nss} +BuildRequires: nspr-devel +BuildRequires: nss-devel +%else +BuildRequires: openssl-devel %endif -%if %{ldap_support} -BuildRequires: openldap-devel >= 2.0.11 +%if %{inline_audio_support} +# audio-inline plugin requires gstreamer to build: +BuildRequires: gstreamer08-devel +%endif + +%if %{ldap_support} +BuildRequires: openldap-devel >= 2.0.11 +%endif + +%if %{pilot_support} +BuildRequires: gnome-pilot-devel >= %{gnome_pilot_version} +# bleah, gnome-pilot really sucks this in, but then I have to have an explicit +# versioning for gnome-pilot when it changes less than pilot-link itself +BuildRequires: pilot-link-devel >= %{pilot_link_version} +Requires: gnome-pilot >= %{gnome_pilot_version} +%endif + +%if %{krb5_support} +BuildRequires: krb5-devel +# tweak for krb5 1.2 vs 1.3 +%define krb5dir /usr/kerberos +#define krb5dir `pwd`/krb5-fakeprefix +%endif + +%if %{nm_support} +BuildRequires: NetworkManager-glib-devel %endif %if %{libnotify_support} -BuildRequires: pkgconfig(libnotify) -%endif - -%if %{libpst_support} -BuildRequires: pkgconfig(libpst) +BuildRequires: libnotify-devel %endif %description Evolution is the GNOME mailer, calendar, contact manager and -communications tool. The components which make up Evolution -are tightly integrated with one another and act as a seamless +communications tool. The tools which make up Evolution will +be tightly integrated with one another and act as a seamless personal information-management tool. %package devel -Summary: Development files for building against %{name} -Requires: %{name} = %{version}-%{release} -Requires: pkgconfig(camel-1.2) >= %{eds_version} -Requires: pkgconfig(enchant-2) -Requires: pkgconfig(gtk+-3.0) >= %{gtk3_version} -Requires: pkgconfig(gspell-1) -Requires: pkgconfig(gweather4) >= %{libgweather_version} -Requires: pkgconfig(libebackend-1.2) >= %{eds_version} -Requires: pkgconfig(libebook-1.2) >= %{eds_version} -Requires: pkgconfig(libecal-2.0) >= %{eds_version} -Requires: pkgconfig(libedataserver-1.2) >= %{eds_version} -Requires: pkgconfig(libsoup-3.0) >= %{libsoup_version} -Requires: pkgconfig(libxml-2.0) +Group: Development/Libraries +Summary: Development files for building against evolution +Requires: %{name} = %{version} +Requires: evolution-data-server-devel >= %{eds_version} +Requires: gtkhtml3-devel >= %{gtkhtml_version} +Requires: libsoup-devel >= %{soup_version} +Requires: libxml2-devel Obsoletes: libgal2-devel <= %{last_libgal2_version} %description devel -Development files needed for building things which link against %{name}. - -%if %{with_docs} - -%package devel-docs -Summary: Developer documentation for Evolution -Requires: devhelp -Requires: %{name}-devel = %{version}-%{release} -BuildArch: noarch - -%description devel-docs -This package contains developer documentation for Evolution. - -%endif - -%package langpacks -Summary: Translations for %{name} -BuildArch: noarch -Requires: %{name} = %{version}-%{release} - -%description langpacks -This package contains translations for %{name}. - -%if %{with_docs} -%package help -Summary: Help files for %{name} -Requires: %{name} = %{version}-%{release} -Requires: yelp -BuildArch: noarch - -%description help -This package contains user documentation for %{name}. -%endif - -%package bogofilter -Summary: Bogofilter plugin for Evolution -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: bogofilter - -%description bogofilter -This package contains the plugin to filter junk mail using Bogofilter. - -%package spamassassin -Summary: SpamAssassin plugin for Evolution -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: spamassassin - -%description spamassassin -This package contains the plugin to filter junk mail using SpamAssassin. - -%if %{libpst_support} -%package pst -Summary: PST importer plugin for Evolution -Requires: %{name}%{?_isa} = %{version}-%{release} - -%description pst -This package contains the plugin to import Microsoft Personal Storage Table -(PST) files used by Microsoft Outlook and Microsoft Exchange. -%endif - -%if %{enable_installed_tests} -%package tests -Summary: Tests for the %{name} package -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: python2-behave -Requires: python2-dogtail - -%description tests -The %{name}-tests package contains tests that can be used to verify -the functionality of the installed %{name} package. -%endif +Development files needed for building things which link against evolution. %prep -%autosetup -p1 -S gendiff -N +%setup -q -n evolution-%{version} +%patch10 -p1 -b .ldaphack +%patch11 -p1 -b .commit-enter-on-calendar +%patch13 -p1 -b .fix-164957 +%patch14 -p1 -b .hide-switcher-buttons-by-default +#patch15 -p1 -b .fix-conduits # leave commented +%patch16 -p1 -b .fix-conduit-dir +%patch17 -p1 -b .no-gnome-common +#patch18 -p1 -b .notification-cleanups +%patch19 -p1 -b .prototypes +%patch20 -p1 -b .candidate-window-position-task +%patch21 -p1 -b .candidate-window-position-calendar +%patch22 -p1 -b .filter-datespec +%patch23 -p1 -b .replicated-cjk-input +%patch24 -p1 -b .deleting-preedit-buffer +%patch26 -p1 -b .indic-cursor-movement +%patch29 -p1 -b .fix-indic-printing +%patch31 -p1 -b .kill-ethread +%patch32 -p1 -b .kill-ememory +%patch33 -p1 -b .im-context-reset +%patch34 -p1 -b .first-ascii +%patch35 -p1 -b .gtk-font-button +#%patch36 -p1 -b .view-attachment-uri +%patch38 -p1 -b .source-path-entry +%patch39 -p1 -b .unread-messages +%patch40 -p1 -b .meeting-list-view +%patch41 -p1 -b .gtk-color-button +%patch42 -p1 -b .view-message-source +%patch43 -p1 -b .e-passwords +%patch44 -p1 -b .e-source-combo-box +%patch45 -p1 -b .shell-main-cleanups +%patch46 -p1 -b .use-glib-i18n +%patch47 -p1 -b .drop-old-glib-support +%patch49 -p1 -b .saving-attachments +%patch50 -p1 -b .fix-uri-handling +%patch51 -p1 -b .en_CA-attribution-format +%patch53 -p1 -b .check-uri-before-strcmp +%patch54 -p1 -b .send-recv-dialog +%patch55 -p1 -b .version-checks +%patch56 -p1 -b .ETreeTableAdapter-idle-crash +%patch57 -p1 -b .todo-conduit +%patch58 -p1 -b .CVE-2008-0072 +%patch59 -p1 -b .server-message-double-free +%patch60 -p1 -b .CVE-2008-1108 +%patch61 -p1 -b .CVE-2008-1109 -# General patches -# %%autopatch -p1 -m 0 -M 99 - -# Flatpak-specific patches -%if 0%{?flatpak} -%autopatch -p1 -m 100 -M 199 -%endif +mkdir -p krb5-fakeprefix/include +mkdir -p krb5-fakeprefix/lib +mkdir -p krb5-fakeprefix/%{_lib} # Remove the welcome email from Novell -for inbox in src/mail/default/*/Inbox; do +for inbox in mail/default/*/Inbox; do echo -n "" > $inbox done -%if 0%{?flatpak} -mv data/org.gnome.Evolution.desktop.in.in data/org.gnome.Evolution.desktop.in.i -cat data/org.gnome.Evolution.desktop.in.i | sed -e "s/Icon=evolution/Icon=org.gnome.Evolution/" >data/org.gnome.Evolution.desktop.in.in -%endif - %build - # define all of our flags, this is kind of ugly :( %if %{ldap_support} -%define ldap_flags -DWITH_OPENLDAP=ON +%define ldap_flags --with-openldap=yes %else -%define ldap_flags -DWITH_OPENLDAP=OFF +%define ldap_flags --without-openldap %endif -%define ssl_flags -DENABLE_SMIME=ON +%if %{pilot_support} +%define pilot_flags --enable-pilot-conduits=yes +%else +%define pilot_flags --enable-pilot-conduits=no +%endif -if ! pkg-config --exists nss; then +%if %{krb5_support} +%define krb5_flags --with-krb5=%{krb5dir} +%else +%define krb5_flags --without-krb5 +%endif + +%if %{nntp_support} +%define nntp_flags --enable-nntp=yes +%else +%define nntp_flags --enable-nntp=no +%endif + +%if %{use_mozilla_nss} +%define ssl_flags --enable-nss=yes --enable-smime=yes +%else +%define ssl_flags --enable-openssl=yes +%endif + +%if %{use_mozilla_nss} +if ! pkg-config --exists nss; then echo "Unable to find suitable version of mozilla nss to use!" exit 1 fi +%endif -%if %{with_docs} -%define gtkdoc_flags -DENABLE_GTK_DOC=ON -DWITH_HELP=ON +%if %{exchange_support} +%define exchange_flags --enable-exchange=yes %else -%define gtkdoc_flags -DENABLE_GTK_DOC=OFF -DWITH_HELP=OFF +%define exchange_flags --enable-exchange=no %endif -%if %{enable_installed_tests} -%define tests_flags -DENABLE_INSTALLED_TESTS=ON -%else -%define tests_flags -DENABLE_INSTALLED_TESTS=OFF +CPPFLAGS="-I%{_includedir}/et"; export CPPFLAGS +CFLAGS="$RPM_OPT_FLAGS -fPIC -DLDAP_DEPRECATED -I%{_includedir}/et -Wno-sign-compare"; export CFLAGS +%if ! %{use_mozilla_nss} +if pkg-config openssl ; then + CFLAGS="$CFLAGS `pkg-config --cflags openssl`" + LDFLAGS="$LDFLAGS `pkg-config --libs-only-L openssl`" +fi %endif -%if %{tnef_support} -%global tnef_flags -DENABLE_YTNEF=ON -%else -%global tnef_flags -DENABLE_YTNEF=OFF +# Add stricter build settings here as the source code gets cleaned up. +# We want to make sure things like compiler warnings and avoiding deprecated +# functions in the GNOME/GTK+ libraries stay fixed. +# +# Please file a bug report at bugzilla.gnome.org if these settings break +# compilation, and encourage the upstream developers to use them. + +%if %{strict_build_settings} +CFLAGS="$CFLAGS \ + -DG_DISABLE_DEPRECATED=1 \ + -DPANGO_DISABLE_DEPRECATED=1 \ + -DGDK_PIXBUF_DISABLE_DEPRECATED=1 \ + -DGDK_DISABLE_DEPRECATED=1 \ + -DEDS_DISABLE_DEPRECATED=1 \ + -DCAMEL_DISABLE_DEPRECATED=1 \ + -Wdeclaration-after-statement \ + -Werror-implicit-function-declaration" %endif -%if 0%{?flatpak} -%global temp_home "-DTEMP_HOME=1" -%else -%global temp_home "" -%endif +# Temporary work-around for a bad gnome-doc-utils.make. +# See GNOME bug #427939. Should be fixed in evolution-2.10.2. +sed -i -e 's/@ENABLE_SK_TRUE@_s/_s/' help/Makefile.in -CFLAGS="$RPM_OPT_FLAGS -fPIC -DLDAP_DEPRECATED -Wno-sign-compare -Wno-deprecated-declarations %temp_home" -export CFLAGS - -%cmake -DENABLE_MAINTAINER_MODE=OFF \ - -DVERSION_SUBSTRING=" (%{version}-%{release})" \ - %ldap_flags %ssl_flags %gtkdoc_flags %tests_flags %tnef_flags \ - -DENABLE_PLUGINS=all \ - %if 0%{?flatpak} - "-DWITH_WMCLASS_OVERRIDE=evolution.bin" \ - %endif - -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \ - -DLIB_INSTALL_DIR:PATH=%{_libdir} \ - -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \ - -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \ - %if "%{?_lib}" == "lib64" - -DLIB_SUFFIX=64 \ - %endif - %{nil} - -%cmake_build - -%if %{with_docs} - -# Replace identical images in the help by links. -# This reduces the RPM size by several megabytes. -helpdir=$RPM_BUILD_ROOT%{_datadir}/gnome/help/%{name} -for f in $helpdir/C/figures/*.png; do - b="$(basename $f)" - for d in $helpdir/*; do - if [ -d "$d" -a "$d" != "$helpdir/C" ]; then - g="$d/figures/$b" - if [ -f "$g" ]; then - if cmp -s $f $g; then - rm "$g"; ln -s "../../C/figures/$b" "$g" - fi - fi - fi - done -done - -# %%{with_docs} -%endif +%configure \ + --disable-scrollkeeper \ + --enable-gtk-doc \ + --enable-ipv6 \ + --enable-file-locking=fcntl --enable-dot-locking=no \ + --with-sub-version=" (%{version}-%{release})" \ + --with-kde-applnk-path=no \ + --enable-file-chooser=yes \ + %ldap_flags %pilot_flags %krb5_flags %nntp_flags %ssl_flags %exchange_flags \ + --enable-plugins=all +export tagname=CC +make %{?_smp_mflags} LIBTOOL=/usr/bin/libtool CFLAGS="$CFLAGS -UGNOME_DISABLE_DEPRECATED -fno-strict-aliasing" %install -%cmake_install +rm -rf $RPM_BUILD_ROOT +export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 +export tagname=CC +make LIBTOOL=/usr/bin/libtool DESTDIR=$RPM_BUILD_ROOT install +unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL -%if 0%{?flatpak} -%{S:1} <%{S:2} >flatpak-evolution-wrapper.sh -chmod a+x flatpak-evolution-wrapper.sh -mv $RPM_BUILD_ROOT%{_bindir}/evolution $RPM_BUILD_ROOT%{_bindir}/evolution.bin -cp flatpak-evolution-wrapper.sh $RPM_BUILD_ROOT%{_bindir}/evolution +# remove libtool archives for importers and the like +find $RPM_BUILD_ROOT/%{_libdir}/evolution -name '*.la' -exec rm {} \; + +# remove statically built libraries: +find $RPM_BUILD_ROOT/%{_libdir}/evolution -name '*.a' -exec rm {} \; + +# pilot conduits static and libtool bits should go away too +rm -f $RPM_BUILD_ROOT/%{_libdir}/gnome-pilot/conduits/*.a +rm -f $RPM_BUILD_ROOT/%{_libdir}/gnome-pilot/conduits/*.la + +# remove additional things we don't want +%if ! %{inline_audio_support} +%{__rm} -f $RPM_BUILD_ROOT%{evo_plugin_dir}/org-gnome-audio-inline.eplug \ + $RPM_BUILD_ROOT%{evo_plugin_dir}/liborg-gnome-audio-inline.so %endif -%find_lang evolution --all-name --with-gnome +# scrollkeeper gets handled in %post +rm -rf $RPM_BUILD_ROOT/var/lib/scrollkeeper -grep "%{_datadir}/locale" evolution.lang > translations.lang -%if %{with_docs} -grep -v "%{_datadir}/locale" evolution.lang > help.lang -%endif +mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications +ln -sf %{_datadir}/desktop-menu-patches/redhat-evolution-mail.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/applications/redhat-evolution-mail.desktop +ln -sf %{_datadir}/desktop-menu-patches/redhat-evolution-calendar.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/applications/redhat-evolution-calendar.desktop +ln -sf %{_datadir}/desktop-menu-patches/redhat-evolution-contacts.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/applications/redhat-evolution-contacts.desktop +ln -sf %{_datadir}/desktop-menu-patches/redhat-evolution-tasks.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/applications/redhat-evolution-tasks.desktop -%ldconfig_scriptlets +# remove upstream desktop file; use the symlinks from above (#103826) +rm -f $RPM_BUILD_ROOT/%{_datadir}/applications/evolution.desktop -%files -%license COPYING -%doc AUTHORS NEWS README.md -%{_mandir}/man1/* +rm -f $RPM_BUILD_ROOT%{_datadir}/mime-info/evolution.keys +rm -f $RPM_BUILD_ROOT%{_datadir}/mime-info/evolution.mime -# GSettings schemas: -%{_datadir}/GConf/gsettings/evolution.convert +# evolution link +ln -sf ./evolution-%{evo_major} $RPM_BUILD_ROOT/%{_bindir}/evolution -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.shell.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.addressbook.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.calendar.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.mail.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.importer.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.bogofilter.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.spamassassin.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.text-highlight.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.attachment-reminder.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.autocontacts.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.email-custom-header.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.external-editor.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.face-picture.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.itip.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.mail-notification.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.prefer-plain.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.publish-calendar.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.sender-validator.gschema.xml -%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.templates.gschema.xml +for serverfile in $RPM_BUILD_ROOT%{_libdir}/bonobo/servers/*.server; do + sed -i -e 's|location *= *"/usr/lib\(64\)*/|location="/usr/$LIB/|' $serverfile +done +%find_lang evolution-%{evo_major} -# The main executable +%post +/sbin/ldconfig +scrollkeeper-update -q +touch --no-create %{_datadir}/icons/hicolor || : +%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : +export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps-evolution-mail-prompts-checkdefault-%{evo_major}.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_addressbook-%{evo_major}.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_calendar-%{evo_major}.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_shell-%{evo_major}.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/evolution-mail-%{evo_major}.schemas > /dev/null + +%postun +/sbin/ldconfig +scrollkeeper-update -q +touch --no-create %{_datadir}/icons/hicolor || : +%{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : + +%clean +rm -rf $RPM_BUILD_ROOT + +%files -f evolution-%{evo_major}.lang +%defattr(-, root, root) +%doc AUTHORS COPYING ChangeLog NEWS README + +# GConf schemas: +%{_sysconfdir}/gconf/schemas/apps-evolution-mail-prompts-checkdefault-%{evo_major}.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_addressbook-%{evo_major}.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_calendar-%{evo_major}.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_shell-%{evo_major}.schemas +%{_sysconfdir}/gconf/schemas/evolution-mail-%{evo_major}.schemas + +# The main executable and a symlink: +%{_bindir}/evolution-%{evo_major} %{_bindir}/evolution -%if 0%{?flatpak} -%{_bindir}/evolution.bin -%endif - -%{_datadir}/metainfo/org.gnome.Evolution.metainfo.xml - # Desktop files: -%{_datadir}/applications/org.gnome.Evolution.desktop +%{_datadir}/applications/redhat-evolution-mail.desktop +%{_datadir}/applications/redhat-evolution-calendar.desktop +%{_datadir}/applications/redhat-evolution-contacts.desktop +%{_datadir}/applications/redhat-evolution-tasks.desktop + +# Online help: +%{_datadir}/gnome/help/evolution +%{_datadir}/omf/evolution # Icons: -%{_datadir}/icons/hicolor/16x16/apps/* -%{_datadir}/icons/hicolor/22x22/apps/* -%{_datadir}/icons/hicolor/24x24/apps/* -%{_datadir}/icons/hicolor/32x32/apps/* -%{_datadir}/icons/hicolor/48x48/apps/* -%{_datadir}/icons/hicolor/scalable/apps/* +%{_datadir}/icons/hicolor/16x16/apps/evolution.png +%{_datadir}/icons/hicolor/22x22/apps/evolution.png +%{_datadir}/icons/hicolor/24x24/apps/evolution.png +%{_datadir}/icons/hicolor/32x32/apps/evolution.png +%{_datadir}/icons/hicolor/scalable/apps/evolution.svg + +# IDL files (should this be in devel subpackage?) +%{_datadir}/idl/evolution-%{evo_major} # The main data directory # (have not attempted to split this up into an explicit list) %dir %{_datadir}/evolution -%{_datadir}/evolution +%{_datadir}/evolution/%{evo_major} -# Modules: +# Bonobo components: +%{_libdir}/bonobo/servers/GNOME_Evolution_Addressbook_%{evo_major}.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Calendar_%{evo_major}.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Calendar_AlarmNotify_%{evo_major}.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Mail_%{evo_major}.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Shell_%{evo_major}.server %dir %{_libdir}/evolution -%dir %{_libdir}/evolution/modules -%{_libdir}/evolution/modules/module-accounts-window.so -%{_libdir}/evolution/modules/module-addressbook.so -%{_libdir}/evolution/modules/module-appearance-settings.so -%{_libdir}/evolution/modules/module-backup-restore.so -%{_libdir}/evolution/modules/module-book-config-carddav.so -%{_libdir}/evolution/modules/module-book-config-google.so -%{_libdir}/evolution/modules/module-book-config-ldap.so -%{_libdir}/evolution/modules/module-book-config-local.so -%{_libdir}/evolution/modules/module-cal-config-caldav.so -%{_libdir}/evolution/modules/module-cal-config-contacts.so -%{_libdir}/evolution/modules/module-cal-config-google.so -%{_libdir}/evolution/modules/module-cal-config-local.so -%{_libdir}/evolution/modules/module-cal-config-weather.so -%{_libdir}/evolution/modules/module-cal-config-webcal.so -%{_libdir}/evolution/modules/module-cal-config-webdav-notes.so -%{_libdir}/evolution/modules/module-calendar.so -%{_libdir}/evolution/modules/module-composer-autosave.so -%{_libdir}/evolution/modules/module-composer-to-meeting.so -%{_libdir}/evolution/modules/module-config-lookup.so -%{_libdir}/evolution/modules/module-contact-photos.so -%{_libdir}/evolution/modules/module-gravatar.so -%{_libdir}/evolution/modules/module-itip-formatter.so -%{_libdir}/evolution/modules/module-mail-config.so -%{_libdir}/evolution/modules/module-mail.so -%{_libdir}/evolution/modules/module-mailto-handler.so -%{_libdir}/evolution/modules/module-mdn.so -%{_libdir}/evolution/modules/module-offline-alert.so -%{_libdir}/evolution/modules/module-prefer-plain.so -%{_libdir}/evolution/modules/module-plugin-lib.so -%{_libdir}/evolution/modules/module-plugin-manager.so -%{_libdir}/evolution/modules/module-rss.so -%{_libdir}/evolution/modules/module-settings.so -%{_libdir}/evolution/modules/module-startup-wizard.so -%{_libdir}/evolution/modules/module-text-highlight.so -%{_libdir}/evolution/modules/module-vcard-inline.so -%{_libdir}/evolution/modules/module-webkit-editor.so -%{_libdir}/evolution/modules/module-webkit-inspector.so - -%if %{tnef_support} -%{_libdir}/evolution/modules/module-tnef-attachment.so -%endif - -%{_libdir}/evolution-data-server/camel-providers/libcamelrss.so -%{_libdir}/evolution-data-server/camel-providers/libcamelrss.urls -%{_libdir}/evolution-data-server/ui-modules/module-evolution-alarm-notify.so +%dir %{_libdir}/evolution/%{evo_major} +%dir %{_libdir}/evolution/%{evo_major}/components +%{_libdir}/evolution/%{evo_major}/components/libevolution-addressbook.so +%{_libdir}/evolution/%{evo_major}/components/libevolution-calendar.so +%{_libdir}/evolution/%{evo_major}/components/libevolution-mail.so # Shared libraries: -%{_libdir}/evolution/libevolution-mail-composer.so -%{_libdir}/evolution/libeabutil.so -%{_libdir}/evolution/libeabwidgets.so -%{_libdir}/evolution/libecontacteditor.so -%{_libdir}/evolution/libecontactlisteditor.so -%{_libdir}/evolution/libecontactprint.so -%{_libdir}/evolution/libemail-engine.so -%{_libdir}/evolution/libevcardeditor.so -%{_libdir}/evolution/libevolution-mail-formatter.so -%{_libdir}/evolution/libevolution-shell.so -%{_libdir}/evolution/libessmime.so -%{_libdir}/evolution/libevolution-util.so -%{_libdir}/evolution/libevolution-addressbook-importers.so -%{_libdir}/evolution/libevolution-calendar.so -%{_libdir}/evolution/libevolution-calendar-importers.so -%{_libdir}/evolution/libevolution-mail-importers.so -%{_libdir}/evolution/libevolution-mail.so -%{_libdir}/evolution/libevolution-rss-common.so -%{_libdir}/evolution/libevolution-smime.so -%{_libdir}/evolution/libgnomecanvas.so - -# WebKit2 Extensions -%{_libdir}/evolution/web-extensions/libewebextension.so -%{_libdir}/evolution/web-extensions/webkit-editor/module-webkit-editor-webextension.so +%{_libdir}/evolution/%{evo_major}/libeabutil.so.* +%{_libdir}/evolution/%{evo_major}/libeconduit.so.* +%{_libdir}/evolution/%{evo_major}/libecontacteditor.so.* +%{_libdir}/evolution/%{evo_major}/libecontactlisteditor.so.* +%{_libdir}/evolution/%{evo_major}/libefilterbar.so.* +%{_libdir}/evolution/%{evo_major}/libemiscwidgets.so.* +%{_libdir}/evolution/%{evo_major}/libeshell.so.* +%{_libdir}/evolution/%{evo_major}/libessmime.so.* +%{_libdir}/evolution/%{evo_major}/libetable.so.* +%{_libdir}/evolution/%{evo_major}/libetext.so.* +%{_libdir}/evolution/%{evo_major}/libetimezonedialog.so.* +%{_libdir}/evolution/%{evo_major}/libeutil.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-a11y.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-addressbook-a11y.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-addressbook-importers.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-calendar-a11y.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-calendar-importers.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-mail-importers.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-smime.so.* +%{_libdir}/evolution/%{evo_major}/libevolution-widgets-a11y.so.* +%{_libdir}/evolution/%{evo_major}/libfilter.so.* +%{_libdir}/evolution/%{evo_major}/libmenus.so.* # Various libexec programs: %dir %{_libexecdir}/evolution -%{_libexecdir}/evolution/evolution-backup -%{_libexecdir}/evolution/killev +%dir %{_libexecdir}/evolution/%{evo_major} +%{_libexecdir}/evolution/%{evo_major}/csv2vcard +%{_libexecdir}/evolution/%{evo_major}/evolution-addressbook-clean +%{_libexecdir}/evolution/%{evo_major}/evolution-addressbook-export +%{_libexecdir}/evolution/%{evo_major}/evolution-alarm-notify +%{_libexecdir}/evolution/%{evo_major}/killev + +# Various conduits for gnome-pilot: +%if %{pilot_support} +%dir %{_libdir}/evolution/%{evo_major}/conduits + +%{_libdir}/evolution/%{evo_major}/conduits/libeaddress_conduit.so +%{_libdir}/gnome-pilot/conduits/e-address-%{evo_major}.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libecalendar_conduit.so +%{_libdir}/gnome-pilot/conduits/e-calendar-%{evo_major}.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libememo_conduit.so +%{_libdir}/gnome-pilot/conduits/e-memo-%{evo_major}.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libetodo_conduit.so +%{_libdir}/gnome-pilot/conduits/e-todo-%{evo_major}.conduit +%endif # The plugin directory: %dir %{evo_plugin_dir} # The various plugins follow; they are all part of the main package: -# (note that there are various resources such as ui and pixmap files that -# are built as part of specific plugins but which are currently packaged using +# (note that there are various resources such as glade and pixmap files that +# are built as part of specific plugins but which are currently packaged using # globs above; the purpose of the separation below is to be more explicit about # which plugins we ship) -%{evo_plugin_dir}/org-gnome-evolution-attachment-reminder.eplug -%{evo_plugin_dir}/liborg-gnome-evolution-attachment-reminder.so +%{evo_plugin_dir}/org-gnome-mail-account-disable.eplug +%{evo_plugin_dir}/libmail-account-disable.so -%{evo_plugin_dir}/org-gnome-email-custom-header.eplug -%{evo_plugin_dir}/liborg-gnome-email-custom-header.so +%{evo_plugin_dir}/org-gnome-addressbook-file.eplug +%{evo_plugin_dir}/liborg-gnome-addressbook-file.so + +%if %{inline_audio_support} +%{evo_plugin_dir}/org-gnome-audio-inline.eplug +%{evo_plugin_dir}/liborg-gnome-audio-inline.so +%endif + +%{evo_plugin_dir}/org-gnome-calendar-file.eplug +%{evo_plugin_dir}/liborg-gnome-calendar-file.so + +%{evo_plugin_dir}/org-gnome-calendar-http.eplug +%{evo_plugin_dir}/liborg-gnome-calendar-http.so + +%{evo_plugin_dir}/org-gnome-calendar-weather.eplug +%{evo_plugin_dir}/liborg-gnome-calendar-weather.so + +%{evo_plugin_dir}/org-gnome-copy-tool.eplug +%{evo_plugin_dir}/liborg-gnome-copy-tool.so + +%{evo_plugin_dir}/org-gnome-default-mailer.eplug +%{evo_plugin_dir}/liborg-gnome-default-mailer.so + +%{evo_plugin_dir}/org-gnome-default-source.eplug +%{evo_plugin_dir}/liborg-gnome-default-source.so %{evo_plugin_dir}/org-gnome-evolution-bbdb.eplug %{evo_plugin_dir}/liborg-gnome-evolution-bbdb.so -%{evo_plugin_dir}/org-gnome-external-editor.eplug -%{evo_plugin_dir}/liborg-gnome-external-editor.so +%{evo_plugin_dir}/org-gnome-evolution-startup-wizard.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-startup-wizard.so -%{evo_plugin_dir}/org-gnome-face.eplug -%{evo_plugin_dir}/liborg-gnome-face.so +%{evo_plugin_dir}/org-gnome-exchange-operations.eplug +%{evo_plugin_dir}/liborg-gnome-exchange-operations.so +%{evo_plugin_dir}/org-gnome-exchange-ab-subscription.xml +%{evo_plugin_dir}/org-gnome-exchange-cal-subscription.xml +%{evo_plugin_dir}/org-gnome-exchange-tasks-subscription.xml +%{evo_plugin_dir}/org-gnome-folder-permissions.xml +%{evo_plugin_dir}/org-gnome-folder-subscription.xml + +%{evo_plugin_dir}/org-gnome-groupwise-features.eplug +%{evo_plugin_dir}/liborg-gnome-groupwise-features.so +%{evo_plugin_dir}/org-gnome-compose-send-options.xml + +%{evo_plugin_dir}/org-gnome-gw-account-setup.eplug +%{evo_plugin_dir}/liborg-gnome-gw-account-setup.so + +%{evo_plugin_dir}/org-gnome-imap-features.eplug +%{evo_plugin_dir}/liborg-gnome-imap-features.so + +%{evo_plugin_dir}/org-gnome-itip-formatter.eplug +%{evo_plugin_dir}/liborg-gnome-itip-formatter.so %{evo_plugin_dir}/org-gnome-mailing-list-actions.eplug %{evo_plugin_dir}/liborg-gnome-mailing-list-actions.so - -%{evo_plugin_dir}/org-gnome-mail-notification.eplug -%{evo_plugin_dir}/liborg-gnome-mail-notification.so +%{evo_plugin_dir}/org-gnome-mailing-list-actions.xml %{evo_plugin_dir}/org-gnome-mail-to-task.eplug %{evo_plugin_dir}/liborg-gnome-mail-to-task.so +%{evo_plugin_dir}/org-gnome-mail-to-task.xml + +%{evo_plugin_dir}/org-gnome-mark-all-read.eplug +%{evo_plugin_dir}/liborg-gnome-mark-all-read.so + +%{evo_plugin_dir}/org-gnome-mark-calendar-offline.eplug +%{evo_plugin_dir}/liborg-gnome-mark-calendar-offline.so + +%{evo_plugin_dir}/org-gnome-new-mail-notify.eplug +%{evo_plugin_dir}/liborg-gnome-new-mail-notify.so + +%{evo_plugin_dir}/org-gnome-plugin-manager.eplug +%{evo_plugin_dir}/liborg-gnome-plugin-manager.so +%{evo_plugin_dir}/org-gnome-plugin-manager.xml %{evo_plugin_dir}/org-gnome-prefer-plain.eplug %{evo_plugin_dir}/liborg-gnome-prefer-plain.so -%{evo_plugin_dir}/org-gnome-publish-calendar.eplug -%{evo_plugin_dir}/liborg-gnome-publish-calendar.so +%{evo_plugin_dir}/org-gnome-print-message.eplug +%{evo_plugin_dir}/liborg-gnome-print-message.so +%{evo_plugin_dir}/org-gnome-print-message.xml + +%{evo_plugin_dir}/org-gnome-sa-junk-plugin.eplug +%{evo_plugin_dir}/liborg-gnome-sa-junk-plugin.so %{evo_plugin_dir}/org-gnome-save-calendar.eplug %{evo_plugin_dir}/liborg-gnome-save-calendar.so -%{evo_plugin_dir}/org-gnome-evolution-sender-validation.eplug -%{evo_plugin_dir}/liborg-gnome-evolution-sender-validation.so +%{evo_plugin_dir}/org-gnome-select-one-source.eplug +%{evo_plugin_dir}/liborg-gnome-select-one-source.so -%{evo_plugin_dir}/org-gnome-templates.eplug -%{evo_plugin_dir}/liborg-gnome-templates.so +%{evo_plugin_dir}/org-gnome-subject-thread.eplug +%{evo_plugin_dir}/liborg-gnome-subject-thread.so -%{evo_plugin_dir}/org-gnome-dbx-import.eplug -%{evo_plugin_dir}/liborg-gnome-dbx-import.so +%{evo_plugin_dir}/org-gnome-evolution-hula-account-setup.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-hula-account-setup.so +%{evo_plugin_dir}/org-gnome-publish-calendar.eplug +%{evo_plugin_dir}/liborg-gnome-publish-calendar.so +%{evo_plugin_dir}/org-gnome-publish-calendar.xml +%{evo_plugin_dir}/publish-calendar.glade + +%{evo_plugin_dir}/org-gnome-evolution-caldav.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-caldav.so + +%{evo_plugin_dir}/org-gnome-evolution-mail-attachments-import-ics.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-mail-attachments-import-ics.so %files devel -%{_includedir}/evolution -%{_libdir}/pkgconfig/evolution-calendar-3.0.pc -%{_libdir}/pkgconfig/evolution-mail-3.0.pc -%{_libdir}/pkgconfig/evolution-shell-3.0.pc -%{_libdir}/pkgconfig/libemail-engine.pc - -%if %{with_docs} - -%files devel-docs -%doc %{_datadir}/gtk-doc/html/evolution-mail-composer -%doc %{_datadir}/gtk-doc/html/evolution-mail-engine -%doc %{_datadir}/gtk-doc/html/evolution-mail-formatter -%doc %{_datadir}/gtk-doc/html/evolution-shell -%doc %{_datadir}/gtk-doc/html/evolution-util - -%endif - -%files langpacks -f translations.lang - -%if %{with_docs} -%files help -f help.lang -%endif - -%files bogofilter -%{_libdir}/evolution/modules/module-bogofilter.so -%{_datadir}/metainfo/org.gnome.Evolution-bogofilter.metainfo.xml - -%files spamassassin -%{_libdir}/evolution/modules/module-spamassassin.so -%{_datadir}/metainfo/org.gnome.Evolution-spamassassin.metainfo.xml - -%if %{libpst_support} -%files pst -%{_datadir}/metainfo/org.gnome.Evolution-pst.metainfo.xml -%{evo_plugin_dir}/org-gnome-pst-import.eplug -%{evo_plugin_dir}/liborg-gnome-pst-import.so -%endif - -%if %{enable_installed_tests} -%files tests -%{_libexecdir}/%{name}/installed-tests -%{_datadir}/installed-tests -%endif +%defattr(-, root, root) +%{_includedir}/evolution-%{evo_major} +%{_libdir}/pkgconfig/evolution-plugin-%{evo_major}.pc +%{_libdir}/pkgconfig/evolution-shell-%{evo_major}.pc +%{_libdir}/evolution/%{evo_major}/libeabutil.so +%{_libdir}/evolution/%{evo_major}/libeconduit.so +%{_libdir}/evolution/%{evo_major}/libecontacteditor.so +%{_libdir}/evolution/%{evo_major}/libecontactlisteditor.so +%{_libdir}/evolution/%{evo_major}/libefilterbar.so +%{_libdir}/evolution/%{evo_major}/libemiscwidgets.so +%{_libdir}/evolution/%{evo_major}/libeshell.so +%{_libdir}/evolution/%{evo_major}/libessmime.so +%{_libdir}/evolution/%{evo_major}/libetable.so +%{_libdir}/evolution/%{evo_major}/libetext.so +%{_libdir}/evolution/%{evo_major}/libetimezonedialog.so +%{_libdir}/evolution/%{evo_major}/libeutil.so +%{_libdir}/evolution/%{evo_major}/libevolution-a11y.so +%{_libdir}/evolution/%{evo_major}/libevolution-addressbook-a11y.so +%{_libdir}/evolution/%{evo_major}/libevolution-addressbook-importers.so +%{_libdir}/evolution/%{evo_major}/libevolution-calendar-a11y.so +%{_libdir}/evolution/%{evo_major}/libevolution-calendar-importers.so +%{_libdir}/evolution/%{evo_major}/libevolution-mail-importers.so +%{_libdir}/evolution/%{evo_major}/libevolution-smime.so +%{_libdir}/evolution/%{evo_major}/libevolution-widgets-a11y.so +%{_libdir}/evolution/%{evo_major}/libfilter.so +%{_libdir}/evolution/%{evo_major}/libmenus.so %changelog -%autochangelog +* Wed Jun 04 2008 Matthew Barnes - 2.10.3-10.fc7 +- Add patches for RH bug #449922 (buffer overflow vulnerabilities). + +* Tue Mar 25 2008 Dan Williams - 2.10.3-9.fc7 +- Add patch for GNOME bug #524310 + +* Tue Mar 04 2008 Matthew Barnes - 2.10.3-8.fc7 +- Add patch for CVE-2008-0072 (format string vulnerability). + +* Sat Nov 03 2007 Matthew Barnes - 2.10.3-7.fc7 +- Add patch for RH bug #249640 (todo conduit crash). + +* Wed Oct 31 2007 Dan Williams - 2.10.3-6.fc7 +- Backport fix for GNOME bug #239441 + +* Thu Aug 30 2007 Matthew Barnes - 2.10.3-5.fc7 +- Revise patch for GNOME bug #417999 to fix GNOME bug #447591 + (Automatic Contacts combo boxes don't work). + +* Wed Aug 29 2007 Matthew Barnes - 2.10.3-4.fc7 +- Revise patch for GNOME bug #362638 to fix GNOME bug #357175 + (Evolution fails to close after IMAP alert has been displayed). + +* Fri Jul 27 2007 Matthew Barnes - 2.10.3-3.fc7 +- Add patch for GNOME bug #380534 (clarify version requirements). + +* Sat Jul 14 2007 Matthew Barnes - 2.10.3-2.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #245695 (crash on alert). + +* Mon Jul 02 2007 Matthew Barnes - 2.10.3-1.fc7 +- Update to 2.10.3 + +* Wed Jun 27 2007 Matthew Barnes - 2.10.2-3.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #245289 (frequent hangs). + +* Wed Jun 06 2007 Matthew Barnes - 2.10.2-2.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #240507 (hang on exit). + +* Mon May 28 2007 Matthew Barnes - 2.10.2-1.fc7 +- Update to 2.10.2 +- Remove patch for RH bug #202289 (fixed upstream). +- Remove patch for RH bug #235878 (fixed upstream). +- Remove patch for RH bug #238551 (fixed upstream). + +* Wed May 16 2007 Matthew Barnes - 2.10.1-17.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #237206 + (certificate prompt causes crash, again). + +* Tue May 15 2007 Matthew Barnes - 2.10.1-16.fc7 +- Add patch for RH bug #240147 (Send/Receive dialog layout). + +* Mon May 14 2007 Matthew Barnes - 2.10.1-15.fc7 +- Revise patch for RH bug #236860 to match upstream's solution. + +* Mon May 14 2007 Matthew Barnes - 2.10.1-14.fc7 +- Revise patch for RH bug #238155 (crash on startup). + +* Mon May 07 2007 Matthew Barnes - 2.10.1-13.fc7 +- Add patch for RH bug #238155 (crash on startup). + +* Tue May 01 2007 Matthew Barnes - 2.10.1-12.fc7 +- Add patch for RH bug #238551 (incorrect attachment count). + +* Tue May 01 2007 Matthew Barnes - 2.10.1-10.fc7 +- Revise patch for GNOME bug #363695 to fix RH bug #238497 + (crash sorting "To" column). + +* Mon Apr 30 2007 Matthew Barnes - 2.10.1-9.fc7 +- Revise some patches so that we don't have to run autoreconf. +- Remove patch for GNOME bug #427939 (use a different work-around). + +* Fri Apr 27 2007 Matthew Barnes - 2.10.1-8.fc7 +- Add patch for RH bug #236399 (en_CA attribution format). + +* Mon Apr 23 2007 Matthew Barnes - 2.10.1-7.fc7 +- Remove the welcome email from evolution@novell.com (bug #179427). + +* Sun Apr 22 2007 Matthew Barnes - 2.10.1-6.fc7 +- Add patch for RH bug #236860 (launching from clock applet). + +* Sat Apr 21 2007 Matthias Clasen - 2.10.1-5 +- Don't install INSTALL + +* Sat Apr 14 2007 Matthew Barnes - 2.10.1-4.fc7 +- Add patch for RH bug #234315 (fix saving attachments). + +* Fri Apr 13 2007 Matthew Barnes - 2.10.1-3.fc7 +- Add patch for RH bug #235878 (make Help->Contents work again). + +* Tue Apr 10 2007 Matthew Barnes - 2.10.1-2.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #235096 + (crash when displaying a mail server message to user). + +* Mon Apr 09 2007 Matthew Barnes - 2.10.1-1.fc7 +- Update to 2.10.1 +- Fix buggy gnome-doc-utils.make (GNOME bug #427939). +- Remove patch for CVE-2007-1002 (fixed upstream). +- Remove patch for RH bug #231767 (fixed upstream). +- Remove patch for RH bug #235056 (fixed upstream). +- Remove patch for GNOME bug #352713 (fixed upstream). + +* Wed Apr 04 2007 Matthew Barnes - 2.10.0-10.fc7 +- Add patch for GNOME bug #352713 (improve folder tree updates). + +* Tue Apr 03 2007 Matthew Barnes - 2.10.0-9.fc7 +- Require libxml2-devel in evolution-devel package (RH bug #235056). +- Add libxml-2.0 requirement to evolution-plugin-2.10.pc. + +* Tue Apr 03 2007 Matthew Barnes - 2.10.0-8.fc7 +- Revise patch for GNOME bug #419524 to fix RH bug #235082 + (crash in initial account setup wizard). + +* Mon Apr 02 2007 Matthew Barnes - 2.10.0-7.fc7 +- Add patch for RH bug #231767 (allow mail-notification to build). + +* Fri Mar 30 2007 Matthew Barnes - 2.10.0-6.fc7 +- Revise patch for GNOME bug #362638 (deprecate EThread). + +* Thu Mar 29 2007 Matthew Barnes - 2.10.0-5.fc7 +- CVE-2007-1002 (Shared memo categories format string vulnerability) +- Add -Wdeclaration-after-statement to strict build settings. + +* Mon Mar 26 2007 Matthew Barnes - 2.10.0-4.fc7 +- Run gtk-update-icon-cache in %post and %postun (RH bug #234018). + +* Sat Mar 17 2007 Matthew Barnes - 2.10.0-3.fc7 +- Add flag to disable deprecated Camel symbols. +- Add patch for GNOME bug #419469 (refactor shell/main.c). +- Add patch for GNOME bug #419524 (use GLib's i18n macros). +- Add patch for GNOME bug #418971 (drop support for GLib < 2.8). + +* Wed Mar 14 2007 Matthew Barnes - 2.10.0-2.fc7 +- Add patch for GNOME bug #417999 (use ESourceComboBox). + +* Mon Mar 12 2007 Matthew Barnes - 2.10.0-1.fc7 +- Update to 2.10.0. +- Add patch for GNOME bug #376991 (refactor password handling). + +* Mon Feb 26 2007 Matthew Barnes - 2.9.92-1.fc7 +- Update to 2.9.92. +- Require gtkhtml3 >= 3.13.92. +- Add missing libgnomeprintui22 requirements. +- Remove patch for GNOME bug #350253 (fixed upstream). +- Remove patch for GNOME bug #356177 (fixed upstream). +- Remove patch for GNOME bug #360946 (fixed upstream). +- Remove evolution-2.5.4-move-autosave-file.patch (fixed upstream). +- Add minimum version to intltool requirement (currently >= 0.35.5). + +* Thu Feb 15 2007 Matthew Barnes - 2.9.91-3.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #220714 + (certificate prompt causes crash). + +* Tue Feb 13 2007 Matthew Barnes - 2.9.91-2.fc7 +- Require GConf2 in post. +- Require scrollkeeper in post and postun. + +* Mon Feb 12 2007 Matthew Barnes - 2.9.91-1.fc7 +- Update to 2.9.91 +- Require gtkhtml3 >= 3.13.6. +- Add files for new imap-features plugin. +- Add flag to disable deprecated Pango symbols. +- Remove patch for GNOME bug #357216 (fixed upstream). +- Remove patch for GNOME bug #359979 (fixed upstream). + +* Fri Jan 26 2007 Matthew Barnes - 2.9.5-4.fc7 +- Compile with the -fno-strict-aliasing flag, which will hopefully improve + reliability until the illegal type-punning is fixed (RH bug #224552). + +* Sun Jan 21 2007 Matthew Barnes - 2.9.5-3.fc7 +- Revise evolution-2.7.1-no-gnome-common.patch so that we no longer + have to run autoconf before building. +- Revise evolution-2.5.4-fix-conduit-dir.patch so that we no longer + have to run automake before building. + +* Wed Jan 10 2007 Matthew Barnes - 2.9.5-2.fc7 +- Add patch for GNOME bug #359979 (change EMsgPort semantics). + +* Mon Jan 08 2007 Matthew Barnes - 2.9.5-1.fc7 +- Update to 2.9.5 +- Remove pilot-link-0.12 patch (fixed upstream). +- Remove patch for RH bug #215466 and #218589 (fixed upstream). +- Remove patch for RH bug #215695 (fixed upstream). + +* Sat Dec 30 2006 Matthew Barnes - 2.9.4-4.fc7 +- Add Requires evolution-data-server-devel to devel subpackage + (RH bug #218889). + +* Thu Dec 21 2006 Matthew Barnes - 2.9.4-3.fc7 +- Add patch for RH bug #218898 (viewing message source). + +* Wed Dec 20 2006 Matthew Barnes - 2.9.4-2.fc7 +- Revise patch for RH bug #202751 (printing of indic languages). + +* Tue Dec 19 2006 Matthew Barnes - 2.9.4-1.fc7 +- Update to 2.9.4 +- Bump eds_version to 1.9.4 due to soname changes. +- Remove patch for GNOME bug #382431 (fixed upstream). + +* Fri Dec 15 2006 Matthew Barnes - 2.9.3-5.fc7 +- Add patch for GNOME bug #373116 (use GtkColorButton). + +* Fri Dec 15 2006 Matthew Barnes - 2.9.3-4.fc7 +- Disable patch for RH bug #216537, which caused RH bug #219228. + +* Tue Dec 12 2006 Matthew Barnes - 2.9.3-3.fc7 +- Revise patch for RH bug #215466 to also fix RH bug #218589. + +* Mon Dec 11 2006 Matthew Barnes - 2.9.3-2.fc7 +- Add patch for RH bug #215467 (missing meeting participants). + +* Thu Dec 09 2006 Matthew Barnes - 2.9.3-1.fc7 +- Update to 2.9.3 +- Configure with scrollkeeper disabled. +- Disable automake portability checking. +- Ship our own icons from gnome-icon-theme. +- BuildRequires: gnome-doc-utils >= 0.8.0 +- Add patch for RH bug #215478 (Maildir and MH accounts). +- Add patch for RH bug #215695 (crashes w/o mail accounts). +- Add patch for RH bug #216537 (viewing attachments). +- Add patch for RH bug #218801 (count unread messages first). +- Add patch for GNOME bug #350253 (ship our own icons). +- Add patch for GNOME bug #382431 (implicit function declaration). +- Revise patch for GNOME bug #360946 (improved "about" dialog). +- Remove patch for GNOME bug #357970 (fixed upstream). + +* Tue Nov 28 2006 Matthew Barnes - 2.9.2-3.fc7 +- Add patch to port evolution conduits to pilot-link 0.12. +- Add patch for RH bug #215466 (optional meeting participants). +- Add patch for GNOME bug #373837 (use GtkFontButton). +- Remove patch for GNOME bug #343331 (fixed upstream). + +* Tue Nov 07 2006 Matthew Barnes - 2.9.2-2.fc7 +- Revise patch for RH bug #202751 and re-enable it. + +* Mon Nov 06 2006 Matthew Barnes - 2.9.2-1.fc7 +- Update to 2.9.2 +- Remove patch for Gnome.org bug #360240 (fixed upstream). +- Remove patch for Gnome.org bug #360619 (fixed upstream). + +* Mon Nov 06 2006 Matthew Barnes - 2.9.1-3.fc7 +- Add patch for RH bug #176400 (reset calendar IM context). +- Add patch for RH bug #182247 (calendar input glitch). + +* Fri Oct 20 2006 Matthew Barnes - 2.9.1-2.fc7 +- Add patch for Gnome.org bug #356177 (deprecate EMutex). +- Add patch for Gnome.org bug #363695 (deprecate EStrv/EPoolv). +- Disable patch for RH bug #202751 (unwanted side-effects). + +* Mon Oct 16 2006 Matthew Barnes - 2.9.1-1.fc7 +- Update to 2.9.1 +- Bump eds_version to 1.9.1, evo_major to 2.10. +- Remove patch for Gnome.org bug #359236 (fixed upstream). + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-4.fc7 +- Another typo. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-3.fc7 +- Fix a typo in setting up .desktop symlinks. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-2.fc7 +- Forgot to check-in one of the patches. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-1.fc7 +- Update to 2.8.1 +- Use stricter build settings. +- Make .desktop symlinks absolute (RH bug #209322). +- Add patch for RH bug #202751 (printing of indic languages). +- Add patch for Gnome.org bug #357970 (deprecated GLib / GDK symbols). +- Add patch for Gnome.org bug #359236 (search state crash). +- Add patch for Gnome.org bug #360240 ("unused variable" warnings). +- Add patch for Gnome.org bug #360619 ("incompatible pointer type" warnings). +- Add patch for Gnome.org bug #360946 (improved "about" dialog). +- Add patch for Gnome.org bug #362638 (deprecate EThread). +- Update patch for RH bug #211058 (partially fixed upstream). +- Remove patch for RH bug #201307 (fixed upstream). +- Remove patch for RH bug #205576 (fixed upstream). +- Remove patch for Gnome.org bug #351332 (fixed upstream). +- Remove patch for Gnome.org bug #352450 (fixed upstream). +- Remove patch for Gnome.org bug #353472 (fixed upstream). +- Remove patch for Gnome.org bug #356811 (fixed upstream). + +* Sun Oct 01 2006 Jesse Keating - 2.8.0-7.fc6 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Thu Sep 21 2006 Matthew Barnes - 2.8.0-6.fc6 +- Add patch for RH bug #205576 (message deletion in thread view). + +* Wed Sep 20 2006 Matthew Barnes - 2.8.0-5.fc6 +- Add patch for Gnome.org bug #356811 (lingering file on uninstall). + +* Tue Sep 19 2006 Matthew Barnes - 2.8.0-4.fc6 +- Bump eds_version to 1.8.0. + +* Wed Sep 13 2006 Matthew Barnes - 2.8.0-3.fc6 +- Add patch for RH bug #161885. + +* Wed Sep 13 2006 Matthew Barnes - 2.8.0-2.fc6 +- Add patch for RH bug #201307. + +* Mon Sep 4 2006 Matthew Barnes - 2.8.0-1.fc6 +- Update to 2.8.0 +- Remove patch for RH bug #197868 (fixed upstream). +- Remove patch for RH bug #201541 (fixed upstream). +- Remove patch for RH bug #201831 (fixed upstream). +- Remove patch for RH bug #202383 (fixed upstream). +- Remove patch for RH bug #203036 (fixed upstream). +- Remove patch for Gnome.org bug #352248 (fixed upstream). +- Remove patch for Gnome.org bug #352423 (fixed upstream). +- Update patch for Gnome.org bug #351332 (partially fixed upstream). + +* Thu Aug 31 2006 Matthew Barnes - 2.7.92-8.fc6 +- Add patch for RH bug #203036. +- Disable notification-cleanups patch. + +* Tue Aug 29 2006 Matthew Barnes - 2.7.92-7.fc6 +- Add patch for Gnome.org bug #353472. + +* Mon Aug 28 2006 Matthew Barnes - 2.7.92-6.fc6 +- Add another hunk to the patch for RH bug #201541. +- Add patch for RH bug #202289. + +* Mon Aug 28 2006 Matthew Barnes - 2.7.92-5.fc6 +- Add patch for RH bug #201541. + +* Wed Aug 23 2006 Matthew Barnes - 2.7.92-4.fc6 +- Add patches for Gnome.org bug #352450. + +* Tue Aug 22 2006 Matthew Barnes - 2.7.92-3.fc6 +- Replace my patch for RH bug #202383 with a better one from upstream. +- Add patch for Gnome.org bug #352423. + +* Mon Aug 21 2006 Matthew Barnes - 2.7.92-2.fc6 +- Add patch for Gnome.org bug #352248 (and remember to commit it). + +* Mon Aug 21 2006 Matthew Barnes - 2.7.92-1.fc6 +- Update to 2.7.92 +- Remove patch for RH bug #197834 (fixed upstream). +- Update patch for Gnome.org bug #351332 (partially fixed upstream). + +* Tue Aug 15 2006 Matthew Barnes - 2.7.91-5.fc6 +- Drop the bug-buddy dependency since it's not required for Evolution to run. + +* Mon Aug 14 2006 Matthew Barnes - 2.7.91-4 +- Add patch for RH bug #201831. + +* Mon Aug 14 2006 Matthew Barnes - 2.7.91-3 +- Consolidate "missing declarations" patches. +- Add patch for RH bug #202383. + +* Fri Aug 11 2006 Matthew Barnes - 2.7.91-2 +- Add patch for RH bug #197868. + +* Mon Aug 7 2006 Matthew Barnes - 2.7.91-1 +- Update to 2.7.91 +- Update patch for RH bug #197834 for use with bug-buddy 2.15.90. +- Require bug-buddy >= 2.15.90. + +* Fri Aug 4 2006 Matthew Barnes - 2.7.90-6 +- Update to 2.7.90 +- Require evolution-data-server-1.7.90.1. + +* Wed Aug 2 2006 Matthew Barnes - 2.7.4-5 +- Remove patch for RH bug #167157, as it fixed it the wrong way. +- The real fix for #167157 is in evolution-data-server-1.7.4-5. +- No longer packaging unused patches. + +* Mon Jul 31 2006 Matthew Barnes - 2.7.4-4 +- Add patch for RH bug #178295. +- Add patch for RH bug #167157. + +* Tue Jul 18 2006 Matthew Barnes - 2.7.4-3 +- Clean up spec file, renumber patches. +- Add BuildRequires for dbus-glib-devel. +- Rebuild to pick up new D-Bus. + +* Thu Jul 13 2006 Matthew Barnes - 2.7.4-2 +- Update patch for RH bug #157400. +- Update patch for RH bug #157505. + +* Wed Jul 12 2006 Matthew Barnes - 2.7.4-1 +- Update to 2.7.4 +- Remove evo-calendar-print-with-pango-7.patch (fixed upstream). +- Remove patch for Gnome.org bug #345677 (fixed upstream). +- Remove patch for RH bug #175596 (fixed upstream). + +* Wed Jul 12 2006 Jesse Keating - 2.7.3-10.1 +- rebuild + +* Tue Jul 11 2006 Matthew Barnes - 2.7.3-10 +- Update patch for RH bug #190359. + +* Fri Jul 7 2006 Matthew Barnes - 2.7.3-9 +- Make "Submit Bug Report" menu item work again (RH #197384). + +* Thu Jul 6 2006 Matthew Barnes - 2.7.3-8 +- Add patch for RH bug #166231 (also addresses #131227 and #157391). + +* Fri Jun 29 2006 Matthew Barnes - 2.7.3-7 +- Add patch for RH bug #157400, reorder some patch #'s. + +* Thu Jun 29 2006 Matthew Barnes - 2.7.3-6 +- Properly capitalize "Message->Mailing List" menu items (RH #175596). + +* Tue Jun 27 2006 Matthew Barnes - 2.7.3-5 +- Add patch for Gnome.org bug #211058 for Trever Adams to test. + +* Mon Jun 26 2006 Matthew Barnes - 2.7.3-4 +- Add patch for RH bug #157505 for QE testing. + +* Thu Jun 22 2006 Matthew Barnes - 2.7.3-3 +- Fix bad type in schema file (Gnome.org #345677). + +* Wed Jun 14 2006 Tomas Mraz - 2.7.3-2 +- rebuilt with new gnutls + +* Tue Jun 13 2006 Matthias Clasen - 2.7.3-1 +- Update to 2.7.3 + +* Mon May 29 2006 Dan Williams - 2.7.2.1-4 +- Don't crash on quit when trying to save window size (Gnome.org #343331) + +* Tue May 23 2006 Matthew Barnes 2.7.2.1-3 +- Port evolution-2.7.1-notification-cleanups.patch to new libnotify API. +- Require libnotify >= 0.4. + +* Fri May 19 2006 Matthew Barnes - 2.7.2.1-2 +- Require specific versions of GNU Autotools packages for building. +- Add evolution-2.7.2-preedit-gnome.bz-264485.patch (Mayank Jain). +- Various spec file cleanups. +- Pick up new libnotify. + +* Wed May 17 2006 Matthew Barnes - 2.7.2.1-1 +- Update to 2.7.2.1 +- Remove nss/nspr hunk from evolution-2.7.1-no-gnome-common.patch + (fixed upstream). + +* Fri May 12 2006 Matthew Barnes - 2.7.1-1 +- Update to 2.7.1 +- Bump evo_major from 2.6 to 2.8 +- Upstream evolution.desktop renamed evolution-%{evo_major}.desktop. +- Upstream evolution.keys renamed evolution-%{evo_major}.keys. +- Upstream evolution.mime renamed evolution-%{evo_major}.mime. +- Update line numbers in evolution-2.5.2-no-gnome-common.patch and + evolution-2.5.5.1-notification-cleanups.patch and rename them to + version 2.7.1. + +* Wed May 3 2006 Matthew Barnes - 2.6.1-3 +- rebuilt + +* Mon Apr 10 2006 Matthias Clasen - 2.6.1-2 +- Update to 2.6.1 + +* Thu Mar 30 2006 Caolan McNamara - 2.6.0-2 +- rebuild against reverted pilot-link +- disable evolution-2.5.4-fix-conduits.patch for reversion to pilot-link 0.11.8 + +* Mon Mar 13 2006 Ray Strode - 2.6.0-1 +- 2.6.0 +- turn on the "error on missing prototypes" check thing + +* Mon Feb 27 2006 Ray Strode - 2.5.92-1 +- 2.5.92 + +* Tue Feb 14 2006 David Malcolm - 2.5.91-1 +- 2.5.91 +- updated patch 101 to track upstream changes to calendar printing code +- remove uptreamed patch 807 (NM multiple initialization assertion) +- readded the mail-to-task plugin XML UI file +- bump e-d-s req to 1.5.91 + +* Fri Feb 10 2006 Jesse Keating - 2.5.90-2.1 +- bump again for double-long bug on ppc(64) + +* Thu Feb 9 2006 Christopher Aillon - 2.5.90-2 +- Disable the inline audio plugin for now since it uses gstreamer08 + +* Tue Feb 07 2006 Jesse Keating - 2.5.90-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Jan 30 2006 David Malcolm - 2.5.90-1 +- 2.5.90 +- trimmed patches 805 and 808, as parts of these got merged upstream +- trimmed and regenerated patch 806 to track upstream +- removed the mail-to-task plugin XML UI file + +* Sat Jan 28 2006 David Malcolm - 2.5.5.1-2 +- added missing patch + +* Wed Jan 25 2006 David Malcolm - 2.5.5.1-1 +- 2.5.5.1 +- update patch 106 to track upstream, renaming from + evolution-2.2.2-commit-enter-on-calendar.patch to + evolution-2.5.5.1-commit-enter-on-calendar.patch +- update patch 805 to track upstream +- added patch to fix some newly missing declarations (patch 808) +- replace evolution-2.5.4-port-to-new-libnotify-api.patch with + evolution-2.5.5.1-notification-cleanups.patch, since much of this was + duplicated by another patch that landed upstream; removing the actions code + as it was crashing deep inside DBus (patch 806, #177666) +- explicitly list various files to reduce reliance on globbing; organized the + files into logical groups; comment them +- added -Wno-sign-compare to CFLAGS +- enabled parallel make +- introduced require_function_declarations macro to make + -Werror-implicit-function-declaration flag optional; turn it off for now +- include the new CalDAV and mail-attachments-import plugins in the file list; + add an XML UI file for the mail-to-task plugin. +- use "sed -i -e" rather than "sed -ie" to avoid getting severe bonobo files + +* Wed Jan 18 2006 Ray Strode - 2.5.4-10 +- fix fix for multilib issue with shlib bonobo components (bug 156982) + +* Wed Jan 18 2006 Ray Strode - 2.5.4-9 +- fix multilib issue with shlib bonobo components (bug 156982) + +* Thu Jan 12 2006 David Malcolm - 2.5.4-8 +- avoid multiple initialization of NetworkManager connections (patch 807, + gnome bug #326785) + +* Thu Jan 12 2006 David Malcolm - 2.5.4-7 +- updated alarm notification patch(patch 806, #177546, #177666, #177667, + #177670) + +* Thu Jan 12 2006 Christopher Aillon - 2.5.4-6 +- Remove unneeded Requires: notify-daemon + +* Thu Jan 12 2006 Christopher Aillon - 2.5.4-5 +- Update BR to libnotify-devel + +* Wed Jan 11 2006 David Malcolm - 2.5.4-4 +- ported alarm notification code to the new libnotify API (patch 806, #177546) +- added libnotify_support macro +- added explicit notify-daemon requirement as a workaround for bug #177535 + +* Tue Jan 10 2006 David Malcolm - 2.5.4-3 +- updated patch 800 to include patch for memo conduit (untested at this stage); + renaming from evolution-2.5.2-fix-conduits.patch to + evolution-2.5.4-fix-conduits.patch; extended patch 802 to handle the memo + conduit; renaming from evolution-2.2.2-fix-conduit-dir.patch to + evolution-2.5.4-fix-conduit-dir.patch; re-enable conduits in build (#175160) +- switch the build-time dep for the audio-inline plugin from gstreamer-devel to + gstreamer08-devel to better reflect the test in the tarball's configure.in + +* Wed Jan 4 2006 David Malcolm - 2.5.4-2 +- added optional build-time requirement on NetworkManager-glib-devel +- update patch 805 to cover a missing declaration in Network Manager support + +* Tue Jan 3 2006 David Malcolm - 2.5.4-1 +- 2.5.4 +- update patch 107 to track underlying code changes; rename from + evolution-2.2.2-move-autosave-file.patch to + evolution-2.5.4-move-autosave-file.patch +- added patch to fix more missing declarations (patch 805) +- added files for publish-calendar plugin + +* Mon Dec 19 2005 David Malcolm - 2.5.3-1 +- 2.5.3 +- Updated patch 106 (evolution-2.2.2-commit-enter-on-calendar.patch) so that it + still applies cleanly + +* Thu Dec 15 2005 Christopher Aillon 2.5.2-2 +- Require nspr and nss instead of mozilla-nspr and mozilla-nss +- Update no-gnome-common patch to work with standalone nss package + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Dec 7 2005 David Malcolm - 2.5.2-1 +- 2.5.2 +- bump gtkhtml requirement from 3.7.6 to 3.9.2 +- bump eds requirement from 1.4.1.1 to 1.5.2 +- bump evo_major from 2.4 to 2.6 +- updated patch 107 +- updated patch 108 +- updated patch 800, replacing + rh-161817-attach-116019-conduit_pilot_link_updates.diff with + evolution-2.5.2-fix-conduits.patch. Not yet complete. +- disable pilot support for now (see #175160) +- added hula plugin to list of packaged plugins +- generalize gconf schema packaging to support changing evo_major + +* Fri Dec 2 2005 David Malcolm - 2.4.2-2 +- force regeneration of the intltool files to prevent a problem where the + tarball copy of intltool-merge.in was out of sync with the intltool.m4 in the + latest shipped copy of intltool, which resulted in a broken intltool-merge + script when the tree was reautotooled. (appears that the tarball was built + with a CVS copy of intltool where @EXPANDED_LIBDIR@ had been renamed to + @INTLTOOL_LIBDIR@, but our aclocal/intltool.m4 doesn't yet reflect that + change) + +* Tue Nov 29 2005 David Malcolm - 2.4.2-1 +- 2.4.2 +- explicitly list the plugins that are packaged (#166234) +- added build-time requirement on gstreamer-devel to cope with audio-inline + plugin + +* Tue Nov 29 2005 David Malcolm - 2.4.1-8 +- add -DLDAP_DEPRECATED to CFLAGS (#172999) + +* Wed Oct 26 2005 David Malcolm - 2.4.1-7 +- Added a patch (110) to hide the component switcher buttons by default on new + windows (#170799) by patching the GConf schema. +- Made list of installed schemas explicit. +- Own the plugins subdirectory + +* Tue Oct 25 2005 David Malcolm - 2.4.1-6 +- use 4 separate .desktop files from the redhat-menus package, rather than the + current single one; bump the redhat-menus requirement accordingly (from 1.13 + to 5.0.4); introduce a macro for this requirement. + +* Mon Oct 24 2005 David Malcolm - 2.4.1-5 +- fix removal of upstream .desktop file (broke on upgrade to Evolution 2.2, and + continued to be broken with 2.3/2.4) (#103826, again) + +* Tue Oct 18 2005 David Malcolm - 2.4.1-4 +- updated patch 804 to declare e_calendar_table_process_completed_tasks + +* Tue Oct 18 2005 David Malcolm - 2.4.1-3 +- added patch (804: evolution-2.4.1-fix-missing-declarations.patch) to fix + missing declaration (thanks to Peter Robinson) + +* Mon Oct 17 2005 David Malcolm - 2.4.1-2 +- bump e-d-s requirement to 1.4.1.1 + +* Tue Oct 4 2005 David Malcolm - 2.4.1-1 +- 2.4.1 +- regenerate patch 101 to handle conflict in + calendar/gui.print.c: print_week_day_event introduced by fix to upstream bug + 244981 (end date added while printing in the week view); bump patch name from + version 5 to version 6 +- removed patch 804 (conduits-multi-day-crash); this is now in upstream tarball + +* Wed Sep 14 2005 Jeremy Katz - 2.4.0-2 +- rebuild for mozilla on ppc64 + +* Wed Sep 7 2005 David Malcolm - 2.4.0-1 +- 2.4.0 +- Removed patch to fix implicit function declarations (patch 110, added in + 2.3.8-1) as this is now upstream. + +* Thu Sep 1 2005 David Malcolm - 2.3.8-4 +- Enable exchange support when configuring, so that the exchange-operations + plugin gets built. + +* Fri Aug 26 2005 David Malcolm - 2.3.8-3 +- Added patch for #157074 (patch 804) + +* Fri Aug 26 2005 David Malcolm - 2.3.8-2 +- Move -Werror-implicit-function-declaration from configuration to the make + stage, to avoid breaking configuration tests. + +* Tue Aug 23 2005 David Malcolm - 2.3.8-1 +- 2.3.8 +- add -Werror-implicit-function-declaration to CFLAGS and a patch to fix the + problems arising (patch 110) + +* Tue Aug 16 2005 David Malcolm - 2.3.7-3 +- Introduce macro for gnome-pilot dependency, bumping from 2.0.6 to 2.0.13 +- Add obsoletion of libgal2/libgal2-devel (dependency was removed in 2.3.6-1); + based on the last EVR of the libgal2 package in CVS, 2:2.5.3-2 + +* Mon Aug 15 2005 David Malcolm - 2.3.7-2 +- rebuild + +* Tue Aug 9 2005 David Malcolm - 2.3.7-1 +- 2.3.7 +- Bump evolution-data-server requirement from 1.3.6 to 1.3.7 +- Bump gtkhtml3 requirement from 3.6.2 to 3.7.6 + +* Mon Aug 8 2005 Tomas Mraz - 2.3.6.1-5 +- rebuild with new gnutls + +* Tue Aug 2 2005 David Malcolm - 2.3.6.1-4 +- Added patch to show correct mimetype for OpenOffice.org files when guessing + type for attachments with mimetype "application/octet-stream" (#164957) + +* Mon Aug 1 2005 David Malcolm - 2.3.6.1-3 +- Improved version of evolution-2.3.5.1-fix-150458.patch (#150458) + +* Sat Jul 30 2005 David Malcolm 2.3.6.1-2 +- Fixed version numbers in GConf schema files (#164622); added + apps-evolution-mail-prompts-checkdefault-2.4.schemas + +* Fri Jul 29 2005 David Malcolm - 2.3.6.1-1 +- 2.3.6.1 + +* Thu Jul 28 2005 David Malcolm - 2.3.6-1 +- 2.3.6 +- Bump evolution-data-server requirement to 1.3.6 (needed for + CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING) +- Removed libgal2[-devel] dependencies; the code has been moved into the + evolution tarball + +* Thu Jul 28 2005 David Malcolm - 2.3.5.1-2 +- added experimental patch to port ETable printing to use Pango (#150458) + +* Mon Jul 25 2005 David Malcolm - 2.3.5.1-1 +- 2.3.5.1 +- Update evo_major from 2.2 to 2.4 +- Updated evo-calendar-print-with-pango- patch from version 4 to 5 +- Removed Patch105: evolution-2.2.2-fix-new-mail-notify.patch as configure.in + in this branch tests for existance for dbus-glib-1, rather than max-version. +- Removed Patch801: gb-309138-attach-48417-fix-evo-conduit-memleaks.patch as + this is now in upstream tarball. +- Removed evolution-calendar-importers and evolution-addressbook-importers + directories. +- Updated evolution-2.2.2-no-gnome-common.patch to include a patch to rename + mozilla-nspr to nspr + +* Tue Jun 28 2005 David Malcolm - 2.2.2-11.fc5 +- Remove GNOME_COMPILE_WARNINGS from configure.in (since gnome-common might not be available when we rerun the autotools; patch 803) + +* Tue Jun 28 2005 David Malcolm - 2.2.2-10.fc5 +- Moved .conduit files to libdir/gnome-pilot/conduits, rather than beneath datadir, to match gnome-pilot (patch 802) + +* Mon Jun 27 2005 David Malcolm - 2.2.2-9.fc5 +- Replaced patch to port conduits to pilot-link-0.12 with Mark G Adams's version of same (#161817) +- Added Mark G Adams's memory leak fix (patch 801) + +* Mon Jun 6 2005 David Malcolm - 2.2.2-8 +- Added Ivan Gyurdiev's patch to move autosave files inside the .evolution + directory + +* Thu May 26 2005 David Malcolm - 2.2.2-7 +- Added Akira Tagoh's patch for calendar keypress handling (#154360) + +* Mon May 23 2005 David Malcolm - 2.2.2-6 +- Remove static versions of libraries + +* Thu May 5 2005 David Malcolm - 2.2.2-5 +- added evolution-2.2.2-fix-new-mail-notify.patch to CVS + +* Thu May 5 2005 David Malcolm - 2.2.2-4 +- Removed explicit mozilla_build_version; instead use pkg-config to determine +the path to the NSS/NSPR headers. +- Use a macro to express requirement on pilot-link (was 1:0.11.4, now 0.12; +patches depend on this) +- Re-enabled the new-mail-notify plugin (my patch to handle differing DBus +versions is in the upstream tarball; but configure.in disables the plugin for +dbus versions > 0.23; patched configure.in to allow arbitrary DBus versions, +and run autoconf at the start of the build) (#156328) + +* Sat Apr 30 2005 David Malcolm - 2.2.2-3 +- updated mozilla_build_version to 1.7.7 + +* Sat Apr 30 2005 David Malcolm - 2.2.2-2 +- Finished porting conduits to pilot-link-0.12 API; re-enabled pilot support (#152172) + +* Mon Apr 11 2005 David Malcolm - 2.2.2-1 +- 2.2.2 +- updated evo-calendar-print-with-pango-4.patch to handle upstream change to print_comp_item +- removed patch for XB73912; now in upstream tarball +- removed patch to new-mail-notify; generalised fix to cope with various DBus API versions is now upstream +- removed patch for XB73844; now in upstream tarball +- Update requirements: + - gtkhtml3 from 3.6.1 to 3.6.2 + - libgal2 from 2.4.1 to 2.4.2 + - eds from 1.2.1 to 1.2.2 + +* Wed Mar 23 2005 David Malcolm - 2.2.1.1-2 +- Add patch for upstream bug XB73844 (should now be able to accept meeting requests) + +* Fri Mar 18 2005 David Malcolm - 2.2.1.1-1 +- 2.1.1.1 + +* Thu Mar 17 2005 David Malcolm - 2.2.1-1 +- 2.2.1 +- Updated requirements: + * gtkhtml3 from 3.6.0 to 3.6.1 + * libgal2 from 2.4.0 to 2.4.1 + * eds from 1.2.0 to 1.2.1 +- Added rum-time requirement on gnome-vfs2; updated version requirement from 2.0 to 2.4 +- The new-mail-notify plugin will not be built for now since the upstream configure test now checks for dbus-glib-1 version <= 0.23.4 (to minimise problems caused by the API change) + +* Mon Mar 14 2005 David Malcolm - 2.2.0-10 +- disabled pilot-link support for now so that we have an evolution package; more patching is needed to get this to work with pilot-link-0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-9 +- another attempt at porting to pilot-link 0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-8 +- Added patch to deal with changes to pilot-link from 0.11->0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-7 +- use 0.31 rather than 0.31.0 for DBus version + +* Mon Mar 14 2005 David Malcolm - 2.2.0-6 +- rebuilt against pilot-link-0.12 +- added versioning to the requirement on dbus (>=0.31) + +* Thu Mar 10 2005 David Malcolm - 2.2.0-5 +- Added patch for changes to DBus API in version 0.31 (#150671) +- Removed explicit run-time spec-file requirement on mozilla. + The Mozilla NSS API/ABI stabilised by version 1.7.3 + The libraries are always located in the libdir + However, the headers are in /usr/include/mozilla-%{mozilla_build_version} + and so they move each time the mozilla version changes. + So we no longer have an explicit mozilla run-time requirement in the specfile; + a requirement on the appropriate NSS and NSPR .so files is automagically generated on build. + We have an explicit, exact build-time version, so that we can find the headers (without + invoking an RPM query from the spec file; to do so is considered bad practice) +- Introduced mozilla_build_version, to replace mozilla_version + +* Wed Mar 9 2005 Christopher Aillon - 2.2.0-4 +- Depend on mozilla 1.7.6 + +* Wed Mar 9 2005 David Malcolm - 2.2.0-3 +- added patch from upstream for bug XB-73192, fixing missing "Mark as Read/Unread" context menu items + +* Tue Mar 8 2005 David Malcolm - 2.2.0-2 +- actually add source tarball this time + +* Tue Mar 8 2005 David Malcolm - 2.2.0-1 +- 2.2.0 +- Removed patch for GCC 4 fix as this is now in upstream tarball +- Updated requirements: + * gtkhtml3 from 3.5.7 to 3.6.0 + * libgal2 from 2.3.5 to 2.4.0 + * eds from 1.1.6 to 1.2.0 + +* Tue Mar 8 2005 David Malcolm - 2.1.6-3 +- rebuild (to use latest DBus library) + +* Tue Mar 1 2005 David Malcolm - 2.1.6-2 +- added patch to fix build with GCC4 + +* Tue Mar 1 2005 David Malcolm - 2.1.6-1 +- Update from upstream unstable 2.1.6 to 2.1.6 +- Added patches to fix calendar and addressbook printing for non-Roman scripts (#138075) +- Added explicit requirement on libgnomeprint22 >= 2.8.0 +- Added BuildRequires: gtk-doc +- Updated requirements: + * gtkhtml3 from 3.5.6 to 3.5.7 + * libgal2 from 2.3.4 to 2.3.5 + * eds from 1.1.5 to 1.1.6 + +* Wed Feb 9 2005 David Malcolm - 2.1.5-1 +- Update from upstream unstable 2.1.4 to 2.1.5 +- Updated requirements: + * gtkhtml3 from 3.5.4 to 3.5.6 + * libgal2 from 2.3.3 to 2.3.4 + * eds from 1.1.4.1 to 1.1.5 +- Removed explicit packaging of weather icons as these are now below DATADIR/evolution/2.2 rather than DATADIR/evolution-2.2 + +* Wed Jan 26 2005 David Malcolm - 2.1.4-1 +- Update from upstream stable 2.0.3 to unstable 2.1.4 +- Updated evo_major from 2.0 to 2.2 +- Removed camel packaging as this has been moved to evolution-data-server for Evolution 2.2 +- Added plugins to the packaged files +- Added weather icons to the packaged files +- Updated requirements: + * gtkhtml3 from 3.3.2 to 3.5.4 + * libgal2 from 2.2.4 to 2.3.3 + * eds from 1.0.3 to 1.1.4.1 + * libsoup from 2.2.0 to 2.2.2 +- Added built-time requirement on atk-devel +- Enable all plugins for now +- Added requirement on dbus (for the new-mail-notify plugin) +- Enable gtk-doc +- Updated GConf schema name suffixes from 2.0 to 2.2 + +* Sun Dec 19 2004 Christopher Aillon 2.0.3-2 +- Rebuild against mozilla 1.7.5 + +* Wed Dec 15 2004 David Malcolm - 2.0.3-1 +- Update from upstream 2.0.2 to 2.0.3 with these bug fixes: + * Addressbook + XB67656 - almost the same email address are considrered identical (Siva) + XB69079 - Data repeated after save with bad date format (Siva) + XB66854 - Some strings are missed to translation (Rodney) + + * Calendar + XB47529 - Date in reminder window appears in UTF-8 in non-UTF-8 locale (Rodney) + XB68707 - Events ending at 12:00 AM show as ending at 12:00 pm (JP) + XB67403 - wrong alarm time displayed (Rodrigo) + XB68077 - appointment dialog re-size (Rodrigo) + - leak fixes (Chen) + - sensitize menu items in list view properly (JP) + - redraw display when 24hr time setting changes (JP) + + * Mail + XB69533 - Unable to subscribe to the alt hierarchy (Michael) + XB69776 - Signed Mail with attachments displays everything with multipart/boundaries stuff (Michael) + XB69615 - delete certificate after viewing smime message (Michael) + XB69109 - EHLO or HELO with ip addresses does not conform rfc 821 (Michael) + XB69982 - During Newsgroup list refresh, it crashes (Michael) + XB69446 - Mail shown as attachment if some headers are upper case (S. Caglar Onur) + XB68556 - NNTP with SSL won't work, even with stunnel (Michael) + XB69145 - toplevel message/rfc822 parts are broken for IMAP (Michael) + XB69241 - base64 attachement holding PGP block (Jeff) + XB67895 - nntp support not asking for password (Michael) + XB67898 - Use of symbolic port-names is not guaranteed to work everywhere (Michael) + XB69851 - remember password check doesn't stick (Michael) + XB69623 - Moving a message from an IMAP INBOX to an IMAP folder caused crash (Radek) + XB69339 - postscript and some other attachments not visable (Michael) + XB69579 - vFoldersXBUNMATCHED generates errors (Michael) + XB68958 - current message forgotten in vfolders (Michael) + XB68974 - Wizard doesn't store smtp auth settings (Michael) + XB67496 - html email not rendered in preview pane (Michael) + XB67014 - Checking supported auth types doesn't work with new SSL certificate (Michael) + XB68006 - Evo crashed after viewing previously-sent email and copying URL from it (Michael) + XB68787 - Crash when migrating 1.4 data to 2.0.2 (Michael) + XB67622 - SMTP auth usernames containing % character fail (Jeff) + - fix pthread_key_delete args (Julio M. Merino Vidal) +- Removed patch for "Unmatched" vfolder properties dialog (#141458) as this is now in upstream tarball (XB69579 above) +- Update dependency on e-d-s from 1.0.2 to 1.0.3 +- Update dependency on libgal2 from 2.2.3 to 2.2.4 + +* Wed Dec 1 2004 David Malcolm - 2.0.2-6 +- Fix broken properties dialog for "Unmatched" vfolder (#141458) + +* Wed Oct 27 2004 Christopher Aillon - 2.0.2-4 +- Re-enable s390(x) + +* Fri Oct 22 2004 David Malcolm - 2.0.2-3 +- added requirement on gnutls/gnutls-devel + +* Fri Oct 22 2004 David Malcolm - 2.0.2-2 +- Fix for #132050 (no entry for Evolution in the menus): use the new redhat-evolution.desktop file provided by redhat-menus-1.13 + +* Tue Oct 12 2004 David Malcolm - 2.0.2-1 +- Update from 2.0.1 to 2.0.2 +- Updated dependency on e-d-s from 1.0.1 to 1.0.2 +- Updated dependency on libgal2 from 2.2.2 to 2.2.3 +- Updated dependency on gtkhtml3 from 3.3.0 to 3.3.2 +- ppc's mozilla dependency is now in line with the other architectures at 1.7.3 + +* Sat Oct 9 2004 David Malcolm +- disable s390/s390x for now + +* Fri Oct 8 2004 David Malcolm - 2.0.1-3 +- Fix for #135135, updating the fix for #103826 that removes the evolution.desktop file in "Office"; the file to delete had been renamed to evolution-2.0.desktop +- Added requirement on redhat-menus, since this supplies the target of our .desktop symlink + +* Tue Sep 28 2004 David Malcolm - 2.0.1-2 +- update mozilla dependency from 1.7.2 to 1.7.3, apart from on ppc (and on s390 and s390x, which remain at 1.6, and on ppc64 where it isn't available at all) + +* Tue Sep 28 2004 David Malcolm - 2.0.1-1 +- Update from 2.0.0 to 2.0.1 +- Updated dependency on e-d-s from 1.0.0 to 1.0.1 +- Updated dependency on libgal2 from 2.2.0 to 2.2.2 + +* Mon Sep 20 2004 David Malcolm - 2.0.0-2 +- rebuilt + +* Tue Sep 14 2004 David Malcolm - 2.0.0-1 +- Update from 1.5.94.1 to 2.0.0 +- Change source FTP location from 1.5 to 2.0 +- Updated dependency on e-d-s from 0.0.99 to 1.0.0 +- Documentation has now moved from 1.5 to 2.0 + +* Tue Aug 31 2004 David Malcolm - 1.5.94.1-1 +- updated tarball from 1.5.93 to 1.5.94.1 +- the BASE_VERSION in the configure.in script has finally been updated from 1.5 to 2.0 (affects OAFIIDs, install dirs, binary names etc); updated evo_major and various other parts of the spec-file to reflect this; however documentation is still 1.5 in upstream tarball +- updated dependency on libgal2 from 2:2.1.14 to 2:2.2.0 +- updated dependency on libsoup from 2.1.13 to 2.2.0 +- updated dependency on e-d-s from 0.0.98 to 0.0.99 + +* Tue Aug 17 2004 David Malcolm - 1.5.93-2 +- updated gnome-icon-theme requirement from 1.2.0 to 1.3.6 to fix problem with missing stock icons (bz #130142) + +* Mon Aug 16 2004 David Malcolm - 1.5.93-1 +- updated tarball from 1.5.92.2 to 1.5.93 +- removed filechooser patch - this is now in the upstream tarball, with a test at configuration time; it was autodetected and enabled in my test build; I've explicitly enabled it to be certain. +- updated dependency on libgal2 from 2:2.1.13 to 2:2.1.14 +- updated dependency on libsoup from 2.1.12 to 2.1.13 +- updated dependency on e-d-s from 0.0.97 to 0.0.98 + +* Wed Aug 11 2004 David Malcolm - 1.5.92.2-2 +- Increased mozilla_version from 1.7 to 1.7.2 so that the NSS test looks in the correct place + +* Wed Aug 11 2004 David Malcolm - 1.5.92.2-1 +- updated tarball from 1.5.92.1 to 1.5.92.2 + +* Wed Aug 4 2004 David Malcolm - 1.5.92.1-1 +- updated tarball from 1.5.91 to 1.5.92.1 +- added a dependency on gnome-icon-theme +- updated dependency on libgal2 from 2:2.1.11 to 2:2.1.13 +- updated dependency on gtkhtml3 from 3.1.17 to 3.3.0 +- updated dependency on libsoup from 2.1.11 to 2.1.12 +- updated dependency on e-d-s from 0.0.95 to 0.0.97 + +* Mon Jul 26 2004 David Malcolm - 1.5.91-1 +- 1.5.91 + +* Thu Jul 8 2004 Jeremy Katz - 1.5.90-5 +- use mozilla 1.7 on platforms where it's available +- check to make sure the appropriate mozilla headers exist if using + mozilla nss for ssl or fail the build + +* Thu Jul 8 2004 David Malcolm +- rebuilt + +* Wed Jul 7 2004 David Malcolm +- rebuilt + +* Tue Jul 6 2004 David Malcolm - 1.5.90-2 +- Fixed sources file + +* Tue Jul 6 2004 David Malcolm - 1.5.90-1 +- 1.5.90; updated requirements on gtkhtml3, libgal2, and e-d-s + +* Thu Jun 17 2004 David Malcolm - 1.5.9.2-1 +- 1.5.9.2 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Jun 8 2004 David Malcolm - 1.5.9.1-3 +- Replaced /usr/lib with %%{_libdir} in mozills_nss ssl_flags + +* Mon Jun 7 2004 David Malcolm - 1.5.9.1-2 +- updated filechooser patch again + +* Mon Jun 7 2004 David Malcolm - 1.5.9.1-1 +- 1.5.9.1; updated filechooser patch + +* Wed May 26 2004 David Malcolm - 1.5.8-3 +- added ORBit2 and spamassassin requirements + +* Mon May 24 2004 David Malcolm - 1.5.8-2 +- Fixed up filechooser patch and re-enabled it + +* Fri May 21 2004 David Malcolm - 1.5.8-1 +- 1.5.8; added explicit libbonoboui requirement; disabled filechooser patch for now + +* Tue May 4 2004 David Malcolm - 1.5.7-3 +- Added GtkFileChooser patch based on work by Carlos Garnacho Parro (http://lists.ximian.com/archives/public/evolution-patches/2004-March/004867.html); added requirement for GTK 2.4 + +* Thu Apr 22 2004 David Malcolm - 1.5.7-2 +- added emfv signal fix patch and fix for defaults in switch statements on gcc3.4 + +* Wed Apr 21 2004 David Malcolm - 1.5.7-1 +- 1.5.7 + +* Wed Mar 10 2004 Jeremy Katz - 1.5.5-1 +- 1.5.5 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Wed Feb 18 2004 Jeremy Katz - 1.5.4-1 +- 1.5.4 + +* Tue Feb 17 2004 Jeremy Katz +- buildrequire e-d-s-devel instead of e-d-s (#114712) +- enable nntp support (#114802) + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Jan 27 2004 Jeremy Katz 1.5.3-1 +- 1.5.3 + +* Wed Jan 21 2004 Jeremy Katz 1.5.2-2 +- size_t/int mismatch compile fix for 64bit platforms + +* Wed Jan 14 2004 Jeremy Katz 1.5.2-0 +- 1.5.2 +- add patch to fix gconf warning with schema + +* Sun Jan 4 2004 Jeremy Katz 1.5.1-0 +- 1.5.1 +- temporarily disable redhatify patch +- use mozilla-nss for SSL +- fix schema names + +* Thu Nov 6 2003 Jeremy Katz 1.4.5-8 +- fall back to HELO for ESMTP (#108753) + +* Tue Oct 28 2003 Jeremy Katz 1.4.5-7 +- fix title on composer save dialog (#108159) + +* Mon Oct 27 2003 Jeremy Katz 1.4.5-6 +- Make imap command length shorter to avoid choking some imap servers + (notably cyrus-imap). +- Make wombat session managed so that we don't hit weird bonobo activation + things. This adds a dependency on $DISPLAY for wombat. (#106826) + +* Sun Oct 19 2003 Jeremy Katz 1.4.5-5 +- use AI_ADDRCONFIG to avoid returning IPv6 addresses on hosts without + IPv6 support +- add patch from upstream with reply-to-list shortcut (Ctrl-l) + +* Wed Oct 15 2003 Jeremy Katz 1.4.5-4 +- really, really remove duplicate menu entry (#103826) + +* Tue Oct 14 2003 Jeremy Katz 1.4.5-3 +- Pull in some patches from upstream CVS + * Avoid division by zero with POP (X#41610) + * Don't mangle headers (X#33545) + * Prefix IPV6 numeric hosts properly (X#46006, #105028) + * Use proper function for IPV6 reverse lookups (X#46006) + * Allow timezone offset to be up to 14 hours (X#49357) + +* Mon Oct 13 2003 Jeremy Katz +- add patch from upstream CVS to fix SMTP syntax problems (#106630) +- really remove duplicate menu entry (#103826) + +* Mon Oct 6 2003 Jeremy Katz +- make redhat-email.desktop symlink relative (#104391) + +* Wed Sep 24 2003 Jeremy Katz +- add ipv6 support per dwmw2's request + +* Tue Sep 23 2003 Jeremy Katz 1.4.5-2 +- 1.4.5 + +* Wed Sep 17 2003 Jeremy Katz +- move static libs into -devel (#104399) + +* Tue Sep 16 2003 Jeremy Katz 1.4.4-7 +- filter types are gtypes, not ints (#103934) + +* Wed Sep 10 2003 Jeremy Katz 1.4.4-6 +- fix from upstream (will be in 1.4.5) to fix menu merging in the + composer with new libbonobo + +* Fri Sep 5 2003 Jeremy Katz +- remove the desktop file in Office (#103826) + +* Tue Sep 2 2003 Jeremy Katz 1.4.4-5 +- patch from upstream to fix display of some mails in + different charsets (#102899) +- add requires on newer version of ORBit2 (#103386) +- add patch from upstream (extracted by George Karabin) to use gnome-vfs + mime icon lookup where available (#102553) + +* Fri Aug 22 2003 Jeremy Katz 1.4.4-4 +- include static libs (#102834) + +* Wed Aug 6 2003 Jeremy Katz 1.4.4-3 +- add a -devel subpackage (#99376) + +* Mon Aug 4 2003 Jeremy Katz 1.4.4-1 +- 1.4.4 + +* Wed Jul 30 2003 Jeremy Katz +- buildrequires fixup from Ville Skytta (#101325) + +* Thu Jul 24 2003 Jeremy Katz 1.4.3-6 +- include tagoh's patch for printing cjk contacts (committed upstream, #99374) + +* Tue Jul 22 2003 Nalin Dahyabhai 1.4.3-5 +- rebuild + +* Tue Jul 15 2003 Jeremy Katz 1.4.3-4 +- build on all arches again + +* Mon Jul 14 2003 Jeremy Katz 1.4.3-3 +- rebuild + +* Thu Jul 10 2003 Jeremy Katz 1.4.3-1 +- 1.4.3 + +* Thu Jun 19 2003 Jeremy Katz +- make gal version dep more explicit + +* Fri Jun 13 2003 Jeremy Katz +- fix desktop file (#97162) + +* Tue Jun 10 2003 Jeremy Katz 1.4.0-2 +- rebuild +- excludearch ppc64 for now + +* Mon Jun 9 2003 Jeremy Katz 1.4.0-1 +- 1.4.0 + +* Wed Jun 5 2003 Elliot Lee +- rebuilt + +* Thu Jun 5 2003 Jeremy Katz 1.3.92-2 +- rebuild + +* Wed Jun 4 2003 Jeremy Katz +- buildrequires gettext (#92276) + +* Sun May 25 2003 Jeremy Katz 1.3.92-1 +- 1.3.92 + +* Wed May 7 2003 Jeremy Katz 1.3.3-2 +- fix default for /schemas/apps/evolution/mail/display/mime_types + +* Tue May 6 2003 Jeremy Katz 1.3.3-1 +- 1.3.3 + +* Sun May 4 2003 Jeremy Katz 1.3.2-2 +- enable pilot support +- add redhatify patch back + +* Tue Apr 22 2003 Jeremy Katz +- add a /usr/bin/evolution symlink + +* Mon Apr 21 2003 Jeremy Katz +- fix gnome-spell version requirement + +* Wed Apr 16 2003 Jeremy Katz 1.3.2-1 +- add trivial fix for evolution-mail schema key (ximian #41419) + +* Tue Apr 15 2003 Jeremy Katz +- update to 1.3 +- don't build with pilot support for now +- don't redhat-ify the summary prefs for now + +* Sun Apr 6 2003 Jeremy Katz 1.2.4-2 +- fix krb5 libdir for lib64 systems + +* Sun Apr 6 2003 Jeremy Katz 1.2.4-1 +- update to 1.2.4 + +* Thu Apr 3 2003 Jeremy Katz 1.2.2-7 +- oops, fix a tyop + +* Thu Apr 3 2003 Jeremy Katz 1.2.2-6 +- add a few cleanups for 64bit cleanliness (#86347) + +* Sun Mar 30 2003 Jeremy Katz +- add some buildrequires (#87612) + +* Mon Mar 24 2003 Jeremy Katz 1.2.3-1 +- update to 1.2.3 + +* Wed Mar 19 2003 Jeremy Katz 1.2.2-5 +- security patches from upstream + - sanity check UUEncoding header before decoding (CAN-2003-0128) + - don't decode doubly UUEncoded content (CAN-2003-0129) + - don't use a bonobo component to display things without registered + handlers (CAN-2003-0130) + +* Mon Feb 24 2003 Elliot Lee 1.2.2-4 +- debuginfo rebuild + +* Thu Feb 20 2003 Jeremy Katz 1.2.2-3 +- memleak patch had some bits that weren't supposed to be there. update + to newer from upstream. +- fix directory checking in proxy patch + +* Thu Feb 20 2003 Jeremy Katz 1.2.2-2 +- add missing build dep (#84388) +- add patch from upstream for evolution-mail memleak +- add patch from upstream to use the gnome2 proxy settings by default + +* Fri Feb 7 2003 Jeremy Katz 1.2.2-1 +- 1.2.2 +- build on x86_64 + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Jan 7 2003 Nalin Dahyabhai 1.2.1-4 +- rebuild + +* Fri Jan 3 2003 Nalin Dahyabhai +- if building with OpenSSL, attempt to get cflags and ldflags from pkgconfig + +* Thu Jan 2 2003 Jeremy Katz 1.2.1-3 +- we don't want to use native POSIX threads for mutexes in db3, override them + +* Mon Dec 16 2002 Tim Powers 1.2.1-2 +- rebuild + +* Fri Dec 13 2002 Jeremy Katz 1.2.1-1 +- update to 1.2.1 + +* Thu Dec 12 2002 Jeremy Katz 1.2.0-6 +- require a newer soup, the old one Has Bugs (tm) +- excludearch x86_64; getting a R_X86_64_32S relocation in libical + although everything appears to be built with -fPIC correctly + +* Tue Dec 10 2002 Jeremy Katz 1.2.0-5 +- patch for multilib krb5 + +* Mon Dec 2 2002 Jeremy Katz 1.2.0-4 +- add upstream patch to handle LDAPv3 better +- add upstream patch to fix shell memory leaks +- add upstream patch to fix ldap scope selection +- build with openssl instead of mozilla-nss since it's available on + more platforms +- build on all arches + +* Fri Nov 22 2002 Jeremy Katz +- require bonobo-conf, not -devel (#78398) + +* Wed Nov 20 2002 Florian La Roche 1.2.0-3 +- disable pilot support for mainframe + +* Mon Nov 18 2002 Jeremy Katz 1.2.0-2 +- macro-ify the mozilla version to make it easier to build against + newer mozillas with headers in new locations +- buildrequire pilot-link-devel (#78077) +- drop uneeded ldapv3 patch (toshok says 1.2 already handles this) +- drop unneeded patch for ordering of the libdb checks +- add fejj's patch to always subscribe to the inbox from evolution-patches + +* Tue Nov 12 2002 Jeremy Katz 1.2.0-1 +- 1.2.0 + +* Sat Nov 2 2002 Jeremy Katz 1.1.90-2 +- reenable pilot support +- redhatify + +* Fri Nov 1 2002 Jeremy Katz 1.1.90-1 +- update to 1.1.90 + +* Thu Oct 31 2002 Jeremy Katz +- include mozilla epochs in requires (#74577) +- add build requires on newer oaf (#76801) + +* Thu Oct 24 2002 Jeremy Katz 1.1.2-1 +- update to 1.1.2 +- remove unpackaged files from the buildrooot +- disable pilot support for now + +* Tue Sep 3 2002 Jeremy Katz 1.0.8-10 +- add freetype-devel to build requires (#73319) + +* Mon Sep 2 2002 Owen Taylor +- Fix a problem where evolution-mail right click items corrupted the stack + (#67992) + +* Thu Aug 29 2002 Jeremy Katz 1.0.8-9 +- don't install two desktop files (#72871) + +* Wed Aug 28 2002 Preston Brown 1.0.8-8 +- absolute symlink .desktop file (#72913) + +* Thu Aug 22 2002 han Ngo 1.0.8-7 +- rebuild against new pilot-link + +* Sat Aug 10 2002 Florian La Roche +- bzip2 source + +* Tue Aug 6 2002 Than Ngo 1.0.8-5 +- rebuild against new pilot-link-0.11.2 + +* Thu Jul 18 2002 Jeremy Katz 1.0.8-4 +- rebuild against new gnome-pilot + +* Tue Jul 9 2002 Jeremy Katz 1.0.8-3 +- remove static and libtool archives for importers and camel-providers (#68222) +- do desktop-file-install magic +- remove dead sites from summary list (#64522) +- support openldap protocol version 3 based off of Nalin's autofs changes + +* Mon Jul 8 2002 Jeremy Katz 1.0.8-2 +- fix openldap-devel buildrequire + +* Mon Jul 1 2002 Jeremy Katz 1.0.8-1 +- 1.0.8 + +* Thu Jun 27 2002 Jeremy Katz 1.0.7-2 +- include patch to omf files from otaylor@redhat.com to fix + scrollkeeper validation errors + +* Sun Jun 23 2002 Jeremy Katz 1.0.7-1 +- update to 1.0.7 +- excludearch alpha while mozilla isn't being built there + +* Sun May 26 2002 Tim Powers 1.0.5-2 +- automated rebuild + +* Mon May 13 2002 Jeremy Katz 1.0.5-1 +- update to 1.0.5 + +* Fri May 3 2002 Jeremy Katz 1.0.3-6 +- add patch to fix spool unread counts (#64198) +- build with the fix for the crasher mail sent to + evolution-list (ximian #24140) + +* Mon Apr 15 2002 Jeremy Katz 1.0.3-4 +- include fejj(at)ximian.com's patch to fix the EINPROGRESS error with ssl + since it's been committed to the branch and fixes the problem for me +- include patch from tagoh(at)redhat.com to change the default charset + for Japanese to ISO-2022-JP (#63214) + +* Wed Apr 10 2002 Jeremy Katz 1.0.3-3 +- minor tweaks to the redhatify patch +- make accepting appointments sent to mailing lists work +- use the RFC specified LDAP attribs for freebusy and calendarURI + in addressbook +- fix a crash in the startup wizard + +* Sun Mar 31 2002 Jeremy Katz 1.0.3-2 +- move desktop file to /etc/X11/applnk (#62399) + +* Sun Mar 24 2002 Jeremy Katz 1.0.3-1 +- update to evolution 1.0.3 +- change summary view to show a recent errata list by default + +* Thu Mar 14 2002 Jeremy Katz +- put correct path to nspr includes on configure command line + +* Mon Mar 11 2002 Jeremy Katz 1.0.2-3 +- mozilla 0.9.9 has nspr and nss subpackages, hooray! rip out the static + libnss linkage and just link against what is provided dynamically +- kill the -devel subpackage since it's of questionable use +- explicitly require mozilla-nss and mozilla-nspr packages to make it easier + to resolve the requirements + +* Thu Feb 21 2002 Jeremy Katz 1.0.2-2 +- rebuild in new environment +- temporarily exclude on ia64 again + +* Thu Jan 31 2002 Jeremy Katz 1.0.2-1 +- update to 1.0.2 + +* Mon Jan 28 2002 Jeremy Katz 1.0.1-4 +- build on ia64 now that mozilla exists for ia64 + +* Sun Jan 27 2002 Jeremy Katz 1.0.1-3 +- rebuild in new environment +- add pilot support + +* Sun Jan 13 2002 Jeremy Katz 1.0.1-2 +- rebuild without mozilla-psm in the buildroot so libnss is linked + statically as intended + +* Sat Jan 12 2002 Jeremy Katz 1.0.1-1 +- update to 1.0.1 +- patch for autoconf 2.52 accepted upstream +- include man page +- use --with-sub-version=" (%%{version}-%%{release})" + +* Tue Dec 18 2001 Jeremy Katz 1.0-2 +- really disable news +- add patch from Jens Petersen to hopefully get + builds working with autoconf 2.52 +- conditionalize static libnss stuff so that it can go away when we + have a mozilla with shared libnss + +* Thu Dec 6 2001 Jeremy Katz 1.0-1.7.2 +- add patches off of branch for: + * do not show up as Preview Release in version string + * have next/previous work with multiple selected messages +- build without pilot support + +* Mon Dec 3 2001 Jeremy Katz 1.0-1 +- and bump to 1.0 + +* Sun Dec 2 2001 Jeremy Katz +- let's build with an included copy of libnss now since OpenSSL is support + is disabled on the 1.0 branch +- build with --enable-dot-locking=no +- excludearch ia64 again now that we need libnspr + +* Mon Nov 26 2001 Jeremy Katz +- build with gnome-pilot and krb5 support +- conditionalize ldap, pilot and krb5 support +- clean up buildrequires some + +* Sat Nov 17 2001 Jeremy Katz +- we can build on ia64 since we're using openssl instead of nspr +- disable non-functional nntp support +- 0.99.2 (rc2) + +* Fri Nov 9 2001 Jeremy Katz +- add explicit requires on current bonobo, oaf, and GConf to help people + help themselves +- s/Copyright/License/ + +* Thu Nov 8 2001 Jeremy Katz +- add a patch to revert changes to camel-tcp-stream-openssl; appears to + fix the SSL hangs + +* Wed Nov 7 2001 Jeremy Katz +- fix filelist to include libical zoneinfo +- add devel subpackage with includes and static libs + +* Mon Nov 5 2001 Jeremy Katz +- updated to 0.99.0 aka 1.0 RC1 + +* Tue Oct 23 2001 Havoc Pennington +- 0.16 snagged from Ximian GNOME + +* Fri Oct 5 2001 Havoc Pennington +- initial build based on David Sainty's specfile + +* Thu Oct 04 2001 David Sainty +- Updated to 0.15.99, 20011004 from cvs. + +* Wed Sep 05 2001 David Sainty +- Updated to 0.13.99, 20010905 from cvs. + +* Mon Sep 03 2001 David Sainty +- Updated to 0.13.99, 20010903 from cvs. +- Fixed Requires + BuildRequires + +* Mon Aug 06 2001 David Sainty +- Updated to 0.12.99, 20010806 from cvs. + +* Mon Aug 06 2001 David Sainty +- Relocated libical* from /usr/lib due to kdepim, -2 + +* Mon Aug 06 2001 David Sainty +- First spec file for evolution. + diff --git a/flatpak-evolution-fix-service-names.sh b/flatpak-evolution-fix-service-names.sh deleted file mode 100755 index 9454543..0000000 --- a/flatpak-evolution-fix-service-names.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# see https://gitlab.gnome.org/GNOME/glib/issues/1737 -# previous versions used milliseconds instead of seconds as the timeout argument", -(`pkg-config --atleast-version 2.60.1 gio-2.0` || `pkg-config --atleast-version 2.61.0 gio-2.0`) && TIMEOUTMULT= || TIMEOUTMULT=000 - -sed -e "s|\@SOURCES_SERVICE\@|$(pkg-config --variable=sourcesdbusservicename evolution-data-server-1.2)|" \ - -e "s|\@ADDRESSBOOK_SERVICE\@|$(pkg-config --variable=addressbookdbusservicename evolution-data-server-1.2)|" \ - -e "s|\@CALENDAR_SERVICE\@|$(pkg-config --variable=calendardbusservicename evolution-data-server-1.2)|" \ - -e "s|\@TIMEOUTMULT\@|${TIMEOUTMULT}|" diff --git a/flatpak-evolution-wrapper.sh.in b/flatpak-evolution-wrapper.sh.in deleted file mode 100644 index 6a311fc..0000000 --- a/flatpak-evolution-wrapper.sh.in +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -if [ "$1" = "--quit" -o "$1" = "--force-shutdown" ]; then - /app/bin/evolution.bin "$@" -else - export BOGOFILTER_DIR="${XDG_DATA_HOME}/bogofilter/" - export GIO_USE_NETWORK_MONITOR=base - gsettings reset org.gnome.evolution-data-server network-monitor-gio-name - - LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @SOURCES_SERVICE@ | wc -l) - if [ "${LINES}" = "0" ]; then - /app/libexec/evolution-source-registry & - gdbus wait --session --timeout=1@TIMEOUTMULT@ @SOURCES_SERVICE@ - fi - - LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @ADDRESSBOOK_SERVICE@ | wc -l) - if [ "${LINES}" = "0" ]; then - /app/libexec/evolution-addressbook-factory -r & - gdbus wait --session --timeout=1@TIMEOUTMULT@ @ADDRESSBOOK_SERVICE@ - fi - - LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @CALENDAR_SERVICE@ | wc -l) - if [ "${LINES}" = "0" ]; then - /app/libexec/evolution-calendar-factory -r & - gdbus wait --session --timeout=1@TIMEOUTMULT@ @CALENDAR_SERVICE@ - fi - - /app/bin/evolution.bin "$@" -fi diff --git a/rpminspect.yaml b/rpminspect.yaml deleted file mode 100644 index 1ba6977..0000000 --- a/rpminspect.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -runpath: - allowed_paths: - - /usr/lib/evolution - - /usr/lib64/evolution diff --git a/sources b/sources index b11ec23..f79c55e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (evolution-3.59.1.tar.xz) = 26d6d4dfcdbc3d89f88d9e24096c7ff910d221119def75d7f80a397f682be96860726832c7c62b46769ce9cfcc15e5844cbcc016facc9b21b4eb9bbb2c17360d +09cc60b037849b3c9b34961eb7da217f evolution-2.10.3.tar.bz2