Reduce GConf usage in em-composer-utils.c.

To reduce GConf usage in em-composer-utils.c:

- Relevant functions in em-composer-utils.c now take arguments for
  reply and forward styles.

- Redundant forwarding functions were removed:

    em_utils_forward_attached()
    em_utils_forward_inline()
    em_utils_forward_quoted()

- EMailReader now has "forward-style" and "reply-style" properties,
  which get bound to the appropriate EShellSettings properties in
  modules/mail/e-mail-config-reader.c.  These same EShellSettings
  properties are bound to the combo boxes in Composer Preferences.
This commit is contained in:
Matthew Barnes
2010-10-19 13:32:26 -04:00
parent 689bb1148d
commit d305e8ff10
18 changed files with 614 additions and 291 deletions

View File

@ -67,8 +67,10 @@ enum {
PROP_0,
PROP_BACKEND,
PROP_FOCUS_TRACKER,
PROP_FORWARD_STYLE,
PROP_GROUP_BY_THREADS,
PROP_SHOW_DELETED,
PROP_REPLY_STYLE,
PROP_UI_MANAGER
};
@ -361,12 +363,24 @@ mail_browser_set_property (GObject *object,
g_value_get_object (value));
return;
case PROP_FORWARD_STYLE:
e_mail_reader_set_forward_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
case PROP_GROUP_BY_THREADS:
e_mail_reader_set_group_by_threads (
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
case PROP_REPLY_STYLE:
e_mail_reader_set_reply_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
case PROP_SHOW_DELETED:
e_mail_browser_set_show_deleted (
E_MAIL_BROWSER (object),
@ -396,12 +410,24 @@ mail_browser_get_property (GObject *object,
E_MAIL_BROWSER (object)));
return;
case PROP_FORWARD_STYLE:
g_value_set_enum (
value, e_mail_reader_get_forward_style (
E_MAIL_READER (object)));
return;
case PROP_GROUP_BY_THREADS:
g_value_set_boolean (
value, e_mail_reader_get_group_by_threads (
E_MAIL_READER (object)));
return;
case PROP_REPLY_STYLE:
g_value_set_enum (
value, e_mail_reader_get_reply_style (
E_MAIL_READER (object)));
return;
case PROP_SHOW_DELETED:
g_value_set_boolean (
value, e_mail_browser_get_show_deleted (
@ -802,12 +828,24 @@ mail_browser_class_init (EMailBrowserClass *class)
E_TYPE_FOCUS_TRACKER,
G_PARAM_READABLE));
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_FORWARD_STYLE,
"forward-style");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_GROUP_BY_THREADS,
"group-by-threads");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_REPLY_STYLE,
"reply-style");
g_object_class_install_property (
object_class,
PROP_SHOW_DELETED,

View File

@ -61,6 +61,13 @@ typedef enum {
E_MAIL_REPLY_STYLE_OUTLOOK
} EMailReplyStyle;
typedef enum {
E_MAIL_REPLY_TO_SENDER,
E_MAIL_REPLY_TO_FROM,
E_MAIL_REPLY_TO_ALL,
E_MAIL_REPLY_TO_LIST
} EMailReplyType;
G_END_DECLS
#endif /* E_MAIL_ENUMS_H */

View File

@ -64,7 +64,9 @@ struct _EMailNotebookViewPrivate {
enum {
PROP_0,
PROP_FORWARD_STYLE,
PROP_GROUP_BY_THREADS,
PROP_REPLY_STYLE
};
#define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \
@ -573,12 +575,28 @@ mail_notebook_view_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
EMailNotebookViewPrivate *priv;
priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (object);
switch (property_id) {
case PROP_FORWARD_STYLE:
e_mail_reader_set_forward_style (
E_MAIL_READER (priv->current_view),
g_value_get_enum (value));
return;
case PROP_GROUP_BY_THREADS:
e_mail_reader_set_group_by_threads (
E_MAIL_READER (E_MAIL_NOTEBOOK_VIEW (object)->priv->current_view),
E_MAIL_READER (priv->current_view),
g_value_get_boolean (value));
return;
case PROP_REPLY_STYLE:
e_mail_reader_set_reply_style (
E_MAIL_READER (priv->current_view),
g_value_get_enum (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -590,14 +608,31 @@ mail_notebook_view_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
EMailNotebookViewPrivate *priv;
priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (object);
switch (property_id) {
case PROP_FORWARD_STYLE:
g_value_set_enum (
value,
e_mail_reader_get_forward_style (
E_MAIL_READER (priv->current_view)));
return;
case PROP_GROUP_BY_THREADS:
g_value_set_boolean (
value,
e_mail_reader_get_group_by_threads (
E_MAIL_READER (E_MAIL_NOTEBOOK_VIEW (object)->priv->current_view)));
E_MAIL_READER (priv->current_view)));
return;
case PROP_REPLY_STYLE:
g_value_set_enum (
value,
e_mail_reader_get_reply_style (
E_MAIL_READER (priv->current_view)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -1252,11 +1287,23 @@ e_mail_notebook_view_class_init (EMailNotebookViewClass *class)
mail_view_class->get_preview_visible = mail_notebook_view_get_preview_visible;
mail_view_class->set_preview_visible = mail_notebook_view_set_preview_visible;
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_FORWARD_STYLE,
"forward-style");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_GROUP_BY_THREADS,
"group-by-threads");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_REPLY_STYLE,
"reply-style");
}
static void

View File

@ -75,7 +75,9 @@ struct _EMailPanedViewPrivate {
enum {
PROP_0,
PROP_GROUP_BY_THREADS
PROP_FORWARD_STYLE,
PROP_GROUP_BY_THREADS,
PROP_REPLY_STYLE
};
#define STATE_KEY_GROUP_BY_THREADS "GroupByThreads"
@ -260,11 +262,23 @@ mail_paned_view_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_FORWARD_STYLE:
e_mail_reader_set_forward_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
case PROP_GROUP_BY_THREADS:
e_mail_reader_set_group_by_threads (
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
case PROP_REPLY_STYLE:
e_mail_reader_set_reply_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -277,12 +291,26 @@ mail_paned_view_get_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_FORWARD_STYLE:
g_value_set_enum (
value,
e_mail_reader_get_forward_style (
E_MAIL_READER (object)));
return;
case PROP_GROUP_BY_THREADS:
g_value_set_boolean (
value,
e_mail_reader_get_group_by_threads (
E_MAIL_READER (object)));
return;
case PROP_REPLY_STYLE:
g_value_set_enum (
value,
e_mail_reader_get_reply_style (
E_MAIL_READER (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -892,11 +920,23 @@ e_mail_paned_view_class_init (EMailPanedViewClass *class)
class->open_selected_mail = mail_paned_view_open_selected_mail;
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_FORWARD_STYLE,
"forward-style");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_GROUP_BY_THREADS,
"group-by-threads");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_REPLY_STYLE,
"reply-style");
}
static void

View File

@ -392,7 +392,7 @@ html_contains_nonwhitespace (const gchar *html,
void
e_mail_reader_reply_to_message (EMailReader *reader,
CamelMimeMessage *src_message,
gint reply_mode)
EMailReplyType reply_type)
{
EShell *shell;
EMailBackend *backend;
@ -401,6 +401,7 @@ e_mail_reader_reply_to_message (EMailReader *reader,
GtkWidget *message_list;
CamelMimeMessage *new_message;
CamelFolder *folder;
EMailReplyStyle reply_style;
EWebView *web_view;
struct _camel_header_raw *header;
const gchar *uid;
@ -417,6 +418,7 @@ e_mail_reader_reply_to_message (EMailReader *reader,
folder = e_mail_reader_get_folder (reader);
formatter = e_mail_reader_get_formatter (reader);
message_list = e_mail_reader_get_message_list (reader);
reply_style = e_mail_reader_get_reply_style (reader);
shell_backend = E_SHELL_BACKEND (backend);
shell = e_shell_backend_get_shell (shell_backend);
@ -469,7 +471,8 @@ e_mail_reader_reply_to_message (EMailReader *reader,
g_object_unref (src_message);
em_utils_reply_to_message (
shell, folder, uid, new_message, reply_mode, NULL);
shell, folder, uid, new_message,
reply_type, reply_style, NULL);
g_free (selection);
@ -478,7 +481,7 @@ e_mail_reader_reply_to_message (EMailReader *reader,
whole_message:
em_utils_reply_to_message (
shell, folder, uid, src_message,
reply_mode, EM_FORMAT (formatter));
reply_type, reply_style, EM_FORMAT (formatter));
}
void

View File

@ -49,7 +49,7 @@ void e_mail_reader_print (EMailReader *reader,
GtkPrintOperationAction action);
void e_mail_reader_reply_to_message (EMailReader *reader,
CamelMimeMessage *message,
gint reply_mode);
EMailReplyType reply_type);
void e_mail_reader_select_next_message
(EMailReader *reader,
gboolean or_else_previous);

View File

@ -40,6 +40,7 @@
#include "mail/e-mail-backend.h"
#include "mail/e-mail-browser.h"
#include "mail/e-mail-display.h"
#include "mail/e-mail-enumtypes.h"
#include "mail/e-mail-reader-utils.h"
#include "mail/em-composer-utils.h"
#include "mail/em-event.h"
@ -106,6 +107,8 @@ enum {
static gchar *default_xfer_messages_uri;
static GQuark quark_private;
static GQuark quark_forward_style;
static GQuark quark_reply_style;
static guint signals[LAST_SIGNAL];
G_DEFINE_INTERFACE (EMailReader, e_mail_reader, G_TYPE_OBJECT)
@ -601,7 +604,9 @@ action_mail_forward_cb (GtkAction *action,
shell = e_shell_backend_get_shell (shell_backend);
if (em_utils_ask_open_many (window, uids->len))
em_utils_forward_messages (shell, folder, uids, folder_uri);
em_utils_forward_messages (
shell, folder, uids, folder_uri,
e_mail_reader_get_forward_style (reader));
else
em_utils_uids_free (uids);
@ -632,7 +637,9 @@ action_mail_forward_attached_cb (GtkAction *action,
shell = e_shell_backend_get_shell (shell_backend);
if (em_utils_ask_open_many (window, uids->len))
em_utils_forward_attached (shell, folder, uids, folder_uri);
em_utils_forward_messages (
shell, folder, uids, folder_uri,
E_MAIL_FORWARD_STYLE_ATTACHED);
else
em_utils_uids_free (uids);
@ -663,7 +670,9 @@ action_mail_forward_inline_cb (GtkAction *action,
shell = e_shell_backend_get_shell (shell_backend);
if (em_utils_ask_open_many (window, uids->len))
em_utils_forward_inline (shell, folder, uids, folder_uri);
em_utils_forward_messages (
shell, folder, uids, folder_uri,
E_MAIL_FORWARD_STYLE_INLINE);
else
em_utils_uids_free (uids);
@ -694,7 +703,9 @@ action_mail_forward_quoted_cb (GtkAction *action,
shell = e_shell_backend_get_shell (shell_backend);
if (em_utils_ask_open_many (window, uids->len))
em_utils_forward_quoted (shell, folder, uids, folder_uri);
em_utils_forward_messages (
shell, folder, uids, folder_uri,
E_MAIL_FORWARD_STYLE_QUOTED);
else
em_utils_uids_free (uids);
@ -1118,7 +1129,7 @@ action_mail_reply_all_check (CamelFolder *folder,
EMailReader *reader = user_data;
CamelInternetAddress *to, *cc;
gint recip_count = 0;
gint mode = REPLY_MODE_ALL;
EMailReplyType type = E_MAIL_REPLY_TO_ALL;
if (!message)
return;
@ -1163,12 +1174,12 @@ action_mail_reply_all_check (CamelFolder *folder,
gtk_widget_destroy (dialog);
if (response == GTK_RESPONSE_NO)
mode = REPLY_MODE_SENDER;
type = E_MAIL_REPLY_TO_SENDER;
else if (response == GTK_RESPONSE_CANCEL)
return;
}
e_mail_reader_reply_to_message (reader, message, mode);
e_mail_reader_reply_to_message (reader, message, type);
check_close_browser_reader (reader);
}
@ -1218,13 +1229,13 @@ action_mail_reply_all_cb (GtkAction *action,
return;
}
e_mail_reader_reply_to_message (reader, NULL, REPLY_MODE_ALL);
e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_ALL);
check_close_browser_reader (reader);
}
static void
action_mail_reply_group_cb (GtkAction *action,
EMailReader *reader)
EMailReader *reader)
{
GConfClient *client;
gboolean reply_list;
@ -1239,7 +1250,8 @@ action_mail_reply_group_cb (GtkAction *action,
g_object_unref (client);
if (reply_list && (state & E_MAIL_READER_SELECTION_IS_MAILING_LIST)) {
e_mail_reader_reply_to_message (reader, NULL, REPLY_MODE_LIST);
e_mail_reader_reply_to_message (
reader, NULL, E_MAIL_REPLY_TO_LIST);
check_close_browser_reader (reader);
} else
action_mail_reply_all_cb (action, reader);
@ -1249,7 +1261,7 @@ static void
action_mail_reply_list_cb (GtkAction *action,
EMailReader *reader)
{
e_mail_reader_reply_to_message (reader, NULL, REPLY_MODE_LIST);
e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_LIST);
check_close_browser_reader (reader);
}
@ -1261,7 +1273,7 @@ action_mail_reply_sender_check (CamelFolder *folder,
{
EMailReader *reader = user_data;
GConfClient *client;
gint mode = REPLY_MODE_SENDER;
EMailReplyType type = E_MAIL_REPLY_TO_SENDER;
const gchar *key;
gboolean ask_ignore_list_reply_to;
gboolean ask_list_reply_to;
@ -1313,9 +1325,9 @@ action_mail_reply_sender_check (CamelFolder *folder,
gtk_widget_destroy (dialog);
if (response == GTK_RESPONSE_YES)
mode = REPLY_MODE_ALL;
type = E_MAIL_REPLY_TO_ALL;
else if (response == GTK_RESPONSE_OK)
mode = REPLY_MODE_LIST;
type = E_MAIL_REPLY_TO_LIST;
else if (response == GTK_RESPONSE_CANCEL)
goto exit;
@ -1363,14 +1375,14 @@ action_mail_reply_sender_check (CamelFolder *folder,
gtk_widget_destroy (dialog);
if (response == GTK_RESPONSE_NO)
mode = REPLY_MODE_FROM;
type = E_MAIL_REPLY_TO_FROM;
else if (response == GTK_RESPONSE_OK)
mode = REPLY_MODE_LIST;
type = E_MAIL_REPLY_TO_LIST;
else if (response == GTK_RESPONSE_CANCEL)
goto exit;
}
e_mail_reader_reply_to_message (reader, message, mode);
e_mail_reader_reply_to_message (reader, message, type);
check_close_browser_reader (reader);
exit:
@ -1426,7 +1438,7 @@ action_mail_reply_sender_cb (GtkAction *action,
action_mail_reply_sender_check (NULL, NULL, message, reader);
return;
}
e_mail_reader_reply_to_message (reader, NULL, REPLY_MODE_SENDER);
e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_SENDER);
check_close_browser_reader (reader);
}
@ -3189,7 +3201,17 @@ mail_reader_init_charset_actions (EMailReader *reader)
static void
e_mail_reader_default_init (EMailReaderInterface *interface)
{
quark_private = g_quark_from_static_string ("EMailReader-private");
quark_private = g_quark_from_static_string ("e-mail-reader-private");
/* Forward and reply styles are stored outside of the private
* structure as a workaround for EMailShellContent, which loads
* extensions long before the private structure is initialized,
* and one of those extensions binds our "forward-style" and
* "reply-style" properties to EShellSettings properties. */
quark_forward_style =
g_quark_from_static_string ("e-mail-reader-forward-style");
quark_reply_style =
g_quark_from_static_string ("e-mail-reader-reply-style");
interface->get_selected_uids = mail_reader_get_selected_uids;
interface->get_folder = mail_reader_get_folder;
@ -3200,6 +3222,16 @@ e_mail_reader_default_init (EMailReaderInterface *interface)
interface->open_selected_mail = e_mail_reader_open_selected;
interface->update_actions = mail_reader_update_actions;
g_object_interface_install_property (
interface,
g_param_spec_enum (
"forward-style",
"Forward Style",
"How to forward messages",
E_TYPE_MAIL_FORWARD_STYLE,
E_MAIL_FORWARD_STYLE_ATTACHED,
G_PARAM_READWRITE));
g_object_interface_install_property (
interface,
g_param_spec_boolean (
@ -3209,6 +3241,16 @@ e_mail_reader_default_init (EMailReaderInterface *interface)
FALSE,
G_PARAM_READWRITE));
g_object_interface_install_property (
interface,
g_param_spec_enum (
"reply-style",
"Reply Style",
"How to reply to messages",
E_TYPE_MAIL_REPLY_STYLE,
E_MAIL_REPLY_STYLE_QUOTED,
G_PARAM_READWRITE));
signals[CHANGED] = g_signal_new (
"changed",
G_OBJECT_CLASS_TYPE (interface),
@ -3913,6 +3955,29 @@ e_mail_reader_open_selected_mail (EMailReader *reader)
return interface->open_selected_mail (reader);
}
EMailForwardStyle
e_mail_reader_get_forward_style (EMailReader *reader)
{
g_return_val_if_fail (E_IS_MAIL_READER (reader), 0);
return (EMailForwardStyle)
GPOINTER_TO_INT (g_object_get_qdata (
G_OBJECT (reader), quark_forward_style));
}
void
e_mail_reader_set_forward_style (EMailReader *reader,
EMailForwardStyle style)
{
g_return_if_fail (E_IS_MAIL_READER (reader));
g_object_set_qdata (
G_OBJECT (reader), quark_forward_style,
GINT_TO_POINTER (style));
g_object_notify (G_OBJECT (reader), "forward-style");
}
gboolean
e_mail_reader_get_group_by_threads (EMailReader *reader)
{
@ -3949,6 +4014,29 @@ e_mail_reader_set_group_by_threads (EMailReader *reader,
g_object_notify (G_OBJECT (reader), "group-by-threads");
}
EMailReplyStyle
e_mail_reader_get_reply_style (EMailReader *reader)
{
g_return_val_if_fail (E_IS_MAIL_READER (reader), 0);
return (EMailReplyStyle)
GPOINTER_TO_INT (g_object_get_qdata (
G_OBJECT (reader), quark_reply_style));
}
void
e_mail_reader_set_reply_style (EMailReader *reader,
EMailReplyStyle style)
{
g_return_if_fail (E_IS_MAIL_READER (reader));
g_object_set_qdata (
G_OBJECT (reader), quark_reply_style,
GINT_TO_POINTER (style));
g_object_notify (G_OBJECT (reader), "reply-style");
}
void
e_mail_reader_create_charset_menu (EMailReader *reader,
GtkUIManager *ui_manager,

View File

@ -139,11 +139,18 @@ void e_mail_reader_set_folder_uri (EMailReader *reader,
const gchar *folder_uri);
void e_mail_reader_set_message (EMailReader *reader,
const gchar *uid);
EMailForwardStyle
e_mail_reader_get_forward_style (EMailReader *reader);
void e_mail_reader_set_forward_style (EMailReader *reader,
EMailForwardStyle style);
gboolean e_mail_reader_get_group_by_threads
(EMailReader *reader);
void e_mail_reader_set_group_by_threads
(EMailReader *reader,
gboolean group_by_threads);
EMailReplyStyle e_mail_reader_get_reply_style (EMailReader *reader);
void e_mail_reader_set_reply_style (EMailReader *reader,
EMailReplyStyle style);
void e_mail_reader_create_charset_menu
(EMailReader *reader,
GtkUIManager *ui_manager,

View File

@ -71,6 +71,7 @@
#define GCONF_KEY_TEMPLATE_PLACEHOLDERS "/apps/evolution/mail/template_placeholders"
typedef struct _AsyncContext AsyncContext;
typedef struct _ForwardData ForwardData;
struct _AsyncContext {
CamelMimeMessage *message;
@ -80,6 +81,14 @@ struct _AsyncContext {
gchar *message_uid;
};
struct _ForwardData {
EShell *shell;
CamelFolder *folder;
GPtrArray *uids;
gchar *from_uri;
EMailForwardStyle style;
};
static void
async_context_free (AsyncContext *context)
{
@ -98,6 +107,23 @@ async_context_free (AsyncContext *context)
g_slice_free (AsyncContext, context);
}
static void
forward_data_free (ForwardData *data)
{
if (data->shell != NULL)
g_object_unref (data->shell);
if (data->folder != NULL)
g_object_unref (data->folder);
if (data->uids != NULL)
em_utils_uids_free (data->uids);
g_free (data->from_uri);
g_slice_free (ForwardData, data);
}
static gboolean
ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EDestination **recipients)
{
@ -1194,15 +1220,6 @@ emu_update_composers_security (EMsgComposer *composer, guint32 validity_found)
}
}
/* Forwarding messages... */
struct forward_attached_data
{
EShell *shell;
CamelFolder *folder;
GPtrArray *uids;
gchar *from_uri;
};
static void
real_update_forwarded_flag (gpointer uid, gpointer folder)
{
@ -1213,44 +1230,40 @@ real_update_forwarded_flag (gpointer uid, gpointer folder)
}
static void
update_forwarded_flags_cb (EMsgComposer *composer, gpointer user_data)
update_forwarded_flags_cb (EMsgComposer *composer,
ForwardData *data)
{
struct forward_attached_data *fad = (struct forward_attached_data *) user_data;
if (fad && fad->uids && fad->folder)
g_ptr_array_foreach (fad->uids, real_update_forwarded_flag, fad->folder);
if (data && data->uids && data->folder)
g_ptr_array_foreach (
data->uids, real_update_forwarded_flag, data->folder);
}
static void
composer_destroy_fad_cb (gpointer user_data, GObject *deadbeef)
setup_forward_attached_callbacks (EMsgComposer *composer,
CamelFolder *folder,
GPtrArray *uids)
{
struct forward_attached_data *fad = (struct forward_attached_data*) user_data;
if (fad) {
g_object_unref (fad->folder);
em_utils_uids_free (fad->uids);
g_free (fad);
}
}
static void
setup_forward_attached_callbacks (EMsgComposer *composer, CamelFolder *folder, GPtrArray *uids)
{
struct forward_attached_data *fad;
ForwardData *data;
if (!composer || !folder || !uids || !uids->len)
return;
g_object_ref (folder);
fad = g_new0 (struct forward_attached_data, 1);
fad->folder = folder;
fad->uids = em_utils_uids_copy (uids);
data = g_slice_new0 (ForwardData);
data->folder = g_object_ref (folder);
data->uids = em_utils_uids_copy (uids);
g_signal_connect (composer, "send", G_CALLBACK (update_forwarded_flags_cb), fad);
g_signal_connect (composer, "save-draft", G_CALLBACK (update_forwarded_flags_cb), fad);
g_signal_connect (
composer, "send",
G_CALLBACK (update_forwarded_flags_cb), data);
g_signal_connect (
composer, "save-draft",
G_CALLBACK (update_forwarded_flags_cb), data);
g_object_weak_ref ((GObject *) composer, (GWeakNotify) composer_destroy_fad_cb, fad);
g_object_set_data_full (
G_OBJECT (composer), "forward-data", data,
(GDestroyNotify) forward_data_free);
}
static EMsgComposer *
@ -1287,49 +1300,14 @@ forward_attached_cb (CamelFolder *folder,
gchar *subject,
gpointer user_data)
{
struct forward_attached_data *fad = user_data;
ForwardData *data = user_data;
if (part)
forward_attached (
fad->shell, folder, fad->uids,
messages, part, subject, fad->from_uri);
data->shell, folder, data->uids,
messages, part, subject, data->from_uri);
g_object_unref (fad->shell);
g_free (fad->from_uri);
g_free (fad);
}
/**
* em_utils_forward_attached:
* @shell: an #EShell
* @folder: folder containing messages to forward
* @uids: uids of messages to forward
* @from_uri: from folder uri
*
* If there is more than a single message in @uids, a multipart/digest
* will be constructed and attached to a new composer window preset
* with the appropriate header defaults for forwarding the first
* message in the list. If only one message is to be forwarded, it is
* forwarded as a simple message/rfc822 attachment.
**/
void
em_utils_forward_attached (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri)
{
struct forward_attached_data *fad;
g_return_if_fail (E_IS_SHELL (shell));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
fad = g_new0 (struct forward_attached_data, 1);
fad->shell = g_object_ref (shell);
fad->uids = uids;
fad->from_uri = g_strdup (from_uri);
mail_build_attachment (folder, uids, forward_attached_cb, fad);
forward_data_free (data);
}
static EMsgComposer *
@ -1393,133 +1371,33 @@ forward_non_attached (EShell *shell,
return composer;
}
typedef struct {
EShell *shell;
gchar *from_uri;
} ForwardData;
static void
forward_inline_cb (CamelFolder *folder,
GPtrArray *uids,
GPtrArray *messages,
gpointer user_data)
{
ForwardData *data = user_data;
forward_non_attached (
data->shell, folder, uids, messages,
E_MAIL_FORWARD_STYLE_INLINE, data->from_uri);
g_free (data->from_uri);
g_object_unref (data->shell);
g_slice_free (ForwardData, data);
}
/**
* em_utils_forward_inline:
* @shell: an #EShell
* @folder: folder containing messages to forward
* @uids: uids of messages to forward
* @from_uri: from folder/account uri
*
* Forwards each message in the 'inline' form, each in its own composer window.
**/
void
em_utils_forward_inline (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri)
{
ForwardData *data;
g_return_if_fail (E_IS_SHELL (shell));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
data = g_slice_new (ForwardData);
data->shell = g_object_ref (shell);
data->from_uri = g_strdup (from_uri);
mail_get_messages (folder, uids, forward_inline_cb, data);
}
static void
forward_quoted_cb (CamelFolder *folder,
GPtrArray *uids,
GPtrArray *messages,
gpointer user_data)
{
ForwardData *data = user_data;
forward_non_attached (
data->shell, folder, uids, messages,
E_MAIL_FORWARD_STYLE_QUOTED, data->from_uri);
g_free (data->from_uri);
g_object_unref (data->shell);
g_slice_free (ForwardData, data);
}
/**
* em_utils_forward_quoted:
* @shell: an #EShell
* @folder: folder containing messages to forward
* @uids: uids of messages to forward
* @from_uri: from folder uri
*
* Forwards each message in the 'quoted' form (each line starting with
* a "> "), each in its own composer window.
**/
void
em_utils_forward_quoted (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri)
{
ForwardData *data;
g_return_if_fail (E_IS_SHELL (shell));
g_return_if_fail (CAMEL_IS_FOLDER (folder));
g_return_if_fail (uids != NULL);
data = g_slice_new (ForwardData);
data->shell = g_object_ref (shell);
data->from_uri = g_strdup (from_uri);
mail_get_messages (folder, uids, forward_quoted_cb, data);
}
/**
* em_utils_forward_message:
* @shell: an #EShell
* @message: message to be forwarded
* @from_uri: from folder uri
* @style: the forward style to use
*
* Forwards a message in the user's configured default style.
* Forwards a message in the given style. See em_utils_forward_messages()
* for more details about forwarding styles.
**/
EMsgComposer *
em_utils_forward_message (EShell *shell,
CamelMimeMessage *message,
const gchar *from_uri)
const gchar *from_uri,
EMailForwardStyle style)
{
GPtrArray *messages;
CamelMimePart *part;
GConfClient *client;
const gchar *key;
gchar *subject;
EMailForwardStyle style;
EMsgComposer *composer = NULL;
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), NULL);
messages = g_ptr_array_new ();
g_ptr_array_add (messages, message);
client = gconf_client_get_default ();
key = "/apps/evolution/mail/format/forward_style";
style = gconf_client_get_int (client, key, NULL);
g_object_unref (client);
switch (style) {
case E_MAIL_FORWARD_STYLE_ATTACHED:
default:
@ -1552,43 +1430,75 @@ em_utils_forward_message (EShell *shell,
return composer;
}
static void
forward_got_messages_cb (CamelFolder *folder,
GPtrArray *uids,
GPtrArray *messages,
gpointer user_data)
{
ForwardData *data = user_data;
forward_non_attached (
data->shell, folder, uids, messages,
data->style, data->from_uri);
forward_data_free (data);
}
/**
* em_utils_forward_messages:
* @shell: an #EShell
* @folder: folder containing messages to forward
* @uids: uids of messages to forward
* @style: the forward style to use
*
* Forwards a group of messages in the user's configured default
* style.
* Forwards a group of messages in the given style.
*
* If @style is #E_MAIL_FORWARD_STYLE_ATTACHED, the new message is
* created as follows. If there is more than a single message in @uids,
* a multipart/digest will be constructed and attached to a new composer
* window preset with the appropriate header defaults for forwarding the
* first message in the list. If only one message is to be forwarded,
* it is forwarded as a simple message/rfc822 attachment.
*
* If @style is #E_MAIL_FORWARD_STYLE_INLINE, each message is forwarded
* in its own composer window in 'inline' form.
*
* If @style is #E_MAIL_FORWARD_STYLE_QUOTED, each message is forwarded
* in its own composer window in 'quoted' form (each line starting with
* a "> ").
**/
void
em_utils_forward_messages (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri)
const gchar *from_uri,
EMailForwardStyle style)
{
GConfClient *client;
const gchar *key;
EMailForwardStyle style;
ForwardData *data;
g_return_if_fail (E_IS_SHELL (shell));
client = gconf_client_get_default ();
key = "/apps/evolution/mail/format/forward_style";
style = gconf_client_get_int (client, key, NULL);
g_object_unref (client);
data = g_slice_new0 (ForwardData);
data->shell = g_object_ref (shell);
data->uids = em_utils_uids_copy (uids);
data->from_uri = g_strdup (from_uri);
data->style = style;
switch (style) {
case E_MAIL_FORWARD_STYLE_ATTACHED:
default:
em_utils_forward_attached (shell, folder, uids, from_uri);
mail_build_attachment (
folder, uids, forward_attached_cb, data);
break;
case E_MAIL_FORWARD_STYLE_INLINE:
em_utils_forward_inline (shell, folder, uids, from_uri);
break;
case E_MAIL_FORWARD_STYLE_QUOTED:
em_utils_forward_quoted (shell, folder, uids, from_uri);
mail_get_messages (
folder, uids, forward_got_messages_cb, data);
break;
default:
g_return_if_reached ();
}
}
@ -2457,7 +2367,10 @@ attribution_format (const gchar *format, CamelMimeMessage *message)
}
static void
composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *source)
composer_set_body (EMsgComposer *composer,
CamelMimeMessage *message,
EMailReplyStyle style,
EMFormat *source)
{
gchar *text, *credits;
CamelMimePart *part;
@ -2466,16 +2379,12 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *
gboolean start_bottom;
guint32 validity_found = 0;
const gchar *key;
EMailReplyStyle style;
client = gconf_client_get_default ();
key = "/apps/evolution/mail/composer/reply_start_bottom";
start_bottom = gconf_client_get_bool (client, key, NULL);
key = "/apps/evolution/mail/format/reply_style";
style = gconf_client_get_int (client, key, NULL);
switch (style) {
case E_MAIL_REPLY_STYLE_DO_NOT_QUOTE:
/* do nothing */
@ -2527,7 +2436,8 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *
struct _reply_data {
EShell *shell;
EMFormat *source;
gint mode;
EMailReplyType reply_type;
EMailReplyStyle reply_style;
};
gchar *
@ -2557,7 +2467,8 @@ reply_to_message (CamelFolder *folder,
an extra ref for em_utils_reply_to_message () to drop. */
g_object_ref (message);
em_utils_reply_to_message (
rd->shell, folder, uid, message, rd->mode, rd->source);
rd->shell, folder, uid, message,
rd->reply_type, rd->reply_style, rd->source);
}
if (rd->shell != NULL)
@ -2575,7 +2486,8 @@ reply_to_message (CamelFolder *folder,
* @folder: optional folder
* @uid: optional uid
* @message: message to reply to, optional
* @mode: reply mode
* @type: the type of reply to create
* @style: the reply style to use
* @source: source to inherit view settings from
*
* Creates a new composer ready to reply to @message.
@ -2592,7 +2504,8 @@ em_utils_reply_to_message (EShell *shell,
CamelFolder *folder,
const gchar *uid,
CamelMimeMessage *message,
gint mode,
EMailReplyType type,
EMailReplyStyle style,
EMFormat *source)
{
CamelInternetAddress *to, *cc;
@ -2607,7 +2520,8 @@ em_utils_reply_to_message (EShell *shell,
struct _reply_data *rd = g_malloc0 (sizeof (*rd));
rd->shell = g_object_ref (shell);
rd->mode = mode;
rd->reply_type = type;
rd->reply_style = style;
rd->source = source;
if (rd->source)
g_object_ref (rd->source);
@ -2626,25 +2540,25 @@ em_utils_reply_to_message (EShell *shell,
account = em_utils_guess_account_with_recipients (message, folder);
flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_SEEN;
switch (mode) {
case REPLY_MODE_FROM:
switch (type) {
case E_MAIL_REPLY_TO_FROM:
if (folder)
postto = camel_nntp_address_new ();
get_reply_from (message, to, postto);
break;
case REPLY_MODE_SENDER:
case E_MAIL_REPLY_TO_SENDER:
if (folder)
postto = camel_nntp_address_new ();
get_reply_sender (message, to, postto);
break;
case REPLY_MODE_LIST:
case E_MAIL_REPLY_TO_LIST:
flags |= CAMEL_MESSAGE_ANSWERED_ALL;
if (get_reply_list (message, to))
break;
/* falls through */
case REPLY_MODE_ALL:
case E_MAIL_REPLY_TO_ALL:
flags |= CAMEL_MESSAGE_ANSWERED_ALL;
if (folder)
postto = camel_nntp_address_new ();
@ -2662,7 +2576,7 @@ em_utils_reply_to_message (EShell *shell,
g_object_unref (to);
g_object_unref (cc);
composer_set_body (composer, message, source);
composer_set_body (composer, message, style, source);
g_object_unref (message);

View File

@ -21,10 +21,11 @@
*
*/
#ifndef __EM_COMPOSER_UTILS_H__
#define __EM_COMPOSER_UTILS_H__
#ifndef EM_COMPOSER_UTILS_H
#define EM_COMPOSER_UTILS_H
#include <em-format/em-format.h>
#include <mail/e-mail-enums.h>
#include <mail/e-mail-session.h>
#include <composer/e-msg-composer.h>
@ -43,25 +44,15 @@ void em_utils_edit_messages (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
gboolean replace);
void em_utils_forward_attached (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri);
void em_utils_forward_inline (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri);
void em_utils_forward_quoted (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri);
EMsgComposer * em_utils_forward_message (EShell *shell,
CamelMimeMessage *msg,
const gchar *from_uri);
const gchar *from_uri,
EMailForwardStyle style);
void em_utils_forward_messages (EShell *shell,
CamelFolder *folder,
GPtrArray *uids,
const gchar *from_uri);
const gchar *from_uri,
EMailForwardStyle style);
void em_utils_redirect_message (EShell *shell,
CamelMimeMessage *message);
void em_utils_redirect_message_by_uid (EShell *shell,
@ -74,23 +65,28 @@ void em_utils_handle_receipt (EMailSession *session,
void em_utils_send_receipt (EMailSession *session,
CamelFolder *folder,
CamelMimeMessage *message);
enum {
REPLY_MODE_SENDER, /* Reply-To?:From */
REPLY_MODE_FROM,
REPLY_MODE_ALL,
REPLY_MODE_LIST
};
gchar *em_utils_construct_composer_text (CamelMimeMessage *message, EMFormat *source);
gboolean em_utils_is_munged_list_message (CamelMimeMessage *message);
void em_utils_get_reply_sender (CamelMimeMessage *message, CamelInternetAddress *to, CamelNNTPAddress *postto);
void em_utils_get_reply_all (CamelMimeMessage *message, CamelInternetAddress *to, CamelInternetAddress *cc, CamelNNTPAddress *postto);
EMsgComposer * em_utils_reply_to_message (EShell *shell, CamelFolder *, const gchar *uid, CamelMimeMessage *message, gint mode, EMFormat *source);
EDestination ** em_utils_camel_address_to_destination (CamelInternetAddress *iaddr);
void em_configure_new_composer (struct _EMsgComposer *composer);
gchar * em_utils_construct_composer_text
(CamelMimeMessage *message,
EMFormat *source);
gboolean em_utils_is_munged_list_message (CamelMimeMessage *message);
void em_utils_get_reply_sender (CamelMimeMessage *message,
CamelInternetAddress *to,
CamelNNTPAddress *postto);
void em_utils_get_reply_all (CamelMimeMessage *message,
CamelInternetAddress *to,
CamelInternetAddress *cc,
CamelNNTPAddress *postto);
EMsgComposer * em_utils_reply_to_message (EShell *shell,
CamelFolder *folder,
const gchar *uid,
CamelMimeMessage *message,
EMailReplyType type,
EMailReplyStyle style,
EMFormat *source);
EDestination ** em_utils_camel_address_to_destination
(CamelInternetAddress *iaddr);
void em_configure_new_composer (EMsgComposer *composer);
G_END_DECLS
#endif /* __EM_COMPOSER_UTILS_H__ */
#endif /* EM_COMPOSER_UTILS_H */

View File

@ -21,6 +21,8 @@ libevolution_module_mail_la_SOURCES = \
e-mail-config-format-html.h \
e-mail-config-hook.c \
e-mail-config-hook.h \
e-mail-config-reader.c \
e-mail-config-reader.h \
e-mail-config-web-view.c \
e-mail-config-web-view.h \
e-mail-event-hook.c \

View File

@ -61,10 +61,13 @@ mail_attachment_handler_forward (GtkAction *action,
EAttachmentHandler *handler)
{
EMailAttachmentHandlerPrivate *priv;
EShellSettings *shell_settings;
EAttachment *attachment;
EAttachmentView *view;
CamelMimePart *mime_part;
CamelDataWrapper *wrapper;
EMailForwardStyle style;
const gchar *property_name;
GList *selected;
view = e_attachment_handler_get_view (handler);
@ -77,8 +80,12 @@ mail_attachment_handler_forward (GtkAction *action,
mime_part = e_attachment_get_mime_part (attachment);
wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
property_name = "mail-forward-style";
shell_settings = e_shell_get_shell_settings (priv->shell);
style = e_shell_settings_get_int (shell_settings, property_name);
em_utils_forward_message (
priv->shell, CAMEL_MIME_MESSAGE (wrapper), NULL);
priv->shell, CAMEL_MIME_MESSAGE (wrapper), NULL, style);
g_list_foreach (selected, (GFunc) g_object_unref, NULL);
g_list_free (selected);
@ -89,10 +96,13 @@ mail_attachment_handler_reply_all (GtkAction *action,
EAttachmentHandler *handler)
{
EMailAttachmentHandlerPrivate *priv;
EShellSettings *shell_settings;
EAttachment *attachment;
EAttachmentView *view;
CamelMimePart *mime_part;
CamelDataWrapper *wrapper;
EMailReplyStyle style;
const gchar *property_name;
GList *selected;
view = e_attachment_handler_get_view (handler);
@ -105,9 +115,13 @@ mail_attachment_handler_reply_all (GtkAction *action,
mime_part = e_attachment_get_mime_part (attachment);
wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
property_name = "mail-reply-style";
shell_settings = e_shell_get_shell_settings (priv->shell);
style = e_shell_settings_get_int (shell_settings, property_name);
em_utils_reply_to_message (
priv->shell, NULL, NULL, CAMEL_MIME_MESSAGE (wrapper),
REPLY_MODE_ALL, NULL);
E_MAIL_REPLY_TO_ALL, style, NULL);
g_list_foreach (selected, (GFunc) g_object_unref, NULL);
g_list_free (selected);
@ -118,10 +132,13 @@ mail_attachment_handler_reply_sender (GtkAction *action,
EAttachmentHandler *handler)
{
EMailAttachmentHandlerPrivate *priv;
EShellSettings *shell_settings;
EAttachment *attachment;
EAttachmentView *view;
CamelMimePart *mime_part;
CamelDataWrapper *wrapper;
EMailForwardStyle style;
const gchar *property_name;
GList *selected;
view = e_attachment_handler_get_view (handler);
@ -134,9 +151,13 @@ mail_attachment_handler_reply_sender (GtkAction *action,
mime_part = e_attachment_get_mime_part (attachment);
wrapper = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
property_name = "mail-reply-style";
shell_settings = e_shell_get_shell_settings (priv->shell);
style = e_shell_settings_get_int (shell_settings, property_name);
em_utils_reply_to_message (
priv->shell, NULL, NULL, CAMEL_MIME_MESSAGE (wrapper),
REPLY_MODE_SENDER, NULL);
E_MAIL_REPLY_TO_SENDER, style, NULL);
g_list_foreach (selected, (GFunc) g_object_unref, NULL);
g_list_free (selected);

View File

@ -0,0 +1,80 @@
/*
* e-mail-config-reader.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
*/
#include "e-mail-config-reader.h"
#include <shell/e-shell.h>
#include <e-util/e-extension.h>
#include <mail/e-mail-reader.h>
static void
mail_config_reader_constructed (GObject *object)
{
EExtension *extension;
EExtensible *extensible;
EShellSettings *shell_settings;
EShell *shell;
extension = E_EXTENSION (object);
extensible = e_extension_get_extensible (extension);
shell = e_shell_get_default ();
shell_settings = e_shell_get_shell_settings (shell);
g_object_bind_property (
shell_settings, "mail-forward-style",
extensible, "forward-style",
G_BINDING_SYNC_CREATE);
g_object_bind_property (
shell_settings, "mail-reply-style",
extensible, "reply-style",
G_BINDING_SYNC_CREATE);
}
static void
mail_config_reader_class_init (EExtensionClass *class)
{
GObjectClass *object_class;
object_class = G_OBJECT_CLASS (class);
object_class->constructed = mail_config_reader_constructed;
class->extensible_type = E_TYPE_MAIL_READER;
}
void
e_mail_config_reader_register_type (GTypeModule *type_module)
{
static const GTypeInfo type_info = {
sizeof (EExtensionClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) mail_config_reader_class_init,
(GClassFinalizeFunc) NULL,
NULL, /* class_data */
sizeof (EExtension),
0, /* n_preallocs */
(GInstanceInitFunc) NULL,
NULL /* value_table */
};
g_type_module_register_type (
type_module, E_TYPE_EXTENSION,
"EMailConfigReader", &type_info, 0);
}

View File

@ -0,0 +1,30 @@
/*
* e-mail-config-reader.h
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
*/
#ifndef E_MAIL_CONFIG_READER_H
#define E_MAIL_CONFIG_READER_H
#include <glib-object.h>
G_BEGIN_DECLS
void e_mail_config_reader_register_type (GTypeModule *type_module);
G_END_DECLS
#endif /* E_MAIL_CONFIG_READER_H */

View File

@ -236,6 +236,7 @@ mail_shell_backend_handle_email_uri_cb (gchar *folder_uri,
gpointer user_data)
{
EShellBackend *shell_backend = user_data;
EShellSettings *shell_settings;
EMailBackend *backend;
CamelURL *url = user_data;
EShell *shell;
@ -245,6 +246,7 @@ mail_shell_backend_handle_email_uri_cb (gchar *folder_uri,
backend = E_MAIL_BACKEND (shell_backend);
shell = e_shell_backend_get_shell (shell_backend);
shell_settings = e_shell_get_shell_settings (shell);
if (folder == NULL) {
g_warning ("Could not open folder '%s'", folder_uri);
@ -256,36 +258,42 @@ mail_shell_backend_handle_email_uri_cb (gchar *folder_uri,
uid = camel_url_get_param (url, "uid");
if (reply != NULL) {
gint mode;
EMailReplyType reply_type;
EMailReplyStyle reply_style;
if (g_strcmp0 (reply, "all") == 0)
mode = REPLY_MODE_ALL;
reply_type = E_MAIL_REPLY_TO_ALL;
else if (g_strcmp0 (reply, "list") == 0)
mode = REPLY_MODE_LIST;
reply_type = E_MAIL_REPLY_TO_LIST;
else
mode = REPLY_MODE_SENDER;
reply_type = E_MAIL_REPLY_TO_SENDER;
reply_style = e_shell_settings_get_int (
shell_settings, "mail-reply-style");
em_utils_reply_to_message (
shell, folder, uid, NULL, mode, NULL);
shell, folder, uid, NULL,
reply_type, reply_style, NULL);
} else if (forward != NULL) {
EMailForwardStyle forward_style;
GPtrArray *uids;
uids = g_ptr_array_new ();
g_ptr_array_add (uids, g_strdup (uid));
if (g_strcmp0 (forward, "attached") == 0)
em_utils_forward_attached (
shell, folder, uids, folder_uri);
forward_style = E_MAIL_FORWARD_STYLE_ATTACHED;
else if (g_strcmp0 (forward, "inline") == 0)
em_utils_forward_inline (
shell, folder, uids, folder_uri);
forward_style = E_MAIL_FORWARD_STYLE_INLINE;
else if (g_strcmp0 (forward, "quoted") == 0)
em_utils_forward_quoted (
shell, folder, uids, folder_uri);
forward_style = E_MAIL_FORWARD_STYLE_QUOTED;
else
em_utils_forward_messages (
shell, folder, uids, folder_uri);
forward_style = e_shell_settings_get_int (
shell_settings, "mail-forward-style");
em_utils_forward_messages (
shell, folder, uids, folder_uri, forward_style);
} else {
GtkWidget *browser;

View File

@ -53,21 +53,25 @@ struct _EMailShellContentPrivate {
enum {
PROP_0,
PROP_FORWARD_STYLE,
PROP_GROUP_BY_THREADS,
PROP_MAIL_VIEW
PROP_MAIL_VIEW,
PROP_REPLY_STYLE
};
static gpointer parent_class;
static GType mail_shell_content_type;
static void
reconnect_changed_event (EMailReader *child, EMailReader *parent)
reconnect_changed_event (EMailReader *child,
EMailReader *parent)
{
g_signal_emit_by_name (parent, "changed");
}
static void
reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent)
reconnect_folder_loaded_event (EMailReader *child,
EMailReader *parent)
{
g_signal_emit_by_name (parent, "folder-loaded");
}
@ -88,11 +92,23 @@ mail_shell_content_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_FORWARD_STYLE:
e_mail_reader_set_forward_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
case PROP_GROUP_BY_THREADS:
e_mail_reader_set_group_by_threads (
E_MAIL_READER (object),
g_value_get_boolean (value));
return;
case PROP_REPLY_STYLE:
e_mail_reader_set_reply_style (
E_MAIL_READER (object),
g_value_get_enum (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -105,6 +121,12 @@ mail_shell_content_get_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_FORWARD_STYLE:
g_value_set_enum (
value, e_mail_reader_get_forward_style (
E_MAIL_READER (object)));
return;
case PROP_GROUP_BY_THREADS:
g_value_set_boolean (
value, e_mail_reader_get_group_by_threads (
@ -116,6 +138,12 @@ mail_shell_content_get_property (GObject *object,
value, e_mail_shell_content_get_mail_view (
E_MAIL_SHELL_CONTENT (object)));
return;
case PROP_REPLY_STYLE:
g_value_set_enum (
value, e_mail_reader_get_reply_style (
E_MAIL_READER (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -181,7 +209,6 @@ mail_shell_content_constructed (GObject *object)
g_signal_connect (
widget, "folder-loaded",
G_CALLBACK (reconnect_folder_loaded_event), object);
}
static guint32
@ -375,6 +402,13 @@ mail_shell_content_class_init (EMailShellContentClass *class)
shell_content_class->check_state = mail_shell_content_check_state;
shell_content_class->focus_search_results = mail_shell_content_focus_search_results;
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_FORWARD_STYLE,
"forward-style");
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_GROUP_BY_THREADS,
@ -389,6 +423,12 @@ mail_shell_content_class_init (EMailShellContentClass *class)
NULL,
E_TYPE_MAIL_VIEW,
G_PARAM_READABLE));
/* Inherited from EMailReader */
g_object_class_override_property (
object_class,
PROP_REPLY_STYLE,
"reply-style");
}
static void

View File

@ -144,7 +144,7 @@ e_mail_shell_settings_init (EShellBackend *shell_backend)
"mail-force-message-limit",
"/apps/evolution/mail/display/force_message_limit");
/* This value corresponds to MailConfigForwardStyle enum. */
/* This value corresponds to the EMailForwardStyle enum. */
e_shell_settings_install_property_for_key (
"mail-forward-style",
"/apps/evolution/mail/format/forward_style");
@ -195,7 +195,7 @@ e_mail_shell_settings_init (EShellBackend *shell_backend)
"mail-prompt-delete-in-vfolder",
"/apps/evolution/mail/prompts/delete_in_vfolder");
/* This value corresponds to MailConfigReplyStyle enum,
/* This value corresponds to the EMailReplyStyle enum,
* but the ordering of the combo box items in preferences
* has changed. We use transformation functions there. */
e_shell_settings_install_property_for_key (

View File

@ -31,6 +31,7 @@
#include "e-mail-shell-view.h"
#include "e-mail-config-format-html.h"
#include "e-mail-config-reader.h"
#include "e-mail-config-web-view.h"
/* Module Entry Points */
@ -55,6 +56,7 @@ e_module_load (GTypeModule *type_module)
e_mail_shell_view_register_type (type_module);
e_mail_config_format_html_register_type (type_module);
e_mail_config_reader_register_type (type_module);
e_mail_config_web_view_register_type (type_module);
}