diff --git a/bgo-559153-evo-migration.patch b/bgo-559153-evo-migration.patch new file mode 100644 index 0000000..8282fee --- /dev/null +++ b/bgo-559153-evo-migration.patch @@ -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 diff --git a/bgo-559604-calendar-tooltip-updated.patch b/bgo-559604-calendar-tooltip-updated.patch new file mode 100644 index 0000000..2b1041f --- /dev/null +++ b/bgo-559604-calendar-tooltip-updated.patch @@ -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, diff --git a/bgo-559604-tooltip-for-gw.patch b/bgo-559604-tooltip-for-gw.patch new file mode 100644 index 0000000..1707bdf --- /dev/null +++ b/bgo-559604-tooltip-for-gw.patch @@ -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); diff --git a/bgo-564248-evo-copy-paste-images.patch b/bgo-564248-evo-copy-paste-images.patch new file mode 100644 index 0000000..40a426a --- /dev/null +++ b/bgo-564248-evo-copy-paste-images.patch @@ -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 + #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 diff --git a/bnc-435455-attendees-meeting-resize.patch b/bnc-435455-attendees-meeting-resize.patch new file mode 100644 index 0000000..c098361 --- /dev/null +++ b/bnc-435455-attendees-meeting-resize.patch @@ -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); + } diff --git a/bnc-435694-retract-feature-broken.patch b/bnc-435694-retract-feature-broken.patch new file mode 100644 index 0000000..5cd472c --- /dev/null +++ b/bnc-435694-retract-feature-broken.patch @@ -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++; diff --git a/bnc-439987-classify-sensitivity.patch b/bnc-439987-classify-sensitivity.patch new file mode 100644 index 0000000..0f4082a --- /dev/null +++ b/bnc-439987-classify-sensitivity.patch @@ -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")); diff --git a/bnc-439998-delete-delegated-events.patch b/bnc-439998-delete-delegated-events.patch new file mode 100644 index 0000000..a652692 --- /dev/null +++ b/bnc-439998-delete-delegated-events.patch @@ -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 diff --git a/bnc-440634-forwarded-hide-accept-decline.patch b/bnc-440634-forwarded-hide-accept-decline.patch new file mode 100644 index 0000000..6dfbb6b --- /dev/null +++ b/bnc-440634-forwarded-hide-accept-decline.patch @@ -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 { diff --git a/bnc-443544-evo-free-busy.patch b/bnc-443544-evo-free-busy.patch new file mode 100644 index 0000000..e6aa95d --- /dev/null +++ b/bnc-443544-evo-free-busy.patch @@ -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]); diff --git a/bnc-445996-address-conflict.patch b/bnc-445996-address-conflict.patch new file mode 100644 index 0000000..4c36ada --- /dev/null +++ b/bnc-445996-address-conflict.patch @@ -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; ++} diff --git a/bnc-446285-traverse-all-entries.patch b/bnc-446285-traverse-all-entries.patch new file mode 100644 index 0000000..d4083d5 --- /dev/null +++ b/bnc-446285-traverse-all-entries.patch @@ -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; diff --git a/bnc-446287-missing-vcf-reader.patch b/bnc-446287-missing-vcf-reader.patch new file mode 100644 index 0000000..75089fd --- /dev/null +++ b/bnc-446287-missing-vcf-reader.patch @@ -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 + #include + #include ++#include + + #include + #include +@@ -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, "
\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, "
>\n", classid, mime_type); + } + + g_free(classid); diff --git a/bnc-449952-hotkey-evo-preferences.patch b/bnc-449952-hotkey-evo-preferences.patch new file mode 100644 index 0000000..1c7e6a1 --- /dev/null +++ b/bnc-449952-hotkey-evo-preferences.patch @@ -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) diff --git a/bnc-456481-evolution-eats-memory.patch b/bnc-456481-evolution-eats-memory.patch new file mode 100644 index 0000000..5429f9b --- /dev/null +++ b/bnc-456481-evolution-eats-memory.patch @@ -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); + } + } + } diff --git a/bnc-458153-busy-button.patch b/bnc-458153-busy-button.patch new file mode 100644 index 0000000..c6ab591 --- /dev/null +++ b/bnc-458153-busy-button.patch @@ -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 @@ + " " + " " + " " ++" " + " " + ""; + +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 @@ + " " + " " + " " ++" " + " " ++" " + " " + " " + " " + " " + " " +-" " +-" " + " " + " " + " " + " " ++" " ++" " + " " +-" " + " " + " " + ""; +@@ -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"), diff --git a/bnc-458968-warning-on-delegating.patch b/bnc-458968-warning-on-delegating.patch new file mode 100644 index 0000000..3ff45e1 --- /dev/null +++ b/bnc-458968-warning-on-delegating.patch @@ -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) { diff --git a/bnc-462349-shared-memo-editor.patch b/bnc-462349-shared-memo-editor.patch new file mode 100644 index 0000000..710588f --- /dev/null +++ b/bnc-462349-shared-memo-editor.patch @@ -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); + } + + /** diff --git a/bnc-462372-open-attachment-event.patch b/bnc-462372-open-attachment-event.patch new file mode 100644 index 0000000..934bcd6 --- /dev/null +++ b/bnc-462372-open-attachment-event.patch @@ -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); diff --git a/bnc-463599-header-print-issues.patch b/bnc-463599-header-print-issues.patch new file mode 100644 index 0000000..e76418a --- /dev/null +++ b/bnc-463599-header-print-issues.patch @@ -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'. */ diff --git a/evolution-desktop.patch b/evolution-desktop.patch index fe885da..e91923c 100644 --- a/evolution-desktop.patch +++ b/evolution-desktop.patch @@ -1,12 +1,11 @@ -=== modified file 'data/evolution.desktop.in.in' ---- data/evolution.desktop.in.in 2007-12-18 20:23:31 +0000 -+++ data/evolution.desktop.in.in 2007-12-18 20:28:10 +0000 +--- data/evolution.desktop.in.in 2008-10-13 14:03:02.000000000 +0530 ++++ data/evolution.desktop.in.in 2009-01-05 10:41:39.000000000 +0530 @@ -1,14 +1,15 @@ [Desktop Entry] Encoding=UTF-8 - _Name=Evolution Mail and Calendar --_GenericName=Groupware Suite -+_GenericName=The Evolution Groupware Suite +-_Name=Evolution Mail and Calendar ++_Name=Evolution + _GenericName=Groupware Suite _Comment=Manage your email, contacts and schedule Exec=evolution Icon=evolution @@ -18,5 +17,4 @@ +DocPath=evolution-@BASE_VERSION@ X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=Evolution - X-GNOME-Bugzilla-Component=Miscellaneous - + X-GNOME-Bugzilla-Component=BugBuddyBugs diff --git a/evolution.changes b/evolution.changes index 21e5890..40ec280 100644 --- a/evolution.changes +++ b/evolution.changes @@ -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 diff --git a/evolution.spec b/evolution.spec index 3c08e81..6ed36cd 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,7 +1,7 @@ # # 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 # 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. %define evolution_base_version 2.24 Version: 2.24.1.1 -Release: 5 +Release: 6 Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite Source0: %{name}-%{version}.tar.bz2 Source1: summerdance-about2.png @@ -114,20 +114,60 @@ Patch33: bnc-446390-corrupted-vfolders.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. 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 # PATCH-FIX-UPSTREAM bgo-332729-invalid-write-econfig.patch bgo332729 -- Fix has been submitted upstream. Patch37: bgo-332729-invalid-write-econfig.patch # PATCH-FIX-UPSTREAM bgo-562228-evo-mailbox-field.patch bgo562228 -- Fix has been submitted upstream. 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 -# 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 -# 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 -# 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 +# 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 Patch100: evo-core-mapi-changes.diff Url: http://gnome.org/projects/evolution/ @@ -392,6 +432,26 @@ Authors: %patch40 %patch41 -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 %build @@ -425,7 +485,7 @@ popd %install %{__make} DESTDIR=$RPM_BUILD_ROOT install %{__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 meinproc --check --cache `echo $xml | sed 's/xml$/cache.bz2/'` $xml || : done @@ -449,7 +509,7 @@ done %fdupes $RPM_BUILD_ROOT %if %suse_version > 1100 %{__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 %endif @@ -506,6 +566,59 @@ fi %{_libdir}/evolution/*/conduits %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 - Patches added + bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid