emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r100679: * nsfns.m (compute_tip_xy):


From: Jan D
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100679: * nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters.
Date: Thu, 01 Jul 2010 14:20:14 +0200
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100679
committer: Jan D <address@hidden>
branch nick: trunk
timestamp: Thu 2010-07-01 14:20:14 +0200
message:
  * nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters.
modified:
  src/ChangeLog
  src/nsfns.m
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-07-01 12:16:33 +0000
+++ b/src/ChangeLog     2010-07-01 12:20:14 +0000
@@ -1,5 +1,8 @@
 2010-07-01  Jan Djärv  <address@hidden>
 
+       * 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.
 

=== modified file 'src/nsfns.m'
--- a/src/nsfns.m       2010-06-29 09:49:20 +0000
+++ b/src/nsfns.m       2010-07-01 12:20:14 +0000
@@ -2412,22 +2412,27 @@
 
   /* 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);
+
+  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
-    pt.y = last_mouse_motion_position.y;
-
-  /* Convert to screen coordinates */
-  pt = [view convertPoint: pt toView: nil];
-  pt = [[view window] convertBaseToScreen: pt];
-
+    {
+      /* 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 @@
     /* 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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]