diff options
| author | Karoly Lorentey | 2006-06-12 07:27:12 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-06-12 07:27:12 +0000 |
| commit | 476e9367ec1f440aa23904b7bc482ea4a3b8041c (patch) | |
| tree | 4f7f5a5e9a6668f908834bb6e216c8fa3727d4b3 /src/gtkutil.c | |
| parent | a13f8f50d4cc544d3bbfa78568e82ce09e68bded (diff) | |
| parent | 6b519504c3297595101628e823e72c91e562ab45 (diff) | |
| download | emacs-476e9367ec1f440aa23904b7bc482ea4a3b8041c.tar.gz emacs-476e9367ec1f440aa23904b7bc482ea4a3b8041c.zip | |
Merged from emacs@sv.gnu.org.
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-294
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-295
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-296
Update from CVS: admin/FOR-RELEASE: Update refcard section.
* emacs@sv.gnu.org/emacs--devo--0--patch-297
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-298
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-299
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-300
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-301
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-302
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-303
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-304
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-103
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-104
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-570
Diffstat (limited to 'src/gtkutil.c')
| -rw-r--r-- | src/gtkutil.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index ec886b52faf..f4a2b4d3f52 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -1970,6 +1970,34 @@ xg_create_one_menuitem (item, f, select_cb, highlight_cb, cl_data, group) | |||
| 1970 | return w; | 1970 | return w; |
| 1971 | } | 1971 | } |
| 1972 | 1972 | ||
| 1973 | /* Callback called when keyboard traversal (started by menu-bar-open) ends. | ||
| 1974 | WMENU is the menu for which traversal has been done. DATA points to the | ||
| 1975 | frame for WMENU. We must release grabs, some bad interaction between GTK | ||
| 1976 | and Emacs makes the menus keep the grabs. */ | ||
| 1977 | |||
| 1978 | static void | ||
| 1979 | menu_nav_ended (wmenu, data) | ||
| 1980 | GtkMenuShell *wmenu; | ||
| 1981 | gpointer data; | ||
| 1982 | { | ||
| 1983 | FRAME_PTR f = (FRAME_PTR) data; | ||
| 1984 | |||
| 1985 | if (FRAME_X_OUTPUT (f)->menubar_widget) | ||
| 1986 | { | ||
| 1987 | GtkMenuShell *w = GTK_MENU_SHELL (FRAME_X_OUTPUT (f)->menubar_widget); | ||
| 1988 | Display *dpy = FRAME_X_DISPLAY (f); | ||
| 1989 | |||
| 1990 | BLOCK_INPUT; | ||
| 1991 | gtk_menu_shell_deactivate (w); | ||
| 1992 | gtk_menu_shell_deselect (w); | ||
| 1993 | |||
| 1994 | XUngrabKeyboard (dpy, CurrentTime); | ||
| 1995 | XUngrabPointer (dpy, CurrentTime); | ||
| 1996 | UNBLOCK_INPUT; | ||
| 1997 | } | ||
| 1998 | } | ||
| 1999 | |||
| 2000 | |||
| 1973 | static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback, | 2001 | static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback, |
| 1974 | GCallback, GCallback, int, int, int, | 2002 | GCallback, GCallback, int, int, int, |
| 1975 | GtkWidget *, xg_menu_cb_data *, char *)); | 2003 | GtkWidget *, xg_menu_cb_data *, char *)); |
| @@ -2024,6 +2052,12 @@ create_menus (data, f, select_cb, deactivate_cb, highlight_cb, | |||
| 2024 | } | 2052 | } |
| 2025 | else wmenu = gtk_menu_bar_new (); | 2053 | else wmenu = gtk_menu_bar_new (); |
| 2026 | 2054 | ||
| 2055 | /* Fix up grabs after keyboard traversal ends. */ | ||
| 2056 | g_signal_connect (G_OBJECT (wmenu), | ||
| 2057 | "selection-done", | ||
| 2058 | G_CALLBACK (menu_nav_ended), | ||
| 2059 | f); | ||
| 2060 | |||
| 2027 | /* Put cl_data on the top menu for easier access. */ | 2061 | /* Put cl_data on the top menu for easier access. */ |
| 2028 | cl_data = make_cl_data (cl_data, f, highlight_cb); | 2062 | cl_data = make_cl_data (cl_data, f, highlight_cb); |
| 2029 | g_object_set_data (G_OBJECT (wmenu), XG_FRAME_DATA, (gpointer)cl_data); | 2063 | g_object_set_data (G_OBJECT (wmenu), XG_FRAME_DATA, (gpointer)cl_data); |