0.8.6claws69
authorChristoph Hohmann <reboot@gmx.ch>
Sat, 7 Dec 2002 12:20:09 +0000 (12:20 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Sat, 7 Dec 2002 12:20:09 +0000 (12:20 +0000)
* src/procmsg.[ch]
* src/summaryview.c
        implement msginfo update callback using sylpheed's new
        hook system. Invoke hooks from procmsg_msginfo_[un]set_flags.

NOTE: nodes are updated 2 times for now when setting flags (user action),
      once by the hook and once by the summaryview flag setting functions.

ChangeLog.claws
configure.in
src/main.c
src/procmsg.c
src/procmsg.h
src/summaryview.c

index 03548284d71c51fc67207b6ac4932f994ae06831..a14dac6f3c28dfbc287f532785884db71aad312d 100644 (file)
@@ -1,3 +1,10 @@
+2002-12-07 [christoph] 0.8.6claws69
+
+       * src/procmsg.[ch]
+       * src/summaryview.c
+               implement msginfo update callback using sylpheed's new
+               hook system. Invoke hooks from procmsg_msginfo_[un]set_flags.
+
 2002-12-06 [christoph] 0.8.6claws68
 
        * src/editgroup.c
index d71eff7ed93d54b90b20ad1d01ebb4845db67e19..73971d70b5cfd83d70e87676f2cf40d8d7671264 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=6
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws68
+EXTRA_VERSION=claws69
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index a5c63a2870c29ffa08d7bfe9c08832223c646670..7a7776d67d82a7e27491681c5e426bda91a56363 100644 (file)
@@ -366,9 +366,7 @@ int main(int argc, char *argv[])
                main_window_toggle_work_offline(mainwin, FALSE);
        
        static_mainwindow = mainwin;
-       statusbar_puts_all("Ready");
        gtk_main();
-       statusbar_pop_all();
 
        addressbook_destroy();
 
index 0253f163bb3e1b1823f588084e9bac0797028756..3aa3abe034abea58e49fd6b4faaf0f74229eba2d 100644 (file)
@@ -40,6 +40,7 @@
 #include "alertpanel.h"
 #include "news.h"
 #include "imap.h"
+#include "hooks.h"
 
 typedef struct _FlagInfo       FlagInfo;
 
@@ -1417,7 +1418,6 @@ gint procmsg_send_message_queue(const gchar *file)
                                procmsg_msginfo_unset_flags(msginfo, MSG_FORWARDED, 0);
                                procmsg_msginfo_set_flags(msginfo, MSG_REPLIED, 0);
 
-                               msginfo_update_item(msginfo);
                                procmsg_msginfo_free(msginfo);
                        }
                }
@@ -1441,6 +1441,7 @@ msginfo->folder->folder->change_flags(msginfo->folder->folder, \
 void procmsg_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmpFlags tmp_flags)
 {
        FolderItem *item;
+       MsgInfoUpdate msginfo_update;
 
        g_return_if_fail(msginfo != NULL);
        item = msginfo->folder;
@@ -1501,6 +1502,9 @@ void procmsg_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmp
        msginfo->flags.perm_flags |= perm_flags;
        msginfo->flags.tmp_flags |= tmp_flags;
 
+       msginfo_update.msginfo = msginfo;
+       hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update);
+
        CHANGE_FLAGS(msginfo);
        procmsg_msginfo_write_flags(msginfo);
 }
@@ -1508,6 +1512,7 @@ void procmsg_msginfo_set_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmp
 void procmsg_msginfo_unset_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgTmpFlags tmp_flags)
 {
        FolderItem *item;
+       MsgInfoUpdate msginfo_update;
 
        g_return_if_fail(msginfo != NULL);
        item = msginfo->folder;
@@ -1568,6 +1573,9 @@ void procmsg_msginfo_unset_flags(MsgInfo *msginfo, MsgPermFlags perm_flags, MsgT
        msginfo->flags.perm_flags &= ~perm_flags;
        msginfo->flags.tmp_flags &= ~tmp_flags;
 
+       msginfo_update.msginfo = msginfo;
+       hooks_invoke(MSGINFO_UPDATE_HOOKLIST, &msginfo_update);
+
        CHANGE_FLAGS(msginfo);
        procmsg_msginfo_write_flags(msginfo);
 }
@@ -1652,70 +1660,3 @@ static void procmsg_update_unread_children (MsgInfo *info, gboolean newly_marked
                procmsg_msginfo_free(tmp);
        }
 }
