sync with 0.9.9cvs9
authorPaul Mangan <paul@claws-mail.org>
Fri, 13 Feb 2004 12:43:52 +0000 (12:43 +0000)
committerPaul Mangan <paul@claws-mail.org>
Fri, 13 Feb 2004 12:43:52 +0000 (12:43 +0000)
16 files changed:
ChangeLog
ChangeLog.claws
ChangeLog.jp
configure.ac
src/common/defs.h
src/foldersel.c
src/folderview.c
src/folderview.h
src/inc.c
src/inc.h
src/mainwindow.c
src/messageview.c
src/messageview.h
src/pop.c
src/pop.h
src/textview.c

index 500e0c0..f8b38ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2004-02-12
+
+       * src/inc.[ch]
+         src/pop.[ch]: made inc_drop_message() the virtual function of
+         Pop3Session and removed the dependency of pop.c on inc.h.
+
+2004-02-12
+
+       * src/mainwindow.c
+         src/messageview.[ch]
+         src/textview.c: added statusbar to the message view with new window.
+
+2004-02-10
+
+       * src/inc.[ch]: use hash table for progressive update.
+         changed update interval to 2 sec.
+       * src/folder.[ch]
+         src/mh.c
+         src/procmsg.c
+         src/summaryview.c: added FolderItem::unmarked_num to correct the
+         folder message counting.
+
+2004-02-09
+
+       * src/inc.[ch]: update folderview progressively.
+       * src/foldersel.c: display full id for selected item.
+
 2004-02-06
 
        * src/folderview.[ch]: code cleanup.
index c27eb3a..8b3539c 100644 (file)
@@ -1,3 +1,8 @@
+2003-02-13 [paul]      0.9.9claws8
+
+       * sync with 0.9.9cvs9
+               see ChangeLog 2003-02-09, 2004-02-10, 2004-02-12
+
 2003-02-13 [alfons]    0.9.9claws7
 
        * src/common/utils.c
index cf4ba35..4a53e0c 100644 (file)
@@ -1,3 +1,31 @@
+2004-02-12
+
+       * src/inc.[ch]
+         src/pop.[ch]: inc_drop_message() ¤ò Pop3Session ¤Î²¾ÁÛ´Ø¿ô¤Ë¤·¡¢
+         pop3.c ¤Î inc.h ¤Ø¤Î°Í¸¤ò½üµî¡£
+
+2004-02-12
+
+       * src/mainwindow.c
+         src/messageview.[ch]
+         src/textview.c: ¿·µ¬¥¦¥£¥ó¥É¥¦¤Î¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤ò
+         Äɲá£
+
+2004-02-10
+
+       * src/inc.[ch]: Ã༡¹¹¿·¤Ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò»ÈÍÑ¡£
+         ¹¹¿·´Ö³Ö¤ò2ÉäËÊѹ¹¡£
+       * src/folder.[ch]
+         src/mh.c
+         src/procmsg.c
+         src/summaryview.c: ¥Õ¥©¥ë¥À¤Î¥á¥Ã¥»¡¼¥¸¿ô¤Î½¸·×¤òÊäÀµ¤¹¤ë¤¿¤á¤Ë
+         FolderItem::unmarked_num ¤òÄɲá£
+
+2004-02-09
+
+       * src/inc.[ch]: ¥Õ¥©¥ë¥À¥Ó¥å¡¼¤òÃ༡¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+       * src/foldersel.c: ÁªÂò¹àÌܤδ°Á´¤Ê ID ¤òɽ¼¨¡£
+
 2004-02-06
 
        * src/folderview.[ch]: ¥³¡¼¥É¤ÎÀ°Íý¡£
index 559fa70..a558b95 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=9
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=7
+EXTRA_VERSION=8
 if test $EXTRA_VERSION -eq 0; then
     VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
 else
index ef25b24..1a4dc60 100644 (file)
 #define MAX_ENTRY_LENGTH               8191
 #define COLOR_DIM                      35000
 #define UI_REFRESH_INTERVAL            50000   /* usec */
