diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2009-11-06 09:19:14 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2009-11-06 09:19:14 +0000 |
commit | b69e098519c056115763a19004c4fcefe4ad49d5 (patch) | |
tree | 75f41f45239f18a50afe9f7163671675f42c2604 | |
parent | 9aa60b8ee830c9ecce85ba76bbd57085ef8bddb5 (diff) |
svn s
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2337 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | libsylph/account.c | 22 | ||||
-rw-r--r-- | libsylph/account.h | 4 | ||||
-rw-r--r-- | libsylph/folder.c | 3 | ||||
-rw-r--r-- | libsylph/mh.c | 29 | ||||
-rw-r--r-- | libsylph/sylmain.c | 10 | ||||
-rw-r--r-- | src/account_dialog.c | 3 |
7 files changed, 68 insertions, 13 deletions
@@ -1,5 +1,15 @@ 2009-11-06 + * libsylph/mh.c + libsylph/folder.c + libsylph/sylmain.c + libsylph/account.[ch] + src/account_dialog.c: added "account-updated" signal to SylApp. + Don't emit signals if SylApp is not initialized. + Call account_updated() only once. + +2009-11-06 + * src/plugin.c src/main.c: syl_plugin_add_menuitem() diff --git a/libsylph/account.c b/libsylph/account.c index e2fd8b38..a6f8da30 100644 --- a/libsylph/account.c +++ b/libsylph/account.c @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2006 Hiroyuki Yamamoto + * Copyright (C) 1999-2009 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -35,6 +35,7 @@ #include "procmsg.h" #include "procheader.h" #include "utils.h" +#include "sylmain.h" #define PREFSBUFSIZE 1024 @@ -464,10 +465,29 @@ void account_destroy(PrefsAccount *ac_prefs) account_updated(); } +static guint account_update_lock_count = 0; + +void account_update_lock(void) +{ + account_update_lock_count++; +} + +void account_update_unlock(void) +{ + if (account_update_lock_count > 0) + account_update_lock_count--; +} + void account_updated(void) { + if (account_update_lock_count) + return; + if (address_table) { g_hash_table_destroy(address_table); address_table = NULL; } + + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "account-updated"); } diff --git a/libsylph/account.h b/libsylph/account.h index d6f01a9e..44851143 100644 --- a/libsylph/account.h +++ b/libsylph/account.h @@ -1,6 +1,6 @@ /* * LibSylph -- E-Mail client library - * Copyright (C) 1999-2006 Hiroyuki Yamamoto + * Copyright (C) 1999-2009 Hiroyuki Yamamoto * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -63,6 +63,8 @@ FolderItem *account_get_special_folder(PrefsAccount *ac_prefs, void account_destroy (PrefsAccount *ac_prefs); +void account_update_lock (void); +void account_update_unlock (void); void account_updated (void); #endif /* __ACCOUNT_H__ */ diff --git a/libsylph/folder.c b/libsylph/folder.c index cefc3a0b..66d7702e 100644 --- a/libsylph/folder.c +++ b/libsylph/folder.c @@ -475,7 +475,8 @@ void folder_write_list(void) if (prefs_file_close(pfile) < 0) g_warning("failed to write folder list.\n"); - g_signal_emit_by_name(syl_app_get(), "folderlist-updated"); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "folderlist-updated"); } struct TotalMsgStatus diff --git a/libsylph/mh.c b/libsylph/mh.c index e86b5671..6141abbe 100644 --- a/libsylph/mh.c +++ b/libsylph/mh.c @@ -515,7 +515,8 @@ static gint mh_add_msgs(Folder *folder, FolderItem *dest, GSList *file_list, } } - g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); g_free(destfile); dest->last_num++; @@ -628,7 +629,8 @@ static gint mh_add_msgs_msginfo(Folder *folder, FolderItem *dest, } } - g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); g_free(srcfile); g_free(destfile); @@ -718,8 +720,10 @@ static gint mh_do_move_msgs(Folder *folder, FolderItem *dest, GSList *msglist) break; } - g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); - g_signal_emit_by_name(syl_app_get(), "remove-msg", src, srcfile, msginfo->msgnum); + if (syl_app_get()) { + g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); + g_signal_emit_by_name(syl_app_get(), "remove-msg", src, srcfile, msginfo->msgnum); + } g_free(srcfile); g_free(destfile); @@ -835,7 +839,8 @@ static gint mh_copy_msgs(Folder *folder, FolderItem *dest, GSList *msglist) break; } - g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "add-msg", dest, destfile, dest->last_num + 1); g_free(srcfile); g_free(destfile); @@ -871,7 +876,8 @@ static gint mh_remove_msg(Folder *folder, FolderItem *item, MsgInfo *msginfo) file = mh_fetch_msg(folder, item, msginfo->msgnum); g_return_val_if_fail(file != NULL, -1); - g_signal_emit_by_name(syl_app_get(), "remove-msg", item, file, msginfo->msgnum); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "remove-msg", item, file, msginfo->msgnum); S_LOCK(mh); @@ -909,7 +915,8 @@ static gint mh_remove_all_msg(Folder *folder, FolderItem *item) path = folder_item_get_path(item); g_return_val_if_fail(path != NULL, -1); - g_signal_emit_by_name(syl_app_get(), "remove-all-msg", item); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "remove-all-msg", item); S_LOCK(mh); @@ -1399,8 +1406,9 @@ static gint mh_move_folder_real(Folder *folder, FolderItem *item, g_free(paths[1]); new_id = folder_item_get_identifier(item); - g_signal_emit_by_name(syl_app_get(), "move-folder", item, old_id, - new_id); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "move-folder", item, + old_id, new_id); g_free(new_id); g_free(old_id); @@ -1439,7 +1447,8 @@ static gint mh_remove_folder(Folder *folder, FolderItem *item) } g_free(path); - g_signal_emit_by_name(syl_app_get(), "remove-folder", item); + if (syl_app_get()) + g_signal_emit_by_name(syl_app_get(), "remove-folder", item); folder_item_remove(item); S_UNLOCK(mh); diff --git a/libsylph/sylmain.c b/libsylph/sylmain.c index 649c4d3a..6e8ccb80 100644 --- a/libsylph/sylmain.c +++ b/libsylph/sylmain.c @@ -63,6 +63,7 @@ enum { REMOVE_FOLDER, MOVE_FOLDER, FOLDERLIST_UPDATED, + ACCOUNT_UPDATED, LAST_SIGNAL }; @@ -162,6 +163,15 @@ static void syl_app_class_init(SylAppClass *klass) syl_marshal_VOID__VOID, G_TYPE_NONE, 0); + app_signals[ACCOUNT_UPDATED] = + g_signal_new("account-updated", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + syl_marshal_VOID__VOID, + G_TYPE_NONE, + 0); } GObject *syl_app_create(void) diff --git a/src/account_dialog.c b/src/account_dialog.c index 50faba35..b1e65307 100644 --- a/src/account_dialog.c +++ b/src/account_dialog.c @@ -600,6 +600,7 @@ static void account_edit_close(void) { GList *account_list; + account_update_lock(); account_set_list(); account_write_config_all(); @@ -613,6 +614,8 @@ static void account_edit_close(void) account_set_menu(); main_window_reflect_prefs_all(); + account_update_unlock(); + account_updated(); gtk_widget_hide(edit_account.window); main_window_popup(main_window_get()); |