Previously, we would just stick the menu on the edge of the screen.
We should actually try to flip the menu around the point of origin,
and only when that fails move it to the edge of the screen.
CORE-15001
CORE-9037
x -= width - xanchor;
if( x + width > monitor->rcMonitor.right)
x -= width - xanchor;
if( x + width > monitor->rcMonitor.right)
- x = monitor->rcMonitor.right - width;
+ {
+ /* If we would flip around our origin, would we go off screen on the other side? */
+ if (x - width < monitor->rcMonitor.left)
+ x = monitor->rcMonitor.right - width;
+ else
+ x -= width;
+ }
+ }
+ if( x < monitor->rcMonitor.left )
+ {
+ /* If we would flip around our origin, would we go off screen on the other side? */
+ if (x + width > monitor->rcMonitor.right)
+ x = monitor->rcMonitor.left;
+ else
+ x += width;
- if( x < monitor->rcMonitor.left ) x = monitor->rcMonitor.left;
if( y + height > monitor->rcMonitor.bottom)
{
if( y + height > monitor->rcMonitor.bottom)
{
y -= height + yanchor;
if( y + height > monitor->rcMonitor.bottom)
y -= height + yanchor;
if( y + height > monitor->rcMonitor.bottom)
- y = monitor->rcMonitor.bottom - height;
+ {
+ /* If we would flip around our origin, would we go off screen on the other side? */
+ if (y - height < monitor->rcMonitor.top)
+ y = monitor->rcMonitor.bottom - height;
+ else
+ y -= height;
+ }
+ }
+ if( y < monitor->rcMonitor.top )
+ {
+ /* If we would flip around our origin, would we go off screen on the other side? */
+ if (y + height > monitor->rcMonitor.bottom)
+ y = monitor->rcMonitor.top;
+ else
+ y += height;
- if( y < monitor->rcMonitor.top ) y = monitor->rcMonitor.top;
pWnd = ValidateHwndNoErr( menu->hWnd );
pWnd = ValidateHwndNoErr( menu->hWnd );