#include "mimeview.h"
#include "alertpanel.h"
#include "menu.h"
+#include "image_viewer.h"
+#include "filesel.h"
struct _RemoteURI
{
gchar *uri;
+ gchar *filename;
+
guint start;
guint end;
};
static void copy_mail_to_uri_cb (TextView *textview,
guint action,
void *data);
+static void save_file_cb (TextView *textview,
+ guint action,
+ void *data);
static GtkItemFactoryEntry textview_link_popup_entries[] =
{
{N_("/_Copy"), NULL, copy_mail_to_uri_cb, 0, NULL},
};
+static GtkItemFactoryEntry textview_file_popup_entries[] =
+{
+ {N_("/_Save this image..."), NULL, save_file_cb, 0, NULL},
+};
+
TextView *textview_create(void)
{
GtkWidget *text;
GtkTextBuffer *buffer;
GtkClipboard *clipboard;
- GtkItemFactory *link_popupfactory, *mail_popupfactory;
- GtkWidget *link_popupmenu, *mail_popupmenu;
+ GtkItemFactory *link_popupfactory, *mail_popupfactory, *file_popupfactory;
+ GtkWidget *link_popupmenu, *mail_popupmenu, *file_popupmenu;
gint n_entries;
debug_print("Creating text view...\n");
"<UriPopupMenu>", &mail_popupfactory,
textview);
+ n_entries = sizeof(textview_file_popup_entries) /
+ sizeof(textview_file_popup_entries[0]);
+ file_popupmenu = menu_create_items(textview_file_popup_entries, n_entries,
+ "<FilePopupMenu>", &file_popupfactory,
+ textview);
+
textview->vbox = vbox;
textview->scrolledwin = scrolledwin;
textview->text = text;
textview->link_popup_factory = link_popupfactory;
textview->mail_popup_menu = mail_popupmenu;
textview->mail_popup_factory = mail_popupfactory;
+ textview->file_popup_menu = file_popupmenu;
+ textview->file_popup_factory = file_popupfactory;
return textview;
}
{
GtkTextView *text;
GtkTextBuffer *buffer;
- GtkTextIter iter;
+ GtkTextIter iter, start_iter;
gchar buf[BUFFSIZE];
GPtrArray *headers = NULL;
const gchar *name;
return;
}
- /* if (prefs_common.resize_img) {
+ if (prefs_common.resize_img) {
+ int new_width, new_height;
GdkPixbuf *scaled;
+ image_viewer_get_resized_size(gdk_pixbuf_get_width(pixbuf),
+ gdk_pixbuf_get_height(pixbuf),
+ textview->scrolledwin->allocation.width - 100,
+ gdk_pixbuf_get_height(pixbuf),
+ &new_width, &new_height);
+ scaled = gdk_pixbuf_scale_simple
+ (pixbuf, new_width, new_height, GDK_INTERP_BILINEAR);
- scaled = imageview_get_resized_pixbuf
- (pixbuf, textview->text, 8);
g_object_unref(pixbuf);
pixbuf = scaled;
- } */
+ }
- /* uri_str = g_filename_to_uri(filename, NULL, NULL);
+ uri_str = g_filename_to_uri(filename, NULL, NULL);
if (uri_str) {
uri = g_new(RemoteURI, 1);
uri->uri = uri_str;
- uri->filename =
- procmime_get_part_file_name(mimeinfo);
uri->start = gtk_text_iter_get_offset(&iter);
+
+ gtk_text_buffer_insert_pixbuf(buffer, &iter, pixbuf);
+
uri->end = uri->start + 1;
+ uri->filename = procmime_get_part_file_name(mimeinfo);
textview->uri_list =
g_slist_append(textview->uri_list, uri);
- } */
- gtk_text_buffer_insert_pixbuf(buffer, &iter, pixbuf);
- gtk_text_buffer_insert(buffer, &iter, "\n", 1);
+
+ gtk_text_buffer_insert(buffer, &iter, " ", 1);
+ gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, uri->start);
+ gtk_text_buffer_apply_tag_by_name(buffer, "link",
+ &start_iter, &iter);
+ } else {
+ gtk_text_buffer_insert_pixbuf(buffer, &iter, pixbuf);
+ gtk_text_buffer_insert(buffer, &iter, " ", 1);
+ }
g_object_unref(pixbuf);
g_free(filename);
(buffer, &iter, last->bp, last->ep - last->bp,
uri_tag, fg_tag, NULL);
uri->end = gtk_text_iter_get_offset(&iter);
+ uri->filename = NULL;
textview->uri_list =
g_slist_append(textview->uri_list, uri);
}
gtk_text_buffer_insert_with_tags_by_name
(buffer, &iter, bufp, -1, "link", NULL);
r_uri->end = gtk_text_iter_get_offset(&iter);
+ r_uri->filename = NULL;
textview->uri_list = g_slist_append(textview->uri_list, r_uri);
}
compose_new(account, uri->uri + 7, NULL);
}
return TRUE;
- } else {
+ } else if (g_ascii_strncasecmp(uri->uri, "file:", 5)) {
if (bevent->button == 1 &&
textview_uri_security_check(textview, uri) == TRUE)
open_uri(uri->uri,
bevent->button, bevent->time);
}
return TRUE;
+ } else {
+ if (bevent->button == 3) {
+ g_object_set_data(
+ G_OBJECT(textview->file_popup_menu),
+ "menu_button", uri);
+ gtk_menu_popup(GTK_MENU(textview->file_popup_menu),
+ NULL, NULL, NULL, NULL,
+ bevent->button, bevent->time);
+ return TRUE;
+ }
}
}
for (cur = uri_list; cur != NULL; cur = cur->next) {
if (cur->data) {
g_free(((RemoteURI *)cur->data)->uri);
+ g_free(((RemoteURI *)cur->data)->filename);
g_free(cur->data);
}
}
NULL);
}
+static void save_file_cb (TextView *textview, guint action, void *data)
+{
+ RemoteURI *uri = g_object_get_data(G_OBJECT(textview->file_popup_menu),
+ "menu_button");
+ gchar *filename = NULL;
+ gchar *filepath = NULL;
+ gchar *filedir = NULL;
+ gchar *tmp_filename = NULL;
+ if (uri == NULL)
+ return;
+
+ if (uri->filename == NULL)
+ return;
+
+ filename = g_strdup(uri->filename);
+
+ if (!g_utf8_validate(filename, -1, NULL)) {
+ gchar *tmp = conv_filename_to_utf8(filename);
+ g_free(filename);
+ filename = tmp;
+ }
+
+ subst_for_filename(filename);
+
+ if (prefs_common.attach_save_dir)
+ filepath = g_strconcat(prefs_common.attach_save_dir,
+ G_DIR_SEPARATOR_S, filename, NULL);
+ else
+ filepath = g_strdup(filename);
+
+ g_free(filename);
+
+ filename = filesel_select_file_save(_("Save as"), filepath);
+ if (!filename) {
+ g_free(filepath);
+ return;
+ }
+
+ if (is_file_exist(filename)) {
+ AlertValue aval;
+ gchar *res;
+
+ res = g_strdup_printf(_("Overwrite existing file '%s'?"),
+ filename);
+ aval = alertpanel(_("Overwrite"), res, GTK_STOCK_OK,
+ GTK_STOCK_CANCEL, NULL);
+ g_free(res);
+ if (G_ALERTDEFAULT != aval)
+ return;
+ }
+
+ tmp_filename = g_filename_from_uri(uri->uri, NULL, NULL);
+ copy_file(tmp_filename, filename, FALSE);
+ g_free(tmp_filename);
+
+ filedir = g_path_get_dirname(filename);
+ if (filedir && strcmp(filedir, ".")) {
+ if (prefs_common.attach_save_dir)
+ g_free(prefs_common.attach_save_dir);
+ prefs_common.attach_save_dir = g_strdup(filedir);
+ }
+
+ g_free(filedir);
+ g_free(filepath);
+
+ g_object_set_data(G_OBJECT(textview->file_popup_menu), "menu_button",
+ NULL);
+}
+
static void copy_uri_cb (TextView *textview, guint action, void *data)
{
RemoteURI *uri = g_object_get_data(G_OBJECT(textview->link_popup_menu),