diff options
-rw-r--r-- | widgets/misc/ChangeLog | 13 | ||||
-rw-r--r-- | widgets/misc/e-attachment-bar.c | 65 | ||||
-rw-r--r-- | widgets/misc/e-attachment.c | 20 | ||||
-rw-r--r-- | widgets/misc/e-attachment.h | 1 |
4 files changed, 86 insertions, 13 deletions
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index 46deeb8969..d5c65dd100 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,16 @@ +2005-08-17 Srinivasa Ragavan <sragavan@novell.com> + + * e-attachment-bar.c + eab_drag_data_get: Use camel_url to construct url + (eab_icon_clicked_cb) (e_attachment_bar_new): + Fixed part of bug #312224. It handles double click on a attachment + icon and calls gnome_url_show. + + * e-attachment.[ch] (finalise) (init): Add a new member to preserve + the stored location + (e_attachment_new)(e_attachment_build_remote_file): Camel_url to + construct urls + 2005-08-16 Srinivasa Ragavan <sragavan@novell.com> * e-attachment.c (download_to_local_path) (e_attachment_edit): Fixed diff --git a/widgets/misc/e-attachment-bar.c b/widgets/misc/e-attachment-bar.c index 76d84a7d8d..67ce7f9dde 100644 --- a/widgets/misc/e-attachment-bar.c +++ b/widgets/misc/e-attachment-bar.c @@ -34,6 +34,7 @@ #include <gdk/gdkkeysyms.h> #include <libgnomevfs/gnome-vfs-mime-handlers.h> #include <libgnome/gnome-i18n.h> +#include <libgnome/libgnome.h> #include "e-attachment.h" #include "e-attachment-bar.h" @@ -704,14 +705,13 @@ eab_drag_data_get(EAttachmentBar *bar, GdkDragContext *drag, GtkSelectionData *d for (; tmp; tmp = tmp->next) { int num = GPOINTER_TO_INT(tmp->data); EAttachment *attachment = g_list_nth_data(bar->priv->attachments, num); - char *uri; + CamelURL *curl; if (!attachment->is_available_local) continue; - uri = g_object_get_data((GObject *)attachment, "e-drag-uri"); - if (uri) { - uris[i] = uri; + if (attachment->store_uri) { + uris[i] = attachment->store_uri; i++; continue; } @@ -720,10 +720,13 @@ eab_drag_data_get(EAttachmentBar *bar, GdkDragContext *drag, GtkSelectionData *d if (path == NULL) continue; - uri = g_strdup_printf("file://%s\r\n", path); + curl = camel_url_new("file:", NULL); + camel_url_set_path (curl, path); + attachment->store_uri = camel_url_to_string (curl, 0); + camel_url_free(curl); g_free(path); - g_object_set_data_full((GObject *)attachment, "e-drag-uri", uri, g_free); - uris[i] = uri; + + uris[i] = attachment->store_uri; i++; } uris[i]=0; @@ -810,6 +813,53 @@ eab_button_press_event(EAttachmentBar *bar, GdkEventButton *event, gpointer dumm return FALSE; } +static gboolean +eab_icon_clicked_cb (EAttachmentBar *bar, GdkEvent *event, gpointer *dummy) +{ + GSList *p = NULL; + GError *error = NULL; + gboolean ret = FALSE; + + if (E_IS_ATTACHMENT_BAR (bar) && event->type == GDK_2BUTTON_PRESS) { + p = e_attachment_bar_get_selected (bar); + if (p && g_slist_length(p) == 1) { + EAttachment *attachment; + char *path = NULL; + + attachment = (EAttachment *)p->data; + + /* Check if the file is stored already */ + if (!attachment->store_uri) { + CamelURL *curl; + + path = temp_save_part (attachment->body); + curl = camel_url_new ("file:", NULL); + camel_url_set_path ( curl, path); + attachment->store_uri = camel_url_to_string (curl, 0); + camel_url_free (curl); + } + + /* launch the url now */ + gnome_url_show (attachment->store_uri, &error); + if (error) { + g_message ("DEBUG: Launch failed: %s\n", error->message); + g_error_free (error); + error = NULL; + } + + g_free (path); + ret = TRUE; + } + + if (p) { + g_slist_foreach (p, (GFunc)g_object_unref, NULL); + g_slist_free (p); + } + } + + return ret; +} + /* Initialization. */ static void @@ -910,6 +960,7 @@ e_attachment_bar_new (GtkAdjustment *adj) g_signal_connect (new, "button_release_event", G_CALLBACK(eab_button_release_event), NULL); g_signal_connect (new, "button_press_event", G_CALLBACK(eab_button_press_event), NULL); g_signal_connect (new, "drag-data-get", G_CALLBACK(eab_drag_data_get), NULL); + g_signal_connect (icon_list, "event", G_CALLBACK (eab_icon_clicked_cb), NULL); return GTK_WIDGET (new); } diff --git a/widgets/misc/e-attachment.c b/widgets/misc/e-attachment.c index 91f5bb8d27..54579ccfa6 100644 --- a/widgets/misc/e-attachment.c +++ b/widgets/misc/e-attachment.c @@ -78,6 +78,7 @@ finalise(GObject *object) } g_free (attachment->file_name); + g_free (attachment->store_uri); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -143,6 +144,7 @@ init (EAttachment *attachment) attachment->disposition = FALSE; attachment->sign = CAMEL_CIPHER_VALIDITY_SIGN_NONE; attachment->encrypt = CAMEL_CIPHER_VALIDITY_ENCRYPT_NONE; + attachment->store_uri = NULL; } GType @@ -210,7 +212,7 @@ e_attachment_new (const char *file_name, struct stat statbuf; char *mime_type; char *filename; - char *uri; + CamelURL *curl; g_return_val_if_fail (file_name != NULL, NULL); @@ -283,8 +285,11 @@ e_attachment_new (const char *file_name, new->handle = NULL; new->is_available_local = TRUE; new->file_name = filename; - uri = g_strdup_printf("file://%s\r\n", file_name); - g_object_set_data_full((GObject *)new, "e-drag-uri", uri, g_free); + + curl = camel_url_new ("file:", NULL); + camel_url_set_path (curl, file_name); + new->store_uri = camel_url_to_string (curl, 0); + camel_url_free (curl); return new; } @@ -411,7 +416,7 @@ e_attachment_build_remote_file (const char *file_name, struct stat statbuf; char *mime_type; char *filename; - char *uri; + CamelURL *curl; g_return_if_fail (file_name != NULL); @@ -486,9 +491,12 @@ e_attachment_build_remote_file (const char *file_name, attachment->guessed_type = TRUE; g_free (attachment->file_name); attachment->file_name = g_strdup (filename); - uri = g_strdup_printf("file://%s\r\n", file_name); - g_object_set_data_full((GObject *)attachment, "e-drag-uri", uri, g_free); + curl = camel_url_new ("file:", NULL); + camel_url_set_path (curl, file_name); + attachment->store_uri = camel_url_to_string (curl, 0); + camel_url_free (curl); + } diff --git a/widgets/misc/e-attachment.h b/widgets/misc/e-attachment.h index 92686faec2..46791836ed 100644 --- a/widgets/misc/e-attachment.h +++ b/widgets/misc/e-attachment.h @@ -65,6 +65,7 @@ struct _EAttachment { char *description; gboolean disposition; int index; + char *store_uri; /* Status of signed/encrypted attachments */ camel_cipher_validity_sign_t sign; |