+2004-12-13
+
+ * src/compose.c: compose_wrap_line_all_full(): only insert space
+ when joining lines if the first character of the next line is not
+ space, or it's a boundary between multi- and single-byte characters.
+
+2004-12-13
+
+ * src/action.c: parse_append_filename(): escape special characters
+ (thanks to IWAMOTO Kouichi).
+ * src/utils.c: subst_for_filename(): also substitute single quote.
+
+2004-12-10
+
+ * src/compose.c: compose_wrap_line_all_full(): fixed joining line
+ problem when the first character of the next line is not
+ alphanumeric.
+
+2004-12-09
+
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb()
+ src/compose.c: compose_send(), compose_send_later_cb(): ask user
+ to switch to online if in offline mode when sending.
+
+2004-12-08
+
+ * src/imap.c: applied bitlength_clean_up.imap.c.patch that fixes the
+ integer length problem on 64-bit platforms (thanks to Alfons).
+
2004-12-03
* version 1.0.0beta4
+2004-12-14 [colin] 0.9.13cvs17.1
+
+ * ChangeLog
+ * ChangeLog.jp
+ * ChangeLog.claws
+ * src/action.c
+ * src/common/utils.c
+ * src/gtk/prefswindow.c
+ * src/gtk/gtkutils.c
+ * src/gtk/gtkutils.h
+ * src/plugins/spamassassin/libspamc.c
+ Sync with HEAD
+
2004-12-13 [colin] 0.9.13cvs14.1
* src/quote_fmt_parse.y
+2004-12-14 [colin] 0.9.13cvs17
+
+ * src/gtk/gtkutils.c
+ * src/gtk/gtkutils.h
+ * src/gtk/prefswindow.c
+ Catch Enter in prefswindow while in text
+ widget. Patch by Alfons.
+
+2004-12-14 [paul] 0.9.13cvs16
+
+ * ChangeLog
+ * ChangeLog.jp
+ * src/action.c
+ * src/compose.c
+ * src/common/utils.c
+ sync with main, see ChangeLog entries 2004-12-10
+ and 2004-12-13
+
+ * po/ru.po
+ updated by Pavlo Bohmat
+
+2004-12-13 [thorsten] 0.9.13cvs15
+
+ * src/plugins/spamassassin/libspamc.c
+ fix memleak
+
+2004-12-13 [colin] 0.9.13cvs14
+
+ * src/gtk/prefswindow.c
+ * src/gtk/pluginwindow.c
+ Fix key_pressed handlers
+
+2004-12-11 [colin] 0.9.13cvs13
+
+ * src/quote_fmt_parse.y
+ Rework quote_fmt_parse to use less local
+ arrays in local blocks, so it doesn't
+ freak out IBM's stack protector. Patch
+ by Alfons.
+
+2004-12-10 [colin] 0.9.13cvs12
+
+ * src/messageview.c
+ Fix logic error
+ * src/mainwindow.c
+ Fix corruptions when de-separating messageview
+
+2004-12-10 [paul] 0.9.13cvs11
+
+ * src/prefs_themes.c
+ use a different set of icons for the Preview
+
+2004-12-09 [colin] 0.9.13cvs10
+
+ * src/procmime.c
+ Fix procmime_encode_content doing horribly wrong
+ stuff when encoding to B64 from memory
+
+2004-12-08 [colin] 0.9.13cvs9
+
+ * src/gtk/colorlabel.c
+ Fix color label off-by-one
+ Patch by Alfons
+
+2004-12-08 [hoa] 0.9.13cvs8
+
+ * src/quote_fmt_parse.y
+ really fix buffer overflow
+
+2004-12-08 [colin] 0.9.13cvs7
+
+ * src/matcher_parser_parse.y
+ * src/msgcache.c
+ * src/prefs_matcher.c
+ * src/procheader.c
+ * src/matcher.c
+ * src/common/defs.h
+ Cache total_size and use that to speed up
+ 'partial' match.
+ Add 'partial' to the list of useable stuff
+ in filtering
+
+2004-12-08 [paul]
+
+ * po/sr.po
+ updated by URKE MMI
+
+2004-12-08 [colin] 0.9.13cvs6
+
+ * src/textview.c
+ Fix possible boundary overrun in
+ get_email_part(). Patch by Alfons
+
+2004-12-08 [hoa] 0.9.13cvs5
+
+ * src/quote_fmt_parse.y
+ fix buffer overflow
+ http://bugs.gentoo.org/show_bug.cgi?id=67253
+
+2004-12-07 [thorsten] 0.9.13cvs4
+
+ * src/procmime.c
+ fix leak introduced with 0.9.13cvs1
+
+2004-12-07 [keith] 0.9.13cvs3
+
+ * src/procmime.c
+ Fix typo
+
2004-12-07 [colin] 0.9.13cvs2
* AUTHORS
+2004-12-13
+
+ * src/compose.c: compose_wrap_line_all_full(): ¼¡¤Î¹Ô¤ÎºÇ½é¤Îʸ»ú¤¬
+ ¶õÇò¤Ç¤Ê¤¤¾ì¹ç¡¢¤Þ¤¿¤Ï¥Þ¥ë¥Á¥Ð¥¤¥È¤È¥·¥ó¥°¥ë¥Ð¥¤¥È¤Î¶³¦¤Î¾ì¹ç
+ ¤Î¤ß¹Ô·ë¹ç»þ¤Ë¶õÇò¤òÁÞÆþ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+
+2004-12-13
+
+ * src/action.c: parse_append_filename(): ÆÃÊÌʸ»ú¤ò¥¨¥¹¥±¡¼¥×¤¹¤ë
+ ¤è¤¦¤Ë¤·¤¿(IWAMOTO Kouichi ¤µ¤ó thanks)¡£
+ * src/utils.c: subst_for_filename(): ¥·¥ó¥°¥ë¥¯¥©¡¼¥È¤âÃÖ´¹¤¹¤ë
+ ¤è¤¦¤Ë¤·¤¿¡£
+
+2004-12-10
+
+ * src/compose.c: compose_wrap_line_all_full(): ¼¡¤Î¹Ô¤ÎºÇ½é¤Îʸ»ú¤¬
+ ±Ñ¿ô»ú¤Ç¤Ê¤¤¾ì¹ç¤Î¹Ô¤Î·ë¹ç¤ÎÌäÂê¤ò½¤Àµ¡£
+
+2004-12-09
+
+ * src/main.c: send_queue()
+ src/mainwindow.c: send_queue_cb()
+ src/compose.c: compose_send(), compose_send_later_cb(): Á÷¿®»þ¡¢
+ ¥ª¥Õ¥é¥¤¥ó¥â¡¼¥É¤Î¤È¤¤Ï ¥æ¡¼¥¶¤Ë¥ª¥ó¥é¥¤¥ó¤ËÀÚ¤êÂØ¤¨¤ë¤è¤¦¤Ë
+ Â¥¤¹¤è¤¦¤Ë¤·¤¿¡£
+
+2004-12-08
+
+ * src/imap.c: bitlength_clean_up.imap.c.patch ¤òŬÍÑ(64-bit ´Ä¶¤Ç¤Î
+ À°¿ôŤÎÌäÂê¤ò½¤Àµ) (Alfons ¤µ¤ó thanks)¡£
+
2004-12-03
* version 1.0.0beta4
( cvs diff -u -r 1.49.2.27 -r 1.49.2.28 src/procmime.c; ) > 0.9.13cvs10.1.patchset
( cvs diff -u -r 1.3.2.14 -r 1.3.2.15 src/prefs_themes.c; cvs diff -u -r 1.274.2.25 -r 1.274.2.26 src/mainwindow.c; cvs diff -u -r 1.94.2.36 -r 1.94.2.37 src/messageview.c; ) > 0.9.13cvs12.1.patchset
( cvs diff -u -r 1.22.2.5 -r 1.22.2.6 src/quote_fmt_parse.y; ) > 0.9.13cvs14.1.patchset
+( cvs diff -u -r 1.396.2.15 -r 1.396.2.16 ChangeLog; cvs diff -u -r 1.391.2.15 -r 1.391.2.16 ChangeLog.jp; cvs diff -u -r 1.2504.2.38 -r 1.2504.2.39 ChangeLog.claws; cvs diff -u -r 1.12.2.13 -r 1.12.2.14 src/action.c; cvs diff -u -r 1.36.2.17 -r 1.36.2.18 src/common/utils.c; cvs diff -u -r 1.12.2.10 -r 1.12.2.11 src/gtk/prefswindow.c; cvs diff -u -r 1.5.2.5 -r 1.5.2.6 src/gtk/gtkutils.c; cvs diff -u -r 1.4.2.4 -r 1.4.2.5 src/gtk/gtkutils.h; cvs diff -u -r 1.4.2.3 -r 1.4.2.4 src/plugins/spamassassin/libspamc.c; ) > 0.9.13cvs17.1.patchset
MICRO_VERSION=13
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=14
+EXTRA_VERSION=17
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=.1
static gboolean parse_append_filename(GString *cmd, MsgInfo *msginfo)
{
gchar *filename;
+ gchar *p;
g_return_val_if_fail(msginfo, FALSE);
filename = procmsg_get_message_file(msginfo);
if (filename) {
- g_string_append(cmd, filename);
+ g_string_append_c(cmd, '"');
+ for (p = filename; *p != '\0'; p++) {
+ switch (*p) {
+ case '$':
+ case '"':
+ case '`':
+ case '\\':
+ g_string_append_c(cmd, '\\');
+ break;
+ default:
+ break;
+ }
+ g_string_append_c(cmd, *p);
+ }
+ g_string_append_c(cmd, '"');
g_free(filename);
} else {
alertpanel_error(_("Could not get message file %d"),
action_p = strstr(action, ": ");
if (action_p && action_p[2] &&
action_get_type(&action_p[2]) != ACTION_ERROR) {
- action_p[0] = 0x00;
+ action_p[0] = '\0';
menu_path = g_strdup_printf("%s/%s", branch_path,
action);
ifentry.path = menu_path;
}
debug_print("Forking child and grandchild.\n");
+ debug_print("Executing: /bin/sh -c %s\n", cmd);
pid = fork();
if (pid == 0) { /* Child */
cmdline[0] = "sh";
cmdline[1] = "-c";
cmdline[2] = cmd;
- cmdline[3] = 0;
+ cmdline[3] = NULL;
execvp("/bin/sh", cmdline);
perror("execvp");
void subst_for_filename(gchar *str)
{
- subst_chars(str, " \t\r\n\"/\\", '_');
+ subst_chars(str, " \t\r\n\"'/\\", '_');
}
void subst_for_shellsafe_filename(gchar *str)
else
return NULL;
}
+
+/*!
+ *\brief Tries to find a focused child using a lame strategy
+ */
+GtkWidget *gtkut_get_focused_child(GtkContainer *parent)
+{
+ GtkWidget *result = NULL;
+ GList *child_list = NULL;
+ GList *c;
+
+ g_return_val_if_fail(parent, NULL);
+
+ /* Get children list and see which has the focus. */
+ child_list = gtk_container_get_children(parent);
+ if (!child_list)
+ return NULL;
+
+ for (c = child_list; c != NULL; c = g_list_next(c)) {
+ if (c->data && GTK_IS_WIDGET(c->data)) {
+ if (GTK_WIDGET_HAS_FOCUS(GTK_WIDGET(c->data))) {
+ result = GTK_WIDGET(c->data);
+ break;
+ }
+ }
+ }
+
+ /* See if the returned widget is a container itself; if it is,
+ * see if one of its children is focused. If the focused
+ * container has no focused child, it is itself a focusable
+ * child, and has focus. */
+ if (result && GTK_IS_CONTAINER(result)) {
+ GtkWidget *tmp = gtkut_get_focused_child(GTK_CONTAINER(result));
+
+ if (tmp)
+ result = tmp;
+ } else {
+ /* Try the same for each container in the chain */
+ for (c = child_list; c != NULL && !result; c = g_list_next(c)) {
+ if (c->data && GTK_IS_WIDGET(c->data)
+ && GTK_IS_CONTAINER(c->data)) {
+ result = gtkut_get_focused_child
+ (GTK_CONTAINER(c->data));
+ }
+ }
+
+ }
+
+ g_list_free(child_list);
+
+ return result;
+}
guint start_pos,
guint text_len);
gchar *gtkut_text_view_get_selection (GtkTextView *textview);
-
+GtkWidget *gtkut_get_focused_child (GtkContainer *parent);
#endif /* __GTKUTILS_H__ */
#include <string.h>
#include <gtk/gtk.h>
+#include <gtk/gtktext.h>
#include <gdk/gdkkeysyms.h>
#include "intl.h"
}
static gboolean prefswindow_key_pressed(GtkWidget *widget, GdkEventKey *event,
- gpointer data)
+ PrefsWindow *data)
{
+ GtkWidget *focused_child;
+
if (event) {
switch (event->keyval) {
case GDK_Escape :
break;
case GDK_Return :
case GDK_KP_Enter :
- ok_button_released(NULL, data);
+ focused_child = gtkut_get_focused_child
+ (GTK_CONTAINER(data->notebook));
+ /* Press ok, if the focused child is not a text view
+ * and text (anything that accepts return) (can pass
+ * NULL to any of the GTK_xxx() casts) */
+ if (!GTK_IS_TEXT_VIEW(focused_child))
+ ok_button_released(NULL, data);
break;
default:
break;
void message_cleanup(struct message *m)
{
- if (m->out != NULL && m->pre != NULL && m->out != m->pre+m->pre_len)
+ if (m->out != NULL)
free(m->out);
if (m->raw != NULL)
free(m->raw);