diff options
Diffstat (limited to 'src/macterm.c')
-rw-r--r-- | src/macterm.c | 108 |
1 files changed, 60 insertions, 48 deletions
diff --git a/src/macterm.c b/src/macterm.c index 2af910c5003..43a04dc65ec 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -7018,7 +7018,7 @@ mac_get_emulated_btn ( UInt32 modifiers ) int result = 0; if (!NILP (Vmac_emulate_three_button_mouse)) { int cmdIs3 = !EQ (Vmac_emulate_three_button_mouse, Qreverse); - if (modifiers & controlKey) + if (modifiers & cmdKey) result = cmdIs3 ? 2 : 1; else if (modifiers & optionKey) result = cmdIs3 ? 1 : 2; @@ -7038,7 +7038,7 @@ mac_event_to_emacs_modifiers (EventRef eventRef) if (!NILP (Vmac_emulate_three_button_mouse) && GetEventClass(eventRef) == kEventClassMouse) { - mods &= ~(optionKey & cmdKey); + mods &= ~(optionKey | cmdKey); } return mac_to_emacs_modifiers (mods); } @@ -7237,40 +7237,6 @@ is_emacs_window (WindowPtr win) } 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; @@ -8084,6 +8050,25 @@ XTread_socket (sd, expected, hold_quit) if (!mac_convert_event_ref (eventRef, &er)) switch (GetEventClass (eventRef)) { + case kEventClassWindow: + if (GetEventKind (eventRef) == kEventWindowBoundsChanged) + { + WindowPtr window_ptr; + GetEventParameter(eventRef, kEventParamDirectObject, + typeWindowRef, NULL, sizeof(WindowPtr), + NULL, &window_ptr); + f = mac_window_to_frame (window_ptr); + if (f && !f->async_iconified) + { + int x, y; + + x_real_positions (f, &x, &y); + f->left_pos = x; + f->top_pos = y; + } + SendEventToEventTarget (eventRef, toolbox_dispatcher); + } + break; case kEventClassMouse: if (GetEventKind (eventRef) == kEventMouseWheelMoved) { @@ -8135,6 +8120,14 @@ XTread_socket (sd, expected, hold_quit) 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)) { @@ -8150,16 +8143,9 @@ XTread_socket (sd, expected, hold_quit) 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); } @@ -8306,6 +8292,18 @@ XTread_socket (sd, expected, hold_quit) #else /* not TARGET_API_MAC_CARBON */ DragWindow (window_ptr, er.where, &qd.screenBits.bounds); #endif /* not TARGET_API_MAC_CARBON */ + /* Update the frame parameters. */ + { + struct frame *f = mac_window_to_frame (window_ptr); + if (f && !f->async_iconified) + { + int x, y; + + x_real_positions (f, &x, &y); + f->left_pos = x; + f->top_pos = y; + } + } break; case inGoAway: @@ -8393,24 +8391,38 @@ XTread_socket (sd, expected, hold_quit) 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); + /* A window has been deactivated */ + dpyinfo->grabbed = 0; + + if (f == dpyinfo->x_focus_frame) + { + x_new_focus_frame (dpyinfo, 0); + deactivate_scroll_bars (f); + } + - f = mac_window_to_frame (window_ptr); if (f == dpyinfo->mouse_face_mouse_frame) { /* If we move outside the frame, then we're |