diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | lib/ephy-gui.c | 13 | ||||
-rw-r--r-- | lib/ephy-gui.h | 5 | ||||
-rw-r--r-- | src/ephy-window.c | 12 |
4 files changed, 34 insertions, 6 deletions
@@ -1,5 +1,15 @@ 2004-11-07 Christian Persch <chpe@cvs.gnome.org> + * lib/ephy-gui.c: (ephy_gui_sanitise_popup_position), + (ephy_gui_menu_position_tree_selection), + (ephy_gui_menu_position_under_widget): + * lib/ephy-gui.h: + * src/ephy-window.c: (popup_menu_at_coords), (show_embed_popup): + + Sanitise the embed popup position. Fixes bug #157162. + +2004-11-07 Christian Persch <chpe@cvs.gnome.org> + * src/ephy-session.c: (offer_to_resume): Better wording for the crash recovery dialogue. Thanks to Spark diff --git a/lib/ephy-gui.c b/lib/ephy-gui.c index 65e0b0de6..2e2d355c1 100644 --- a/lib/ephy-gui.c +++ b/lib/ephy-gui.c @@ -40,14 +40,19 @@ GtkStyle *loading_text_style = NULL; GtkStyle *new_text_style = NULL; -static void -sanitize_popup_position (GtkWidget *widget, GtkMenu *menu, gint *x, gint *y) +void +ephy_gui_sanitise_popup_position (GtkMenu *menu, + GtkWidget *widget, + gint *x, + gint *y) { GdkScreen *screen = gtk_widget_get_screen (widget); gint monitor_num; GdkRectangle monitor; GtkRequisition req; + g_return_if_fail (widget != NULL); + gtk_widget_size_request (GTK_WIDGET (menu), &req); monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y); @@ -92,7 +97,7 @@ ephy_gui_menu_position_tree_selection (GtkMenu *menu, g_list_free (selected_rows); } - sanitize_popup_position (widget, menu, x, y); + ephy_gui_sanitise_popup_position (menu, widget, x, y); } /** @@ -125,7 +130,7 @@ ephy_gui_menu_position_under_widget (GtkMenu *menu, *y += w->allocation.y + w->allocation.height; - sanitize_popup_position (w, menu, x, y); + ephy_gui_sanitise_popup_position (menu, w, x, y); } gboolean diff --git a/lib/ephy-gui.h b/lib/ephy-gui.h index 0c9c5a04c..caa4035d8 100644 --- a/lib/ephy-gui.h +++ b/lib/ephy-gui.h @@ -30,6 +30,11 @@ G_BEGIN_DECLS +void ephy_gui_sanitise_popup_position (GtkMenu *menu, + GtkWidget *parent_widget, + gint *x, + gint *y); + void ephy_gui_menu_position_tree_selection (GtkMenu *menu, gint *x, gint *y, diff --git a/src/ephy-window.c b/src/ephy-window.c index 2ed8e044f..f0c2455a9 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -50,6 +50,7 @@ #include "ephy-stock-icons.h" #include "ephy-extension.h" #include "ephy-favicon-cache.h" +#include "ephy-gui.h" #include <string.h> #include <glib/gi18n.h> @@ -1545,10 +1546,17 @@ static void popup_menu_at_coords (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data) { - EphyEmbedEvent *event = (EphyEmbedEvent *) user_data; + GtkWidget *window = GTK_WIDGET (user_data); + EphyEmbedEvent *event; + + event = g_object_get_data (G_OBJECT (window), "context_event"); + g_return_if_fail (event != NULL); ephy_embed_event_get_coords (event, x, y); + /* FIXME: better position the popup within the window bounds? */ + ephy_gui_sanitise_popup_position (menu, window, x, y); + *push_in = TRUE; } @@ -1761,7 +1769,7 @@ 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, 0, + popup_menu_at_coords, window, 0, gtk_get_current_event_time ()); gtk_menu_shell_select_first (GTK_MENU_SHELL (widget), FALSE); } |