aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Djärv2008-07-28 07:15:44 +0000
committerJan Djärv2008-07-28 07:15:44 +0000
commit42ffd097cf4bba5c5df93bf95f30cf2ea859a695 (patch)
treef5a11a3b5ee3143f7cf92a8d6fce1de39029989d /src
parent01b9ed77ee5bc05a9406cfd084134ef0842b22ad (diff)
downloademacs-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/ChangeLog5
-rw-r--r--src/gtkutil.c34
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 @@
12008-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
12008-07-27 Adrian Robert <Adrian.B.Robert@gmail.com> 62008-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
2147static void
2148menu_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
2142static GtkWidget *create_menus P_ ((widget_value *, FRAME_PTR, GCallback, 2170static 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);