From 5ab473cddaadd1d80efbddc1fa64a3e925a6a11b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Wed, 28 Aug 2013 18:20:15 +0200 Subject: [PATCH] * nsterm.m (last_window): New variable. (EV_TRAILER2): New macro. (EV_TRAILER): Call EV_TRAILER2. (mouseMoved:): Add support for mouse-autoselect-window on nextstep. Fixes: debbugs:6888 --- src/ChangeLog | 8 ++++++++ src/nsterm.m | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e543c982ae1..7cae8e05f25 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2013-08-28 Davor Cubranic (tiny change) + + * nsterm.m (last_window): New variable. + (EV_TRAILER2): New macro. + (EV_TRAILER): Call EV_TRAILER2. + (mouseMoved:): Add support for mouse-autoselect-window + on nextstep (Bug#6888). + 2013-08-28 Andreas Schwab * regex.c (CHAR_CHARSET, CHARSET_LEADING_CODE_BASE, CHAR_HEAD_P) diff --git a/src/nsterm.m b/src/nsterm.m index 750d8b25b4d..1f4ebcfefd9 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -184,6 +184,9 @@ struct ns_display_info *x_display_list; /* Chain of existing displays */ Lisp_Object ns_display_name_list; long context_menu_value = 0; +/* Last window where we saw the mouse. Used by mouse-autoselect-window. */ +static Lisp_Object last_window; + /* display update */ NSPoint last_mouse_motion_position; static NSRect last_mouse_glyph; @@ -308,8 +311,13 @@ static CGPoint menu_mouse_point; /* This is a piece of code which is common to all the event handling methods. Maybe it should even be a function. */ #define EV_TRAILER(e) \ - { \ - XSETFRAME (emacs_event->frame_or_window, emacsframe); \ + { \ + XSETFRAME (emacs_event->frame_or_window, emacsframe); \ + EV_TRAILER2 (e); \ + } + +#define EV_TRAILER2(e) \ + { \ if (e) emacs_event->timestamp = EV_TIMESTAMP (e); \ if (q_event_ptr) \ { \ @@ -5465,6 +5473,27 @@ not_in_argv (NSString *arg) previous_help_echo_string = help_echo_string; help_echo_string = Qnil; + if (!NILP (Vmouse_autoselect_window)) + { + NSTRACE (mouse_autoselect_window); + Lisp_Object window; + window = window_from_coordinates(emacsframe, last_mouse_motion_position.x, + last_mouse_motion_position.y, 0, 0); + if (WINDOWP (window) + && !EQ (window, last_window) + && !EQ (window, selected_window) + && (focus_follows_mouse + || (EQ (XWINDOW (window)->frame, + XWINDOW (selected_window)->frame)))) + { + NSTRACE (in_window); + emacs_event->kind = SELECT_WINDOW_EVENT; + emacs_event->frame_or_window = window; + EV_TRAILER2 (e); + } + last_window = window; + } + if (!note_mouse_movement (emacsframe, last_mouse_motion_position.x, last_mouse_motion_position.y)) help_echo_string = previous_help_echo_string; -- 2.39.2