SHA256
1
0
forked from pool/evolution
OBS User unknown 2009-01-08 17:03:16 +00:00 committed by Git OBS Bridge
parent 7c8e6927c4
commit 2948785e88
23 changed files with 1943 additions and 17 deletions

View File

@ -0,0 +1,237 @@
--- mail/em-migrate.c 2008/12/22 06:23:09 36924
+++ mail/em-migrate.c 2008/12/22 06:41:05 36925
@@ -2842,20 +2842,54 @@
g_object_unref (client);
}
-
+static gboolean
+update_progress_in_main_thread (double *progress)
+{
+ em_migrate_set_progress (*progress);
+ return FALSE;
+}
+
static void
-migrate_folders(CamelStore *store, CamelFolderInfo *fi, const char *acc, CamelException *ex)
+migrate_folders(CamelStore *store, gboolean is_local, CamelFolderInfo *fi, const char *acc, CamelException *ex, gboolean *done, int *nth_folder, int total_folders)
{
CamelFolder *folder;
while (fi) {
+ double progress;
+
+ *nth_folder = *nth_folder + 1;
+
char *tmp = g_strdup_printf ("%s/%s", acc, fi->full_name);
em_migrate_set_folder_name (tmp);
g_free (tmp);
- folder = camel_store_get_folder (store, fi->full_name, 0, ex);
+
+ progress = (double) (*nth_folder) / total_folders;
+ g_idle_add ((GSourceFunc) update_progress_in_main_thread, &progress);
+
+ if (is_local)
+ folder = camel_store_get_folder (store, fi->full_name, CAMEL_STORE_IS_MIGRATING, ex);
+ else
+ folder = camel_store_get_folder (store, fi->full_name, 0, ex);
+
if (folder != NULL)
camel_folder_summary_migrate_infos (folder->summary);
- migrate_folders(store, fi->child, acc, ex);
+
+ migrate_folders(store, is_local, fi->child, acc, ex, done, nth_folder, total_folders);
+
+ fi = fi->next;
+ }
+
+ if ( (*nth_folder) == (total_folders - 1))
+ *done = TRUE;
+}
+
+/* This could be in CamelStore.ch */
+static void
+count_folders (CamelFolderInfo *fi, int *count)
+{
+ while (fi) {
+ *count = *count + 1;
+ count_folders (fi->child , count);
fi = fi->next;
}
}
@@ -2878,75 +2912,111 @@
return store;
}
+
+struct migrate_folders_to_db_structure {
+ char *account_name;
+ CamelException ex;
+ CamelStore *store;
+ CamelFolderInfo *info;
+ gboolean done;
+ gboolean is_local_store;
+};
+
+static void migrate_folders_to_db_thread (struct migrate_folders_to_db_structure *migrate_dbs)
+{
+ int num_of_folders = 0, nth_folder = 0;
+ count_folders (migrate_dbs->info, &num_of_folders);
+ migrate_folders (migrate_dbs->store, migrate_dbs->is_local_store, migrate_dbs->info,
+ migrate_dbs->account_name, &(migrate_dbs->ex), &(migrate_dbs->done),
+ &nth_folder, num_of_folders);
+}
+
static void
migrate_to_db()
{
- EAccountList *accounts;
- EIterator *iter;
- int i=0, len;
- MailComponent *component = mail_component_peek ();
- CamelStore *store = NULL;
- CamelFolderInfo *info;
-
- if (!(accounts = mail_config_get_accounts ()))
- return;
-
- iter = e_list_get_iterator ((EList *) accounts);
- len = e_list_length ((EList *) accounts);
-
- camel_session_set_online ((CamelSession *) session, FALSE);
- em_migrate_setup_progress_dialog (_("The summary format of the Evolution mailbox "
- "folders has been moved to sqlite since Evolution 2.24.\n\nPlease be "
- "patient while Evolution migrates your folders..."));
-
- em_migrate_set_progress ( (double)i/(len+1));
- store = setup_local_store (component);
- info = camel_store_get_folder_info (store, NULL, CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST|CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, NULL);
- if (info) {
- migrate_folders(store, info, _("On This Computer"), NULL);
- }
- i++;
- em_migrate_set_progress ( (double)i/(len+1));
-
-
- while (e_iterator_is_valid (iter)) {
- EAccount *account = (EAccount *) e_iterator_get (iter);
- EAccountService *service;
- const char *name;
-
-
- service = account->source;
- name = account->name;
- em_migrate_set_progress ( (double)i/(len+1));
- if (account->enabled
- && service->url != NULL
- && service->url[0]
- && strncmp(service->url, "mbox:", 5) != 0) {
-
- CamelException ex;
-
- camel_exception_init (&ex);
- mail_component_load_store_by_uri (component, service->url, name);
-
- store = (CamelStore *) camel_session_get_service (session, service->url, CAMEL_PROVIDER_STORE, &ex);
- info = camel_store_get_folder_info (store, NULL, CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST|CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, &ex);
- if (info) {
- migrate_folders(store, info, account->name, &ex);
-
- } else
- printf("%s:%s: failed to get folder infos \n", G_STRLOC, G_STRFUNC);
- camel_exception_clear(&ex);
-
+ EAccountList *accounts;
+ EIterator *iter;
+ int i=0, len;
+ MailComponent *component = mail_component_peek ();
+ CamelStore *store = NULL;
+ CamelFolderInfo *info;
+
+ if (!(accounts = mail_config_get_accounts ()))
+ return;
+
+ iter = e_list_get_iterator ((EList *) accounts);
+ len = e_list_length ((EList *) accounts);
+
+ camel_session_set_online ((CamelSession *) session, FALSE);
+
+ em_migrate_setup_progress_dialog (_("The summary format of the Evolution mailbox "
+ "folders has been moved to SQLite since Evolution 2.24.\n\nPlease be "
+ "patient while Evolution migrates your folders..."));
+
+ store = setup_local_store (component);
+ info = camel_store_get_folder_info (store, NULL, CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST|CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, NULL);
+
+ if (info) {
+ struct migrate_folders_to_db_structure migrate_dbs;
+
+ if (g_str_has_suffix (((CamelService *)store)->url->path, ".evolution/mail/local"))
+ migrate_dbs.is_local_store = TRUE;
+ else
+ migrate_dbs.is_local_store = FALSE;
+ camel_exception_init (&migrate_dbs.ex);
+ migrate_dbs.account_name = _("On This Computer");
+ migrate_dbs.info = info;
+ migrate_dbs.store = store;
+ migrate_dbs.done = FALSE;
+
+ GThread *thread;
+ thread = g_thread_create ((GThreadFunc) migrate_folders_to_db_thread, &migrate_dbs, TRUE, NULL);
+ while (!migrate_dbs.done)
+ g_main_context_iteration (NULL, TRUE);
}
i++;
- e_iterator_next (iter);
-
- }
-
- //camel_session_set_online ((CamelSession *) session, TRUE);
-
- g_object_unref (iter);
- em_migrate_close_progress_dialog ();
+ while (e_iterator_is_valid (iter)) {
+ EAccount *account = (EAccount *) e_iterator_get (iter);
+ EAccountService *service;
+ const char *name;
+
+ service = account->source;
+ name = account->name;
+ if (account->enabled
+ && service->url != NULL
+ && service->url[0]
+ && strncmp(service->url, "mbox:", 5) != 0) {
+
+ CamelException ex;
+
+ camel_exception_init (&ex);
+ mail_component_load_store_by_uri (component, service->url, name);
+
+ store = (CamelStore *) camel_session_get_service (session, service->url, CAMEL_PROVIDER_STORE, &ex);
+ info = camel_store_get_folder_info (store, NULL, CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST|CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, &ex);
+ if (info) {
+ struct migrate_folders_to_db_structure migrate_dbs;
+
+ migrate_dbs.ex = ex;
+ migrate_dbs.account_name = account->name;
+ migrate_dbs.info = info;
+ migrate_dbs.store = store;
+ migrate_dbs.done = FALSE;
+
+ GThread *thread;
+ thread = g_thread_create ((GThreadFunc) migrate_folders_to_db_thread, &migrate_dbs, TRUE, NULL);
+ while (!migrate_dbs.done)
+ g_main_context_iteration (NULL, TRUE);
+ } else
+ printf("%s:%s: failed to get folder infos \n", G_STRLOC, G_STRFUNC);
+ camel_exception_clear(&ex);
+ }
+ i++;
+ e_iterator_next (iter);
+ }
+ //camel_session_set_online ((CamelSession *) session, TRUE);
+ g_object_unref (iter);
+ em_migrate_close_progress_dialog ();
}
int

View File

@ -0,0 +1,57 @@
Index: calendar/gui/e-calendar-table.c
===================================================================
--- calendar/gui/e-calendar-table.c (revision 36811)
+++ calendar/gui/e-calendar-table.c (working copy)
@@ -432,7 +432,7 @@ query_tooltip_cb (GtkWidget *widget, gin
e_cal_component_free_datetime (&dtstart);
e_cal_component_free_datetime (&dtdue);
- tmp = e_calendar_view_get_attendees_status_info (new_comp);
+ tmp = e_calendar_view_get_attendees_status_info (new_comp, comp->client);
if (tmp) {
l = gtk_label_new (tmp);
gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
Index: calendar/gui/e-calendar-view.c
===================================================================
--- calendar/gui/e-calendar-view.c (revision 36811)
+++ calendar/gui/e-calendar-view.c (working copy)
@@ -2137,7 +2137,7 @@ e_calendar_view_move_tip (GtkWidget *wid
* Free returned pointer with g_free.
**/
char *
-e_calendar_view_get_attendees_status_info (ECalComponent *comp)
+e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECal *client)
{
struct _values {
icalparameter_partstat status;
@@ -2158,7 +2158,7 @@ e_calendar_view_get_attendees_status_inf
char *res = NULL;
int i;
- if (!comp || !e_cal_component_has_attendees (comp))
+ if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user (comp, client))
return NULL;
e_cal_component_get_attendee_list (comp, &attendees);
@@ -2354,7 +2354,7 @@ e_calendar_view_get_tooltips (ECalendarV
g_free (tmp2);
g_free (tmp1);
- tmp = e_calendar_view_get_attendees_status_info (newcomp);
+ tmp = e_calendar_view_get_attendees_status_info (newcomp, pevent->comp_data->client);
if (tmp) {
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new (tmp), FALSE, FALSE, 0);
Index: calendar/gui/e-calendar-view.h
===================================================================
--- calendar/gui/e-calendar-view.h (revision 36811)
+++ calendar/gui/e-calendar-view.h (working copy)
@@ -175,7 +175,7 @@ gboolean e_calendar_view_get_tooltips (E
void e_calendar_view_move_tip (GtkWidget *widget, int x, int y);
const gchar *e_calendar_view_get_icalcomponent_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text);
-char *e_calendar_view_get_attendees_status_info (ECalComponent *comp);
+char *e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECal *client);
void draw_curved_rectangle (cairo_t *cr,
double x0,

View File

@ -0,0 +1,58 @@
Index: calendar/gui/itip-utils.c
===================================================================
--- calendar/gui/itip-utils.c (revision 37007)
+++ calendar/gui/itip-utils.c (working copy)
@@ -83,13 +83,13 @@ itip_addresses_get_default (void)
}
gboolean
-itip_organizer_is_user (ECalComponent *comp, ECal *client)
+itip_organizer_is_user_ex (ECalComponent *comp, ECal *client, gboolean skip_cap_test)
{
ECalComponentOrganizer organizer;
const char *strip;
gboolean user_org = FALSE;
- if (!e_cal_component_has_organizer (comp) || e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER))
+ if (!e_cal_component_has_organizer (comp) || (!skip_cap_test && e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER)))
return FALSE;
e_cal_component_get_organizer (comp, &organizer);
@@ -117,6 +117,12 @@ itip_organizer_is_user (ECalComponent *c
}
gboolean
+itip_organizer_is_user (ECalComponent *comp, ECal *client)
+{
+ return itip_organizer_is_user_ex (comp, client, FALSE);
+}
+
+gboolean
itip_sentby_is_user (ECalComponent *comp)
{
ECalComponentOrganizer organizer;
Index: calendar/gui/itip-utils.h
===================================================================
--- calendar/gui/itip-utils.h (revision 37007)
+++ calendar/gui/itip-utils.h (working copy)
@@ -51,6 +51,7 @@ EAccountList *itip_addresses_get (void);
EAccount *itip_addresses_get_default (void);
gboolean itip_organizer_is_user (ECalComponent *comp, ECal *client);
+gboolean itip_organizer_is_user_ex (ECalComponent *comp, ECal *client, gboolean skip_cap_test);
gboolean itip_sentby_is_user (ECalComponent *comp);
const gchar *itip_strip_mailto (const gchar *address);
Index: calendar/gui/e-calendar-view.c
===================================================================
--- calendar/gui/e-calendar-view.c (revision 37007)
+++ calendar/gui/e-calendar-view.c (working copy)
@@ -2234,7 +2234,7 @@ e_calendar_view_get_attendees_status_inf
char *res = NULL;
int i;
- if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user (comp, client))
+ if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user_ex (comp, client, TRUE))
return NULL;
e_cal_component_get_attendee_list (comp, &attendees);

View File

@ -0,0 +1,60 @@
Index: composer/e-msg-composer.c
===================================================================
--- composer/e-msg-composer.c (revision 36891)
+++ composer/e-msg-composer.c (working copy)
@@ -67,6 +67,7 @@
#include "e-util/e-plugin-ui.h"
#include "e-util/e-util-private.h"
#include "e-util/e-util.h"
+#include "e-util/e-mktemp.h"
#include <mail/em-event.h>
#include "e-signature-combo-box.h"
@@ -2454,6 +2455,7 @@ msg_composer_paste_clipboard (GtkhtmlEdi
EMsgComposer *composer;
GtkWidget *parent;
GtkWidget *widget;
+ GtkClipboard *clipboard;
composer = E_MSG_COMPOSER (editor);
widget = gtk_window_get_focus (GTK_WINDOW (editor));
@@ -2464,8 +2466,37 @@ msg_composer_paste_clipboard (GtkhtmlEdi
return;
}
- /* Chain up to parent's paste_clipboard() method. */
- GTKHTML_EDITOR_CLASS (parent_class)->paste_clipboard (editor);
+ clipboard = gtk_widget_get_clipboard (widget, GDK_SELECTION_CLIPBOARD);
+ if (clipboard && gtk_clipboard_wait_is_image_available (clipboard)) {
+ GdkPixbuf *pixbuf;
+
+ pixbuf = gtk_clipboard_wait_for_image (clipboard);
+ if (pixbuf) {
+ char *tmpl = g_strconcat (_("Image"), "-XXXXXX", NULL);
+ char *filename = e_mktemp (tmpl);
+
+ g_free (tmpl);
+
+ if (filename && gdk_pixbuf_save (pixbuf, filename, "png", NULL, NULL)) {
+ if (gtkhtml_editor_get_html_mode (editor)) {
+ char *uri = g_strconcat ("file://", filename, NULL);
+ /* this loads image async, thus cannot remove file from this */
+ gtkhtml_editor_insert_image (editor, uri);
+ g_free (uri);
+ } else {
+ /* this loads image immediately, remove file from cache to free up disk space */
+ e_attachment_bar_attach (E_ATTACHMENT_BAR (composer->priv->attachment_bar), filename, "image/png");
+ g_remove (filename);
+ }
+ }
+
+ g_free (filename);
+ g_object_unref (pixbuf);
+ }
+ } else {
+ /* Chain up to parent's paste_clipboard() method. */
+ GTKHTML_EDITOR_CLASS (parent_class)->paste_clipboard (editor);
+ }
}
static void

View File

@ -0,0 +1,496 @@
Index: calendar/gui/e-day-view-main-item.c
===================================================================
--- calendar/gui/e-day-view-main-item.c (revision 36947)
+++ calendar/gui/e-day-view-main-item.c (working copy)
@@ -940,146 +940,18 @@
if (day_view->resize_drag_pos != E_CALENDAR_VIEW_POS_NONE
&& day_view->resize_event_day == day
&& day_view->resize_event_num == event_num) {
- resize_flag = TRUE;
+ /* If the item is being resized, don't resized it.
+ I have removed code which are resized the meeting.
+ It will block the resize or move the meeting in
+ calendar UI from attendee side.*/
if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_TOP_EDGE)
bar_y1 = item_y + 1;
- else if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE) {
+ else if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE)
bar_y2 = item_y + item_h - 1;
-
- end_minute = event->end_minute;
-
- end_hour = end_minute / 60;
- end_minute = end_minute % 60;
-
- e_day_view_convert_time_to_display (day_view, end_hour,
- &end_display_hour,
- &end_resize_suffix,
- &end_suffix_width);
-
- cairo_save (cr);
- cairo_rectangle (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + 2.75,
- item_w - E_DAY_VIEW_BAR_WIDTH - 4.5,
- item_h - 5.5);
- cairo_clip (cr);
- cairo_new_path (cr);
-
- if (e_calendar_view_get_use_24_hour_format (E_CALENDAR_VIEW (day_view))) {
- cairo_translate (cr, item_x + item_w - E_DAY_VIEW_BAR_WIDTH - 32, item_y + item_h - 8);
- end_resize_time = g_strdup_printf ("%2i:%02i",
- end_display_hour, end_minute);
-
- } else {
- cairo_translate (cr, item_x + item_w - E_DAY_VIEW_BAR_WIDTH - 48, item_y + item_h - 8);
- end_resize_time = g_strdup_printf ("%2i:%02i%s",
- end_display_hour, end_minute,
- end_resize_suffix);
- }
- cairo_set_font_size (cr, 14);
- if ((red/cc > 0.7) || (green/cc > 0.7) || (blue/cc > 0.7 ))
- cairo_set_source_rgb (cr, 0, 0, 0);
- else
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_set_font_options (cr, font_options);
- cairo_show_text (cr, end_resize_time);
- cairo_close_path (cr);
- cairo_restore (cr);
- }
}
- if (bar_y2 > scroll_flag)
- event->end_minute += day_view->mins_per_row;
- else if (bar_y2 < scroll_flag)
- event->end_minute -= day_view->mins_per_row;
-
- if (!short_event)
- {
- if (event->start_minute % day_view->mins_per_row != 0
- || (day_view->show_event_end_times
- && event->end_minute % day_view->mins_per_row != 0)) {
- offset = day_view->first_hour_shown * 60
- + day_view->first_minute_shown;
- show_span = TRUE;
- } else {
- offset = 0;
- }
- start_minute = offset + event->start_minute;
- end_minute = offset + event->end_minute;
-
- format_time = (((end_minute - start_minute)/day_view->mins_per_row) >= 2) ? TRUE : FALSE;
-
- start_hour = start_minute / 60;
- start_minute = start_minute % 60;
-
- end_hour = end_minute / 60;
- end_minute = end_minute % 60;
-
- e_day_view_convert_time_to_display (day_view, start_hour,
- &start_display_hour,
- &start_suffix,
- &start_suffix_width);
- e_day_view_convert_time_to_display (day_view, end_hour,
- &end_display_hour,
- &end_suffix,
- &end_suffix_width);
-
- if (e_calendar_view_get_use_24_hour_format (E_CALENDAR_VIEW (day_view))) {
- if (day_view->show_event_end_times && show_span) {
- /* 24 hour format with end time. */
- text = g_strdup_printf
- ("%2i:%02i-%2i:%02i",
- start_display_hour, start_minute,
- end_display_hour, end_minute);
- } else {
- if (format_time) {
- /* 24 hour format without end time. */
- text = g_strdup_printf
- ("%2i:%02i",
- start_display_hour, start_minute);
- }
- }
- } else {
- if (day_view->show_event_end_times && show_span) {
- /* 12 hour format with end time. */
- text = g_strdup_printf
- ("%2i:%02i%s-%2i:%02i%s",
- start_display_hour, start_minute,
- start_suffix,
- end_display_hour, end_minute, end_suffix);
- } else {
- /* 12 hour format without end time. */
- text = g_strdup_printf
- ("%2i:%02i%s",
- start_display_hour, start_minute,
- start_suffix);
- }
- }
-
- cairo_save (cr);
- cairo_rectangle (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + 2.75,
- item_w - E_DAY_VIEW_BAR_WIDTH - 4.5,
- 14);
- cairo_clip (cr);
- cairo_new_path (cr);
- if (resize_flag)
- cairo_move_to (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 10, item_y + 13);
- else
- cairo_move_to (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 14, item_y + 13);
- if ((red/cc > 0.7) || (green/cc > 0.7) || (blue/cc > 0.7 ))
- cairo_set_source_rgb (cr, 0, 0, 0);
- else
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_set_font_size (cr, 14.0);
- cairo_set_font_options (cr, font_options);
- cairo_show_text (cr, text);
- cairo_close_path (cr);
- cairo_restore (cr);
- }
-
- if (font_options)
- cairo_font_options_destroy (font_options);
-
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
@@ -1115,188 +987,181 @@
&day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]);
/* Draw the reminder & recurrence icons, if needed. */
- if (!resize_flag) {
- num_icons = 0;
- draw_reminder_icon = FALSE;
- draw_recurrence_icon = FALSE;
- draw_timezone_icon = FALSE;
- draw_meeting_icon = FALSE;
- draw_attach_icon = FALSE;
- icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD;
- icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT
- + E_DAY_VIEW_ICON_Y_PAD;
+ num_icons = 0;
+ draw_reminder_icon = FALSE;
+ draw_recurrence_icon = FALSE;
+ draw_timezone_icon = FALSE;
+ draw_meeting_icon = FALSE;
+ draw_attach_icon = FALSE;
+ icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD;
+ icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT
+ + E_DAY_VIEW_ICON_Y_PAD;
- if (e_cal_component_has_alarms (comp)) {
- draw_reminder_icon = TRUE;
- num_icons++;
- }
+ if (e_cal_component_has_alarms (comp)) {
+ draw_reminder_icon = TRUE;
+ num_icons++;
+ }
- if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) {
- draw_recurrence_icon = TRUE;
- num_icons++;
- }
- if (e_cal_component_has_attachments (comp)) {
- draw_attach_icon = TRUE;
- num_icons++;
- }
- /* If the DTSTART or DTEND are in a different timezone to our current
- timezone, we display the timezone icon. */
- if (event->different_timezone) {
- draw_timezone_icon = TRUE;
- num_icons++;
- }
+ if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) {
+ draw_recurrence_icon = TRUE;
+ num_icons++;
+ }
+ if (e_cal_component_has_attachments (comp)) {
+ draw_attach_icon = TRUE;
+ num_icons++;
+ }
+ /* If the DTSTART or DTEND are in a different timezone to our current
+ timezone, we display the timezone icon. */
+ if (event->different_timezone) {
+ draw_timezone_icon = TRUE;
+ num_icons++;
+ }
- if (e_cal_component_has_organizer (comp)) {
- draw_meeting_icon = TRUE;
- num_icons++;
- }
+ if (e_cal_component_has_organizer (comp)) {
+ draw_meeting_icon = TRUE;
+ num_icons++;
+ }
- num_icons += cal_comp_util_get_n_icons (comp);
- e_cal_component_get_categories_list (comp, &categories_list);
+ num_icons += cal_comp_util_get_n_icons (comp);
+ e_cal_component_get_categories_list (comp, &categories_list);
- if (num_icons != 0) {
- if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD)
- * num_icons) {
- icon_x_inc = 0;
- icon_y_inc = E_DAY_VIEW_ICON_HEIGHT
- + E_DAY_VIEW_ICON_Y_PAD;
- } else {
- icon_x_inc = E_DAY_VIEW_ICON_WIDTH
- + E_DAY_VIEW_ICON_X_PAD;
- icon_y_inc = 0;
- }
+ if (num_icons != 0) {
+ if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD)
+ * num_icons) {
+ icon_x_inc = 0;
+ icon_y_inc = E_DAY_VIEW_ICON_HEIGHT
+ + E_DAY_VIEW_ICON_Y_PAD;
+ } else {
+ icon_x_inc = E_DAY_VIEW_ICON_WIDTH
+ + E_DAY_VIEW_ICON_X_PAD;
+ icon_y_inc = 0;
+ }
- if (draw_reminder_icon) {
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
+ if (draw_reminder_icon) {
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- cairo_save (cr);
- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
- cairo_clip (cr);
- cairo_new_path (cr);
- gdk_cairo_set_source_pixbuf (cr, day_view->reminder_icon, icon_x, icon_y);
- cairo_paint (cr);
- cairo_close_path (cr);
- cairo_restore (cr);
+ cairo_save (cr);
+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
+ cairo_clip (cr);
+ cairo_new_path (cr);
+ gdk_cairo_set_source_pixbuf (cr, day_view->reminder_icon, icon_x, icon_y);
+ cairo_paint (cr);
+ cairo_close_path (cr);
+ cairo_restore (cr);
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
+ }
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
+ if (draw_recurrence_icon) {
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- if (draw_recurrence_icon) {
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
+ cairo_save (cr);
+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
+ cairo_clip (cr);
+ cairo_new_path (cr);
+ gdk_cairo_set_source_pixbuf (cr, day_view->recurrence_icon, icon_x, icon_y);
+ cairo_paint (cr);
+ cairo_close_path (cr);
+ cairo_restore (cr);
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
+ }
+ if (draw_attach_icon) {
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- cairo_save (cr);
- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
- cairo_clip (cr);
- cairo_new_path (cr);
- gdk_cairo_set_source_pixbuf (cr, day_view->recurrence_icon, icon_x, icon_y);
- cairo_paint (cr);
- cairo_close_path (cr);
- cairo_restore (cr);
+ cairo_save (cr);
+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
+ cairo_clip (cr);
+ cairo_new_path (cr);
+ gdk_cairo_set_source_pixbuf (cr, day_view->attach_icon, icon_x, icon_y);
+ cairo_paint (cr);
+ cairo_close_path (cr);
+ cairo_restore (cr);
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
+ }
+ if (draw_timezone_icon) {
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
- if (draw_attach_icon) {
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
+ cairo_save (cr);
+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
+ cairo_clip (cr);
+ cairo_new_path (cr);
+ gdk_cairo_set_source_pixbuf (cr, day_view->timezone_icon, icon_x, icon_y);
+ cairo_paint (cr);
+ cairo_close_path (cr);
+ cairo_restore (cr);
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
+ }
- cairo_save (cr);
- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
- cairo_clip (cr);
- cairo_new_path (cr);
- gdk_cairo_set_source_pixbuf (cr, day_view->attach_icon, icon_x, icon_y);
- cairo_paint (cr);
- cairo_close_path (cr);
- cairo_restore (cr);
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
- if (draw_timezone_icon) {
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
+ if (draw_meeting_icon) {
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- cairo_save (cr);
- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
- cairo_clip (cr);
- cairo_new_path (cr);
- gdk_cairo_set_source_pixbuf (cr, day_view->timezone_icon, icon_x, icon_y);
- cairo_paint (cr);
- cairo_close_path (cr);
- cairo_restore (cr);
+ cairo_save (cr);
+ gdk_cairo_set_source_pixbuf (cr, day_view->meeting_icon, icon_x, icon_y);
+ cairo_paint (cr);
+ cairo_restore (cr);
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
+ }
+ /* draw categories icons */
+ for (elem = categories_list; elem; elem = elem->next) {
+ char *category;
+ GdkPixmap *pixmap = NULL;
+ GdkBitmap *mask = NULL;
- if (draw_meeting_icon) {
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
+ category = (char *) elem->data;
+ if (!e_categories_config_get_icon_for (category, &pixmap, &mask))
+ continue;
- cairo_save (cr);
- gdk_cairo_set_source_pixbuf (cr, day_view->meeting_icon, icon_x, icon_y);
- cairo_paint (cr);
- cairo_restore (cr);
+ max_icon_w = item_x + item_w - icon_x
+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
+ max_icon_h = item_y + item_h - icon_y
+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
+ gdk_gc_set_clip_origin (gc, icon_x, icon_y);
+ if (mask != NULL)
+ gdk_gc_set_clip_mask (gc, mask);
+ gdk_draw_drawable (drawable, gc,
+ pixmap,
+ 0, 0, icon_x, icon_y,
+ MIN (E_DAY_VIEW_ICON_WIDTH,
+ max_icon_w),
+ MIN (E_DAY_VIEW_ICON_HEIGHT,
+ max_icon_h));
- /* draw categories icons */
- for (elem = categories_list; elem; elem = elem->next) {
- char *category;
- GdkPixmap *pixmap = NULL;
- GdkBitmap *mask = NULL;
+ g_object_unref (pixmap);
+ if (mask != NULL)
+ g_object_unref (mask);
- category = (char *) elem->data;
- if (!e_categories_config_get_icon_for (category, &pixmap, &mask))
- continue;
-
- max_icon_w = item_x + item_w - icon_x
- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
- max_icon_h = item_y + item_h - icon_y
- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
- gdk_gc_set_clip_origin (gc, icon_x, icon_y);
- if (mask != NULL)
- gdk_gc_set_clip_mask (gc, mask);
- gdk_draw_drawable (drawable, gc,
- pixmap,
- 0, 0, icon_x, icon_y,
- MIN (E_DAY_VIEW_ICON_WIDTH,
- max_icon_w),
- MIN (E_DAY_VIEW_ICON_HEIGHT,
- max_icon_h));
-
- g_object_unref (pixmap);
- if (mask != NULL)
- g_object_unref (mask);
-
- icon_x += icon_x_inc;
- icon_y += icon_y_inc;
- }
-
- gdk_gc_set_clip_mask (gc, NULL);
+ icon_x += icon_x_inc;
+ icon_y += icon_y_inc;
}
- /* free memory */
- e_cal_component_free_categories_list (categories_list);
+ gdk_gc_set_clip_mask (gc, NULL);
}
- g_free (text);
+ /* free memory */
+ e_cal_component_free_categories_list (categories_list);
+
g_object_unref (comp);
cairo_destroy (cr);
}

View File

@ -0,0 +1,15 @@
Index: plugins/groupwise-features/mail-retract.c
===================================================================
--- plugins/groupwise-features/mail-retract.c (revision 36818)
+++ plugins/groupwise-features/mail-retract.c (working copy)
@@ -104,8 +104,8 @@
/* for translation*/
if (!first) {
- popup_items[0].label = _(popup_items[0].label);
- popup_items[0].user_data = g_strdup((char *) g_ptr_array_index(uids, 0));
+ popup_items[1].label = _(popup_items[1].label);
+ popup_items[1].user_data = g_strdup((char *) g_ptr_array_index(uids, 0));
}
first++;

View File

@ -0,0 +1,26 @@
--- calendar/gui/dialogs/comp-editor.c
+++ calendar/gui/dialogs/comp-editor.c
@@ -1771,6 +1771,14 @@ comp_editor_class_init (CompEditorClass *class)
G_TYPE_NONE, 0);
}
+static void
+on_classification_changed (GtkRadioAction *action, GtkRadioAction *current, gpointer *data)
+{
+ CompEditor *editor = COMP_EDITOR (data);
+
+ comp_editor_set_changed (editor, TRUE);
+}
+
static void
comp_editor_init (CompEditor *editor)
{
@@ -1820,7 +1828,7 @@ comp_editor_init (CompEditor *editor)
action_group, classification_radio_entries,
G_N_ELEMENTS (classification_radio_entries),
E_CAL_COMPONENT_CLASS_PUBLIC,
- NULL, NULL); /* no callback */
+ G_CALLBACK (on_classification_changed), editor); /* no callback */
action = e_attachment_bar_recent_action_new (
E_ATTACHMENT_BAR (priv->attachment_bar),
"attach-recent", _("Recent _Documents"));

