Evolution 1.0.8, 2002-06-23 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Addressbook #17332 -- Addressbook crashes in LDAP address completion code. (Toshok) #26130 -- Close contact editor before save as crashes. (Toshok) * Calendar #25757 -- Fix quoting of icalendar properties (JP) #25829, #25830, #26066 -- Fix a number of meeting usability and interop issues (JP) #25697 -- Exchange reminders still not quite working (Rodrigo) Other fixes: * Addressbook - Some memory leak fixes in the addressbook backends and libversit. (Toshok) * Calendar - Update time zone information (Damon) Updated translations: - sk (Stanislav Visnovsky) - sv (Christian Rose) Evolution 1.0.7, 2002-06-07 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Addressbook #25054 -- "New Contact List" button is no longer active in folders that don't support contact lists. (Toshok) * Calendar #16962 -- Make the schedule page use the work hours set in the preferences. (JP) #23350 -- Crash when refreshing meeting or task. (JP) #24783 -- Fix crash in wombat. (Rodrigo) * Mail #11391 -- Bogus gnome_vfs_file_info_unref() that caused an occasional crash. (Frederic Crozat) #15185 -- Non-RFC-compliant From/To/Cc being displayed as empty in mail display. (Dan) #19920 -- Messages hiding in threaded view. (Michael) #21604 -- Various crashes. (Michael) #23782 -- Stop button causes a hang. (Michael) #25056 -- wombat segfaults when scrolling around calendar in month view (Rodrigo) #25456 -- Crash when deleting an account that has not been added to the Evolution storage yet. (Jeff) #24615 -- VFolders with the UNMATCHED vfolder as a source hang. (Michael) * Shell #24284 -- Copyright notice inconsistent in the about box. (Ettore) Other fixes: * Misc - Fixed some typos in the names of some French locations. (Christophe Merlet) Updated translations: - et (GNOME ET Team) - eu (Josu Waliño) - sk (Stanislav Visnovsky) - fr (Christophe Merlet) - fi (Sami Pesonen) - vi (pclouds) Evolution 1.0.5, 2002-05-06 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Mail #24140 -- Crash when downloading a message with invalid header. (Jeff) #17174 -- Mail spools appear to be unread forever. (Michael) * Shell #23538 -- Intermittent bug when moving folders around. (Michael) Other fixes: * Calendar - Make reminders work with remote backends. (Rodrigo) * Misc - Added support for adding an Evolution icon to the CDE Application Manager. (Ettore) Updated translations: - bg (Borislav Aleksandrov) - pl (GNOME PL Team) Evolution 1.0.4, 2002-04-18 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Addressbook #22965 -- Comply with RFC 2739 for calCalURI and calFBURL. (Toshok) * Calendar #22624 -- Unable to accept meeting request that doesn't list user as attendee. (JP) * Startup Wizard #22047 -- Crash after closing the start-up wizard. (Ettore) * Mail #8214 -- "Error Synchronizing Folder" on incoming mail spool. (Michael) #18929 -- If we get multiple Content-Type header values, change subsequent headers to X-Invalid-Content-Type so it doesn't wreck processing. (Michael) #22363 -- Problems resyncing IMAP folders when going Online. (Jeff) #21716 -- Fixes to decoding illegally rfc2047 encoded words. (Michael) #22657 -- Fixes printing for some localizations (Radek) Other fixes: * Calendar - Use default tasks folder in calendar view. (Rodrigo) - Added getQuery method to CalBackend to allow custom queries for each calendar backend. (Rodrigo) * Mail - Fixed Daylight-Savings-Time calculations on systems that use tm.tm_gmtoff rather than 'timezone' (affects BSD systems). (Jeff) - Fixed the annoying EINPROGRESS error dialogs when connecting to IMAP/SMTP/POP via SSL. (Jeff) - Changed the date format used in From-lines in mbox spools to be the same as those used by Pine to fix interoperability issues. (Michael) - Fixed some filtertypes.xml typos. (Michael) * Summary - Change the dot.kde.org url. Updated translations: - fi (Sami Pesonen) - fr (Christophe Merlet, Frederic Riss) - ko (Young-Ho Cha) - nl (Tino Meinen) - no (Kjartan Maraas) - pt_BR (Gustavo Maciel Dias Vieira) Evolution 1.0.3, 2002-03-19 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Addressbook #16097 -- Need a way to let the user specify the DN to authenticate against. (Toshok) #16680 -- LDAP performance problem. (Toshok) #16968 -- Changing search type immediately requeries. (Toshok) #20089 -- Cannot copy contacts with comma from "Contacts" to LDAP. (Toshok) #20690 -- LDAP contacts dont show when using letter shortcuts. (Toshok) #20740 -- LDAP performance problem. (Toshok) #20871 -- SelectNames dialog needs search feedback. (Toshok) * Calendar #14705 -- iMIP compatibility with versions of Outlook. (Better fix for the pseudo-fix in 1.0.1). We now support Outlook in both Workgroup and Internet-Only modes. (Dan) #19054 -- Minimum number of alarm repetitions should be 1. (Federico) #19234 -- BYMONTH off-by-one in RRULE:FREQ=YEARLY. (Damon) #20510 -- Load free busy info as attendees are added. (JP) #20022 -- Itip addresses are case sensitive. (JP) #20226 -- Timezone data missing from some itip replies. (JP) #20346 -- Calendar should indicate if backend dies. (Rodrigo) #20780 -- Better subjects in iMIP messages. (Dan) #20787 -- Accepted/declined messages aren't always clear. (JP) #20800 -- Sorting of free busy information in schedule page does not work. (JP) #20783 -- Accepting updated meeting request doesn't work. (Rodrigo) #21198 -- Outlook didn't recognize Evolution's acceptance of an updated meeting request. (Dan) #21240 -- Calendar Reminders don't appear for appointments in remote servers. (Rodrigo) * Mail #19564 -- Don't crash when changing to disconnected mode. (Michael) #20779 -- Set a 'name' parameter in the Content-Type header since Outlook doesn't seem to check the filename parameter on the Content-Disposition header. (Jeff) * Shell #20234 -- Deleting folder gratuitiously causes /local to open. (Ettore) #20237 -- Shell silently drops xfer errors. (Ettore) #20311 -- New window from shortcuts should not show the folder bar and the shortcut bar. (Ettore) * Summary #18025 -- Summary crash upon switching to offline mode. (Ettore) Other fixes: * Calendar - Show more descriptive messages on opening errors. (Rodrigo) - Remove $filename.ics from remote URIs. (Rodrigo) * Addressbook - Fix search weirdness in local addressbooks. (Toshok) - Let backends return general error status from load_uri instead of just TRUE/FALSE. (Toshok) - EBook(View) handling fixes in ESelectNames and EAddressbookModel. (Clahey) - Rethink (and change) some of the default queries to ones that are at the same time useful and more easily implemented efficiently by the backends, in both the component's view and in the select-names dialog. (Toshok) - Change the "beginswith" query implementation on the name field to search both first and last name, so it's a little more useful in the general case. (Toshok) Updated translations: - es (Carlos Perelló Marín) - fr (Christophe Merlet) - jp (Akira TAGOH) - nl (Vincent van Adrighem) - nn (Roy-Magne Mo) - no (Kjartan Maraas) - pt_BR (Gustavo Maciel Dias Vieira) Evolution 1.0.2, 2002-01-24 --------------------------- Bugzilla Bugs Fixed (see http://bugzilla.ximian.com/show_bug.cgi): * Addressbook #17725 -- Non-ASCII letter headings are black when printing (Zbigniew Chyla) * Calendar #6544 -- Make Timezone names translatable (Damon) #18801 -- Alarms with specific trigger times are not shown (Damon) * Importers #16864 -- LDIF importer chokes on long description field (Toshok) #17441 -- Crash trying to import VCards file into an LDAP folder (Ettore) * Mail #6896 -- message_list_select() with wraparound won't select very first message (Jeff) #11499 -- All recovered Composer windows have HTML enabled (Jeff) #16947 -- Crash while setting up a new mail account (Jeff) #17205 -- Crash of evolution-mail on start-up (Jeff) #17634 -- Marking a message as unread should undelete it, as well (Jeff) #17694 -- Exchange 5.5 reporting 2 messages as having the same UID breaks Evolution (Jeff) #17759 -- Cancelling Send/Receive can lose mail for local case (Jeff) #18142 -- Mailer crash when trying to send an email (Jeff) Other fixes: * Summary - Change the list of items in the mail preferences (Iain) * Calendar - Make Tasks default to public as in Outlook (Rodrigo) * Importers - Make the druid as a transient window for the main shell (Iain) * Mail - Follow symlinks for mbox files (Jeff) - Fixed copy/paste problems in mail-account-gui.c (Ian Goldberg, Jeff) - Make Vfolders work with add-on storages (Dan) * Shell - Don't crash on missing icon on start-up (Michael Meeks) - Change activation/deactivation order for views in order to reduce flicker in the toolbars (Michael Meeks) Updated translations: - bg (Alexander Shopov) - el (Nick Niktaris, Panayotis Pakos, Simos Xenitellis) - fr (Christophe Merlet) - hu (Andras Timar) - it (Clara Tattoni, Ettore) - lv (Peteris Krisjanis) - nn (Roy-Magne Mo) - no (Kjartan Maraas) - sk (Stanislav Visnovsky) - sv (Christian Rose) Evolution 1.0.1, 2001-12-18 --------------------------- New features: * csv2vcard script to convert CSV addressbook files from Outlook into VCard files that the Evolution importer can understand (by Michael MacDonald). * Alarms are now properly synced in the calendar conduit. Bugs fixed: * Addressbook #10114 -- No icon for Delete in the New Contact List editor #10241 -- Occasional address completion flakiness #10910 -- "Save" in list editor vs. "Save and Close" in contact editor #11776 -- Email addresses are case sensitive #13751 -- AddressBook address entry form usability problem #14002 -- Select names dialog stays up after composer is closed #14074 -- Editing fields under the "Collaboration" LDAP contact #14715 -- Wombat gets locked up when LDAP server is down #14876 -- Modifying LDAP contacts destroys existing objectclass entries #15379 -- Printing from the addressbook totally broken #16156 -- "Save As", "Send As", "Send To" not available in list editor #16176 -- Tab order starts wrong #16510 -- Small contact editor fixes #16744 -- Crash #16852 -- Crash closing empty mail #16910 -- Crashed addressbook when selecting addresses #17109 -- Crashed when editing a contact #17126 -- Adding some addresses does not work * Calendar #7641 -- Crash in EMap widget when used in Evolution #8993 -- Attendees not stripped properly from itip replies #13843 -- Deleting tasks causes crash #13952 -- Notifier repeatedly gives alarm after appointment ended #14087 -- Daily repeat event with end-date misses one day #14489 -- UI bug in Calendar Settings #14699 -- gtk_signal_disconnect_by_data warning #14705 -- iMIP compatibility with versions of Outlook. (We now support Outlook in an Exchange environment by default, but the old behavior can be turned on with the environment variable EVOLUTION_SEND_IMIP_AS_ATTACHMENT. This will be fixed better later.) #15401 -- Use UTF-8-aware gnome-print calls #15456 -- Typo in translatable string #15774 -- Crashed by selecting "decline" in meeting request #15941 -- Location missing for the calendar #15749 -- Empty end time in all-day-event crashes calendar. #15774 -- Selecting decline in schedule meeting request makes evo crash #15798 -- Calendar Date Never Updates #16232 -- e-itip-control.c - init() doing odd stuff #16359 -- Calendar Crash #16460 -- Changing a meeting doesn't always offer to send an update #16571 -- Weird URI in meeting request email #16910 -- Crashed when entering a completion percentage #16224 -- remove unsupported columns from Tasks view #16880 -- Cannot import ical (ics) even its own #17344 -- iCalendar should not be translated #17526 -- Refreshing request does not show relevant information #17527 -- Refresh requests have wrong menu #17531 -- libical does not build with bison 1.30 #17606 -- libical does not build with autoconf 2.52 (none) -- Scheduling page did not accurately display no information range * Conduits #1183 -- Handle alarms in conduits #14452 -- Converting names wrong from Palm #15810 -- Crashed during EAddress sync #15922 -- Crash #16460 -- Changing a meeting doesn't always offer to send an update #16997 -- Pilot compilation with libiconv #17230 -- Custom data on Pilot being over written * Importers #14701 -- Importing locks up Evolution * Mail #2233 -- Don't show RTF attachments inline #5547 -- Crash: Error closing a HTML-mail #12062 -- Can't use 'n' to skip to next unread if multiple messages are selected #13898 -- Crash: Cannot create emails in evolution #14127 -- Wrong error message #14348 -- Some things that need open messages... #14517 -- "Clear" needed twice for non-body+subject searches #14662 -- GPG signature showing as attachment #14678 -- Timestamp on outgoing mail incorrect on FreeBSD #14734 -- Evolution-mail crashes while accessing imap servers #14770 -- Appending messages to other IMAP folder can cause INBOX to stop updating #14838 -- Saving passwords doesn't work #14848 -- Forwarding wrong email due to next/prev #14965 -- Message copy fails with space in folder names #14976 -- Crash when reading a message from an IMAP server #15264 -- Crash: evolution-mail seg fault on exit #15374 -- "___" in autogenerated name of vfolder created by sender of #15415 -- Virtual Folders Editor: display of non-ascii symbols is broken #15449 -- `N' wraps `P' doesn't #15451 -- Crash when pressing stop during "going offline" #15489 -- Evolution crashed while deleting my IMAP mail account #15491 -- Evolution crashes/becomes unusable if ppp connection is lost #15498 -- Crash: Faulty vFolder editor #15512 -- Hangs while scanning for changed messages on S/IMAP+Exchange #15552 -- Crash #15608 -- RCPT TO: response error: Success #15647 -- Composer "send" button has wrong tooltip when offline /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* e-component-registry.c * * Copyright (C) 2000, 2001, 2002 Ximian, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * Author: Ettore Perazzoli */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "e-component-registry.h" #include <e-util/e-icon-factory.h> #include <glib/gi18n.h> #include <bonobo/bonobo-object.h> #include <bonobo/bonobo-exception.h> #include <string.h> #include <stdlib.h> struct _EComponentRegistryPrivate { GSList *infos; guint init:1; }; G_DEFINE_TYPE (EComponentRegistry, e_component_registry, G_TYPE_OBJECT) /* EComponentInfo handling. */ static EComponentInfo * component_info_new (const char *id, GNOME_Evolution_Component iface, const char *alias, const char *button_label, const char *button_tooltips, const char *menu_label, const char *menu_accelerator, int sort_order, GdkPixbuf *button_icon, GdkPixbuf *menu_icon) { EComponentInfo *info = g_new0 (EComponentInfo, 1); info->id = g_strdup (id); info->iface = bonobo_object_dup_ref(iface, NULL); info->alias = g_strdup (alias); info->button_label = g_strdup (button_label); info->button_tooltips = g_strdup (button_tooltips); info->menu_label = g_strdup (menu_label); info->menu_accelerator = g_strdup (menu_accelerator); info->sort_order = sort_order; info->button_icon = button_icon; if (info->button_icon) g_object_ref (info->button_icon); info->menu_icon = menu_icon; if (info->menu_icon) g_object_ref (info->menu_icon); return info; } static void component_info_free (EComponentInfo *info) { g_free (info->id); g_free (info->alias); g_free (info->button_label); g_free (info->button_tooltips); g_free (info->menu_label); g_free (info->menu_accelerator); if (info->button_icon) g_object_unref (info->button_icon); if (info->menu_icon) g_object_unref (info->menu_icon); if (info->iface != NULL) bonobo_object_release_unref (info->iface, NULL); g_slist_foreach (info->uri_schemas, (GFunc) g_free, NULL); g_slist_free (info->uri_schemas); g_free (info); } static int component_info_compare_func (EComponentInfo *a, EComponentInfo *b) { if (a->sort_order != b->sort_order) return a->sort_order - b->sort_order; return strcmp (a->button_label, b->button_label); } /* Utility methods. */ static void set_schemas (EComponentInfo *component_info, Bonobo_ServerInfo *server_info) { Bonobo_ActivationProperty *property = bonobo_server_info_prop_find (server_info, "evolution:uri_schemas"); Bonobo_StringList *list; int i; if (property == NULL) return; if (property->v._d != Bonobo_ACTIVATION_P_STRINGV) { CORBA_free (property); return; } list = & property->v._u.value_stringv; for (i = 0; i < list->_length; i ++) component_info->uri_schemas = g_slist_prepend (component_info->uri_schemas, g_strdup (list->_buffer [i])); CORBA_free (property); } static void query_components (EComponentRegistry *registry) { Bonobo_ServerInfoList *info_list; const gchar * const *language_names; CORBA_Environment ev; GSList *languages = NULL; char *query; int i; if (registry->priv->init) return; registry->priv->init = TRUE; CORBA_exception_init (&ev); query = g_strdup_printf ("repo_ids.has ('IDL:GNOME/Evolution/Component:%s')", BASE_VERSION); info_list = bonobo_activation_query (query, NULL, &ev); g_free (query); if (BONOBO_EX (&ev)) { char *ex_text = bonobo_exception_get_text (&ev); g_warning ("Cannot query for components: %s\n", ex_text); g_free (ex_text); CORBA_exception_free (&ev); return; } language_names = g_get_language_names (); while (*language_names != NULL) languages = g_slist_append (languages, (gpointer)(*language_names++)); for (i = 0; i < info_list->_length; i++) { const char *id; const char *label; const char *menu_label; const char *menu_accelerator; const char *alias; const char *icon_name; const char *sort_order_string; const char *tooltips; GdkPixbuf *icon = NULL, *menuicon = NULL; EComponentInfo *info; int sort_order; GNOME_Evolution_Component iface; id = info_list->_buffer[i].iid; iface = bonobo_activation_activate_from_id ((char *)id, 0, NULL, &ev); if (BONOBO_EX (&ev) || iface == CORBA_OBJECT_NIL) { char *ex_text = bonobo_exception_get_text (&ev); g_warning("Cannot activate '%s': %s\n", id, ex_text); g_free(ex_text); CORBA_exception_free(&ev); CORBA_exception_init(&ev); continue; } label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_label", languages); tooltips = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_tooltips", languages); menu_label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_label", languages); menu_accelerator = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:menu_accelerator", languages); alias = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_alias", NULL); icon_name = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_icon", NULL); if (icon_name) { icon = e_icon_factory_get_icon (icon_name, E_ICON_SIZE_LARGE_TOOLBAR); menuicon = e_icon_factory_get_icon (icon_name, E_ICON_SIZE_MENU); } sort_order_string = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_sort_order", NULL); if (sort_order_string == NULL) sort_order = 0; else sort_order = atoi (sort_order_string); info = component_info_new (id, iface, alias, label, tooltips, menu_label, menu_accelerator, sort_order, icon, menuicon); set_schemas (info, & info_list->_buffer [i]); registry->priv->infos = g_slist_prepend (registry->priv->infos, info); if (icon != NULL) g_object_unref (icon); if (menuicon != NULL) g_object_unref (menuicon); bonobo_object_release_unref(iface, NULL); } g_slist_free(languages); CORBA_free (info_list); CORBA_exception_free (&ev); registry->priv->infos = g_slist_sort (registry->priv->infos, (GCompareFunc) component_info_compare_func); } /* GObject methods. */ static void impl_finalize (GObject *object) { EComponentRegistry *component_registry; EComponentRegistryPrivate *priv; component_registry = E_COMPONENT_REGISTRY (object); priv = component_registry->priv; g_slist_foreach (priv->infos, (GFunc) component_info_free, NULL); g_free (priv); (* G_OBJECT_CLASS (e_component_registry_parent_class)->finalize) (object); } static void e_component_registry_class_init (EComponentRegistryClass *klass) { GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); object_class->finalize = impl_finalize; } static void e_component_registry_init (EComponentRegistry *registry) { registry->priv = g_new0 (EComponentRegistryPrivate, 1); } EComponentRegistry * e_component_registry_new (void) { return g_object_new (e_component_registry_get_type (), NULL); } GSList * e_component_registry_peek_list (EComponentRegistry *registry) { g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), NULL); query_components(registry); return registry->priv->infos; } EComponentInfo * e_component_registry_peek_info (EComponentRegistry *registry, enum _EComponentRegistryField field, const char *key) { GSList *p, *q; g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), NULL); query_components(registry); for (p = registry->priv->infos; p != NULL; p = p->next) { EComponentInfo *info = p->data; switch (field) { case ECR_FIELD_ID: if (info->id && (strcmp (info->id, key) == 0)) return info; break; case ECR_FIELD_ALIAS: if (info->alias && (strcmp (info->alias, key) == 0)) return info; break; case ECR_FIELD_SCHEMA: for (q = info->uri_schemas; q != NULL; q = q->next) if (strcmp((char *)q->data, key) == 0) return info; break; } } return NULL; } GNOME_Evolution_Component e_component_registry_activate (EComponentRegistry *registry, const char *id, CORBA_Environment *ev) { EComponentInfo *info; g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (registry), CORBA_OBJECT_NIL); info = e_component_registry_peek_info (registry, ECR_FIELD_ID, id); if (info == NULL) { g_warning ("%s - Unknown id \"%s\"", G_STRFUNC, id); return CORBA_OBJECT_NIL; } /* it isn't in the registry unless it is already activated */ return bonobo_object_dup_ref (info->iface, NULL); }