diff options
author | Eli Zaretskii <eliz@gnu.org> | 2015-02-14 15:03:20 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2015-02-14 15:03:20 +0200 |
commit | 432b00e6597f2a1eec192d807ad554a430f96f93 (patch) | |
tree | 99be029c5d1fcfa6586050c50db94527dc0b1f9b | |
parent | 0077b36e2ed14e484c1f736496db9314ef7ca177 (diff) | |
download | emacs-432b00e6597f2a1eec192d807ad554a430f96f93.tar.gz |
Fix assertions in popping up menus on TTY (Bug#19862)
Do not merge this commit to trunk!
src/menu.c (Fx_popup_menu) [HAVE_X_WINDOWS]: Call
mouse_position_for_popup only for X frames.
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/menu.c | 58 |
2 files changed, 36 insertions, 27 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 20d3fb34034..52be915ecb9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2015-02-14 Eli Zaretskii <eliz@gnu.org> + + * menu.c (Fx_popup_menu) [HAVE_X_WINDOWS]: Call + mouse_position_for_popup only for X frames. (Bug#19862) + 2015-02-13 Eli Zaretskii <eliz@gnu.org> * buffer.c (syms_of_buffer): Doc fix. (Bug#19841) diff --git a/src/menu.c b/src/menu.c index e318da059a3..3e0a89dc076 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1238,35 +1238,39 @@ no quit occurs and `x-popup-menu' returns nil. */) /* Use the mouse's current position. */ struct frame *new_f = SELECTED_FRAME (); #ifdef HAVE_X_WINDOWS - /* Can't use mouse_position_hook for X since it returns - coordinates relative to the window the mouse is in, - we need coordinates relative to the edit widget always. */ - if (new_f != 0) + if (FRAME_X_P (new_f)) { - int cur_x, cur_y; - - mouse_position_for_popup (new_f, &cur_x, &cur_y); - /* cur_x/y may be negative, so use make_number. */ - x = make_number (cur_x); - y = make_number (cur_y); + /* Can't use mouse_position_hook for X since it returns + coordinates relative to the window the mouse is in, + we need coordinates relative to the edit widget always. */ + if (new_f != 0) + { + int cur_x, cur_y; + + mouse_position_for_popup (new_f, &cur_x, &cur_y); + /* cur_x/y may be negative, so use make_number. */ + x = make_number (cur_x); + y = make_number (cur_y); + } + } + else +#endif /* HAVE_X_WINDOWS */ + { + Lisp_Object bar_window; + enum scroll_bar_part part; + Time time; + void (*mouse_position_hook) (struct frame **, int, + Lisp_Object *, + enum scroll_bar_part *, + Lisp_Object *, + Lisp_Object *, + Time *) = + FRAME_TERMINAL (new_f)->mouse_position_hook; + + if (mouse_position_hook) + (*mouse_position_hook) (&new_f, 1, &bar_window, + &part, &x, &y, &time); } - -#else /* not HAVE_X_WINDOWS */ - Lisp_Object bar_window; - enum scroll_bar_part part; - Time time; - void (*mouse_position_hook) (struct frame **, int, - Lisp_Object *, - enum scroll_bar_part *, - Lisp_Object *, - Lisp_Object *, - Time *) = - FRAME_TERMINAL (new_f)->mouse_position_hook; - - if (mouse_position_hook) - (*mouse_position_hook) (&new_f, 1, &bar_window, - &part, &x, &y, &time); -#endif /* not HAVE_X_WINDOWS */ if (new_f != 0) XSETFRAME (window, new_f); |