View File

@ -0,0 +1,65 @@
Index: calendar/gui/dialogs/comp-editor.c
===================================================================
--- calendar/gui/dialogs/comp-editor.c (revision 36884)
+++ calendar/gui/dialogs/comp-editor.c (working copy)
@@ -1102,6 +1102,24 @@
g_object_unref (comp);
}
+static gboolean
+remove_event_dialog (ECal *client,
+ ECalComponent *comp,
+ GtkWindow *parent)
+{
+ GtkWidget *dialog;
+ gboolean ret;
+
+ g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), TRUE);
+
+ dialog = gtk_message_dialog_new (parent, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", _("Keep original item?"));
+ gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
+ ret = gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES;
+ gtk_widget_destroy (dialog);
+
+ return ret;
+}
+
static void
action_save_cb (GtkAction *action,
CompEditor *editor)
@@ -1153,9 +1171,33 @@
if (!text.value)
if (!send_component_prompt_subject ((GtkWindow *) editor, priv->client, priv->comp))
return;
- if (save_comp_with_send (editor))
- close_dialog (editor);
+ if (save_comp_with_send (editor)) {
+ CompEditorFlags flags;
+ gboolean delegate;
+
+ flags = comp_editor_get_flags (editor);
+ delegate = flags & COMP_EDITOR_DELEGATE;
+
+ if (delegate && !remove_event_dialog (priv->client, priv->comp, GTK_WINDOW (editor))) {
+ const char *uid = NULL;
+ GError *error = NULL;
+
+ e_cal_component_get_uid (priv->comp, &uid);
+
+ if (e_cal_component_is_instance (priv->comp) || e_cal_component_has_recurrences (priv->comp)) {
+ gchar *rid;
+ rid = e_cal_component_get_recurid_as_string (priv->comp);
+ e_cal_remove_object_with_mod (priv->client, uid, rid, priv->mod, &error);
+ g_free (rid);
+ } else
+ e_cal_remove_object (priv->client, uid, &error);
+
+ g_clear_error (&error);
+ }
+ }
+
+ close_dialog (editor);
}
static void

