Re: [evolution-patches] Show popup menu of e-source-selector with Shift+F10



Revised patch for HEAD. Please review it.
    Harry

Harry Lu wrote:
Hi,
   Attached is the patch for HEAD. Please review it.
   Thanks!
      Harry

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/ChangeLog,v
retrieving revision 1.325
diff -u -r1.325 ChangeLog
--- ChangeLog	13 Sep 2004 16:24:32 -0000	1.325
+++ ChangeLog	20 Sep 2004 06:59:14 -0000
@@ -1,3 +1,9 @@
+2004-09-20  Harry Lu  <harry lu sun com>
+
+	* e-source-selector.c: (e_source_selector_popup_menu),
+	(class_init): implement popup_menu so that popup menu can
+	be shown with Shift+F10.
+
 2004-09-13  Rodney Dawes  <dobey novell com>
 
 	* e-multi-config-dialog.c (impl_response):
Index: e-source-selector.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-source-selector.c,v
retrieving revision 1.22
diff -u -r1.22 e-source-selector.c
--- e-source-selector.c	20 Jul 2004 16:36:43 -0000	1.22
+++ e-source-selector.c	20 Sep 2004 06:59:15 -0000
@@ -575,11 +575,28 @@
 	return FALSE;	
 }
 
+static void
+selector_real_popup_menu (ESourceSelector *selector, GdkEvent *event)
+{
+	GtkWidget *menu;
+
+	/* create the menu */
+	menu = gtk_menu_new ();
+	g_signal_emit (G_OBJECT (selector), signals[FILL_POPUP_MENU], 0, GTK_MENU (menu));
+
+	/* popup the menu */
+	if (event == NULL || event->type == GDK_KEY_PRESS) {
+		gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME);
+	} else {
+		gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button.button, event->button.time);
+	}
+
+}
+
 static gboolean
 selector_button_press_event (GtkWidget *widget, GdkEventButton *event, ESourceSelector *selector)
 {
 	ESourceSelectorPrivate *priv = selector->priv;
-	GtkWidget *menu;
 	GtkTreePath *path;
 	ESource *source = NULL;
 	
@@ -611,14 +628,9 @@
 		e_source_selector_set_primary_selection (selector, source);
 		g_object_unref (source);
 	}
-	
-	/* 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);
 
+	selector_real_popup_menu (selector, (GdkEvent *)event);
+	
 	return TRUE;
 }
 
@@ -664,6 +676,18 @@
 	(* G_OBJECT_CLASS (parent_class)->finalize) (object);
 }
 
+static gboolean
+e_source_selector_popup_menu (GtkWidget *widget)
+{
+	ESourceSelector *selector = E_SOURCE_SELECTOR (widget);
+
+	if (e_source_selector_peek_primary_selection (selector)) {
+		selector_real_popup_menu (selector, NULL);	
+		return TRUE;
+	}
+
+	return FALSE;
+}
 
 /* Initialization.  */
 
@@ -671,9 +695,12 @@
 class_init (ESourceSelectorClass *class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (class);
+	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
 
 	object_class->dispose  = impl_dispose;
 	object_class->finalize = impl_finalize;
+
+	widget_class->popup_menu = e_source_selector_popup_menu;
 
 	parent_class = g_type_class_peek_parent (class);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]