+#define FOLDER_UPDATE_INTERVAL         1500    /* msec */
 #define SESSION_TIMEOUT                        60      /* sec */
 #define MAX_HISTORY_SIZE               16
 
index e5fed1b..82b4030 100644 (file)
@@ -323,9 +323,12 @@ static void foldersel_selected(GtkCList *clist, gint row, gint column,
        GdkEventButton *ev = (GdkEventButton *)event;
 
        selected_item = gtk_clist_get_row_data(clist, row);
-       if (selected_item && selected_item->path)
-               gtk_entry_set_text(GTK_ENTRY(entry), selected_item->path);
-       else
+       if (selected_item && selected_item->path) {
+               gchar *id;
+               id = folder_item_get_identifier(selected_item);
+               gtk_entry_set_text(GTK_ENTRY(entry), id);
+               g_free(id);
+       } else
                gtk_entry_set_text(GTK_ENTRY(entry), "");
 
        if (ev && GDK_2BUTTON_PRESS == ev->type)
index 82561cb..6d6d592 100644 (file)
@@ -1284,6 +1284,18 @@ gboolean folderview_update_item(gpointer source, gpointer data)
        return FALSE;
 }
 
+static void folderview_update_item_foreach_func(gpointer key, gpointer val,
+                                               gpointer data)
+{
+       folderview_update_item((FolderItem *)key, (gboolean)data);
+}
+
+void folderview_update_item_foreach(GHashTable *table, gboolean update_summary)
+{
+       g_hash_table_foreach(table, folderview_update_item_foreach_func,
+                            (gpointer)update_summary);
+}
+
 static gboolean folderview_gnode_func(GtkCTree *ctree, guint depth,
                                      GNode *gnode, GtkCTreeNode *cnode,
                                      gpointer data)
index e28b50f..caada33 100644 (file)
@@ -89,6 +89,10 @@ void folderview_rescan_all           (void);
 gint folderview_check_new              (Folder         *folder);
 void folderview_check_new_all          (void);
 
+void folderview_update_item_foreach    (GHashTable     *table,
+                                        gboolean        update_summary);
+void folderview_update_all_updated     (gboolean        update_summary);
+
 void folderview_new_folder             (FolderView     *folderview);
 void folderview_rename_folder          (FolderView     *folderview);
 void folderview_delete_folder          (FolderView     *folderview);
index a62becc..425fc3d 100644 (file)
--- a/src/inc.c
+++ b/src/inc.c
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -108,6 +108,8 @@ static gint inc_recv_data_finished  (Session        *session,
 static gint inc_recv_message           (Session        *session,
                                         const gchar    *msg,
                                         gpointer        data);
+static gint inc_drop_message           (Pop3Session    *session,
+                                        const gchar    *file);
 
 static void inc_put_error              (IncState        istate,
                                         const gchar    *msg);
@@ -379,6 +381,7 @@ static IncProgressDialog *inc_progress_dialog_create(gboolean autocheck)
        }
 
        dialog->dialog = progress;
+       dialog->timer_id = 0;
        dialog->queue_list = NULL;
        dialog->cur_row = 0;
 
@@ -438,8 +441,20 @@ static IncSession *inc_session_new(PrefsAccount *account)
                return NULL;
 
        session = g_new0(IncSession, 1);
+
        session->session = pop3_session_new(account);
        session->session->data = session;
+       POP3_SESSION(session->session)->drop_message = inc_drop_message;
+       session_set_recv_message_notify(session->session,
+                                       inc_recv_message, session);
+       session_set_recv_data_progressive_notify(session->session,
+                                                inc_recv_data_progressive,
+                                                session);
+       session_set_recv_data_notify(session->session,
+                                    inc_recv_data_finished, session);
+
+       session->folder_table = g_hash_table_new(NULL, NULL);
+       session->tmp_folder_table = g_hash_table_new(NULL, NULL);
 
        return session;
 }
