# HG changeset patch # User Steven Tamm # Date 1088491143 0 # Node ID 3d525d0266de6dbfa35a47f563dbaf1f0b216216 # Parent fd126130c3cd851f4b7a34e28a0d39c008cb1c8f macterm.c (do_window_activate, do_window_deactivate): Remove. (XTread_socket): Fix activation/focus problems by only handling emacs windows and passing mouse events to the event chain regardless. diff -r fd126130c3cd -r 3d525d0266de src/ChangeLog --- a/src/ChangeLog Tue Jun 29 06:23:08 2004 +0000 +++ b/src/ChangeLog Tue Jun 29 06:39:03 2004 +0000 @@ -1,3 +1,12 @@ +2004-06-29 YAMAMOTO Mitsuharu + + * macterm.c (do_window_activate, do_window_deactivate): Remove. + (XTread_socket): Send mouse button events to the toolbox + dispatcher even when the mouse is grabbed. Don't process window + activate events for non-Emacs windows. Replace function calls to + do_window_activate and do_window_deactivate with their contents. + Reset mouse grabbing status when a window is deactivated. + 2004-06-29 Steven Tamm * macterm.c (mac_get_emulated_btn) diff -r fd126130c3cd -r 3d525d0266de src/macterm.c --- a/src/macterm.c Tue Jun 29 06:23:08 2004 +0000 +++ b/src/macterm.c Tue Jun 29 06:39:03 2004 +0000 @@ -7237,40 +7237,6 @@ } static void -do_window_activate (WindowPtr win) -{ - struct frame *f; - - if (is_emacs_window (win)) - { - f = mac_window_to_frame (win); - - if (f) - { - x_new_focus_frame (FRAME_MAC_DISPLAY_INFO (f), f); - activate_scroll_bars (f); - } - } -} - -static void -do_window_deactivate (WindowPtr win) -{ - struct frame *f; - - if (is_emacs_window (win)) - { - f = mac_window_to_frame (win); - - if (f == FRAME_MAC_DISPLAY_INFO (f)->x_focus_frame) - { - x_new_focus_frame (FRAME_MAC_DISPLAY_INFO (f), 0); - deactivate_scroll_bars (f); - } - } -} - -static void do_app_resume () { WindowPtr wp; @@ -8154,6 +8120,14 @@ SInt16 part_code; int tool_bar_p = 0; +#if USE_CARBON_EVENTS + /* This is needed to send mouse events like aqua window + buttons to the correct handler. */ + if (SendEventToEventTarget (eventRef, toolbox_dispatcher) + != eventNotHandledErr) + break; +#endif + if (dpyinfo->grabbed && last_mouse_frame && FRAME_LIVE_P (last_mouse_frame)) { @@ -8169,16 +8143,9 @@ window_ptr = FrontWindow (); } -#if USE_CARBON_EVENTS - /* This is needed to send mouse events like aqua - window buttons to the correct handler. */ - if (SendEventToEventTarget (eventRef, toolbox_dispatcher) - != eventNotHandledErr) - break; - if (!is_emacs_window (window_ptr)) break; -#endif + part_code = FindWindow (er.where, &window_ptr); } @@ -8424,24 +8391,38 @@ break; } + if (!is_emacs_window (window_ptr)) + break; + + f = mac_window_to_frame (window_ptr); + if ((er.modifiers & activeFlag) != 0) { + /* A window has been activated */ Point mouse_loc = er.where; - do_window_activate (window_ptr); + x_new_focus_frame (dpyinfo, f); + activate_scroll_bars (f); SetPortWindowPort (window_ptr); GlobalToLocal (&mouse_loc); - /* activateEvt counts as mouse movement, + /* Window-activated event counts as mouse movement, so update things that depend on mouse position. */ note_mouse_movement (mac_window_to_frame (window_ptr), &mouse_loc); } else { - do_window_deactivate (window_ptr); - - f = mac_window_to_frame (window_ptr); + /* A window has been deactivated */ + dpyinfo->grabbed = 0; + + if (f == dpyinfo->x_focus_frame) + { + x_new_focus_frame (dpyinfo, 0); + deactivate_scroll_bars (f); + } + + if (f == dpyinfo->mouse_face_mouse_frame) { /* If we move outside the frame, then we're