# HG changeset patch # User Jan D # Date 1277986814 -7200 # Node ID 8c569638df0f8d43f411d3cbce895098aed2c6f8 # Parent babf8e935ea8a3aa85511314f58283463b7dc93a * nsfns.m (compute_tip_xy): Do not convert coordinates from frame parameters. diff -r babf8e935ea8 -r 8c569638df0f src/ChangeLog --- 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 + * 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 -r babf8e935ea8 -r 8c569638df0f src/nsfns.m --- 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