sync with 0.8.6cvs22
authorPaul Mangan <paul@claws-mail.org>
Wed, 18 Dec 2002 09:48:44 +0000 (09:48 +0000)
committerPaul Mangan <paul@claws-mail.org>
Wed, 18 Dec 2002 09:48:44 +0000 (09:48 +0000)
ChangeLog
ChangeLog.claws
ChangeLog.jp
configure.in
src/Makefile.am
src/account.c
src/codeconv.c
src/gtkutils.c
src/gtkutils.h
src/imap.c

index d4fda65..4468aa6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2002-12-18
+
+       * src/main.c: process command line option before gtk_init() to
+         enable remote operation without X (thanks to Ruslan N. Balkin).
+       * src/codeconv.c: conv_encode_header(): fixed a potential buffer
+         overflow.
+
+2002-12-18
+
+       * src/Makefile.am: changed $(target_alias) to $(target_triplet)
+         (the spec of autotools seems to be changed).
+
+2002-12-18
+
+       * src/imap.c: get path separator using LIST command if server
+         doesn't support NAMESPACE (based on the patch by Brian Sammon).
+         imap_parse_list(): added an argument to return path separator.
+         imap_get_namespace_by_list(): new.
+
+2002-12-17
+
+       * src/addr_compl.c: add_address(): removed the debug print.
+       * src/gtkutils.[ch]: gtkut_window_popup()
+         src/mainwindow.c: main_window_popup(): applied the patch to fix
+         the behavior of window popup from Sergey Vlasov (thanks!)
+       * src/account.c: account_edit_create(): use signal_connect_after
+         for row_move signal to fix the row position bug.
+         account_row_moved(): scroll the CList half page.
+       * src/prefs_filter.c: prefs_filter_row_move(): scroll the CList
+         half page.
+       * src/summaryview.c: summary_reply(): use selection text only if
+         the displayed message is selected (thanks to Sergey Vlasov).
+
 2002-12-13
 
        * src/codeconv.c: conv_encode_header(): reimplemented the routine
index 57e6f1c..4bf7c57 100644 (file)
@@ -1,24 +1,34 @@
-2002-12-14 [christoph] 0.8.6claws114
+2002-12-18 [paul]      0.8.6claws115
+
+       * src/Makefile.am
+       * src/account.c
+       * src/codeconv.c
+       * src/gtkutils.[ch]
+       * src/imap.c
+               sync with 0.8.6cvs22.
+               see ChangeLog 2002-12-17 and 2002-12-18
+
+2002-12-17 [christoph] 0.8.6claws114
 
        * src/imap.c
                o don't create a session if imap greeting fails
                o don't close socket when authentication fails
                  this is done by imap_session_destroy
 
-2002-12-14 [thorsten]  0.8.6claws113
+2002-12-17 [thorsten]  0.8.6claws113
 
        * tools/Makefile.am
          tools/README
          tools/google_msgid.pl ** NEW FILE **
                Added "search for message-id" script and doc
 
-2002-12-14 [thorsten]  0.8.6claws112
+2002-12-17 [thorsten]  0.8.6claws112
 
        * po/hu.po
                Updated hungarian translation
                (updated by Gal Zoltan)
 
-2002-12-14 [christoph] 0.8.6claws111
+2002-12-16 [christoph] 0.8.6claws111
 
        * src/addr_compl.c
                remove stupid addressbook dump to debug output
