changeset 56278:3d525d0266de

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.
author Steven Tamm <steventamm@mac.com>
date Tue, 29 Jun 2004 06:39:03 +0000
parents fd126130c3cd
children b1ae5333057a
files src/ChangeLog src/macterm.c
diffstat 2 files changed, 37 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- 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  <mituharu@math.s.chiba-u.ac.jp>
+        
+        * 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  <steventamm@mac.com>
 
 	* macterm.c (mac_get_emulated_btn)
--- 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