]> code.delx.au - gnu-emacs/commitdiff
* nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters.
authorJan D <jan.h.d@swipnet.se>
Thu, 1 Jul 2010 12:20:14 +0000 (14:20 +0200)
committerJan D <jan.h.d@swipnet.se>
Thu, 1 Jul 2010 12:20:14 +0000 (14:20 +0200)
src/ChangeLog
src/nsfns.m

index bd975446b3d1b4a97c9b259d039dd558e3a283c9..8a49d47b266c6545e313dff0d703aaee8817a82c 100644 (file)
@@ -1,5 +1,8 @@
 2010-07-01  Jan Djärv  <jan.h.d@swipnet.se>
 
+       * nsfns.m (compute_tip_xy): Do not convert coordinates from frame
+       parameters, they are already absolute.
+
        * nsterm.m (x_set_window_size, initFrameFromEmacs): Renamed
        FRAME_NS_TOOLBAR_HEIGHT to FRAME_TOOLBAR_HEIGHT.
 
index b52f839a0786beb81e2f9bef3d9ba2ef5d29e982..01ef46a3ca1d2d1b72d306eedf04571c49b1eaa3 100644 (file)
@@ -2412,22 +2412,27 @@ compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
 
   /* Start with user-specified or mouse position.  */
   left = Fcdr (Fassq (Qleft, parms));
-  if (INTEGERP (left))
-    pt.x = XINT (left);
-  else
-    pt.x = last_mouse_motion_position.x;
   top = Fcdr (Fassq (Qtop, parms));
-  if (INTEGERP (top))
-    pt.y = XINT (top);
-  else
-    pt.y = last_mouse_motion_position.y;
-
-  /* Convert to screen coordinates */
-  pt = [view convertPoint: pt toView: nil];
-  pt = [[view window] convertBaseToScreen: pt];
 
+  if (!INTEGERP (left) || !INTEGERP (top))
+    {
+      pt = last_mouse_motion_position;
+      /* Convert to screen coordinates */
+      pt = [view convertPoint: pt toView: nil];
+      pt = [[view window] convertBaseToScreen: pt];
+    }
+  else
+    {
+      /* Absolute coordinates.  */
+      pt.x = XINT (left);
+      pt.y = x_display_pixel_height (FRAME_NS_DISPLAY_INFO (f)) - XINT (top)
+        - height;
+    }
+  
   /* Ensure in bounds.  (Note, screen origin = lower left.) */
-  if (pt.x + XINT (dx) <= 0)
+  if (INTEGERP (left))
+    *root_x = pt.x;
+  else if (pt.x + XINT (dx) <= 0)
     *root_x = 0; /* Can happen for negative dx */
   else if (pt.x + XINT (dx) + width
           <= x_display_pixel_width (FRAME_NS_DISPLAY_INFO (f)))
@@ -2440,7 +2445,9 @@ compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
     /* Put it left justified on the screen -- it ought to fit that way.  */
     *root_x = 0;
 
-  if (pt.y - XINT (dy) - height >= 0)
+  if (INTEGERP (top))
+    *root_y = pt.y;
+  else if (pt.y - XINT (dy) - height >= 0)
     /* It fits below the pointer.  */
     *root_y = pt.y - height - XINT (dy);
   else if (pt.y + XINT (dy) + height