@@ -449,6 +464,8 @@ static void inc_session_destroy(IncSession *session)
        g_return_if_fail(session != NULL);
 
        session_destroy(session->session);
+       g_hash_table_destroy(session->folder_table);
+       g_hash_table_destroy(session->tmp_folder_table);
        g_free(session);
 }
 
@@ -531,13 +548,6 @@ static gint inc_start(IncProgressDialog *inc_dialog)
                SET_PIXMAP_AND_TEXT(currentxpm, currentxpmmask,
                                    _("Retrieving"));
 
-               session_set_recv_message_notify(session->session,
-                                               inc_recv_message, session);
-               session_set_recv_data_progressive_notify
-                       (session->session, inc_recv_data_progressive, session);
-               session_set_recv_data_notify(session->session,
-                                            inc_recv_data_finished, session);
-
                /* begin POP3 session */
                inc_state = inc_pop3_session_do(session);
 
@@ -755,6 +765,11 @@ static IncState inc_pop3_session_do(IncSession *session)
               session->inc_state != INC_CANCEL)
                gtk_main_iteration();
 
+       if (inc_dialog->timer_id) {
+               gtk_timeout_remove(inc_dialog->timer_id);
+               inc_dialog->timer_id = 0;
+       }
+
        statusbar_pop_all();
 
        if (session->inc_state == INC_SUCCESS) {
@@ -856,6 +871,30 @@ static void inc_progress_dialog_set_label(IncProgressDialog *inc_dialog,
        }
 }
 
+static gboolean hash_remove_func(gpointer key, gpointer value, gpointer data)
+{
+       return TRUE;
+}
+
+static gint inc_timer_func(gpointer data)
+{
+       IncSession *inc_session = (IncSession *)data;
+       IncProgressDialog *inc_dialog;
+
+       g_return_val_if_fail(inc_session != NULL, -1);
+
+       inc_dialog = (IncProgressDialog *)inc_session->data;
+
+       if (g_hash_table_size(inc_session->tmp_folder_table) > 0) {
+               folderview_update_item_foreach(inc_session->tmp_folder_table,
+                                              FALSE);
+               g_hash_table_foreach_remove(inc_session->tmp_folder_table,
+                                           hash_remove_func, NULL);
+       }
+
+       return TRUE;
+}
+
 static gint inc_recv_data_progressive(Session *session, guint cur_len,
                                      guint total_len, gpointer data)
 {
@@ -913,6 +952,13 @@ static gint inc_recv_data_finished(Session *session, guint len, gpointer data)
        inc_recv_data_progressive(session, 0, len, inc_session);
        inc_progress_dialog_set_label(inc_dialog, inc_session);
 
+       if (POP3_SESSION(session)->state == POP3_LOGOUT &&
+           inc_dialog->timer_id) {
+               inc_timer_func(data);
+               gtk_timeout_remove(inc_dialog->timer_id);
+               inc_dialog->timer_id = 0;
+       }
+
        if (pop3_session->cur_total_num == 0) return 0;
 
        msg = g_strdup_printf(_("Retrieving (%d message(s) (%s) received)"),
@@ -936,14 +982,26 @@ static gint inc_recv_message(Session *session, const gchar *msg, gpointer data)
        inc_dialog = (IncProgressDialog *)inc_session->data;
        inc_progress_dialog_set_label(inc_dialog, inc_session);
 
+       if (POP3_SESSION(session)->state == POP3_LOGOUT &&
+           inc_dialog->timer_id) {
+               inc_timer_func(data);
+               gtk_timeout_remove(inc_dialog->timer_id);
+               inc_dialog->timer_id = 0;
+       }
+
        return 0;
 }
 
-gint inc_drop_message(const gchar *file, Pop3Session *session)
+static gint inc_drop_message(Pop3Session *session, const gchar *file)
 {
        FolderItem *inbox;
        FolderItem *dropfolder;
+       IncSession *inc_session = (IncSession *)(SESSION(session)->data);
+       IncProgressDialog *inc_dialog;
        gint msgnum;
+       gint val;
+
+       g_return_val_if_fail(inc_session != NULL, -1);
 
        if (session->ac_prefs->inbox) {
                inbox = folder_find_item_from_identifier
@@ -966,6 +1024,12 @@ gint inc_drop_message(const gchar *file, Pop3Session *session)
                return -1;
        }
 
+       inc_dialog = (IncProgressDialog *)inc_session->data;
+       if (inc_dialog->timer_id == 0)
+               inc_dialog->timer_id = gtk_timeout_add(FOLDER_UPDATE_INTERVAL,
+                                                      inc_timer_func,
+                                                      inc_session);
+
        return 0;
 }
 
index 09c352b..1366bd6 100644 (file)
--- a/src/inc.h
+++ b/src/inc.h
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -58,6 +58,8 @@ struct _IncProgressDialog
 
        gboolean show_dialog;
 
+       guint timer_id;
+
        GList *queue_list;      /* list of IncSession */
        gint cur_row;
 };
