]> git.eshelyaron.com Git - emacs.git/commitdiff
Let w32_mouse_position pick a child window only if it has a child frame
authorMartin Rudalics <rudalics@gmx.at>
Sun, 23 Apr 2017 08:52:56 +0000 (10:52 +0200)
committerMartin Rudalics <rudalics@gmx.at>
Sun, 23 Apr 2017 08:52:56 +0000 (10:52 +0200)
* src/w32term.c (w32_mouse_position): When using a frame found
by ChildWindowFromPoint make sure it's a child frame (Bug#26615,
maybe).

src/w32term.c

index 36dc6364ae37fd7d12d60f38c86f7e1526a85877..f02201c9d766530016c7900ac8b459b02d5c7db4 100644 (file)
@@ -3427,7 +3427,6 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
                    enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object *y,
                    Time *time)
 {
-  struct frame *f1;
   struct w32_display_info *dpyinfo = FRAME_DISPLAY_INFO (*fp);
 
   block_input ();
@@ -3444,8 +3443,8 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
   else
     {
       POINT pt;
-
       Lisp_Object frame, tail;
+      struct frame *f1 = NULL;
 
       /* Clear the mouse-moved flag for every frame on this display.  */
       FOR_EACH_FRAME (tail, frame)
@@ -3465,17 +3464,26 @@ w32_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
          f1 = dpyinfo->last_mouse_frame;
        else
          {
-           HWND wfp = WindowFromPoint (pt);
+           /* Try to check for a child window first.  */
+           HWND wfp = ChildWindowFromPoint (wfp, pt);
 
-           if (wfp && (f1 = x_any_window_to_frame (dpyinfo, wfp)))
+           if (wfp)
              {
-               HWND cwfp = ChildWindowFromPoint (wfp, pt);
-               struct frame *f2;
+               struct frame *f2 = x_any_window_to_frame (dpyinfo, wfp);
 
-               /* If cwfp exists it should be one of our windows ...  */
-               if (cwfp && (f2 = x_any_window_to_frame (dpyinfo, cwfp)))
+               /* If f2 is one of our frames, make sure it's a child
+                  frame (Bug#26615, maybe).  */
+               if (f2 && FRAME_PARENT_FRAME (f2))
                  f1 = f2;
              }
+
+           if (!f1)
+             {
+               /* Check for a top-level window second.  */
+               wfp = WindowFromPoint (pt);
+               if (wfp)
+                 f1 = x_any_window_to_frame (dpyinfo, wfp);
+             }
          }
 
        /* If not, is it one of our scroll bars?  */