Mercurial > emacs
changeset 109093:8c569638df0f
* nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters.
author | Jan D <jan.h.d@swipnet.se> |
---|---|
date | Thu, 01 Jul 2010 14:20:14 +0200 |
parents | babf8e935ea8 |
children | 3c35c7d2d79b |
files | src/ChangeLog src/nsfns.m |
diffstat | 2 files changed, 24 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Thu Jul 01 14:16:33 2010 +0200 +++ b/src/ChangeLog Thu Jul 01 14:20:14 2010 +0200 @@ -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.
--- a/src/nsfns.m Thu Jul 01 14:16:33 2010 +0200 +++ b/src/nsfns.m Thu Jul 01 14:20:14 2010 +0200 @@ -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