index ace5026..5d7fb22 100644 (file)
@@ -1,3 +1,39 @@
+2002-12-18
+
+       * src/main.c: X ¤Ê¤·¤Ç¥ê¥â¡¼¥ÈÁàºî¤ò²Äǽ¤Ë¤¹¤ë¤¿¤á¤Ë gtk_init()
+         ¤ÎÁ°¤Ë¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ò½èÍý¤¹¤ë¤è¤¦¤Ë¤·¤¿(Ruslan N.
+         Balkin ¤µ¤ó thanks)¡£
+       * src/codeconv.c: conv_encode_header(): ÀøºßŪ¤Ê¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼
+         ¥Õ¥í¡¼¤ò½¤Àµ¡£
+
+2002-12-18
+
+       * src/Makefile.am: $(target_alias) ¤ò $(target_triplet) ¤ËÊѹ¹
+         (autotools ¤Î»ÅÍÍÊѹ¹¤ÎÌÏÍÍ)¡£
+
+2002-12-18
+
+       * src/imap.c: ¥µ¡¼¥Ð¤¬ NAMESPACE ¥³¥Þ¥ó¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤È¤­
+         LIST ¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¥Ñ¥¹¥»¥Ñ¥ì¡¼¥¿¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë¤·¤¿(Brian
+         Sammon ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤Ë´ð¤Å¤¯)¡£
+         imap_parse_list(): ¥Ñ¥¹¥»¥Ñ¥ì¡¼¥¿¤òÊÖ¤¹¤¿¤á¤Î°ú¿ô¤òÄɲá£
+         imap_get_namespace_by_list(): ¿·µ¬¡£
+
+2002-12-17
+
+       * src/addr_compl.c: add_address(): ¥Ç¥Ð¥Ã¥°½ÐÎϤòºï½ü¡£
+       * src/gtkutils.[ch]: gtkut_window_popup()
+         src/mainwindow.c: main_window_popup(): ¥¦¥£¥ó¥É¥¦¤Î¥Ý¥Ã¥×¥¢¥Ã¥×¤Î
+         µóÆ°¤ò½¤Àµ¤¹¤ë Sergey Vlasov ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)
+       * src/account.c: account_edit_create(): row_move ¥·¥°¥Ê¥ë¤Ë
+         signal_connect_after ¤ò»ÈÍѤ·¤Æ¹Ô°ÌÃ֤ΥХ°¤ò½¤Àµ¡£
+         account_row_moved(): CList ¤òȾ¥Ú¡¼¥¸¥¹¥¯¥í¡¼¥ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+       * src/prefs_filter.c: prefs_filter_row_move(): CList ¤òȾ¥Ú¡¼¥¸
+         ¥¹¥¯¥í¡¼¥ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+       * src/summaryview.c: summary_reply(): É½¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤¬
+         ÁªÂò¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Î¤ßÁªÂòÉô¥Æ¥­¥¹¥È¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿(Sergey
+         Vlasov ¤µ¤ó thanks)¡£
+
 2002-12-13
 
        * src/codeconv.c: conv_encode_header(): MIME ¥Ø¥Ã¥À¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
index fddd191..d0f2c40 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=6
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws114
+EXTRA_VERSION=claws115
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index 423277a..33350a2 100644 (file)
@@ -233,7 +233,7 @@ CPPFLAGS = \
        -DLOCALEDIR=\""$(localedir)"\" \
        -DMANUALDIR=\""$(manualdir)"\" \
        -DFAQDIR=\""$(faqdir)"\" \
-       -DTARGET_ALIAS=\""$(target_alias)"\" \
+       -DTARGET_ALIAS=\""$(target_triplet)"\" \
        -DSYSCONFDIR=\""$(sysconfdir)"\"
 
 YFLAGS = -d
index e92d699..1f07e69 100644 (file)
@@ -613,8 +613,8 @@ static void account_edit_create(void)
 
        gtk_signal_connect (GTK_OBJECT (clist), "select_row",
                            GTK_SIGNAL_FUNC (account_selected), NULL);
-       gtk_signal_connect (GTK_OBJECT (clist), "row_move",
-                           GTK_SIGNAL_FUNC (account_row_moved), NULL);
+       gtk_signal_connect_after (GTK_OBJECT (clist), "row_move",
+                                 GTK_SIGNAL_FUNC (account_row_moved), NULL);
 
        vbox2 = gtk_vbox_new (FALSE, 0);
        gtk_widget_show (vbox2);
@@ -766,10 +766,8 @@ static void account_up(void)
        if (!clist->selection) return;
 
        row = GPOINTER_TO_INT(clist->selection->data);
-       if (row > 0) {
+       if (row > 0)
                gtk_clist_row_move(clist, row, row - 1);
-               account_list_set();
-       }
 }
 
 static void account_down(void)
@@ -780,11 +778,8 @@ static void account_down(void)
        if (!clist->selection) return;
 
        row = GPOINTER_TO_INT(clist->selection->data);
-       if (row < clist->rows - 1) {
+       if (row < clist->rows - 1)
                gtk_clist_row_move(clist, row, row + 1);
-               account_list_set();
-       }
-
 }
 
 static void account_set_default(void)
