+2005-05-30 [paul] 1.0.4cvs14
+
+ backported from GTK2
+
+ * sylpheed.spec.in
+ fix bug 477
+ * doc/src/rfc2368.txt
+ added
+ * src/Makefile.am
+ add clip/signed icon
+ * src/alertpanel.c
+ * src/alertpanel.h
+ fix _with_disable parameters so that
+ the buttons labels are specifiable too
+ * src/compose.c
+ compose_entries_set(): don't interpret Bcc
+ header field (conform to RFC 2368)
+ * src/folder.c
+ Forbid locked messages to be moved or deleted
+ Fix bug #688 b) and c)
+ * src/folderview.c
+ Forbid locked messages to be moved or deleted
+ Fix bugs #156 and #108
+ * src/inc.c
+ Fix bug #688 b) and c)
+ * src/main.c
+ cleanup tmp directory when exit
+ * src/prefs_actions.c
+ Fix bug #506
+ * src/prefs_common.c
+ * src/prefs_common.h
+ Let the default reply format respect
+ netiquette by cutting the signature.
+ Fix bug #156
+ * src/prefs_template.c
+ Fix bug #506
+ * src/procmime.c
+ Fix bug #688 b) and c)
+ * src/procmsg.c
+ Forbid locked messages to be moved or deleted
+ * src/stock_pixmap.c
+ * src/stock_pixmap.h
+ Add clip/signed icon
+ * src/summaryview.c
+ Don't let always_show_msg override
+ open_unread_on_enter when opening a new
+ directory.
+ Forbid locked messages to be moved or deleted.
+ Fix bug #688 f) read/unread marker not
+ changed on first click.
+ * src/common/nntp.c
+ Fix bug #611 nntp mode reader
+ * src/common/socket.c
+ Check another special SSL_peek() error.
+ Should help wrt bug #728
+ * src/common/template.c
+ Fix a possible crash
+ * src/pixmaps/clip_gpg_signed.xpm
+ added
+ * src/plugins/pgpmime/pgpmime.c
+ Change name to "PGP MIME"
+ * src/plugins/pgpmime/sgpgme.c
+ reflect fixed _with_disable parameters
+ * tools/kdeservicemenu/install.sh
+ use kdesu to prompt for root password if doing
+ global install/uninstall
+
2005-05-24 [colin] 1.0.4cvs13
* src/gtk/colorsel.c
( cvs diff -u -r 1.132 -r 1.133 AUTHORS; cvs diff -u -r 1.35 -r 1.36 INSTALL; cvs diff -u -r 1.28 -r 1.29 Makefile.am; cvs diff -u -r 1.41 -r 1.42 README.claws; cvs diff -u -r 0 -r 1 RELEASE_NOTES.claws; cvs diff -u -r 1.1364 -r 1.1365 configure.ac; cvs diff -u -r 0 -r 1 po/ca.po; cvs diff -u -r 1.71 -r 1.72 po/de.po; cvs diff -u -r 1.75 -r 1.76 po/es.po; cvs diff -u -r 0 -r 1 po/fi.po; cvs diff -u -r 1.54 -r 1.55 po/fr.po; cvs diff -u -r 1.42 -r 1.43 po/it.po; cvs diff -u -r 1.17 -r 1.18 po/pl.po; cvs diff -u -r 1.24 -r 1.25 po/ru.po; cvs diff -u -r 1.16 -r 1.17 po/sk.po; cvs diff -u -r 1.27 -r 1.28 po/sr.po; cvs diff -u -r 1.12 -r 1.13 po/zh_CN.po; cvs diff -u -r 1.151 -r 1.152 src/main.c; cvs diff -u -r 1.4 -r 1.5 src/partial_download.c; cvs diff -u -r 1.64 -r 1.65 src/common/utils.c; ) > 1.0.4cvs11.patchset
( cvs diff -u -r 1.2 -r 1.3 src/gtk/colorsel.c; ) > 1.0.4cvs12.patchset
( cvs diff -u -r 1.3 -r 1.4 src/gtk/colorsel.c; ) > 1.0.4cvs13.patchset
+( cvs diff -u -r 1.7 -r 1.8 sylpheed.spec.in; cvs diff -u -r 0 -r 1 doc/src/rfc2368.txt; cvs diff -u -r 1.193 -r 1.194 src/Makefile.am; cvs diff -u -r 1.20 -r 1.21 src/alertpanel.c; cvs diff -u -r 1.6 -r 1.7 src/alertpanel.h; cvs diff -u -r 1.485 -r 1.486 src/compose.c; cvs diff -u -r 1.264 -r 1.265 src/folder.c; cvs diff -u -r 1.260 -r 1.261 src/folderview.c; cvs diff -u -r 1.181 -r 1.182 src/inc.c; cvs diff -u -r 1.152 -r 1.153 src/main.c; cvs diff -u -r 1.64 -r 1.65 src/prefs_actions.c; cvs diff -u -r 1.234 -r 1.235 src/prefs_common.c; cvs diff -u -r 1.119 -r 1.120 src/prefs_common.h; cvs diff -u -r 1.13 -r 1.14 src/prefs_template.c; cvs diff -u -r 1.107 -r 1.108 src/procmime.c; cvs diff -u -r 1.178 -r 1.179 src/procmsg.c; cvs diff -u -r 1.37 -r 1.38 src/stock_pixmap.c; cvs diff -u -r 1.26 -r 1.27 src/stock_pixmap.h; cvs diff -u -r 1.459 -r 1.460 src/summaryview.c; cvs diff -u -r 1.11 -r 1.12 src/common/nntp.c; cvs diff -u -r 1.18 -r 1.19 src/common/socket.c; cvs diff -u -r 1.4 -r 1.5 src/common/template.c; cvs diff -u -r 0 -r 1 src/pixmaps/clip_gpg_signed.xpm; cvs diff -u -r 1.19 -r 1.20 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 1.6 -r 1.7 src/plugins/pgpmime/sgpgme.c; cvs diff -u -r 1.2 -r 1.3 tools/kdeservicemenu/install.sh; ) > 1.0.4cvs14.patchset
MICRO_VERSION=4
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=13
+EXTRA_VERSION=14
EXTRA_RELEASE=
if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
--- /dev/null
+
+
+
+
+
+
+Network Working Group P. Hoffman
+Request for Comments: 2368 Internet Mail Consortium
+Updates: 1738, 1808 L. Masinter
+Category: Standards Track Xerox Corporation
+ J. Zawinski
+ Netscape Communications
+ July 1998
+
+
+ The mailto URL scheme
+
+Status of this Memo
+
+ This document specifies an Internet standards track protocol for the
+ Internet community, and requests discussion and suggestions for
+ improvements. Please refer to the current edition of the "Internet
+ Official Protocol Standards" (STD 1) for the standardization state
+ and status of this protocol. Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (1998). All Rights Reserved.
+
+Abstract
+
+ This document defines the format of Uniform Resource Locators (URL)
+ for designating electronic mail addresses. It is one of a suite of
+ documents which replace RFC 1738, 'Uniform Resource Locators', and
+ RFC 1808, 'Relative Uniform Resource Locators'. The syntax of
+ 'mailto' URLs from RFC 1738 is extended to allow creation of more RFC
+ 822 messages by allowing the URL to express additional header and
+ body fields.
+
+1. Introduction
+
+ The mailto URL scheme is used to designate the Internet mailing
+ address of an individual or service. In its simplest form, a mailto
+ URL contains an Internet mail address.
+
+ For greater functionality, because interaction with some resources
+ may require message headers or message bodies to be specified as well
+ as the mail address, the mailto URL scheme is extended to allow
+ setting mail header fields and the message body.
+
+2. Syntax of a mailto URL
+
+ Following the syntax conventions of RFC 1738 [RFC1738], a "mailto"
+ URL has the form:
+
+
+
+Hoffman, et. al. Standards Track [Page 1]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+ mailtoURL = "mailto:" [ to ] [ headers ]
+ to = #mailbox
+ headers = "?" header *( "&" header )
+ header = hname "=" hvalue
+ hname = *urlc
+ hvalue = *urlc
+
+ "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
+ consists of zero or more comma-separated mail addresses, possibly
+ including "phrase" and "comment" components. Note that all URL
+ reserved characters in "to" must be encoded: in particular,
+ parentheses, commas, and the percent sign ("%"), which commonly occur
+ in the "mailbox" syntax.
+
+ "hname" and "hvalue" are encodings of an RFC 822 header name and
+ value, respectively. As with "to", all URL reserved characters must
+ be encoded.
+
+ The special hname "body" indicates that the associated hvalue is the
+ body of the message. The "body" hname should contain the content for
+ the first text/plain body part of the message. The mailto URL is
+ primarily intended for generation of short text messages that are
+ actually the content of automatic processing (such as "subscribe"
+ messages for mailing lists), not general MIME bodies.
+
+ Within mailto URLs, the characters "?", "=", "&" are reserved.
+
+ Because the "&" (ampersand) character is reserved in HTML, any mailto
+ URL which contains an ampersand must be spelled differently in HTML
+ than in other contexts. A mailto URL which appears in an HTML
+ document must use "&" instead of "&".
+
+ Also note that it is legal to specify both "to" and an "hname" whose
+ value is "to". That is,
+
+ mailto:addr1%2C%20addr2
+
+ is equivalent to
+
+ mailto:?to=addr1%2C%20addr2
+
+ is equivalent to
+
+ mailto:addr1?to=addr2
+
+ 8-bit characters in mailto URLs are forbidden. MIME encoded words (as
+ defined in [RFC2047]) are permitted in header values, but not for any
+ part of a "body" hname.
+
+
+
+Hoffman, et. al. Standards Track [Page 2]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+3. Semantics and operations
+
+ A mailto URL designates an "internet resource", which is the mailbox
+ specified in the address. When additional headers are supplied, the
+ resource designated is the same address, but with an additional
+ profile for accessing the resource. While there are Internet
+ resources that can only be accessed via electronic mail, the mailto
+ URL is not intended as a way of retrieving such objects
+ automatically.
+
+ In current practice, resolving URLs such as those in the "http"
+ scheme causes an immediate interaction between client software and a
+ host running an interactive server. The "mailto" URL has unusual
+ semantics because resolving such a URL does not cause an immediate
+ interaction. Instead, the client creates a message to the designated
+ address with the various header fields set as default. The user can
+ edit the message, send this message unedited, or choose not to send
+ the message. The operation of how any URL scheme is resolved is not
+ mandated by the URL specifications.
+
+4. Unsafe headers
+
+ The user agent interpreting a mailto URL SHOULD choose not to create
+ a message if any of the headers are considered dangerous; it may also
+ choose to create a message with only a subset of the headers given in
+ the URL. Only the Subject, Keywords, and Body headers are believed
+ to be both safe and useful.
+
+ The creator of a mailto URL cannot expect the resolver of a URL to
+ understand more than the "subject" and "body" headers. Clients that
+ resolve mailto URLs into mail messages should be able to correctly
+ create RFC 822-compliant mail messages using the "subject" and "body"
+ headers.
+
+5. Encoding
+
+ RFC 1738 requires that many characters in URLs be encoded. This
+ affects the mailto scheme for some common characters that might
+ appear in addresses, headers or message contents. One such character
+ is space (" ", ASCII hex 20). Note the examples above that use "%20"
+ for space in the message body. Also note that line breaks in the
+ body of a message MUST be encoded with "%0D%0A".
+
+ People creating mailto URLs must be careful to encode any reserved
+ characters that are used in the URLs so that properly-written URL
+ interpreters can read them. Also, client software that reads URLs
+ must be careful to decode strings before creating the mail message so
+
+
+
+
+Hoffman, et. al. Standards Track [Page 3]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+ that the mail messages appear in a form that the recipient will
+ understand. These strings should be decoded before showing the user
+ the message.
+
+ The mailto URL scheme is limited in that it does not provide for
+ substitution of variables. Thus, a message body that must include a
+ user's email address can not be encoded using the mailto URL. This
+ limitation also prevents mailto URLs that are signed with public keys
+ and other such variable information.
+
+6. Examples
+
+ URLs for an ordinary individual mailing address:
+
+ <mailto:chris@example.com>
+
+ A URL for a mail response system that requires the name of the file
+ in the subject:
+
+ <mailto:infobot@example.com?subject=current-issue>
+
+ A mail response system that requires a "send" request in the body:
+
+ <mailto:infobot@example.com?body=send%20current-issue>
+
+ A similar URL could have two lines with different "send" requests (in
+ this case, "send current-issue" and, on the next line, "send index".)
+
+ <mailto:infobot@example.com?body=send%20current-
+ issue%0D%0Asend%20index>
+
+ An interesting use of your mailto URL is when browsing archives of
+ messages. Each browsed message might contain a mailto URL like:
+
+ <mailto:foobar@example.com?In-Reply-
+ To=%3c3469A91.D10AF4C@example.com>
+
+ A request to subscribe to a mailing list:
+
+ <mailto:majordomo@example.com?body=subscribe%20bamboo-l>
+
+ A URL for a single user which includes a CC of another user:
+
+ <mailto:joe@example.com?cc=bob@example.com&body=hello>
+
+ Another way of expressing the same thing:
+
+ <mailto:?to=joe@example.com&cc=bob@example.com&body=hello>
+
+
+
+Hoffman, et. al. Standards Track [Page 4]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+ Note the use of the "&" reserved character, above. The following
+ example, by using "?" twice, is incorrect:
+
+ <mailto:joe@example.com?cc=bob@example.com?body=hello> ; WRONG!
+
+ According to RFC 822, the characters "?", "&", and even "%" may occur
+ in addr-specs. The fact that they are reserved characters in this URL
+ scheme is not a problem: those characters may appear in mailto URLs,
+ they just may not appear in unencoded form. The standard URL encoding
+ mechanisms ("%" followed by a two-digit hex number) must be used in
+ certain cases.
+
+ To indicate the address "gorby%kremvax@example.com" one would do:
+
+ <mailto:gorby%25kremvax@example.com>
+
+ To indicate the address "unlikely?address@example.com", and include
+ another header, one would do:
+
+ <mailto:unlikely%3Faddress@example.com?blat=foop>
+
+ As described above, the "&" (ampersand) character is reserved in HTML
+ and must be replacded with "&". Thus, a complex URL that has
+ internal ampersands might look like:
+
+ Click
+ <a href="mailto:?to=joe@xyz.com&cc=bob@xyz.com&body=hello">
+ mailto:?to=joe@xyz.com&cc=bob@xyz.com&body=hello</a> to
+ send a greeting message to <i>Joe and Bob</i>.
+
+7. Security Considerations
+
+ The mailto scheme can be used to send a message from one user to
+ another, and thus can introduce many security concerns. Mail messages
+ can be logged at the originating site, the recipient site, and
+ intermediary sites along the delivery path. If the messages are not
+ encoded, they can also be read at any of those sites.
+
+ A mailto URL gives a template for a message that can be sent by mail
+ client software. The contents of that template may be opaque or
+ difficult to read by the user at the time of specifying the URL.
+ Thus, a mail client should never send a message based on a mailto URL
+ without first showing the user the full message that will be sent
+ (including all headers that were specified by the mailto URL), fully
+ decoded, and asking the user for approval to send the message as
+ electronic mail. The mail client should also make it clear that the
+ user is about to send an electronic mail message, since the user may
+ not be aware that this is the result of a mailto URL.
+
+
+
+Hoffman, et. al. Standards Track [Page 5]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+ A mail client should never send anything without complete disclosure
+ to the user of what is will be sent; it should disclose not only the
+ message destination, but also any headers. Unrecognized headers, or
+ headers with values inconsistent with those the mail client would
+ normally send should be especially suspect. MIME headers (MIME-
+ Version, Content-*) are most likely inappropriate, as are those
+ relating to routing (From, Bcc, Apparently-To, etc.)
+
+ Note that some headers are inherently unsafe to include in a message
+ generated from a URL. For example, headers such as "From:", "Bcc:",
+ and so on, should never be interpreted from a URL. In general, the
+ fewer headers interpreted from the URL, the less likely it is that a
+ sending agent will create an unsafe message.
+
+ Examples of problems with sending unapproved mail include:
+
+ * mail that breaks laws upon delivery, such as making illegal
+ threats;
+
+ * mail that identifies the sender as someone interested in breaking
+ laws;
+
+ * mail that identifies the sender to an unwanted third party;
+
+ * mail that causes a financial charge to be incurred on the sender;
+
+ * mail that causes an action on the recipient machine that causes
+ damage that might be attributed to the sender.
+
+ Programs that interpret mailto URLs should ensure that the SMTP
+ "From" address is set and correct.
+
+8. IANA Considerations
+
+ This document changes the definition of the mailto: URI scheme; any
+ registry of URI schemes should refer to this document rather than its
+ predecessor, RFC 1738.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hoffman, et. al. Standards Track [Page 6]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+9. References
+
+ [RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text
+ Messages", STD 11, RFC 822, August 1982.
+
+ [RFC1738] Berners-Lee, T., Masinter, L., and M. McCahill, Editors,
+ "Uniform Resource Locators (URL)", RFC 1738, December 1994.
+
+ [RFC1808] Fielding, R., "Relative Uniform Resource Locators", RFC
+ 1808, June 1995.
+
+ [RFC2047] Moore, K., "MIME Part Three: Message Header Extensions for
+ Non-ASCII Text", RFC 2047, November 1996.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hoffman, et. al. Standards Track [Page 7]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+A. Change from RFC 1738
+
+ RFC 1738 defined only a simple 'mailto' with no headers, just an
+ addr-spec (not a full mailbox.) However, required usage and
+ implementation has led to the development of an extended syntax that
+ included more header fields.
+
+B. Acknowledgments
+
+ This document was derived from RFC 1738 and RFC 1808 [RFC1808]; the
+ acknowledgments from those specifications still applies.
+
+ The following people contributed to this memo or had and discussed
+ similar ideas for mailto.
+
+ Harald Alvestrand
+ Bryan Costales
+ Steve Dorner
+ Al Gilman
+ Mark Joseph
+ Laurence Lundblade
+ Keith Moore
+ Jacob Palme
+ Michael Patton
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hoffman, et. al. Standards Track [Page 8]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+C. Author Contact Information
+
+ Paul E. Hoffman
+ Internet Mail Consortium
+ 127 Segre Place
+ Santa Cruz, CA 95060 USA
+
+ EMail: phoffman@imc.org
+
+
+ Larry Masinter
+ Xerox Corporation
+ 3333 Coyote Hill Road
+ Palo Alto, CA 94304 USA
+
+ EMail: masinter@parc.xerox.com
+
+
+ Jamie Zawinski
+ Netscape Communications Corp.
+ 501 East Middlefield Road
+ Mountain View, CA 94043 USA
+
+ EMail: jwz@netscape.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hoffman, et. al. Standards Track [Page 9]
+
+RFC 2368 The mailto URL scheme July 1998
+
+
+D. Full Copyright Statement
+
+ Copyright (C) The Internet Society (1998). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Hoffman, et. al. Standards Track [Page 10]
+
pixmaps/check_spelling.xpm \
pixmaps/clipkey.xpm \
pixmaps/clip.xpm \
+ pixmaps/clip_gpg_signed.xpm \
pixmaps/close.xpm \
pixmaps/complete.xpm \
pixmaps/continue.xpm \
AlertValue alertpanel_message_with_disable(const gchar *title,
const gchar *message,
- gint alert_type)
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label,
+ gint alert_type)
{
if (alertpanel_is_open)
return 0;
else
alertpanel_is_open = TRUE;
- alertpanel_create(title, message, NULL, NULL, NULL, TRUE, NULL, alert_type);
+ alertpanel_create(title, message, button1_label, button2_label,
+ button3_label, TRUE, NULL, alert_type);
alertpanel_show();
return value;
AlertValue alertpanel_message_with_disable (const gchar *title,
const gchar *message,
+ const gchar *button1_label,
+ const gchar *button2_label,
+ const gchar *button3_label,
gint alert_type);
void alertpanel_notice (const gchar *format,
SESSION(session)->destroy = nntp_session_destroy;
session->group = NULL;
-
+
+ nntp_mode(session, FALSE);
+
if (userid && passwd) {
gint ok;
return -1;
case SSL_ERROR_ZERO_RETURN:
return 0;
+ case SSL_ERROR_SYSCALL:
+ g_warning("SSL_peek() returned syscall error. errno=%d\n", errno);
+ return -1;
default:
g_warning("SSL_peek() returned error %d, ret = %d\n", err, ret);
if (ret == 0)
if (tmpl->bcc && *tmpl->bcc != '\0')
fprintf(fp, "Bcc: %s\n", tmpl->bcc);
fputs("\n", fp);
- fwrite(tmpl->value, sizeof(gchar) * strlen(tmpl->value), 1, fp);
+ if (tmpl->value && *tmpl->value != '\0')
+ fwrite(tmpl->value, sizeof(gchar) * strlen(tmpl->value), 1, fp);
+ else
+ fwrite("", sizeof(gchar), 1, fp);
+
fclose(fp);
g_free(filename);
}
{
gchar *to = NULL;
gchar *cc = NULL;
- gchar *bcc = NULL;
gchar *subject = NULL;
gchar *body = NULL;
- scan_mailto_url(mailto, &to, &cc, &bcc, &subject, &body);
+ scan_mailto_url(mailto, &to, &cc, NULL, &subject, &body);
if (to)
compose_entry_append(compose, to, COMPOSE_TO);
if (cc)
compose_entry_append(compose, cc, COMPOSE_CC);
- if (bcc)
- compose_entry_append(compose, bcc, COMPOSE_BCC);
if (subject)
gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), subject);
if (body) {
g_free(to);
g_free(cc);
- g_free(bcc);
g_free(subject);
g_free(body);
}
} else if (mimeinfo->disposition == DISPOSITIONTYPE_UNKNOWN &&
mimeinfo->type != MIMETYPE_TEXT &&
mimeinfo->type != MIMETYPE_MULTIPART) {
- procmsg_msginfo_set_flags(msginfo, 0, MSG_HAS_ATTACHMENT);
+ if (!mimeinfo->subtype
+ || strcmp(mimeinfo->subtype, "pgp-signature"))
+ procmsg_msginfo_set_flags(msginfo, 0, MSG_HAS_ATTACHMENT);
}
/* don't descend below top level message for signed and encrypted info */
folder_item_update_freeze();
while (msglist != NULL) {
MsgInfo *msginfo = (MsgInfo *)msglist->data;
-
+ if (MSG_IS_LOCKED(msginfo->flags)) {
+ msglist = msglist->next;
+ continue;
+ }
ret = folder_item_remove_msg(item, msginfo->msgnum);
if (ret != 0) break;
msgcache_remove_msg(item->cache, msginfo->msgnum);
if (event->button == 1) {
folderview->open_folder = TRUE;
+
+ if (event->type == GDK_2BUTTON_PRESS) {
+ if (clist->selection) {
+ GtkCTreeNode *node;
+
+ node = GTK_CTREE_NODE(clist->selection->data);
+ if (node)
+ gtk_ctree_toggle_expansion(
+ GTK_CTREE(ctree),
+ node);
+ }
+ }
return;
}
for (cur = mlist ; cur != NULL ; cur = cur->next) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
+ if (MSG_IS_LOCKED(msginfo->flags))
+ continue;
/* is it partially received? (partial_recv isn't cached) */
if (msginfo->total_size != 0 &&
msginfo->size != (off_t)msginfo->total_size)
src_node = gtk_ctree_find_by_row_data(GTK_CTREE(folderview->ctree), NULL, from_folder);
from_parent = folder_item_parent(from_folder);
+
+ if (prefs_common.warn_dnd) {
+ buf = g_strdup_printf(_("Do you really want to move folder `%s' to a "
+ "sub-folder of `%s' ?"), from_folder->name,
+ to_folder->name);
+ status = alertpanel_message_with_disable(_("Move folder"), buf,
+ _("Yes"), _("No"), NULL, ALERT_QUESTION);
+ g_free(buf);
+
+ if (status != G_ALERTDEFAULT
+ && status != (G_ALERTDEFAULT | G_ALERTDISABLE))
+ return;
+ if (status & G_ALERTDISABLE)
+ prefs_common.warn_dnd = FALSE;
+ }
+
buf = g_strdup_printf(_("Moving %s to %s..."), from_folder->name, to_folder->name);
STATUSBAR_PUSH(folderview->mainwin, buf);
g_free(buf);
/* process messages */
folder_item_update_freeze();
for(msglist_element = msglist; msglist_element != NULL; msglist_element = msglist_element->next) {
+ gchar *filename;
msginfo = (MsgInfo *) msglist_element->data;
- if (!pop3_session->ac_prefs->filter_on_recv || !procmsg_msginfo_filter(msginfo))
+ filename = folder_item_fetch_msg(processing, msginfo->msgnum);
+ g_free(filename);
+ if (!pop3_session->ac_prefs->filter_on_recv ||
+ !procmsg_msginfo_filter(msginfo))
folder_item_move_msg(inbox, msginfo);
procmsg_msginfo_free(msginfo);
}
g_free(filename);
/* delete temporary files */
+ remove_all_files(get_tmp_dir());
remove_all_files(get_mime_tmp_dir());
close_log_file();
--- /dev/null
+/* XPM */
+static char * clip_gpg_signed_xpm[] = {
+"11 12 21 1",
+" c None",
+". c #000000",
+"+ c #D39C0A",
+"@ c #E4AB0B",
+"# c #DA7D25",
+"$ c #E4B600",
+"% c #E96B00",
+"& c #DA2D01",
+"* c #E9AD00",
+"= c #E94500",
+"- c #B11E04",
+"; c #E99400",
+"> c #E02F00",
+", c #E97800",
+"' c #CA2B04",
+") c #E55902",
+"! c #E9CE07",
+"~ c #D64707",
+"{ c #E9CF16",
+"] c #C86B37",
+"^ c #E6CF8D",
+" ",
+" ... ",
+" . .+@#",
+" . .$%&",
+" .. ..*=-",
+" .. ..;> ",
+" .. ..,' ",
+" .. ..) ",
+" . ..!.~ ",
+" . {.] ",
+" . ^. ",
+" .... "};
static PrivacySystem pgpmime_system = {
"pgpmime", /* id */
- "PGP/MIME", /* name */
+ "PGP MIME", /* name */
pgpmime_free_privacydata, /* free_privacydata */
(_("Warning"),
_("GnuPG is not installed properly, or needs "
"to be upgraded.\n"
- "OpenPGP support disabled."), ALERT_WARNING);
+ "OpenPGP support disabled."),
+ NULL, NULL, NULL, ALERT_WARNING);
if (val & G_ALERTDISABLE)
prefs_gpg_get_config()->gpg_warning = FALSE;
}
#include "prefs_actions.h"
#include "action.h"
#include "description_window.h"
+#include "gtkutils.h"
static struct Actions
{
GtkWidget *actions_clist;
} actions;
+static int modified = FALSE;
+
/* widget creating functions */
static void prefs_actions_create (MainWindow *mainwin);
static void prefs_actions_set_dialog (void);
static void prefs_actions_register_cb(GtkWidget *w, gpointer data)
{
prefs_actions_clist_set_row(-1);
+ modified = FALSE;
}
static void prefs_actions_substitute_cb(GtkWidget *w, gpointer data)
if (!action) return;
prefs_actions_clist_set_row(row);
+ modified = FALSE;
}
static void prefs_actions_delete_cb(GtkWidget *w, gpointer data)
{
if (event && event->keyval == GDK_Escape)
prefs_actions_cancel(widget, data);
+ else {
+ GtkWidget *focused = gtkut_get_focused_child(
+ GTK_CONTAINER(widget));
+ if (focused && GTK_IS_EDITABLE(focused)) {
+ modified = TRUE;
+ }
+ }
+ return;
}
static void prefs_actions_cancel(GtkWidget *w, gpointer data)
{
+ if (modified && alertpanel(_("Entry not saved"),
+ _("The entry was not saved. Close anyway?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) {
+ return;
+ }
+ modified = FALSE;
prefs_actions_read_config();
gtk_widget_hide(actions.window);
inc_unlock();
MessageView *msgview;
Compose *compose;
+ if (modified && alertpanel(_("Entry not saved"),
+ _("The entry was not saved. Close anyway?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) {
+ return;
+ }
+ modified = FALSE;
prefs_actions_write_config();
/* Update mainwindow actions menu */
/* Quote */
{"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
"e.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry},
- {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%Q",
+ {"reply_quote_format", "On %d\\n%f wrote:\\n\\n%q",
&prefs_common.quotefmt, P_STRING, "e.text_quotefmt,
prefs_set_data_from_text, prefs_set_text},
NULL, NULL, NULL},
{"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
NULL, NULL, NULL},
+ {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
+ NULL, NULL, NULL},
{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
};
gint filteringwin_width;
gint filteringwin_height;
+ gint warn_dnd;
};
extern PrefsCommon prefs_common;
GtkWidget *text_value;
} templates;
+static int modified = FALSE;
+
/* widget creating functions */
static void prefs_template_window_create (void);
static void prefs_template_window_setup (void);
{
if (event && event->keyval == GDK_Escape)
prefs_template_cancel_cb();
+ else {
+ GtkWidget *focused = gtkut_get_focused_child(
+ GTK_CONTAINER(widget));
+ if (focused && GTK_IS_EDITABLE(focused)) {
+ modified = TRUE;
+ }
+ }
+ return;
}
static void prefs_template_ok_cb(void)
{
GSList *tmpl_list;
+ if (modified && alertpanel(_("Entry not saved"),
+ _("The entry was not saved. Close anyway?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) {
+ return;
+ }
+ modified = FALSE;
tmpl_list = prefs_template_get_list();
template_set_config(tmpl_list);
compose_reflect_prefs_all();
static void prefs_template_cancel_cb(void)
{
+ if (modified && alertpanel(_("Entry not saved"),
+ _("The entry was not saved. Close anyway?"),
+ _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) {
+ return;
+ }
+ modified = FALSE;
prefs_template_clear();
gtk_widget_hide(templates.window);
inc_unlock();
while ((ftell(infp) < readend) && (fgets(buf, sizeof(buf), infp) != NULL)) {
len = base64_decoder_decode(decoder, buf, outbuf);
if (len < 0) {
- g_warning("Bad BASE64 content\n");
- break;
+ g_warning("Bad BASE64 content.\n");
+ fwrite(_("[Error decoding BASE64]\n"),
+ sizeof(gchar),
+ strlen(_("[Error decoding BASE64]\n")),
+ tmpfp);
+ continue;
}
fwrite(outbuf, sizeof(gchar), len, tmpfp);
}
GSList *cur;
for (cur = mlist ; cur != NULL ; cur = cur->next) {
MsgInfo * msginfo = (MsgInfo *) cur->data;
- partial_mark_for_delete(msginfo);
+ if (MSG_IS_LOCKED(msginfo->flags))
+ continue;
+ if (msginfo->total_size != 0 &&
+ msginfo->size != (off_t)msginfo->total_size)
+ partial_mark_for_delete(msginfo);
+
procmsg_msginfo_free(msginfo);
}
#include "pixmaps/notice_error.xpm"
#include "pixmaps/notice_note.xpm"
#include "pixmaps/quicksearch.xpm"
+#include "pixmaps/clip_gpg_signed.xpm"
#include "pixmaps/gpg_signed.xpm"
#include "pixmaps/drafts_close.xpm"
#include "pixmaps/drafts_open.xpm"
{check_spelling_xpm , NULL, NULL, "check_spelling", NULL},
{clip_xpm , NULL, NULL, "clip", NULL},
{clipkey_xpm , NULL, NULL, "clipkey", NULL},
+ {clip_gpg_signed_xpm , NULL, NULL, "clip_gpg_signed", NULL},
{close_xpm , NULL, NULL, "close", NULL},
{complete_xpm , NULL, NULL, "complete", NULL},
{continue_xpm , NULL, NULL, "continue", NULL},
STOCK_PIXMAP_CHECK_SPELLING,
STOCK_PIXMAP_CLIP,
STOCK_PIXMAP_CLIP_KEY,
+ STOCK_PIXMAP_CLIP_GPG_SIGNED,
STOCK_PIXMAP_CLOSE,
STOCK_PIXMAP_COMPLETE,
STOCK_PIXMAP_CONTINUE,
static GdkBitmap *clipkeyxpmmask;
static GdkPixmap *gpgsignedxpm;
static GdkBitmap *gpgsignedxpmmask;
+static GdkPixmap *clipgpgsignedxpm;
+static GdkBitmap *clipgpgsignedxpmmask;
static void summary_free_msginfo_func (GtkCTree *ctree,
GtkCTreeNode *node,
&keyxpm, &keyxpmmask);
stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_GPG_SIGNED,
&gpgsignedxpm, &gpgsignedxpmmask);
+ stock_pixmap_gdk(summaryview->ctree, STOCK_PIXMAP_CLIP_GPG_SIGNED,
+ &clipgpgsignedxpm, &clipgpgsignedxpmmask);
if (!bold_style) {
bold_style = gtk_style_copy
item->sort_type == SORT_DESCENDING
? 0 : GTK_CLIST(ctree)->rows - 1);
}
- if (prefs_common.open_unread_on_enter ||
- prefs_common.always_show_msg) {
+ if (prefs_common.open_unread_on_enter) {
summary_unlock(summaryview);
summary_select_node(summaryview, node,
messageview_is_visible(summaryview->messageview),
gtkut_ctree_node_move_if_on_the_edge(ctree, row);
}
- if (val == 0) {
+ if (val == 0 && MSG_IS_UNREAD(msginfo->flags)) {
if (prefs_common.mark_as_read_delay) {
MarkAsReadData *data = g_new0(MarkAsReadData, 1);
data->summaryview = summaryview;
gtk_ctree_node_set_text(ctree, row, col_pos[S_COL_LOCKED], NULL);
}
- if (MSG_IS_SIGNED(flags)) {
+ if (MSG_IS_WITH_ATTACHMENT(flags) && MSG_IS_SIGNED(flags)) {
+ gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME],
+ clipgpgsignedxpm, clipgpgsignedxpmmask);
+ } else if (MSG_IS_SIGNED(flags)) {
gtk_ctree_node_set_pixmap(ctree, row, col_pos[S_COL_MIME],
gpgsignedxpm, gpgsignedxpmmask);
} else if (MSG_IS_WITH_ATTACHMENT(flags) && MSG_IS_ENCRYPTED(flags)) {
g_return_if_fail(to_folder != NULL);
msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (MSG_IS_LOCKED(msginfo->flags))
+ return;
+
procmsg_msginfo_set_to_folder(msginfo, to_folder);
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted--;
gint column, SummaryView *summaryview)
{
MsgInfo *msginfo;
+ gboolean marked_unread = FALSE;
- summary_status_show(summaryview);
+ if (column == -1 && GTK_CLIST(ctree)->selection
+ && GTK_CLIST(ctree)->selection->next) {
+ /* multiple selection */
+ summary_status_show(summaryview);
+ }
if (GTK_CLIST(ctree)->selection &&
GTK_CLIST(ctree)->selection->next) {
summary_status_show(summaryview);
} else if (!MSG_IS_REPLIED(msginfo->flags) &&
!MSG_IS_FORWARDED(msginfo->flags)) {
- summary_mark_row_as_unread(summaryview, row);
- summary_status_show(summaryview);
+ marked_unread = TRUE;
} else if (MSG_IS_REPLIED(msginfo->flags)) {
summary_find_answers(summaryview, msginfo);
return;
summaryview->display_msg = FALSE;
if (summaryview->displayed != row) {
summary_display_msg(summaryview, row);
+ if (marked_unread) {
+ summary_mark_row_as_unread(summaryview, row);
+ summary_status_show(summaryview);
+ }
return;
}
}
+
+ if (marked_unread) {
+ summary_mark_row_as_unread(summaryview, row);
+ summary_status_show(summaryview);
+ }
summary_set_menu_sensitive(summaryview);
toolbar_main_set_sensitive(summaryview->mainwin);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_KEY, &clipkeyxpm, &clipkeyxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_KEY, &keyxpm, &keyxpmmask);
stock_pixmap_gdk(ctree, STOCK_PIXMAP_GPG_SIGNED, &gpgsignedxpm, &gpgsignedxpmmask);
+ stock_pixmap_gdk(ctree, STOCK_PIXMAP_CLIP_GPG_SIGNED, &clipgpgsignedxpm, &clipgpgsignedxpmmask);
pixmap = stock_pixmap_widget(summaryview->hbox, STOCK_PIXMAP_DIR_OPEN);
gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4);
cp -r tools $RPM_BUILD_ROOT%{prefix}/share/sylpheed
rm $RPM_BUILD_ROOT%{prefix}/share/sylpheed/tools/Makefile*
mv $RPM_BUILD_ROOT%{prefix}/share/sylpheed/tools/README ./README.tools
-# fixing permissions
-pushd $RPM_BUILD_ROOT%{prefix}/share/sylpheed
-find . -name "*.xpm" -o -name ".directory" | xargs chmod 644
-popd
-
%clean
rm -rf $RPM_BUILD_ROOT
PREFIX=$(kde-config --prefix)
echo "Installing in $PREFIX ..."
if [ "$(id -u)" != "0" ]; then
- echo "You are not root, as would be expected."
- echo "However, we will still attempt a system-wide install."
- echo "But, you probably don't have permission."
+ exec kdesu "$0 --global"
fi
install_all
;;
PREFIX=$(kde-config --prefix)
echo "Uninstalling in $PREFIX ..."
if [ "$(id -u)" != "0" ]; then
- echo "You are not root, if you have any global installs, you will probably not have permission to remove them."
+ exec kdesu "$0 --uninstall-global"
fi
uninstall_all
;;