diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | plugin/test/test.c | 38 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/plugin.c | 14 | ||||
-rw-r--r-- | src/plugin.h | 1 | ||||
-rw-r--r-- | src/summaryview.c | 3 |
6 files changed, 61 insertions, 5 deletions
@@ -1,3 +1,11 @@ +2010-07-06 + + * src/plugin.[ch] + src/main.c + src/summaryview.c + plugin/test/test.c: added new plug-in APIs for manipulating the + summary view popup menu. + 2010-07-02 * src/mainwindow.c diff --git a/plugin/test/test.c b/plugin/test/test.c index bd42fb4b..07b2112e 100644 --- a/plugin/test/test.c +++ b/plugin/test/test.c @@ -34,8 +34,14 @@ static SylPluginInfo info = { static void init_done_cb(GObject *obj, gpointer data); static void app_exit_cb(GObject *obj, gpointer data); -static void menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, - gpointer data); + +static void folderview_menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, + gpointer data); +static void summaryview_menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, + gpointer data); + +static void menu_selected_cb(void); + static void compose_created_cb(GObject *obj, gpointer compose); static void compose_destroy_cb(GObject *obj, gpointer compose); @@ -75,12 +81,18 @@ void plugin_load(void) g_signal_connect(syl_app_get(), "app-exit", G_CALLBACK(app_exit_cb), NULL); syl_plugin_signal_connect("folderview-menu-popup", - G_CALLBACK(menu_popup_cb), NULL); + G_CALLBACK(folderview_menu_popup_cb), NULL); + syl_plugin_signal_connect("summaryview-menu-popup", + G_CALLBACK(summaryview_menu_popup_cb), NULL); syl_plugin_signal_connect("compose-created", G_CALLBACK(compose_created_cb), NULL); syl_plugin_signal_connect("compose-destroy", G_CALLBACK(compose_destroy_cb), NULL); + syl_plugin_add_factory_item("<SummaryView>", "/---", NULL, NULL); + syl_plugin_add_factory_item("<SummaryView>", "/Test Plug-in menu", + menu_selected_cb, NULL); + g_print("test plug-in loading done\n"); } @@ -109,12 +121,28 @@ static void app_exit_cb(GObject *obj, gpointer data) g_print("test: %p: app will exit\n", obj); } -static void menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, - gpointer data) +static void folderview_menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, + gpointer data) { g_print("test: %p: folderview menu popup\n", obj); } +static void summaryview_menu_popup_cb(GObject *obj, GtkItemFactory *ifactory, + gpointer data) +{ + GtkWidget *widget; + + g_print("test: %p: summaryview menu popup\n", obj); + widget = gtk_item_factory_get_item(ifactory, "/Test Plug-in menu"); + if (widget) + gtk_widget_set_sensitive(widget, TRUE); +} + +static void menu_selected_cb(void) +{ + g_print("test: menu selected\n"); +} + static void compose_created_cb(GObject *obj, gpointer compose) { gchar *text; @@ -1159,6 +1159,8 @@ static void plugin_init(void) mainwin->folderview->news_factory); syl_plugin_add_symbol("summaryview", mainwin->summaryview); + syl_plugin_add_symbol("summaryview_popup_factory", + mainwin->summaryview->popupfactory); ADD_SYM(summary_select_by_msgnum); ADD_SYM(summary_select_by_msginfo); diff --git a/src/plugin.c b/src/plugin.c index e428898c..85da3f10 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -31,6 +31,7 @@ enum { PLUGIN_LOAD, PLUGIN_UNLOAD, FOLDERVIEW_MENU_POPUP, + SUMMARYVIEW_MENU_POPUP, COMPOSE_CREATED, COMPOSE_DESTROY, LAST_SIGNAL @@ -107,6 +108,17 @@ static void syl_plugin_class_init(SylPluginClass *klass) G_TYPE_NONE, 1, G_TYPE_POINTER); + plugin_signals[SUMMARYVIEW_MENU_POPUP] = + g_signal_new("summaryview-menu-popup", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(SylPluginClass, + summaryview_menu_popup), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, + 1, + G_TYPE_POINTER); plugin_signals[COMPOSE_CREATED] = g_signal_new("compose-created", G_TYPE_FROM_CLASS(gobject_class), @@ -433,6 +445,8 @@ static GtkItemFactory *get_item_factory(const gchar *path) ifactory = syl_plugin_lookup_symbol("folderview_imap_popup_factory"); else if (strncmp(path, "<NewsFolder>", 12) == 0) ifactory = syl_plugin_lookup_symbol("folderview_news_popup_factory"); + else if (strncmp(path, "<SummaryView>", 13) == 0) + ifactory = syl_plugin_lookup_symbol("summaryview_popup_factory"); else ifactory = syl_plugin_lookup_symbol("main_window_menu_factory"); diff --git a/src/plugin.h b/src/plugin.h index 5ec55af5..6632f8e5 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -60,6 +60,7 @@ struct _SylPluginClass void (* plugin_unload) (GObject *obj, GModule *module); void (* folderview_menu_popup) (GObject *obj, gpointer ifactory); + void (* summaryview_menu_popup) (GObject *obj, gpointer ifactory); void (* compose_created) (GObject *obj, gpointer compose); void (* compose_destroy) (GObject *obj, gpointer compose); diff --git a/src/summaryview.c b/src/summaryview.c index b7bedbe2..b703b847 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -84,6 +84,7 @@ #include "colorlabel.h" #include "inc.h" #include "imap.h" +#include "plugin.h" #define STATUSBAR_PUSH(mainwin, str) \ { \ @@ -5645,6 +5646,8 @@ static gboolean summary_button_pressed(GtkWidget *treeview, return TRUE; } else if (event->button == 3) { /* right clicked */ + syl_plugin_signal_emit("summaryview-menu-popup", + summaryview->popupfactory); gtk_menu_popup(GTK_MENU(summaryview->popupmenu), NULL, NULL, NULL, NULL, event->button, event->time); if (is_selected) { |