aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer-attachment.c
diff options
context:
space:
mode:
Diffstat (limited to 'composer/e-msg-composer-attachment.c')
-rw-r--r--composer/e-msg-composer-attachment.c183
1 files changed, 99 insertions, 84 deletions
diff --git a/composer/e-msg-composer-attachment.c b/composer/e-msg-composer-attachment.c
index 9a6bfefc79..5da1bf6068 100644
--- a/composer/e-msg-composer-attachment.c
+++ b/composer/e-msg-composer-attachment.c
@@ -31,13 +31,12 @@
#include <sys/stat.h>
#include <errno.h>
-#include <camel/camel.h>
#include <gtk/gtknotebook.h>
#include <gtk/gtktogglebutton.h>
+#include <camel/camel.h>
+#include <gal/widgets/e-unicode.h>
#include <libgnomevfs/gnome-vfs-mime.h>
-#include "e-util/e-mktemp.h"
-
#include "e-msg-composer.h"
#include "e-msg-composer-attachment.h"
@@ -48,30 +47,28 @@ enum {
};
static guint signals[LAST_SIGNAL] = { 0 };
-static GObjectClass *parent_class = NULL;
+static GtkObjectClass *parent_class = NULL;
static void
changed (EMsgComposerAttachment *attachment)
{
- g_signal_emit (attachment, signals[CHANGED], 0);
+ gtk_signal_emit (GTK_OBJECT (attachment), signals[CHANGED]);
}
/* GtkObject methods. */
static void
-finalise(GObject *object)
+destroy (GtkObject *object)
{
EMsgComposerAttachment *attachment;
-
+
attachment = E_MSG_COMPOSER_ATTACHMENT (object);
- camel_object_unref (attachment->body);
+ camel_object_unref (CAMEL_OBJECT (attachment->body));
if (attachment->pixbuf_cache != NULL)
- g_object_unref (attachment->pixbuf_cache);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ gdk_pixbuf_unref (attachment->pixbuf_cache);
}
@@ -80,6 +77,7 @@ finalise(GObject *object)
static void
real_changed (EMsgComposerAttachment *msg_composer_attachment)
{
+ g_return_if_fail (msg_composer_attachment != NULL);
g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT (msg_composer_attachment));
}
@@ -87,22 +85,27 @@ real_changed (EMsgComposerAttachment *msg_composer_attachment)
static void
class_init (EMsgComposerAttachmentClass *klass)
{
- GObjectClass *object_class;
-
- object_class = (GObjectClass*) klass;
- parent_class = g_type_class_ref (G_TYPE_OBJECT);
-
- object_class->finalize = finalise;
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass*) klass;
+
+ parent_class = gtk_type_class (gtk_object_get_type ());
+
+ object_class->destroy = destroy;
+
+ signals[CHANGED] = gtk_signal_new ("changed",
+ GTK_RUN_FIRST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET
+ (EMsgComposerAttachmentClass,
+ changed),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+
+
+ gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
+
klass->changed = real_changed;
-
- signals[CHANGED] = g_signal_new ("changed",
- E_TYPE_MSG_COMPOSER_ATTACHMENT,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EMsgComposerAttachmentClass, changed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
}
static void
@@ -114,27 +117,26 @@ init (EMsgComposerAttachment *msg_composer_attachment)
msg_composer_attachment->pixbuf_cache = NULL;
}
-GType
+GtkType
e_msg_composer_attachment_get_type (void)
{
- static GType type = 0;
-
+ static GtkType type = 0;
+
if (type == 0) {
- static const GTypeInfo info = {
- sizeof (EMsgComposerAttachmentClass),
- NULL,
- NULL,
- (GClassInitFunc) class_init,
- NULL,
- NULL,
+ static const GtkTypeInfo info = {
+ "EMsgComposerAttachment",
sizeof (EMsgComposerAttachment),
- 0,
- (GInstanceInitFunc) init,
+ sizeof (EMsgComposerAttachmentClass),
+ (GtkClassInitFunc) class_init,
+ (GtkObjectInitFunc) init,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
};
-
- type = g_type_register_static (G_TYPE_OBJECT, "EMsgComposerAttachment", &info, 0);
+
+ type = gtk_type_unique (gtk_object_get_type (), &info);
}
-
+
return type;
}
@@ -203,21 +205,21 @@ e_msg_composer_attachment_new (const char *file_name,
} else
camel_data_wrapper_set_mime_type (wrapper, "application/octet-stream");
- camel_object_unref (stream);
+ camel_object_unref (CAMEL_OBJECT (stream));
part = camel_mime_part_new ();
camel_medium_set_content_object (CAMEL_MEDIUM (part), wrapper);
- camel_object_unref (wrapper);
+ camel_object_unref (CAMEL_OBJECT (wrapper));
camel_mime_part_set_disposition (part, disposition);
- filename = g_path_get_basename(file_name);
+ filename = e_utf8_from_locale_string (g_basename (file_name));
camel_mime_part_set_filename (part, filename);
g_free (filename);
#if 0
/* Note: Outlook 2002 is broken with respect to Content-Ids on
non-multipart/related parts, so as an interoperability
- workaround, don't set a Content-Id on these parts. Fixes
+ workwaround, don't set a Content-Id on these parts. Fixes
bug #10032 */
/* set the Content-Id */
content_id = header_msgid_generate ();
@@ -225,7 +227,7 @@ e_msg_composer_attachment_new (const char *file_name,
g_free (content_id);
#endif
- new = g_object_new (E_TYPE_MSG_COMPOSER_ATTACHMENT, NULL);
+ new = gtk_type_new (e_msg_composer_attachment_get_type ());
new->editor_gui = NULL;
new->body = part;
new->size = statbuf.st_size;
@@ -267,7 +269,7 @@ e_msg_composer_attachment_new_from_mime_part (CamelMimePart *part)
camel_object_unref (stream);
- new = g_object_new (E_TYPE_MSG_COMPOSER_ATTACHMENT, NULL);
+ new = gtk_type_new (e_msg_composer_attachment_get_type ());
new->editor_gui = NULL;
new->body = mime_part;
new->guessed_type = FALSE;
@@ -279,14 +281,15 @@ e_msg_composer_attachment_new_from_mime_part (CamelMimePart *part)
/* The attachment property dialog. */
-typedef struct {
+struct _DialogData {
GtkWidget *dialog;
GtkEntry *file_name_entry;
GtkEntry *description_entry;
GtkEntry *mime_type_entry;
GtkToggleButton *disposition_checkbox;
EMsgComposerAttachment *attachment;
-} DialogData;
+};
+typedef struct _DialogData DialogData;
static void
destroy_dialog_data (DialogData *data)
@@ -303,38 +306,45 @@ destroy_dialog_data (DialogData *data)
static void
update_mime_type (DialogData *data)
{
- const char *filename, *mime_type;
-
+ const gchar *mime_type;
+ gchar *file_name;
+
if (!data->attachment->guessed_type)
return;
-
- filename = gtk_entry_get_text (data->file_name_entry);
- if (filename) {
- if ((mime_type = gnome_vfs_mime_type_from_name (filename)))
- gtk_entry_set_text (data->mime_type_entry, mime_type);
- }
+
+ file_name = e_utf8_gtk_entry_get_text (data->file_name_entry);
+ mime_type = gnome_vfs_mime_type_from_name_or_default (file_name, NULL);
+ g_free (file_name);
+
+ if (mime_type)
+ e_utf8_gtk_entry_set_text (data->mime_type_entry, mime_type);
}
static void
-set_entry (GladeXML *xml, const char *widget_name, const char *value)
+set_entry (GladeXML *xml,
+ const gchar *widget_name,
+ const gchar *value)
{
GtkEntry *entry;
-
+
entry = GTK_ENTRY (glade_xml_get_widget (xml, widget_name));
if (entry == NULL)
g_warning ("Entry for `%s' not found.", widget_name);
else
- gtk_entry_set_text (entry, value ? value : "");
+ e_utf8_gtk_entry_set_text (entry, value ? value : "");
}
static void
-connect_widget (GladeXML *gui, const char *name, const char *signal_name,
- GCallback func, gpointer data)
+connect_widget (GladeXML *gui,
+ const gchar *name,
+ const gchar *signal_name,
+ GtkSignalFunc func,
+ gpointer data)
{
GtkWidget *widget;
-
+
widget = glade_xml_get_widget (gui, name);
- g_signal_connect (widget, signal_name, func, data);
+ gtk_signal_connect (GTK_OBJECT (widget), signal_name, func, data);
}
static void
@@ -347,10 +357,10 @@ close_cb (GtkWidget *widget, gpointer data)
attachment = dialog_data->attachment;
gtk_widget_destroy (dialog_data->dialog);
- g_object_unref (attachment->editor_gui);
+ gtk_object_unref (GTK_OBJECT (attachment->editor_gui));
attachment->editor_gui = NULL;
- g_object_unref (attachment);
+ gtk_object_unref (GTK_OBJECT (attachment));
destroy_dialog_data (dialog_data);
}
@@ -360,21 +370,25 @@ ok_cb (GtkWidget *widget, gpointer data)
{
DialogData *dialog_data;
EMsgComposerAttachment *attachment;
- const char *str;
+ char *str;
dialog_data = (DialogData *) data;
attachment = dialog_data->attachment;
- str = gtk_entry_get_text (dialog_data->file_name_entry);
+ str = e_utf8_gtk_entry_get_text (dialog_data->file_name_entry);
camel_mime_part_set_filename (attachment->body, str);
+ g_free (str);
- str = gtk_entry_get_text (dialog_data->description_entry);
+ str = e_utf8_gtk_entry_get_text (dialog_data->description_entry);
camel_mime_part_set_description (attachment->body, str);
+ g_free (str);
- str = gtk_entry_get_text (dialog_data->mime_type_entry);
+ str = e_utf8_gtk_entry_get_text (dialog_data->mime_type_entry);
camel_mime_part_set_content_type (attachment->body, str);
- camel_data_wrapper_set_mime_type(camel_medium_get_content_object(CAMEL_MEDIUM (attachment->body)), str);
+ camel_data_wrapper_set_mime_type (
+ camel_medium_get_content_object (CAMEL_MEDIUM (attachment->body)), str);
+ g_free (str);
switch (gtk_toggle_button_get_active (dialog_data->disposition_checkbox)) {
case 0:
@@ -393,7 +407,9 @@ ok_cb (GtkWidget *widget, gpointer data)
}
static void
-file_name_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
+file_name_focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer data)
{
DialogData *dialog_data;
@@ -403,15 +419,15 @@ file_name_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
void
-e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment, GtkWidget *parent)
+e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment,
+ GtkWidget *parent)
{
CamelContentType *content_type;
- const char *disposition;
DialogData *dialog_data;
+ const char *disposition;
GladeXML *editor_gui;
char *type;
- g_return_if_fail (attachment != NULL);
g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT (attachment));
if (attachment->editor_gui != NULL) {
@@ -424,7 +440,7 @@ e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment, GtkWidget *p
}
editor_gui = glade_xml_new (E_GLADEDIR "/e-msg-composer-attachment.glade",
- NULL, NULL);
+ NULL);
if (editor_gui == NULL) {
g_warning ("Cannot load `e-msg-composer-attachment.glade'");
return;
@@ -437,8 +453,8 @@ e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment, GtkWidget *p
GTK_WINDOW (gtk_widget_get_toplevel (parent)));
dialog_data = g_new (DialogData, 1);
- g_object_ref (attachment);
dialog_data->attachment = attachment;
+ gtk_object_ref (GTK_OBJECT (attachment));
dialog_data->dialog = glade_xml_get_widget (editor_gui, "dialog");
dialog_data->file_name_entry = GTK_ENTRY (
glade_xml_get_widget (editor_gui, "file_name_entry"));
@@ -460,19 +476,18 @@ e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment, GtkWidget *p
disposition = camel_mime_part_get_disposition (attachment->body);
gtk_toggle_button_set_active (dialog_data->disposition_checkbox,
- disposition && !g_ascii_strcasecmp (disposition, "inline"));
+ disposition && !g_strcasecmp (disposition, "inline"));
- connect_widget (editor_gui, "ok_button", "clicked", (GCallback)ok_cb, dialog_data);
- connect_widget (editor_gui, "close_button", "clicked", (GCallback)close_cb, dialog_data);
+ connect_widget (editor_gui, "ok_button", "clicked", ok_cb, dialog_data);
+ connect_widget (editor_gui, "close_button", "clicked", close_cb, dialog_data);
connect_widget (editor_gui, "file_name_entry", "focus_out_event",
- (GCallback)file_name_focus_out_cb, dialog_data);
+ file_name_focus_out_cb, dialog_data);
-#warning "signal connect while alive"
/* make sure that when the composer gets hidden/closed that our windows also close */
parent = gtk_widget_get_toplevel (parent);
- gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", (GCallback)close_cb, dialog_data,
+ gtk_signal_connect_while_alive (GTK_OBJECT (parent), "destroy", close_cb, dialog_data,
GTK_OBJECT (dialog_data->dialog));
- gtk_signal_connect_while_alive (GTK_OBJECT (parent), "hide", (GCallback)close_cb, dialog_data,
+ gtk_signal_connect_while_alive (GTK_OBJECT (parent), "hide", close_cb, dialog_data,
GTK_OBJECT (dialog_data->dialog));
}