aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--plugin/test/test.c38
-rw-r--r--src/main.c2
-rw-r--r--src/plugin.c14
-rw-r--r--src/plugin.h1
-rw-r--r--src/summaryview.c3
6 files changed, 61 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c0a9bd9f..c31c1b6e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
diff --git a/src/main.c b/src/main.c
index fa725de5..97667b18 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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) {