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;
if (!NILP (Vmac_emulate_three_button_mouse) &&
GetEventClass(eventRef) == kEventClassMouse)
{
- mods &= ~(optionKey & cmdKey);
+ mods &= ~(optionKey | cmdKey);
}
return mac_to_emacs_modifiers (mods);
}
return 0;
}
-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 ()
{
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)
{
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))
{
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);
}
#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:
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