aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorLarry Ewing <lewing@ximian.com>2001-10-10 13:43:40 +0800
committerLarry Ewing <lewing@src.gnome.org>2001-10-10 13:43:40 +0800
commit14124e1c1639ef555dd0829ea74799525caf4374 (patch)
tree1bf2e95264d697bc4485d27473d83aca03cc3fc7 /mail
parentb620893135720a2be38428dd1a403f2184cc04d5 (diff)
downloadgsoc2013-evolution-14124e1c1639ef555dd0829ea74799525caf4374.tar.gz
gsoc2013-evolution-14124e1c1639ef555dd0829ea74799525caf4374.tar.zst
gsoc2013-evolution-14124e1c1639ef555dd0829ea74799525caf4374.zip
ref the part. (save_destroy_cb): new function to unref the part when we
2001-10-09 Larry Ewing <lewing@ximian.com> * mail-display.c (save_part): ref the part. (save_destroy_cb): new function to unref the part when we have closed the dialog. (save_url): fake a mime part so that we can save data urls without extra effort. This is less sucky than it seems since it handles filenames and ref counting with minimal fuss. svn path=/trunk/; revision=13544
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog9
-rw-r--r--mail/mail-display.c71
2 files changed, 69 insertions, 11 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index ed06620a0c..b7dbaab68e 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,12 @@
+2001-10-09 Larry Ewing <lewing@ximian.com>
+
+ * mail-display.c (save_part): ref the part.
+ (save_destroy_cb): new function to unref the part when we have
+ closed the dialog.
+ (save_url): fake a mime part so that we can save data urls without
+ extra effort. This is less sucky than it seems since it handles
+ filenames and ref counting with minimal fuss.
+
2001-10-09 <NotZed@Ximian.com>
* mail-folder-cache.c (folder_changed): Ref folder so it hangs
diff --git a/mail/mail-display.c b/mail/mail-display.c
index 005159f981..d673ae3b61 100644
--- a/mail/mail-display.c
+++ b/mail/mail-display.c
@@ -173,6 +173,12 @@ save_data_cb (GtkWidget *widget, gpointer user_data)
gtk_widget_destroy (GTK_WIDGET (file_select));
}
+static void
+save_destroy_cb (GtkWidget *widget, CamelMimePart *part)
+{
+ camel_object_unref (CAMEL_OBJECT (part));
+}
+
static gboolean
idle_redisplay (gpointer data)
{
@@ -193,6 +199,17 @@ mail_display_queue_redisplay (MailDisplay *md)
}
static void
+mail_display_jump_to_anchor (MailDisplay *md, const char *url)
+{
+ char *anchor = strstr (url, "#");
+
+ g_return_if_fail (anchor != NULL);
+
+ if (anchor)
+ gtk_html_jump_to_anchor (md->html, anchor + 1);
+}
+
+static void
on_link_clicked (GtkHTML *html, const char *url, MailDisplay *md)
{
if (!g_strncasecmp (url, "news:", 5) ||
@@ -204,7 +221,9 @@ on_link_clicked (GtkHTML *html, const char *url, MailDisplay *md)
g_datalist_set_data (md->data, "show_pgp",
GINT_TO_POINTER (1));
mail_display_queue_redisplay (md);
- } else
+ } else if (*url == '#')
+ mail_display_jump_to_anchor (md, url);
+ else
gnome_url_show (url);
}
@@ -214,6 +233,9 @@ save_part (CamelMimePart *part)
GtkFileSelection *file_select;
char *filename;
+ g_return_if_fail (part != NULL);
+ camel_object_ref (CAMEL_OBJECT (part));
+
if (save_pathname == NULL)
save_pathname = g_strdup (g_get_home_dir ());
@@ -233,6 +255,9 @@ save_part (CamelMimePart *part)
GTK_SIGNAL_FUNC (gtk_widget_destroy),
GTK_OBJECT (file_select));
+ gtk_signal_connect (GTK_OBJECT (file_select), "destroy",
+ GTK_SIGNAL_FUNC (save_destroy_cb), part);
+
gtk_widget_show (GTK_WIDGET (file_select));
}
@@ -694,6 +719,39 @@ save_url (MailDisplay *md, const char *url)
g_return_val_if_fail (urls != NULL, NULL);
part = g_hash_table_lookup (urls, url);
+ if (part == NULL) {
+ GByteArray *ba;
+
+ urls = g_datalist_get_data (md->data, "data_urls");
+ g_return_val_if_fail (urls != NULL, NULL);
+
+ /* See if it's some piece of cached data if it is then pretend it
+ * is a mime part so that we can use the mime part saveing routines.
+ * It is gross but it keeps duplicated code to a minimum and helps
+ * out with ref counting and the like.
+ */
+ ba = g_hash_table_lookup (urls, url);
+ if (ba) {
+ CamelStream *memstream;
+ CamelDataWrapper *wrapper;
+ const char *name;
+
+ name = strrchr (url, '/');
+ name = name ? name : url;
+
+ memstream = camel_stream_mem_new_with_byte_array (ba);
+ wrapper = camel_data_wrapper_new ();
+ camel_data_wrapper_construct_from_stream (wrapper, memstream);
+ camel_object_unref (CAMEL_OBJECT (memstream));
+ part = camel_mime_part_new ();
+ camel_medium_set_content_object (CAMEL_MEDIUM (part), wrapper);
+ camel_object_unref (CAMEL_OBJECT (wrapper));
+ camel_mime_part_set_filename (part, name);
+ }
+ } else {
+ camel_object_ref (CAMEL_OBJECT (part));
+ }
+
if (part) {
CamelDataWrapper *data;
@@ -705,20 +763,11 @@ save_url (MailDisplay *md, const char *url)
}
save_part (part);
+ camel_object_unref (CAMEL_OBJECT (part));
return NULL;
}
g_warning ("part not found");
-#if 0
- urls = g_datalist_get_data (md->data, "data_urls");
- g_return_val_if_fail (urls != NULL, NULL);
-
- /* See if it's some piece of cached data */
- ba = g_hash_table_lookup (urls, url);
- if (ba) {
- return ba;
- }
-#endif
return NULL;
}
70eae589432faecccf20a7c34966c4ce24504'>- Update pgbouncer to 1.2.3mm2008-08-121-0/+1 * Reserve numbers for databases/frontbase user.edwin2008-06-131-0/+1 * Switch UIDs to master.passwd compatible format.flz2008-05-201-142/+142 * Style fix, $FreeBSD$ line is a comment, so add a leading '#'.flz2008-05-201-1/+1 * Reserve UID and GID for irc/bitlbee.brix2008-05-201-0/+1 * - Add entries for irc/undernet-ircubeech2008-05-011-0/+1 * - Reserve GID/UID 59 for dns/unboundsem2008-04-291-0/+1 * Reserve 814 for sysutils/puppet*pav2008-04-111-0/+1 * - Add GID and UID for www/openacs and www/openacs-dotlrnmm2008-04-031-0/+2 * - Add GID and UID for net/freeradius2mm2008-04-021-0/+1 * * Don't need p5-Digest-MD5; p5-libwww dependency takes care of that.koitsu2008-03-101-1/+1 * - Register UID for net/phpldapadmin, net/phpldapadmin098rafan2008-03-091-0/+1 * - Add GID and UID for net-im/openfiremiwi2008-03-081-0/+1 * Remove IGNORE; add UID 141 to ports/UIDs, and remove unnecessary Time::HiReskoitsu2008-02-191-0/+1 * - Sort UIDsmiwi2008-02-171-2/+2 * - add hobbit with id 280dinoex2008-01-281-0/+1 * - Reserve UID/GID 240 and 241 for aprsddb2008-01-241-0/+2 * Changes:miwi2008-01-211-0/+1 * Add 913 for _relayd.kuriyama2008-01-211-0/+1 * Inconsistent format of lines in /usr/ports/UIDsedwin2008-01-191-4/+4 * - Reserve uid/gid for net/iodine 0.4.1_1rafan2008-01-111-0/+1 * Unify nologin path to /usr/sbin/nologinedwin2007-09-301-75/+75 * Add _sj3 for japanese/sj3 with UID 912edwin2007-09-091-1/+2 * Add 911 for iserv (See PR ports/114017)edwin2007-09-071-0/+1 * Reserve a user and group ID for the stunnel daemon.roam2007-08-281-0/+1 * - Update to 1.28beech2007-06-281-0/+1 * - Move zabbix from UID 112 to 122 to avoid conflict with dccsat2007-06-221-0/+1 * - add MeTA1dinoex2007-06-101-5/+5 * - Update to 0.9.8miwi2007-05-301-0/+1 * Reserve a UID for pulse and a GID for pulse and pulse-access. These are neededmarcus2007-04-301-0/+1 * - Sorted otrs correctmiwi2007-04-211-1/+1 * Register UID and UID for mail/nullmailer.clive2007-04-211-1/+2 * - Add UID/GID for devel/otrsmiwi2007-04-111-0/+1 * - Use static gid/uid.stas2007-04-111-0/+1 * (second attempt)naddy2007-04-101-1/+1 * reserve _ntp UID/GID for OpenNTPDnaddy2007-04-101-0/+1 * - Give irc/hybserv a unique UID/GIDlaszlof2007-03-311-0/+1 * Register UID and GID for net-mgmt/netdisco.shaun2007-03-281-0/+1 * Correct a copy-paste problem when allocating the polkit UID, and use a uniquemarcus2007-03-241-0/+1 * Reserve UID and GID for net-mgmt/nav.des2007-03-131-0/+1 * Add GID and UID for OpenBSD spamd (mail/spamd).delphij2007-03-091-0/+1 * - change smx entries to "/usr/sbin/nologin"dinoex2007-02-171-5/+5 * - add smmspdinoex2007-02-171-0/+1 * - Reserve UID/GID 312 for sphinxpav2007-01-311-0/+1 * - Reserve UID/GID 181 for nagiospav2007-01-281-0/+1 * - Register UID/GID for pdns_recursorpav2007-01-191-0/+1 * - Add user/group for sysutils/fcronrafan2007-01-171-0/+1 * Add user and group mythtv (119).grog2007-01-141-0/+1 * Add missing colon to the cups entry.shaun2006-12-281-1/+1 * - register cupsdinoex2006-12-181-0/+1 * - Reserve UID/GID 143 for mail/dovecotpav2006-12-011-0/+1 * - add wildfire to GIDs and UIDsalexbl2006-11-161-0/+1 * Register mail/fetchmail's UID and GID.barner2006-11-151-0/+1 * - Reserve UID and GID 561 for distccahze2006-11-121-0/+1 * Oops, restore dkfilter, still needed for dkfilter portache2006-11-091-0/+1 * Remove bogomilter and dkfilterache2006-11-091-2/+0 * - Add _xsi user and group for sysutils/xsi.alepulver2006-11-061-0/+1 * - Add entry for net-mgmt/bigsisterrafan2006-11-041-0/+1 * - Add hacluster user.alepulver2006-11-021-0/+1 * Reserve uid:gid 559 for the tacacs user for net/tac_plus4.marcus2006-10-311-0/+1 * This file lists entries in passwd(5) format; fix those three that didn't agree.ru2006-09-041-3/+3 * - Register UID/GID 128 for vserverpav2006-08-291-0/+1 * - Reserve UID/GID 118 for irc/ircproxypav2006-08-291-0/+1 * Add ID for Tiarra IRC Proxy.ume2006-07-291-0/+1 * - rc.d scripts are changed to show error messages when some errorrafan2006-07-291-0/+1 * Add user/group for mail/dkimproxy, which is added two days ago.rafan2006-07-291-0/+1 * Reserve uid/gid for net/smokepinglth2006-07-261-0/+1 * Fix home directory for "firebird" user:skv2006-07-251-1/+1 * Reserve uid/gid for Openlink Virtuoso Universal Server.fjoe2006-07-251-0/+1 * Add entry for trans-proxy-tor.miwi2006-07-221-0/+1 * Add entry for dns-proxy-tor.miwi2006-07-221-0/+1 * Add $FreeBSD tag.krion2006-07-221-0/+1