From: Jan D Date: Thu, 1 Jul 2010 12:20:14 +0000 (+0200) Subject: * nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~51^2~81^2~66^2~6 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7a18115b47a70b38ead24ee29ec308c4f2da007f;p=emacs.git * nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters. --- diff --git a/src/ChangeLog b/src/ChangeLog index bd975446b3d..8a49d47b266 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2010-07-01 Jan Djärv + * 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. diff --git a/src/nsfns.m b/src/nsfns.m index b52f839a078..01ef46a3ca1 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -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