From 66318ca6b08244b2a21530a05382af49a1821b51 Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Tue, 28 Oct 2003 18:15:37 +0000 Subject: added "fill_popup_menu" signal, to allow the addition of new items to the 2003-10-28 Rodrigo Moya * e-source-selector.[ch]: added "fill_popup_menu" signal, to allow the addition of new items to the popup menu. (class_init): create new signal. (init): connect to "button_press_event" for the tree view. (selector_button_press_event): callback for "button_press_event". (e_source_selector_selection_shown): use g_return_val_if_fail. svn path=/trunk/; revision=23106 --- widgets/misc/e-source-selector.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'widgets/misc/e-source-selector.c') diff --git a/widgets/misc/e-source-selector.c b/widgets/misc/e-source-selector.c index 5bc12bcd39..f7814ad99b 100644 --- a/widgets/misc/e-source-selector.c +++ b/widgets/misc/e-source-selector.c @@ -55,6 +55,7 @@ struct _ESourceSelectorPrivate { enum { SELECTION_CHANGED, PRIMARY_SELECTION_CHANGED, + FILL_POPUP_MENU, NUM_SIGNALS }; static unsigned int signals[NUM_SIGNALS] = { 0 }; @@ -315,6 +316,24 @@ selection_changed_callback (GtkTreeSelection *selection, g_signal_emit (selector, signals[PRIMARY_SELECTION_CHANGED], 0); } +static gboolean +selector_button_press_event (GtkWidget *widget, GdkEventButton *event, ESourceSelector *selector) +{ + GtkWidget *menu; + + /* only process right-clicks */ + if (event->button != 3) + return FALSE; + + /* create the menu */ + menu = gtk_menu_new (); + g_signal_emit (G_OBJECT (selector), signals[FILL_POPUP_MENU], 0, GTK_MENU (menu)); + + /* popup the menu */ + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); + + return TRUE; +} /* GObject methods. */ @@ -386,6 +405,14 @@ class_init (ESourceSelectorClass *class) NULL, NULL, e_util_marshal_VOID__VOID, G_TYPE_NONE, 0); + signals[FILL_POPUP_MENU] = + g_signal_new ("fill_popup_menu", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ESourceSelectorClass, fill_popup_menu), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_OBJECT, 0); } static void @@ -399,6 +426,9 @@ init (ESourceSelector *selector) priv = g_new0 (ESourceSelectorPrivate, 1); selector->priv = priv; + g_signal_connect (G_OBJECT (selector), "button_press_event", + G_CALLBACK (selector_button_press_event), selector); + priv->checkboxes_shown = TRUE; priv->selected_sources = create_selected_sources_hash (); @@ -546,7 +576,7 @@ e_source_selector_show_selection (ESourceSelector *selector, gboolean e_source_selector_selection_shown (ESourceSelector *selector) { - g_return_if_fail (E_IS_SOURCE_SELECTOR (selector)); + g_return_val_if_fail (E_IS_SOURCE_SELECTOR (selector), FALSE); return selector->priv->checkboxes_shown; } -- cgit v1.2.3