/home/otaylor/commit

This commit is contained in:
Owen Taylor
1998-03-24 01:43:21 +00:00
parent 7bd32a06cf
commit 34e324ca70
17 changed files with 308 additions and 52 deletions

View File

@ -279,6 +279,9 @@ gtk_menu_popup (GtkMenu *menu,
guint button,
guint32 activate_time)
{
GtkWidget *xgrab_shell;
GtkWidget *parent;
g_return_if_fail (menu != NULL);
g_return_if_fail (GTK_IS_MENU (menu));
@ -292,6 +295,41 @@ gtk_menu_popup (GtkMenu *menu,
GTK_MENU_SHELL (menu)->activate_time = activate_time;
gtk_widget_show (GTK_WIDGET (menu));
/* Find the last viewable ancestor, and make an X grab on it
*/
parent = GTK_WIDGET (menu);
xgrab_shell = NULL;
while (parent)
{
gboolean viewable = TRUE;
GtkWidget *tmp = parent;
while (tmp)
{
if (!GTK_WIDGET_MAPPED (tmp))
{
viewable = FALSE;
break;
}
tmp = tmp->parent;
}
if (viewable)
xgrab_shell = parent;
parent = GTK_MENU_SHELL (parent)->parent_menu_shell;
}
if (xgrab_shell && (!GTK_MENU_SHELL (xgrab_shell)->have_xgrab))
{
GTK_MENU_SHELL (xgrab_shell)->have_xgrab =
(gdk_pointer_grab (xgrab_shell->window, TRUE,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK,
NULL, NULL, activate_time) == 0);
}
gtk_grab_add (GTK_WIDGET (menu));
}
@ -315,7 +353,11 @@ gtk_menu_popdown (GtkMenu *menu)
menu_shell->active_menu_item = NULL;
}
/* The X Grab, if present, will automatically be removed when we hide
* the window */
gtk_widget_hide (GTK_WIDGET (menu));
menu_shell->have_xgrab = FALSE;
gtk_grab_remove (GTK_WIDGET (menu));
}