*** frame.c Wed Jul 25 07:15:52 2007 --- frame.c Fri Sep 28 10:39:16 2007 *************** *** 118,123 **** --- 118,125 ---- Lisp_Object Vmouse_position_function; Lisp_Object Vmouse_highlight; Lisp_Object Vdelete_frame_functions; + + int focus_follows_mouse; static void set_menu_bar_lines_1 (window, n) *************** *** 4151,4156 **** --- 4153,4173 ---- This variable is local to the current terminal and cannot be buffer-local. */); + DEFVAR_BOOL ("focus-follows-mouse", &focus_follows_mouse, + doc: /* Non-nil if window system changes focus when you move the mouse. + You should set this variable to tell Emacs how your window manager + handles focus, since there is no way in general for Emacs to find out + automatically. */); + #ifdef HAVE_WINDOW_SYSTEM + #if defined(HAVE_NTGUI) || defined(MAC_OS) + focus_follows_mouse = 0; + #else + focus_follows_mouse = 1; + #endif + #else + focus_follows_mouse = 0; + #endif + staticpro (&Vframe_list); defsubr (&Sactive_minibuffer_window); *** frame.h Fri Sep 14 22:50:14 2007 --- frame.h Fri Sep 28 10:40:38 2007 *************** *** 39,44 **** --- 39,49 ---- extern int message_buf_print; + /* Nonzero means window system changes focus when moving the + mouse. */ + + extern int focus_follows_mouse; + /* The structure representing a frame. */ *** keyboard.c Fri Sep 14 22:50:16 2007 --- keyboard.c Fri Sep 28 10:42:30 2007 *************** *** 3995,4000 **** --- 3995,4003 ---- /* Wait until there is input available. */ for (;;) { + if (CONSP (Vunread_command_events)) + break; + if (kbd_fetch_ptr != kbd_store_ptr) break; #ifdef HAVE_MOUSE *** macterm.c Tue Aug 28 08:27:32 2007 --- macterm.c Fri Sep 28 10:43:52 2007 *************** *** 11119,11125 **** will be selected only when it is active. */ if (WINDOWP (window) && !EQ (window, last_window) ! && !EQ (window, selected_window)) { inev.kind = SELECT_WINDOW_EVENT; inev.frame_or_window = window; --- 11119,11128 ---- will be selected only when it is active. */ if (WINDOWP (window) && !EQ (window, last_window) ! && !EQ (window, selected_window) ! && (focus_follows_mouse ! || (EQ (XWINDOW (window)->frame, ! XWINDOW (selected_window)->frame)))) { inev.kind = SELECT_WINDOW_EVENT; inev.frame_or_window = window; *** msdos.c Wed Aug 8 23:12:16 2007 --- msdos.c Fri Sep 28 10:46:08 2007 *************** *** 3393,3399 **** it is active. */ if (WINDOWP (mouse_window) && !EQ (mouse_window, last_mouse_window) ! && !EQ (mouse_window, selected_window)) { event.kind = SELECT_WINDOW_EVENT; event.frame_or_window = mouse_window; --- 3393,3402 ---- it is active. */ if (WINDOWP (mouse_window) && !EQ (mouse_window, last_mouse_window) ! && !EQ (window, selected_window) ! && (focus_follows_mouse ! || (EQ (XWINDOW (window)->frame, ! XWINDOW (selected_window)->frame)))) { event.kind = SELECT_WINDOW_EVENT; event.frame_or_window = mouse_window; *** w32term.c Sat Sep 22 10:39:36 2007 --- w32term.c Fri Sep 28 10:44:58 2007 *************** *** 4339,4345 **** only when it is active. */ if (WINDOWP(window) && !EQ (window, last_window) ! && !EQ (window, selected_window)) { inev.kind = SELECT_WINDOW_EVENT; inev.frame_or_window = window; --- 4339,4348 ---- only when it is active. */ if (WINDOWP(window) && !EQ (window, last_window) ! && !EQ (window, selected_window) ! && (focus_follows_mouse ! || (EQ (XWINDOW (window)->frame, ! XWINDOW (selected_window)->frame)))) { inev.kind = SELECT_WINDOW_EVENT; inev.frame_or_window = window; *** xterm.c Fri Sep 14 22:50:16 2007 --- xterm.c Fri Sep 28 10:45:24 2007 *************** *** 6628,6634 **** will be selected only when it is active. */ if (WINDOWP (window) && !EQ (window, last_window) ! && !EQ (window, selected_window)) { inev.ie.kind = SELECT_WINDOW_EVENT; inev.ie.frame_or_window = window; --- 6628,6637 ---- will be selected only when it is active. */ if (WINDOWP (window) && !EQ (window, last_window) ! && !EQ (window, selected_window) ! && (focus_follows_mouse ! || (EQ (XWINDOW (window)->frame, ! XWINDOW (selected_window)->frame)))) { inev.ie.kind = SELECT_WINDOW_EVENT; inev.ie.frame_or_window = window;