# HG changeset patch # User Jan D # Date 1279117945 -7200 # Node ID a4e57fa6eb3f598001cc03b00bf2dfcde546f12d # Parent b019ae044fb3781e0a7f1a088539e9128849a6eb Fix menu bar activation with click for Motif/Lesstif. * src/xdisp.c (pending_menu_activation): Remove extern declaration. (prepare_menu_bars): Remove setting of pending_menu_activation. * src/xmenu.c (pending_menu_activation): Remove. (x_activate_menubar): Set popup_activated_flag for Xt also. Remove setting of pending_menu_activation. (set_frame_menubar): Remove check of pending_menu_activation. Declare menubar_size before code. Correct spelling in comment. * src/xterm.c (xm_scroll_callback, x_process_timeouts): K&R => prototype. (SET_SAVED_KEY_EVENT): Remove (not used). (SET_SAVED_MENU_EVENT): Rename to SET_SAVED_BUTTON_EVENT and remove size parameter. (handle_one_xevent): Check popup_activated () for menu for Xt also. Remove #ifdef USE_GTK around finish = X_EVENT_DROP. Remove #ifdef USE_MOTIF code that did SET_SAVED_BUTTON_EVENT for ButtonRelease. diff -r b019ae044fb3 -r a4e57fa6eb3f src/ChangeLog --- a/src/ChangeLog Wed Jul 14 12:54:58 2010 +0900 +++ b/src/ChangeLog Wed Jul 14 16:32:25 2010 +0200 @@ -1,3 +1,23 @@ +2010-07-14 Jan Djärv + + * xterm.c (xm_scroll_callback, x_process_timeouts): K&R => prototype. + (SET_SAVED_KEY_EVENT): Remove (not used). + (SET_SAVED_MENU_EVENT): Rename to SET_SAVED_BUTTON_EVENT and + remove size parameter. + (handle_one_xevent): Check popup_activated () for menu for Xt also. + Remove #ifdef USE_GTK around finish = X_EVENT_DROP. + Remove #ifdef USE_MOTIF code that did SET_SAVED_BUTTON_EVENT for + ButtonRelease. + + * xdisp.c (pending_menu_activation): Remove extern declaration. + (prepare_menu_bars): Remove setting of pending_menu_activation. + + * xmenu.c (pending_menu_activation): Remove. + (x_activate_menubar): Set popup_activated_flag for Xt also. Remove + setting of pending_menu_activation. + (set_frame_menubar): Remove check of pending_menu_activation. + Declare menubar_size before code. Correct spelling in comment. + 2010-07-14 Kenichi Handa * font.c (font_open_entity): Cancel previous change. diff -r b019ae044fb3 -r a4e57fa6eb3f src/xdisp.c --- a/src/xdisp.c Wed Jul 14 12:54:58 2010 +0900 +++ b/src/xdisp.c Wed Jul 14 16:32:25 2010 +0200 @@ -271,7 +271,6 @@ #if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) \ || defined(HAVE_NS) || defined (USE_GTK) extern void set_frame_menubar (struct frame *f, int, int); -extern int pending_menu_activation; #endif extern int interrupt_input; @@ -9866,12 +9865,6 @@ update_tool_bar (sf, 1); #endif } - - /* Motif needs this. See comment in xmenu.c. Turn it off when - pending_menu_activation is not defined. */ -#ifdef USE_X_TOOLKIT - pending_menu_activation = 0; -#endif } diff -r b019ae044fb3 -r a4e57fa6eb3f src/xmenu.c --- a/src/xmenu.c Wed Jul 14 12:54:58 2010 +0900 +++ b/src/xmenu.c Wed Jul 14 16:32:25 2010 +0200 @@ -151,14 +151,6 @@ extern widget_value *digest_single_submenu (int, int, int); #endif -/* This is set nonzero after the user activates the menu bar, and set - to zero again after the menu bars are redisplayed by prepare_menu_bar. - While it is nonzero, all calls to set_frame_menubar go deep. - - I don't understand why this is needed, but it does seem to be - needed on Motif, according to Marcus Daniels . */ - -int pending_menu_activation; #ifdef USE_X_TOOLKIT @@ -670,6 +662,7 @@ set_frame_menubar (f, 0, 1); BLOCK_INPUT; + popup_activated_flag = 1; #ifdef USE_GTK /* If we click outside any menu item, the menu bar still grabs. So we send Press and the Release. If outside, grab is released. @@ -681,15 +674,10 @@ f->output_data.x->saved_menu_event->type = ButtonPress; XPutBackEvent (f->output_data.x->display_info->display, f->output_data.x->saved_menu_event); - popup_activated_flag = 1; #else XtDispatchEvent (f->output_data.x->saved_menu_event); #endif UNBLOCK_INPUT; -#ifdef USE_MOTIF - if (f->output_data.x->saved_menu_event->type == ButtonRelease) - pending_menu_activation = 1; -#endif /* Ignore this if we get it a second time. */ f->output_data.x->saved_menu_event->type = 0; @@ -991,8 +979,6 @@ if (! menubar_widget) deep_p = 1; - else if (pending_menu_activation && !deep_p) - deep_p = 1; /* Make the first call for any given frame always go deep. */ else if (!f->output_data.x->saved_menu_event && !deep_p) { @@ -1274,10 +1260,11 @@ } { + int menubar_size; if (f->output_data.x->menubar_widget) XtRealizeWidget (f->output_data.x->menubar_widget); - int menubar_size + menubar_size = (f->output_data.x->menubar_widget ? (f->output_data.x->menubar_widget->core.height + f->output_data.x->menubar_widget->core.border_width) @@ -1286,7 +1273,7 @@ #if 1 /* Experimentally, we now get the right results for -geometry -0-0 without this. 24 Aug 96, rms. Maybe so, but the menu bar size is missing the pixels so the - WM size hints are off by theses pixel. Jan D, oct 2009. */ + WM size hints are off by these pixels. Jan D, oct 2009. */ #ifdef USE_LUCID if (FRAME_EXTERNAL_MENU_BAR (f)) { diff -r b019ae044fb3 -r a4e57fa6eb3f src/xterm.c --- a/src/xterm.c Wed Jul 14 12:54:58 2010 +0900 +++ b/src/xterm.c Wed Jul 14 16:32:25 2010 +0200 @@ -4159,9 +4159,7 @@ CALL_DATA is a pointer to a XmScrollBarCallbackStruct. */ static void -xm_scroll_callback (widget, client_data, call_data) - Widget widget; - XtPointer client_data, call_data; +xm_scroll_callback (Widget widget, XtPointer client_data, XtPointer call_data) { struct scroll_bar *bar = (struct scroll_bar *) client_data; XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data; @@ -5546,22 +5544,18 @@ static struct x_display_info *next_noop_dpyinfo; -#define SET_SAVED_MENU_EVENT(size) \ +#define SET_SAVED_BUTTON_EVENT \ do \ { \ if (f->output_data.x->saved_menu_event == 0) \ f->output_data.x->saved_menu_event \ = (XEvent *) xmalloc (sizeof (XEvent)); \ - memcpy (f->output_data.x->saved_menu_event, &event, size); \ + *f->output_data.x->saved_menu_event = event; \ inev.ie.kind = MENU_BAR_ACTIVATE_EVENT; \ XSETFRAME (inev.ie.frame_or_window, f); \ } \ while (0) -#define SET_SAVED_BUTTON_EVENT SET_SAVED_MENU_EVENT (sizeof (XButtonEvent)) -#define SET_SAVED_KEY_EVENT SET_SAVED_MENU_EVENT (sizeof (XKeyEvent)) - - enum { X_EVENT_NORMAL, @@ -6755,14 +6749,12 @@ Instead, save it away and we will pass it to Xt from kbd_buffer_get_event. That way, we can run some Lisp code first. */ - if ( + if (! popup_activated () #ifdef USE_GTK - ! popup_activated () /* Gtk+ menus only react to the first three buttons. */ && event.xbutton.button < 3 - && -#endif - f && event.type == ButtonPress +#endif + && f && event.type == ButtonPress /* Verify the event is really within the menu bar and not just sent to it due to grabbing. */ && event.xbutton.x >= 0 @@ -6773,30 +6765,13 @@ { SET_SAVED_BUTTON_EVENT; XSETFRAME (last_mouse_press_frame, f); -#ifdef USE_GTK *finish = X_EVENT_DROP; -#endif } else if (event.type == ButtonPress) { last_mouse_press_frame = Qnil; goto OTHER; } - -#ifdef USE_MOTIF /* This should do not harm for Lucid, - but I am trying to be cautious. */ - else if (event.type == ButtonRelease) - { - if (!NILP (last_mouse_press_frame)) - { - f = XFRAME (last_mouse_press_frame); - if (f->output_data.x) - SET_SAVED_BUTTON_EVENT; - } - else - goto OTHER; - } -#endif /* USE_MOTIF */ else goto OTHER; #endif /* USE_X_TOOLKIT || USE_GTK */ @@ -10336,8 +10311,7 @@ that slows us down. */ static void -x_process_timeouts (timer) - struct atimer *timer; +x_process_timeouts (struct atimer *timer) { BLOCK_INPUT; x_timeout_atimer_activated_flag = 0;