View File

@ -0,0 +1,33 @@
Index: plugins/itip-formatter/itip-formatter.c
===================================================================
--- plugins/itip-formatter/itip-formatter.c (revision 36884)
+++ plugins/itip-formatter/itip-formatter.c (working copy)
@@ -1955,6 +1955,12 @@
!em_utils_folder_is_outbox (folder, uri) &&
!em_utils_folder_is_drafts (folder, uri);
+ /*FIXME: GW needs to set the drafts_folder_uri and sent_folder_uri properly.
+ A workaround till then */
+ if (res && (!g_ascii_strcasecmp (folder->name, _("Sent")) ||
+ !g_ascii_strcasecmp (folder->name, _("Sent Items"))))
+ res = 0;
+
g_free (uri);
return res;
@@ -2000,6 +2006,15 @@
response_enabled = in_proper_folder (((EMFormat*)efh)->folder);
+ /* Do not display Accept/Decline Buttons if its a forwarded meeting request */
+ if (response_enabled) {
+ CamelMimeMessage *msg = info->msg;
+ const char *subject = camel_mime_message_get_subject (msg);
+
+ if (!g_ascii_strncasecmp (subject, _("[Fwd: "), 6))
+ response_enabled = 0;
+ }
+
if (!response_enabled) {
itip_view_set_mode (ITIP_VIEW (info->view), ITIP_VIEW_MODE_HIDE_ALL);
} else {

View File

@ -0,0 +1,86 @@
Index: calendar/gui/e-meeting-store.c
===================================================================
--- calendar/gui/e-meeting-store.c (revision 36995)
+++ calendar/gui/e-meeting-store.c (working copy)
@@ -1017,6 +1017,10 @@
busy_type = E_MEETING_FREE_BUSY_TENTATIVE;
break;
+ case ICAL_FBTYPE_FREE:
+ busy_type = E_MEETING_FREE_BUSY_FREE;
+ break;
+
default:
break;
}
Index: calendar/gui/e-meeting-types.h
===================================================================
--- calendar/gui/e-meeting-types.h (revision 36995)
+++ calendar/gui/e-meeting-types.h (working copy)
@@ -48,11 +48,12 @@
used as for loop counters, so they should start at 0 and be ordered. */
typedef enum
{
- E_MEETING_FREE_BUSY_TENTATIVE = 0,
+ E_MEETING_FREE_BUSY_TENTATIVE = 0,
E_MEETING_FREE_BUSY_OUT_OF_OFFICE = 1,
E_MEETING_FREE_BUSY_BUSY = 2,
+ E_MEETING_FREE_BUSY_FREE = 3,
- E_MEETING_FREE_BUSY_LAST = 3
+ E_MEETING_FREE_BUSY_LAST = 4
} EMeetingFreeBusyType;
/* This is our representation of a time. We use a GDate to store the day,
Index: calendar/gui/e-meeting-attendee.c
===================================================================
--- calendar/gui/e-meeting-attendee.c (revision 36995)
+++ calendar/gui/e-meeting-attendee.c (working copy)
@@ -845,6 +845,10 @@
if (compare_times (&period.start, &period.end) > 0)
return FALSE;
+ /* If the busy_type is FREE, then there is no need to render it in UI */
+ if (busy_type == E_MEETING_FREE_BUSY_FREE)
+ goto done;
+
/* If the busy range is not set elsewhere, track it as best we can */
if (!priv->start_busy_range_set) {
if (!g_date_valid (&priv->busy_periods_start.date)) {
@@ -871,6 +875,7 @@
}
}
}
+
if (!priv->end_busy_range_set) {
if (!g_date_valid (&priv->busy_periods_end.date)) {
priv->busy_periods_end.date = period.end.date;
@@ -898,12 +903,14 @@
}
g_array_append_val (priv->busy_periods, period);
- priv->has_calendar_info = TRUE;
- priv->busy_periods_sorted = FALSE;
period_in_days = g_date_get_julian (&period.end.date) - g_date_get_julian (&period.start.date) + 1;
priv->longest_period_in_days = MAX (priv->longest_period_in_days, period_in_days);
+done:
+ priv->has_calendar_info = TRUE;
+ priv->busy_periods_sorted = FALSE;
+
return TRUE;
}
Index: calendar/gui/e-meeting-time-sel.c
===================================================================
--- calendar/gui/e-meeting-time-sel.c (revision 36995)
+++ calendar/gui/e-meeting-time-sel.c (working copy)
@@ -649,6 +649,7 @@
e_meeting_time_selector_alloc_named_color (mts, "white", &mts->attendee_list_bg_color);
e_meeting_time_selector_alloc_named_color (mts, "snow4", &mts->meeting_time_bg_color);
+ e_meeting_time_selector_alloc_named_color (mts, "snow", &mts->busy_colors[E_MEETING_FREE_BUSY_FREE]);
e_meeting_time_selector_alloc_named_color (mts, "yellow", &mts->busy_colors[E_MEETING_FREE_BUSY_TENTATIVE]);
e_meeting_time_selector_alloc_named_color (mts, "blue", &mts->busy_colors[E_MEETING_FREE_BUSY_BUSY]);
e_meeting_time_selector_alloc_named_color (mts, "orange4", &mts->busy_colors[E_MEETING_FREE_BUSY_OUT_OF_OFFICE]);

