diff --git a/.gitignore b/.gitignore index 56bb02d..ab70577 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/evolution-*.tar.xz +evolution-2.12.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-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..0e8c2da --- /dev/null +++ b/evolution-2.10.0-e-source-combo-box.patch @@ -0,0 +1,1158 @@ +diff -up evolution-2.12.0/widgets/misc/e-pilot-settings.c.e-source-combo-box evolution-2.12.0/widgets/misc/e-pilot-settings.c +--- evolution-2.12.0/widgets/misc/e-pilot-settings.c.e-source-combo-box 2007-09-16 15:33:23.000000000 -0400 ++++ evolution-2.12.0/widgets/misc/e-pilot-settings.c 2007-09-17 14:31:05.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.12.0/plugins/itip-formatter/itip-formatter.c.e-source-combo-box evolution-2.12.0/plugins/itip-formatter/itip-formatter.c +--- evolution-2.12.0/plugins/itip-formatter/itip-formatter.c.e-source-combo-box 2007-09-16 15:16:41.000000000 -0400 ++++ evolution-2.12.0/plugins/itip-formatter/itip-formatter.c 2007-09-17 14:31:05.000000000 -0400 +@@ -40,7 +40,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +diff -up evolution-2.12.0/plugins/itip-formatter/itip-view.c.e-source-combo-box evolution-2.12.0/plugins/itip-formatter/itip-view.c +--- evolution-2.12.0/plugins/itip-formatter/itip-view.c.e-source-combo-box 2007-09-16 15:16:41.000000000 -0400 ++++ evolution-2.12.0/plugins/itip-formatter/itip-view.c 2007-09-17 14:31:05.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -105,8 +105,8 @@ struct _ItipViewPrivate { + char *description; + + GtkWidget *selector_box; +- GtkWidget *esom; +- GtkWidget *esom_header; ++ GtkWidget *escb; ++ GtkWidget *escb_header; + ESourceList *source_list; + + GtkWidget *rsvp_box; +@@ -1788,10 +1788,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); + } + +@@ -1808,40 +1810,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 * +@@ -1867,10 +1871,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 * +@@ -1883,10 +1888,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.12.0/plugins/bbdb/gaimbuddies.c.e-source-combo-box evolution-2.12.0/plugins/bbdb/gaimbuddies.c +--- evolution-2.12.0/plugins/bbdb/gaimbuddies.c.e-source-combo-box 2007-09-16 15:16:13.000000000 -0400 ++++ evolution-2.12.0/plugins/bbdb/gaimbuddies.c 2007-09-17 14:31:05.000000000 -0400 +@@ -44,7 +44,7 @@ + #include + + #include +-#include ++#include + + #include + #include +diff -up evolution-2.12.0/plugins/bbdb/bbdb.c.e-source-combo-box evolution-2.12.0/plugins/bbdb/bbdb.c +--- evolution-2.12.0/plugins/bbdb/bbdb.c.e-source-combo-box 2007-09-16 15:16:13.000000000 -0400 ++++ evolution-2.12.0/plugins/bbdb/bbdb.c 2007-09-17 14:31:05.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) + { +@@ -345,8 +382,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); ++ } + } + } + +@@ -364,7 +416,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); + } + } +@@ -376,48 +429,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 * +@@ -483,7 +565,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; +@@ -519,7 +601,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.12.0/addressbook/gui/contact-list-editor/contact-list-editor.glade.e-source-combo-box evolution-2.12.0/addressbook/gui/contact-list-editor/contact-list-editor.glade +--- evolution-2.12.0/addressbook/gui/contact-list-editor/contact-list-editor.glade.e-source-combo-box 2007-09-16 14:53:41.000000000 -0400 ++++ evolution-2.12.0/addressbook/gui/contact-list-editor/contact-list-editor.glade 2007-09-17 14:31:05.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.12.0/addressbook/gui/contact-list-editor/e-contact-list-editor.c.e-source-combo-box evolution-2.12.0/addressbook/gui/contact-list-editor/e-contact-list-editor.c +--- evolution-2.12.0/addressbook/gui/contact-list-editor/e-contact-list-editor.c.e-source-combo-box 2007-09-16 14:53:41.000000000 -0400 ++++ evolution-2.12.0/addressbook/gui/contact-list-editor/e-contact-list-editor.c 2007-09-17 14:31:05.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.12.0/addressbook/gui/contact-editor/contact-editor.glade.e-source-combo-box evolution-2.12.0/addressbook/gui/contact-editor/contact-editor.glade +--- evolution-2.12.0/addressbook/gui/contact-editor/contact-editor.glade.e-source-combo-box 2007-09-16 14:52:39.000000000 -0400 ++++ evolution-2.12.0/addressbook/gui/contact-editor/contact-editor.glade 2007-09-17 14:31:05.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.12.0/addressbook/gui/contact-editor/e-contact-editor.c.e-source-combo-box evolution-2.12.0/addressbook/gui/contact-editor/e-contact-editor.c +--- evolution-2.12.0/addressbook/gui/contact-editor/e-contact-editor.c.e-source-combo-box 2007-09-16 14:52:39.000000000 -0400 ++++ evolution-2.12.0/addressbook/gui/contact-editor/e-contact-editor.c 2007-09-17 14:31:05.000000000 -0400 +@@ -46,7 +46,7 @@ + #include + + #include +-#include ++#include + + #include + +@@ -589,15 +589,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 +@@ -2527,13 +2528,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); +@@ -2557,8 +2560,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)) +@@ -3383,8 +3390,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"); +@@ -3835,26 +3842,26 @@ 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); + g_object_unref (gconf_client); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } +diff -up evolution-2.12.0/addressbook/gui/contact-editor/e-contact-quick-add.c.e-source-combo-box evolution-2.12.0/addressbook/gui/contact-editor/e-contact-quick-add.c +--- evolution-2.12.0/addressbook/gui/contact-editor/e-contact-quick-add.c.e-source-combo-box 2007-09-16 14:52:39.000000000 -0400 ++++ evolution-2.12.0/addressbook/gui/contact-editor/e-contact-quick-add.c 2007-09-17 14:31:05.000000000 -0400 +@@ -37,7 +37,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "e-contact-editor.h" +@@ -269,8 +269,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; +@@ -319,16 +323,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"); + g_object_unref (gconf_client); +- 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.12.0/calendar/gui/dialogs/memo-page.glade.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/memo-page.glade +--- evolution-2.12.0/calendar/gui/dialogs/memo-page.glade.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/memo-page.glade 2007-09-17 14:31:05.000000000 -0400 +@@ -194,7 +194,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.12.0/calendar/gui/dialogs/event-page.glade.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/event-page.glade +--- evolution-2.12.0/calendar/gui/dialogs/event-page.glade.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/event-page.glade 2007-09-17 14:31:05.000000000 -0400 +@@ -827,7 +827,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.12.0/calendar/gui/dialogs/task-page.glade.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/task-page.glade +--- evolution-2.12.0/calendar/gui/dialogs/task-page.glade.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/task-page.glade 2007-09-17 14:31:05.000000000 -0400 +@@ -671,7 +671,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.12.0/calendar/gui/dialogs/memo-page.c.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/memo-page.c +--- evolution-2.12.0/calendar/gui/dialogs/memo-page.c.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/memo-page.c 2007-09-17 14:31:44.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +@@ -352,7 +352,6 @@ memo_page_fill_widgets (CompEditorPage * + GSList *l; + const char *categories; + gchar *backend_addr = NULL; +- ESource *source; + + mpage = MEMO_PAGE (page); + priv = mpage->priv; +@@ -451,8 +450,9 @@ memo_page_fill_widgets (CompEditorPage * + g_free (backend_addr); + + /* 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; + +@@ -893,13 +893,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; +@@ -911,8 +910,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, +@@ -1055,7 +1055,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" +@@ -1271,22 +1271,23 @@ 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); + g_object_unref (gconf_client); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } +diff -up evolution-2.12.0/calendar/gui/dialogs/event-page.c.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/event-page.c +--- evolution-2.12.0/calendar/gui/dialogs/event-page.c.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/event-page.c 2007-09-17 14:31:05.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" +@@ -1000,7 +1000,6 @@ event_page_fill_widgets (CompEditorPage + const char *location, *uid = NULL; + const char *categories; + gchar *backend_addr = NULL; +- ESource *source; + GSList *l; + gboolean validated = TRUE; + +@@ -1215,8 +1214,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) +@@ -2662,7 +2662,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; + } +@@ -2691,13 +2692,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; +@@ -2716,8 +2716,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, +@@ -2980,7 +2981,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 (); +@@ -3306,24 +3307,25 @@ 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); + g_object_unref (gconf_client); + +- gtk_widget_show (menu); +- return menu; ++ gtk_widget_show (combo_box); ++ return combo_box; + } + + GtkWidget *make_status_icons (void); +diff -up evolution-2.12.0/calendar/gui/dialogs/task-page.c.e-source-combo-box evolution-2.12.0/calendar/gui/dialogs/task-page.c +--- evolution-2.12.0/calendar/gui/dialogs/task-page.c.e-source-combo-box 2007-09-16 15:33:57.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/dialogs/task-page.c 2007-09-17 14:31:58.000000000 -0400 +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include "common/authentication.h" +@@ -533,7 +533,6 @@ task_page_fill_widgets (CompEditorPage * + const char *categories, *uid; + icaltimezone *zone, *default_zone; + gchar *backend_addr = NULL; +- ESource *source; + + tpage = TASK_PAGE (page); + priv = tpage->priv; +@@ -677,8 +676,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)); + + e_cal_get_cal_address (COMP_EDITOR_PAGE (tpage)->client, &backend_addr, NULL); + set_subscriber_info_string (tpage, backend_addr); +@@ -1688,13 +1688,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; +@@ -1713,8 +1712,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, +@@ -1726,7 +1726,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 +@@ -1778,7 +1778,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"); + } + +@@ -1836,7 +1837,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" +@@ -2081,22 +2082,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.12.0/calendar/gui/e-itip-control.c.e-source-combo-box evolution-2.12.0/calendar/gui/e-itip-control.c +--- evolution-2.12.0/calendar/gui/e-itip-control.c.e-source-combo-box 2007-09-16 15:34:45.000000000 -0400 ++++ evolution-2.12.0/calendar/gui/e-itip-control.c 2007-09-17 14:31:05.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.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.11.92-icon-names.patch b/evolution-2.11.92-icon-names.patch new file mode 100644 index 0000000..5e82648 --- /dev/null +++ b/evolution-2.11.92-icon-names.patch @@ -0,0 +1,1788 @@ +diff -up evolution-2.12.1/mail/em-folder-browser.c.icon-names evolution-2.12.1/mail/em-folder-browser.c +--- evolution-2.12.1/mail/em-folder-browser.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/mail/em-folder-browser.c 2007-10-15 22:34:23.000000000 -0400 +@@ -206,7 +206,7 @@ enum { + /* Options for View */ + static EMFBSearchBarItem emfb_view_items[] = { + {{ N_("All Messages"), VIEW_ALL_MESSAGES, 0 }, NULL}, +- {{ N_("Unread Messages"), VIEW_UNREAD_MESSAGES, 0 }, "stock_mail-unread"}, ++ {{ N_("Unread Messages"), VIEW_UNREAD_MESSAGES, 0 }, "mail-unread"}, + {{ NULL, 0, 0 }, NULL}, + {{ N_("No Label"),VIEW_NO_LABEL, 0 }, NULL}, + {{ NULL, -1, 0 }, NULL} +@@ -215,12 +215,12 @@ static EMFBSearchBarItem emfb_view_items + /* TODO: Following options should be customizable */ + static EMFBSearchBarItem temp_view_items[] = { + {{ NULL, 0, 0 }, NULL}, +- {{ N_("Read Messages"), VIEW_READ_MESSAGES, 0 }, "stock_mail-open"}, ++ {{ N_("Read Messages"), VIEW_READ_MESSAGES, 0 }, "mail-read"}, + {{ N_("Recent Messages"), VIEW_RECENT_MESSAGES, 0 }, NULL}, + {{ N_("Last 5 Days' Messages"), VIEW_LAST_FIVE_DAYS, 0 }, NULL}, + {{ N_("Messages with Attachments"), VIEW_WITH_ATTACHMENTS, 0 }, "mail-attachment"}, + {{ N_("Important Messages"), VIEW_MESSAGES_MARKED_AS_IMPORTANT, 0}, "emblem-important"}, +- {{ N_("Messages Not Junk"), VIEW_NOT_JUNK, 0 }, "stock_not-spam"}, ++ {{ N_("Messages Not Junk"), VIEW_NOT_JUNK, 0 }, "mail-mark-notjunk"}, + /* { NULL, 0, NULL }, */ + /* { N_("Customize"), NOT_IMPLEMENTED, NULL }, */ + {{ NULL, -1, 0 }, NULL} +@@ -1603,7 +1603,7 @@ static BonoboUIVerb emfb_verbs[] = { + }; + + static EPixmap emfb_pixmaps[] = { +- E_PIXMAP ("/commands/ChangeFolderProperties", "stock_folder-properties", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ChangeFolderProperties", "document-properties", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/FolderCopy", "stock_folder-copy", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/FolderMove", "stock_folder-move", E_ICON_SIZE_MENU), + +diff -up evolution-2.12.1/mail/em-folder-tree.c.icon-names evolution-2.12.1/mail/em-folder-tree.c +--- evolution-2.12.1/mail/em-folder-tree.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/mail/em-folder-tree.c 2007-10-15 22:34:23.000000000 -0400 +@@ -288,11 +288,11 @@ render_pixbuf (GtkTreeViewColumn *column + guint32 flags; + + if (!initialised) { +- folder_icons[FOLDER_ICON_NORMAL] = e_icon_factory_get_icon ("stock_folder", E_ICON_SIZE_MENU); ++ folder_icons[FOLDER_ICON_NORMAL] = e_icon_factory_get_icon ("folder", E_ICON_SIZE_MENU); + folder_icons[FOLDER_ICON_INBOX] = e_icon_factory_get_icon ("stock_inbox", E_ICON_SIZE_MENU); + folder_icons[FOLDER_ICON_OUTBOX] = e_icon_factory_get_icon ("stock_outbox", E_ICON_SIZE_MENU); +- folder_icons[FOLDER_ICON_TRASH] = e_icon_factory_get_icon ("gnome-fs-trash-empty", E_ICON_SIZE_MENU); +- folder_icons[FOLDER_ICON_JUNK] = e_icon_factory_get_icon ("stock_spam", E_ICON_SIZE_MENU); ++ folder_icons[FOLDER_ICON_TRASH] = e_icon_factory_get_icon ("user-trash", E_ICON_SIZE_MENU); ++ folder_icons[FOLDER_ICON_JUNK] = e_icon_factory_get_icon ("mail-mark-junk", E_ICON_SIZE_MENU); + folder_icons[FOLDER_ICON_SHARED_TO_ME] = e_icon_factory_get_icon ("stock_shared-to-me", E_ICON_SIZE_MENU); + folder_icons[FOLDER_ICON_SHARED_BY_ME] = e_icon_factory_get_icon ("stock_shared-by-me", E_ICON_SIZE_MENU); + folder_icons[FOLDER_ICON_SENT] = e_icon_factory_get_icon ("stock_sent-mail", E_ICON_SIZE_MENU); +@@ -1002,7 +1002,7 @@ static EPopupItem emft_drop_popup_menu[] + { E_POPUP_ITEM, "00.emc.02", N_("_Copy"), emft_drop_popup_copy, NULL, "stock_folder-copy", 2 }, + { E_POPUP_ITEM, "00.emc.03", N_("_Move"), emft_drop_popup_move, NULL, "stock_folder-move", 2 }, + { E_POPUP_BAR, "10.emc" }, +- { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), emft_drop_popup_cancel, NULL, "stock_cancel", 0 }, ++ { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), emft_drop_popup_cancel, NULL, "dialog-cancel", 0 }, + }; + + static void +@@ -2114,16 +2114,16 @@ static EPopupItem emft_popup_items[] = { + + { E_POPUP_BAR, "20.emc" }, + /* FIXME: need to disable for nochildren folders */ +- { E_POPUP_ITEM, "20.emc.00", N_("_New Folder..."), emft_popup_new_folder, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS }, ++ { E_POPUP_ITEM, "20.emc.00", N_("_New Folder..."), emft_popup_new_folder, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS }, + /* FIXME: need to disable for undeletable folders */ +- { E_POPUP_ITEM, "20.emc.01", N_("_Delete"), emft_popup_delete_folder, NULL, "stock_delete", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE }, ++ { E_POPUP_ITEM, "20.emc.01", N_("_Delete"), emft_popup_delete_folder, NULL, "edit-delete", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE }, + { E_POPUP_ITEM, "20.emc.02", N_("_Rename..."), emft_popup_rename_folder, NULL, NULL, 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE }, +- { E_POPUP_ITEM, "20.emc.03", N_("Re_fresh"), emft_popup_refresh_folder, NULL, "stock_refresh", EM_POPUP_FOLDER_NONSTATIC, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT}, +- { E_POPUP_ITEM, "20.emc.04", N_("Fl_ush Outbox"), emft_popup_flush_outbox, NULL, "stock_mail-send", EM_POPUP_FOLDER_OUTBOX, 0 }, ++ { E_POPUP_ITEM, "20.emc.03", N_("Re_fresh"), emft_popup_refresh_folder, NULL, "view-refresh", EM_POPUP_FOLDER_NONSTATIC, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT}, ++ { E_POPUP_ITEM, "20.emc.04", N_("Fl_ush Outbox"), emft_popup_flush_outbox, NULL, "mail-send", EM_POPUP_FOLDER_OUTBOX, 0 }, + + + { E_POPUP_BAR, "80.emc" }, +- { E_POPUP_ITEM, "80.emc.00", N_("_Properties"), emft_popup_properties, NULL, "stock_folder-properties", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT } ++ { E_POPUP_ITEM, "80.emc.00", N_("_Properties"), emft_popup_properties, NULL, "document-properties", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT } + }; + static EPopupItem trash_popup_item = {E_POPUP_ITEM, "20.emc.03", N_("_Empty Trash"), emft_popup_empty_trash,NULL,NULL, 1, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT}; + +diff -up evolution-2.12.1/mail/message-list.c.icon-names evolution-2.12.1/mail/message-list.c +--- evolution-2.12.1/mail/message-list.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/mail/message-list.c 2007-10-15 22:34:23.000000000 -0400 +@@ -217,9 +217,9 @@ static struct { + char *icon_name; + GdkPixbuf *pixbuf; + } states_pixmaps[] = { +- { "stock_mail-unread", NULL }, +- { "stock_mail-open", NULL }, +- { "stock_mail-replied", NULL }, ++ { "mail-unread", NULL }, ++ { "mail-read", NULL }, ++ { "mail-replied", NULL }, + { "stock_mail-unread-multiple", NULL }, + { "stock_mail-open-multiple", NULL }, + { NULL, NULL }, +diff -up evolution-2.12.1/mail/mail-mt.c.icon-names evolution-2.12.1/mail/mail-mt.c +--- evolution-2.12.1/mail/mail-mt.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/mail/mail-mt.c 2007-10-15 22:34:23.000000000 -0400 +@@ -964,7 +964,7 @@ op_status_exec (struct _op_status_msg *m + data->activity_state = 1; + + if (progress_icon == NULL) +- progress_icon = e_icon_factory_get_icon ("stock_mail-unread", E_ICON_SIZE_MENU); ++ progress_icon = e_icon_factory_get_icon ("mail-unread", E_ICON_SIZE_MENU); + + MAIL_MT_UNLOCK (mail_msg_lock); + if (msg->info->desc) +diff -up evolution-2.12.1/mail/em-folder-view.c.icon-names evolution-2.12.1/mail/em-folder-view.c +--- evolution-2.12.1/mail/em-folder-view.c.icon-names 2007-10-15 22:34:21.000000000 -0400 ++++ evolution-2.12.1/mail/em-folder-view.c 2007-10-15 22:36:38.000000000 -0400 +@@ -1216,29 +1216,29 @@ EMFV_POPUP_AUTO_TYPE(filter_type_current + /* TODO: Move some of these to be 'standard' menu's */ + + static EPopupItem emfv_popup_items[] = { +- { E_POPUP_ITEM, "00.emfv.00", N_("_Copy"), emfv_popup_copy_text, NULL, "stock_copy", EM_FOLDER_VIEW_SELECT_DISPLAY|EM_FOLDER_VIEW_SELECT_SELECTION }, ++ { E_POPUP_ITEM, "00.emfv.00", N_("_Copy"), emfv_popup_copy_text, NULL, "edit-copy", EM_FOLDER_VIEW_SELECT_DISPLAY|EM_FOLDER_VIEW_SELECT_SELECTION }, + + { E_POPUP_BAR, "10.emfv", NULL, NULL, NULL, NULL }, + +- { E_POPUP_ITEM, "10.emfv.00", N_("_Reply to Sender"), emfv_popup_reply_sender, NULL, "stock_mail-reply", EM_POPUP_SELECT_ONE }, +- { E_POPUP_ITEM, "10.emfv.01", N_("Reply to _All"), emfv_popup_reply_all, NULL, "stock_mail-reply-to-all", EM_POPUP_SELECT_ONE }, +- { E_POPUP_ITEM, "10.emfv.02", N_("_Forward"), emfv_popup_forward, NULL, "stock_mail-forward", EM_POPUP_SELECT_MANY }, ++ { E_POPUP_ITEM, "10.emfv.00", N_("_Reply to Sender"), emfv_popup_reply_sender, NULL, "mail-reply-sender", EM_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "10.emfv.01", N_("Reply to _All"), emfv_popup_reply_all, NULL, "mail-reply-all", EM_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "10.emfv.02", N_("_Forward"), emfv_popup_forward, NULL, "mail-forward", EM_POPUP_SELECT_MANY }, + + { E_POPUP_BAR, "20.emfv", NULL, NULL, NULL, NULL }, + /* EM_POPUP_EDIT was used here. This is changed to EM_POPUP_SELECT_ONE as Edit-as-new-messaeg need not be restricted to Sent-Items folder alone */ + { E_POPUP_ITEM, "20.emfv.00", N_("_Edit as New Message..."), emfv_popup_edit, NULL, NULL, EM_POPUP_SELECT_ONE }, +- { E_POPUP_ITEM, "20.emfv.01", N_("_Save As..."), emfv_popup_saveas, NULL, "stock_save-as", EM_POPUP_SELECT_MANY }, +- { E_POPUP_ITEM, "20.emfv.02", N_("_Print..."), emfv_popup_print, NULL, "stock_print", EM_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "20.emfv.01", N_("_Save As..."), emfv_popup_saveas, NULL, "document-save-as", EM_POPUP_SELECT_MANY }, ++ { E_POPUP_ITEM, "20.emfv.02", N_("_Print..."), emfv_popup_print, NULL, "document-print", EM_POPUP_SELECT_ONE }, + + { E_POPUP_BAR, "40.emfv", NULL, NULL, NULL, NULL }, +- { E_POPUP_ITEM, "40.emfv.00", N_("_Delete"), emfv_popup_delete, NULL, "stock_delete", EM_POPUP_SELECT_DELETE|EM_FOLDER_VIEW_SELECT_LISTONLY }, ++ { E_POPUP_ITEM, "40.emfv.00", N_("_Delete"), emfv_popup_delete, NULL, "edit-delete", EM_POPUP_SELECT_DELETE|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "40.emfv.01", N_("U_ndelete"), emfv_popup_undelete, NULL, NULL, EM_POPUP_SELECT_UNDELETE|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "40.emfv.02", N_("_Move to Folder..."), emfv_popup_move, NULL, "stock_mail-move", EM_POPUP_SELECT_MANY|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "40.emfv.03", N_("_Copy to Folder..."), emfv_popup_copy, NULL, "stock_mail-copy", EM_POPUP_SELECT_MANY|EM_FOLDER_VIEW_SELECT_LISTONLY }, + + { E_POPUP_BAR, "50.emfv", NULL, NULL, NULL, NULL }, +- { E_POPUP_ITEM, "50.emfv.00", N_("Mar_k as Read"), emfv_popup_mark_read, NULL, "stock_mail-open", EM_POPUP_SELECT_MARK_READ|EM_FOLDER_VIEW_SELECT_LISTONLY }, +- { E_POPUP_ITEM, "50.emfv.01", N_("Mark as _Unread"), emfv_popup_mark_unread, NULL, "stock_mail-unread", EM_POPUP_SELECT_MARK_UNREAD|EM_FOLDER_VIEW_SELECT_LISTONLY }, ++ { E_POPUP_ITEM, "50.emfv.00", N_("Mar_k as Read"), emfv_popup_mark_read, NULL, "mail-read", EM_POPUP_SELECT_MARK_READ|EM_FOLDER_VIEW_SELECT_LISTONLY }, ++ { E_POPUP_ITEM, "50.emfv.01", N_("Mark as _Unread"), emfv_popup_mark_unread, NULL, "mail-unread", EM_POPUP_SELECT_MARK_UNREAD|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "50.emfv.02", N_("Mark as _Important"), emfv_popup_mark_important, NULL, "emblem-important", EM_POPUP_SELECT_MARK_IMPORTANT|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "50.emfv.03", N_("Mark as Un_important"), emfv_popup_mark_unimportant, NULL, NULL, EM_POPUP_SELECT_MARK_UNIMPORTANT|EM_FOLDER_VIEW_SELECT_LISTONLY }, + { E_POPUP_ITEM, "50.emfv.04", N_("Mark as _Junk"), emfv_popup_mark_junk, NULL, "mail-mark-junk", EM_POPUP_SELECT_MANY|EM_FOLDER_VIEW_SELECT_LISTONLY|EM_POPUP_SELECT_JUNK }, +@@ -1950,43 +1950,47 @@ static BonoboUIVerb emfv_message_verbs[] + BONOBO_UI_VERB_END + }; + static EPixmap emfv_message_pixmaps[] = { +- E_PIXMAP ("/commands/EditCut", "stock_cut", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/EditCopy", "stock_copy", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/EditPaste", "stock_paste", E_ICON_SIZE_MENU), +- +- E_PIXMAP ("/commands/PrintMessage", "stock_print", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/PrintPreviewMessage", "stock_print-preview", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageDelete", "gnome-fs-trash-empty", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageCopy", "stock_mail-copy", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageMove", "stock_mail-move", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageReplyAll", "stock_mail-reply-to-all", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageReplySender", "stock_mail-reply", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageForward", "stock_mail-forward", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/commands/EditCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/EditCut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/EditPaste", "edit-paste", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MailCompose", "mail-message-new", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/MessageApplyFilters", "stock_mail-filters-apply", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageCopy", "stock_mail-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageDelete", "user-trash", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/MessageFilterJunk", "mail-mark-junk", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageSearch", "stock_search", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageSaveAs", "stock_save-as", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageMarkAsRead", "stock_mail-open", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageMarkAsUnRead", "stock_mail-unread", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageFollowUpFlag", "stock_mail-flag-for-followup", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageForward", "mail-forward", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/MessageMarkAsImportant", "emblem-important", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/MessageMarkAsJunk", "mail-mark-junk", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/MessageMarkAsNotJunk", "mail-mark-notjunk", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MessageFollowUpFlag", "stock_mail-flag-for-followup", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/ViewLoadImages", "stock_insert_image", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/MailCompose", "stock_mail-compose", E_ICON_SIZE_MENU), +- +- E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageReplySender", "stock_mail-reply", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageReplyAll", "stock_mail-reply-to-all", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageForward", "stock_mail-forward", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MailMessageToolbar/PrintMessage", "stock_print", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/commands/MessageMarkAsRead", "mail-read", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageMarkAsUnRead", "mail-unread", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageMove", "stock_mail-move", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageReplyAll", "mail-reply-all", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageReplySender", "mail-reply-sender", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageSaveAs", "document-save-as", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MessageSearch", "edit-find", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/PrintMessage", "document-print", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/PrintPreviewMessage", "document-print-preview", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TextZoomIn", "zoom-in", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TextZoomOut", "zoom-out", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TextZoomReset", "zoom-original", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ViewLoadImages", "insert-image", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/menu/MessagePlaceholder/Message/MessageNavigation/GoTo", "go-jump", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageReplySender", "mail-reply-sender", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageReplyAll", "mail-reply-all", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageForward", "mail-forward", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailMessageToolbar/PrintMessage", "document-print", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageMove", "stock_mail-move", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageCopy", "stock_mail-copy", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageDelete", "stock_delete", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageDelete", "edit-delete", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageMarkAsJunk", "mail-mark-junk", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/MailMessageToolbar/MessageMarkAsNotJunk", "mail-mark-notjunk", E_ICON_SIZE_LARGE_TOOLBAR), +- +- E_PIXMAP ("/Toolbar/MailNextButtons/MailNext", "stock_next", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MailNextButtons/MailPrevious", "stock_previous", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailNextButtons/MailNext", "go-next", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MailNextButtons/MailPrevious", "go-previous", E_ICON_SIZE_LARGE_TOOLBAR), + + E_PIXMAP_END + }; +@@ -2604,7 +2608,7 @@ emp_uri_popup_link_copy(EPopup *ep, EPop + + static EPopupItem emfv_uri_popups[] = { + { E_POPUP_ITEM, "00.uri.11", N_("C_all To..."), emp_uri_popup_link_copy, NULL, NULL, EM_POPUP_URI_CALLTO }, +- { E_POPUP_ITEM, "00.uri.15", N_("_Copy Link Location"), emp_uri_popup_link_copy, NULL, "gtk-copy", EM_POPUP_URI_NOT_MAILTO }, ++ { E_POPUP_ITEM, "00.uri.15", N_("_Copy Link Location"), emp_uri_popup_link_copy, NULL, "edit-copy", EM_POPUP_URI_NOT_MAILTO }, + + { E_POPUP_SUBMENU, "99.uri.00", N_("Create _Search Folder"), NULL, NULL, NULL, EM_POPUP_URI_MAILTO }, + { E_POPUP_ITEM, "99.uri.00/00.10", N_("_From this Address"), emp_uri_popup_vfolder_sender, NULL, NULL, EM_POPUP_URI_MAILTO }, +diff -up evolution-2.12.1/mail/em-popup.c.icon-names evolution-2.12.1/mail/em-popup.c +--- evolution-2.12.1/mail/em-popup.c.icon-names 2007-10-12 02:56:01.000000000 -0400 ++++ evolution-2.12.1/mail/em-popup.c 2007-10-15 22:34:23.000000000 -0400 +@@ -564,25 +564,25 @@ emp_part_popup_forward (EPopup *ep, EPop + } + + static EMPopupItem emp_standard_object_popups[] = { +- { E_POPUP_ITEM, "00.part.00", N_("_Save As..."), emp_part_popup_saveas, NULL, "stock_save-as", 0 }, ++ { E_POPUP_ITEM, "00.part.00", N_("_Save As..."), emp_part_popup_saveas, NULL, "document-save-as", 0 }, + { E_POPUP_ITEM, "00.part.10", N_("Set as _Background"), emp_part_popup_set_background, NULL, NULL, EM_POPUP_PART_IMAGE }, + { E_POPUP_BAR, "10.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE }, +- { E_POPUP_ITEM, "10.part.00", N_("_Reply to sender"), emp_part_popup_reply_sender, NULL, "stock_mail-reply" , EM_POPUP_PART_MESSAGE }, ++ { E_POPUP_ITEM, "10.part.00", N_("_Reply to sender"), emp_part_popup_reply_sender, NULL, "mail-reply-sender" , EM_POPUP_PART_MESSAGE }, + { E_POPUP_ITEM, "10.part.01", N_("Reply to _List"), emp_part_popup_reply_list, NULL, NULL, EM_POPUP_PART_MESSAGE}, +- { E_POPUP_ITEM, "10.part.03", N_("Reply to _All"), emp_part_popup_reply_all, NULL, "stock_mail-reply-to-all", EM_POPUP_PART_MESSAGE}, ++ { E_POPUP_ITEM, "10.part.03", N_("Reply to _All"), emp_part_popup_reply_all, NULL, "mail-reply-all", EM_POPUP_PART_MESSAGE}, + { E_POPUP_BAR, "20.part", NULL, NULL, NULL, NULL, EM_POPUP_PART_MESSAGE }, +- { E_POPUP_ITEM, "20.part.00", N_("_Forward"), emp_part_popup_forward, NULL, "stock_mail-forward", EM_POPUP_PART_MESSAGE }, ++ { E_POPUP_ITEM, "20.part.00", N_("_Forward"), emp_part_popup_forward, NULL, "mail-forward", EM_POPUP_PART_MESSAGE }, + }; + + static EMPopupItem emp_attachment_object_popups[] = { +- { E_POPUP_ITEM, "00.attach.00", N_("_Save As..."), emp_part_popup_saveas, NULL, "stock_save-as", 0 }, ++ { E_POPUP_ITEM, "00.attach.00", N_("_Save As..."), emp_part_popup_saveas, NULL, "document-save-as", 0 }, + { E_POPUP_ITEM, "00.attach.10", N_("Set as _Background"), emp_part_popup_set_background, NULL, NULL, EM_POPUP_ATTACHMENTS_IMAGE }, + { E_POPUP_BAR, "05.attach", NULL, NULL, NULL, NULL, EM_POPUP_ATTACHMENTS_MESSAGE }, +- { E_POPUP_ITEM, "05.attach.00", N_("_Reply to sender"), emp_part_popup_reply_sender, NULL, "stock_mail-reply" , EM_POPUP_ATTACHMENTS_MESSAGE }, ++ { E_POPUP_ITEM, "05.attach.00", N_("_Reply to sender"), emp_part_popup_reply_sender, NULL, "mail-reply-sender" , EM_POPUP_ATTACHMENTS_MESSAGE }, + { E_POPUP_ITEM, "05.attach.01", N_("Reply to _List"), emp_part_popup_reply_list, NULL, NULL, EM_POPUP_ATTACHMENTS_MESSAGE}, +- { E_POPUP_ITEM, "05.attach.03", N_("Reply to _All"), emp_part_popup_reply_all, NULL, "stock_mail-reply-to-all", EM_POPUP_ATTACHMENTS_MESSAGE}, ++ { E_POPUP_ITEM, "05.attach.03", N_("Reply to _All"), emp_part_popup_reply_all, NULL, "mail-reply-all", EM_POPUP_ATTACHMENTS_MESSAGE}, + { E_POPUP_BAR, "05.attach.10", NULL, NULL, NULL, NULL, EM_POPUP_ATTACHMENTS_MESSAGE }, +- { E_POPUP_ITEM, "05.attach.15", N_("_Forward"), emp_part_popup_forward, NULL, "stock_mail-forward", EM_POPUP_ATTACHMENTS_MESSAGE }, ++ { E_POPUP_ITEM, "05.attach.15", N_("_Forward"), emp_part_popup_forward, NULL, "mail-forward", EM_POPUP_ATTACHMENTS_MESSAGE }, + }; + + static const EPopupItem emp_standard_part_apps_bar = { E_POPUP_BAR, "99.object" }; +@@ -631,8 +631,8 @@ emp_uri_popup_address_add(EPopup *ep, EP + + static EPopupItem emp_standard_uri_popups[] = { + { E_POPUP_ITEM, "00.uri.00", N_("_Open Link in Browser"), emp_uri_popup_link_open, NULL, NULL, EM_POPUP_URI_HTTP }, +- { E_POPUP_ITEM, "00.uri.10", N_("_Send New Message To..."), emp_uri_popup_address_send, NULL, "stock_mail-compose", EM_POPUP_URI_MAILTO }, +- { E_POPUP_ITEM, "00.uri.20", N_("_Add to Address Book"), emp_uri_popup_address_add, NULL, "gtk-add", EM_POPUP_URI_MAILTO }, ++ { E_POPUP_ITEM, "00.uri.10", N_("_Send New Message To..."), emp_uri_popup_address_send, NULL, "mail-message-new", EM_POPUP_URI_MAILTO }, ++ { E_POPUP_ITEM, "00.uri.20", N_("_Add to Address Book"), emp_uri_popup_address_add, NULL, "contact-new", EM_POPUP_URI_MAILTO }, + }; + + /* ********************************************************************** */ +diff -up evolution-2.12.1/mail/mail-send-recv.c.icon-names evolution-2.12.1/mail/mail-send-recv.c +--- evolution-2.12.1/mail/mail-send-recv.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/mail/mail-send-recv.c 2007-10-15 22:34:23.000000000 -0400 +@@ -399,7 +399,7 @@ build_dialog (EAccountList *accounts, Ca + gtk_widget_show (cancel_button); + gtk_dialog_add_action_widget (gd, cancel_button, GTK_RESPONSE_CANCEL); + +- icon_list = e_icon_factory_get_icon_list ("stock_mail-send-receive"); ++ icon_list = e_icon_factory_get_icon_list ("mail-send-receive"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (gd), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +@@ -560,7 +560,7 @@ build_dialog (EAccountList *accounts, Ca + info->timeout_id = g_timeout_add (STATUS_TIMEOUT, operation_status_timeout, info); + + send_icon = e_icon_factory_get_image ( +- "stock_mail-send", E_ICON_SIZE_LARGE_TOOLBAR); ++ "mail-send", E_ICON_SIZE_LARGE_TOOLBAR); + pretty_url = format_url (destination, NULL); + label = gtk_label_new (NULL); + gtk_label_set_ellipsize ( +diff -up evolution-2.12.1/mail/mail-component.c.icon-names evolution-2.12.1/mail/mail-component.c +--- evolution-2.12.1/mail/mail-component.c.icon-names 2007-10-15 22:34:21.000000000 -0400 ++++ evolution-2.12.1/mail/mail-component.c 2007-10-15 22:34:23.000000000 -0400 +@@ -878,7 +878,7 @@ impl__get_userCreatableItems (PortableSe + list->_buffer[0].menuDescription = _("_Mail Message"); + list->_buffer[0].tooltip = _("Compose a new mail message"); + list->_buffer[0].menuShortcut = 'm'; +- list->_buffer[0].iconName = "stock_mail-compose"; ++ list->_buffer[0].iconName = "mail-message-new"; + list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT; + + list->_buffer[1].id = "folder"; +@@ -886,7 +886,7 @@ impl__get_userCreatableItems (PortableSe + list->_buffer[1].menuDescription = _("Mail _Folder"); + list->_buffer[1].tooltip = _("Create a new mail folder"); + list->_buffer[1].menuShortcut = '\0'; +- list->_buffer[1].iconName = "stock_new-dir"; ++ list->_buffer[1].iconName = "folder-new"; + list->_buffer[1].type = GNOME_Evolution_CREATABLE_FOLDER; + + return list; +diff -up evolution-2.12.1/plugins/exchange-operations/exchange-folder.c.icon-names evolution-2.12.1/plugins/exchange-operations/exchange-folder.c +--- evolution-2.12.1/plugins/exchange-operations/exchange-folder.c.icon-names 2007-10-15 22:34:21.000000000 -0400 ++++ evolution-2.12.1/plugins/exchange-operations/exchange-folder.c 2007-10-15 22:34:23.000000000 -0400 +@@ -63,7 +63,7 @@ static void exchange_get_folder (char *u + + + static EPopupItem popup_inbox_items[] = { +- { E_POPUP_ITEM, "29.inbox_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_inbox_unsubscribe, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS } ++ { E_POPUP_ITEM, "29.inbox_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_inbox_unsubscribe, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } + }; + + void +@@ -232,7 +232,7 @@ org_gnome_exchange_check_inbox_subscribe + } + + static EPopupItem popup_items[] = { +- { E_POPUP_ITEM, "29.calendar_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_unsubscribe, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS } ++ { E_POPUP_ITEM, "29.calendar_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_unsubscribe, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } + }; + + void +@@ -242,7 +242,7 @@ popup_free (EPopup *ep, GSList *items, v + } + + static EPopupItem popup_ab_items[] = { +- { E_POPUP_ITEM, "29.address_book_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_ab_unsubscribe, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS } ++ { E_POPUP_ITEM, "29.address_book_unsubscribe", N_("Unsubscribe Folder..."), org_gnome_exchange_folder_ab_unsubscribe, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } + }; + + void +diff -up evolution-2.12.1/plugins/exchange-operations/exchange-folder-permission.c.icon-names evolution-2.12.1/plugins/exchange-operations/exchange-folder-permission.c +--- evolution-2.12.1/plugins/exchange-operations/exchange-folder-permission.c.icon-names 2007-10-12 02:55:27.000000000 -0400 ++++ evolution-2.12.1/plugins/exchange-operations/exchange-folder-permission.c 2007-10-15 22:34:23.000000000 -0400 +@@ -58,7 +58,7 @@ void org_gnome_exchange_menu_cal_permiss + gchar *selected_exchange_folder_uri = NULL; + + static EPopupItem popup_items[] = { +- { E_POPUP_ITEM, "30.emc.10", N_("Permissions..."), org_folder_permissions_cb, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS } ++ { E_POPUP_ITEM, "30.emc.10", N_("Permissions..."), org_folder_permissions_cb, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } + }; + + static void +diff -up evolution-2.12.1/plugins/save-calendar/org-gnome-save-calendar.eplug.xml.icon-names evolution-2.12.1/plugins/save-calendar/org-gnome-save-calendar.eplug.xml +--- evolution-2.12.1/plugins/save-calendar/org-gnome-save-calendar.eplug.xml.icon-names 2007-10-12 02:55:29.000000000 -0400 ++++ evolution-2.12.1/plugins/save-calendar/org-gnome-save-calendar.eplug.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -8,10 +8,10 @@ + + + +- ++ + + +- ++ + + + +diff -up evolution-2.12.1/plugins/groupwise-features/share-folder-common.c.icon-names evolution-2.12.1/plugins/groupwise-features/share-folder-common.c +--- evolution-2.12.1/plugins/groupwise-features/share-folder-common.c.icon-names 2007-10-15 22:34:21.000000000 -0400 ++++ evolution-2.12.1/plugins/groupwise-features/share-folder-common.c 2007-10-15 22:34:23.000000000 -0400 +@@ -333,7 +333,7 @@ new_folder_response (EMFolderSelector *e + } + + static EPopupItem popup_items[] = { +-{ E_POPUP_ITEM, "20.emc.001", N_("New _Shared Folder..."), create_shared_folder, NULL, "stock_new-dir", 0, EM_POPUP_FOLDER_INFERIORS } ++{ E_POPUP_ITEM, "20.emc.001", N_("New _Shared Folder..."), create_shared_folder, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS } + }; + + static void +diff -up evolution-2.12.1/addressbook/gui/component/addressbook-component.c.icon-names evolution-2.12.1/addressbook/gui/component/addressbook-component.c +--- evolution-2.12.1/addressbook/gui/component/addressbook-component.c.icon-names 2007-10-12 02:39:01.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/component/addressbook-component.c 2007-10-15 22:34:23.000000000 -0400 +@@ -229,7 +229,7 @@ impl__get_userCreatableItems (PortableSe + list->_buffer[0].menuDescription = _("_Contact"); + list->_buffer[0].tooltip = _("Create a new contact"); + list->_buffer[0].menuShortcut = 'c'; +- list->_buffer[0].iconName = "stock_contact"; ++ list->_buffer[0].iconName = "contact-new"; + list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT; + + list->_buffer[1].id = "contact_list"; +diff -up evolution-2.12.1/addressbook/gui/component/addressbook-view.c.icon-names evolution-2.12.1/addressbook/gui/component/addressbook-view.c +--- evolution-2.12.1/addressbook/gui/component/addressbook-view.c.icon-names 2007-10-12 02:39:01.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/component/addressbook-view.c 2007-10-15 22:34:23.000000000 -0400 +@@ -71,7 +71,7 @@ + static GObjectClass *parent_class = NULL; + + /* This is used for the addressbook status bar */ +-#define EVOLUTION_CONTACTS_PROGRESS_IMAGE "stock_contact" ++#define EVOLUTION_CONTACTS_PROGRESS_IMAGE "contact-new" + static GdkPixbuf *progress_icon = NULL; + + #define d(x) +@@ -614,26 +614,24 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixmaps [] = { +- E_PIXMAP ("/menu/File/FileOps/ContactsSaveAsVCard", "stock_save-as", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/File/Print/ContactsPrint", "stock_print", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/File/Print/ContactsPrintPreview", "stock_print-preview", E_ICON_SIZE_MENU), +- +- E_PIXMAP ("/menu/EditPlaceholder/Edit/ContactsCut", "stock_cut", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/EditPlaceholder/Edit/ContactsCopy", "stock_copy", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/EditPlaceholder/Edit/ContactsPaste", "stock_paste", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/EditPlaceholder/Edit/ContactDelete", "stock_delete", E_ICON_SIZE_MENU), +- +- E_PIXMAP ("/menu/ActionsPlaceholder/Actions/ContactsSendContactToOther", "stock_mail-forward", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/ActionsPlaceholder/Actions/ContactsSendMessageToContact", "stock_mail-send", E_ICON_SIZE_MENU), +- +- E_PIXMAP ("/Toolbar/ContactsPrint", "stock_print", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/ContactDelete", "stock_delete", E_ICON_SIZE_LARGE_TOOLBAR), +- +- E_PIXMAP ("/menu/FolderPlaceholder/Folder/FolderCopy", "stock_folder-copy", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/FolderPlaceholder/Folder/FolderMove", "stock_folder-move", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/FolderPlaceholder/Folder/ChangeFolderProperties", "stock_folder-properties", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/FolderPlaceholder/Folder/FolderSave", "stock_save-as", E_ICON_SIZE_MENU), +- ++ E_PIXMAP ("/commands/ChangeFolderProperties", "stock_folder-properties", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactDelete", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsCut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsPaste", "edit-paste", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsPrint", "document-print", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsPrintPreview", "document-print-preview", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsSaveAsVCard", "document-save-as", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsSendContactToOther", "mail-forward", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ContactsSendMessageToContact", "mail-send", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FolderCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FolderDelete", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FolderMove", "stock_folder-move", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FolderSave", "document-save-as", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/ContactsPrint", "document-print", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/ContactDelete", "edit-delete", E_ICON_SIZE_LARGE_TOOLBAR), ++ + E_PIXMAP_END + }; + +@@ -953,10 +951,10 @@ primary_source_selection_changed_callbac + } + + static EPopupItem abv_source_popups[] = { +- { E_POPUP_ITEM, "10.new", N_("_New Address Book"), new_addressbook_cb, NULL, "stock_contact", 0, 0 }, +- { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_addressbook_cb, NULL, "stock_delete", 0, EAB_POPUP_SOURCE_USER|EAB_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "10.new", N_("_New Address Book"), new_addressbook_cb, NULL, "contact-new", 0, 0 }, ++ { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_addressbook_cb, NULL, "edit-delete", 0, EAB_POPUP_SOURCE_USER|EAB_POPUP_SOURCE_PRIMARY }, + { E_POPUP_BAR, "40.bar"}, +- { E_POPUP_ITEM, "40.saveasvcard", N_("Save As Vcard..."), save_addressbook_cb, NULL,"stock_save-as", 0, EAB_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "40.saveasvcard", N_("Save As Vcard..."), save_addressbook_cb, NULL,"document-save-as", 0, EAB_POPUP_SOURCE_PRIMARY }, + { E_POPUP_BAR, "30.bar"}, + { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_addressbook_cb, NULL,"stock_folder-properties", 0, EAB_POPUP_SOURCE_PRIMARY }, + }; +@@ -1334,7 +1332,7 @@ addressbook_view_init (AddressbookView * + e_activity_handler_attach_task_bar (priv->activity_handler, + E_TASK_BAR (priv->statusbar_widget)); + +- priv->info_widget = e_info_label_new("stock_contact"); ++ priv->info_widget = e_info_label_new("contact-new"); + e_info_label_set_info((EInfoLabel*)priv->info_widget, _("Contacts"), ""); + gtk_widget_show (priv->info_widget); + +diff -up evolution-2.12.1/addressbook/gui/widgets/e-addressbook-view.c.icon-names evolution-2.12.1/addressbook/gui/widgets/e-addressbook-view.c +--- evolution-2.12.1/addressbook/gui/widgets/e-addressbook-view.c.icon-names 2007-10-12 02:39:06.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/widgets/e-addressbook-view.c 2007-10-15 22:34:23.000000000 -0400 +@@ -958,27 +958,27 @@ new_list (EPopup *ep, EPopupItem *pitem, + static EPopupItem eabv_popup_items[] = { + { E_POPUP_ITEM, "05.open", N_("_Open"), open_contact, NULL, NULL, EAB_POPUP_SELECT_ANY|EAB_POPUP_SELECT_EDITABLE }, + { E_POPUP_BAR, "10.bar" }, +- { E_POPUP_ITEM, "10.new", N_("_New Contact..."), new_card, NULL, "stock_contact", 0, EAB_POPUP_SELECT_EDITABLE}, ++ { E_POPUP_ITEM, "10.new", N_("_New Contact..."), new_card, NULL, "contact-new", 0, EAB_POPUP_SELECT_EDITABLE}, + { E_POPUP_ITEM, "15.newlist", N_("New Contact _List..."), new_list, NULL, "stock_contact-list", 0, EAB_POPUP_SELECT_EDITABLE }, + + { E_POPUP_BAR, "20.bar" }, +- { E_POPUP_ITEM, "30.saveas", N_("_Save as VCard..."), save_as, NULL, "stock_save-as", 0, EAB_POPUP_SELECT_ANY }, +- { E_POPUP_ITEM, "40.forward", N_("_Forward Contact"), send_as, NULL, "stock_mail-forward", EAB_POPUP_SELECT_ONE }, +- { E_POPUP_ITEM, "40.forward", N_("_Forward Contacts"), send_as, NULL, "stock_mail-forward", EAB_POPUP_SELECT_MANY }, +- { E_POPUP_ITEM, "50.mailto", N_("Send _Message to Contact"), send_to, NULL, "stock_mail-send", EAB_POPUP_SELECT_ONE|EAB_POPUP_SELECT_EMAIL|EAB_POPUP_CONTACT }, +- { E_POPUP_ITEM, "50.mailto", N_("Send _Message to List"), send_to, NULL, "stock_mail-send", EAB_POPUP_SELECT_ONE|EAB_POPUP_SELECT_EMAIL|EAB_POPUP_LIST }, +- { E_POPUP_ITEM, "50.mailto", N_("Send _Message to Contacts"), send_to, NULL, "stock_mail-send", EAB_POPUP_SELECT_MANY|EAB_POPUP_SELECT_EMAIL }, +- { E_POPUP_ITEM, "60.print", N_("_Print"), print, NULL, "stock_print", 0, EAB_POPUP_SELECT_ANY }, ++ { E_POPUP_ITEM, "30.saveas", N_("_Save as VCard..."), save_as, NULL, "document-save-as", 0, EAB_POPUP_SELECT_ANY }, ++ { E_POPUP_ITEM, "40.forward", N_("_Forward Contact"), send_as, NULL, "mail-forward", EAB_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "40.forward", N_("_Forward Contacts"), send_as, NULL, "mail-forward", EAB_POPUP_SELECT_MANY }, ++ { E_POPUP_ITEM, "50.mailto", N_("Send _Message to Contact"), send_to, NULL, "mail-send", EAB_POPUP_SELECT_ONE|EAB_POPUP_SELECT_EMAIL|EAB_POPUP_CONTACT }, ++ { E_POPUP_ITEM, "50.mailto", N_("Send _Message to List"), send_to, NULL, "mail-send", EAB_POPUP_SELECT_ONE|EAB_POPUP_SELECT_EMAIL|EAB_POPUP_LIST }, ++ { E_POPUP_ITEM, "50.mailto", N_("Send _Message to Contacts"), send_to, NULL, "mail-send", EAB_POPUP_SELECT_MANY|EAB_POPUP_SELECT_EMAIL }, ++ { E_POPUP_ITEM, "60.print", N_("_Print"), print, NULL, "document-print", 0, EAB_POPUP_SELECT_ANY }, + + { E_POPUP_BAR, "70.bar" }, + { E_POPUP_ITEM, "80.copyto", N_("Cop_y to Address Book..."), copy_to_folder, NULL, NULL, 0, EAB_POPUP_SELECT_ANY }, + { E_POPUP_ITEM, "90.moveto", N_("Mo_ve to Address Book..."), move_to_folder, NULL, NULL, 0, EAB_POPUP_SELECT_ANY|EAB_POPUP_SELECT_EDITABLE }, + + { E_POPUP_BAR, "a0.bar" }, +- { E_POPUP_ITEM, "b0.cut", N_("Cu_t"), cut, NULL, "stock_cut", 0, EAB_POPUP_SELECT_ANY|EAB_POPUP_SELECT_EDITABLE }, +- { E_POPUP_ITEM, "c0.copy", N_("_Copy"), copy, NULL, "stock_copy", 0, EAB_POPUP_SELECT_ANY }, +- { E_POPUP_ITEM, "d0.paste", N_("P_aste"), paste, NULL, "stock_paste", 0, EAB_POPUP_SELECT_EDITABLE }, +- { E_POPUP_ITEM, "e0.delete", N_("_Delete"), delete, NULL, "stock_delete", 0, EAB_POPUP_SELECT_EDITABLE|EAB_POPUP_SELECT_ANY }, ++ { E_POPUP_ITEM, "b0.cut", N_("Cu_t"), cut, NULL, "edit-cut", 0, EAB_POPUP_SELECT_ANY|EAB_POPUP_SELECT_EDITABLE }, ++ { E_POPUP_ITEM, "c0.copy", N_("_Copy"), copy, NULL, "edit-copy", 0, EAB_POPUP_SELECT_ANY }, ++ { E_POPUP_ITEM, "d0.paste", N_("P_aste"), paste, NULL, "edit-paste", 0, EAB_POPUP_SELECT_EDITABLE }, ++ { E_POPUP_ITEM, "e0.delete", N_("_Delete"), delete, NULL, "edit-delete", 0, EAB_POPUP_SELECT_EDITABLE|EAB_POPUP_SELECT_ANY }, + }; + + static void +diff -up evolution-2.12.1/addressbook/gui/widgets/eab-contact-display.c.icon-names evolution-2.12.1/addressbook/gui/widgets/eab-contact-display.c +--- evolution-2.12.1/addressbook/gui/widgets/eab-contact-display.c.icon-names 2007-10-12 02:39:06.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/widgets/eab-contact-display.c 2007-10-15 22:34:23.000000000 -0400 +@@ -170,9 +170,9 @@ eab_selection_clear_event(GtkWidget *wid + + static EPopupItem eab_uri_popups[] = { + { E_POPUP_ITEM, "05.open", N_("_Open Link in Browser"), eab_uri_popup_link_open, NULL, NULL, EAB_POPUP_URI_NOT_MAILTO }, +- { E_POPUP_ITEM, "10.copy", N_("_Copy Link Location"), eab_uri_popup_link_copy, NULL, "gtk-copy", EAB_POPUP_URI_NOT_MAILTO }, +- { E_POPUP_ITEM, "15.send", N_("_Send New Message To..."), eab_uri_popup_address_send, NULL, "stock_mail-compose", EAB_POPUP_URI_MAILTO}, +- { E_POPUP_ITEM, "20.copy", N_("Copy _Email Address"), eab_uri_popup_email_address_copy, NULL, "gtk-copy", EAB_POPUP_URI_MAILTO}, ++ { E_POPUP_ITEM, "10.copy", N_("_Copy Link Location"), eab_uri_popup_link_copy, NULL, "edit-copy", EAB_POPUP_URI_NOT_MAILTO }, ++ { E_POPUP_ITEM, "15.send", N_("_Send New Message To..."), eab_uri_popup_address_send, NULL, "mail-message-new", EAB_POPUP_URI_MAILTO}, ++ { E_POPUP_ITEM, "20.copy", N_("Copy _Email Address"), eab_uri_popup_email_address_copy, NULL, "edit-copy", EAB_POPUP_URI_MAILTO}, + }; + + +diff -up evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c.icon-names evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c +--- evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c.icon-names 2007-10-12 02:38:53.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-fullname.c 2007-10-15 22:34:23.000000000 -0400 +@@ -140,7 +140,7 @@ e_contact_editor_fullname_init (EContact + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (e_contact_editor_fullname)->vbox), widget, TRUE, TRUE, 0); + g_object_unref(widget); + +- icon_list = e_icon_factory_get_icon_list ("stock_contact"); ++ icon_list = e_icon_factory_get_icon_list ("contact-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (e_contact_editor_fullname), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-address.c.icon-names evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-address.c +--- evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-address.c.icon-names 2007-10-12 02:38:53.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-address.c 2007-10-15 22:34:23.000000000 -0400 +@@ -455,7 +455,7 @@ e_contact_editor_address_init (EContactE + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (e_contact_editor_address)->vbox), widget, TRUE, TRUE, 0); + g_object_unref(widget); + +- icon_list = e_icon_factory_get_icon_list ("stock_contact"); ++ icon_list = e_icon_factory_get_icon_list ("contact-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (e_contact_editor_address), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-im.c.icon-names evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-im.c +--- evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-im.c.icon-names 2007-10-12 02:38:53.000000000 -0400 ++++ evolution-2.12.1/addressbook/gui/contact-editor/e-contact-editor-im.c 2007-10-15 22:34:23.000000000 -0400 +@@ -289,7 +289,7 @@ e_contact_editor_im_init (EContactEditor + gtk_widget_grab_focus(glade_xml_get_widget(gui, "entry-username")); + + /* set the icon */ +- icon_list = e_icon_factory_get_icon_list ("stock_contact"); ++ icon_list = e_icon_factory_get_icon_list ("contact-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (e_contact_editor_im), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/ui/evolution.xml.icon-names evolution-2.12.1/ui/evolution.xml +--- evolution-2.12.1/ui/evolution.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -7,10 +7,10 @@ + + + ++ accel="*Control*w"/> + + ++ accel="*Control*q"/> + + +@@ -67,7 +67,8 @@ + + + +- ++ + + + +@@ -98,9 +99,11 @@ + pixtype="pixbuf"/> + + ++ _label="_Close Window" ++ pixtype="pixbuf"/> + +- ++ + + + +diff -up evolution-2.12.1/ui/evolution-event-editor.xml.icon-names evolution-2.12.1/ui/evolution-event-editor.xml +--- evolution-2.12.1/ui/evolution-event-editor.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-event-editor.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -45,13 +45,15 @@ + _tip="Make this a recurring event" pixtype="pixbuf"/> + + ++ _tip="Query free / busy information for the attendees" ++ pixtype="pixbuf"/> + + + + ++ _tip="Click here to set or unset alarms for this event" ++ pixtype="pixbuf"/> + + + +@@ -71,7 +73,7 @@ + + + +- ++ + + + +@@ -79,8 +81,8 @@ + + + +- +- ++ ++ + + + +diff -up evolution-2.12.1/ui/evolution-memos.xml.icon-names evolution-2.12.1/ui/evolution-memos.xml +--- evolution-2.12.1/ui/evolution-memos.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-memos.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -1,15 +1,15 @@ + + + +- +- ++ + +- +- +- ++ ++ ++ + ++ pixtype="pixbuf"/> + + + +@@ -41,15 +41,15 @@ + + + +- +- +- ++ ++ ++ + + + +- ++ + +- ++ + + + +diff -up evolution-2.12.1/ui/evolution-composer-entries.xml.icon-names evolution-2.12.1/ui/evolution-composer-entries.xml +--- evolution-2.12.1/ui/evolution-composer-entries.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-composer-entries.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -3,15 +3,15 @@ + + ++ accel="*Control*x" pixtype="pixbuf"/> + + ++ accel="*Control*c" pixtype="pixbuf"/> + + ++ accel="*Control*v" pixtype="pixbuf"/> + + + + +- +\ No newline at end of file ++ +diff -up evolution-2.12.1/ui/evolution-mail-list.xml.icon-names evolution-2.12.1/ui/evolution-mail-list.xml +--- evolution-2.12.1/ui/evolution-mail-list.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-mail-list.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -4,15 +4,15 @@ + + ++ accel="*Control*x" pixtype="pixbuf"/> + + ++ accel="*Control*c" pixtype="pixbuf"/> + + ++ accel="*Control*v" pixtype="pixbuf"/> + + + +- +- ++ ++ + + + +diff -up evolution-2.12.1/ui/evolution-subscribe.xml.icon-names evolution-2.12.1/ui/evolution-subscribe.xml +--- evolution-2.12.1/ui/evolution-subscribe.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-subscribe.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -3,7 +3,7 @@ + + + ++ pixtype="pixbuf" _label="_Close" accel="*Control*w"/> + + + +diff -up evolution-2.12.1/ui/evolution-tasks.xml.icon-names evolution-2.12.1/ui/evolution-tasks.xml +--- evolution-2.12.1/ui/evolution-tasks.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-tasks.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -1,20 +1,20 @@ + + + +- +- ++ + +- +- +- ++ ++ ++ + ++ pixtype="pixbuf"/> + + + + +- ++ + + + +@@ -59,22 +59,22 @@ + + + +- ++ + + + + + + +- +- +- ++ ++ ++ + + + +- ++ + +- ++ + + + +diff -up evolution-2.12.1/ui/evolution-addressbook.xml.icon-names evolution-2.12.1/ui/evolution-addressbook.xml +--- evolution-2.12.1/ui/evolution-addressbook.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-addressbook.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -1,18 +1,17 @@ + + ++ + ++ accel="*Control*d" pixtype="pixbuf"/> + + ++ accel="*Control*p" pixtype="pixbuf"/> + + ++ pixtype="pixbuf"/> + + + +- ++ + + ++ accel="*Control*c" pixtype="pixbuf"/> + + ++ accel="*Control*v" pixtype="pixbuf"/> + + ++ accel="*Control*s" pixtype="pixbuf"/> + + ++ _tip="Send selected contacts to another person." ++ pixtype="pixbuf"/> + + ++ _tip="Send a message to the selected contacts." ++ pixtype="pixbuf"/> + + ++ + ++ + ++ pixtype="pixbuf"/> ++ + ++ + ++ + + + +@@ -98,14 +101,12 @@ + + ++ verb="" _label="S_ave Address Book As VCard"/> + + + +- +- ++ ++ + + + +@@ -130,7 +131,7 @@ + + + +- ++ + + + +@@ -140,10 +141,10 @@ + + + ++ _label="_Forward Contact..." verb=""/> + + ++ _label="_Send Message to Contact..." verb=""/> + + + +@@ -153,13 +154,13 @@ + + + +- ++ + +- ++ + + + +- ++ + + + +@@ -168,10 +169,10 @@ + + + ++ _label="Print" pixtype="pixbuf"/> + + ++ _label="Delete" pixtype="pixbuf"/> + + +diff -up evolution-2.12.1/ui/evolution-editor.xml.icon-names evolution-2.12.1/ui/evolution-editor.xml +--- evolution-2.12.1/ui/evolution-editor.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-editor.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -1,15 +1,15 @@ + + +- +- ++ ++ + +- +- +- ++ ++ ++ + + + +- ++ + + + +@@ -39,7 +39,7 @@ + + + +- ++ + + + +@@ -53,8 +53,8 @@ + + + +- +- ++ ++ + + + +diff -up evolution-2.12.1/ui/evolution-mail-message.xml.icon-names evolution-2.12.1/ui/evolution-mail-message.xml +--- evolution-2.12.1/ui/evolution-mail-message.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-mail-message.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -11,15 +11,15 @@ + + ++ accel="*Control*x" pixtype="pixbuf"/> + + ++ accel="*Control*c" pixtype="pixbuf"/> + + ++ accel="*Control*v" pixtype="pixbuf"/> + + ++ accel="*Control*o"/> + + +@@ -157,12 +156,12 @@ + ++ pixtype="pixbuf"/> + + ++ pixtype="pixbuf"/> + + ++ pixtype="pixbuf"/> + + ++ pixtype="pixbuf"/> + + ++ _tip="Set up the page settings for your current printer"/> + + ++ accel="*Control*plus" pixtype="pixbuf"/> + + ++ accel="*Control*minus" pixtype="pixbuf"/> + + ++ accel="*Control*0" pixtype="pixbuf"/> + + + +@@ -287,13 +285,9 @@ + + + +- +- +- +- ++ ++ ++ + + + +@@ -318,7 +312,7 @@ + + + +- ++ + + + +@@ -370,7 +364,7 @@ + + + +- ++ + + + +@@ -416,7 +410,7 @@ + + ++ pixtype="pixbuf"/> + + + + +- ++ + + + +diff -up evolution-2.12.1/ui/evolution-message-composer.xml.icon-names evolution-2.12.1/ui/evolution-message-composer.xml +--- evolution-2.12.1/ui/evolution-message-composer.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-message-composer.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -2,22 +2,22 @@ + + + + +@@ -101,8 +100,8 @@ + + + +- +- ++ ++ + + + +@@ -134,7 +133,7 @@ + + + ++ _label="_Attachment..."/> + + + +diff -up evolution-2.12.1/ui/evolution-calendar.xml.icon-names evolution-2.12.1/ui/evolution-calendar.xml +--- evolution-2.12.1/ui/evolution-calendar.xml.icon-names 2007-10-12 03:04:30.000000000 -0400 ++++ evolution-2.12.1/ui/evolution-calendar.xml 2007-10-15 22:34:23.000000000 -0400 +@@ -1,14 +1,14 @@ + + + +- +- ++ + + + + +- ++ + + + +@@ -16,13 +16,13 @@ + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + + + +@@ -75,8 +75,8 @@ + + + +- +- ++ ++ + + + +@@ -86,7 +86,7 @@ + + + +- ++ + + + +diff -up evolution-2.12.1/composer/e-msg-composer.c.icon-names evolution-2.12.1/composer/e-msg-composer.c +--- evolution-2.12.1/composer/e-msg-composer.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/composer/e-msg-composer.c 2007-10-15 22:34:23.000000000 -0400 +@@ -2208,14 +2208,17 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixcache [] = { +- E_PIXMAP ("/Toolbar/FileAttach", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/FileSend", "stock_mail-send", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/FileSaveDraft", "stock_save", E_ICON_SIZE_LARGE_TOOLBAR) , ++ E_PIXMAP ("/commands/DeleteAll", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileAttach", "mail-attachment", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileClose", "window-close", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileOpen", "document-open", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileSave", "document-save", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileSaveAs", "document-save-as", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileSend", "mail-send", E_ICON_SIZE_MENU), + +-/* E_PIXMAP ("/menu/Insert/FileAttach", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), */ +- E_PIXMAP ("/commands/FileSend", "stock_mail-send", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/FileSave", "stock_save", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/FileSaveAs", "stock_save-as", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/Toolbar/FileSend", "mail-send", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/FileSaveDraft", "document-save", E_ICON_SIZE_LARGE_TOOLBAR) , ++ E_PIXMAP ("/Toolbar/FileAttach", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), + + E_PIXMAP_END + }; +@@ -3614,7 +3617,7 @@ composer_entry_focus_in_event_cb (GtkWid + xmlfile, + "evolution-composer-entries", NULL); + g_free (xmlfile); +- ++ + bonobo_ui_component_thaw (p->entry_uic, NULL); + + return FALSE; +@@ -3879,7 +3882,7 @@ create_composer (int visible_mask) + G_CALLBACK (msg_composer_destroy_notify), + NULL); + +- icon_list = e_icon_factory_get_icon_list ("stock_mail-compose"); ++ icon_list = e_icon_factory_get_icon_list ("mail-message-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (composer), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/composer/e-msg-composer-select-file.c.icon-names evolution-2.12.1/composer/e-msg-composer-select-file.c +--- evolution-2.12.1/composer/e-msg-composer-select-file.c.icon-names 2007-10-12 02:56:12.000000000 -0400 ++++ evolution-2.12.1/composer/e-msg-composer-select-file.c 2007-10-15 22:34:23.000000000 -0400 +@@ -126,7 +126,7 @@ get_selector(struct _EMsgComposer *compo + gtk_window_set_wmclass ((GtkWindow *) selection, "fileselection", "Evolution:composer"); + gtk_window_set_modal ((GtkWindow *) selection, FALSE); + +- icon_list = e_icon_factory_get_icon_list ("stock_mail-compose"); ++ icon_list = e_icon_factory_get_icon_list ("mail-message-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (selection), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/shell/e-shell-window-commands.c.icon-names evolution-2.12.1/shell/e-shell-window-commands.c +--- evolution-2.12.1/shell/e-shell-window-commands.c.icon-names 2007-10-12 02:39:26.000000000 -0400 ++++ evolution-2.12.1/shell/e-shell-window-commands.c 2007-10-15 22:34:23.000000000 -0400 +@@ -844,12 +844,14 @@ static BonoboUIVerb help_verbs [] = { + }; + + static EPixmap pixmaps [] = { +- E_PIXMAP ("/commands/SendReceive", "stock_mail-send-receive", E_ICON_SIZE_MENU), +- E_PIXMAP ("/Toolbar/SendReceive", "stock_mail-send-receive", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/File/OpenNewWindow", "stock_new-window", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/Toolbar/SendReceive", "mail-send-receive", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/menu/File/OpenNewWindow", "window-new", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/menu/File/SendReceive", "mail-send-receive", E_ICON_SIZE_MENU), + E_PIXMAP ("/menu/File/FileImporter", "stock_mail-import", E_ICON_SIZE_MENU), + E_PIXMAP ("/menu/File/ToggleOffline", "stock_disconnect", E_ICON_SIZE_MENU), +- E_PIXMAP ("/menu/Edit/Settings", "gnome-settings", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/menu/File/FileClose", "window-close", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/menu/File/FileExit", "application-exit", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/menu/Edit/Settings", "preferences-desktop", E_ICON_SIZE_MENU), + + E_PIXMAP_END + }; +diff -up evolution-2.12.1/calendar/gui/e-memo-table.c.icon-names evolution-2.12.1/calendar/gui/e-memo-table.c +--- evolution-2.12.1/calendar/gui/e-memo-table.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-memo-table.c 2007-10-15 22:34:23.000000000 -0400 +@@ -985,7 +985,7 @@ static EPopupItem memos_popup_items [] = + + { E_POPUP_BAR, "70.bar" }, + +- { E_POPUP_ITEM, "80.forward", N_("_Forward as iCalendar"), e_memo_table_on_forward, NULL, "stock_mail-forward", E_CAL_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "80.forward", N_("_Forward as iCalendar"), e_memo_table_on_forward, NULL, "mail-forward", E_CAL_POPUP_SELECT_ONE }, + + { E_POPUP_BAR, "90.bar" }, + +diff -up evolution-2.12.1/calendar/gui/memos-component.c.icon-names evolution-2.12.1/calendar/gui/memos-component.c +--- evolution-2.12.1/calendar/gui/memos-component.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/memos-component.c 2007-10-15 22:34:23.000000000 -0400 +@@ -462,9 +462,9 @@ edit_memo_list_cb (EPopup *ep, EPopupIte + + static EPopupItem emc_source_popups[] = { + { E_POPUP_ITEM, "10.new", N_("_New Memo List"), new_memo_list_cb, NULL, "stock_notes", 0, 0 }, +- { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_memo_list_cb, NULL, "stock_folder-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, +- { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_memo_list_cb, NULL, "stock_delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY }, +- { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_memo_list_cb, NULL, "stock_folder-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_memo_list_cb, NULL, "edit-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_memo_list_cb, NULL, "edit-delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_memo_list_cb, NULL, "document-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, + }; + + static void +diff -up evolution-2.12.1/calendar/gui/dialogs/event-editor.c.icon-names evolution-2.12.1/calendar/gui/dialogs/event-editor.c +--- evolution-2.12.1/calendar/gui/dialogs/event-editor.c.icon-names 2007-10-12 03:04:06.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/dialogs/event-editor.c 2007-10-15 22:34:23.000000000 -0400 +@@ -428,18 +428,19 @@ static EPixmap pixmaps[] = { + * icons is filled in at run-time in event_editor_init() are + * updated, too. + */ ++ E_PIXMAP ("/commands/ActionAlarm", "stock_alarm", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ActionRecurrence", "stock_task-recurring", E_ICON_SIZE_MENU), ++ + E_PIXMAP ("/Toolbar/ActionAlarm", "stock_alarm", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/Options/ActionAlarm", "stock_alarm", E_ICON_SIZE_MENU), + E_PIXMAP ("/Toolbar/ActionAllDayEvent", "stock_new-24h-appointment", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/ViewTimeZone", "stock_timezone", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/ActionRecurrence", "stock_task-recurring", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/Options/ActionRecurrence", "stock_task-recurring", E_ICON_SIZE_MENU), +- E_PIXMAP ("/commands/ActionRecurrence", "stock_task-recurring", E_ICON_SIZE_LARGE_TOOLBAR), ++ + /* These two will have an absolute path to the png file filled + * in at run-time, see event_editor_init(). + */ + E_PIXMAP ("/Toolbar/ActionFreeBusy", NULL, E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/Options/ActionFreeBusy", NULL, E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ActionFreeBusy", NULL, E_ICON_SIZE_MENU), + E_PIXMAP_END + }; + +@@ -561,12 +562,12 @@ event_editor_init (EventEditor *ee) + editor->uic, "ActionFreeBusy", + menu_action_freebusy_cb, editor); + +- /* NOTE: Make sure the 7 and 8 below correspond to the correct ++ /* NOTE: Make sure the 6 and 7 below correspond to the correct + * elements in the pixmaps array. + */ +- if (!pixmaps[7].name) { ++ if (!pixmaps[6].name) { ++ pixmaps[6].name = g_build_filename (EVOLUTION_ICONSDIR, "query-free-busy.png", NULL); + pixmaps[7].name = g_build_filename (EVOLUTION_ICONSDIR, "query-free-busy.png", NULL); +- pixmaps[8].name = g_build_filename (EVOLUTION_ICONSDIR, "query-free-busy.png", NULL); + } + e_pixmaps_update (editor->uic, pixmaps); + +diff -up evolution-2.12.1/calendar/gui/dialogs/task-editor.c.icon-names evolution-2.12.1/calendar/gui/dialogs/task-editor.c +--- evolution-2.12.1/calendar/gui/dialogs/task-editor.c.icon-names 2007-10-12 03:04:06.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/dialogs/task-editor.c 2007-10-15 22:34:23.000000000 -0400 +@@ -294,9 +294,11 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixmaps[] = { ++ E_PIXMAP ("/commands/OptionStatus", "stock_view-details", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/ViewTimeZone", "stock_timezone", E_ICON_SIZE_MENU), ++ + E_PIXMAP ("/Toolbar/ViewTimeZone", "stock_timezone", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/OptionStatus", "stock_view-details", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/commands/OptionStatus", "stock_view-details", E_ICON_SIZE_LARGE_TOOLBAR), + + E_PIXMAP_END + }; +diff -up evolution-2.12.1/calendar/gui/dialogs/cal-attachment-select-file.c.icon-names evolution-2.12.1/calendar/gui/dialogs/cal-attachment-select-file.c +--- evolution-2.12.1/calendar/gui/dialogs/cal-attachment-select-file.c.icon-names 2007-10-12 03:04:06.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/dialogs/cal-attachment-select-file.c 2007-10-15 22:34:23.000000000 -0400 +@@ -123,7 +123,7 @@ run_selector(CompEditor *editor, const c + gtk_window_set_wmclass ((GtkWindow *) selection, "fileselection", "Evolution:editor"); + gtk_window_set_modal ((GtkWindow *) selection, TRUE); + +- icon_list = e_icon_factory_get_icon_list ("stock_mail-compose"); ++ icon_list = e_icon_factory_get_icon_list ("mail-message-new"); + if (icon_list) { + gtk_window_set_icon_list (GTK_WINDOW (selection), icon_list); + g_list_foreach (icon_list, (GFunc) g_object_unref, NULL); +diff -up evolution-2.12.1/calendar/gui/dialogs/comp-editor.c.icon-names evolution-2.12.1/calendar/gui/dialogs/comp-editor.c +--- evolution-2.12.1/calendar/gui/dialogs/comp-editor.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/dialogs/comp-editor.c 2007-10-15 22:34:23.000000000 -0400 +@@ -1486,8 +1486,17 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixmaps[] = { ++ E_PIXMAP ("/commands/FileSave", "document-save", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/FileClose", "window-close", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/EditCut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/EditCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/EditPaste", "edit-paste", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/InsertAttachments", "mail-attachment", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/Help", "help-contents", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/FileSave", "document-save", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/FileClose", "window-close", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/InsertAttachments", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/Insert/Attachments/InsertAttachments", "mail-attachment", E_ICON_SIZE_MENU), + + E_PIXMAP_END + }; +@@ -2257,7 +2266,7 @@ make_icon_from_comp (ECalComponent *comp + type = e_cal_component_get_vtype (comp); + switch (type) { + case E_CAL_COMPONENT_EVENT: +- return "stock_new-appointment"; ++ return "appointment-new"; + case E_CAL_COMPONENT_TODO: + return "stock_task"; + case E_CAL_COMPONENT_JOURNAL: +diff -up evolution-2.12.1/calendar/gui/calendar-component.c.icon-names evolution-2.12.1/calendar/gui/calendar-component.c +--- evolution-2.12.1/calendar/gui/calendar-component.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/calendar-component.c 2007-10-15 22:34:23.000000000 -0400 +@@ -603,9 +603,9 @@ edit_calendar_cb (EPopup *ep, EPopupItem + + static EPopupItem ecc_source_popups[] = { + { E_POPUP_ITEM, "10.new", N_("_New Calendar"), new_calendar_cb, NULL, "stock_calendar", 0, 0 }, +- { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_calendar_cb, NULL, "stock_folder-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, +- { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_calendar_cb, NULL, "stock_delete", 0,E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY|E_CAL_POPUP_SOURCE_DELETE }, +- { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_calendar_cb, NULL, "stock_folder-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_calendar_cb, NULL, "edit-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_calendar_cb, NULL, "edit-delete", 0,E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY|E_CAL_POPUP_SOURCE_DELETE }, ++ { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_calendar_cb, NULL, "document-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, + }; + + static void +@@ -1582,7 +1582,7 @@ impl__get_userCreatableItems (PortableSe + list->_buffer[0].menuDescription = _("_Appointment"); + list->_buffer[0].tooltip = _("Create a new appointment"); + list->_buffer[0].menuShortcut = 'a'; +- list->_buffer[0].iconName = "stock_new-appointment"; ++ list->_buffer[0].iconName = "appointment-new"; + list->_buffer[0].type = GNOME_Evolution_CREATABLE_OBJECT; + + list->_buffer[1].id = CREATE_MEETING_ID; +diff -up evolution-2.12.1/calendar/gui/tasks-control.c.icon-names evolution-2.12.1/calendar/gui/tasks-control.c +--- evolution-2.12.1/calendar/gui/tasks-control.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/tasks-control.c 2007-10-15 22:34:23.000000000 -0400 +@@ -38,7 +38,7 @@ + #include + #include + #include +-#include "e-util/e-icon-factory.h" ++#include + #include + #include "dialogs/cal-prefs-dialog.h" + #include "calendar-config.h" +@@ -253,7 +253,19 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixmaps [] = { +- E_PIXMAP ("/menu/ActionsPlaceholder/Actions/TasksForward", "stock_mail-forward", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksCut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksDelete", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksForward", "mail-forward", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksPaste", "edit-paste", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksPrint", "document-print", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/TasksPrintPreview", "document-print-preview", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/Cut", "edit-cut", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Copy", "edit-copy", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Paste", "edit-paste", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Print", "document-print", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Delete", "edit-delete", E_ICON_SIZE_LARGE_TOOLBAR), + + E_PIXMAP_END + }; +diff -up evolution-2.12.1/calendar/gui/e-calendar-table.c.icon-names evolution-2.12.1/calendar/gui/e-calendar-table.c +--- evolution-2.12.1/calendar/gui/e-calendar-table.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-calendar-table.c 2007-10-15 22:34:23.000000000 -0400 +@@ -1414,7 +1414,7 @@ static EPopupItem tasks_popup_items [] = + { E_POPUP_BAR, "70.bar" }, + + { E_POPUP_ITEM, "80.assign", N_("_Assign Task"), e_calendar_table_on_assign, NULL, NULL, E_CAL_POPUP_SELECT_ONE, E_CAL_POPUP_SELECT_EDITABLE|E_CAL_POPUP_SELECT_ASSIGNABLE }, +- { E_POPUP_ITEM, "90.forward", N_("_Forward as iCalendar"), e_calendar_table_on_forward, NULL, "stock_mail-forward", E_CAL_POPUP_SELECT_ONE }, ++ { E_POPUP_ITEM, "90.forward", N_("_Forward as iCalendar"), e_calendar_table_on_forward, NULL, "mail-forward", E_CAL_POPUP_SELECT_ONE }, + { E_POPUP_ITEM, "a0.markonecomplete", N_("_Mark as Complete"), mark_as_complete_cb, NULL, NULL, E_CAL_POPUP_SELECT_ONE, E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_NOTCOMPLETE}, + { E_POPUP_ITEM, "b0.markmanycomplete", N_("_Mark Selected Tasks as Complete"), mark_as_complete_cb, NULL, NULL, E_CAL_POPUP_SELECT_MANY, E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_NOTCOMPLETE }, + { E_POPUP_ITEM, "c0.markoneincomplete", N_("_Mark as Incomplete"), mark_as_incomplete_cb, NULL, NULL, E_CAL_POPUP_SELECT_ONE, E_CAL_POPUP_SELECT_EDITABLE|E_CAL_POPUP_SELECT_COMPLETE}, +diff -up evolution-2.12.1/calendar/gui/e-day-view.c.icon-names evolution-2.12.1/calendar/gui/e-day-view.c +--- evolution-2.12.1/calendar/gui/e-day-view.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-day-view.c 2007-10-15 22:34:23.000000000 -0400 +@@ -1420,7 +1420,7 @@ e_day_view_realize (GtkWidget *widget) + + /* Create the pixmaps. */ + day_view->reminder_icon = e_icon_factory_get_icon ("stock_bell", E_ICON_SIZE_MENU); +- day_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); ++ day_view->recurrence_icon = e_icon_factory_get_icon ("view-refresh", E_ICON_SIZE_MENU); + day_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); + day_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); + day_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); +@@ -1494,7 +1494,7 @@ e_day_view_realize (GtkWidget *widget) + + /* Create the pixmaps. */ + day_view->reminder_icon = e_icon_factory_get_icon ("stock_bell", E_ICON_SIZE_MENU); +- day_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); ++ day_view->recurrence_icon = e_icon_factory_get_icon ("view-refresh", E_ICON_SIZE_MENU); + day_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); + day_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); + day_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); +diff -up evolution-2.12.1/calendar/gui/e-calendar-view.c.icon-names evolution-2.12.1/calendar/gui/e-calendar-view.c +--- evolution-2.12.1/calendar/gui/e-calendar-view.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-calendar-view.c 2007-10-15 22:34:23.000000000 -0400 +@@ -1655,7 +1655,7 @@ on_paste (EPopup *ep, EPopupItem *pitem, + } + + static EPopupItem ecv_main_items [] = { +- { E_POPUP_ITEM, "00.new", N_("New _Appointment..."), on_new_appointment, NULL, "stock_new-appointment", 0, 0 }, ++ { E_POPUP_ITEM, "00.new", N_("New _Appointment..."), on_new_appointment, NULL, "appointment-new", 0, 0 }, + { E_POPUP_ITEM, "10.newallday", N_("New All Day _Event"), on_new_event, NULL, "stock_new-24h-appointment", 0, 0}, + { E_POPUP_ITEM, "20.meeting", N_("New _Meeting"), on_new_meeting, NULL, "stock_new-meeting", 0, 0}, + { E_POPUP_ITEM, "30.task", N_("New _Task"), on_new_task, NULL, "stock_task", 0, 0}, +@@ -1691,9 +1691,9 @@ static EPopupItem ecv_child_items [] = { + { E_POPUP_ITEM, "44.moveto", N_("Mo_ve to Calendar..."), on_move_to, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE }, + { E_POPUP_ITEM, "45.delegate", N_("_Delegate Meeting..."), on_delegate, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_DELEGATABLE | E_CAL_POPUP_SELECT_MEETING}, + { E_POPUP_ITEM, "46.schedule", N_("_Schedule Meeting..."), on_meeting, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_NOTMEETING }, +- { E_POPUP_ITEM, "47.forward", N_("_Forward as iCalendar..."), on_forward, NULL, "stock_mail-forward", 0, E_CAL_POPUP_SELECT_NOTEDITING }, +- { E_POPUP_ITEM, "48.reply", N_("_Reply"), on_reply, NULL, "stock_mail-reply", E_CAL_POPUP_SELECT_MEETING | E_CAL_POPUP_SELECT_NOSAVESCHEDULES, E_CAL_POPUP_SELECT_NOTEDITING }, +- { E_POPUP_ITEM, "49.reply-all", N_("Reply to _All"), on_reply_all, NULL, "stock_mail-reply-to-all", E_CAL_POPUP_SELECT_MEETING | E_CAL_POPUP_SELECT_NOSAVESCHEDULES, E_CAL_POPUP_SELECT_NOTEDITING }, ++ { E_POPUP_ITEM, "47.forward", N_("_Forward as iCalendar..."), on_forward, NULL, "mail-forward", 0, E_CAL_POPUP_SELECT_NOTEDITING }, ++ { E_POPUP_ITEM, "48.reply", N_("_Reply"), on_reply, NULL, "mail-reply-sender", E_CAL_POPUP_SELECT_MEETING | E_CAL_POPUP_SELECT_NOSAVESCHEDULES, E_CAL_POPUP_SELECT_NOTEDITING }, ++ { E_POPUP_ITEM, "49.reply-all", N_("Reply to _All"), on_reply_all, NULL, "mail-reply-all", E_CAL_POPUP_SELECT_MEETING | E_CAL_POPUP_SELECT_NOSAVESCHEDULES, E_CAL_POPUP_SELECT_NOTEDITING }, + + { E_POPUP_BAR, "50." }, + +diff -up evolution-2.12.1/calendar/gui/tasks-component.c.icon-names evolution-2.12.1/calendar/gui/tasks-component.c +--- evolution-2.12.1/calendar/gui/tasks-component.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/tasks-component.c 2007-10-15 22:34:23.000000000 -0400 +@@ -453,9 +453,9 @@ edit_task_list_cb (EPopup *ep, EPopupIte + + static EPopupItem etc_source_popups[] = { + { E_POPUP_ITEM, "10.new", N_("_New Task List"), new_task_list_cb, NULL, "stock_todo", 0, 0 }, +- { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_task_list_cb, NULL, "stock_folder-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, +- { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_task_list_cb, NULL, "stock_delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY }, +- { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_task_list_cb, NULL, "stock_folder-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "15.copy", N_("_Copy"), copy_task_list_cb, NULL, "edit-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_task_list_cb, NULL, "edit-delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY }, ++ { E_POPUP_ITEM, "30.properties", N_("_Properties..."), edit_task_list_cb, NULL, "document-properties", 0, E_CAL_POPUP_SOURCE_PRIMARY }, + }; + + static void +diff -up evolution-2.12.1/calendar/gui/calendar-commands.c.icon-names evolution-2.12.1/calendar/gui/calendar-commands.c +--- evolution-2.12.1/calendar/gui/calendar-commands.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/calendar-commands.c 2007-10-15 22:34:23.000000000 -0400 +@@ -593,15 +593,29 @@ static BonoboUIVerb verbs [] = { + BONOBO_UI_VERB_END + }; + +-static EPixmap pixmaps [] = +-{ +- E_PIXMAP ("/Toolbar/DayView", "stock_calendar-view-day", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/WorkWeekView", "stock_calendar-view-work-week", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/WeekView", "stock_calendar-view-week", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/MonthView", "stock_calendar-view-month", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/ListView", "stock_calendar-view-list", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/Prev", "stock_previous", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/Toolbar/Next", "stock_next", E_ICON_SIZE_LARGE_TOOLBAR), ++static EPixmap pixmaps [] = { ++ E_PIXMAP ("/commands/CalendarPrev", "go-previous", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/CalendarPrint", "document-print", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/DeleteAllOccurrences", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/DeleteOccurrence", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/CalendarGoto", "go-jump", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/CalendarNext", "go-next", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/CalendarPrintPreview", "document-print-preview", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/Copy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/Cut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/Delete", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/Paste", "edit-paste", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/Print", "document-print", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Delete", "edit-delete", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Prev", "go-previous", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Next", "go-next", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Goto", "go-jump", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/DayView", "stock_calendar-view-day", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/WorkWeekView", "stock_calendar-view-work-week", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/WeekView", "stock_calendar-view-week", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/MonthView", "stock_calendar-view-month", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/ListView", "stock_calendar-view-list", E_ICON_SIZE_LARGE_TOOLBAR), + + E_PIXMAP_END + }; +diff -up evolution-2.12.1/calendar/gui/memos-control.c.icon-names evolution-2.12.1/calendar/gui/memos-control.c +--- evolution-2.12.1/calendar/gui/memos-control.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/memos-control.c 2007-10-15 22:34:23.000000000 -0400 +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include + + #include "calendar-config.h" +@@ -183,6 +184,23 @@ static BonoboUIVerb verbs [] = { + BONOBO_UI_VERB_END + }; + ++static EPixmap pixmaps [] = { ++ E_PIXMAP ("/commands/MemosCopy", "edit-copy", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MemosCut", "edit-cut", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MemosDelete", "edit-delete", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MemosPaste", "edit-paste", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MemosPrint", "document-print", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/commands/MemosPrintPreview", "document-print-preview", E_ICON_SIZE_MENU), ++ ++ E_PIXMAP ("/Toolbar/Cut", "edit-cut", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Copy", "edit-copy", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Paste", "edit-paste", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Print", "document-print", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/Delete", "edit-delete", E_ICON_SIZE_LARGE_TOOLBAR), ++ ++ E_PIXMAP_END ++}; ++ + void + memos_control_activate (BonoboControl *control, EMemos *memos) + { +@@ -215,6 +233,8 @@ memos_control_activate (BonoboControl *c + NULL); + g_free (xmlfile); + ++ e_pixmaps_update (uic, pixmaps); ++ + e_memos_setup_view_menus (memos, uic); + + /* Signals from the memos widget; also sensitize the menu items as appropriate */ +diff -up evolution-2.12.1/calendar/gui/e-cal-popup.c.icon-names evolution-2.12.1/calendar/gui/e-cal-popup.c +--- evolution-2.12.1/calendar/gui/e-cal-popup.c.icon-names 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-cal-popup.c 2007-10-15 22:34:23.000000000 -0400 +@@ -276,9 +276,9 @@ ecalp_part_popup_set_background(EPopup * + static const EPopupItem ecalp_standard_part_apps_bar = { E_POPUP_BAR, "99.object" }; + + static ECalPopupItem ecalp_attachment_object_popups[] = { +- { E_POPUP_ITEM, "00.attach.00", N_("_Save As..."), ecalp_part_popup_saveas, NULL, "stock_save-as", E_CAL_POPUP_ATTACHMENTS_ONE }, ++ { E_POPUP_ITEM, "00.attach.00", N_("_Save As..."), ecalp_part_popup_saveas, NULL, "document-save-as", E_CAL_POPUP_ATTACHMENTS_ONE }, + { E_POPUP_ITEM, "00.attach.10", N_("Set as _Background"), ecalp_part_popup_set_background, NULL, NULL, E_CAL_POPUP_ATTACHMENTS_IMAGE }, +- { E_POPUP_ITEM, "00.attach.20", N_("_Save Selected"), ecalp_part_popup_save_selected, NULL, "stock_save-as", E_CAL_POPUP_ATTACHMENTS_MULTIPLE }, ++ { E_POPUP_ITEM, "00.attach.20", N_("_Save Selected"), ecalp_part_popup_save_selected, NULL, "document-save-as", E_CAL_POPUP_ATTACHMENTS_MULTIPLE }, + { E_POPUP_BAR, "05.attach", }, + }; + +diff -up evolution-2.12.1/calendar/gui/e-week-view.c.icon-names evolution-2.12.1/calendar/gui/e-week-view.c +--- evolution-2.12.1/calendar/gui/e-week-view.c.icon-names 2007-10-15 22:34:22.000000000 -0400 ++++ evolution-2.12.1/calendar/gui/e-week-view.c 2007-10-15 22:34:23.000000000 -0400 +@@ -695,7 +695,7 @@ e_week_view_realize (GtkWidget *widget) + + /* Create the pixmaps. */ + week_view->reminder_icon = e_icon_factory_get_icon ("stock_bell", E_ICON_SIZE_MENU); +- week_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); ++ week_view->recurrence_icon = e_icon_factory_get_icon ("view-refresh", E_ICON_SIZE_MENU); + week_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); + week_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); + week_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); diff --git a/evolution-2.11.92-mail-attachment.patch b/evolution-2.11.92-mail-attachment.patch new file mode 100644 index 0000000..6197ee7 --- /dev/null +++ b/evolution-2.11.92-mail-attachment.patch @@ -0,0 +1,129 @@ +diff -up evolution-2.11.92/mail/em-folder-browser.c.mail-attachment evolution-2.11.92/mail/em-folder-browser.c +--- evolution-2.11.92/mail/em-folder-browser.c.mail-attachment 2007-09-11 18:57:27.000000000 -0400 ++++ evolution-2.11.92/mail/em-folder-browser.c 2007-09-11 18:58:15.000000000 -0400 +@@ -218,7 +218,7 @@ static EMFBSearchBarItem temp_view_items + {{ N_("Read Messages"), VIEW_READ_MESSAGES, 0 }, "stock_mail-open"}, + {{ N_("Recent Messages"), VIEW_RECENT_MESSAGES, 0 }, NULL}, + {{ N_("Last 5 Days' Messages"), VIEW_LAST_FIVE_DAYS, 0 }, NULL}, +- {{ N_("Messages with Attachments"), VIEW_WITH_ATTACHMENTS, 0 }, "stock_attach"}, ++ {{ N_("Messages with Attachments"), VIEW_WITH_ATTACHMENTS, 0 }, "mail-attachment"}, + {{ N_("Important Messages"), VIEW_MESSAGES_MARKED_AS_IMPORTANT, 0}, "emblem-important"}, + {{ N_("Messages Not Junk"), VIEW_NOT_JUNK, 0 }, "stock_not-spam"}, + /* { NULL, 0, NULL }, */ +diff -up evolution-2.11.92/mail/message-list.c.mail-attachment evolution-2.11.92/mail/message-list.c +--- evolution-2.11.92/mail/message-list.c.mail-attachment 2007-09-11 18:57:27.000000000 -0400 ++++ evolution-2.11.92/mail/message-list.c 2007-09-11 18:58:15.000000000 -0400 +@@ -223,7 +223,7 @@ static struct { + { "stock_mail-unread-multiple", NULL }, + { "stock_mail-open-multiple", NULL }, + { NULL, NULL }, +- { "stock_attach", NULL }, ++ { "mail-attachment", NULL }, + { "emblem-important", NULL }, + { "stock_score-lowest", NULL }, + { "stock_score-lower", NULL }, +diff -up evolution-2.11.92/widgets/misc/e-attachment-bar.c.mail-attachment evolution-2.11.92/widgets/misc/e-attachment-bar.c +--- evolution-2.11.92/widgets/misc/e-attachment-bar.c.mail-attachment 2007-09-02 14:57:07.000000000 -0400 ++++ evolution-2.11.92/widgets/misc/e-attachment-bar.c 2007-09-11 18:58:15.000000000 -0400 +@@ -281,8 +281,7 @@ update (EAttachmentBar *bar) + attachment = priv->attachments->pdata[i]; + + if (!attachment->is_available_local || !attachment->body) { +- /* stock_attach would be better, but its fugly scaled up */ +- if ((pixbuf = e_icon_factory_get_icon("stock_unknown", E_ICON_SIZE_DIALOG))) { ++ if ((pixbuf = e_icon_factory_get_icon("mail-attachment", E_ICON_SIZE_DIALOG))) { + attachment->index = gnome_icon_list_append_pixbuf (icon_list, pixbuf, NULL, ""); + g_object_unref (pixbuf); + } +@@ -373,8 +372,7 @@ update (EAttachmentBar *bar) + pixbuf = e_icon_for_mime_type (mime_type, 48); + if (pixbuf == NULL) { + g_warning("cannot find icon for mime type %s (installation problem?)", mime_type); +- /* stock_attach would be better, but its fugly scaled up */ +- pixbuf = e_icon_factory_get_icon("stock_unknown", E_ICON_SIZE_DIALOG); ++ pixbuf = e_icon_factory_get_icon("mail-attachment", E_ICON_SIZE_DIALOG); + } + g_free (mime_type); + } +diff -up evolution-2.11.92/composer/e-msg-composer.c.mail-attachment evolution-2.11.92/composer/e-msg-composer.c +--- evolution-2.11.92/composer/e-msg-composer.c.mail-attachment 2007-09-02 14:56:48.000000000 -0400 ++++ evolution-2.11.92/composer/e-msg-composer.c 2007-09-11 18:58:15.000000000 -0400 +@@ -2208,11 +2208,11 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixcache [] = { +- E_PIXMAP ("/Toolbar/FileAttach", "stock_attach", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/Toolbar/FileAttach", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/FileSend", "stock_mail-send", E_ICON_SIZE_LARGE_TOOLBAR), + E_PIXMAP ("/Toolbar/FileSaveDraft", "stock_save", E_ICON_SIZE_LARGE_TOOLBAR) , + +-/* E_PIXMAP ("/menu/Insert/FileAttach", "stock_attach", E_ICON_SIZE_LARGE_TOOLBAR), */ ++/* E_PIXMAP ("/menu/Insert/FileAttach", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), */ + E_PIXMAP ("/commands/FileSend", "stock_mail-send", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/FileSave", "stock_save", E_ICON_SIZE_MENU), + E_PIXMAP ("/commands/FileSaveAs", "stock_save-as", E_ICON_SIZE_MENU), +@@ -3989,7 +3989,7 @@ create_composer (int visible_mask) + gtk_misc_set_alignment (GTK_MISC (p->attachment_expander_num), 1.0, 0.5); + expander_hbox = gtk_hbox_new (FALSE, 0); + +- p->attachment_expander_icon = e_icon_factory_get_image ("stock_attach", E_ICON_SIZE_MENU); ++ p->attachment_expander_icon = e_icon_factory_get_image ("mail-attachment", E_ICON_SIZE_MENU); + gtk_misc_set_alignment (GTK_MISC (p->attachment_expander_icon), 1, 0.5); + gtk_widget_set_size_request (p->attachment_expander_icon, 100, -1); + +diff -up evolution-2.11.92/calendar/gui/e-week-view.c.mail-attachment evolution-2.11.92/calendar/gui/e-week-view.c +--- evolution-2.11.92/calendar/gui/e-week-view.c.mail-attachment 2007-09-11 18:57:27.000000000 -0400 ++++ evolution-2.11.92/calendar/gui/e-week-view.c 2007-09-11 18:58:16.000000000 -0400 +@@ -697,7 +697,7 @@ e_week_view_realize (GtkWidget *widget) + week_view->reminder_icon = e_icon_factory_get_icon ("stock_bell", E_ICON_SIZE_MENU); + week_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); + week_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); +- week_view->attach_icon = e_icon_factory_get_icon ("stock_attach", E_ICON_SIZE_MENU); ++ week_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); + week_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); + } + +diff -up evolution-2.11.92/calendar/gui/dialogs/comp-editor.c.mail-attachment evolution-2.11.92/calendar/gui/dialogs/comp-editor.c +--- evolution-2.11.92/calendar/gui/dialogs/comp-editor.c.mail-attachment 2007-09-02 14:57:08.000000000 -0400 ++++ evolution-2.11.92/calendar/gui/dialogs/comp-editor.c 2007-09-11 18:58:15.000000000 -0400 +@@ -1486,8 +1486,8 @@ static BonoboUIVerb verbs [] = { + }; + + static EPixmap pixmaps[] = { +- E_PIXMAP ("/Toolbar/InsertAttachments", "stock_attach", E_ICON_SIZE_LARGE_TOOLBAR), +- E_PIXMAP ("/menu/Insert/Attachments/InsertAttachments", "stock_attach", E_ICON_SIZE_MENU), ++ E_PIXMAP ("/Toolbar/InsertAttachments", "mail-attachment", E_ICON_SIZE_LARGE_TOOLBAR), ++ E_PIXMAP ("/menu/Insert/Attachments/InsertAttachments", "mail-attachment", E_ICON_SIZE_MENU), + + E_PIXMAP_END + }; +@@ -1546,7 +1546,7 @@ setup_widgets (CompEditor *editor) + gtk_misc_set_alignment (GTK_MISC (priv->attachment_expander_num), 1.0, 0.5); + expander_hbox = gtk_hbox_new (FALSE, 0); + +- attachment_pixbuf = e_icon_factory_get_icon ("stock_attach", E_ICON_SIZE_MENU); ++ attachment_pixbuf = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); + priv->attachment_expander_icon = gtk_image_new_from_pixbuf (attachment_pixbuf); + gtk_misc_set_alignment (GTK_MISC (priv->attachment_expander_icon), 1, 0.5); + gtk_widget_set_size_request (priv->attachment_expander_icon, 100, -1); +diff -up evolution-2.11.92/calendar/gui/e-day-view.c.mail-attachment evolution-2.11.92/calendar/gui/e-day-view.c +--- evolution-2.11.92/calendar/gui/e-day-view.c.mail-attachment 2007-09-11 18:57:27.000000000 -0400 ++++ evolution-2.11.92/calendar/gui/e-day-view.c 2007-09-11 18:58:16.000000000 -0400 +@@ -1423,7 +1423,7 @@ e_day_view_realize (GtkWidget *widget) + day_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); + day_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); + day_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); +- day_view->attach_icon = e_icon_factory_get_icon ("stock_attach", E_ICON_SIZE_MENU); ++ day_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); + + + /* Set the canvas item colors. */ +@@ -1497,7 +1497,7 @@ e_day_view_realize (GtkWidget *widget) + day_view->recurrence_icon = e_icon_factory_get_icon ("stock_refresh", E_ICON_SIZE_MENU); + day_view->timezone_icon = e_icon_factory_get_icon ("stock_timezone", E_ICON_SIZE_MENU); + day_view->meeting_icon = e_icon_factory_get_icon ("stock_people", E_ICON_SIZE_MENU); +- day_view->attach_icon = e_icon_factory_get_icon ("stock_attach", E_ICON_SIZE_MENU); ++ day_view->attach_icon = e_icon_factory_get_icon ("mail-attachment", E_ICON_SIZE_MENU); + + + /* Set the canvas item colors. */ diff --git a/evolution-2.12.1-source-changed-event.patch b/evolution-2.12.1-source-changed-event.patch new file mode 100644 index 0000000..57195f7 --- /dev/null +++ b/evolution-2.12.1-source-changed-event.patch @@ -0,0 +1,12 @@ +diff -up evolution-2.12.1/calendar/gui/dialogs/task-page.c.source-changed-event evolution-2.12.1/calendar/gui/dialogs/task-page.c +--- evolution-2.12.1/calendar/gui/dialogs/task-page.c.source-changed-event 2007-11-16 19:07:11.000000000 +0100 ++++ evolution-2.12.1/calendar/gui/dialogs/task-page.c 2007-11-16 19:08:06.000000000 +0100 +@@ -1837,7 +1837,7 @@ init_widgets (TaskPage *tpage) + G_CALLBACK (categories_clicked_cb), tpage); + + /* Source selector */ +- g_signal_connect((priv->source_selector), "source_changed", ++ g_signal_connect((priv->source_selector), "changed", + G_CALLBACK (source_changed_cb), tpage); + + /* Connect the default signal handler to use to make sure the "changed" diff --git a/evolution-2.12.3-CVE-2008-0072.patch b/evolution-2.12.3-CVE-2008-0072.patch new file mode 100644 index 0000000..793b977 --- /dev/null +++ b/evolution-2.12.3-CVE-2008-0072.patch @@ -0,0 +1,48 @@ +diff -up evolution-2.12.3/mail/em-format.c.CVE-2008-0072 evolution-2.12.3/mail/em-format.c +--- evolution-2.12.3/mail/em-format.c.CVE-2008-0072 2007-10-12 02:56:01.000000000 -0400 ++++ evolution-2.12.3/mail/em-format.c 2008-03-04 15:59:30.000000000 -0500 +@@ -1193,7 +1193,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) +@@ -1350,7 +1350,7 @@ emf_multipart_encrypted(EMFormat *emf, C + if (valid == NULL) { + em_format_format_error(emf, stream, ex->desc?_("Could not parse PGP/MIME message"):_("Could not parse PGP/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) +@@ -1515,7 +1515,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) +@@ -1586,7 +1586,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); +@@ -1657,7 +1657,7 @@ emf_inlinepgp_encrypted(EMFormat *emf, C + if (!valid) { + em_format_format_error(emf, stream, ex->desc?_("Could not parse PGP message"):_("Could not parse PGP 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.12.3-CVE-2008-1108.patch b/evolution-2.12.3-CVE-2008-1108.patch new file mode 100644 index 0000000..8c01cfb --- /dev/null +++ b/evolution-2.12.3-CVE-2008-1108.patch @@ -0,0 +1,310 @@ +diff -up evolution-2.12.3/calendar/gui/e-itip-control.c.CVE-2008-1108 evolution-2.12.3/calendar/gui/e-itip-control.c +--- evolution-2.12.3/calendar/gui/e-itip-control.c.CVE-2008-1108 2008-06-03 16:49:05.000000000 -0400 ++++ evolution-2.12.3/calendar/gui/e-itip-control.c 2008-06-03 16:51:33.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_return_if_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.12.3-CVE-2008-1109.patch b/evolution-2.12.3-CVE-2008-1109.patch new file mode 100644 index 0000000..9a22564 --- /dev/null +++ b/evolution-2.12.3-CVE-2008-1109.patch @@ -0,0 +1,61 @@ +diff -up evolution-2.12.3/calendar/gui/itip-utils.c.CVE-2008-1109 evolution-2.12.3/calendar/gui/itip-utils.c +--- evolution-2.12.3/calendar/gui/itip-utils.c.CVE-2008-1109 2007-10-12 03:04:17.000000000 -0400 ++++ evolution-2.12.3/calendar/gui/itip-utils.c 2008-06-03 16:51:42.000000000 -0400 +@@ -176,50 +176,16 @@ get_attendee_if_attendee_sentby_is_user + } + + 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.12.3-no-drag-finish.patch b/evolution-2.12.3-no-drag-finish.patch new file mode 100644 index 0000000..28704f4 --- /dev/null +++ b/evolution-2.12.3-no-drag-finish.patch @@ -0,0 +1,36 @@ +diff -up evolution-2.12.3/mail/em-folder-tree.c.no-drag-finish evolution-2.12.3/mail/em-folder-tree.c +--- evolution-2.12.3/mail/em-folder-tree.c.no-drag-finish 2008-03-03 18:34:41.000000000 +0100 ++++ evolution-2.12.3/mail/em-folder-tree.c 2008-03-03 18:34:45.000000000 +0100 +@@ -927,23 +927,6 @@ emft_drop_async__exec (struct _DragDataR + } + + static void +-emft_drop_async__done (struct _DragDataReceivedAsync *m) +-{ +- gboolean success, delete; +- +- /* ?? */ +- if (m->aborted) { +- success = FALSE; +- delete = FALSE; +- } else { +- success = !camel_exception_is_set (&m->base.ex); +- delete = success && m->move && !m->moved; +- } +- +- gtk_drag_finish (m->context, success, delete, GDK_CURRENT_TIME); +-} +- +-static void + emft_drop_async__free (struct _DragDataReceivedAsync *m) + { + g_object_unref(m->context); +@@ -958,7 +941,7 @@ static MailMsgInfo emft_drop_async_info + sizeof (struct _DragDataReceivedAsync), + (MailMsgDescFunc) emft_drop_async__desc, + (MailMsgExecFunc) emft_drop_async__exec, +- (MailMsgDoneFunc) emft_drop_async__done, ++ NULL, + (MailMsgFreeFunc) emft_drop_async__free + }; + 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..f5ac169 --- /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.hide-switcher-buttons-by-default 2005-10-26 16:21:15.000000000 -0400 ++++ evolution-2.4.1/shell/apps_evolution_shell.schemas.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..31726ab --- /dev/null +++ b/evolution-2.5.4-fix-conduit-dir.patch @@ -0,0 +1,88 @@ +--- evolution-2.11.3/addressbook/conduit/Makefile.am.fix-conduit-dir 2007-06-03 11:07:44.000000000 -0400 ++++ evolution-2.11.3/addressbook/conduit/Makefile.am 2007-06-04 12:55:32.000000000 -0400 +@@ -28,7 +28,7 @@ e-address.conduit: e-address.conduit.in + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-address.conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.11.3/addressbook/conduit/Makefile.in.fix-conduit-dir 2007-06-04 07:36:46.000000000 -0400 ++++ evolution-2.11.3/addressbook/conduit/Makefile.in 2007-06-04 12:55:53.000000000 -0400 +@@ -459,7 +459,7 @@ libeaddress_conduit_la_LIBADD = \ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_ADDRESSBOOK_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-address.conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.11.3/calendar/conduits/todo/Makefile.am.fix-conduit-dir 2007-06-03 11:08:16.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/todo/Makefile.am 2007-06-04 12:56:19.000000000 -0400 +@@ -25,7 +25,7 @@ e-todo.conduit: e-todo.conduit.in + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-todo.conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.11.3/calendar/conduits/todo/Makefile.in.fix-conduit-dir 2007-06-04 07:36:51.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/todo/Makefile.in 2007-06-04 12:56:28.000000000 -0400 +@@ -456,7 +456,7 @@ libetodo_conduit_la_LIBADD = \ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-todo.conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.11.3/calendar/conduits/memo/Makefile.am.fix-conduit-dir 2007-06-03 11:08:16.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/memo/Makefile.am 2007-06-04 12:56:49.000000000 -0400 +@@ -25,7 +25,7 @@ e-memo.conduit: e-memo.conduit.in + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-memo.conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.11.3/calendar/conduits/memo/Makefile.in.fix-conduit-dir 2007-06-04 07:36:50.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/memo/Makefile.in 2007-06-04 12:56:40.000000000 -0400 +@@ -456,7 +456,7 @@ libememo_conduit_la_LIBADD = \ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-memo.conduit + BUILT_SOURCES = $(conduit_DATA) + CLEANFILES = $(BUILT_SOURCES) +--- evolution-2.11.3/calendar/conduits/calendar/Makefile.am.fix-conduit-dir 2007-06-03 11:08:16.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/calendar/Makefile.am 2007-06-04 12:57:02.000000000 -0400 +@@ -25,7 +25,7 @@ e-calendar.conduit: e-calendar.conduit.i + -e 's^\@BASE_VERSION\@^$(BASE_VERSION)^g' \ + $< > $@ + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-calendar.conduit + + BUILT_SOURCES = $(conduit_DATA) +--- evolution-2.11.3/calendar/conduits/calendar/Makefile.in.fix-conduit-dir 2007-06-04 07:36:50.000000000 -0400 ++++ evolution-2.11.3/calendar/conduits/calendar/Makefile.in 2007-06-04 12:57:11.000000000 -0400 +@@ -458,7 +458,7 @@ libecalendar_conduit_la_LIBADD = \ + $(top_builddir)/widgets/misc/libemiscwidgets.la \ + $(EVOLUTION_CALENDAR_CONDUIT_LIBS) + +-conduitdir = $(datadir)/gnome-pilot/conduits/ ++conduitdir = $(libdir)/gnome-pilot/conduits/ + conduit_DATA = e-calendar.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..a234736 --- /dev/null +++ b/evolution-2.7.1-no-gnome-common.patch @@ -0,0 +1,154 @@ +diff -up evolution-2.12.1/configure.in.no-gnome-common evolution-2.12.1/configure.in +--- evolution-2.12.1/configure.in.no-gnome-common 2007-10-15 08:30:42.000000000 +0200 ++++ evolution-2.12.1/configure.in 2007-10-15 17:54:01.000000000 +0200 +@@ -1282,9 +1282,6 @@ AC_SUBST_FILE(EVO_MARSHAL_RULE) + 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 -up evolution-2.12.1/configure.no-gnome-common evolution-2.12.1/configure +--- evolution-2.12.1/configure.no-gnome-common 2007-10-15 17:54:01.000000000 +0200 ++++ evolution-2.12.1/configure 2007-10-15 18:47:03.000000000 +0200 +@@ -31564,137 +31564,6 @@ EVO_MARSHAL_RULE=$srcdir/marshal.mk + + + +- # 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); } && { +- test -z "$ac_c_werror_flag" || +- test ! -s conftest.err +- } && test -s conftest.$ac_objext; 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" 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-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-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.1-kill-ethread.patch b/evolution-2.8.1-kill-ethread.patch new file mode 100644 index 0000000..81916ec --- /dev/null +++ b/evolution-2.8.1-kill-ethread.patch @@ -0,0 +1,7204 @@ +--- evolution-2.12.2/plugins/folder-unsubscribe/folder-unsubscribe.c.kill-ethread 2007-10-12 08:55:23.000000000 +0200 ++++ evolution-2.12.2/plugins/folder-unsubscribe/folder-unsubscribe.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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); + } +--- evolution-2.12.2/plugins/mark-all-read/mark-all-read.c.kill-ethread 2007-10-12 08:55:30.000000000 +0200 ++++ evolution-2.12.2/plugins/mark-all-read/mark-all-read.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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 +--- evolution-2.12.2/plugins/save-attachments/save-attachments.c.kill-ethread 2007-10-12 08:55:35.000000000 +0200 ++++ evolution-2.12.2/plugins/save-attachments/save-attachments.c 2007-11-27 12:06:04.000000000 +0100 +@@ -403,5 +403,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); + } +--- evolution-2.12.2/plugins/groupwise-features/share-folder-common.c.kill-ethread 2007-10-12 08:55:25.000000000 +0200 ++++ evolution-2.12.2/plugins/groupwise-features/share-folder-common.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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; + } +--- evolution-2.12.2/plugins/mailing-list-actions/mailing-list-actions.c.kill-ethread 2007-10-12 08:55:34.000000000 +0200 ++++ evolution-2.12.2/plugins/mailing-list-actions/mailing-list-actions.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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) +--- evolution-2.12.2/plugins/exchange-operations/exchange-folder.c.kill-ethread 2007-10-12 08:55:27.000000000 +0200 ++++ evolution-2.12.2/plugins/exchange-operations/exchange-folder.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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); + + + } +--- evolution-2.12.2/calendar/gui/alarm-notify/alarm-notify.c.kill-ethread 2007-10-12 09:04:07.000000000 +0200 ++++ evolution-2.12.2/calendar/gui/alarm-notify/alarm-notify.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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 +--- evolution-2.12.2/calendar/gui/alarm-notify/alarm-notify.h.kill-ethread 2007-10-12 09:04:07.000000000 +0200 ++++ evolution-2.12.2/calendar/gui/alarm-notify/alarm-notify.h 2007-11-27 12:06:04.000000000 +0100 +@@ -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; + +--- evolution-2.12.2/calendar/gui/alarm-notify/alarm-queue.c.kill-ethread 2007-10-12 09:04:07.000000000 +0200 ++++ evolution-2.12.2/calendar/gui/alarm-notify/alarm-queue.c 2007-11-27 12:06:04.000000000 +0100 +@@ -97,9 +97,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 */ +@@ -181,6 +178,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. + */ +@@ -219,47 +250,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; ++ struct _midnight_refresh_msg *msg; + +- list = malloc (sizeof (struct _midnight_refresh_msg)); ++ msg = g_slice_new (struct _midnight_refresh_msg); ++ msg->header.func = (MessageFunc) midnight_refresh_async; ++ msg->remove = TRUE; + +- list->remove = TRUE; +- msg->data = list; +- +- 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 */ +@@ -657,6 +682,7 @@ remove_comp (ClientAlarms *ca, ECalCompo + * alarms. + */ + struct _query_msg { ++ Message header; + ECal *client; + GList *objects; + gpointer data; +@@ -690,7 +716,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; +@@ -699,13 +725,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) +@@ -799,43 +824,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; +- +- /* 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; ++ struct _query_msg *msg; + +- 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))); + +@@ -848,27 +868,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); + } + + +@@ -1010,20 +1025,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); +@@ -1041,37 +1055,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)); +@@ -1110,28 +1120,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; + +@@ -1161,55 +1168,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; ++ Message *msg; + +- /* These two structures will be freed by the msg destroy function*/ +- msg = malloc (sizeof (AlarmMsg)); +- msg->receive_msg = tray_list_remove_async; ++ msg = g_slice_new (Message); ++ msg->func = tray_list_remove_async; + +- msg->data = NULL; +- +- 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; + +- d(printf("%s:%d (tray_list_remove_data) - 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_remove_data_async; ++ msg->data = data; ++ ++ message_push ((Message *) msg); + } + + static void +@@ -1416,29 +1418,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 */ +@@ -1835,21 +1832,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; +@@ -1980,14 +1969,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); +@@ -2018,6 +2008,8 @@ static void alarm_queue_add_async (EThre + G_CALLBACK (cal_opened_cb), + ca); + } ++ ++ g_slice_free (struct _alarm_client_msg, msg); + } + + /** +@@ -2037,20 +2029,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 */ +@@ -2102,11 +2087,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); +@@ -2143,6 +2127,8 @@ 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); + } + + /** alarm_queue_remove_client +@@ -2155,24 +2141,16 @@ alarm_queue_remove_async (EThread *e, Al + void + alarm_queue_remove_client (ECal *client, gboolean immediately) + { +- 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; +- +- d(printf("%s:%d (alarm_queue_remove_client) - Posting a task\n",__FILE__, __LINE__)); +- if (immediately) { +- alarm_queue_remove_async (NULL, msg, NULL); +- g_free (list); +- g_free (msg); +- } else +- e_thread_put(alarm_operation_thread, (EMsg *)msg); ++ msg = g_slice_new (struct _alarm_client_msg); ++ msg->header.func = (MessageFunc) alarm_queue_remove_async; ++ msg->client = client; ++ ++ if (immediately) ++ alarm_queue_remove_async (msg); ++ else ++ message_push ((Message *) msg); + } + + /* Update non-time related variables for various structures on modification of an existing component +--- evolution-2.12.2/mail/em-folder-utils.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-folder-utils.c 2007-11-27 12:06:04.000000000 +0100 +@@ -85,7 +85,7 @@ emfu_is_special_local_folder (const char + } + + struct _EMCopyFolders { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + CamelStore *fromstore; +@@ -97,18 +97,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; +@@ -116,7 +113,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); +@@ -156,8 +153,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 */ +@@ -166,16 +163,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) +@@ -186,7 +183,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); +@@ -227,10 +224,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); + +@@ -238,11 +233,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 +@@ -251,7 +247,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); +@@ -259,9 +255,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; + } +@@ -558,7 +554,7 @@ em_folder_utils_rename_folder (CamelFold + } + + struct _EMCreateFolder { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + CamelStore *store; +@@ -582,41 +578,33 @@ struct _EMCreateFolderTempData + char *uri; + }; + +-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); +@@ -624,11 +612,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 + }; + + +@@ -649,7 +638,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); +@@ -660,8 +649,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; + } +--- evolution-2.12.2/mail/mail-ops.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-ops.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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_return_if_fail (uids != NULL); + g_return_if_fail (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 = (void (*) (CamelFolder *, const char *, CamelMimeMessage *, void *)) 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 = (void (*) (CamelFolder *, const char *, CamelMimeMessage *, void *)) 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,61 +2274,59 @@ 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; + } + + /* ** Prepare OFFLINE ***************************************************** */ + +-static char *prepare_offline_desc(struct _mail_msg *mm, int done) ++static char * ++prepare_offline_desc (struct _set_offline_msg *m, int done) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; + char *service_name = camel_service_get_name (CAMEL_SERVICE (m->store), TRUE); + char *msg; + +- msg = g_strdup_printf(_("Preparing account '%s' for offline"), service_name); ++ msg = g_strdup_printf (_("Preparing account '%s' for offline"), service_name); + g_free(service_name); + + return msg; + } + +-static void prepare_offline_do(struct _mail_msg *mm) ++static void ++prepare_offline_exec (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; +- + camel_disco_store_prepare_for_offline (CAMEL_DISCO_STORE (m->store), +- &mm->ex); ++ &m->base.ex); + } + +-static void prepare_offline_done(struct _mail_msg *mm) ++static void ++prepare_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); ++ m->done (m->store, m->data); + } + +-static void prepare_offline_free(struct _mail_msg *mm) ++static void ++prepare_offline_free (struct _set_offline_msg *m) + { +- struct _set_offline_msg *m = (struct _set_offline_msg *)mm; +- +- camel_object_unref(m->store); ++ camel_object_unref (m->store); + } + +-static struct _mail_msg_op prepare_offline_op = { +- prepare_offline_desc, +- prepare_offline_do, +- prepare_offline_done, +- prepare_offline_free, ++static MailMsgInfo prepare_offline_info = { ++ sizeof (struct _set_offline_msg), ++ (MailMsgDescFunc) prepare_offline_desc, ++ (MailMsgExecFunc) prepare_offline_exec, ++ (MailMsgDoneFunc) prepare_offline_done, ++ (MailMsgFreeFunc) prepare_offline_free + }; + + int +@@ -2404,14 +2339,14 @@ mail_store_prepare_offline (CamelStore * + * thread won't get queued behind a hung connect op. + */ + +- m = mail_msg_new(&prepare_offline_op, NULL, sizeof(*m)); ++ m = mail_msg_new(&prepare_offline_info); + m->store = store; + camel_object_ref(store); + m->data = NULL; + m->done = NULL; + +- id = m->msg.seq; +- e_thread_put(mail_thread_new, (EMsg *)m); ++ id = m->base.seq; ++ mail_msg_unordered_push (m); + + return id; + } +@@ -2428,7 +2363,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; +@@ -2438,51 +2373,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 +@@ -2491,14 +2422,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; + } +--- evolution-2.12.2/mail/mail-mt.h.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-mt.h 2007-11-27 12:06:04.000000000 +0100 +@@ -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; +--- evolution-2.12.2/mail/mail-component.c.kill-ethread 2007-11-26 03:30:12.000000000 +0100 ++++ evolution-2.12.2/mail/mail-component.c 2007-11-27 12:06:04.000000000 +0100 +@@ -1001,7 +1001,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"); +--- evolution-2.12.2/mail/mail-vfolder.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-vfolder.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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_return_if_fail (pthread_equal(pthread_self(), mail_gui_thread)); ++ g_return_if_fail (mail_in_main_thread()); + + is_ignore = uri_is_ignore(store, curi); + +@@ -543,7 +531,7 @@ mail_vfolder_delete_uri(CamelStore *stor + + d(printf ("Deleting uri to check: %s\n", uri)); + +- g_return_if_fail (pthread_equal(pthread_self(), mail_gui_thread)); ++ g_return_if_fail (mail_in_main_thread()); + + changed = g_string_new (""); + +@@ -627,7 +615,7 @@ mail_vfolder_rename_uri(CamelStore *stor + if (context == NULL || uri_is_spethal(store, cfrom) || uri_is_spethal(store, cto)) + return; + +- g_return_if_fail (pthread_equal(pthread_self(), mail_gui_thread)); ++ g_return_if_fail (mail_in_main_thread()); + + from = em_uri_from_camel(cfrom); + to = em_uri_from_camel(cto); +--- evolution-2.12.2/mail/em-folder-view.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-folder-view.c 2007-11-27 12:06:04.000000000 +0100 +@@ -71,6 +71,7 @@ + #include + + #include ++#include + + #include "menus/gal-view-etable.h" + #include "menus/gal-view-factory-etable.h" +@@ -777,7 +778,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 +@@ -1752,7 +1753,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 +@@ -1850,7 +1851,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 +@@ -2421,7 +2422,7 @@ emfv_message_selected_timeout(void *data + emfv->displayed_uid); + gtk_html_stream_close(hstream, GTK_HTML_STREAM_OK); + */ +- 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); +--- evolution-2.12.2/mail/em-folder-properties.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-folder-properties.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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); + } +--- evolution-2.12.2/mail/mail-send-recv.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-send-recv.c 2007-11-27 12:06:04.000000000 +0100 +@@ -770,23 +770,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; +@@ -808,17 +807,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++) +@@ -827,11 +823,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 +@@ -864,13 +861,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); + } +--- evolution-2.12.2/mail/em-format-html.c.kill-ethread 2007-11-26 03:30:12.000000000 +0100 ++++ evolution-2.12.2/mail/em-format-html.c 2007-11-27 12:06:04.000000000 +0100 +@@ -165,7 +165,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; + } + +@@ -1205,7 +1205,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; +@@ -1215,14 +1215,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; +@@ -1307,10 +1308,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; +@@ -1318,10 +1318,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) { +@@ -1337,11 +1336,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 +@@ -1352,7 +1352,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; + } + +@@ -1380,7 +1380,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 { + if (p->last_part != m->message) { +@@ -1405,8 +1405,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; +@@ -1430,11 +1430,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; +--- evolution-2.12.2/mail/em-sync-stream.h.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-sync-stream.h 2007-11-27 12:06:04.000000000 +0100 +@@ -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 */ +--- evolution-2.12.2/mail/em-subscribe-editor.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-subscribe-editor.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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); + } +--- evolution-2.12.2/mail/em-format-html-print.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-format-html-print.c 2007-11-27 12:06:04.000000000 +0100 +@@ -228,7 +228,7 @@ em_format_html_print_message (EMFormatHT + g_object_ref (efhp); + + mail_get_message ( +- folder, uid, emfhp_got_message, efhp, mail_thread_new); ++ folder, uid, emfhp_got_message, efhp, mail_msg_unordered_push); + } + + void +--- evolution-2.12.2/mail/mail-session.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-session.c 2007-11-27 12:06:04.000000000 +0100 +@@ -35,7 +35,7 @@ + #include + + #include +-#include ++#include + + #include /* FIXME: this is where camel_init is defined, it shouldn't include everything else */ + #include +@@ -264,148 +264,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_return_val_if_fail (m == r, FALSE); ++ 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 * +@@ -541,7 +538,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) + { +@@ -550,7 +547,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); +@@ -563,7 +560,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); + } + +@@ -686,22 +683,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); + } + } + } +--- evolution-2.12.2/mail/message-list.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/message-list.c 2007-11-27 12:06:04.000000000 +0100 +@@ -1841,7 +1841,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; + +@@ -1858,11 +1858,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 +@@ -1870,13 +1868,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); +@@ -1888,9 +1884,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; + + /* ?? */ +@@ -1898,7 +1893,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; + } + +@@ -1906,10 +1901,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); + +@@ -1917,18 +1910,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 +@@ -1955,7 +1949,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[] = { +@@ -1985,7 +1979,7 @@ ml_tree_drag_data_received (ETree *tree, + if (!ml->folder || 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; +@@ -3721,7 +3715,7 @@ save_hide_state (MessageList *ml) + + /* ** REGENERATE MESSAGELIST ********************************************** */ + struct _regen_list_msg { +- struct _mail_msg msg; ++ MailMsg base; + + int complete; + +@@ -3749,16 +3743,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; +@@ -3788,7 +3781,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; + +@@ -3798,23 +3791,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); +@@ -3889,7 +3882,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) +@@ -3918,17 +3911,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) +@@ -3979,9 +3970,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); +@@ -4009,11 +3999,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 +@@ -4023,7 +4014,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; +@@ -4039,7 +4030,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); +@@ -4051,7 +4042,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; + } + } +@@ -4086,7 +4077,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); +--- evolution-2.12.2/mail/em-folder-tree.c.kill-ethread 2007-11-26 03:30:12.000000000 +0100 ++++ evolution-2.12.2/mail/em-folder-tree.c 2007-11-27 12:06:04.000000000 +0100 +@@ -835,7 +835,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; +@@ -860,17 +860,16 @@ 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((char *)m->selection->data, 0, &m->msg.ex))) ++ if (!(src = mail_tool_uri_to_folder((char *)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); + camel_object_unref(src); + } + +-static char * +-emft_drop_async_desc (struct _mail_msg *mm, int done) ++static gchar * ++emft_drop_async__desc (struct _DragDataReceivedAsync *m) + { +- struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; + CamelURL *url; + char *buf; + +@@ -894,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 */ +@@ -904,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 */ +@@ -929,10 +927,25 @@ emft_drop_async_drop (struct _mail_msg * + } + + static void +-emft_drop_async_free (struct _mail_msg *mm) ++emft_drop_async__done (struct _DragDataReceivedAsync *m) + { +- struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; ++ gboolean success, delete; + ++ /* ?? */ ++ if (m->aborted) { ++ success = FALSE; ++ delete = FALSE; ++ } else { ++ success = !camel_exception_is_set (&m->base.ex); ++ delete = success && m->move && !m->moved; ++ } ++ ++ gtk_drag_finish (m->context, success, delete, GDK_CURRENT_TIME); ++} ++ ++static void ++emft_drop_async__free (struct _DragDataReceivedAsync *m) ++{ + g_object_unref(m->context); + camel_object_unref(m->store); + g_free(m->full_name); +@@ -941,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, +- NULL, +- 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 +@@ -979,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[] = { +@@ -1035,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; +@@ -1674,7 +1688,7 @@ dump_fi (CamelFolderInfo *fi, int depth) + #endif + + struct _EMFolderTreeGetFolderInfo { +- struct _mail_msg msg; ++ MailMsg base; + + /* input data */ + GtkTreeRowReference *root; +@@ -1687,10 +1701,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); +@@ -1700,18 +1713,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; +@@ -1739,7 +1750,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); +@@ -1794,10 +1805,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); +@@ -1806,11 +1815,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 +@@ -1897,7 +1907,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; +@@ -1906,7 +1916,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 +--- evolution-2.12.2/mail/em-folder-browser.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-folder-browser.c 2007-11-27 12:06:04.000000000 +0100 +@@ -851,7 +851,7 @@ get_view_query (ESearchBar *esb) + + + struct _setup_msg { +- struct _mail_msg msg; ++ MailMsg base; + + CamelFolder *folder; + char *query; +@@ -859,16 +859,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; + +@@ -879,12 +878,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; + } +@@ -908,17 +907,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); +@@ -939,11 +934,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 */ +@@ -953,15 +949,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; + } +--- evolution-2.12.2/mail/em-sync-stream.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-sync-stream.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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_return_if_fail (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); + } +--- evolution-2.12.2/mail/importers/pine-importer.c.kill-ethread 2007-10-12 08:55:56.000000000 +0200 ++++ evolution-2.12.2/mail/importers/pine-importer.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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; + } +--- evolution-2.12.2/mail/importers/mail-importer.c.kill-ethread 2007-10-12 08:55:56.000000000 +0200 ++++ evolution-2.12.2/mail/importers/mail-importer.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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 { +--- evolution-2.12.2/mail/importers/elm-importer.c.kill-ethread 2007-10-12 08:55:56.000000000 +0200 ++++ evolution-2.12.2/mail/importers/elm-importer.c 2007-11-27 12:06:04.000000000 +0100 +@@ -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; + } +--- evolution-2.12.2/mail/mail-ops.h.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-ops.h 2007-11-27 12:06:04.000000000 +0100 +@@ -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, +--- evolution-2.12.2/mail/em-utils.c.kill-ethread 2007-11-27 12:06:03.000000000 +0100 ++++ evolution-2.12.2/mail/em-utils.c 2007-11-27 12:06:04.000000000 +0100 +@@ -1990,7 +1990,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))); + +--- evolution-2.12.2/mail/mail-folder-cache.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/mail-folder-cache.c 2007-11-27 12:06:04.000000000 +0100 +@@ -862,15 +862,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; + +@@ -881,10 +880,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) && +@@ -895,22 +893,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 +@@ -922,11 +919,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 +@@ -971,7 +968,7 @@ mail_note_store(CamelStore *store, Camel + int hook = 0; + + g_return_if_fail (CAMEL_IS_STORE(store)); +- g_return_if_fail (pthread_equal(pthread_self(), mail_gui_thread)); ++ g_return_if_fail (mail_in_main_thread()); + + LOCK(info_lock); + +--- evolution-2.12.2/mail/em-composer-utils.c.kill-ethread 2007-10-12 08:56:01.000000000 +0200 ++++ evolution-2.12.2/mail/em-composer-utils.c 2007-11-27 12:06:04.000000000 +0100 +@@ -553,7 +553,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) { +@@ -1104,7 +1104,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 +@@ -1135,7 +1135,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; + } +@@ -1949,7 +1949,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; + } +@@ -2121,5 +2121,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); + } +--- evolution-2.12.2/mail/mail-mt.c.kill-ethread 2007-11-26 03:30:12.000000000 +0100 ++++ evolution-2.12.2/mail/mail-mt.c 2007-11-27 12:13:02.000000000 +0100 +@@ -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 (priority1 == priority2) ++ return 0; + +- if (m->ops->describe_msg) { +- char *text = m->ops->describe_msg(m, FALSE); +- +-#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); ++} + +- g_io_channel_unref(mail_gui_channel); +- g_io_channel_unref(mail_gui_reply_channel); ++void ++mail_msg_unordered_push (gpointer msg) ++{ ++ static GOnce once = G_ONCE_INIT; ++ ++ 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; + +- mail_msg_active_table = g_hash_table_new(NULL, NULL); +- mail_gui_thread = pthread_self(); ++ g_once (&once, (GThreadFunc) create_thread_pool, GINT_TO_POINTER (1)); ++ ++ 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_return_if_fail (pthread_equal(mail_gui_thread, pthread_self ())); ++ g_return_if_fail (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); + else if (m->what) + what = g_strdup (m->what); + /* uncommenting because message is not very useful for a user, see bug 271734*/ +@@ -1004,13 +985,7 @@ static void do_op_status(struct _mail_ms + int activity_id = data->activity_id; + + MAIL_MT_UNLOCK (mail_msg_lock); +- if (msg->cancel) { +- camel_operation_mute (msg->cancel); +- camel_operation_unref (msg->cancel); +- } +- camel_exception_clear (&msg->ex); +- g_free (msg->priv); +- g_free (msg); ++ mail_msg_free (msg); + + if (activity_id != 0) + mail_async_event_emit (mail_async_event, MAIL_ASYNC_GUI, (MailAsyncFunc) end_event_callback, +@@ -1030,18 +1005,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 +@@ -1051,7 +1025,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) { +@@ -1064,7 +1038,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 --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.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-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.spec b/evolution.spec index 527cd79..9dfd774 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,603 +1,2367 @@ -%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 dbus_glib_version 0.70 +%define dbus_version 1.0 +%define eds_version 1.11.0 +%define gnome_doc_utils_version 0.8.0 +%define gnome_icon_theme_version 2.19.91 +%define gnome_pilot_version 2.0.15 +%define gnomevfs2_version 2.4 +%define gtk2_version 2.12.0 +%define gtkhtml_version 3.16.0 %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 libbonobo_version 2.16.0 +%define libbonoboui_version 2.4.2 +%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.12 + +%define exchange_support 1 +%define inline_audio_support 1 %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.12.3 +Release: 5%{?dist} +License: GPLv2 and GFDL+ +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 - -# 100-199: Flatpak-specific patches -# https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/144 -Patch100: configurable-dbus-prefix.patch - -# Approximate version number -Provides: bundled(libgnomecanvas) = 2.30.0 - -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 -%if !%{enable_installed_tests} -Obsoletes: evolution-tests <= 3.31.1 -%endif +Provides: evolution-bogofilter = %{version}-%{release} +Obsoletes: evolution-bogofilter <= 0.2.0-5 -%global eds_version %{version} +### Patches ### + +# bad hack +Patch10: evolution-1.4.4-ldap-x86_64-hack.patch + +# Fix for RH bug #154360: +Patch11: evolution-2.5.5.1-commit-enter-on-calendar.patch + +# Fix for RH bug 164957 (was for 145552): +Patch12: evolution-2.0.2-fix-145552.patch + +# Part of RH bug 170799: +Patch13: evolution-2.4.1-hide-switcher-buttons-by-default.patch + +# Patches for conduits, based upon +# rh-161817-attach-116019-conduit_pilot_link_updates.diff +# (the latter patch was originally by Mark G. Adams): +# Patch14: 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. +Patch15: 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). +Patch16: evolution-2.7.1-no-gnome-common.patch + +#Patch17: evolution-2.7.1-notification-cleanups.patch + +# RH bug #166231 / GNOME bug #264485 +Patch20: evolution-2.7.3-replicated-cjk-input.patch + +# RH bug #178295 / GNOME bug #348638 +Patch21: evolution-2.7.4-deleting-preedit-buffer.patch + +# GNOME bug #362638 +Patch25: evolution-2.8.1-kill-ethread.patch + +# RH bug #176400 +Patch27: evolution-2.9.1-im-context-reset.patch + +# RH bug #216537 / GNOME bug #383047 +#Patch29: evolution-2.9.3-view-attachment-uri.patch + +# RH bug #215478 / GNOME bug #383842 +Patch30: evolution-2.9.3-source-path-entry.patch + +# GNOME bug #376991 +# XXX Disabled due to outstanding issues. +#Patch33: evolution-2.10.0-e-passwords.patch + +# GNOME bug #417999 +Patch34: evolution-2.10.0-e-source-combo-box.patch + +# GNOME bug #476040 +Patch35: evolution-2.11.92-mail-attachment.patch + +# GNOME bug #477045 +Patch36: evolution-2.11.92-icon-names.patch + +# GNOME bug #454465 +Patch37: evolution-2.12.1-source-changed-event.patch + +# GNOME bug #351672 +Patch38: evolution-2.12.3-no-drag-finish.patch + +# RH bug #436081 / CVE-2008-0072 +Patch39: evolution-2.12.3-CVE-2008-0072.patch + +# GNOME bug #524310 +Patch40: evolution-2.10.3-server-message-double-free.patch + +# RH bug #449923 / CVE-2008-1108 +Patch41: evolution-2.12.3-CVE-2008-1108.patch + +# RH bug #449923 / CVE-2008-1109 +Patch42: evolution-2.12.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-themes +Requires: gnome-vfs2 >= %{gnomevfs2_version} +Requires: gnutls +Requires: gtk2 >= %{gtk2_version} +Requires: libbonobo >= %{libbonobo_version} +Requires: libbonoboui >= %{libbonoboui_version} +Requires: libsoup >= %{soup_version} +Requires: redhat-menus >= %{redhat_menus_version} + +%if %{libnotify_support} +Requires: libnotify >= 0.4 +%endif ### 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: gtk2-devel >= %{gtk2_version} +BuildRequires: gtkhtml3-devel >= %{gtkhtml_version} BuildRequires: intltool >= %{intltool_version} -BuildRequires: itstool +BuildRequires: libbonobo-devel >= %{libbonobo_version} +BuildRequires: libbonoboui-devel >= %{libbonoboui_version} +BuildRequires: libgnomecanvas-devel >= 2.0 +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: gstreamer-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} +Group: Development/Libraries +Summary: Development files for building against evolution 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) +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}. +Development files needed for building things which link against evolution. -%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} +Group: Applications/Productivity +Summary: Help files for Evolution 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 +This package contains the help for Evolution. %prep -%autosetup -p1 -S gendiff -N +%setup -q -n evolution-%{version} +%patch10 -p1 -b .ldaphack +%patch11 -p1 -b .commit-enter-on-calendar +%patch12 -p1 -b .fix-164957 +%patch13 -p1 -b .hide-switcher-buttons-by-default +#patch14 -p1 -b .fix-conduits # leave commented +%patch15 -p1 -b .fix-conduit-dir +%patch16 -p1 -b .no-gnome-common +#patch17 -p1 -b .notification-cleanups +%patch20 -p1 -b .replicated-cjk-input +%patch21 -p1 -b .deleting-preedit-buffer +%patch25 -p1 -b .kill-ethread +%patch27 -p1 -b .im-context-reset +#%patch29 -p1 -b .view-attachment-uri +%patch30 -p1 -b .source-path-entry +#%patch33 -p1 -b .e-passwords +%patch34 -p1 -b .e-source-combo-box +%patch35 -p1 -b .mail-attachment +%patch36 -p1 -b .icon-names +%patch37 -p1 -b .source-changed-event +%patch38 -p1 -b .no-drag-finish +%patch39 -p1 -b .CVE-2008-0027 +%patch40 -p1 -b .server-message-double-free +%patch41 -p1 -b .CVE-2008-1108 +%patch42 -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 \ + -Wdeclaration-after-statement \ + -Werror-implicit-function-declaration" +# TODO: Make -DCAMEL_DISABLE_DEPRECATED work. %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 +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} --all-name --with-gnome -%{_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 +grep "/usr/share/locale" evolution-%{evo_major}.lang > translations.lang +grep -v "/usr/share/locale" evolution-%{evo_major}.lang > help.lang + +%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-notification.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps-evolution-mail-prompts-checkdefault.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_addressbook.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps-evolution-attachment-reminder.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_calendar.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/apps_evolution_shell.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/bogo-junk-plugin.schemas > /dev/null +gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/evolution-mail.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 translations.lang +%defattr(-, root, root) +%doc AUTHORS COPYING ChangeLog NEWS README + +# GConf schemas: +%{_sysconfdir}/gconf/schemas/apps-evolution-attachment-reminder.schemas +%{_sysconfdir}/gconf/schemas/apps-evolution-mail-notification.schemas +%{_sysconfdir}/gconf/schemas/apps-evolution-mail-prompts-checkdefault.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_addressbook.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_calendar.schemas +%{_sysconfdir}/gconf/schemas/apps_evolution_shell.schemas +%{_sysconfdir}/gconf/schemas/bogo-junk-plugin.schemas +%{_sysconfdir}/gconf/schemas/evolution-mail.schemas # The main executable %{_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 # 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/48x48/apps/preferences-autocompletion.png +%{_datadir}/icons/hicolor/48x48/apps/preferences-calendar-and-tasks.png +%{_datadir}/icons/hicolor/48x48/apps/preferences-certificates.png +%{_datadir}/icons/hicolor/48x48/apps/preferences-composer.png +%{_datadir}/icons/hicolor/48x48/apps/preferences-mail-accounts.png +%{_datadir}/icons/hicolor/48x48/apps/preferences-mail.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.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Calendar.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Calendar_AlarmNotify.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Mail.server +%{_libdir}/bonobo/servers/GNOME_Evolution_Shell.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}/evolution-backup +%{_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.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libecalendar_common_conduit.so +%{_libdir}/evolution/%{evo_major}/conduits/libecalendar_conduit.so +%{_libdir}/gnome-pilot/conduits/e-calendar.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libememo_conduit.so +%{_libdir}/gnome-pilot/conduits/e-memo.conduit + +%{_libdir}/evolution/%{evo_major}/conduits/libetodo_conduit.so +%{_libdir}/gnome-pilot/conduits/e-todo.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-mail-account-disable.eplug +%{evo_plugin_dir}/libmail-account-disable.so + +%{evo_plugin_dir}/org-gnome-addressbook-file.eplug +%{evo_plugin_dir}/liborg-gnome-addressbook-file.so + +%{evo_plugin_dir}/attachment-reminder.glade %{evo_plugin_dir}/org-gnome-evolution-attachment-reminder.eplug %{evo_plugin_dir}/liborg-gnome-evolution-attachment-reminder.so -%{evo_plugin_dir}/org-gnome-email-custom-header.eplug -%{evo_plugin_dir}/liborg-gnome-email-custom-header.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-bogo-junk-plugin.eplug +%{evo_plugin_dir}/liborg-gnome-bogo-junk-plugin.so + +%{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-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-face.eplug %{evo_plugin_dir}/liborg-gnome-face.so +%{evo_plugin_dir}/org-gnome-face-ui.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-mailing-list-actions.xml %{evo_plugin_dir}/org-gnome-mail-notification.eplug %{evo_plugin_dir}/liborg-gnome-mail-notification.so %{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}/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 + +%{evo_plugin_dir}/liborg-gnome-backup-restore.so +%{evo_plugin_dir}/org-gnome-backup-restore.eplug +%{evo_plugin_dir}/org-gnome-backup-restore.xml %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 +%defattr(-, root, root) +%{_includedir}/evolution-%{evo_major} +%{_libdir}/pkgconfig/evolution-plugin.pc +%{_libdir}/pkgconfig/evolution-shell.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 -%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 +%dir %{_datadir}/omf/evolution %changelog -%autochangelog +* Wed Jun 04 2008 Matthew Barnes - 2.12.3-5.fc8 +- Add patches for RH bug #449923 (buffer overflow vulnerabilities). + +* Tue Mar 25 2008 Dan Williams - 2.12.3-4.fc8 +- Add patch for GNOME bug #524310 + +* Tue Mar 04 2008 Matthew Barnes - 2.12.3-3.fc8 +- Add patch for CVE-2008-0072 (format string vulnerability). + +* Mon Mar 03 2008 Milan Crha - 2.12.3-2.fc8 +- Add patch for GNOME bug #351672 (dragging IMAP messages locks X) + +* Mon Jan 07 2008 Milan Crha - 2.12.3-1.fc8 +- Update to 2.12.3 +- Removed patch for RH bug #215467 / GNOME bug #380644 (fixed upstream). +- Removed patch for RH bug #404591 / GNOME bug #491062 (fixed upstream). +- Removed patch for RH bug #499920 (fixed upstream). +- Removed patch for GNOME bug #363695 (causes issues) + +* Thu Dec 06 2007 Matthew Barnes - 2.12.2-3.fc8 +- Add patch for GNOME bug #499920 (invalid #include, mainly for Zimbra). + +* Thu Nov 29 2007 Milan Crha - 2.12.2-2.fc8 +- Add patch for RH bug #404591 (do not add automatic contacts + if disabled) + +* Tue Nov 27 2007 Milan Crha - 2.12.2-1.fc8 +- Update to 2.12.2 + +* Fri Nov 16 2007 Milan Crha - 2.12.1-4.fc8 +- Add patch for GNOME bug #454465 (fix Save button in task dialog) + +* Thu Oct 18 2007 Matthew Barnes - 2.12.1-3.fc8 +- Disable patch for GNOME bug #376991 for now. It may be contributing + to password prompting problems as described in RH bug #296671. + +* Mon Oct 15 2007 Matthew Barnes - 2.12.1-2.fc8 +- Fix a broken zoom icon. + +* Mon Oct 15 2007 Milan Crha - 2.12.1-1.fc8 +- Update to 2.12.1 +- Add files for the new backup-restore plugin. + +* Tue Oct 09 2007 Matthew Barnes - 2.12.0-7.fc8 +- Revise patch for GNOME bug #477045 (more icon tweaks). + +* Fri Oct 05 2007 Matthew Barnes - 2.12.0-6.fc8 +- Require libbonobo >= 2.16.0 (RH bug #213823). + +* Thu Oct 04 2007 Matthew Barnes - 2.12.0-5.fc8 +- Require gnome-themes (RH bug #235617). + +* Wed Oct 03 2007 Matthew Barnes - 2.12.0-4.fc8 +- Revise patch for GNOME bug #477045 (run-time warnings when composing mail). + +* Wed Sep 19 2007 Matthew Barnes - 2.12.0-3.fc8 +- Re-enable the inline audio plugin since it now uses GStreamer 0.10. + +* Wed Sep 19 2007 Matthew Barnes - 2.12.0-2.fc8 +- Revise patch for GNOME bug #477045 (less-zealous icon renaming). + +* Mon Sep 17 2007 Matthew Barnes - 2.12.0-1.fc8 +- Update to 2.12.0 +- Remove patch for RH bug #182247 (fixed upstream). + +* Sat Sep 15 2007 Matthew Barnes - 2.11.92-4.fc8 +- Add patch for GNOME bug #477045 (use standard icon names). + +* Tue Sep 11 2007 Matthew Barnes - 2.11.92-3.fc8 +- Add patch for GNOME bug #476040 (fix attachment icon). + +* Sat Sep 8 2007 Matthias Clasen - 2.11.92-2.fc8 +- Split off an evolution-help package + +* Mon Sep 03 2007 Matthew Barnes - 2.11.92-1.fc8 +- Update to 2.11.92 + +* Wed Aug 29 2007 Matthew Barnes - 2.11.91-3.fc8 +- Revise patch for GNOME bug #362638 to fix GNOME bug #357175 + (Evolution fails to close after IMAP alert has been displayed). + +* Tue Aug 28 2007 Matthew Barnes - 2.11.91-2.fc8 +- Fix compilation breakage caused by our strict build settings. + +* Tue Aug 28 2007 Milan Crha - 2.11.91-1.fc8 +- Update to 2.11.91 +- Removed patch for RH bug #157400 / GNOME bug #303877 (fixed upstream). +- Removed patch for RH bug #157505 / GNOME bug #303878 (fixed upstream). +- Removed patch for RH bug #161885 / GNOME bug #309166 (fixed upstream). +- Removed patch for RH bug #202751 / GNOME bug #355766 (fixed upstream). +- Removed patch for RH bug #218898 / GNOME bug #385414 (fixed upstream). +- Removed patch for RH bug #253348 / GNOME bug #467883 (fixed upstream). + +* Thu Aug 23 2007 Matthew Barnes - 2.11.90-4.fc8 +- Obsolete the evolution-bogofilter package. + +* Mon Aug 20 2007 Matthew Barnes - 2.11.90-3.fc8 +- Revise patch for GNOME bug #417999 to fix GNOME bug #447591 + (Automatic Contacts combo boxes don't work). + +* Sat Aug 18 2007 Matthew Barnes - 2.11.90-2.fc8 +- Add patch for RH bug #253348 (crash on startup). + +* Wed Aug 15 2007 Matthew Barnes - 2.11.90-1.fc8 +- Update to 2.11.90 + +* Wed Aug 8 2007 Matthias Clasen - 2.11.6.1-2 +- Update the license field +- Use %%find_lang for help files + +* Wed Aug 01 2007 Matthew Barnes - 2.11.6.1-1.fc8 +- Update to 2.11.6.1 + +* Tue Jul 31 2007 Matthew Barnes - 2.11.6-1.fc8 +- Update to 2.11.6 +- Remove patch for GNOME bug #380534 (fixed upstream). + +* Fri Jul 27 2007 Matthew Barnes - 2.11.5-3.fc8 +- Add patch for GNOME bug #380534 (clarify version requirements). + +* Mon Jul 16 2007 Matthew Barnes - 2.11.5-2.fc8 +- Remove spamassassin requirement since it's optional. + +* Fri Jul 13 2007 Matthew Barnes - 2.11.5-1.fc8 +- Update to 2.11.5 +- Revise patch for GNOME bug #362638 to fix RH bug #245695. + +* Wed Jun 27 2007 Matthew Barnes - 2.11.4-2.fc8 +- Revise patch for GNOME bug #363638 to fix RH bug #245289 (frequent hangs). + +* Mon Jun 18 2007 Matthew Barnes - 2.11.4-1.fc8 +- Update to 2.11.4 +- Remove patch for GNOME bug #447727 (fixed upstream). + +* Thu Jun 14 2007 Matthew Barnes - 2.11.3-5.fc8 +- Add patch for GNOME bug #447727 (remove EClippedLabel). + +* Wed Jun 06 2007 Matthew Barnes - 2.11.3-4.fc8 +- Revise patch for GNOME bug #362638 to fix RH bug #240507 (hang on exit). + +* Wed Jun 06 2007 Matthew Barnes - 2.11.3-3.fc8 +- Remove some debug messages that accidentally slipped in. + +* Tue Jun 05 2007 Matthew Barnes - 2.11.3-2.fc8 +- Fix an invalid g_free() that was causing lock-ups. + +* Mon Jun 04 2007 Matthew Barnes - 2.11.3-1.fc8 +- Update to 2.11.3 +- Evolution no longer has versioned file names. +- Remove patch for RH bug #202289 (fixed upstream). +- Remove patch for RH bug #235878 (fixed upstream). +- Remove patch for RH bug #238155 (fixed upstream). +- Remove patch for RH bug #240147 (fixed upstream). + +* Thu May 31 2007 Matthew Barnes - 2.11.2-2.fc8 +- Evolution no longer requires libgnomeprint[ui]. + +* Fri May 18 2007 Matthew Barnes - 2.11.2-1.fc8 +- Update to 2.11.2 +- Bump evo_major to 2.12. +- Bump eds_version to 1.11.0. +- Update files with new plugins and icons. +- Remove patch for RH bug #190359 (fixed upstream). +- Remove patch for RH bug #218801 (fixed upstream). +- Remove patch for RH bug #234315 (fixed upstream). +- Remove patch for RH bug #236399 (fixed upstream). +- Remove patch for RH bug #236860 (fixed upstream). +- Remove patch for RH bug #238551 (fixed upstream). +- Remove patch for GNOME bug #373837 (fixed upstream). +- Remove patch for GNOME bug #373116 (fixed upstream). +- Remove patch for GNOME bug #418971 (fixed upstream). +- Remove patch for GNOME bug #419469 (fixed upstream). +- Remove patch for GNOME bug #419524 (fixed upstream). +- Remove evolution-2.6.0-prototypes.patch (obsolete). + +* 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..de58aef 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (evolution-3.59.1.tar.xz) = 26d6d4dfcdbc3d89f88d9e24096c7ff910d221119def75d7f80a397f682be96860726832c7c62b46769ce9cfcc15e5844cbcc016facc9b21b4eb9bbb2c17360d +554698d7387aee82c5f4d4520760503d evolution-2.12.3.tar.bz2