evolution r36811 - in branches/kill-bonobo: . a11y a11y/calendar addressbook addressbook/gui/component addressbook/util calendar calendar/gui calendar/gui/alarm-notify calendar/gui/dialogs composer e-util help help/cs mail plugins/exchange-operations plugins/folder-unsubscribe plugins/google-account-setup plugins/groupwise-account-setup plugins/groupwise-features plugins/itip-formatter plugins/mail-notification po shell widgets/table
- From: mbarnes svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r36811 - in branches/kill-bonobo: . a11y a11y/calendar addressbook addressbook/gui/component addressbook/util calendar calendar/gui calendar/gui/alarm-notify calendar/gui/dialogs composer e-util help help/cs mail plugins/exchange-operations plugins/folder-unsubscribe plugins/google-account-setup plugins/groupwise-account-setup plugins/groupwise-features plugins/itip-formatter plugins/mail-notification po shell widgets/table
- Date: Mon, 24 Nov 2008 05:14:45 +0000 (UTC)
Author: mbarnes
Date: Mon Nov 24 05:14:44 2008
New Revision: 36811
URL: http://svn.gnome.org/viewvc/evolution?rev=36811&view=rev
Log:
Merge revisions 36737:36810 from trunk.
Modified:
branches/kill-bonobo/ (props changed)
branches/kill-bonobo/Makefile.am
branches/kill-bonobo/a11y/ChangeLog
branches/kill-bonobo/a11y/calendar/ea-cal-view.c
branches/kill-bonobo/addressbook/ChangeLog
branches/kill-bonobo/addressbook/gui/component/eab-composer-util.c (props changed)
branches/kill-bonobo/addressbook/gui/component/eab-composer-util.h (props changed)
branches/kill-bonobo/addressbook/util/addressbook.c (props changed)
branches/kill-bonobo/addressbook/util/addressbook.h (props changed)
branches/kill-bonobo/calendar/ChangeLog
branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.c
branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.h
branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify.glade
branches/kill-bonobo/calendar/gui/alarm-notify/alarm-queue.c
branches/kill-bonobo/calendar/gui/calendar-component.h
branches/kill-bonobo/calendar/gui/dialogs/comp-editor.c
branches/kill-bonobo/calendar/gui/e-calendar-table.c
branches/kill-bonobo/calendar/gui/e-calendar-view.c
branches/kill-bonobo/calendar/gui/e-calendar-view.h
branches/kill-bonobo/calendar/gui/e-day-view.c
branches/kill-bonobo/calendar/gui/e-week-view.c
branches/kill-bonobo/calendar/gui/gnome-cal.c
branches/kill-bonobo/calendar/gui/memos-component.c
branches/kill-bonobo/calendar/gui/print.c
branches/kill-bonobo/calendar/gui/tasks-component.c
branches/kill-bonobo/composer/ChangeLog
branches/kill-bonobo/composer/e-msg-composer.c
branches/kill-bonobo/composer/e-msg-composer.h
branches/kill-bonobo/configure.in
branches/kill-bonobo/e-util/ChangeLog
branches/kill-bonobo/e-util/e-util-labels.c
branches/kill-bonobo/help/ChangeLog
branches/kill-bonobo/help/cs/cs.po
branches/kill-bonobo/mail/ChangeLog
branches/kill-bonobo/mail/em-composer-prefs.c
branches/kill-bonobo/mail/em-folder-view.c
branches/kill-bonobo/mail/em-format-html.c
branches/kill-bonobo/mail/evolution-mail.schemas.in
branches/kill-bonobo/mail/filtertypes.xml
branches/kill-bonobo/mail/mail-config.c
branches/kill-bonobo/mail/mail-config.glade
branches/kill-bonobo/mail/mail-vfolder.c
branches/kill-bonobo/mail/vfoldertypes.xml
branches/kill-bonobo/plugins/exchange-operations/ChangeLog
branches/kill-bonobo/plugins/exchange-operations/exchange-folder.c
branches/kill-bonobo/plugins/folder-unsubscribe/ChangeLog
branches/kill-bonobo/plugins/folder-unsubscribe/org-gnome-mail-folder-unsubscribe.eplug.xml
branches/kill-bonobo/plugins/google-account-setup/ChangeLog
branches/kill-bonobo/plugins/google-account-setup/google-contacts-source.c
branches/kill-bonobo/plugins/google-account-setup/google-source.c
branches/kill-bonobo/plugins/groupwise-account-setup/ChangeLog
branches/kill-bonobo/plugins/groupwise-account-setup/camel-gw-listener.c
branches/kill-bonobo/plugins/groupwise-features/ChangeLog
branches/kill-bonobo/plugins/groupwise-features/status-track.c
branches/kill-bonobo/plugins/itip-formatter/ChangeLog
branches/kill-bonobo/plugins/itip-formatter/itip-formatter.c
branches/kill-bonobo/plugins/mail-notification/ChangeLog
branches/kill-bonobo/plugins/mail-notification/mail-notification.c
branches/kill-bonobo/po/ChangeLog
branches/kill-bonobo/po/cs.po
branches/kill-bonobo/po/es.po
branches/kill-bonobo/po/ru.po
branches/kill-bonobo/shell/ChangeLog
branches/kill-bonobo/shell/main.c
branches/kill-bonobo/widgets/table/ChangeLog
branches/kill-bonobo/widgets/table/e-table-defines.h
branches/kill-bonobo/widgets/table/e-table-header-utils.c
Modified: branches/kill-bonobo/Makefile.am
==============================================================================
--- branches/kill-bonobo/Makefile.am (original)
+++ branches/kill-bonobo/Makefile.am Mon Nov 24 05:14:44 2008
@@ -13,6 +13,7 @@
COPYING-DOCS \
COPYING.LGPL2 \
COPYING.LGPL3 \
+ COPYING.OPENLDAP \
README \
HACKING \
MAINTAINERS \
Modified: branches/kill-bonobo/a11y/calendar/ea-cal-view.c
==============================================================================
--- branches/kill-bonobo/a11y/calendar/ea-cal-view.c (original)
+++ branches/kill-bonobo/a11y/calendar/ea-cal-view.c Mon Nov 24 05:14:44 2008
@@ -277,7 +277,7 @@
}
g_object_notify (G_OBJECT (ea_cal_view), "accessible-name");
g_signal_emit_by_name (ea_cal_view, "visible_data_changed");
- g_signal_emit_by_name (ea_cal_view, "children_changed", NULL);
+ g_signal_emit_by_name (ea_cal_view, "children_changed", NULL, NULL, NULL);
#ifdef ACC_DEBUG
printf ("AccDebug: cal view date changed\n");
#endif
Modified: branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.c (original)
+++ branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.c Mon Nov 24 05:14:44 2008
@@ -67,6 +67,7 @@
GtkWidget *snooze_time_min;
GtkWidget *snooze_time_hrs;
GtkWidget *snooze_btn;
+ GtkWidget *dismiss_btn;
GtkWidget *minutes_label;
GtkWidget *hrs_label;
GtkWidget *description;
@@ -191,7 +192,30 @@
if (!snooze_timeout)
snooze_timeout = DEFAULT_SNOOZE_MINS;
(* funcinfo->func) (ALARM_NOTIFY_SNOOZE, snooze_timeout, funcinfo->func_data);
+}
+
+static void
+dismiss_pressed_cb (GtkButton *button, gpointer user_data)
+{
+ AlarmNotify *an = user_data;
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (an->treeview));
+
+ g_return_if_fail (model != NULL);
+ if (gtk_tree_model_iter_n_children (model, NULL) <= 1) {
+ gtk_dialog_response (GTK_DIALOG (an->dialog), GTK_RESPONSE_CLOSE);
+ } else {
+ GtkTreeIter iter;
+ AlarmFuncInfo *funcinfo = NULL;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (an->treeview));
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter))
+ gtk_tree_model_get (model, &iter, ALARM_FUNCINFO_COLUMN, &funcinfo, -1);
+
+ g_return_if_fail (funcinfo);
+
+ (* funcinfo->func) (ALARM_NOTIFY_DISMISS, -1, funcinfo->func_data);
+ }
}
static void
@@ -256,10 +280,11 @@
an->scrolledwindow = glade_xml_get_widget (an->xml, "treeview-scrolledwindow");
snooze_btn = glade_xml_get_widget (an->xml, "snooze-button");
an->snooze_btn = snooze_btn;
+ an->dismiss_btn = glade_xml_get_widget (an->xml, "dismiss-button");
edit_btn = glade_xml_get_widget (an->xml, "edit-button");
if (!(an->dialog && an->scrolledwindow && an->treeview && an->snooze_time_min && an->snooze_time_hrs
- && an->description && an->location && edit_btn && snooze_btn)) {
+ && an->description && an->location && edit_btn && snooze_btn && an->dismiss_btn)) {
g_message ("alarm_notify_dialog(): Could not find all widgets in Glade file!");
g_object_unref (an->xml);
g_free (an);
@@ -292,6 +317,7 @@
g_signal_connect (edit_btn, "clicked", G_CALLBACK (edit_pressed_cb), an);
g_signal_connect (snooze_btn, "clicked", G_CALLBACK (snooze_pressed_cb), an);
+ g_signal_connect (an->dismiss_btn, "clicked", G_CALLBACK (dismiss_pressed_cb), an);
g_signal_connect (G_OBJECT (an->dialog), "response", G_CALLBACK (dialog_response_cb), an);
g_signal_connect (G_OBJECT (an->dialog), "destroy", G_CALLBACK (dialog_destroyed_cb), an);
Modified: branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.h
==============================================================================
--- branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.h (original)
+++ branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify-dialog.h Mon Nov 24 05:14:44 2008
@@ -32,7 +32,8 @@
typedef enum {
ALARM_NOTIFY_CLOSE,
ALARM_NOTIFY_SNOOZE,
- ALARM_NOTIFY_EDIT
+ ALARM_NOTIFY_EDIT,
+ ALARM_NOTIFY_DISMISS
} AlarmNotifyResult;
typedef struct _AlarmNotificationsDialog AlarmNotificationsDialog;
Modified: branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify.glade
==============================================================================
--- branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify.glade (original)
+++ branches/kill-bonobo/calendar/gui/alarm-notify/alarm-notify.glade Mon Nov 24 05:14:44 2008
@@ -37,11 +37,73 @@
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-7</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox9">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image6">
+ <property name="visible">True</property>
+ <property name="stock">gtk-close</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label">Dismiss _All</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -527,6 +589,84 @@
<property name="fill">False</property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkButton" id="dismiss-button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox10">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image7">
+ <property name="visible">True</property>
+ <property name="stock">gtk-apply</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Dismiss</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="padding">0</property>
Modified: branches/kill-bonobo/calendar/gui/alarm-notify/alarm-queue.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/alarm-notify/alarm-queue.c (original)
+++ branches/kill-bonobo/calendar/gui/alarm-notify/alarm-queue.c Mon Nov 24 05:14:44 2008
@@ -1250,6 +1250,13 @@
break;
+ case ALARM_NOTIFY_DISMISS:
+ if (alarm_notifications_dialog) {
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (alarm_notifications_dialog->treeview));
+ gtk_list_store_remove (GTK_LIST_STORE (model), &tray_data->iter);
+ }
+ break;
+
case ALARM_NOTIFY_CLOSE:
d(printf("%s:%d (notify_dialog_cb) - Dialog close\n",__FILE__, __LINE__));
if (alarm_notifications_dialog) {
@@ -1270,7 +1277,7 @@
/* Task to remove the tray icons */
tray_list_remove_icons ();
- }
+ }
break;
Modified: branches/kill-bonobo/calendar/gui/calendar-component.h
==============================================================================
--- branches/kill-bonobo/calendar/gui/calendar-component.h (original)
+++ branches/kill-bonobo/calendar/gui/calendar-component.h Mon Nov 24 05:14:44 2008
@@ -26,6 +26,7 @@
#include <bonobo/bonobo-object.h>
#include <libedataserver/e-source-list.h>
+#include <widgets/misc/e-activity-handler.h>
#include "Evolution.h"
Modified: branches/kill-bonobo/calendar/gui/dialogs/comp-editor.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/dialogs/comp-editor.c (original)
+++ branches/kill-bonobo/calendar/gui/dialogs/comp-editor.c Mon Nov 24 05:14:44 2008
@@ -2937,7 +2937,9 @@
if (e_cal_component_has_attachments (priv->comp)) {
GSList *attachment_list = NULL;
e_cal_component_get_attachment_list (priv->comp, &attachment_list);
+ g_signal_handlers_block_by_func(priv->attachment_bar, G_CALLBACK (attachment_bar_changed_cb), editor);
set_attachment_list (editor, attachment_list);
+ g_signal_handlers_unblock_by_func(priv->attachment_bar, G_CALLBACK (attachment_bar_changed_cb), editor);
g_slist_foreach (attachment_list, (GFunc)g_free, NULL);
g_slist_free (attachment_list);
}
@@ -2950,7 +2952,6 @@
real_edit_comp (CompEditor *editor, ECalComponent *comp)
{
CompEditorPrivate *priv;
- const char *uid;
g_return_if_fail (IS_COMP_EDITOR (editor));
@@ -2969,7 +2970,6 @@
priv->warned = FALSE;
update_window_border (editor, NULL);
- e_cal_component_get_uid (comp, &uid);
fill_widgets (editor);
Modified: branches/kill-bonobo/calendar/gui/e-calendar-table.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/e-calendar-table.c (original)
+++ branches/kill-bonobo/calendar/gui/e-calendar-table.c Mon Nov 24 05:14:44 2008
@@ -440,6 +440,16 @@
e_cal_component_free_datetime (&dtstart);
e_cal_component_free_datetime (&dtdue);
+ tmp = e_calendar_view_get_attendees_status_info (new_comp);
+ if (tmp) {
+ l = gtk_label_new (tmp);
+ gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0);
+
+ g_free (tmp);
+ tmp = NULL;
+ }
+
tmp2 = g_string_new ("");
e_cal_component_get_description_list (new_comp, &desc);
for (len = 0, p = desc; p != NULL; p = p->next) {
Modified: branches/kill-bonobo/calendar/gui/e-calendar-view.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/e-calendar-view.c (original)
+++ branches/kill-bonobo/calendar/gui/e-calendar-view.c Mon Nov 24 05:14:44 2008
@@ -2034,6 +2034,83 @@
gtk_widget_show (widget);
}
+/**
+ * Returns information about attendees in the component. If no attendees, then returns NULL.
+ * The information is like "Status: Accepted: X Declined: Y ...".
+ * Free returned pointer with g_free.
+ **/
+char *
+e_calendar_view_get_attendees_status_info (ECalComponent *comp)
+{
+ struct _values {
+ icalparameter_partstat status;
+ const char *caption;
+ int count;
+ } values[] = {
+ { ICAL_PARTSTAT_ACCEPTED, N_("Accepted"), 0 },
+ { ICAL_PARTSTAT_DECLINED, N_("Declined"), 0 },
+ { ICAL_PARTSTAT_TENTATIVE, N_("Tentative"), 0 },
+ { ICAL_PARTSTAT_DELEGATED, N_("Delegated"), 0 },
+ { ICAL_PARTSTAT_NEEDSACTION, N_("Needs action"), 0 },
+ { ICAL_PARTSTAT_NONE, N_("Other"), 0 },
+ { ICAL_PARTSTAT_X, NULL, -1 }
+ };
+
+ GSList *attendees = NULL, *a;
+ gboolean have = FALSE;
+ char *res = NULL;
+ int i;
+
+ if (!comp || !e_cal_component_has_attendees (comp))
+ return NULL;
+
+ e_cal_component_get_attendee_list (comp, &attendees);
+
+ for (a = attendees; a; a = a->next) {
+ ECalComponentAttendee *att = a->data;
+
+ if (att && att->cutype == ICAL_CUTYPE_INDIVIDUAL &&
+ (att->role == ICAL_ROLE_CHAIR ||
+ att->role == ICAL_ROLE_REQPARTICIPANT ||
+ att->role == ICAL_ROLE_OPTPARTICIPANT)) {
+ have = TRUE;
+
+ for (i = 0; values[i].count != -1; i++) {
+ if (att->status == values[i].status || values[i].status == ICAL_PARTSTAT_NONE) {
+ values[i].count++;
+ break;
+ }
+ }
+ }
+ }
+
+ if (have) {
+ GString *str = g_string_new ("");
+
+ for (i = 0; values[i].count != -1; i++) {
+ if (values[i].count > 0) {
+ if (str->str && *str->str)
+ g_string_append (str, " ");
+
+ g_string_append_printf (str, "%s: %d", _(values[i].caption), values[i].count);
+ }
+ }
+
+ g_string_prepend (str, ": ");
+
+ /* To Translators: 'Status' here means the state of the attendees, the resulting string will be in a form:
+ Status: Accepted: X Declined: Y ... */
+ g_string_prepend (str, _("Status"));
+
+ res = g_string_free (str, FALSE);
+ }
+
+ if (attendees)
+ e_cal_component_free_attendee_list (attendees);
+
+ return res;
+}
+
/*
* It is expected to show the tooltips in this below format
*
@@ -2041,6 +2118,7 @@
* Organiser: NameOfTheUser<email ofuser com>
* Location: PlaceOfTheMeeting
* Time : DateAndTime (xx Minutes)
+ * Status: Accepted: X Declined: Y ...
*/
gboolean
@@ -2179,6 +2257,17 @@
g_free (tmp2);
g_free (tmp1);
+ tmp = e_calendar_view_get_attendees_status_info (newcomp);
+ if (tmp) {
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new (tmp), FALSE, FALSE, 0);
+ ebox = gtk_event_box_new ();
+ gtk_container_add ((GtkContainer *)ebox, hbox);
+ gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
+
+ g_free (tmp);
+ }
+
pevent->tooltip = gtk_window_new (GTK_WINDOW_POPUP);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type ((GtkFrame *)frame, GTK_SHADOW_IN);
Modified: branches/kill-bonobo/calendar/gui/e-calendar-view.h
==============================================================================
--- branches/kill-bonobo/calendar/gui/e-calendar-view.h (original)
+++ branches/kill-bonobo/calendar/gui/e-calendar-view.h Mon Nov 24 05:14:44 2008
@@ -171,6 +171,7 @@
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);
void draw_curved_rectangle (cairo_t *cr,
double x0,
Modified: branches/kill-bonobo/calendar/gui/e-day-view.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/e-day-view.c (original)
+++ branches/kill-bonobo/calendar/gui/e-day-view.c Mon Nov 24 05:14:44 2008
@@ -1776,41 +1776,38 @@
return TRUE;
}
-#if 0
-/* Checks if the users participation status is Needs action and shows the summary as bold text*/
+/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
static void
set_text_as_bold (EDayViewEvent *event)
{
ECalComponent *comp;
- char *address;
- GSList *attendees, *l;
+ GSList *attendees = NULL, *l;
+ gchar *address;
ECalComponentAttendee *at = NULL;
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
address = itip_get_comp_attendee (comp, event->comp_data->client);
e_cal_component_get_attendee_list (comp, &attendees);
-
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *attendee = l->data;
- if (g_str_equal (itip_strip_mailto (attendee->value), address)) {
+ if ((g_str_equal (itip_strip_mailto (attendee->value), address))
+ || (attendee->sentby && g_str_equal (itip_strip_mailto (attendee->sentby), address))) {
at = attendee;
break;
}
}
-
- /* The attendee has not yet accepted the meeting, display the summary as bolded .
- If the attendee is not present, it might have come through a mailing list*/
- if (!at || (at->status == ICAL_PARTSTAT_NEEDSACTION)) {
- gnome_canvas_item_set (event->canvas_item, "bold", TRUE, NULL);
- }
-
e_cal_component_free_attendee_list (attendees);
- g_object_unref (comp);
g_free (address);
+ g_object_unref (comp);
+
+ /* The attendee has not yet accepted the meeting, display the summary as bolded.
+ If the attendee is not present, it might have come through a mailing list.
+ In that case, we never show the meeting as bold even if it is unaccepted. */
+ if (at && (at->status == ICAL_PARTSTAT_NEEDSACTION))
+ gnome_canvas_item_set (event->canvas_item, "bold", TRUE, NULL);
}
-#endif
/* This updates the text shown for an event. If the event start or end do not
lie on a row boundary, the time is displayed before the summary. */
@@ -1860,9 +1857,9 @@
"text", text,
NULL);
-/* if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
+ if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
- set_text_as_bold (event); */
+ set_text_as_bold (event);
if (free_text)
g_free (text);
@@ -1892,9 +1889,9 @@
if (free_text)
g_free ((gchar*)summary);
-/* if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
+ if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
- set_text_as_bold (event); */
+ set_text_as_bold (event);
}
Modified: branches/kill-bonobo/calendar/gui/e-week-view.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/e-week-view.c (original)
+++ branches/kill-bonobo/calendar/gui/e-week-view.c Mon Nov 24 05:14:44 2008
@@ -1878,41 +1878,38 @@
return FALSE;
}
-#if 0
-/* Checks if the users participation status is Needs action and shows the summary as bold text*/
+/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
static void
set_text_as_bold (EWeekViewEvent *event, EWeekViewEventSpan *span)
{
ECalComponent *comp;
- char *address;
- GSList *attendees, *l;
+ GSList *attendees = NULL, *l;
+ gchar *address;
ECalComponentAttendee *at = NULL;
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
address = itip_get_comp_attendee (comp, event->comp_data->client);
e_cal_component_get_attendee_list (comp, &attendees);
-
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *attendee = l->data;
- if (g_str_equal (itip_strip_mailto (attendee->value), address)) {
+ if ((g_str_equal (itip_strip_mailto (attendee->value), address))
+ || (attendee->sentby && g_str_equal (itip_strip_mailto (attendee->sentby), address))) {
at = attendee;
break;
}
}
+ e_cal_component_free_attendee_list (attendees);
+ g_free (address);
+ g_object_unref (comp);
/* The attendee has not yet accepted the meeting, display the summary as bolded.
- If the attendee is not present, it might have come through a mailing list*/
- if (!at || (at->status == ICAL_PARTSTAT_NEEDSACTION)) {
+ If the attendee is not present, it might have come through a mailing list.
+ In that case, we never show the meeting as bold even if it is unaccepted. */
+ if (at && (at->status == ICAL_PARTSTAT_NEEDSACTION))
gnome_canvas_item_set (span->text_item, "bold", TRUE, NULL);
- }
-
- e_cal_component_free_attendee_list (attendees);
- g_object_unref (comp);
- g_free (address);
}
-#endif
/* This calls a given function for each event instance that matches the given
uid. Note that it is safe for the callback to remove the event (since we
@@ -2817,11 +2814,10 @@
if (free_text)
g_free ((gchar*)summary);
-/* Uncomment once the pango fix is in
if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp)) {
set_text_as_bold (event, span);
- } */
+ }
g_object_set_data (G_OBJECT (span->text_item), "event-num", GINT_TO_POINTER (event_num));
g_signal_connect (span->text_item, "event",
G_CALLBACK (e_week_view_on_text_item_event),
Modified: branches/kill-bonobo/calendar/gui/gnome-cal.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/gnome-cal.c (original)
+++ branches/kill-bonobo/calendar/gui/gnome-cal.c Mon Nov 24 05:14:44 2008
@@ -179,6 +179,9 @@
/* We should know which calendar has been used to create object, so store it here
before emitting "user_created" signal and make it NULL just after the emit. */
ECal *user_created_cal;
+
+ /* used in update_todo_view, to prevent interleaving when called in separate thread */
+ GMutex *todo_update_lock;
};
/* Signal IDs */
@@ -738,6 +741,8 @@
real_sexp = adjust_e_cal_view_sexp (gcal, priv->sexp);
if (!real_sexp) {
+ g_object_unref (msg->gcal);
+ g_slice_free (struct _date_query_msg, msg);
return; /* No time range is set, so don't start a query */
}
@@ -1048,18 +1053,30 @@
set_timezone (calendar);
}
+struct _mupdate_todo_msg {
+ Message header;
+ GnomeCalendar *gcal;
+};
+
static void
-update_todo_view (GnomeCalendar *gcal)
+update_todo_view_async (struct _mupdate_todo_msg *msg)
{
+ GnomeCalendar *gcal;
GnomeCalendarPrivate *priv;
ECalModel *model;
char *sexp = NULL;
+ g_return_if_fail (msg != NULL);
+
+ gcal = msg->gcal;
priv = gcal->priv;
+ g_mutex_lock (priv->todo_update_lock);
+
/* Set the query on the task pad */
if (priv->todo_sexp) {
g_free (priv->todo_sexp);
+ priv->todo_sexp = NULL;
}
model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo));
@@ -1074,6 +1091,22 @@
e_cal_model_set_search_query (model, priv->todo_sexp);
}
+ g_mutex_unlock (priv->todo_update_lock);
+
+ g_object_unref (msg->gcal);
+ g_slice_free (struct _mupdate_todo_msg, msg);
+}
+
+static void
+update_todo_view (GnomeCalendar *gcal)
+{
+ struct _mupdate_todo_msg *msg;
+
+ msg = g_slice_new0 (struct _mupdate_todo_msg);
+ msg->header.func = (MessageFunc) update_todo_view_async;
+ msg->gcal = g_object_ref (gcal);
+
+ message_push ((Message *) msg);
}
static void
@@ -1384,7 +1417,7 @@
gtk_widget_show (vbox);
gtk_widget_show (sep);
- update_todo_view (gcal);
+ /* update_todo_view (gcal); */
/* Timeout check to hide completed items */
priv->update_timeout = g_timeout_add_full (G_PRIORITY_LOW, 60000, (GSourceFunc) update_todo_view_cb, gcal, NULL);
@@ -1500,6 +1533,8 @@
e_categories_register_change_listener (G_CALLBACK (categories_changed_cb), gcal);
+ priv->todo_update_lock = g_mutex_new ();
+
priv->current_view_type = GNOME_CAL_DAY_VIEW;
priv->range_selected = FALSE;
priv->lview_select_daten_range = TRUE;
@@ -1616,6 +1651,8 @@
g_signal_handlers_disconnect_by_func (cal_model,
G_CALLBACK (view_done_cb), gcal);
+ g_mutex_free (priv->todo_update_lock);
+
g_free (priv);
gcal->priv = NULL;
}
Modified: branches/kill-bonobo/calendar/gui/memos-component.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/memos-component.c (original)
+++ branches/kill-bonobo/calendar/gui/memos-component.c Mon Nov 24 05:14:44 2008
@@ -218,43 +218,21 @@
return TRUE;
}
-static void
-selector_tree_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- gpointer user_data)
+static gboolean
+selector_tree_data_dropped (ESourceSelector *selector,
+ GtkSelectionData *data,
+ ESource *destination,
+ GdkDragAction action,
+ guint info,
+ MemosComponent *component)
{
- GtkTreePath *path = NULL;
- GtkTreeViewDropPosition pos;
- gpointer source = NULL;
- GtkTreeModel *model;
- GtkTreeIter iter;
gboolean success = FALSE;
icalcomponent *icalcomp = NULL;
ECal *client = NULL;
GSList *components, *p;
- MemosComponent *component = MEMOS_COMPONENT (user_data);
-
- if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
- x, y, &path, &pos))
- goto finish;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
-
- if (!gtk_tree_model_get_iter (model, &iter, path))
- goto finish;
-
-
- gtk_tree_model_get (model, &iter, 0, &source, -1);
-
- if (E_IS_SOURCE_GROUP (source) || e_source_get_readonly (source) || !data->data)
- goto finish;
- client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
+ client = auth_new_cal_from_source (
+ destination, E_CAL_SOURCE_TYPE_JOURNAL);
if (!client || !e_cal_open (client, TRUE, NULL))
goto finish;
@@ -280,7 +258,7 @@
continue;
/* FIXME deal with GDK_ACTION_ASK */
- if (context->action == GDK_ACTION_COPY) {
+ if (action == GDK_ACTION_COPY) {
old_uid = g_strdup (icalcomponent_get_uid (icalcomp));
uid = e_cal_component_gen_uid ();
icalcomponent_set_uid (icalcomp, uid);
@@ -297,7 +275,7 @@
/* this will report success by last item, but we don't care */
success = update_objects (client, icalcomp);
- if (success && context->action == GDK_ACTION_MOVE) {
+ if (success && action == GDK_ACTION_MOVE) {
/* remove components rather here, because we know which has been moved */
ESource *source_source;
ECal *source_client;
@@ -337,12 +315,8 @@
finish:
if (client)
g_object_unref (client);
- if (source)
- g_object_unref (source);
- if (path)
- gtk_tree_path_free (path);
- gtk_drag_finish (context, success, success && context->action == GDK_ACTION_MOVE, time);
+ return success;
}
static void
Modified: branches/kill-bonobo/calendar/gui/print.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/print.c (original)
+++ branches/kill-bonobo/calendar/gui/print.c Mon Nov 24 05:14:44 2008
@@ -2531,7 +2531,7 @@
top += 20;
/* Attendees */
- if (e_cal_component_has_attendees (comp)) {
+ if ((page_nr == 0) && e_cal_component_has_attendees (comp)) {
top = bound_text (context, font, _("Attendees: "), -1, 0.0, top, width, height, FALSE, &page_start, &pages);
pango_font_description_free (font);
font = get_font_for_size (12, PANGO_WEIGHT_NORMAL);
Modified: branches/kill-bonobo/calendar/gui/tasks-component.c
==============================================================================
--- branches/kill-bonobo/calendar/gui/tasks-component.c (original)
+++ branches/kill-bonobo/calendar/gui/tasks-component.c Mon Nov 24 05:14:44 2008
@@ -238,6 +238,16 @@
}
static void
+rename_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
+{
+ TasksComponentView *component_view = data;
+ ESourceSelector *selector;
+
+ selector = E_SOURCE_SELECTOR (component_view->source_selector);
+ e_source_selector_edit_primary_selection (selector);
+}
+
+static void
edit_task_list_cb (EPopup *ep, EPopupItem *pitem, void *data)
{
TasksComponentView *component_view = data;
@@ -278,6 +288,7 @@
static EPopupItem etc_source_popups[] = {
{ E_POPUP_ITEM, "10.new", N_("_New Task List"), new_task_list_cb, NULL, "stock_todo", 0, 0 },
{ E_POPUP_ITEM, "15.copy", N_("_Copy..."), copy_task_list_cb, NULL, "edit-copy", 0, E_CAL_POPUP_SOURCE_PRIMARY },
+ { E_POPUP_ITEM, "18.rename", N_("_Rename..."), rename_task_list_cb, NULL, NULL, 0, E_CAL_POPUP_SOURCE_PRIMARY },
{ E_POPUP_BAR, "20.bar" },
{ E_POPUP_ITEM, "20.delete", N_("_Delete"), delete_task_list_cb, NULL, "edit-delete", 0, E_CAL_POPUP_SOURCE_USER|E_CAL_POPUP_SOURCE_PRIMARY },
@@ -397,43 +408,21 @@
return TRUE;
}
-static void
-selector_tree_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time,
- gpointer user_data)
-{
- GtkTreePath *path = NULL;
- GtkTreeViewDropPosition pos;
- gpointer source = NULL;
- GtkTreeModel *model;
- GtkTreeIter iter;
+static gboolean
+selector_tree_data_dropped (ESourceSelector *selector,
+ GtkSelectionData *data,
+ ESource *destination,
+ GdkDragAction action,
+ guint info,
+ TasksComponent *component)
+{
gboolean success = FALSE;
icalcomponent *icalcomp = NULL;
ECal *client = NULL;
GSList *components, *p;
- TasksComponent *component = TASKS_COMPONENT (user_data);
-
- if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
- x, y, &path, &pos))
- goto finish;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
-
- if (!gtk_tree_model_get_iter (model, &iter, path))
- goto finish;
-
-
- gtk_tree_model_get (model, &iter, 0, &source, -1);
-
- if (E_IS_SOURCE_GROUP (source) || e_source_get_readonly (source) || !data->data)
- goto finish;
- client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_TODO);
+ client = auth_new_cal_from_source (
+ destination, E_CAL_SOURCE_TYPE_TODO);
if (!client || !e_cal_open (client, TRUE, NULL))
goto finish;
@@ -459,7 +448,7 @@
continue;
/* FIXME deal with GDK_ACTION_ASK */
- if (context->action == GDK_ACTION_COPY) {
+ if (action == GDK_ACTION_COPY) {
old_uid = g_strdup (icalcomponent_get_uid (icalcomp));
uid = e_cal_component_gen_uid ();
icalcomponent_set_uid (icalcomp, uid);
@@ -476,7 +465,7 @@
/* this will report success by last item, but we don't care */
success = update_objects (client, icalcomp);
- if (success && context->action == GDK_ACTION_MOVE) {
+ if (success && action == GDK_ACTION_MOVE) {
/* remove components rather here, because we know which has been moved */
ESource *source_source;
ECal *source_client;
@@ -516,12 +505,8 @@
finish:
if (client)
g_object_unref (client);
- if (source)
- g_object_unref (source);
- if (path)
- gtk_tree_path_free (path);
- gtk_drag_finish (context, success, context->action == GDK_ACTION_MOVE, time);
+ return success;
}
static void
Modified: branches/kill-bonobo/composer/e-msg-composer.c
==============================================================================
--- branches/kill-bonobo/composer/e-msg-composer.c (original)
+++ branches/kill-bonobo/composer/e-msg-composer.c Mon Nov 24 05:14:44 2008
@@ -2085,10 +2085,9 @@
GObject *object;
EMsgComposer *composer;
GtkToggleAction *action;
- GList *spell_languages = NULL;
+ GList *spell_languages;
GConfClient *client;
GArray *array;
- GSList *list;
gboolean active;
guint binding_id;
@@ -2155,21 +2154,7 @@
client, COMPOSER_GCONF_REQUEST_RECEIPT_KEY, NULL);
gtk_toggle_action_set_active (action, active);
- list = gconf_client_get_list (
- client, COMPOSER_GCONF_SPELL_LANGUAGES_KEY,
- GCONF_VALUE_STRING, NULL);
- while (list != NULL) {
- gchar *language_code = list->data;
- const GtkhtmlSpellLanguage *language;
-
- language = gtkhtml_spell_language_lookup (language_code);
- if (language != NULL)
- spell_languages = g_list_prepend (
- spell_languages, (gpointer) language);
-
- list = g_slist_delete_link (list, list);
- g_free (language_code);
- }
+ spell_languages = e_load_spell_languages ();
gtkhtml_editor_set_spell_languages (
GTKHTML_EDITOR (composer), spell_languages);
g_list_free (spell_languages);
@@ -2791,6 +2776,27 @@
drop_types, G_N_ELEMENTS (drop_types),
GDK_ACTION_COPY | GDK_ACTION_ASK | GDK_ACTION_MOVE);
+ /* XXX I'm not sure why we have to explicitly configure the
+ * attachment bar as a drag destination when CompEditor
+ * doesn't and previous Evolution releases (2.22 and
+ * prior) don't, but this is the only way I could figure
+ * out how to get drag-and-drop to the attachment bar
+ * working again. I'm probably overlooking something
+ * simple... */
+
+ gtk_drag_dest_set (
+ composer->priv->attachment_bar, GTK_DEST_DEFAULT_ALL,
+ drop_types, G_N_ELEMENTS (drop_types),
+ GDK_ACTION_COPY | GDK_ACTION_ASK | GDK_ACTION_MOVE);
+
+ g_signal_connect (
+ composer->priv->attachment_bar, "drag-motion",
+ G_CALLBACK (msg_composer_drag_motion), NULL);
+
+ g_signal_connect (
+ composer->priv->attachment_bar, "drag-data-received",
+ G_CALLBACK (msg_composer_drag_data_received), NULL);
+
g_signal_connect (
html, "drag-data-received",
G_CALLBACK (msg_composer_drag_data_received), NULL);
@@ -4791,3 +4797,95 @@
composer->priv->send_invoked = send_enable;
}
+
+GList *
+e_load_spell_languages (void)
+{
+ GConfClient *client;
+ GList *spell_languages = NULL;
+ GSList *list;
+ const gchar *key;
+ GError *error = NULL;
+
+ /* Ask GConf for a list of spell check language codes. */
+ client = gconf_client_get_default ();
+ key = COMPOSER_GCONF_SPELL_LANGUAGES_KEY;
+ list = gconf_client_get_list (client, key, GCONF_VALUE_STRING, &error);
+ g_object_unref (client);
+
+ /* Convert the codes to spell language structs. */
+ while (list != NULL) {
+ gchar *language_code = list->data;
+ const GtkhtmlSpellLanguage *language;
+
+ language = gtkhtml_spell_language_lookup (language_code);
+ if (language != NULL)
+ spell_languages = g_list_prepend (
+ spell_languages, (gpointer) language);
+
+ list = g_slist_delete_link (list, list);
+ g_free (language_code);
+ }
+
+ spell_languages = g_list_reverse (spell_languages);
+
+ /* Pick a default spell language if GConf came back empty. */
+ if (spell_languages == NULL) {
+ const GtkhtmlSpellLanguage *language;
+
+ language = gtkhtml_spell_language_lookup (NULL);
+
+ if (language) {
+ spell_languages = g_list_prepend (
+ spell_languages, (gpointer) language);
+
+ /* Don't overwrite the stored spell check language
+ * codes if there was a problem retrieving them. */
+ if (error == NULL)
+ e_save_spell_languages (spell_languages);
+ }
+ }
+
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ return spell_languages;
+}
+
+void
+e_save_spell_languages (GList *spell_languages)
+{
+ GConfClient *client;
+ GSList *list = NULL;
+ const gchar *key;
+ GError *error = NULL;
+
+ /* Build a list of spell check language codes. */
+ while (spell_languages != NULL) {
+ const GtkhtmlSpellLanguage *language;
+ const gchar *language_code;
+
+ language = spell_languages->data;
+ language_code = gtkhtml_spell_language_get_code (language);
+ list = g_slist_prepend (list, (gpointer) language_code);
+
+ spell_languages = g_list_next (spell_languages);
+ }
+
+ list = g_slist_reverse (list);
+
+ /* Save the language codes to GConf. */
+ client = gconf_client_get_default ();
+ key = COMPOSER_GCONF_SPELL_LANGUAGES_KEY;
+ gconf_client_set_list (client, key, GCONF_VALUE_STRING, list, &error);
+ g_object_unref (client);
+
+ g_slist_free (list);
+
+ if (error != NULL) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+}
Modified: branches/kill-bonobo/composer/e-msg-composer.h
==============================================================================
--- branches/kill-bonobo/composer/e-msg-composer.h (original)
+++ branches/kill-bonobo/composer/e-msg-composer.h Mon Nov 24 05:14:44 2008
@@ -159,6 +159,9 @@
gboolean e_msg_composer_is_exiting (EMsgComposer *composer);
+GList * e_load_spell_languages (void);
+void e_save_spell_languages (GList *spell_languages);
+
G_END_DECLS
#endif /* E_MSG_COMPOSER_H */
Modified: branches/kill-bonobo/configure.in
==============================================================================
--- branches/kill-bonobo/configure.in (original)
+++ branches/kill-bonobo/configure.in Mon Nov 24 05:14:44 2008
@@ -1,7 +1,17 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.52)
-AC_INIT(evolution, 2.25.2, http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution)
+m4_define([evo_major_version], [2])
+m4_define([evo_minor_version], [25])
+m4_define([evo_micro_version], [2])
+m4_define([evo_version],
+ [evo_major_version.evo_minor_version.evo_micro_version])
+m4_define([evo_stable_version],
+ [m4_if(m4_eval(evo_minor_version % 2), [1],
+ [evo_major_version.m4_eval(evo_minor_version - 1)],
+ [evo_version])])
+
+AC_INIT(evolution, [evo_version], http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution)
AC_CONFIG_SRCDIR(README)
# Some requirements have versioned package names
@@ -13,7 +23,7 @@
# Required Packages
m4_define([glib_minimum_version], [2.18.0])
m4_define([gtk_minimum_version], [2.12.0])
-m4_define([eds_minimum_version], [2.23.91])
+m4_define([eds_minimum_version], [2.25.2])
m4_define([gnome_icon_theme_minimum_version], [2.19.91])
m4_define([libbonobo_minimum_version], [2.20.3])
m4_define([libbonoboui_minimum_version], [2.4.2])
@@ -53,6 +63,11 @@
dnl Initialize maintainer mode
AM_MAINTAINER_MODE
+if test "$evo_version" != "$evo_stable_version"; then
+ AC_DEFINE(STABLE_VERSION, ["evo_stable_version"],
+ [Define to the latest stable version if this version is unstable])
+fi
+
dnl *************************************************************************************************
dnl Base Version
dnl
@@ -75,16 +90,6 @@
AC_SUBST(UPGRADE_REVISION)
AC_DEFINE_UNQUOTED(UPGRADE_REVISION, "$UPGRADE_REVISION", [The number of times we've upgraded since the BASE_VERSION release])
-dnl *************************************************************************************************
-dnl Development mode
-dnl
-dnl The controls whether things like the development warning in shell/main.c are displayed.
-dnl
-dnl This should be set to 0 for stable releases and 1 for unstable releases
-dnl *************************************************************************************************
-AC_DEFINE(DEVELOPMENT, 1, [If we are in development mode or not])
-AC_SUBST(DEVELOPMENT)
-
AC_ISC_POSIX
AC_PROG_CC
AC_PROG_CPP
Modified: branches/kill-bonobo/e-util/e-util-labels.c
==============================================================================
--- branches/kill-bonobo/e-util/e-util-labels.c (original)
+++ branches/kill-bonobo/e-util/e-util-labels.c Mon Nov 24 05:14:44 2008
@@ -79,7 +79,7 @@
/* Needed for Backward Compatibility */
if (num < LABEL_DEFAULTS_NUM) {
- label->name = g_strdup (_(buf));
+ label->name = g_strdup ((buf && *buf) ? buf : _(label_defaults[num].name));
label->tag = g_strdup (label_defaults[num].tag);
num++;
} else if (!tag) {
Modified: branches/kill-bonobo/mail/em-composer-prefs.c
==============================================================================
--- branches/kill-bonobo/mail/em-composer-prefs.c (original)
+++ branches/kill-bonobo/mail/em-composer-prefs.c Mon Nov 24 05:14:44 2008
@@ -584,46 +584,41 @@
static void
spell_language_save (EMComposerPrefs *prefs)
{
- GSList *list = NULL;
- GConfClient *client;
+ GList *spell_languages = NULL;
GtkTreeModel *model;
GtkTreeIter iter;
- const gchar *key;
gboolean valid;
model = prefs->language_model;
- /* Build a list of active languages. */
+ /* Build a list of active spell languages. */
valid = gtk_tree_model_get_iter_first (model, &iter);
while (valid) {
const GtkhtmlSpellLanguage *language;
- const gchar *code;
gboolean active;
gtk_tree_model_get (
model, &iter, 0, &active, 2, &language, -1);
- code = gtkhtml_spell_language_get_code (language);
if (active)
- list = g_slist_prepend (list, (gpointer) code);
+ spell_languages = g_list_prepend (
+ spell_languages, (gpointer) language);
valid = gtk_tree_model_iter_next (model, &iter);
}
- list = g_slist_reverse (list);
+ spell_languages = g_list_reverse (spell_languages);
/* Update the GConf value. */
- client = mail_config_get_gconf_client ();
- key = "/apps/evolution/mail/composer/spell_languages";
- gconf_client_set_list (client, key, GCONF_VALUE_STRING, list, NULL);
+ e_save_spell_languages (spell_languages);
- g_slist_free (list);
+ g_list_free (spell_languages);
}
static void
spell_setup (EMComposerPrefs *prefs)
{
const GList *available_languages;
- GSList *active_languages, *iter;
+ GList *active_languages;
GConfClient *client;
GtkListStore *store;
GdkColor color;
@@ -634,27 +629,7 @@
store = GTK_LIST_STORE (prefs->language_model);
available_languages = gtkhtml_spell_language_get_available ();
- /* Retrieve a list of language codes from GConf. */
- key = "/apps/evolution/mail/composer/spell_languages";
- active_languages = gconf_client_get_list (
- client, key, GCONF_VALUE_STRING, NULL);
-
- /* Convert the list to GtkhtmlSpellLanguages. */
- for (iter = active_languages; iter != NULL; iter = iter->next) {
- gchar *code = iter->data;
-
- iter->data = (gpointer) gtkhtml_spell_language_lookup (code);
- g_free (code);
- }
-
- /* Make sure we have _something_ active. */
- if (active_languages == NULL) {
- const GtkhtmlSpellLanguage *default_language;
-
- default_language = gtkhtml_spell_language_lookup (NULL);
- active_languages = g_slist_prepend (
- active_languages, (gpointer) default_language);
- }
+ active_languages = e_load_spell_languages ();
/* Populate the GtkListStore. */
while (available_languages != NULL) {
@@ -665,7 +640,7 @@
language = available_languages->data;
name = gtkhtml_spell_language_get_name (language);
- active = (g_slist_find (active_languages, language) != NULL);
+ active = (g_list_find (active_languages, language) != NULL);
gtk_list_store_append (store, &tree_iter);
@@ -676,10 +651,7 @@
available_languages = available_languages->next;
}
- /* Update the GConf list in case we used a default language. */
- spell_language_save (prefs);
-
- g_slist_free (active_languages);
+ g_list_free (active_languages);
key = "/apps/evolution/mail/composer/spell_color";
string = gconf_client_get_string (client, key, NULL);
@@ -945,6 +917,12 @@
gtk_widget_set_sensitive (widget, FALSE);
gconf_bridge_bind_property (bridge, key, G_OBJECT (widget), "active");
+ key = "/apps/evolution/mail/composer/outlook_filenames";
+ widget = glade_xml_get_widget (gui, "chkOutlookFilenames");
+ if (!gconf_client_key_is_writable (client, key, NULL))
+ gtk_widget_set_sensitive (widget, FALSE);
+ gconf_bridge_bind_property (bridge, key, G_OBJECT (widget), "active");
+
key = "/apps/evolution/mail/composer/top_signature";
widget = glade_xml_get_widget (gui, "chkTopSignature");
if (!gconf_client_key_is_writable (client, key, NULL))
Modified: branches/kill-bonobo/mail/em-folder-view.c
==============================================================================
--- branches/kill-bonobo/mail/em-folder-view.c (original)
+++ branches/kill-bonobo/mail/em-folder-view.c Mon Nov 24 05:14:44 2008
@@ -2901,7 +2901,6 @@
case EMFV_HEADERS: {
GSList *header_config_list, *p;
EMFormat *emf = (EMFormat *)emfv->preview;
- int added_headers = 0;
header_config_list = gconf_client_get_list(gconf, "/apps/evolution/mail/display/headers", GCONF_VALUE_STRING, NULL);
em_format_clear_headers((EMFormat *)emfv->preview);
@@ -2913,15 +2912,12 @@
h = em_mailer_prefs_header_from_xml(xml);
if (h && h->enabled) {
em_format_add_header(emf, h->name, EM_FORMAT_HEADER_BOLD);
- added_headers++;
}
em_mailer_prefs_header_free(h);
p = g_slist_next(p);
}
g_slist_foreach(header_config_list, (GFunc) g_free, NULL);
g_slist_free(header_config_list);
- if (added_headers == 0)
- em_format_default_headers(emf);
/* force a redraw */
if (emf->message)
em_format_redraw(emf);
Modified: branches/kill-bonobo/mail/em-format-html.c
==============================================================================
--- branches/kill-bonobo/mail/em-format-html.c (original)
+++ branches/kill-bonobo/mail/em-format-html.c Mon Nov 24 05:14:44 2008
@@ -1891,22 +1891,23 @@
g_free(name);
} else if (!g_ascii_strcasecmp (header->name, "X-Evolution-Mail-From-Delegate")) {
mail_from_delegate = TRUE;
- } else if (header_sender && header_from && mail_from_delegate) {
- camel_stream_printf(stream, "<tr><td><table border=1 width=\"100%%\" cellspacing=2 cellpadding=2><tr>");
- if(gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
- camel_stream_printf (stream, "<td align=\"right\" width=\"100%%\">");
- else
- camel_stream_printf (stream, "<td align=\"left\" width=\"100%%\">");
- /* To translators: This message suggests to the receipients that the sender of the mail is
- different from the one listed in From field.
- */
- camel_stream_printf(stream, _("This message was sent by <b>%s</b> on behalf of <b>%s</b>"), header_sender, header_from);
- camel_stream_printf(stream, "</td></tr></table></td></tr>");
- break;
}
header = header->next;
}
+
+ if (header_sender && header_from && mail_from_delegate) {
+ camel_stream_printf(stream, "<tr><td><table border=1 width=\"100%%\" cellspacing=2 cellpadding=2><tr>");
+ if(gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
+ camel_stream_printf (stream, "<td align=\"right\" width=\"100%%\">");
+ else
+ camel_stream_printf (stream, "<td align=\"left\" width=\"100%%\">");
+ /* To translators: This message suggests to the receipients that the sender of the mail is
+ different from the one listed in From field.
+ */
+ camel_stream_printf(stream, _("This message was sent by <b>%s</b> on behalf of <b>%s</b>"), header_sender, header_from);
+ camel_stream_printf(stream, "</td></tr></table></td></tr>");
+ }
g_free (header_sender);
g_free (header_from);
@@ -1918,7 +1919,7 @@
/* dump selected headers */
h = (EMFormatHeader *)emf->header_list.head;
- if (h->next == NULL || emf->mode == EM_FORMAT_ALLHEADERS) {
+ if (emf->mode == EM_FORMAT_ALLHEADERS) {
header = ((CamelMimePart *)part)->headers;
while (header) {
efh_format_header(emf, stream, part, header, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset);
Modified: branches/kill-bonobo/mail/evolution-mail.schemas.in
==============================================================================
--- branches/kill-bonobo/mail/evolution-mail.schemas.in (original)
+++ branches/kill-bonobo/mail/evolution-mail.schemas.in Mon Nov 24 05:14:44 2008
@@ -186,6 +186,20 @@
</schema>
<schema>
+ <key>/schemas/apps/evolution/mail/composer/outlook_filenames</key>
+ <applyto>/apps/evolution/mail/composer/outlook_filenames</applyto>
+ <owner>evolution-mail</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Encode file names in an Outlook/GMail way</short>
+ <long>
+ Encode file names in the mail headers same as Outlook or GMail does, to let them understand localized file names sent by Evolution, because they do not follow the RFC 2231, but uses incorrect RFC 2047 standard.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
<key>/schemas/apps/evolution/mail/composer/width</key>
<applyto>/apps/evolution/mail/composer/width</applyto>
<owner>evolution-mail</owner>
@@ -232,9 +246,9 @@
<type>bool</type>
<default>false</default>
<locale name="C">
- <short>Disable or enable ellipsizing of folder names in folder tree</short>
+ <short>Disable or enable ellipsizing of folder names in side bar</short>
<long>
- Whether disable ellipsizing feature of folder names in folder tree.
+ Whether disable ellipsizing feature of folder names in side bar.
</long>
</locale>
</schema>
Modified: branches/kill-bonobo/mail/filtertypes.xml
==============================================================================
--- branches/kill-bonobo/mail/filtertypes.xml (original)
+++ branches/kill-bonobo/mail/filtertypes.xml Mon Nov 24 05:14:44 2008
@@ -283,7 +283,109 @@
</input>
<input type="address" name="recipient"/>
</part>
-
+
+ <part name="senderto">
+ <title>Sender or Recipients</title>
+ <input type="optionlist" name="recipient-type">
+ <option value="contains">
+ <title>contains</title>
+ <code>
+ (match-all (or (header-contains "From" ${recipient})
+ (header-contains "To" ${recipient})
+ (header-contains "Cc" ${recipient})
+ (header-contains "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not contains">
+ <title>does not contain</title>
+ <code>
+ (match-all (not (or
+ (header-contains "From" ${recipient})
+ (header-contains "To" ${recipient})
+ (header-contains "Cc" ${recipient})
+ (header-contains "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="is">
+ <title>is</title>
+ <code>
+ (match-all (or (header-matches "From" ${recipient})
+ (header-matches "To" ${recipient})
+ (header-matches "Cc" ${recipient})
+ (header-matches "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="is not">
+ <title>is not</title>
+ <code>
+ (match-all (not (or
+ (header-matches "From" ${recipient})
+ (header-matches "To" ${recipient})
+ (header-matches "Cc" ${recipient})
+ (header-matches "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="starts with">
+ <title>starts with</title>
+ <code>
+ (match-all (or (header-starts-with "From" ${recipient})
+ (header-starts-with "To" ${recipient})
+ (header-starts-with "Cc" ${recipient})
+ (header-starts-with "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not starts with">
+ <title>does not start with</title>
+ <code>
+ (match-all (not (or
+ (header-starts-with "From" ${recipient})
+ (header-starts-with "To" ${recipient})
+ (header-starts-with "Cc" ${recipient})
+ (header-starts-with "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="ends with">
+ <title>ends with</title>
+ <code>
+ (match-all (or (header-ends-with "From" ${recipient})
+ (header-ends-with "To" ${recipient})
+ (header-ends-with "Cc" ${recipient})
+ (header-ends-with "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not ends with">
+ <title>does not end with</title>
+ <code>
+ (match-all (not (or
+ (header-ends-with "From" ${recipient})
+ (header-ends-with "To" ${recipient})
+ (header-ends-with "Cc" ${recipient})
+ (header-ends-with "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="matches soundex">
+ <title>sounds like</title>
+ <code>
+ (match-all (or (header-soundex "From" ${recipient})
+ (header-soundex "To" ${recipient})
+ (header-soundex "Cc" ${recipient})
+ (header-soundex "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not match soundex">
+ <title>does not sound like</title>
+ <code>
+ (match-all (not (or
+ (header-soundex "From" ${recipient})
+ (header-soundex "To" ${recipient})
+ (header-soundex "Cc" ${recipient})
+ (header-soundex "Bcc" ${recipient}))))
+ </code>
+ </option>
+ </input>
+ <input type="address" name="recipient"/>
+ </part>
+
<part name="subject">
<title>Subject</title>
<input type="optionlist" name="subject-type">
Modified: branches/kill-bonobo/mail/mail-config.c
==============================================================================
--- branches/kill-bonobo/mail/mail-config.c (original)
+++ branches/kill-bonobo/mail/mail-config.c Mon Nov 24 05:14:44 2008
@@ -249,6 +249,22 @@
}
static void
+gconf_outlook_filenames_changed (GConfClient *client, guint cnxn_id,
+ GConfEntry *entry, gpointer user_data)
+{
+ extern int camel_header_param_encode_filenames_in_rfc_2047;
+
+ g_return_if_fail (client != NULL);
+
+ /* pass option to the camel */
+ if (gconf_client_get_bool (client, "/apps/evolution/mail/composer/outlook_filenames", NULL)) {
+ camel_header_param_encode_filenames_in_rfc_2047 = 1;
+ } else {
+ camel_header_param_encode_filenames_in_rfc_2047 = 0;
+ }
+}
+
+static void
gconf_jh_check_changed (GConfClient *client, guint cnxn_id,
GConfEntry *entry, gpointer user_data)
{
@@ -370,6 +386,12 @@
gconf_client_notify_add (
config->gconf, key, func, NULL, NULL, NULL);
+ key = "/apps/evolution/mail/composer/outlook_filenames";
+ func = (GConfClientNotifyFunc) gconf_outlook_filenames_changed;
+ gconf_outlook_filenames_changed (config->gconf, 0, NULL, NULL);
+ gconf_client_notify_add (
+ config->gconf, key, func, NULL, NULL, NULL);
+
/* Display Configuration */
gconf_client_add_dir (
@@ -782,48 +804,49 @@
EAccount *
mail_config_get_account_by_source_url (const char *source_url)
{
- CamelProvider *provider;
- EAccount *account;
- CamelURL *source;
+ EAccount *account = NULL;
EIterator *iter;
g_return_val_if_fail (source_url != NULL, NULL);
- provider = camel_provider_get(source_url, NULL);
- if (!provider)
- return NULL;
-
- source = camel_url_new (source_url, NULL);
- if (!source)
- return NULL;
-
iter = e_list_get_iterator ((EList *) config->accounts);
while (e_iterator_is_valid (iter)) {
+ CamelURL *url;
+ gchar *string;
+
account = (EAccount *) e_iterator_get (iter);
- if (account->source && account->source->url && account->source->url[0]) {
- CamelURL *url;
+ e_iterator_next (iter);
+
+ if (account->source == NULL)
+ continue;
- url = camel_url_new (account->source->url, NULL);
- if (url && provider->url_equal (url, source)) {
- camel_url_free (url);
- camel_url_free (source);
- g_object_unref (iter);
+ else if (account->source->url == NULL)
+ continue;
- return account;
- }
+ else if (*account->source->url == '\0')
+ continue;
- if (url)
- camel_url_free (url);
- }
+ url = camel_url_new (account->source->url, NULL);
+ if (url == NULL)
+ continue;
- e_iterator_next (iter);
+ /* Simplify the account URL for comparison. */
+ string = camel_url_to_string (url, CAMEL_URL_HIDE_ALL);
+ if (string == NULL || strcmp (string, source_url) != 0)
+ account = NULL; /* not a match */
+
+ camel_url_free (url);
+ g_free (string);
+
+ if (account != NULL) {
+ g_object_unref (iter);
+ return account;
+ }
}
g_object_unref (iter);
- camel_url_free (source);
-
return NULL;
}
Modified: branches/kill-bonobo/mail/mail-config.glade
==============================================================================
--- branches/kill-bonobo/mail/mail-config.glade (original)
+++ branches/kill-bonobo/mail/mail-config.glade Mon Nov 24 05:14:44 2008
@@ -7124,6 +7124,25 @@
</child>
<child>
+ <widget class="GtkCheckButton" id="chkOutlookFilenames">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Encode file names in an Outlook/GMail way</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkTable" id="tableForwardsReplies">
<property name="visible">True</property>
<property name="n_rows">3</property>
Modified: branches/kill-bonobo/mail/mail-vfolder.c
==============================================================================
--- branches/kill-bonobo/mail/mail-vfolder.c (original)
+++ branches/kill-bonobo/mail/mail-vfolder.c Mon Nov 24 05:14:44 2008
@@ -267,6 +267,11 @@
g_warning("Folder '%s' disappeared while I was adding/remove it to/from my vfolder", m->uri);
return;
}
+ if (strncmp(m->uri, "vfolder:/", 9) == 0 ||
+ strncmp(m->uri, "email://vfolder local", 21) == 0) {
+ printf("Ignoring loading vfolder as a subfolder \n");
+ return;
+ }
if (folder == NULL)
folder = mail_tool_uri_to_folder (m->uri, 0, &m->base.ex);
Modified: branches/kill-bonobo/mail/vfoldertypes.xml
==============================================================================
--- branches/kill-bonobo/mail/vfoldertypes.xml (original)
+++ branches/kill-bonobo/mail/vfoldertypes.xml Mon Nov 24 05:14:44 2008
@@ -115,6 +115,89 @@
<input type="address" name="recipient"/>
</part>
+ <part name="senderto">
+ <title>Sender or Recipients</title>
+ <input type="optionlist" name="recipient-type">
+ <option value="contains">
+ <title>contains</title>
+ <code>
+ (match-all (or (header-contains "From" ${recipient})
+ (header-contains "To" ${recipient})
+ (header-contains "Cc" ${recipient})
+ (header-contains "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not contains">
+ <title>does not contain</title>
+ <code>
+ (match-all (not (or
+ (header-contains "From" ${recipient})
+ (header-contains "To" ${recipient})
+ (header-contains "Cc" ${recipient})
+ (header-contains "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="is">
+ <title>is</title>
+ <code>
+ (match-all (or (header-matches "From" ${recipient})
+ (header-matches "To" ${recipient})
+ (header-matches "Cc" ${recipient})
+ (header-matches "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="is not">
+ <title>is not</title>
+ <code>
+ (match-all (not (or
+ (header-matches "From" ${recipient})
+ (header-matches "To" ${recipient})
+ (header-matches "Cc" ${recipient})
+ (header-matches "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="starts with">
+ <title>starts with</title>
+ <code>
+ (match-all (or (header-starts-with "From" ${recipient})
+ (header-starts-with "To" ${recipient})
+ (header-starts-with "Cc" ${recipient})
+ (header-starts-with "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not starts with">
+ <title>does not start with</title>
+ <code>
+ (match-all (not (or
+ (header-starts-with "From" ${recipient})
+ (header-starts-with "To" ${recipient})
+ (header-starts-with "Cc" ${recipient})
+ (header-starts-with "Bcc" ${recipient}))))
+ </code>
+ </option>
+ <option value="ends with">
+ <title>ends with</title>
+ <code>
+ (match-all (or (header-ends-with "From" ${recipient})
+ (header-ends-with "To" ${recipient})
+ (header-ends-with "Cc" ${recipient})
+ (header-ends-with "Bcc" ${recipient})))
+ </code>
+ </option>
+ <option value="not ends with">
+ <title>does not end with</title>
+ <code>
+ (match-all (not (or
+ (header-ends-with "From" ${recipient})
+ (header-ends-with "To" ${recipient})
+ (header-ends-with "Cc" ${recipient})
+ (header-ends-with "Bcc" ${recipient}))))
+ </code>
+ </option>
+ </input>
+ <input type="address" name="recipient"/>
+ </part>
+
<part name="subject">
<title>Subject</title>
<input type="optionlist" name="subject-type">
Modified: branches/kill-bonobo/plugins/exchange-operations/exchange-folder.c
==============================================================================
--- branches/kill-bonobo/plugins/exchange-operations/exchange-folder.c (original)
+++ branches/kill-bonobo/plugins/exchange-operations/exchange-folder.c Mon Nov 24 05:14:44 2008
@@ -223,7 +223,7 @@
g_free (path);
- if (!sub_folder)
+ if (!sub_folder || !g_strrstr(sub_folder, "/"))
return;
for (i = 0; i < sizeof (popup_inbox_items) / sizeof (popup_inbox_items[0]); i++)
Modified: branches/kill-bonobo/plugins/folder-unsubscribe/org-gnome-mail-folder-unsubscribe.eplug.xml
==============================================================================
--- branches/kill-bonobo/plugins/folder-unsubscribe/org-gnome-mail-folder-unsubscribe.eplug.xml (original)
+++ branches/kill-bonobo/plugins/folder-unsubscribe/org-gnome-mail-folder-unsubscribe.eplug.xml Mon Nov 24 05:14:44 2008
@@ -6,7 +6,7 @@
domain="@GETTEXT_PACKAGE@"
_name="Unsubscribe Folders"
location="@PLUGINDIR@/liborg-gnome-mail-folder-unsubscribe SOEXT@">
- <_description>Allows unsubscribing of mail folders in the folder tree context menu.</_description>
+ <_description>Allows unsubscribing of mail folders in the side bar context menu.</_description>
<author name="Jeffrey Stedfast" email="fejj novell com"/>
<hook class="org.gnome.evolution.mail.popup:1.0">
Modified: branches/kill-bonobo/plugins/google-account-setup/google-contacts-source.c
==============================================================================
--- branches/kill-bonobo/plugins/google-account-setup/google-contacts-source.c (original)
+++ branches/kill-bonobo/plugins/google-account-setup/google-contacts-source.c Mon Nov 24 05:14:44 2008
@@ -218,6 +218,12 @@
g_free (value_string);
}
+static void
+destroy_ui_data(gpointer data)
+{
+ gtk_widget_destroy((GtkWidget *)data);
+}
+
GtkWidget *
plugin_google_contacts (EPlugin *epl,
EConfigHookItemFactoryData *data)
@@ -254,6 +260,9 @@
base_uri = e_source_group_peek_base_uri (group);
+ g_object_set_data_full (G_OBJECT (epl), "widget", NULL,
+ (GDestroyNotify)gtk_widget_destroy);
+
if (strcmp (base_uri, "google://")) {
return NULL;
}
@@ -337,6 +346,9 @@
g_object_set_data (G_OBJECT (interval_sb), "interval-combo", interval_combo);
g_object_set_data (G_OBJECT (interval_combo), "interval-sb", interval_sb);
+
+ g_object_set_data_full(G_OBJECT(epl), "widget", vbox2,
+ destroy_ui_data);
g_signal_connect (G_OBJECT (username_entry), "changed",
G_CALLBACK (on_username_entry_changed),
source);
Modified: branches/kill-bonobo/plugins/google-account-setup/google-source.c
==============================================================================
--- branches/kill-bonobo/plugins/google-account-setup/google-source.c (original)
+++ branches/kill-bonobo/plugins/google-account-setup/google-source.c Mon Nov 24 05:14:44 2008
@@ -435,10 +435,7 @@
g_return_if_fail (source != NULL);
username = e_source_get_property (source, "username");
- if (!username || !*username) {
- claim_error (parent, _("Please enter user name first."));
- return;
- }
+ g_return_if_fail (username != NULL && *username != '\0');
tmp = g_strdup_printf (_("Enter password for user %s to access list of subscribed calendars."), username);
password = e_passwords_ask_password (_("Enter password"), "Calendar", "", tmp,
@@ -553,6 +550,18 @@
g_object_unref (service);
}
+static void
+retrieve_list_sensitize (GtkEntry *username_entry,
+ GtkWidget *button)
+{
+ const gchar *text;
+ gboolean sensitive;
+
+ text = gtk_entry_get_text (username_entry);
+ sensitive = (text != NULL && *text != '\0');
+ gtk_widget_set_sensitive (button, sensitive);
+}
+
GtkWidget *
plugin_google (EPlugin *epl,
EConfigHookItemFactoryData *data)
@@ -727,8 +736,10 @@
gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
label = gtk_button_new_with_mnemonic (_("Retrieve _list"));
g_signal_connect (label, "clicked", G_CALLBACK (retrieve_list_clicked), combo);
+ g_signal_connect (user, "changed", G_CALLBACK (retrieve_list_sensitize), label);
g_object_set_data (G_OBJECT (label), "ESource", source);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_set_sensitive (label, FALSE);
gtk_widget_show_all (hbox);
gtk_table_attach (GTK_TABLE (parent), hbox, 1, 2, row + 4, row + 5, GTK_FILL | GTK_EXPAND, 0, 0, 0);
Modified: branches/kill-bonobo/plugins/groupwise-account-setup/camel-gw-listener.c
==============================================================================
--- branches/kill-bonobo/plugins/groupwise-account-setup/camel-gw-listener.c (original)
+++ branches/kill-bonobo/plugins/groupwise-account-setup/camel-gw-listener.c Mon Nov 24 05:14:44 2008
@@ -559,7 +559,7 @@
url = camel_url_new (info->source_url, NULL);
- color = g_strdup_printf ("%u", g_random_int_range (0x100000, 0xffffaa));
+ color = g_strdup_printf ("#%06X", g_random_int_range (0x100000, 0xffffaa));
/* The above range is chosen so that the colors are neither too light nor too dark
and appealing in all the themes */
Modified: branches/kill-bonobo/plugins/groupwise-features/status-track.c
==============================================================================
--- branches/kill-bonobo/plugins/groupwise-features/status-track.c (original)
+++ branches/kill-bonobo/plugins/groupwise-features/status-track.c Mon Nov 24 05:14:44 2008
@@ -79,8 +79,6 @@
gchar *boldmsg;
- const char *status = NULL ;
-
int row = 0;
EGwConnection *cnc;
@@ -93,14 +91,6 @@
return ;
}
- status = camel_medium_get_header ( CAMEL_MEDIUM(msg), "X-gw-status-opt") ;
- if (!status) {
- g_print ("Error!! No header\n");
- /* No need to make any call if this header is not available.
- This is the server side identifier for sent-items */
- return ;
- }
-
/*Create the dialog*/
d = (GtkDialog *) gtk_dialog_new ();
gtk_dialog_add_button (d, GTK_STOCK_OK, GTK_RESPONSE_OK);
Modified: branches/kill-bonobo/plugins/itip-formatter/itip-formatter.c
==============================================================================
--- branches/kill-bonobo/plugins/itip-formatter/itip-formatter.c (original)
+++ branches/kill-bonobo/plugins/itip-formatter/itip-formatter.c Mon Nov 24 05:14:44 2008
@@ -686,9 +686,12 @@
/*
* Only allow replies if backend doesn't do that automatically.
+ * Only enable it for forwarded invitiations (PUBLISH) or direct
+ * invitiations (REQUEST), but not replies (REPLY).
* Replies only make sense for events with an organizer.
*/
if (!e_cal_get_static_capability (ecal, CAL_STATIC_CAPABILITY_SAVE_SCHEDULES) &&
+ (pitip->method == ICAL_METHOD_PUBLISH || pitip->method == ICAL_METHOD_REQUEST) &&
pitip->has_organizer) {
rsvp_enabled = TRUE;
}
Modified: branches/kill-bonobo/plugins/mail-notification/mail-notification.c
==============================================================================
--- branches/kill-bonobo/plugins/mail-notification/mail-notification.c (original)
+++ branches/kill-bonobo/plugins/mail-notification/mail-notification.c Mon Nov 24 05:14:44 2008
@@ -56,6 +56,7 @@
static gboolean enabled = FALSE;
static GtkWidget *get_cfg_widget (void);
+static GStaticMutex mlock = G_STATIC_MUTEX_INIT;
/**
* each part should "implement" its own "public" functions:
@@ -441,6 +442,26 @@
g_object_unref (menu);
}
+#ifdef HAVE_LIBNOTIFY
+static void
+notifyActionCallback (NotifyNotification *n, gchar *label, gpointer a)
+{
+ g_static_mutex_lock (&mlock);
+
+ gtk_status_icon_set_visible (status_icon, FALSE);
+ g_object_unref (status_icon);
+
+ if (blink_timeout_id) {
+ g_source_remove (blink_timeout_id);
+ blink_timeout_id = 0;
+ }
+
+ status_icon = NULL;
+ status_count = 0;
+ g_static_mutex_unlock (&mlock);
+}
+#endif
+
static void
new_notify_status (EMEventTargetFolder *t)
{
@@ -487,6 +508,7 @@
notify_notification_set_urgency (notify, NOTIFY_URGENCY_NORMAL);
notify_notification_set_timeout (notify, NOTIFY_EXPIRES_DEFAULT);
+ notify_notification_add_action(notify, "default", "Default", notifyActionCallback, NULL, NULL);
g_timeout_add (500, notification_callback, notify);
}
}
@@ -835,7 +857,6 @@
int e_plugin_lib_enable (EPluginLib *ep, int enable);
GtkWidget *e_plugin_lib_get_configure_widget (EPlugin *epl);
-static GStaticMutex mlock = G_STATIC_MUTEX_INIT;
void
org_gnome_mail_new_notify (EPlugin *ep, EMEventTargetFolder *t)
Modified: branches/kill-bonobo/shell/main.c
==============================================================================
--- branches/kill-bonobo/shell/main.c (original)
+++ branches/kill-bonobo/shell/main.c Mon Nov 24 05:14:44 2008
@@ -84,12 +84,17 @@
#define SKIP_WARNING_DIALOG_KEY \
"/apps/evolution/shell/skip_warning_dialog"
+/* STABLE_VERSION is only defined for development versions. */
+#ifdef STABLE_VERSION
+#define DEVELOPMENT 1
+#endif
+
/* Command-line options. */
static gboolean start_online = FALSE;
static gboolean start_offline = FALSE;
static gboolean setup_only = FALSE;
static gboolean force_shutdown = FALSE;
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
static gboolean force_migrate = FALSE;
#endif
static gboolean disable_eplugin = FALSE;
@@ -163,7 +168,7 @@
#endif
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
/* Warning dialog to scare people off a little bit. */
@@ -211,7 +216,7 @@
"\n"
"We hope that you enjoy the results of our hard work, and we\n"
"eagerly await your contributions!\n"),
- "2.22.1");
+ STABLE_VERSION);
label = gtk_label_new (text);
g_free(text);
@@ -394,7 +399,7 @@
{ "force-shutdown", '\0', 0, G_OPTION_ARG_NONE, &force_shutdown,
N_("Forcibly shut down all Evolution components"), NULL },
#endif
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
{ "force-migrate", '\0', 0, G_OPTION_ARG_NONE, &force_migrate,
N_("Forcibly re-migrate from Evolution 1.4"), NULL },
#endif
@@ -543,7 +548,7 @@
#endif
GConfClient *client;
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
gboolean skip_warning_dialog;
#endif
GnomeProgram *program;
@@ -601,7 +606,7 @@
client = gconf_client_get_default ();
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
if (force_migrate)
destroy_config (client);
#endif
@@ -651,7 +656,7 @@
e_plugin_load_plugins ();
}
-#if DEVELOPMENT
+#ifdef DEVELOPMENT
skip_warning_dialog = gconf_client_get_bool (
client, SKIP_WARNING_DIALOG_KEY, NULL);
Modified: branches/kill-bonobo/widgets/table/e-table-defines.h
==============================================================================
--- branches/kill-bonobo/widgets/table/e-table-defines.h (original)
+++ branches/kill-bonobo/widgets/table/e-table-defines.h Mon Nov 24 05:14:44 2008
@@ -33,7 +33,7 @@
#define GROUP_INDENT (BUTTON_HEIGHT + (BUTTON_PADDING * 2))
/* Padding around the contents of a header button */
-#define HEADER_PADDING 1
+#define HEADER_PADDING 3
#define MIN_ARROW_SIZE 10
Modified: branches/kill-bonobo/widgets/table/e-table-header-utils.c
==============================================================================
--- branches/kill-bonobo/widgets/table/e-table-header-utils.c (original)
+++ branches/kill-bonobo/widgets/table/e-table-header-utils.c Mon Nov 24 05:14:44 2008
@@ -463,7 +463,7 @@
} else {
e_table_draw_elided_string (drawable, gc, widget,
inner_x, inner_y,
- layout, ecol->text, inner_width, TRUE);
+ layout, ecol->text, inner_width, FALSE);
}
g_object_unref (layout);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]