View File

@ -0,0 +1,35 @@
Index: e-util/e-gui-utils.c
===================================================================
--- e-util/e-gui-utils.c (revision 36925)
+++ e-util/e-gui-utils.c (working copy)
@@ -64,3 +64,30 @@
return pixbuf;
}
+
+GtkWidget *e_create_image_widget(gchar *name,
+ gchar *string1, gchar *string2,
+ gint int1, gint int2)
+{
+ GtkWidget *alignment = NULL;
+ GtkWidget *w;
+
+ if (string1) {
+ w = gtk_image_new_from_icon_name (
+ string1, GTK_ICON_SIZE_DIALOG);
+
+ gtk_misc_set_alignment (GTK_MISC (w), 0.5, 0.5);
+
+ alignment = gtk_widget_new(gtk_alignment_get_type(),
+ "child", w,
+ "xalign", (double) 0,
+ "yalign", (double) 0,
+ "xscale", (double) 0,
+ "yscale", (double) 0,
+ NULL);
+
+ gtk_widget_show_all (alignment);
+ }
+
+ return alignment;
+}

View File

@ -0,0 +1,97 @@
Index: calendar/gui/e-select-names-editable.c
===================================================================
--- calendar/gui/e-select-names-editable.c (revision 36818)
+++ calendar/gui/e-select-names-editable.c (working copy)
@@ -129,7 +129,7 @@
e_select_names_editable_get_emails (ESelectNamesEditable *esne)
{
EDestinationStore *destination_store;
- GList *destinations;
+ GList *destinations, *l;
EDestination *destination;
GList *result = NULL;
@@ -140,25 +140,27 @@
if (!destinations)
return NULL;
- destination = destinations->data;
- if (e_destination_is_evolution_list (destination)) {
- const GList *list_dests, *l;
+ for (l = destinations; l != NULL; l = l->next) {
+ destination = l->data;
+ if (e_destination_is_evolution_list (destination)) {
+ const GList *list_dests, *l;
- list_dests = e_destination_list_get_dests (destination);
- for (l = list_dests; l != NULL; l = g_list_next (l)) {
- result = g_list_append (result, g_strdup (e_destination_get_email (l->data)));
+ list_dests = e_destination_list_get_dests (destination);
+ for (l = list_dests; l != NULL; l = g_list_next (l)) {
+ result = g_list_append (result, g_strdup (e_destination_get_email (l->data)));
+ }
+ } else {
+ /* check if the contact is contact list, it does not contain all the email ids */
+ /* we dont expand it currently, TODO do we need to expand it by getting it from addressbook*/
+ if (e_destination_get_contact (destination) &&
+ e_contact_get (e_destination_get_contact (destination), E_CONTACT_IS_LIST)) {
+ /* If its a contact_list which is not expanded, it wont have a email id,
+ so we can use the name as the email id */
+
+ result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
+ } else
+ result = g_list_append (result, g_strdup (e_destination_get_email (destination)));
}
- } else {
- /* check if the contact is contact list, it does not contain all the email ids */
- /* we dont expand it currently, TODO do we need to expand it by getting it from addressbook*/
- if (e_destination_get_contact (destination) &&
- e_contact_get (e_destination_get_contact (destination), E_CONTACT_IS_LIST)) {
- /* If its a contact_list which is not expanded, it wont have a email id,
- so we can use the name as the email id */
-
- result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
- } else
- result = g_list_append (result, g_strdup (e_destination_get_email (destination)));
}
g_list_free (destinations);
@@ -191,7 +193,7 @@
e_select_names_editable_get_names (ESelectNamesEditable *esne)
{
EDestinationStore *destination_store;
- GList *destinations;
+ GList *destinations, *l;
EDestination *destination;
GList *result = NULL;
@@ -202,18 +204,20 @@
if (!destinations)
return NULL;
- destination = destinations->data;
- if (e_destination_is_evolution_list (destination)) {
- const GList *list_dests, *l;
+ for (l = destinations; l != NULL; l = l->next) {
+ destination = l->data;
+ if (e_destination_is_evolution_list (destination)) {
+ const GList *list_dests, *l;
- list_dests = e_destination_list_get_dests (destination);
- for (l = list_dests; l != NULL; l = g_list_next (l)) {
- result = g_list_append (result, g_strdup (e_destination_get_name (l->data)));
+ list_dests = e_destination_list_get_dests (destination);
+ for (l = list_dests; l != NULL; l = g_list_next (l)) {
+ result = g_list_append (result, g_strdup (e_destination_get_name (l->data)));
+ }
+ } else {
+ result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
}
- } else {
- result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
}
-
+
g_list_free (destinations);
return result;

View File

@ -0,0 +1,227 @@
--- mail//em-format-html-display.c 2008-10-13 14:07:24.000000000 +0530
+++ mail//em-format-html-display.c 2008-12-22 15:19:01.000000000 +0530
@@ -49,6 +49,7 @@
#include <bonobo/bonobo-control-frame.h>
#include <bonobo/bonobo-stream-memory.h>
#include <bonobo/bonobo-widget.h>
+#include <bonobo-activation/bonobo-activation-mime.h>
#include <camel/camel-stream.h>
#include <camel/camel-stream-filter.h>
@@ -188,6 +189,8 @@ static void efhd_format_secure(EMFormat
static void efhd_complete(EMFormat *);
gboolean efhd_mnemonic_show_bar (GtkWidget *widget, gboolean focus, GtkWidget *efhd);
+static gboolean efhd_bonobo_object(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject);
+static gboolean efhd_use_component(const char *mime_type);
static void efhd_builtin_init(EMFormatHTMLDisplayClass *efhc);
enum {
@@ -1303,10 +1306,37 @@ efhd_builtin_init(EMFormatHTMLDisplayCla
}
/* ********************************************************************** */
-
+static void
+efhd_bonobo_unknown(EMFormat *emf, CamelStream *stream, CamelMimePart *part, const EMFormatHandler *info)
+{
+ char *classid;
+
+ classid = g_strdup_printf("bonobo-unknown:///em-format-html-display/%s", emf->part_id->str);
+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_bonobo_object);
+ camel_stream_printf(stream, "<object classid=\"%s\" type=\"%s\"></object><br>\n", classid, info->mime_type);
+ g_free(classid);
+}
+
+ /* ********************************************************************** */
static const EMFormatHandler *efhd_find_handler(EMFormat *emf, const char *mime_type)
{
- return ((EMFormatClass *)efhd_parent)->find_handler(emf, mime_type);
+ const EMFormatHandler *handle;
+
+ if ( (handle = ((EMFormatClass *)efhd_parent)->find_handler(emf, mime_type)) == NULL
+ && efhd_use_component(mime_type)
+ && (handle = g_hash_table_lookup(efhd_bonobo_handlers, mime_type)) == NULL) {
+
+ EMFormatHandler *h = g_malloc0(sizeof(*h));
+
+ h->mime_type = g_strdup(mime_type);
+ h->handler = efhd_bonobo_unknown;
+ h->flags = EM_FORMAT_HANDLER_INLINE_DISPOSITION;
+ g_hash_table_insert(efhd_bonobo_handlers, h->mime_type, h);
+
+ handle = h;
+ }
+
+ return handle;
}
static void efhd_format_clone(EMFormat *emf, CamelFolder *folder, const char *uid, CamelMimeMessage *msg, EMFormat *src)
@@ -1956,6 +1986,154 @@ efhd_attachment_frame(EMFormat *emf, Cam
}
}
+static gboolean
+efhd_bonobo_object(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject)
+{
+ CamelDataWrapper *wrapper;
+ Bonobo_ServerInfo *component;
+ GtkWidget *embedded;
+ Bonobo_PersistStream persist;
+ CORBA_Environment ev;
+ CamelStreamMem *cstream;
+ BonoboStream *bstream;
+ BonoboControlFrame *control_frame;
+ Bonobo_PropertyBag prop_bag;
+
+ component = bonobo_activation_get_default_component_for_mime_type (eb->type);
+ if (component == NULL)
+ return FALSE;
+
+ embedded = bonobo_widget_new_control(component->iid, NULL);
+ CORBA_free(component);
+ if (embedded == NULL)
+ return FALSE;
+
+ CORBA_exception_init(&ev);
+
+ control_frame = bonobo_widget_get_control_frame((BonoboWidget *)embedded);
+ prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
+ if (prop_bag != CORBA_OBJECT_NIL) {
+ /*
+ * Now we can take care of business. Currently, the only control
+ * that needs something passed to it through a property bag is
+ * the iTip control, and it needs only the From email address,
+ * but perhaps in the future we can generalize this section of code
+ * to pass a bunch of useful things to all embedded controls.
+ */
+ const CamelInternetAddress *from;
+ char *from_address;
+
+ from = camel_mime_message_get_from((CamelMimeMessage *)((EMFormat *)efh)->message);
+ from_address = camel_address_encode((CamelAddress *)from);
+ bonobo_property_bag_client_set_value_string(prop_bag, "from_address", from_address, &ev);
+ g_free(from_address);
+
+ Bonobo_Unknown_unref(prop_bag, &ev);
+ }
+
+ persist = (Bonobo_PersistStream)Bonobo_Unknown_queryInterface(bonobo_widget_get_objref((BonoboWidget *)embedded),
+ "IDL:Bonobo/PersistStream:1.0", &ev);
+ if (persist == CORBA_OBJECT_NIL) {
+ g_object_ref_sink(embedded);
+ CORBA_exception_free(&ev);
+ return FALSE;
+ }
+
+ /* Write the data to a CamelStreamMem... */
+ cstream = (CamelStreamMem *)camel_stream_mem_new();
+ wrapper = camel_medium_get_content_object((CamelMedium *)pobject->part);
+ if (FALSE && !g_ascii_strncasecmp (eb->type, "text/", 5)) {
+ /* do charset conversion, etc */
+ d(printf("performing charset conversion for %s component\n", eb->type));
+ em_format_format_text((EMFormat *)efh, (CamelStream *)cstream, wrapper);
+ } else {
+ camel_data_wrapper_decode_to_stream (wrapper, (CamelStream *) cstream);
+ }
+
+ /* ...convert the CamelStreamMem to a BonoboStreamMem... */
+ bstream = bonobo_stream_mem_create((char *)cstream->buffer->data, cstream->buffer->len, TRUE, FALSE);
+ camel_object_unref(cstream);
+
+ /* ...and hydrate the PersistStream from the BonoboStream. */
+ Bonobo_PersistStream_load(persist,
+ bonobo_object_corba_objref(BONOBO_OBJECT (bstream)),
+ eb->type, &ev);
+ bonobo_object_unref(BONOBO_OBJECT (bstream));
+ Bonobo_Unknown_unref(persist, &ev);
+ CORBA_Object_release(persist, &ev);
+
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_object_ref_sink(embedded);
+ CORBA_exception_free(&ev);
+ return FALSE;
+ }
+ CORBA_exception_free(&ev);
+
+ gtk_widget_show(embedded);
+ gtk_container_add(GTK_CONTAINER (eb), embedded);
+
+ return TRUE;
+}
+
+static gboolean
+efhd_check_server_prop(Bonobo_ServerInfo *component, const char *propname, const char *value)
+{
+ CORBA_sequence_CORBA_string stringv;
+ Bonobo_ActivationProperty *prop;
+ int i;
+
+ prop = bonobo_server_info_prop_find(component, propname);
+ if (!prop || prop->v._d != Bonobo_ACTIVATION_P_STRINGV)
+ return FALSE;
+
+ stringv = prop->v._u.value_stringv;
+ for (i = 0; i < stringv._length; i++) {
+ if (!g_ascii_strcasecmp(value, stringv._buffer[i]))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+efhd_use_component(const char *mime_type)
+{
+ GList *components, *iter;
+ Bonobo_ServerInfo *component = NULL;
+
+ /* should this cache it? */
+
+ if (g_ascii_strcasecmp(mime_type, "text/x-vcard") != 0
+ && g_ascii_strcasecmp(mime_type, "text/calendar") != 0) {
+ const char **mime_types;
+ int i;
+
+ mime_types = mail_config_get_allowable_mime_types();
+ for (i = 0; mime_types[i]; i++) {
+ if (!g_ascii_strcasecmp(mime_types[i], mime_type))
+ goto type_ok;
+ }
+ return FALSE;
+ }
+type_ok:
+ components = bonobo_activation_get_all_components_for_mime_type (mime_type);
+ for (iter = components; iter; iter = iter->next) {
+ Bonobo_ServerInfo *comp = iter->data;
+
+ comp = iter->data;
+ if (efhd_check_server_prop(comp, "repo_ids", "IDL:Bonobo/PersistStream:1.0")
+ && efhd_check_server_prop(comp, "bonobo:supported_mime_types", mime_type)) {
+ component = comp;
+ break;
+ }
+ }
+
+ /* FIXME: How should I free the Bonobo_ServerInfo's ? */
+ g_list_free (components);
+
+ return component != NULL;
+}
+
static void
attachment_bar_arrow_clicked(GtkWidget *w, EMFormatHTMLDisplay *efhd)
{
@@ -2329,6 +2507,12 @@ efhd_format_attachment(EMFormat *emf, Ca
if (handle) {
if (info->shown)
handle->handler(emf, stream, part, handle);
+ } else if (efhd_use_component(mime_type)) {
+ g_free(classid); /* messy */
+
+ classid = g_strdup_printf("bonobo-unknown:///em-format-html-display/%s", emf->part_id->str);
+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_bonobo_object);
+ camel_stream_printf(stream, "<object classid=\"%s\" type=\"%s\"></object><br>>\n", classid, mime_type);
}
g_free(classid);

View File

@ -0,0 +1,11 @@
--- mail/em-account-editor.c
+++ mail/em-account-editor.c
@@ -2001,7 +2001,7 @@ emae_option_checkspin(EMAccountEditorService *service, CamelURL *url, const char
spin = gtk_spin_button_new((GtkAdjustment *)gtk_adjustment_new(def, min, max, 1, 1, 1), 1, 0);
if (post)
- label = gtk_label_new(post);
+ label = gtk_label_new_with_mnemonic(post);
gtk_box_pack_start((GtkBox *)hbox, check, FALSE, TRUE, 0);
gtk_box_pack_start((GtkBox *)hbox, spin, FALSE, TRUE, 0);
if (label)

View File

@ -0,0 +1,10 @@
--- mail/mail-folder-cache.c
+++ mail/mail-folder-cache.c
@@ -420,6 +420,7 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
((flags & CAMEL_MESSAGE_DELETED) == 0) &&
(camel_message_info_date_received (info) > last_newmail))
new++;
+ camel_message_info_free (info);
}
}
}

View File

@ -0,0 +1,66 @@
Index: calendar/gui/dialogs/comp-editor.c
===================================================================
--- calendar/gui/dialogs/comp-editor.c (revision 36987)
+++ calendar/gui/dialogs/comp-editor.c (working copy)
@@ -164,6 +164,7 @@
" <toolitem action='close'/>"
" <separator/>"
" <toolitem action='attach'/>"
+" <separator/>"
" </toolbar>"
"</ui>";
Index: calendar/gui/dialogs/event-editor.c
===================================================================
--- calendar/gui/dialogs/event-editor.c (revision 36987)
+++ calendar/gui/dialogs/event-editor.c (working copy)
@@ -79,20 +79,21 @@
" <menu action='options-menu'>"
" <menuitem action='alarms'/>"
" <menuitem action='show-time-busy'/>"
+" <menuitem action='recurrence'/>"
" <menuitem action='all-day-event'/>"
+" <menuitem action='free-busy'/>"
" <menu action='classification-menu'>"
" <menuitem action='classify-public'/>"
" <menuitem action='classify-private'/>"
" <menuitem action='classify-confidential'/>"
" </menu>"
-" <menuitem action='recurrence'/>"
-" <menuitem action='free-busy'/>"
" </menu>"
" </menubar>"
" <toolbar name='main-toolbar'>"
" <toolitem action='alarms'/>"
+" <toolitem action='show-time-busy'/>"
+" <toolitem action='recurrence'/>"
" <toolitem action='all-day-event'/>"
-" <toolitem action='recurrence'/>"
" <toolitem action='free-busy'/>"
" </toolbar>"
"</ui>";
@@ -149,9 +150,15 @@
EventEditor *editor)
{
gboolean active;
+ GtkAction *action_show_busy;
+ CompEditor *comp_editor = COMP_EDITOR (editor);
active = gtk_toggle_action_get_active (action);
event_page_set_all_day_event (editor->priv->event_page, active);
+
+ action_show_busy = comp_editor_get_action (comp_editor, "show-time-busy");
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action_show_busy), !active);
+ event_page_set_show_time_busy (editor->priv->event_page, !active);
}
static void
@@ -223,7 +230,7 @@
FALSE },
{ "show-time-busy",
- NULL,
+ GTK_STOCK_DIALOG_ERROR,
N_("Show Time as _Busy"),
NULL,
N_("Toggles whether to show time as busy"),

View File

@ -0,0 +1,20 @@
Index: calendar/gui/dialogs/comp-editor.c
===================================================================
--- calendar/gui/dialogs/comp-editor.c (revision 36992)
+++ calendar/gui/dialogs/comp-editor.c (working copy)
@@ -2433,6 +2433,7 @@
editor->priv->summary = g_strdup (summary);
show_warning =
+ !(editor->priv->flags & COMP_EDITOR_DELEGATE) &&
!editor->priv->warned &&
editor->priv->existing_org &&
!editor->priv->user_org;
@@ -2482,6 +2483,7 @@
show_warning =
changed && !editor->priv->warned &&
+ !(editor->priv->flags & COMP_EDITOR_DELEGATE) &&
editor->priv->existing_org && !editor->priv->user_org;
if (show_warning) {

View File

@ -0,0 +1,48 @@
Index: calendar/gui/dialogs/memo-editor.c
===================================================================
--- calendar/gui/dialogs/memo-editor.c (revision 36948)
+++ calendar/gui/dialogs/memo-editor.c (revision 36949)
@@ -97,6 +97,21 @@
}
static void
+memo_editor_constructed (GObject *object)
+{
+ MemoEditorPrivate *priv;
+ CompEditor *editor;
+
+ priv = MEMO_EDITOR_GET_PRIVATE (object);
+ editor = COMP_EDITOR (object);
+
+ priv->memo_page = memo_page_new (editor);
+ comp_editor_append_page (
+ editor, COMP_EDITOR_PAGE (priv->memo_page),
+ _("Memo"), TRUE);
+}
+
+static void
memo_editor_class_init (MemoEditorClass *class)
{
GObjectClass *object_class;
@@ -106,6 +121,7 @@
object_class = G_OBJECT_CLASS (class);
object_class->dispose = memo_editor_dispose;
+ object_class->constructed = memo_editor_constructed;
/* TODO Add a help section for memos. */
editor_class = COMP_EDITOR_CLASS (class);
@@ -132,13 +148,6 @@
g_critical ("%s: %s", G_STRFUNC, error->message);
g_error_free (error);
}
-
- me->priv->memo_page = memo_page_new (editor);
- g_object_ref_sink (me->priv->memo_page);
- comp_editor_append_page (
- COMP_EDITOR (me),
- COMP_EDITOR_PAGE (me->priv->memo_page),
- _("Memo"), TRUE);
}
/**

View File

@ -0,0 +1,13 @@
Index: calendar/gui/e-cal-popup.c
===================================================================
--- calendar/gui/e-cal-popup.c (revision 36995)
+++ calendar/gui/e-cal-popup.c (working copy)
@@ -139,7 +139,7 @@
usepath = g_strjoin (NULL, "file://", path, NULL);
wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part));
- stream = camel_stream_vfs_new_with_uri (path, CAMEL_STREAM_VFS_CREATE);
+ stream = camel_stream_vfs_new_with_uri (usepath, CAMEL_STREAM_VFS_CREATE);
if (usepath != path)
g_free (usepath);

View File

@ -0,0 +1,97 @@
Index: calendar/gui/print.c
===================================================================
--- calendar/gui/print.c (revision 36992)
+++ calendar/gui/print.c (working copy)
@@ -129,9 +129,9 @@
/* The width of the small calendar months, the space from the right edge of
the header rectangle, and the space between the months. */
-#define SMALL_MONTH_WIDTH 80
-#define SMALL_MONTH_PAD 4
-#define SMALL_MONTH_SPACING 12
+#define SMALL_MONTH_WIDTH 100
+#define SMALL_MONTH_PAD 5
+#define SMALL_MONTH_SPACING 20
/* The minimum number of rows we leave space for for the long events in the
day view. */
@@ -502,7 +502,7 @@
*x1 += 2;
*x2 -= 2;
*y2 += 2;
- print_text (context, font, text, alignment, *x1, *x2, *y1, *y1 + size * 1.4);
+ print_text (context, font, text, alignment, *x1, *x2, *y1 + 1.0, *y1 + size * 1.4);
*y1 += size * 1.4;
}
@@ -841,10 +841,10 @@
sprintf (buf, "%d", hour);
print_text (context, font_hour, buf, PANGO_ALIGN_RIGHT,
left, hour_minute_x,
- y - yinc + yinc / 2, y - yinc + yinc / 2 + hour_font_size);
+ y - yinc, y - yinc + hour_font_size);
print_text (context, font_minute, minute, PANGO_ALIGN_LEFT,
hour_minute_x, left + width - 3,
- y - yinc + yinc / 2, y - yinc + yinc / 2 + minute_font_size);
+ y - yinc, y - yinc + minute_font_size);
/* Draw the horizontal line between hours, across the entire
width of the day view. */
@@ -2082,7 +2082,7 @@
/* Print the filled border around the header. */
print_border (context, 0.0, width,
- 0.0, HEADER_HEIGHT + 2.0, 1.0, 0.9);
+ 0.0, HEADER_HEIGHT + 3.5, 1.0, 0.9);
/* Print the 2 mini calendar-months. */
l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH * 2 - SMALL_MONTH_SPACING;
@@ -2167,14 +2167,14 @@
l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH * 2
- SMALL_MONTH_SPACING;
print_month_small (context, gcal, when,
- l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 30,
+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 10,
DATE_MONTH | DATE_YEAR, when,
time_add_week_with_zone (when, 1, zone), FALSE);
l += SMALL_MONTH_SPACING + SMALL_MONTH_WIDTH;
print_month_small (context, gcal,
time_add_month_with_zone (when, 1, zone),
- l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 30,
+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 10,
DATE_MONTH | DATE_YEAR, when,
time_add_week_with_zone (when, 1, zone), FALSE);
@@ -2200,6 +2200,7 @@
icaltimezone *zone = calendar_config_get_icaltimezone ();
char buf[100];
gdouble width, height;
+ double l;
setup = gtk_print_context_get_page_setup (context);
@@ -2210,17 +2211,19 @@
print_month_summary (context, gcal, date, 0.0, width, HEADER_HEIGHT, height);
/* Print the border around the header. */
- print_border (context, 0.0, width, 0.0, HEADER_HEIGHT, 1.0, 0.9);
+ print_border (context, 0.0, width, 0.0, HEADER_HEIGHT + 10, 1.0, 0.9);
+ l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH;
+
/* Print the 2 mini calendar-months. */
print_month_small (context, gcal,
time_add_month_with_zone (date, 1, zone),
- width - width / 7 + 2, 4,
- width - 8, HEADER_HEIGHT,
+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 4,
DATE_MONTH | DATE_YEAR, 0, 0, FALSE);
+
print_month_small (context, gcal,
time_add_month_with_zone (date, -1, zone),
- 8, 4, width / 7 - 2, HEADER_HEIGHT,
+ 8, 4, width / 7 + 20, HEADER_HEIGHT + 4,
DATE_MONTH | DATE_YEAR, 0, 0, FALSE);
/* Print the month, e.g. 'May 2001'. */

View File

@ -1,12 +1,11 @@
=== modified file 'data/evolution.desktop.in.in' --- data/evolution.desktop.in.in 2008-10-13 14:03:02.000000000 +0530
--- data/evolution.desktop.in.in 2007-12-18 20:23:31 +0000 +++ data/evolution.desktop.in.in 2009-01-05 10:41:39.000000000 +0530
+++ data/evolution.desktop.in.in 2007-12-18 20:28:10 +0000
@@ -1,14 +1,15 @@ @@ -1,14 +1,15 @@
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8 Encoding=UTF-8
_Name=Evolution Mail and Calendar -_Name=Evolution Mail and Calendar
-_GenericName=Groupware Suite +_Name=Evolution
+_GenericName=The Evolution Groupware Suite _GenericName=Groupware Suite
_Comment=Manage your email, contacts and schedule _Comment=Manage your email, contacts and schedule
Exec=evolution Exec=evolution
Icon=evolution Icon=evolution
@ -18,5 +17,4 @@
+DocPath=evolution-@BASE_VERSION@ +DocPath=evolution-@BASE_VERSION@
X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=Evolution X-GNOME-Bugzilla-Product=Evolution
X-GNOME-Bugzilla-Component=Miscellaneous X-GNOME-Bugzilla-Component=BugBuddyBugs

