Merge branch 'master' into wip/gsettings

This commit is contained in:
Rodrigo Moya
2011-11-17 15:55:48 +01:00
28 changed files with 869 additions and 803 deletions

View File

@ -49,6 +49,9 @@ struct _AlarmNotifyPrivate {
ESourceList *source_lists[E_CAL_CLIENT_SOURCE_TYPE_LAST];
ESourceList *selected_calendars;
GMutex *mutex;
GSList *offline_sources;
guint offline_timeout_id;
};
typedef struct {
@ -100,6 +103,21 @@ process_removal_in_hash (const gchar *uri,
prd->removals = g_list_prepend (prd->removals, (gpointer) uri);
}
static gint
find_slist_source_uri_cb (gconstpointer a, gconstpointer b)
{
ESource *asource = (ESource *) a;
const gchar *buri = b;
gchar *auri;
gint res;
auri = e_source_get_uri (asource);
res = g_strcmp0 (auri, buri);
g_free (auri);
return res;
}
static void
alarm_notify_list_changed_cb (ESourceList *source_list,
AlarmNotify *an)
@ -139,9 +157,10 @@ alarm_notify_list_changed_cb (ESourceList *source_list,
continue;
uri = e_source_get_uri (source);
if (!g_hash_table_lookup (an->priv->uri_client_hash[source_type], uri)) {
if (!g_hash_table_lookup (an->priv->uri_client_hash[source_type], uri) &&
!g_slist_find_custom (an->priv->offline_sources, uri, find_slist_source_uri_cb)) {
debug (("Adding Calendar %s", uri));
alarm_notify_add_calendar (an, source_type, source, FALSE);
alarm_notify_add_calendar (an, source_type, source);
}
g_free (uri);
}
@ -194,7 +213,7 @@ alarm_notify_load_calendars (AlarmNotify *an,
uri = e_source_get_uri (source);
debug (("Loading Calendar %s", uri));
alarm_notify_add_calendar (an, source_type, source, FALSE);
alarm_notify_add_calendar (an, source_type, source);
g_free (uri);
}
@ -222,6 +241,12 @@ alarm_notify_finalize (GObject *object)
priv = ALARM_NOTIFY (object)->priv;
if (priv->offline_timeout_id)
g_source_remove (priv->offline_timeout_id);
priv->offline_timeout_id = 0;
g_slist_free_full (priv->offline_sources, g_object_unref);
priv->offline_sources = NULL;
for (ii = 0; ii < E_CAL_CLIENT_SOURCE_TYPE_LAST; ii++) {
g_hash_table_foreach (
priv->uri_client_hash[ii],
@ -349,6 +374,32 @@ alarm_notify_new (GCancellable *cancellable,
"application-id", APPLICATION_ID, NULL);
}
static gboolean
try_open_offline_timeout_cb (gpointer user_data)
{
AlarmNotify *an = ALARM_NOTIFY (user_data);
GSList *sources, *iter;
g_return_val_if_fail (an != NULL, FALSE);
g_return_val_if_fail (an->priv != NULL, FALSE);
sources = an->priv->offline_sources;
an->priv->offline_sources = NULL;
an->priv->offline_timeout_id = 0;
for (iter = sources; iter; iter = iter->next) {
ESource *source = iter->data;
alarm_notify_add_calendar (an,
GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (source), "source-type")),
source);
}
g_slist_free_full (sources, g_object_unref);
return FALSE;
}
static void
client_opened_cb (GObject *source_object,
GAsyncResult *result,
@ -360,11 +411,22 @@ client_opened_cb (GObject *source_object,
ECalClient *cal_client;
ECalClientSourceType source_type;
const gchar *uri;
GError *error = NULL;
e_client_utils_open_new_finish (source, result, &client, NULL);
e_client_utils_open_new_finish (source, result, &client, &error);
if (client == NULL) {
if (g_error_matches (error, E_CLIENT_ERROR, E_CLIENT_ERROR_REPOSITORY_OFFLINE)) {
if (an->priv->offline_timeout_id)
g_source_remove (an->priv->offline_timeout_id);
an->priv->offline_sources = g_slist_append (an->priv->offline_sources, g_object_ref (source));
an->priv->offline_timeout_id = g_timeout_add_seconds (5 * 60, try_open_offline_timeout_cb, an);
}
g_clear_error (&error);
if (client == NULL)
return;
}
cal_client = E_CAL_CLIENT (client);
source_type = e_cal_client_get_source_type (cal_client);
@ -385,8 +447,6 @@ client_opened_cb (GObject *source_object,
* alarm_notify_add_calendar:
* @an: An alarm notification service.
* @uri: URI of the calendar to load.
* @load_afterwards: Whether this calendar should be loaded in the future
* when the alarm daemon starts up.
*
* Tells the alarm notification service to load a calendar and start monitoring
* its alarms. It can optionally be made to save the URI of this calendar so
@ -395,8 +455,7 @@ client_opened_cb (GObject *source_object,
void
alarm_notify_add_calendar (AlarmNotify *an,
ECalClientSourceType source_type,
ESource *source,
gboolean load_afterwards)
ESource *source)
{
AlarmNotifyPrivate *priv;
EClientSourceType client_source_type;
@ -459,6 +518,8 @@ alarm_notify_add_calendar (AlarmNotify *an,
client_source_type = E_CLIENT_SOURCE_TYPE_LAST;
}
g_object_set_data (G_OBJECT (source), "source-type", GUINT_TO_POINTER (source_type));
e_client_utils_open_new (
source, client_source_type, TRUE, NULL,
e_client_utils_authenticate_handler, NULL,
@ -476,6 +537,7 @@ alarm_notify_remove_calendar (AlarmNotify *an,
{
AlarmNotifyPrivate *priv;
ECalClient *cal_client;
GSList *in_offline;
priv = an->priv;
@ -486,4 +548,17 @@ alarm_notify_remove_calendar (AlarmNotify *an,
alarm_queue_remove_client (cal_client, FALSE);
g_hash_table_remove (priv->uri_client_hash[source_type], str_uri);
}
in_offline = g_slist_find_custom (priv->offline_sources, str_uri, find_slist_source_uri_cb);
if (in_offline) {
ESource *source = in_offline->data;
priv->offline_sources = g_slist_remove (priv->offline_sources, source);
if (!priv->offline_sources && priv->offline_timeout_id) {
g_source_remove (priv->offline_timeout_id);
priv->offline_timeout_id = 0;
}
g_object_unref (source);
}
}

View File

@ -69,8 +69,7 @@ AlarmNotify * alarm_notify_new (GCancellable *cancellable,
GError **error);
void alarm_notify_add_calendar (AlarmNotify *an,
ECalClientSourceType source_type,
ESource *source,
gboolean load_afterwards);
ESource *source);
void alarm_notify_remove_calendar (AlarmNotify *an,
ECalClientSourceType source_type,
const gchar *str_uri);

View File

@ -29,6 +29,9 @@
#include <time.h>
#include <glib/gi18n.h>
#include "e-util/e-datetime-format.h"
#include "calendar-config.h"
#include "e-meeting-time-sel-item.h"
#include "e-meeting-time-sel.h"
@ -389,9 +392,10 @@ e_meeting_time_selector_item_paint_day_top (EMeetingTimeSelectorItem *mts_item,
{
EMeetingTimeSelector *mts;
gint y, grid_x;
gchar buffer[128], *format;
gchar *str;
gint hour, hour_x, hour_y;
PangoLayout *layout;
struct tm tm_time;
cairo_save (cr);
@ -437,29 +441,31 @@ e_meeting_time_selector_item_paint_day_top (EMeetingTimeSelectorItem *mts_item,
cairo_rel_line_to (cr, 0, height);
cairo_stroke (cr);
g_date_to_struct_tm (date, &tm_time);
str = e_datetime_format_format_tm ("calendar", "table", DTFormatKindDate, &tm_time);
g_return_if_fail (str != NULL);
/* Draw the date. Set a clipping rectangle so we don't draw over the
* next day. */
if (mts->date_format == E_MEETING_TIME_SELECTOR_DATE_FULL)
/* This is a strftime() format string %A = full weekday name,
* %B = full month name, %d = month day, %Y = full year. */
format = _("%A, %B %d, %Y");
else if (mts->date_format == E_MEETING_TIME_SELECTOR_DATE_ABBREVIATED_DAY)
/* This is a strftime() format string %a = abbreviated weekday
* name, %m = month number, %d = month day, %Y = full year. */
format = _("%a %m/%d/%Y");
else
/* This is a strftime() format string %m = month number,
* %d = month day, %Y = full year. */
format = _("%m/%d/%Y");
if (mts->date_format == E_MEETING_TIME_SELECTOR_DATE_ABBREVIATED_DAY
&& !e_datetime_format_includes_day_name ("calendar", "table", DTFormatKindDate)) {
gchar buffer[128];
gchar *tmp;
g_date_strftime (buffer, sizeof (buffer), format, date);
g_date_strftime (buffer, sizeof (buffer), "%a", date);
tmp = str;
str = g_strconcat (buffer, " ", str, NULL);
g_free (tmp);
}
cairo_save (cr);
cairo_rectangle (cr, x, -scroll_y, mts->day_width - 2, mts->row_height - 2);
cairo_clip (cr);
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_text (layout, str, -1);
cairo_move_to (cr, x + 2, 4 - scroll_y);
pango_cairo_show_layout (cr, layout);
@ -484,6 +490,7 @@ e_meeting_time_selector_item_paint_day_top (EMeetingTimeSelectorItem *mts_item,
g_object_unref (layout);
cairo_restore (cr);
g_free (str);
}
/* This paints the colored bars representing busy periods for the combined

View File

@ -41,6 +41,7 @@
#include "misc/e-dateedit.h"
#include "e-util/e-util.h"
#include "e-util/e-datetime-format.h"
#include "e-meeting-utils.h"
#include "e-meeting-list-view.h"
@ -2327,10 +2328,11 @@ e_meeting_time_selector_recalc_date_format (EMeetingTimeSelector *mts)
GDate date;
gint max_date_width, longest_weekday_width, longest_month_width, width;
gint day, longest_weekday, month, longest_month;
gchar buffer[128];
gchar buffer[128], *str;
const gchar *name;
PangoContext *pango_context;
PangoLayout *layout;
struct tm tm_time;
/* Set up Pango prerequisites */
pango_context = gtk_widget_get_pango_context (GTK_WIDGET (mts));
@ -2368,28 +2370,6 @@ e_meeting_time_selector_recalc_date_format (EMeetingTimeSelector *mts)
}
}
/* See if we can use the full date. We want to use a date with a
* month day > 20 and also the longest weekday. We use a
* pre-calculated array of days for each month and add on the
* weekday (which is 1 (Mon) to 7 (Sun). */
g_date_set_dmy (&date, days[longest_month - 1] + longest_weekday,
longest_month, 2000);
/* This is a strftime() format string %A = full weekday name,
* %B = full month name, %d = month day, %Y = full year. */
g_date_strftime (buffer, sizeof (buffer), _("%A, %B %d, %Y"), &date);
#if 0
g_print ("longest_month: %i longest_weekday: %i date: %s\n",
longest_month, longest_weekday, buffer);
#endif
pango_layout_set_text (layout, buffer, -1);
pango_layout_get_pixel_size (layout, &width, NULL);
if (width < max_date_width) {
mts->date_format = E_MEETING_TIME_SELECTOR_DATE_FULL;
return;
}
/* Now try it with abbreviated weekday names. */
longest_weekday_width = 0;
longest_weekday = G_DATE_MONDAY;
@ -2405,16 +2385,28 @@ e_meeting_time_selector_recalc_date_format (EMeetingTimeSelector *mts)
g_date_set_dmy (&date, days[longest_month - 1] + longest_weekday,
longest_month, 2000);
/* This is a strftime() format string %a = abbreviated weekday name,
* %m = month number, %d = month day, %Y = full year. */
g_date_strftime (buffer, sizeof (buffer), _("%a %m/%d/%Y"), &date);
g_date_to_struct_tm (&date, &tm_time);
str = e_datetime_format_format_tm ("calendar", "table", DTFormatKindDate, &tm_time);
g_return_if_fail (str != NULL);
if (!e_datetime_format_includes_day_name ("calendar", "table", DTFormatKindDate)) {
gchar *tmp;
g_date_strftime (buffer, sizeof (buffer), "%a", &date);
tmp = str;
str = g_strconcat (buffer, " ", str, NULL);
g_free (tmp);
}
#if 0
g_print ("longest_month: %i longest_weekday: %i date: %s\n",
longest_month, longest_weekday, buffer);
longest_month, longest_weekday, str);
#endif
pango_layout_set_text (layout, buffer, -1);
pango_layout_set_text (layout, str, -1);
pango_layout_get_pixel_size (layout, &width, NULL);
if (width < max_date_width)
mts->date_format = E_MEETING_TIME_SELECTOR_DATE_ABBREVIATED_DAY;
@ -2422,6 +2414,7 @@ e_meeting_time_selector_recalc_date_format (EMeetingTimeSelector *mts)
mts->date_format = E_MEETING_TIME_SELECTOR_DATE_SHORT;
g_object_unref (layout);
g_free (str);
}
/* Turn off the background of the canvas windows. This reduces flicker

View File

@ -68,13 +68,13 @@
G_BEGIN_DECLS
/* This is used to specify the format used when displaying the dates.
* The full format is like 'Sunday, September 12, 1999'. The abbreviated format
* is like 'Sun 12/9/99'. The short format is like '12/9/99'. The actual
* format used is determined in e_meeting_time_selector_style_set (), once we
* know the font being used. */
* The abbreviated format is like 'Sun 12/9/99'.
* The short format is like '12/9/99'.
* The actual format used is determined in e_meeting_time_selector_style_set (),
* once we know the font being used.
*/
typedef enum
{
E_MEETING_TIME_SELECTOR_DATE_FULL,
E_MEETING_TIME_SELECTOR_DATE_ABBREVIATED_DAY,
E_MEETING_TIME_SELECTOR_DATE_SHORT
} EMeetingTimeSelectorDateFormat;

View File

@ -1099,8 +1099,6 @@ e_util_guess_mime_type
e_util_get_category_filter_options
e_binding_transform_color_to_string
e_binding_transform_string_to_color
e_binding_transform_enum_nick_to_value
e_binding_transform_enum_value_to_nick
e_binding_transform_source_to_uid
e_binding_transform_uid_to_source
e_charset_add_radio_actions

View File

@ -662,3 +662,25 @@ e_datetime_format_format_tm (const gchar *component,
return res;
}
gboolean
e_datetime_format_includes_day_name (const gchar *component, const gchar *part, DTFormatKind kind)
{
gchar *key;
const gchar *fmt;
gboolean res;
g_return_val_if_fail (component != NULL, FALSE);
g_return_val_if_fail (*component != 0, FALSE);
key = gen_key (component, part, kind);
g_return_val_if_fail (key != NULL, FALSE);
fmt = get_format_internal (key, kind);
res = fmt && (strstr (fmt, "%a") != NULL || strstr (fmt, "%A") != NULL);
g_free (key);
return res;
}

View File

@ -39,6 +39,7 @@ void e_datetime_format_add_setup_widget (GtkWidget *table, gint row, const gchar
gchar *e_datetime_format_format (const gchar *component, const gchar *part, DTFormatKind kind, time_t value);
gchar *e_datetime_format_format_tm (const gchar *component, const gchar *part, DTFormatKind kind, struct tm *tm_time);
gboolean e_datetime_format_includes_day_name (const gchar *component, const gchar *part, DTFormatKind kind);
G_END_DECLS

View File

@ -1439,80 +1439,6 @@ e_binding_transform_string_to_color (GBinding *binding,
return success;
}
/**
* e_binding_transform_enum_value_to_nick:
* @binding: a #GBinding
* @source_value: a #GValue whose type is derived from #G_TYPE_ENUM
* @target_value: a #GValue of type #G_TYPE_STRING
* @not_used: not used
*
* Transforms an enumeration value to its corresponding nickname.
*
* Returns: %TRUE if the enum value has a corresponding nickname
**/
gboolean
e_binding_transform_enum_value_to_nick (GBinding *binding,
const GValue *source_value,
GValue *target_value,
gpointer not_used)
{
GEnumClass *enum_class;
GEnumValue *enum_value;
gint value;
gboolean success = FALSE;
g_return_val_if_fail (G_IS_BINDING (binding), FALSE);
enum_class = g_type_class_peek (G_VALUE_TYPE (source_value));
g_return_val_if_fail (G_IS_ENUM_CLASS (enum_class), FALSE);
value = g_value_get_enum (source_value);
enum_value = g_enum_get_value (enum_class, value);
if (enum_value != NULL) {
g_value_set_string (target_value, enum_value->value_nick);
success = TRUE;
}
return success;
}
/**
* e_binding_transform_enum_nick_to_value:
* @binding: a #GBinding
* @source_value: a #GValue of type #G_TYPE_STRING
* @target_value: a #GValue whose type is derived from #G_TYPE_ENUM
* @not_used: not_used
*
* Transforms an enumeration nickname to its corresponding value.
*
* Returns: %TRUE if the enum nickname has a corresponding value
**/
gboolean
e_binding_transform_enum_nick_to_value (GBinding *binding,
const GValue *source_value,
GValue *target_value,
gpointer not_used)
{
GEnumClass *enum_class;
GEnumValue *enum_value;
const gchar *string;
gboolean success = FALSE;
g_return_val_if_fail (G_IS_BINDING (binding), FALSE);
enum_class = g_type_class_peek (G_VALUE_TYPE (target_value));
g_return_val_if_fail (G_IS_ENUM_CLASS (enum_class), FALSE);
string = g_value_get_string (source_value);
enum_value = g_enum_get_value_by_nick (enum_class, string);
if (enum_value != NULL) {
g_value_set_enum (target_value, enum_value->value);
success = TRUE;
}
return success;
}
/**
* e_binding_transform_source_to_uid:
* @binding: a #GBinding

View File

@ -137,7 +137,7 @@ void e_util_set_source_combo_box_list
(GtkWidget *source_combo_box,
const gchar *source_gconf_path);
/* Useful GBinding transformation functions */
/* Useful GBinding transform functions */
gboolean e_binding_transform_color_to_string
(GBinding *binding,
const GValue *source_value,
@ -148,16 +148,6 @@ gboolean e_binding_transform_string_to_color
const GValue *source_value,
GValue *target_value,
gpointer not_used);
gboolean e_binding_transform_enum_value_to_nick
(GBinding *binding,
const GValue *source_value,
GValue *target_value,
gpointer not_used);
gboolean e_binding_transform_enum_nick_to_value
(GBinding *binding,
const GValue *source_value,
GValue *target_value,
gpointer not_used);
gboolean e_binding_transform_source_to_uid
(GBinding *binding,
const GValue *source_value,

View File

@ -26,7 +26,6 @@
#endif
#include <gtk/gtk.h>
#include <libedataserver/e-sexp.h>
#include "e-filter-color.h"
@ -127,7 +126,7 @@ filter_color_format_sexp (EFilterElement *element,
g_snprintf (spec, sizeof (spec), "#%04x%04x%04x",
fc->color.red, fc->color.green, fc->color.blue);
e_sexp_encode_string (out, spec);
camel_sexp_encode_string (out, spec);
}
static void

View File

@ -25,6 +25,7 @@
#define E_FILTER_ELEMENT_H
#include <gtk/gtk.h>
#include <camel/camel.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include <e-util/e-alert.h>

View File

@ -31,8 +31,6 @@
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <libedataserver/e-sexp.h>
#include "e-util/e-alert.h"
#include "e-filter-file.h"
@ -203,7 +201,7 @@ filter_file_format_sexp (EFilterElement *element,
{
EFilterFile *file = E_FILTER_FILE (element);
e_sexp_encode_string (out, file->path);
camel_sexp_encode_string (out, file->path);
}
static void

View File

@ -32,8 +32,6 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <libedataserver/e-sexp.h>
#include "e-util/e-alert.h"
#include "e-filter-input.h"
@ -243,7 +241,7 @@ filter_input_format_sexp (EFilterElement *element,
GList *link;
for (link = input->values; link != NULL; link = g_list_next (link))
e_sexp_encode_string (out, link->data);
camel_sexp_encode_string (out, link->data);
}
static void

View File

@ -27,8 +27,6 @@
#include <stdlib.h>
#include <gtk/gtk.h>
#include <libedataserver/e-sexp.h>
#include "e-filter-int.h"
G_DEFINE_TYPE (

View File

@ -31,8 +31,6 @@
#include <glib/gi18n.h>
#include <gmodule.h>
#include <libedataserver/e-sexp.h>
#include "e-filter-option.h"
#include "e-filter-part.h"
@ -409,7 +407,7 @@ filter_option_format_sexp (EFilterElement *element,
EFilterOption *option = E_FILTER_OPTION (element);
if (option->current)
e_sexp_encode_string (out, option->current->value);
camel_sexp_encode_string (out, option->current->value);
}
static void

View File

@ -501,7 +501,7 @@ e_filter_part_expand_code (EFilterPart *part,
#if 0
} else if ((val = g_hash_table_lookup (part->globals, name))) {
g_string_append_printf (out, "%.*s", newstart-start, start);
e_sexp_encode_string (out, val);
camel_sexp_encode_string (out, val);
#endif
} else {
g_string_append_printf (out, "%.*s", (gint)(end-start+1), start);

View File

@ -122,10 +122,10 @@ struct _user_message_msg {
CamelSessionAlertType type;
gchar *prompt;
GSList *button_captions;
EFlag *done;
guint allow_cancel : 1;
guint result : 1;
gint result;
guint ismain : 1;
};
@ -160,8 +160,8 @@ user_message_response (GtkDialog *dialog,
struct _user_message_msg *m)
{
/* if !allow_cancel, then we've already replied */
if (m->allow_cancel) {
m->result = button == GTK_RESPONSE_OK;
if (m->button_captions) {
m->result = button;
e_flag_set (m->done);
}
@ -175,6 +175,8 @@ user_message_exec (struct _user_message_msg *m,
{
GtkWindow *parent;
const gchar *error_type;
gint index;
GSList *iter;
if (!m->ismain && user_message_dialog != NULL) {
g_queue_push_tail (&user_message_queue, mail_msg_ref (m));
@ -183,19 +185,13 @@ user_message_exec (struct _user_message_msg *m,
switch (m->type) {
case CAMEL_SESSION_ALERT_INFO:
error_type = m->allow_cancel ?
"mail:session-message-info-cancel" :
"mail:session-message-info";
error_type = "mail:session-message-info";
break;
case CAMEL_SESSION_ALERT_WARNING:
error_type = m->allow_cancel ?
"mail:session-message-warning-cancel" :
"mail:session-message-warning";
error_type = "mail:session-message-warning";
break;
case CAMEL_SESSION_ALERT_ERROR:
error_type = m->allow_cancel ?
"mail:session-message-error-cancel" :
"mail:session-message-error";
error_type = "mail:session-message-error";
break;
default:
error_type = NULL;
@ -208,6 +204,25 @@ user_message_exec (struct _user_message_msg *m,
parent, error_type, m->prompt, NULL);
g_object_set (user_message_dialog, "resizable", TRUE, NULL);
if (m->button_captions) {
GtkWidget *action_area;
GList *children, *child;
/* remove all default buttons and keep only those requested */
action_area = gtk_dialog_get_action_area (GTK_DIALOG (user_message_dialog));
children = gtk_container_get_children (GTK_CONTAINER (action_area));
for (child = children; child != NULL; child = child->next) {
gtk_container_remove (GTK_CONTAINER (action_area), child->data);
}
g_list_free (children);
}
for (index = 0, iter = m->button_captions; iter; index++, iter = iter->next) {
gtk_dialog_add_button (GTK_DIALOG (user_message_dialog), iter->data, index);
}
/* XXX This is a case where we need to be able to construct
* custom EAlerts without a predefined XML definition. */
if (m->ismain) {
@ -228,6 +243,7 @@ static void
user_message_free (struct _user_message_msg *m)
{
g_free (m->prompt);
g_slist_free_full (m->button_captions, g_free);
e_flag_free (m->done);
}
@ -889,24 +905,28 @@ mail_session_forget_password (CamelSession *session,
return TRUE;
}
static gboolean
static gint
mail_session_alert_user (CamelSession *session,
CamelSessionAlertType type,
const gchar *prompt,
gboolean cancel)
GSList *button_captions)
{
struct _user_message_msg *m;
GCancellable *cancellable;
gboolean result = TRUE;
gint result = -1;
GSList *iter;
m = mail_msg_new (&user_message_info);
m->ismain = mail_in_main_thread ();
m->type = type;
m->prompt = g_strdup (prompt);
m->done = e_flag_new ();
m->allow_cancel = cancel;
m->button_captions = g_slist_copy (button_captions);
if (cancel)
for (iter = m->button_captions; iter; iter = iter->next)
iter->data = g_strdup (iter->data);
if (g_slist_length (button_captions) > 1)
mail_msg_ref (m);
cancellable = e_activity_get_cancellable (m->base.activity);
@ -916,7 +936,7 @@ mail_session_alert_user (CamelSession *session,
else
mail_msg_main_loop_push (m);
if (cancel) {
if (g_slist_length (button_captions) > 1) {
e_flag_wait (m->done);
result = m->result;
mail_msg_unref (m);

View File

@ -2092,13 +2092,6 @@ emae_setup_settings (EMAccountEditorService *service)
settings_type = class->settings_type;
g_type_class_unref (class);
/* If we already have a CamelSettings instance
* of the appropriate type, leave it alone. */
if (service->settings != NULL) {
if (G_OBJECT_TYPE (service->settings) == settings_type)
return;
}
url = emae_account_url (
service->emae,
emae_service_info[service->type].account_uri_key);
@ -2830,8 +2823,8 @@ emae_create_basic_assistant_page (EMAccountEditor *emae,
title = _("Sending Email");
label = _("Please enter information about the way you will send mail. If you are not sure, ask your system administrator or Internet Service Provider.");
} else if (g_ascii_strcasecmp (page_id, "review_page") == 0) {
title = _("Review Account");
label = _("Time to check things over before we try and connect to the server and fetch your mail.");
title = _("Account Summary");
label = _("This is a summary of the settings which will be used to access your mail.");
} else if (g_ascii_strcasecmp (page_id, "finish_page") == 0) {
page_type = GTK_ASSISTANT_PAGE_CONFIRM;
fill_space = TRUE;
@ -3592,13 +3585,10 @@ emae_send_page (EConfig *ec,
GtkWidget *w;
GtkBuilder *builder;
provider = emae_get_transport_provider (emae);
if (provider == NULL)
return NULL;
provider = emae_get_store_provider (emae);
/* no transport options page at all for these types of providers */
if (CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT (provider)) {
if (provider && CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT (provider)) {
memset (&priv->transport.frame, 0, ((gchar *) &priv->transport.check_dialog) - ((gchar *) &priv->transport.frame));
return NULL;
}
@ -4622,9 +4612,9 @@ emae_check_complete (EConfig *ec,
gtk_label_set_text (emae->priv->receive_name, url->user);
g_object_get (emae->priv->source.settings, "security-method", &method, NULL);
if (method == CAMEL_NETWORK_SECURITY_METHOD_SSL_ON_ALTERNATE_PORT)
enc = g_strdup (_("Always(SSL)"));
enc = g_strdup (_("Always (SSL)"));
else if (method == CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT)
enc = g_strdup (_("When possible(TLS)"));
enc = g_strdup (_("When possible (TLS)"));
else
enc = g_strdup (_("Never"));
@ -4638,9 +4628,9 @@ emae_check_complete (EConfig *ec,
gtk_label_set_text (emae->priv->send_name, url->user);
g_object_get (emae->priv->transport.settings, "security-method", &method, NULL);
if (method == CAMEL_NETWORK_SECURITY_METHOD_SSL_ON_ALTERNATE_PORT)
enc = g_strdup (_("Always(SSL)"));
enc = g_strdup (_("Always (SSL)"));
else if (method == CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT)
enc = g_strdup (_("When possible(TLS)"));
enc = g_strdup (_("When possible (TLS)"));
else
enc = g_strdup (_("Never"));
@ -4766,13 +4756,18 @@ emae_check_complete (EConfig *ec,
}
if (ok && (pageid == NULL || !strcmp (pageid, "30.send"))) {
if (emae->type != EMAE_NOTEBOOK && refresh) {
emae_refresh_providers (emae, &emae->priv->transport);
emae_provider_changed (emae->priv->transport.providers, &emae->priv->transport);
}
ok = emae_service_complete (emae, &emae->priv->transport);
if (!ok) {
d (printf ("send page incomplete\n"));
CamelProvider *provider;
provider = emae_get_store_provider (emae);
if (!provider || !CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT (provider)) {
if (emae->type != EMAE_NOTEBOOK && refresh) {
emae_refresh_providers (emae, &emae->priv->transport);
emae_provider_changed (emae->priv->transport.providers, &emae->priv->transport);
}
ok = emae_service_complete (emae, &emae->priv->transport);
if (!ok) {
d (printf ("send page incomplete\n"));
}
}
}
@ -5132,7 +5127,7 @@ emae_commit (EConfig *ec,
} else {
CamelProvider *provider;
d (printf ("Adding new account '%s'\n", e_account_get_string (account, E_ACCOUNT_NAME)));
d (printf ("Adding new account '%s'\n", e_account_get_string (modified_account, E_ACCOUNT_NAME)));
e_account_list_add (accounts, modified_account);
account = modified_account;

View File

@ -1412,17 +1412,23 @@ emu_update_composers_security (EMsgComposer *composer,
guint32 validity_found)
{
GtkToggleAction *action;
EShell *shell;
EShellSettings *shell_settings;
g_return_if_fail (composer != NULL);
shell = e_msg_composer_get_shell (composer);
shell_settings = e_shell_get_shell_settings (shell);
/* Pre-set only for encrypted messages, not for signed */
/*if (validity_found & EM_FORMAT_VALIDITY_FOUND_SIGNED) {
if ((validity_found & EM_FORMAT_VALIDITY_FOUND_SIGNED) != 0
&& e_shell_settings_get_boolean (shell_settings, "composer-sign-reply-if-signed")) {
if (validity_found & EM_FORMAT_VALIDITY_FOUND_SMIME)
action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_SMIME_SIGN (composer));
else
action = GTK_TOGGLE_ACTION (E_COMPOSER_ACTION_PGP_SIGN (composer));
gtk_toggle_action_set_active (action, TRUE);
}*/
}
if (validity_found & EM_FORMAT_VALIDITY_FOUND_ENCRYPTED) {
if (validity_found & EM_FORMAT_VALIDITY_FOUND_SMIME)

View File

@ -36,7 +36,6 @@
#include "mail/em-utils.h"
#include "shell/e-shell.h"
#include "filter/e-filter-part.h"
#include "libedataserver/e-sexp.h"
#include "e-util/e-alert.h"
#define EM_FILTER_FOLDER_ELEMENT_GET_PRIVATE(obj) \
@ -264,7 +263,7 @@ filter_folder_element_format_sexp (EFilterElement *fe,
{
EMFilterFolderElement *ff = (EMFilterFolderElement *) fe;
e_sexp_encode_string (out, ff->priv->uri);
camel_sexp_encode_string (out, ff->priv->uri);
}
static void

View File

@ -32,8 +32,6 @@
#include <gtk/gtk.h>
#include <camel/camel.h>
#include <libedataserver/e-sexp.h>
#include <e-util/e-account-utils.h>
#include <filter/e-filter-part.h>
@ -402,7 +400,7 @@ filter_source_element_format_sexp (EFilterElement *fe,
{
EMFilterSourceElement *fs = (EMFilterSourceElement *) fe;
e_sexp_encode_string (out, fs->priv->active_id);
camel_sexp_encode_string (out, fs->priv->active_id);
}
static void

View File

@ -76,6 +76,21 @@
</locale>
</schema>
<schema>
<key>/schemas/apps/evolution/mail/composer/sign_reply_if_signed</key>
<applyto>/apps/evolution/mail/composer/sign_reply_if_signed</applyto>
<owner>evolution-mail</owner>
<type>bool</type>
<default>false</default>
<locale name="C">
<short>Digitally sign messages when original message signed (PGP or S/MIME)</short>
<long>
Automatically enable PGP or S/MIME signatures when replying
to a message which is also PGP or S/MIME signed.
</long>
</locale>
</schema>
<schema>
<key>/schemas/apps/evolution/mail/composer/reply_start_bottom</key>
<applyto>/apps/evolution/mail/composer/reply_start_bottom</applyto>

View File

@ -594,7 +594,7 @@ for display purposes only. </property>
<object class="GtkTable" id="replies-and-forwards-table">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">6</property>
<property name="n_rows">7</property>
<property name="n_columns">2</property>
<property name="column_spacing">6</property>
<property name="row_spacing">6</property>
@ -696,6 +696,23 @@ for display purposes only. </property>
<property name="y_options"></property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="chkSignReplyIfSigned">
<property name="label" translatable="yes">Digitally _sign messages when original message signed (PGP or S/MIME)</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="reply-style-alignment">
<property name="visible">True</property>
@ -4887,6 +4904,7 @@ For example: "Work" or "Personal"</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">description</property>
<property name="wrap">True</property>
<property name="width-chars">40</property>
</object>
<packing>
<property name="left_attach">1</property>
@ -5398,6 +5416,7 @@ For example: "Work" or "Personal"</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">description</property>
<property name="wrap">True</property>
<property name="width-chars">40</property>
</object>
<packing>
<property name="left_attach">1</property>

View File

@ -140,32 +140,14 @@ Many email systems add an Apparently-To header to messages that only have BCC re
<secondary>{0}</secondary>
</error>
<error id="session-message-info-cancel" type="info" default="GTK_RESPONSE_CANCEL">
<secondary>{0}</secondary>
<button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
<button stock="gtk-ok" response="GTK_RESPONSE_OK"/>
</error>
<error id="session-message-warning" type="warning">
<secondary>{0}</secondary>
</error>
<error id="session-message-warning-cancel" type="warning" default="GTK_RESPONSE_CANCEL">
<secondary>{0}</secondary>
<button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
<button stock="gtk-ok" response="GTK_RESPONSE_OK"/>
</error>
<error id="session-message-error" type="info">
<secondary>{0}</secondary>
</error>
<error id="session-message-error-cancel" type="info" default="GTK_RESPONSE_CANCEL">
<secondary>{0}</secondary>
<button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
<button stock="gtk-ok" response="GTK_RESPONSE_OK"/>
</error>
<error id="ask-session-password" type="question" default="GTK_RESPONSE_OK">
<_primary>Enter password.</_primary>
<secondary>{0}</secondary>

View File

@ -323,6 +323,10 @@ e_mail_shell_settings_init (EShellBackend *shell_backend)
MAIL_SCHEMA,
"composer-group-reply-to-list");
e_shell_settings_install_property_for_key (
"composer-sign-reply-if-signed",
"/apps/evolution/mail/composer/sign_reply_if_signed");
e_shell_settings_install_property_for_key (
"composer-prompt-only-bcc",
MAIL_SCHEMA,

View File

@ -456,6 +456,13 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE);
widget = e_builder_get_widget (prefs->builder, "chkSignReplyIfSigned");
g_object_bind_property (
shell_settings, "composer-sign-reply-if-signed",
widget, "active",
G_BINDING_BIDIRECTIONAL |
G_BINDING_SYNC_CREATE);
widget = e_builder_get_widget (prefs->builder, "chkTopSignature");
g_object_bind_property (
shell_settings, "composer-top-signature",

1162
po/es.po

File diff suppressed because it is too large Load Diff