diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compose.c | 21 | ||||
-rw-r--r-- | src/compose.h | 5 | ||||
-rw-r--r-- | src/main.c | 7 | ||||
-rw-r--r-- | src/plugin.c | 76 | ||||
-rw-r--r-- | src/plugin.h | 23 |
5 files changed, 130 insertions, 2 deletions
diff --git a/src/compose.c b/src/compose.c index 41ab17a9..3b528c19 100644 --- a/src/compose.c +++ b/src/compose.c @@ -133,6 +133,7 @@ #include "quote_fmt.h" #include "template.h" #include "undo.h" +#include "plugin.h" #if USE_GPGME # include "rfc2015.h" @@ -803,6 +804,8 @@ Compose *compose_new(PrefsAccount *account, FolderItem *item, compose_connect_changed_callbacks(compose); compose_set_title(compose); + syl_plugin_signal_emit("compose-created", compose); + if (prefs_common.enable_autosave && prefs_common.autosave_itv > 0) compose->autosave_tag = g_timeout_add(prefs_common.autosave_itv * 60 * 1000, @@ -908,6 +911,8 @@ void compose_reply(MsgInfo *msginfo, FolderItem *item, ComposeMode mode, procmsg_msginfo_free(replyinfo); + syl_plugin_signal_emit("compose-created", compose); + if (prefs_common.enable_autosave && prefs_common.autosave_itv > 0) compose->autosave_tag = g_timeout_add(prefs_common.autosave_itv * 60 * 1000, @@ -1041,6 +1046,8 @@ void compose_forward(GSList *mlist, FolderItem *item, gboolean as_attach, else gtk_widget_grab_focus(compose->newsgroups_entry); + syl_plugin_signal_emit("compose-created", compose); + if (prefs_common.enable_autosave && prefs_common.autosave_itv > 0) compose->autosave_tag = g_timeout_add(prefs_common.autosave_itv * 60 * 1000, @@ -1110,6 +1117,8 @@ void compose_redirect(MsgInfo *msginfo, FolderItem *item) compose_connect_changed_callbacks(compose); compose_set_title(compose); + + syl_plugin_signal_emit("compose-created", compose); } void compose_reedit(MsgInfo *msginfo) @@ -1208,6 +1217,8 @@ void compose_reedit(MsgInfo *msginfo) menu_set_active(ifactory, "/Tools/Request disposition notification", TRUE); } + syl_plugin_signal_emit("compose-created", compose); + if (prefs_common.enable_autosave && prefs_common.autosave_itv > 0) compose->autosave_tag = g_timeout_add(prefs_common.autosave_itv * 60 * 1000, @@ -1318,6 +1329,14 @@ void compose_entry_append(Compose *compose, const gchar *text, gtk_editable_insert_text(GTK_EDITABLE(entry), text, -1, &pos); } +gchar *compose_entry_get_text(Compose *compose, ComposeEntryType type) +{ + GtkEntry *entry; + + entry = compose_get_entry(compose, type); + return gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); +} + static void compose_entries_set(Compose *compose, const gchar *mailto) { gchar *to = NULL; @@ -6008,6 +6027,8 @@ static void compose_destroy(Compose *compose) if (compose->autosave_tag > 0) g_source_remove(compose->autosave_tag); + syl_plugin_signal_emit("compose-destroy", compose); + /* NOTE: address_completion_end() does nothing with the window * however this may change. */ address_completion_end(compose->window); diff --git a/src/compose.h b/src/compose.h index 10b4900b..d73c94b9 100644 --- a/src/compose.h +++ b/src/compose.h @@ -132,12 +132,11 @@ struct _Compose GtkWidget *tmpl_menu; -#if USE_GTKSPELL + /* GtkSpell */ GtkWidget *spell_menu; gchar *spell_lang; gboolean check_spell; GSList *dict_list; -#endif ComposeMode mode; @@ -233,6 +232,8 @@ void compose_entry_set (Compose *compose, void compose_entry_append (Compose *compose, const gchar *text, ComposeEntryType type); +gchar *compose_entry_get_text (Compose *compose, + ComposeEntryType type); void compose_lock (Compose *compose); void compose_unlock (Compose *compose); @@ -1125,6 +1125,13 @@ static void plugin_init(void) messageview_create_with_new_window); syl_plugin_add_symbol("messageview_show", messageview_show); + syl_plugin_add_symbol("compose_new", compose_new); + syl_plugin_add_symbol("compose_entry_set", compose_entry_set); + syl_plugin_add_symbol("compose_entry_append", compose_entry_append); + syl_plugin_add_symbol("compose_entry_get_text", compose_entry_get_text); + syl_plugin_add_symbol("compose_lock", compose_lock); + syl_plugin_add_symbol("compose_unlock", compose_unlock); + syl_plugin_add_symbol("foldersel_folder_sel", foldersel_folder_sel); syl_plugin_add_symbol("foldersel_folder_sel_full", diff --git a/src/plugin.c b/src/plugin.c index 51968572..108573b7 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -31,6 +31,8 @@ enum { PLUGIN_LOAD, PLUGIN_UNLOAD, FOLDERVIEW_MENU_POPUP, + COMPOSE_CREATED, + COMPOSE_DESTROY, LAST_SIGNAL }; @@ -103,6 +105,26 @@ static void syl_plugin_class_init(SylPluginClass *klass) G_TYPE_NONE, 1, G_TYPE_POINTER); + plugin_signals[COMPOSE_CREATED] = + g_signal_new("compose-created", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SylPluginClass, compose_created), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, + 1, + G_TYPE_POINTER); + plugin_signals[COMPOSE_DESTROY] = + g_signal_new("compose-destroy", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SylPluginClass, compose_destroy), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, + 1, + G_TYPE_POINTER); } void syl_plugin_signal_connect(const gchar *name, GCallback callback, @@ -648,6 +670,60 @@ void syl_plugin_open_message_by_new_window(MsgInfo *msginfo) } } + +gpointer syl_plugin_compose_new(PrefsAccount *account, FolderItem *item, + const gchar *mailto, GPtrArray *attach_files) +{ + gpointer (*func)(PrefsAccount *, FolderItem *, const gchar *, + GPtrArray *); + + func = syl_plugin_lookup_symbol("compose_new"); + return SAFE_CALL_ARG4_RET(func, account, item, mailto, attach_files); +} + +void syl_plugin_compose_entry_set(gpointer compose, const gchar *text, + gint type) +{ + void (*func)(gpointer, const gchar *, gint); + + func = syl_plugin_lookup_symbol("compose_entry_set"); + SAFE_CALL_ARG3(func, compose, text, type); +} + +void syl_plugin_compose_entry_append(gpointer compose, const gchar *text, + gint type) +{ + void (*func)(gpointer, const gchar *, gint); + + func = syl_plugin_lookup_symbol("compose_entry_append"); + SAFE_CALL_ARG3(func, compose, text, type); +} + +gchar *syl_plugin_compose_entry_get_text(gpointer compose, gint type) +{ + gchar * (*func)(gpointer, gint); + + func = syl_plugin_lookup_symbol("compose_entry_get_text"); + return SAFE_CALL_ARG2_RET(func, compose, type); +} + +void syl_plugin_compose_lock(gpointer compose) +{ + void (*func)(gpointer); + + func = syl_plugin_lookup_symbol("compose_lock"); + SAFE_CALL_ARG1(func, compose); +} + +void syl_plugin_compose_unlock(gpointer compose) +{ + void (*func)(gpointer); + + func = syl_plugin_lookup_symbol("compose_unlock"); + SAFE_CALL_ARG1(func, compose); +} + + FolderItem *syl_plugin_folder_sel(Folder *cur_folder, gint sel_type, const gchar *default_folder) { diff --git a/src/plugin.h b/src/plugin.h index 94ea652d..50f5738b 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -58,7 +58,11 @@ struct _SylPluginClass void (* plugin_load) (GObject *obj, GModule *module); void (* plugin_unload) (GObject *obj, GModule *module); + void (* folderview_menu_popup) (GObject *obj, gpointer ifactory); + + void (* compose_created) (GObject *obj, gpointer compose); + void (* compose_destroy) (GObject *obj, gpointer compose); }; struct _SylPluginInfo @@ -155,6 +159,25 @@ gpointer syl_plugin_messageview_create_with_new_window (void); void syl_plugin_open_message_by_new_window (MsgInfo *msginfo); +/* Compose */ +gpointer syl_plugin_compose_new (PrefsAccount *account, + FolderItem *item, + const gchar *mailto, + GPtrArray *attach_files); + +/* entry type: + 0: To 1: Cc 2: Bcc 3: Reply-To 4: Subject 5: Newsgroups 6: Followup-To */ +void syl_plugin_compose_entry_set (gpointer compose, + const gchar *text, + gint type); +void syl_plugin_compose_entry_append (gpointer compose, + const gchar *text, + gint type); +gchar *syl_plugin_compose_entry_get_text (gpointer compose, + gint type); +void syl_plugin_compose_lock (gpointer compose); +void syl_plugin_compose_unlock (gpointer compose); + /* Others */ FolderItem *syl_plugin_folder_sel (Folder *cur_folder, gint sel_type, |