aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--lib/widgets/ephy-node-view.c11
-rw-r--r--src/bookmarks/ephy-bookmark-action.c21
-rw-r--r--src/bookmarks/ephy-topic-action.c53
-rw-r--r--src/ephy-window.c3
5 files changed, 83 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 98265e36a..22ddcc929 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2004-11-07 Christian Persch <chpe@cvs.gnome.org>
+ * lib/widgets/ephy-node-view.c: (ephy_node_view_popup):
+ * src/bookmarks/ephy-bookmark-action.c: (show_context_menu),
+ (popup_menu_cb), (button_press_cb):
+ * src/bookmarks/ephy-topic-action.c: (button_toggled_cb),
+ (show_context_menu), (popup_menu_cb), (button_press_cb):
+ * src/ephy-window.c: (show_embed_popup):
+
+ When popping up the context menu with keyboard, select the first
+ menu item. Fixes bug #154907.
+
+2004-11-07 Christian Persch <chpe@cvs.gnome.org>
+
* embed/mozilla/ContentHandler.cpp:
Use GtkMessageDialog here.
diff --git a/lib/widgets/ephy-node-view.c b/lib/widgets/ephy-node-view.c
index 2a0ec2d6f..2f3df35e7 100644
--- a/lib/widgets/ephy-node-view.c
+++ b/lib/widgets/ephy-node-view.c
@@ -1581,14 +1581,19 @@ ephy_node_view_popup (EphyNodeView *view, GtkWidget *menu)
{
if (event->type == GDK_KEY_PRESS)
{
+ GdkEventKey *key = (GdkEventKey *) event;
+
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
ephy_gui_menu_position_tree_selection,
- view, 2, gtk_get_current_event_time ());
+ view, 0, key->time);
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
}
- else
+ else if (event->type == GDK_BUTTON_PRESS)
{
+ GdkEventButton *button = (GdkEventButton *) event;
+
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL,
- NULL, 2, gtk_get_current_event_time ());
+ NULL, button->button, button->time);
}
gdk_event_free (event);
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c
index a1e12f15b..27ab1d870 100644
--- a/src/bookmarks/ephy-bookmark-action.c
+++ b/src/bookmarks/ephy-bookmark-action.c
@@ -533,7 +533,9 @@ properties_activate_cb (GtkWidget *menu,
}
static void
-show_context_menu (EphyBookmarkAction *action, GtkWidget *proxy,
+show_context_menu (EphyBookmarkAction *action,
+ GtkWidget *proxy,
+ GdkEventButton *event,
GtkMenuPositionFunc func)
{
GtkWidget *menu, *item;
@@ -593,8 +595,17 @@ show_context_menu (EphyBookmarkAction *action, GtkWidget *proxy,
g_signal_connect (item, "activate",
G_CALLBACK (move_right_activate_cb), proxy);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy, 3,
- gtk_get_current_event_time ());
+ if (event != NULL)
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy,
+ event->button, event->time);
+ }
+ else
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy, 0,
+ gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
+ }
}
static gboolean
@@ -602,7 +613,7 @@ popup_menu_cb (GtkWidget *widget, EphyBookmarkAction *action)
{
if (gtk_widget_get_ancestor (widget, EPHY_TYPE_BOOKMARKSBAR))
{
- show_context_menu (action, widget,
+ show_context_menu (action, widget, NULL,
ephy_gui_menu_position_under_widget);
return TRUE;
}
@@ -618,7 +629,7 @@ button_press_cb (GtkWidget *widget,
if (event->button == 3 &&
gtk_widget_get_ancestor (widget, EPHY_TYPE_BOOKMARKSBAR))
{
- show_context_menu (action, widget, NULL);
+ show_context_menu (action, widget, event, NULL);
return TRUE;
}
else if (event->button == 2)
diff --git a/src/bookmarks/ephy-topic-action.c b/src/bookmarks/ephy-topic-action.c
index 17004b0b5..878b7da54 100644
--- a/src/bookmarks/ephy-topic-action.c
+++ b/src/bookmarks/ephy-topic-action.c
@@ -686,13 +686,39 @@ button_toggled_cb (GtkWidget *button,
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
{
GtkWidget *menu;
+ GdkEvent *event;
+ guint32 event_time = 0;
+ guint event_button = 0;
menu = build_menu (action);
g_signal_connect (menu, "deactivate",
G_CALLBACK (menu_deactivate_cb), button);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- ephy_gui_menu_position_under_widget,
- button, 1, gtk_get_current_event_time ());
+
+ event = gtk_get_current_event ();
+ if (event != NULL)
+ {
+ if (event->type == GDK_BUTTON_PRESS)
+ {
+ event_button = ((GdkEventButton *) event)->button;
+ event_time = ((GdkEventButton *) event)->time;
+ }
+
+ gdk_event_free (event);
+ }
+
+ if (event_button == 0)
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+ ephy_gui_menu_position_under_widget,
+ button, 0 , gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
+ }
+ else
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+ ephy_gui_menu_position_under_widget,
+ button, event_button, event_time);
+ }
g_object_set_data (G_OBJECT (button), "popup", menu);
}
@@ -723,7 +749,9 @@ create_menu_item (GtkAction *action)
}
static void
-show_context_menu (EphyTopicAction *action, GtkWidget *proxy,
+show_context_menu (EphyTopicAction *action,
+ GtkWidget *proxy,
+ GdkEventButton *event,
GtkMenuPositionFunc func)
{
GtkWidget *menu, *item;
@@ -763,8 +791,17 @@ show_context_menu (EphyTopicAction *action, GtkWidget *proxy,
g_signal_connect (item, "activate",
G_CALLBACK (move_right_activate_cb), proxy);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy, 3,
- gtk_get_current_event_time ());
+ if (event != NULL)
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy,
+ event->button, event->time);
+ }
+ else
+ {
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, func, proxy, 0,
+ gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
+ }
}
static gboolean
@@ -772,7 +809,7 @@ popup_menu_cb (GtkWidget *widget, EphyTopicAction *action)
{
if (gtk_widget_get_ancestor (widget, EPHY_TYPE_BOOKMARKSBAR))
{
- show_context_menu (action, widget,
+ show_context_menu (action, widget, NULL,
ephy_gui_menu_position_under_widget);
return TRUE;
}
@@ -832,7 +869,7 @@ button_press_cb (GtkWidget *widget,
else if (event->button == 3 &&
gtk_widget_get_ancestor (widget, EPHY_TYPE_BOOKMARKSBAR))
{
- show_context_menu (action, widget, NULL);
+ show_context_menu (action, widget, event, NULL);
return TRUE;
}
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 2e23502c0..2ed8e044f 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -1761,8 +1761,9 @@ show_embed_popup (EphyWindow *window, EphyTab *tab, EphyEmbedEvent *event)
if (type == EPHY_EMBED_EVENT_KEY)
{
gtk_menu_popup (GTK_MENU (widget), NULL, NULL,
- popup_menu_at_coords, event, 2,
+ popup_menu_at_coords, event, 0,
gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (widget), FALSE);
}
else
{