From: Jan Djärv Date: Mon, 12 Dec 2005 08:08:43 +0000 (+0000) Subject: * xmenu.c (menubar_selection_callback): Do nothing if the callback X-Git-Tag: emacs-pretest-22.0.90~5319 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b79c8219e88f33e55a58789e4ea42f3c2b23c728;p=emacs.git * xmenu.c (menubar_selection_callback): Do nothing if the callback is for an unselected radio menu item. --- diff --git a/src/xmenu.c b/src/xmenu.c index 184ff2c8c47..468462a6ceb 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -1572,6 +1572,15 @@ menubar_selection_callback (widget, client_data) if (! cb_data || ! cb_data->cl_data || ! cb_data->cl_data->f) return; + /* For a group of radio buttons, GTK calls the selection callback first + for the item that was active before the selection and then for the one that + is active after the selection. For C-h k this means we get the help on + the deselected item and then the selected item is executed. Prevent that + by ignoring the non-active item. */ + if (GTK_IS_RADIO_MENU_ITEM (widget) + && ! gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget))) + return; + /* When a menu is popped down, X generates a focus event (i.e. focus goes back to the frame below the menu). Since GTK buffers events, we force it out here before the menu selection event. Otherwise @@ -1891,7 +1900,7 @@ update_submenu_strings (first_wv) { if (STRINGP (wv->lname)) { - wv->name = SDATA (wv->lname); + wv->name = (char *) SDATA (wv->lname); /* Ignore the @ that means "separate pane". This is a kludge, but this isn't worth more time. */ @@ -1904,7 +1913,7 @@ update_submenu_strings (first_wv) } if (STRINGP (wv->lkey)) - wv->key = SDATA (wv->lkey); + wv->key = (char *) SDATA (wv->lkey); if (wv->contents) update_submenu_strings (wv->contents);