diff options
| author | Jan Djärv | 2008-07-28 07:15:44 +0000 |
|---|---|---|
| committer | Jan Djärv | 2008-07-28 07:15:44 +0000 |
| commit | 42ffd097cf4bba5c5df93bf95f30cf2ea859a695 (patch) | |
| tree | f5a11a3b5ee3143f7cf92a8d6fce1de39029989d /src | |
| parent | 01b9ed77ee5bc05a9406cfd084134ef0842b22ad (diff) | |
| download | emacs-42ffd097cf4bba5c5df93bf95f30cf2ea859a695.tar.gz emacs-42ffd097cf4bba5c5df93bf95f30cf2ea859a695.zip | |
(menu_nav_ended): Revert change from 2008-07-24.
(create_menus): Connect selection-done to menu_nav_ended.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/gtkutil.c | 34 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index f60633e5183..3bf0a6a9b13 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2008-07-28 Jan Djärv <jan.h.d@swipnet.se> | ||
| 2 | |||
| 3 | * gtkutil.c (menu_nav_ended): Revert change from 2008-07-24. | ||
| 4 | (create_menus): Connect selection-done to menu_nav_ended. | ||
| 5 | |||
| 1 | 2008-07-27 Adrian Robert <Adrian.B.Robert@gmail.com> | 6 | 2008-07-27 Adrian Robert <Adrian.B.Robert@gmail.com> |
| 2 | 7 | ||
| 3 | * nsfns.m (x-create-frame): Add copy of parms argument to beginning. | 8 | * nsfns.m (x-create-frame): Add copy of parms argument to beginning. |
diff --git a/src/gtkutil.c b/src/gtkutil.c index 7e2a05eed89..2d47068293b 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -2139,6 +2139,34 @@ xg_create_one_menuitem (item, f, select_cb, highlight_cb, cl_data, group) | |||
| 2139 | return w; | 2139 | return w; |
| 2140 | } | 2140 | } |
| 2141 | 2141 | ||
| 2142 | /* Callback called when keyboard traversal (started by x-menu-bar-open) ends. | ||
| 2143 | WMENU is the menu for which traversal has been done. DATA points to the | ||
| 2144 | frame for WMENU. We must release grabs, some bad interaction between GTK | ||
| 2145 | and Emacs makes the menus keep the grabs. */ | ||
| 2146 | |||
| 2147 | static void | ||
| 2148 | menu_nav_ended (wmenu, data) | ||
| 2149 | GtkMenuShell *wmenu; | ||
| 2150 | gpointer data; | ||
| 2151 | { | ||
| 2152 | FRAME_PTR f = (FRAME_PTR) data; | ||
| 2153 | |||
| 2154 | if (FRAME_X_OUTPUT (f)->menubar_widget) | ||
| 2155 | { | ||
| 2156 | GtkMenuShell *w = GTK_MENU_SHELL (FRAME_X_OUTPUT (f)->menubar_widget); | ||
| 2157 | Display *dpy = FRAME_X_DISPLAY (f); | ||
| 2158 | |||
| 2159 | BLOCK_INPUT; | ||
| 2160 | gtk_menu_shell_deactivate (w); | ||
| 2161 | gtk_menu_shell_deselect (w); | ||
| 2162 | |||
| 2163 | XUngrabKeyboard (dpy, CurrentTime); | ||
| 2164 | XUngrabPointer (dpy, CurrentTime); | ||
| 2165 | UNBLOCK_INPUT; | ||
| 2166 | } | ||
| 2167 | } | ||
| 2168 | |||
| 2169 | |||
| 2142 | static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback, | 2170 | static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback, |
| 2143 | GCallback, GCallback, int, int, int, | 2171 | GCallback, GCallback, int, int, int, |
| 2144 | GtkWidget *, xg_menu_cb_data *, char *)); | 2172 | GtkWidget *, xg_menu_cb_data *, char *)); |
| @@ -2204,6 +2232,12 @@ create_menus (data, f, select_cb, deactivate_cb, highlight_cb, | |||
| 2204 | } | 2232 | } |
| 2205 | else wmenu = gtk_menu_bar_new (); | 2233 | else wmenu = gtk_menu_bar_new (); |
| 2206 | 2234 | ||
| 2235 | /* Fix up grabs after keyboard traversal ends. */ | ||
| 2236 | g_signal_connect (G_OBJECT (wmenu), | ||
| 2237 | "selection-done", | ||
| 2238 | G_CALLBACK (menu_nav_ended), | ||
| 2239 | f); | ||
| 2240 | |||
| 2207 | /* Put cl_data on the top menu for easier access. */ | 2241 | /* Put cl_data on the top menu for easier access. */ |
| 2208 | cl_data = make_cl_data (cl_data, f, highlight_cb); | 2242 | cl_data = make_cl_data (cl_data, f, highlight_cb); |
| 2209 | g_object_set_data (G_OBJECT (wmenu), XG_FRAME_DATA, (gpointer)cl_data); | 2243 | g_object_set_data (G_OBJECT (wmenu), XG_FRAME_DATA, (gpointer)cl_data); |