@@ -67,6 +69,9 @@ struct _IncSession
        Session *session;
        IncState inc_state;
 
+       GHashTable *folder_table;       /* table of destination folders */
+       GHashTable *tmp_folder_table;   /* for progressive update */
+
        gpointer data;
 };
 
@@ -80,8 +85,6 @@ void inc_all_account_mail     (MainWindow     *mainwin,
                                 gboolean        autocheck,
                                 gboolean        notify);
 void inc_progress_update       (Pop3Session    *session);
-gint inc_drop_message          (const gchar    *file,
-                                Pop3Session    *session);
 
 void inc_pop_before_smtp       (PrefsAccount   *acc);
 
index 5d9cb9f..3fc24f0 100644 (file)
@@ -914,22 +914,22 @@ MainWindow *main_window_create(SeparateType type)
        summaryview->messageview = messageview;
        summaryview->window      = window;
 
-       mainwin->vbox         = vbox;
-       mainwin->menubar      = menubar;
-       mainwin->menu_factory = ifactory;
-       mainwin->handlebox    = handlebox;
-       mainwin->vbox_body    = vbox_body;
-       mainwin->hbox_stat    = hbox_stat;
-       mainwin->statusbar    = statusbar;
-       mainwin->progressbar  = progressbar;
-       mainwin->statuslabel  = statuslabel;
-       mainwin->ac_button    = ac_button;
-       mainwin->ac_label     = ac_label;
-       
-       mainwin->online_switch     = online_switch;
+       messageview->statusbar   = statusbar;
+       mainwin->vbox           = vbox;
+       mainwin->menubar        = menubar;
+       mainwin->menu_factory   = ifactory;
+       mainwin->handlebox      = handlebox;
+       mainwin->vbox_body      = vbox_body;
+       mainwin->hbox_stat      = hbox_stat;
+       mainwin->statusbar      = statusbar;
+       mainwin->progressbar    = progressbar;
+       mainwin->statuslabel    = statuslabel;
+       mainwin->online_switch  = online_switch;
+       mainwin->online_pixmap  = online_pixmap;
+       mainwin->offline_pixmap = offline_pixmap;
+       mainwin->ac_button      = ac_button;
+       mainwin->ac_label       = ac_label;
        mainwin->offline_switch    = offline_switch;
-       mainwin->online_pixmap     = online_pixmap;
-       mainwin->offline_pixmap    = offline_pixmap;
        
        /* set context IDs for status bar */
        mainwin->mainwin_cid = gtk_statusbar_get_context_id
@@ -941,6 +941,8 @@ MainWindow *main_window_create(SeparateType type)
        mainwin->messageview_cid = gtk_statusbar_get_context_id
                (GTK_STATUSBAR(statusbar), "Message View");
 
+       messageview->statusbar_cid = mainwin->messageview_cid;
+
        /* allocate colors for summary view and folder view */
        summaryview->color_marked.red = summaryview->color_marked.green = 0;
        summaryview->color_marked.blue = (guint16)65535;