-
-/*
- * callback handling
- */
-GSList *msginfo_update_callbacks_list = NULL;
-gint   msginfo_update_callbacks_nextid = 0;
-
-struct MsgInfoUpdateCallback
-{
-       gint                    id;
-       MsgInfoUpdateFunc       func;
-       gpointer                data;
-};
-
-gint msginfo_update_callback_register(MsgInfoUpdateFunc func, gpointer data)
-{
-       struct MsgInfoUpdateCallback *callback;
-
-       g_return_val_if_fail(func != NULL, -1);
-
-       msginfo_update_callbacks_nextid++;
-
-       callback = g_new0(struct MsgInfoUpdateCallback, 1);
-       callback->id = msginfo_update_callbacks_nextid;
-       callback->func = func;
-       callback->data = data;
-
-       msginfo_update_callbacks_list =
-               g_slist_append(msginfo_update_callbacks_list, callback);
-
-       return msginfo_update_callbacks_nextid;
-}
-
-void msginfo_update_callback_unregister(gint id)
-{
-       GSList *list, *next;
-
-       for (list = msginfo_update_callbacks_list; list != NULL; list = next) {
-               struct MsgInfoUpdateCallback *callback;
-
-               next = list->next;
-
-               callback = list->data;
-               if (callback->id == id) {
-                       msginfo_update_callbacks_list =
-                               g_slist_remove(msginfo_update_callbacks_list, callback);
-                       g_free(callback);
-               }
-       }
-}
-
-static void msginfo_update_callback_execute(MsgInfo *info)
-{
-       GSList *list;
-
-       for (list = msginfo_update_callbacks_list; list != NULL; list = list->next) {
-               struct MsgInfoUpdateCallback *callback;
-
-               callback = list->data;
-               callback->func(info, callback->data);
-       }
-}
-
-void msginfo_update_item(MsgInfo *info)
-{
-       msginfo_update_callback_execute(info);
-}
index a2d844b7affc7b56c5e24d41c8d3876a2c7b5ef9..fbf080ff559a79507b05f23227a6ef7c4e6c6afa 100644 (file)
@@ -209,6 +209,14 @@ struct _MsgInfo
        guint decryption_failed : 1;
 };
 
+#define MSGINFO_UPDATE_HOOKLIST "msginfo_update"
+
+typedef struct _MsgInfoUpdate MsgInfoUpdate;
+
+struct _MsgInfoUpdate {
+       MsgInfo *msginfo;
+};
+
 GHashTable *procmsg_msg_hash_table_create      (GSList         *mlist);
 void procmsg_msg_hash_table_append             (GHashTable     *msg_table,
                                                 GSList         *mlist);
@@ -279,14 +287,6 @@ void procmsg_msginfo_set_flags             (MsgInfo *msginfo,
 void procmsg_msginfo_unset_flags       (MsgInfo *msginfo,
                                         MsgPermFlags perm_flags,
                                          MsgTmpFlags tmp_flags);
-
-/* callback system for updates */
-typedef void (*MsgInfoUpdateFunc)      (MsgInfo        *info,
-                                        gpointer        data);
-gint msginfo_update_callback_register(MsgInfoUpdateFunc func, gpointer data);
-void msginfo_update_callback_unregister(gint id);
-
-void msginfo_update_item               (MsgInfo        *info);
 gint procmsg_remove_special_headers    (const gchar    *in, 
                                         const gchar    *out);
 
index a4ea7dbaf673a0eaedb8d2683f758efa26be94e1..0f8e5c1e25c70e4a8c08c192d01c18d4b17a5cc7 100644 (file)
@@ -85,6 +85,7 @@
 #include "news.h"
 #include "matcher.h"
 #include "matcher_parser.h"
+#include "hooks.h"
 
 #define SUMMARY_COL_MARK_WIDTH         10
 #define SUMMARY_COL_UNREAD_WIDTH       13
@@ -379,7 +380,7 @@ static void news_flag_crosspost             (MsgInfo *msginfo);
 static void tog_searchbar_cb           (GtkWidget      *w,
                                         gpointer        data);
 
-static void summary_update_msg         (MsgInfo *info, gpointer data);
+static void summary_update_msg         (gpointer source, gpointer data);
 
 GtkTargetEntry summary_drag_types[1] =
 {
@@ -612,7 +613,7 @@ SummaryView *summary_create(void)
        summaryview->search_type = search_type;
        summaryview->search_string = search_string;
        summaryview->msginfo_update_callback_id =
-               msginfo_update_callback_register(summary_update_msg, (gpointer) summaryview);
+               hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview);
 
        /* CLAWS: need this to get the SummaryView * from
         * the CList */
@@ -5407,10 +5408,15 @@ void summary_save_prefs_to_folderitem(SummaryView *summaryview, FolderItem *item
        item->threaded = summaryview->threaded;
 }
 
-static void summary_update_msg(MsgInfo *msginfo, gpointer data) {
-       GtkCTreeNode *node;
+static void summary_update_msg(gpointer source, gpointer data) {
+       MsgInfoUpdate *msginfo_update = (MsgInfoUpdate *) source;
        SummaryView *summaryview = (SummaryView *)data;
-       node = gtk_ctree_find_by_row_data(GTK_CTREE(summaryview->ctree), NULL, msginfo);
+       GtkCTreeNode *node;
+
+       g_return_if_fail(msginfo_update != NULL);
+       g_return_if_fail(summaryview != NULL);
+
+       node = gtk_ctree_find_by_row_data(GTK_CTREE(summaryview->ctree), NULL, msginfo_update->msginfo);
        
        if (node) 
                summary_set_row_marks(summaryview, node);