Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/composer/ChangeLog,v
retrieving revision 1.549
diff -u -r1.549 ChangeLog
--- ChangeLog	7 Jul 2003 21:33:14 -0000	1.549
+++ ChangeLog	9 Jul 2003 07:37:55 -0000
@@ -1,3 +1,14 @@
+2003-07-07  Maxx Cao  <maxx.cao@sun.com>
+
+	** For bug #45826
+
+	* e-msg-composer-attachment-bar.c (button_press_event): connect
+	the "popup_menu" signal, so that S-F10 keybinding will work.
+	(popup_menu_event): funcion added to handle "popup_menu" (S-F10 key).
+	(popup_menu_placement_callback): function added to place the popup
+	 menu to the center of attachment icon, in case it is activated by
+	 keyboard.
+	
 2003-07-07  Jeffrey Stedfast  <fejj@ximian.com>
 
 	* e-msg-composer.c (e_msg_composer_new_with_message): Updated to
Index: e-msg-composer-attachment-bar.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-attachment-bar.c,v
retrieving revision 1.68
diff -u -r1.68 e-msg-composer-attachment-bar.c
--- e-msg-composer-attachment-bar.c	3 Jul 2003 12:29:11 -0000	1.68
+++ e-msg-composer-attachment-bar.c	9 Jul 2003 07:37:55 -0000
@@ -527,6 +527,54 @@
 
 /* GtkWidget methods.  */
 
+
+static void
+popup_menu_placement_callback(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
+{
+	EMsgComposerAttachmentBar *bar;
+	GnomeIconList *icon_list;
+	GList *selection;
+	GnomeCanvasPixbuf *image;
+
+	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (user_data);
+	icon_list = GNOME_ICON_LIST (user_data);
+
+	gdk_window_get_origin (((GtkWidget*) bar)->window, x, y);
+
+	selection = gnome_icon_list_get_selection (icon_list);
+	if (selection == NULL)
+		return;
+
+	image = gnome_icon_list_get_icon_pixbuf_item (icon_list, (gint)selection->data);
+	if (image == NULL)
+		return;
+
+	/* Put menu to the center of icon. */
+	*x += (gint)(image->item.x1 + image->item.x2)/2;
+	*y += (gint)(image->item.y1 + image->item.y2)/2;
+
+}
+
+static gboolean 
+popup_menu_event (GtkWidget *widget)
+{
+	EMsgComposerAttachmentBar *bar = E_MSG_COMPOSER_ATTACHMENT_BAR (widget);
+	GnomeIconList *icon_list = GNOME_ICON_LIST (widget);
+	GList *selection = gnome_icon_list_get_selection (icon_list);
+	GtkMenu *menu;
+
+	if (selection==NULL)
+		menu = get_context_menu (bar);
+	else
+		menu = get_icon_context_menu (bar);
+
+	gnome_popup_menu_do_popup (menu, popup_menu_placement_callback, 
+				   (gpointer)widget, NULL, (gpointer)widget, NULL);
+
+	return TRUE;
+}
+
+
 static gint
 button_press_event (GtkWidget *widget,
 		    GdkEventButton *event)
@@ -572,6 +620,8 @@
 	object_class->destroy = destroy;
 	
 	widget_class->button_press_event = button_press_event;
+	widget_class->popup_menu = popup_menu_event;
+	
 	
 	/* Setup signals.  */
 	
