summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2015-02-14 15:03:20 +0200
committerEli Zaretskii <eliz@gnu.org>2015-02-14 15:03:20 +0200
commit432b00e6597f2a1eec192d807ad554a430f96f93 (patch)
tree99be029c5d1fcfa6586050c50db94527dc0b1f9b
parent0077b36e2ed14e484c1f736496db9314ef7ca177 (diff)
downloademacs-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/ChangeLog5
-rw-r--r--src/menu.c58
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);