index 4222ceb..12c4af8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -319,20 +319,23 @@ MessageView *messageview_create(MainWindow *mainwin)
                            GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0);
        gtk_widget_show(vbox);
 
-       messageview->vbox       = vbox;
-       messageview->new_window = FALSE;
-       messageview->window     = NULL;
-       messageview->headerview = headerview;
-       messageview->mimeview   = mimeview;
+       messageview->vbox        = vbox;
+       messageview->new_window  = FALSE;
+       messageview->window      = NULL;
+       messageview->headerview  = headerview;
+       messageview->mimeview    = mimeview;
        messageview->noticeview = noticeview;
        messageview->mainwin    = mainwin;
+
+       messageview->statusbar     = NULL;
+       messageview->statusbar_cid = 0;
+
        messageview->msginfo_update_callback_id =
                hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, messageview_update_msg, (gpointer) messageview);
 
        return messageview;
 }
 
-
 GList *messageview_get_msgview_list(void)
 {
        return msgview_list;
@@ -354,22 +357,32 @@ void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
        GtkWidget *handlebox;
        GtkWidget *vbox;
        GtkWidget *menubar;
+       GtkWidget *statusbar;
        GtkItemFactory *ifactory;
        guint n_menu_entries;
 
        vbox = gtk_vbox_new(FALSE, 0);
        gtk_widget_show(vbox);
        gtk_container_add(GTK_CONTAINER(window), vbox); 
-       
+
        n_menu_entries = sizeof(msgview_entries) / sizeof(msgview_entries[0]);
        menubar = menubar_create(window, msgview_entries,
                                 n_menu_entries, "<MessageView>", msgview);
+       gtk_widget_show(menubar);
        gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
 
        handlebox = gtk_handle_box_new();
        gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
        msgview->toolbar = toolbar_create(TOOLBAR_MSGVIEW, handlebox,
                                          (gpointer)msgview);
+
+       statusbar = gtk_statusbar_new();
+       gtk_widget_show(statusbar);
+       gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
+       msgview->statusbar = statusbar;
+       msgview->statusbar_cid = gtk_statusbar_get_context_id
+               (GTK_STATUSBAR(statusbar), "Message View");
+
        msgview->handlebox = handlebox;
        msgview->menubar   = menubar;
 
@@ -383,8 +396,8 @@ void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
 
 MessageView *messageview_create_with_new_window(MainWindow *mainwin)
 {
-       GtkWidget *window;
        MessageView *msgview;
+       GtkWidget *window;
 
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), _("Sylpheed - Message View"));
index 4d0533c..5820bca 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,6 +40,8 @@ struct _MessageView
 
        gboolean new_window;
        GtkWidget *window;
+       GtkWidget *window_vbox;
+       GtkWidget *body_vbox;
 
        /* Toolbar handlebox */
        GtkWidget *handlebox;
@@ -49,6 +51,8 @@ struct _MessageView
        HeaderView *headerview;
        MimeView *mimeview;
        NoticeView *noticeview;
+       GtkWidget *statusbar;
+       gint statusbar_cid;
 
        MainWindow *mainwin;
 
index 2fd15a9..90fa283 100644 (file)
--- a/src/pop.c
+++ b/src/pop.c
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -35,7 +35,6 @@
 #include "md5.h"
 #include "prefs_account.h"
 #include "utils.h"
-#include "inc.h"
 #include "recv.h"
 
 #include "log.h"
@@ -345,7 +344,7 @@ static gint pop3_retr_recv(Pop3Session *session, const gchar *data, guint len)
        g_free(mail_receive_data.data);
 
        /* drop_ok: 0: success 1: don't receive -1: error */