View File

@ -1,3 +1,61 @@
------------------------------------------------------------------
Wed Jan 7 11:27:13 CET 2009 - abharath@suse.de
- Patches added
+ bgo#559153 - bgo-559153-evo-migration.patch - Migration fixes
in Evolution.
+ bgo#559604 - bgo-559604-calendar-tooltip-updated.patch -
Additional Information On Calendar Tooltip.
+ bgo#564248 - bgo-564248-evo-copy-paste-images.patch - Support
Copy And Paste Of Images.
+ bnc#435694 - bnc-435694-retract-feature-broken.patch - Retract
of Email from Sent Items Does not Work
+ bnc#446285 - bnc-446285-traverse-all-entries.patch - Meeting
Entry Does Not Allow Multiple Names.
+ bnc#446287 - bnc-446287-missing-vcf-reader.patch - Missing
VCF Plugin In Email Reader.
+ bnc#449952 - bnc-449952-hotkey-evo-preferences.patch -
Misplaced Hotkey on Evolution Preference Dlg.
+ bnc#443544 - bnc-443544-evo-free-busy.patch - Evolution busy
search on GW resource object does not display
unavailable times.
+ bnc#435455 - bnc-435455-attendees-meeting-resize.patch -
Attendees UI Allows Meeting Resize.
+ bnc#439998 - bnc-439998-delete-delegated-events.patch -
Delegating a Meeting Should Prompt to See if a
Copy of the Meeting Should Be Kept.
+ bnc#440634 - bnc-440634-forwarded-hide-accept-decline.patch -
Hide Accept/Decline when forwarding GW appt.
+ bnc#445996 - bnc-445996-address-conflict.patch - address
conflict: [custom widget creation failed].
+ bnc#458153 - bnc-458153-busy-button.patch - All Day
Appointment/Event Needs To Default To Busy.
+ bnc#462349 - bnc-462349-shared-memo-editor.patch - Shared
Memos opens a normal Memo window.
+ bnc#463599 - bnc-463599-header-print-issues.patch - Daily
Printouts Display Hour In Wrong Spot.
+ bnc#439987 - bnc-439987-classify-sensitivity.patch - Save Option
Unavailable if Classification is Modified.
+ bnc#456481 - bnc-456481-evolution-eats-memory.patch - evolution
eats up memory.
+ bnc#462372 - bnc-462372-open-attachment-event.patch - Right click
on an attachment in calendar event and chose
application - does not work.
+ bnc#458968 - bnc-458968-warning-on-delegating.patch - Meeting
delegation warns about meeting changes.
+ bgo#559604 - bgo-559604-tooltip-for-gw.patch - Calendar Tooltip
updated for GW accounts.
- Patches updated
+ bgo#556224 - bgo-556224-search-events-offline.patch - Upstream
had updates.
+ bnc#430639 - evolution-desktop.patch - Change the name in the
desktop file.
- Changes to the spec
+ bnc#463587 - [PATCH] evolution --force-shutdown Tries To Kill All
Users.
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Dec 4 12:13:42 CET 2008 - abharath@suse.de Thu Dec 4 12:13:42 CET 2008 - abharath@suse.de