@@ -853,10 +848,8 @@ static void account_selected(GtkCList *clist, gint row, gint column,
 static void account_row_moved(GtkCList *clist, gint source_row, gint dest_row)
 {
        account_list_set();
-       if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL) {
-               gtk_clist_moveto(clist, dest_row, -1,
-                                source_row < dest_row ? 1.0 : 0.0, 0.0);
-       }
+       if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL)
+               gtk_clist_moveto(clist, dest_row, -1, 0.5, 0.0);
 }
 
 static void account_key_pressed(GtkWidget *widget, GdkEventKey *event,
index b11aed4..e7c4cb7 100644 (file)
@@ -1058,7 +1058,7 @@ void conv_unmime_header(gchar *outbuf, gint outlen, const gchar *str,
 
 #define LBREAK_IF_REQUIRED(cond)                               \
 {                                                              \
-       if (len - (destp - dest) < MAX_LINELEN) {               \
+       if (len - (destp - dest) < MAX_LINELEN + 2) {           \
                *destp = '\0';                                  \
                return;                                         \
        }                                                       \
index c6bbd88..630e9d4 100644 (file)
@@ -367,6 +367,46 @@ void gtkut_container_remove(GtkContainer *container, GtkWidget *widget)
        gtk_container_remove(container, widget);
 }
 
+void gtkut_window_popup(GtkWidget *window)
+{
+       gint x, y, sx, sy, new_x, new_y;
+
+       g_return_if_fail(window != NULL);
+       g_return_if_fail(window->window != NULL);
+
+       sx = gdk_screen_width();
+       sy = gdk_screen_height();
+
+       gdk_window_get_origin(window->window, &x, &y);
+       new_x = x % sx; if (new_x < 0) new_x = 0;
+       new_y = y % sy; if (new_y < 0) new_y = 0;
+       if (new_x != x || new_y != y)
+               gdk_window_move(window->window, new_x, new_y);
+
+       gdk_window_raise(window->window);
+       gdk_window_show(window->window);
+}
+
+void gtkut_widget_get_uposition(GtkWidget *widget, gint *px, gint *py)
+{
+       gint x, y;
+       gint sx, sy;
+
+       g_return_if_fail(widget != NULL);
+       g_return_if_fail(widget->window != NULL);
+
+       sx = gdk_screen_width();
+       sy = gdk_screen_height();
+
+       /* gdk_window_get_root_origin ever return *rootwindow*'s position */
+       gdk_window_get_root_origin(widget->window, &x, &y);
+
+       x %= sx; if (x < 0) x = 0;
+       y %= sy; if (y < 0) y = 0;
+       *px = x;
+       *py = y;
+}
+
 void gtkut_widget_disable_theme_engine(GtkWidget *widget)
 {
        GtkStyle *style, *new_style;
@@ -403,45 +443,6 @@ void gtkut_widget_wait_for_draw(GtkWidget *widget)
                gtk_main_iteration();
 }
 
-void gtkut_widget_get_uposition(GtkWidget *widget, gint *px, gint *py)
-{
-       gint x, y;
-       gint sx, sy;
-
-       g_return_if_fail(widget != NULL);
-       g_return_if_fail(widget->window != NULL);
-
-       /* gdk_window_get_root_origin ever return *rootwindow*'s position*/
-       gdk_window_get_root_origin(widget->window, &x, &y);
-
-       sx = gdk_screen_width();
-       sy = gdk_screen_height();
-       x %= sx; if (x < 0) x = 0;
-       y %= sy; if (y < 0) y = 0;
-       *px = x;
-       *py = y;
-}
-
-void gtkut_window_popup(GtkWidget *window)
-{
-       gint x, y, sx, sy, new_x, new_y;
-
-       g_return_if_fail(window != NULL);
-       g_return_if_fail(window->window != NULL);
-
-       gdk_window_get_origin(window->window, &x, &y);
-       sx = gdk_screen_width();
-       sy = gdk_screen_height();
-       new_x = x % sx; if (new_x < 0) new_x = 0;
-       new_y = y % sy; if (new_y < 0) new_y = 0;
-       if (new_x != x || new_y != y)
-               gdk_window_move(window->window, new_x, new_y);
-
-       gdk_window_raise(window->window);
-       gdk_window_show(window->window);
-}
-
-
 static void gtkut_clist_bindings_add(GtkWidget *clist)
 {
        GtkBindingSet *binding_set;
index 969ab81..63bb3be 100644 (file)
@@ -122,14 +122,14 @@ gchar *gtkut_editable_get_selection       (GtkEditable    *editable);
 void gtkut_container_remove            (GtkContainer   *container,
                                         GtkWidget      *widget);
 
-void gtkut_widget_disable_theme_engine (GtkWidget      *widget);
-void gtkut_widget_wait_for_draw                (GtkWidget      *widget);
-void gtkut_widget_get_uposition                (GtkWidget      *widget,
-                                        gint           *px,
-                                        gint           *py);
 
 void gtkut_window_popup                        (GtkWidget      *window);
 
+void gtkut_widget_get_uposition                (GtkWidget      *widget,
+                                        gint           *px,
+                                        gint           *py);
+void gtkut_widget_disable_theme_engine (GtkWidget      *widget);
+void gtkut_widget_wait_for_draw                (GtkWidget      *widget);
 void gtkut_widget_init                 (void);
 
 void gtkut_widget_set_app_icon         (GtkWidget      *widget);
index b27a637..bd9f008 100644 (file)
@@ -95,7 +95,8 @@ static gint imap_scan_tree_recursive  (IMAPSession    *session,
                                         FolderItem     *item);
 static GSList *imap_parse_list         (Folder         *folder,
                                         IMAPSession    *session,
-                                        const gchar    *real_path);
+                                        const gchar    *real_path,
+                                        gchar          *separator);
 
 static void imap_create_missing_folders        (Folder                 *folder);
 static FolderItem *imap_create_special_folder
@@ -172,6 +173,8 @@ static gint imap_status                     (IMAPSession    *session,
 
 static void imap_parse_namespace               (IMAPSession    *session,
                                                 IMAPFolder     *folder);
+static void imap_get_namespace_by_list         (IMAPSession    *session,
+                                                IMAPFolder     *folder);
 static IMAPNameSpace *imap_find_namespace      (IMAPFolder     *folder,
                                                 const gchar    *path);
 static gchar imap_get_path_separator           (IMAPFolder     *folder,
@@ -1233,7 +1236,7 @@ static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item)
                          wildcard_path);
 
        strtailchomp(real_path, separator);
-       item_list = imap_parse_list(folder, session, real_path);
+       item_list = imap_parse_list(folder, session, real_path, NULL);
        g_free(real_path);
 
        for (cur = item_list; cur != NULL; cur = cur->next) {
@@ -1275,11 +1278,12 @@ static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item)
        return IMAP_SUCCESS;
 }
 
-static GSList *imap_parse_list(Folder *folder, IMAPSession *session, const gchar *real_path)
+static GSList *imap_parse_list(Folder *folder, IMAPSession *session,
+                              const gchar *real_path, gchar *separator)
 {
        gchar buf[IMAPBUFSIZE];
        gchar flags[256];
-       gchar separator[16];
+       gchar separator_str[16];
        gchar *p;
        gchar *name;
        gchar *loc_name, *loc_path;
@@ -1315,11 +1319,13 @@ static GSList *imap_parse_list(Folder *folder, IMAPSession *session, const gchar
                if (!p) continue;
                while (*p == ' ') p++;
 
-               p = strchr_cpy(p, ' ', separator, sizeof(separator));
+               p = strchr_cpy(p, ' ', separator_str, sizeof(separator_str));
                if (!p) continue;
-               extract_quote(separator, '"');
-               if (!strcmp(separator, "NIL"))
-                       separator[0] = '\0';
+               extract_quote(separator_str, '"');
+               if (!strcmp(separator_str, "NIL"))
+                       separator_str[0] = '\0';
+               if (separator)
+                       *separator = separator_str[0];
 
                buf[0] = '\0';
                while (*p == ' ') p++;
@@ -1328,12 +1334,12 @@ static GSList *imap_parse_list(Folder *folder, IMAPSession *session, const gchar
                                            buf, sizeof(buf), str);
                else
                        strncpy2(buf, p, sizeof(buf));
-               strtailchomp(buf, separator[0]);
+               strtailchomp(buf, separator_str[0]);
                if (buf[0] == '\0') continue;
                if (!strcmp(buf, real_path)) continue;
 
-               if (separator[0] != '\0')
-                       subst_char(buf, separator[0], '/');
+               if (separator_str[0] != '\0')
+                       subst_char(buf, separator_str[0], '/');
                name = g_basename(buf);
                if (name[0] == '.') continue;
 
@@ -1924,6 +1930,7 @@ static void imap_parse_namespace(IMAPSession *session, IMAPFolder *folder)
        if (imap_cmd_namespace(SESSION(session)->sock, &ns_str)
            != IMAP_SUCCESS) {
                log_warning(_("can't get namespace\n"));
+               imap_get_namespace_by_list(session, folder);
                return;
        }
 
@@ -1938,6 +1945,32 @@ static void imap_parse_namespace(IMAPSession *session, IMAPFolder *folder)
        g_free(ns_str);
 }
 
+static void imap_get_namespace_by_list(IMAPSession *session, IMAPFolder *folder)
+{
+       GSList *item_list, *cur;
+       gchar separator = '\0';
+       IMAPNameSpace *namespace;
+
+       g_return_if_fail(session != NULL);
+       g_return_if_fail(folder != NULL);
+
+       if (folder->ns_personal != NULL ||
+           folder->ns_others   != NULL ||
+           folder->ns_shared   != NULL)
+               return;
+
+       imap_cmd_gen_send(SESSION(session)->sock, "LIST \"\" \"\"");
+       item_list = imap_parse_list(NULL, session, "", &separator);
+       for (cur = item_list; cur != NULL; cur = cur->next)
+               folder_item_destroy(FOLDER_ITEM(cur->data));
+       g_slist_free(item_list);
+
+       namespace = g_new(IMAPNameSpace, 1);
+       namespace->name = g_strdup("");
+       namespace->separator = separator;
+       folder->ns_personal = g_list_append(NULL, namespace);
+}
+
 static IMAPNameSpace *imap_find_namespace_from_list(GList *ns_list,
                                                    const gchar *path)
 {