-       drop_ok = inc_drop_message(file, session);
+       drop_ok = session->drop_message(session, file);
        g_free(file);
        if (drop_ok < 0) {
                session->error_val = PS_IOERR;
index cfdea46..bf62212 100644 (file)
--- a/src/pop.h
+++ b/src/pop.h
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2004 Hiroyuki Yamamoto
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -143,6 +143,10 @@ struct _Pop3Session
        gchar *error_msg;
 
        gpointer data;
+
+       /* virtual method to drop message */
+       gint (*drop_message)    (Pop3Session    *session,
+                                const gchar    *file);
 };
 
 #define POPBUFSIZE     512
index 5c9486b..3e9ef44 100644 (file)
@@ -128,6 +128,18 @@ static gint text_mb_font_orig_ascent;
 static gint text_mb_font_orig_descent;
 static GdkFont *spacingfont;
 
+#define TEXTVIEW_STATUSBAR_PUSH(textview, str)                                     \
+{                                                                          \
+       gtk_statusbar_push(GTK_STATUSBAR(textview->messageview->statusbar), \
+                          textview->messageview->statusbar_cid, str);      \
+}
+
+#define TEXTVIEW_STATUSBAR_POP(textview)                                                  \
+{                                                                         \
+       gtk_statusbar_pop(GTK_STATUSBAR(textview->messageview->statusbar), \
+                         textview->messageview->statusbar_cid);           \
+}
+
 static void textview_show_ertf         (TextView       *textview,
                                         FILE           *fp,
                                         CodeConverter  *conv);
@@ -1216,6 +1228,7 @@ void textview_clear(TextView *textview)
        gtk_stext_forward_delete(text, gtk_stext_get_length(text));
        gtk_stext_thaw(text);
 
+       TEXTVIEW_STATUSBAR_POP(textview);
        textview_uri_list_remove_all(textview->uri_list);
        textview->uri_list = NULL;
 
@@ -1812,13 +1825,8 @@ static gint show_url_timeout_cb(gpointer data)
 {
        TextView *textview = (TextView *)data;
        
-       if (textview->messageview->mainwin)
-               if (textview->show_url_msgid)
-                       gtk_statusbar_remove(GTK_STATUSBAR(
-                               textview->messageview->mainwin->statusbar),
-                               textview->messageview->mainwin->folderview_cid,
-                               textview->show_url_msgid);
-               return FALSE;
+       TEXTVIEW_STATUSBAR_POP(textview);
+       return FALSE;
 }
 
 static gint textview_button_pressed(GtkWidget *widget, GdkEventButton *event,
@@ -1859,19 +1867,11 @@ static gint textview_button_released(GtkWidget *widget, GdkEventButton *event,
                                if (event->button == 1 && textview->last_buttonpress != GDK_2BUTTON_PRESS) {
                                        if (textview->messageview->mainwin) {
                                                if (textview->show_url_msgid) {
-                                                       gtk_timeout_remove(textview->show_url_timeout_tag);
-                                                       gtk_statusbar_remove(GTK_STATUSBAR(
-                                                               textview->messageview->mainwin->statusbar),
-                                                               textview->messageview->mainwin->folderview_cid,
-                                                               textview->show_url_msgid);
+                                                       TEXTVIEW_STATUSBAR_POP(textview);
                                                        textview->show_url_msgid = 0;
                                                }
-                                               textview->show_url_msgid = gtk_statusbar_push(
-                                                               GTK_STATUSBAR(textview->messageview->mainwin->statusbar),
-                                                               textview->messageview->mainwin->folderview_cid,
-                                                               trimmed_uri);
-                                               textview->show_url_timeout_tag = gtk_timeout_add( 4000, show_url_timeout_cb, textview );
-                                               gtkut_widget_wait_for_draw(textview->messageview->mainwin->hbox_stat);
+                                                       TEXTVIEW_STATUSBAR_PUSH(textview, trimmed_uri);
+                                                       textview->show_url_timeout_tag = gtk_timeout_add( 4000, show_url_timeout_cb, textview );
                                        }
                                } else
                                if (!g_strncasecmp(uri->uri, "mailto:", 7)) {