View File

@ -1,7 +1,7 @@
# #
# spec file for package evolution (Version 2.24.1.1) # spec file for package evolution (Version 2.24.1.1)
# #
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -58,7 +58,7 @@ Group: Productivity/Networking/Email/Clients
# This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in. # This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in.
%define evolution_base_version 2.24 %define evolution_base_version 2.24
Version: 2.24.1.1 Version: 2.24.1.1
Release: 5 Release: 6
Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
Source0: %{name}-%{version}.tar.bz2 Source0: %{name}-%{version}.tar.bz2
Source1: summerdance-about2.png Source1: summerdance-about2.png
@ -114,20 +114,60 @@ Patch33: bnc-446390-corrupted-vfolders.patch
Patch34: bnc-446286-message-tracking-status.patch Patch34: bnc-446286-message-tracking-status.patch
# PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream. # PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream.
Patch35: bnc-210959-evo-accept-ics.patch Patch35: bnc-210959-evo-accept-ics.patch
# PATCH-FIX-UPSTREAM sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to upstreamed. # PATCH-FIX-UPSTREAM sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to be upstreamed.
Patch36: sp-tasks-setup.diff Patch36: sp-tasks-setup.diff
# PATCH-FIX-UPSTREAM bgo-332729-invalid-write-econfig.patch bgo332729 -- Fix has been submitted upstream. # PATCH-FIX-UPSTREAM bgo-332729-invalid-write-econfig.patch bgo332729 -- Fix has been submitted upstream.
Patch37: bgo-332729-invalid-write-econfig.patch Patch37: bgo-332729-invalid-write-econfig.patch
# PATCH-FIX-UPSTREAM bgo-562228-evo-mailbox-field.patch bgo562228 -- Fix has been submitted upstream. # PATCH-FIX-UPSTREAM bgo-562228-evo-mailbox-field.patch bgo562228 -- Fix has been submitted upstream.
Patch38: bgo-562228-evo-mailbox-field.patch Patch38: bgo-562228-evo-mailbox-field.patch
# PATCH-FIX-UPSTREAM bnc-435452-lose-attendees-busy-search.patch bnc435452 sragavan@novell.com -- Patch yet to be pushed upstream. # PATCH-FIX-UPSTREAM bnc-435452-lose-attendees-busy-search.patch bnc435452 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
Patch39: bnc-435452-lose-attendees-busy-search.patch Patch39: bnc-435452-lose-attendees-busy-search.patch
# PATCH-FIX-UPSTREAM bnc-439733-bogofilter-junk-training.patch bnc439733 sragavan@novell.com -- Patch yet to be pushed upstream. # PATCH-FIX-UPSTREAM bnc-439733-bogofilter-junk-training.patch bnc439733 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
Patch40: bnc-439733-bogofilter-junk-training.patch Patch40: bnc-439733-bogofilter-junk-training.patch
# PATCH-FIX-UPSTREAM sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to upstreamed. # PATCH-FIX-UPSTREAM sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to be upstreamed.
Patch41: sp-meetingworkspace-ui.patch Patch41: sp-meetingworkspace-ui.patch
# PATCH-FIX-UPSTREAM bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to upstreamed. # PATCH-FIX-UPSTREAM bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to be upstreamed.
Patch42: bnc-449888-handle-no-workspace.patch Patch42: bnc-449888-handle-no-workspace.patch
# PATCH-FIX-UPSTREAM bgo-559153-evo-migration.patch bgo559153 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch43: bgo-559153-evo-migration.patch
# PATCH-FIX-UPSTREAM bgo-559604-calendar-tooltip-updated.patch bgo559604 -- Patch is part of GNOME 2.25.5 release.
Patch44: bgo-559604-calendar-tooltip-updated.patch
# PATCH-FIX-UPSTREAM bgo-564248-evo-copy-paste-images.patch bgo564248 -- Patch is part of GNOME 2.25.5 release.
Patch45: bgo-564248-evo-copy-paste-images.patch
# PATCH-FIX-UPSTREAM bnc-435694-retract-feature-broken.patch bnc435694 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch46: bnc-435694-retract-feature-broken.patch
# PATCH-FIX-UPSTREAM bnc-446285-traverse-all-entries.patch bnc446285 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch47: bnc-446285-traverse-all-entries.patch
# PATCH-FIX-UPSTREAM bnc-446287-missing-vcf-reader.patch sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
Patch48: bnc-446287-missing-vcf-reader.patch
# PATCH-FIX-UPSTREAM bnc-449952-hotkey-evo-preferences.patch bnc449952 sragavan@novell.com -- Patch needs to be upstreamed.
Patch49: bnc-449952-hotkey-evo-preferences.patch
# PATCH-FIX-UPSTREAM bnc-443544-evo-free-busy.patch bnc443544 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch50: bnc-443544-evo-free-busy.patch
# PATCH-FIX-UPSTREAM bnc-435455-attendees-meeting-resize.patch bnc435455 shashish@suse.de -- Patch needs to be upstreamed.
Patch51: bnc-435455-attendees-meeting-resize.patch
# PATCH-FIX-UPSTREAM bnc-439998-delete-delegated-events.patch bnc439998 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch52: bnc-439998-delete-delegated-events.patch
# PATCH-FIX-SLED bnc-440634-forwarded-hide-accept-decline.patch bnc440634 abharath@suse.de -- Make GW understand folders better.
Patch53: bnc-440634-forwarded-hide-accept-decline.patch
# PATCH-FIX-SLED bnc-445996-address-conflict.patch bnc445996 shashish@suse.de -- Needs to be moved out of glade files.
Patch54: bnc-445996-address-conflict.patch
# PATCH-FIX-UPSTREAM bnc-458153-busy-button.patch bnc458153 shashish@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch55: bnc-458153-busy-button.patch
# PATCH-FIX-UPSTREAM bnc-462349-shared-memo-editor.patch bnc462349 -- Patch is part of GNOME 2.25.5 release.
Patch56: bnc-462349-shared-memo-editor.patch
# PATCH-FIX-UPSTREAM bnc-463599-header-print-issues.patch bnc463599 abharath@suse.de -- Patch needs to be upstreamed.
Patch57: bnc-463599-header-print-issues.patch
# PATCH-FIX-UPSTREAM bnc-439987-classify-sensitivity.patch bnc439987 pchenthill@suse.de -- Patch needs to be upstreamed.
Patch58: bnc-439987-classify-sensitivity.patch
# PATCH-FIX-UPSTREAM bnc-456481-evolution-eats-memory.patch bnc456481 sragavan@novell.com -- Patch needs to be upstreamed.
Patch59: bnc-456481-evolution-eats-memory.patch
# PATCH-FIX-UPSTREAM bnc-462372-open-attachment-event.patch bnc462372 shashish@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch60: bnc-462372-open-attachment-event.patch
# PATCH-FIX-UPSTREAM bnc-458968-warning-on-delegating.patch bnc458968 msuman@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch61: bnc-458968-warning-on-delegating.patch
# PATCH-FIX-UPSTREAM bgo-559604-tooltip-for-gw.patch bgo559604 -- Patch needs to be upstreamed.
Patch62: bgo-559604-tooltip-for-gw.patch
# PATCH-FIX-UPSTREAM evo-core-mapi-changes.diff msuman@suse.de -- Fix is upstream since 2.25.3 # PATCH-FIX-UPSTREAM evo-core-mapi-changes.diff msuman@suse.de -- Fix is upstream since 2.25.3
Patch100: evo-core-mapi-changes.diff Patch100: evo-core-mapi-changes.diff
Url: http://gnome.org/projects/evolution/ Url: http://gnome.org/projects/evolution/
@ -392,6 +432,26 @@ Authors:
%patch40 %patch40
%patch41 -p1 %patch41 -p1
%patch42 -p1 %patch42 -p1
%patch43
%patch44
%patch45
%patch46
%patch47
%patch48
%patch49
%patch50
%patch51
%patch52
%patch53
%patch54
%patch55
%patch56
%patch57
%patch58
%patch59
%patch60
%patch61
%patch62
%patch100 -p1 %patch100 -p1
%build %build
@ -425,7 +485,7 @@ popd
%install %install
%{__make} DESTDIR=$RPM_BUILD_ROOT install %{__make} DESTDIR=$RPM_BUILD_ROOT install
%{__cp} %{SOURCE1} $RPM_BUILD_ROOT/%{_datadir}/evolution/%evolution_base_version/images/about-box.png %{__cp} %{SOURCE1} $RPM_BUILD_ROOT/%{_datadir}/evolution/%evolution_base_version/images/about-box.png
%suse_update_desktop_file -G "Mail and Calendar" evolution Core-Office %suse_update_desktop_file -G "Mail and Calendar" -D "evolution-%evolution_base_version" evolution Core-Office
for xml in $RPM_BUILD_ROOT/%{_datadir}/gnome/help/evolution-*/*/evolution-*.xml; do for xml in $RPM_BUILD_ROOT/%{_datadir}/gnome/help/evolution-*/*/evolution-*.xml; do
meinproc --check --cache `echo $xml | sed 's/xml$/cache.bz2/'` $xml || : meinproc --check --cache `echo $xml | sed 's/xml$/cache.bz2/'` $xml || :
done done
@ -449,7 +509,7 @@ done
%fdupes $RPM_BUILD_ROOT %fdupes $RPM_BUILD_ROOT
%if %suse_version > 1100 %if %suse_version > 1100
%{__mv} $RPM_BUILD_ROOT/%{_bindir}/evolution $RPM_BUILD_ROOT/%{_bindir}/evolution.bin %{__mv} $RPM_BUILD_ROOT/%{_bindir}/evolution $RPM_BUILD_ROOT/%{_bindir}/evolution.bin
echo -e "#!/bin/sh\n\ncase \$1 in\n\t\"--force-shutdown\")\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@ &\n\t\tpkill evolution.bin\n\t\t;;\n\t*)\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n\t\t;;\n\nesac\n\nexit \$?" > $RPM_BUILD_ROOT/%{_bindir}/evolution echo -e "#!/bin/sh\n\ncase \$1 in\n\t\"--force-shutdown\")\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@ &\n\t\tpkill -u \$LOGNAME evolution.bin\n\t\t;;\n\t*)\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n\t\t;;\n\nesac\n\nexit \$?" > $RPM_BUILD_ROOT/%{_bindir}/evolution
%{__chmod} +x $RPM_BUILD_ROOT/%{_bindir}/evolution %{__chmod} +x $RPM_BUILD_ROOT/%{_bindir}/evolution
%endif %endif
@ -506,6 +566,59 @@ fi
%{_libdir}/evolution/*/conduits %{_libdir}/evolution/*/conduits
%changelog %changelog
* Wed Jan 07 2009 abharath@suse.de
- Patches added
+ bgo#559153 - bgo-559153-evo-migration.patch - Migration fixes
in Evolution.
+ bgo#559604 - bgo-559604-calendar-tooltip-updated.patch -
Additional Information On Calendar Tooltip.
+ bgo#564248 - bgo-564248-evo-copy-paste-images.patch - Support
Copy And Paste Of Images.
+ bnc#435694 - bnc-435694-retract-feature-broken.patch - Retract
of Email from Sent Items Does not Work
+ bnc#446285 - bnc-446285-traverse-all-entries.patch - Meeting
Entry Does Not Allow Multiple Names.
+ bnc#446287 - bnc-446287-missing-vcf-reader.patch - Missing
VCF Plugin In Email Reader.
+ bnc#449952 - bnc-449952-hotkey-evo-preferences.patch -
Misplaced Hotkey on Evolution Preference Dlg.
+ bnc#443544 - bnc-443544-evo-free-busy.patch - Evolution busy
search on GW resource object does not display
unavailable times.
+ bnc#435455 - bnc-435455-attendees-meeting-resize.patch -
Attendees UI Allows Meeting Resize.
+ bnc#439998 - bnc-439998-delete-delegated-events.patch -
Delegating a Meeting Should Prompt to See if a
Copy of the Meeting Should Be Kept.
+ bnc#440634 - bnc-440634-forwarded-hide-accept-decline.patch -
Hide Accept/Decline when forwarding GW appt.
+ bnc#445996 - bnc-445996-address-conflict.patch - address
conflict: [custom widget creation failed].
+ bnc#458153 - bnc-458153-busy-button.patch - All Day
Appointment/Event Needs To Default To Busy.
+ bnc#462349 - bnc-462349-shared-memo-editor.patch - Shared
Memos opens a normal Memo window.
+ bnc#463599 - bnc-463599-header-print-issues.patch - Daily
Printouts Display Hour In Wrong Spot.
+ bnc#439987 - bnc-439987-classify-sensitivity.patch - Save Option
Unavailable if Classification is Modified.
+ bnc#456481 - bnc-456481-evolution-eats-memory.patch - evolution
eats up memory.
+ bnc#462372 - bnc-462372-open-attachment-event.patch - Right click
on an attachment in calendar event and chose
application - does not work.
+ bnc#458968 - bnc-458968-warning-on-delegating.patch - Meeting
delegation warns about meeting changes.
+ bgo#559604 - bgo-559604-tooltip-for-gw.patch - Calendar Tooltip
updated for GW accounts.
- Patches updated
+ bgo#556224 - bgo-556224-search-events-offline.patch - Upstream
had updates.
+ bnc#430639 - evolution-desktop.patch - Change the name in the
desktop file.
- Changes to the spec
+ bnc#463587 - [PATCH] evolution --force-shutdown Tries To Kill All
Users.
* Thu Dec 04 2008 abharath@suse.de * Thu Dec 04 2008 abharath@suse.de
- Patches added - Patches added
+ bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid + bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid