aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer.c
diff options
context:
space:
mode:
authornobody <nobody@localhost>2004-12-07 06:14:38 +0800
committernobody <nobody@localhost>2004-12-07 06:14:38 +0800
commitb52ad770d4d6f8c925fa53ada8f023c3dfeae2e3 (patch)
tree4b7a3ea0625ec147eeede941ccf4d0c279efcc55 /composer/e-msg-composer.c
parent6a691aa4e5648cc9dffb5df69e5062c7e195e406 (diff)
downloadgsoc2013-evolution-EVOLUTION_2_0_3.tar.gz
gsoc2013-evolution-EVOLUTION_2_0_3.tar.zst
gsoc2013-evolution-EVOLUTION_2_0_3.zip
This commit was manufactured by cvs2svn to create tagEVOLUTION_2_0_3
'EVOLUTION_2_0_3'. svn path=/tags/EVOLUTION_2_0_3/; revision=28076
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r--composer/e-msg-composer.c225
1 files changed, 29 insertions, 196 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 9d0c6e7fa6..5012637c67 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -70,7 +70,6 @@
#include <gconf/gconf-client.h>
#include <libgnome/gnome-exec.h>
-#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-uidefs.h>
#include <libgnomeui/gnome-window-icon.h>
@@ -86,7 +85,7 @@
#include <glade/glade.h>
-#include <libedataserver/e-iconv.h>
+#include <gal/util/e-iconv.h>
#include <gal/e-text/e-entry.h>
#include "e-util/e-dialog-utils.h"
@@ -117,7 +116,6 @@
#include "mail/mail-ops.h"
#include "mail/mail-mt.h"
#include "mail/mail-session.h"
-#include "mail/em-popup.h"
#include "e-msg-composer.h"
#include "e-msg-composer-attachment-bar.h"
@@ -130,7 +128,7 @@
#include "Editor.h"
#include "listener.h"
-#define GNOME_GTKHTML_EDITOR_CONTROL_ID "OAFIID:GNOME_GtkHTML_Editor:" GTKHTML_API_VERSION
+#define GNOME_GTKHTML_EDITOR_CONTROL_ID "OAFIID:GNOME_GtkHTML_Editor:3.1"
#define d(x) x
@@ -162,19 +160,6 @@ static GtkTargetEntry drop_types[] = {
#define num_drop_types (sizeof (drop_types) / sizeof (drop_types[0]))
-static struct {
- char *target;
- GdkAtom atom;
- guint32 actions;
-} drag_info[] = {
- { "message/rfc822", 0, GDK_ACTION_COPY },
- { "x-uid-list", 0, GDK_ACTION_ASK|GDK_ACTION_MOVE|GDK_ACTION_COPY },
- { "text/uri-list", 0, GDK_ACTION_COPY },
- { "_NETSCAPE_URL", 0, GDK_ACTION_COPY },
- { "text/x-vcard", 0, GDK_ACTION_COPY },
- { "text/calendar", 0, GDK_ACTION_COPY },
-};
-
static const char *emc_draft_format_names[] = { "pgp-sign", "pgp-encrypt", "smime-sign", "smime-encrypt" };
@@ -1458,14 +1443,14 @@ static void
autosave_manager_start (AutosaveManager *am)
{
if (am->id == 0)
- am->id = g_timeout_add (AUTOSAVE_INTERVAL, autosave_run, am);
+ am->id = gtk_timeout_add (AUTOSAVE_INTERVAL, autosave_run, am);
}
static void
autosave_manager_stop (AutosaveManager *am)
{
if (am->id) {
- g_source_remove (am->id);
+ gtk_timeout_remove (am->id);
am->id = 0;
}
}
@@ -2093,14 +2078,12 @@ setup_signatures_menu (EMsgComposer *composer)
EIterator *it;
hbox = e_msg_composer_hdrs_get_from_hbox (E_MSG_COMPOSER_HDRS (composer->hdrs));
-
- label = gtk_label_new_with_mnemonic (_("Si_gnature:"));
+
+ label = gtk_label_new (_("Signature:"));
gtk_widget_show (label);
-
+
composer->sig_menu = (GtkOptionMenu *) gtk_option_menu_new ();
-
- gtk_label_set_mnemonic_widget (label, composer->sig_menu);
-
+
gtk_box_pack_end_defaults (GTK_BOX (hbox), (GtkWidget *) composer->sig_menu);
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, TRUE, 0);
hspace = gtk_hbox_new (FALSE, 0);
@@ -2661,24 +2644,10 @@ attach_message(EMsgComposer *composer, CamelMimeMessage *msg)
camel_object_unref(mime_part);
}
-struct _drop_data {
- EMsgComposer *composer;
-
- GdkDragContext *context;
- /* Only selection->data and selection->length are valid */
- GtkSelectionData *selection;
-
- guint32 action;
- guint info;
- guint time;
-
- unsigned int move:1;
- unsigned int moved:1;
- unsigned int aborted:1;
-};
-
static void
-drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, GtkSelectionData *selection, guint info, guint time)
+drag_data_received (EMsgComposer *composer, GdkDragContext *context,
+ int x, int y, GtkSelectionData *selection,
+ guint info, guint time)
{
char *tmp, *str, **urls;
CamelMimePart *mime_part;
@@ -2686,8 +2655,8 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
CamelURL *url;
CamelMimeMessage *msg;
char *content_type;
- int i, success=FALSE, delete=FALSE;
-
+ int i;
+
switch (info) {
case DND_TYPE_MESSAGE_RFC822:
d(printf ("dropping a message/rfc822\n"));
@@ -2697,11 +2666,8 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_stream_reset (stream);
msg = camel_mime_message_new ();
- if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg, stream) != -1) {
+ if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg, stream) != -1)
attach_message(composer, msg);
- success = TRUE;
- delete = action == GDK_ACTION_MOVE;
- }
camel_object_unref(msg);
camel_object_unref(stream);
@@ -2740,7 +2706,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
}
g_free (urls);
- success = TRUE;
break;
case DND_TYPE_TEXT_VCARD:
case DND_TYPE_TEXT_CALENDAR:
@@ -2758,7 +2723,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_object_unref (mime_part);
g_free (content_type);
- success = TRUE;
break;
case DND_TYPE_X_UID_LIST: {
GPtrArray *uids;
@@ -2823,8 +2787,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
camel_object_unref(mime_part);
camel_object_unref(mp);
}
- success = TRUE;
- delete = action == GDK_ACTION_MOVE;
fail:
if (camel_exception_is_set(&ex)) {
char *name;
@@ -2850,117 +2812,6 @@ drop_action(EMsgComposer *composer, GdkDragContext *context, guint32 action, Gtk
d(printf ("dropping an unknown\n"));
break;
}
-
- printf("Drag finished, success %d delete %d\n", success, delete);
-
- gtk_drag_finish(context, success, delete, time);
-}
-
-static void
-drop_popup_copy(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- drop_action(m->composer, m->context, GDK_ACTION_COPY, m->selection, m->info, m->time);
-}
-
-static void
-drop_popup_move(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- drop_action(m->composer, m->context, GDK_ACTION_MOVE, m->selection, m->info, m->time);
-}
-
-static void
-drop_popup_cancel(EPopup *ep, EPopupItem *item, void *data)
-{
- struct _drop_data *m = data;
- gtk_drag_finish(m->context, FALSE, FALSE, m->time);
-}
-
-static EPopupItem drop_popup_menu[] = {
- { E_POPUP_ITEM, "00.emc.02", N_("_Copy"), drop_popup_copy, NULL, "stock_mail-copy", 0 },
- { E_POPUP_ITEM, "00.emc.03", N_("_Move"), drop_popup_move, NULL, "stock_mail-move", 0 },
- { E_POPUP_BAR, "10.emc" },
- { E_POPUP_ITEM, "99.emc.00", N_("Cancel _Drag"), drop_popup_cancel, NULL, NULL, 0 },
-};
-
-static void
-drop_popup_free(EPopup *ep, GSList *items, void *data)
-{
- struct _drop_data *m = data;
-
- g_slist_free(items);
-
- g_object_unref(m->context);
- g_object_unref(m->composer);
- g_free(m->selection->data);
- g_free(m->selection);
- g_free(m);
-}
-
-static void
-drag_data_received (EMsgComposer *composer, GdkDragContext *context,
- int x, int y, GtkSelectionData *selection,
- guint info, guint time)
-{
- if (selection->data == NULL || selection->length == -1)
- return;
-
- if (context->action == GDK_ACTION_ASK) {
- EMPopup *emp;
- GSList *menus = NULL;
- GtkMenu *menu;
- int i;
- struct _drop_data *m;
-
- m = g_malloc0(sizeof(*m));
- m->context = context;
- g_object_ref(context);
- m->composer = composer;
- g_object_ref(composer);
- m->action = context->action;
- m->info = info;
- m->time = time;
- m->selection = g_malloc0(sizeof(*m->selection));
- m->selection->data = g_malloc(selection->length);
- memcpy(m->selection->data, selection->data, selection->length);
- m->selection->length = selection->length;
-
- emp = em_popup_new("org.gnome.evolution.mail.composer.popup.drop");
- for (i=0;i<sizeof(drop_popup_menu)/sizeof(drop_popup_menu[0]);i++)
- menus = g_slist_append(menus, &drop_popup_menu[i]);
-
- e_popup_add_items((EPopup *)emp, menus, drop_popup_free, m);
- menu = e_popup_create_menu_once((EPopup *)emp, NULL, 0);
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, 0, time);
- } else {
- drop_action(composer, context, context->action, selection, info, time);
- }
-}
-
-static gboolean
-drag_motion(GObject *o, GdkDragContext *context, gint x, gint y, guint time, EMsgComposer *composer)
-{
- GList *targets;
- GdkDragAction action, actions = 0;
-
- for (targets = context->targets; targets; targets = targets->next) {
- int i;
-
- for (i=0;i<sizeof(drag_info)/sizeof(drag_info[0]);i++)
- if (targets->data == (void *)drag_info[i].atom)
- actions |= drag_info[i].actions;
- }
-
- actions &= context->actions;
- action = context->suggested_action;
- /* we default to copy */
- if (action == GDK_ACTION_ASK && (actions & (GDK_ACTION_MOVE|GDK_ACTION_COPY)) != (GDK_ACTION_MOVE|GDK_ACTION_COPY))
- action = GDK_ACTION_COPY;
-
- gdk_drag_status(context, action, time);
-
- return action != 0;
}
static void
@@ -2969,10 +2820,6 @@ class_init (EMsgComposerClass *klass)
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GObjectClass *gobject_class;
- int i;
-
- for (i=0;i<sizeof(drag_info)/sizeof(drag_info[0]);i++)
- drag_info[i].atom = gdk_atom_intern(drag_info[i].target, FALSE);
gobject_class = G_OBJECT_CLASS(klass);
object_class = GTK_OBJECT_CLASS (klass);
@@ -3199,19 +3046,6 @@ msg_composer_destroy_notify (void *data)
all_composers = g_slist_remove (all_composers, composer);
}
-static int
-composer_key_pressed (EMsgComposer *composer, GdkEventKey *event, void *user_data)
-{
- if (event->keyval == GDK_Escape) {
- do_exit (composer);
- g_signal_stop_emission_by_name (composer, "key-press-event");
- return TRUE;
- }
-
- return FALSE;
-}
-
-
/* Verbs for non-control entries */
static BonoboUIVerb entry_verbs [] = {
BONOBO_UI_VERB ("EditCut", menu_edit_cut_cb),
@@ -3324,16 +3158,13 @@ create_composer (int visible_mask)
int vis;
GList *icon_list;
BonoboControlFrame *control_frame;
+ GdkPixbuf *attachment_pixbuf;
composer = g_object_new (E_TYPE_MSG_COMPOSER, "win_name", _("Compose a message"), NULL);
gtk_window_set_title ((GtkWindow *) composer, _("Compose a message"));
all_composers = g_slist_prepend (all_composers, composer);
- g_signal_connect (composer, "key-press-event",
- G_CALLBACK (composer_key_pressed),
- NULL);
-
g_signal_connect (composer, "destroy",
G_CALLBACK (msg_composer_destroy_notify),
NULL);
@@ -3346,9 +3177,10 @@ create_composer (int visible_mask)
}
/* DND support */
- gtk_drag_dest_set (GTK_WIDGET (composer), GTK_DEST_DEFAULT_ALL, drop_types, num_drop_types, GDK_ACTION_COPY|GDK_ACTION_ASK|GDK_ACTION_MOVE);
- g_signal_connect(composer, "drag_data_received", G_CALLBACK (drag_data_received), NULL);
- g_signal_connect(composer, "drag-motion", G_CALLBACK(drag_motion), composer);
+ gtk_drag_dest_set (GTK_WIDGET (composer), GTK_DEST_DEFAULT_ALL,
+ drop_types, num_drop_types, GDK_ACTION_COPY);
+ g_signal_connect (composer, "drag_data_received",
+ G_CALLBACK (drag_data_received), NULL);
e_msg_composer_load_config (composer, visible_mask);
setup_ui (composer);
@@ -3443,9 +3275,11 @@ create_composer (int visible_mask)
gtk_misc_set_alignment (GTK_MISC (composer->attachment_expander_num), 1.0, 0.5);
expander_hbox = gtk_hbox_new (FALSE, 0);
- composer->attachment_expander_icon = e_icon_factory_get_image ("stock_attach", E_ICON_SIZE_MENU);
+ attachment_pixbuf = e_icon_factory_get_icon ("stock_attach", E_ICON_SIZE_MENU);
+ composer->attachment_expander_icon = gtk_image_new_from_pixbuf (attachment_pixbuf);
gtk_misc_set_alignment (GTK_MISC (composer->attachment_expander_icon), 1, 0.5);
gtk_widget_set_size_request (composer->attachment_expander_icon, 100, -1);
+ gdk_pixbuf_unref (attachment_pixbuf);
gtk_box_pack_start (GTK_BOX (expander_hbox), composer->attachment_expander_label,
TRUE, TRUE, 0);
@@ -3744,25 +3578,24 @@ handle_multipart_signed (EMsgComposer *composer, CamelMultipart *multipart, int
static void
handle_multipart_encrypted (EMsgComposer *composer, CamelMultipart *multipart, int depth)
{
+ CamelMultipartEncrypted *mpe = (CamelMultipartEncrypted *) multipart;
CamelContentType *content_type;
CamelCipherContext *cipher;
CamelDataWrapper *content;
CamelMimePart *mime_part;
CamelException ex;
- CamelCipherValidity *valid;
-
+
/* FIXME: make sure this is a PGP/MIME encrypted part?? */
e_msg_composer_set_pgp_encrypt (composer, TRUE);
camel_exception_init (&ex);
cipher = mail_crypto_get_pgp_cipher_context (NULL);
- mime_part = camel_mime_part_new();
- valid = camel_cipher_decrypt(cipher, (CamelMimePart *)multipart, mime_part, &ex);
- camel_object_unref(cipher);
+ mime_part = camel_multipart_encrypted_decrypt (mpe, cipher, &ex);
+ camel_object_unref (cipher);
camel_exception_clear (&ex);
- if (valid == NULL)
- return;
- camel_cipher_validity_free(valid);
+
+ if (!mime_part)
+ return;
content_type = camel_mime_part_get_content_type (mime_part);