diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java index e15a12409e..04cd76b6f9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java @@ -5377,14 +5377,25 @@ private boolean setDPIAwareness(int desiredDpiAwareness) { } private Monitor getContainingMonitor(int x, int y) { + return getContainingMonitorOptional(x, y).orElse(getPrimaryMonitor()); +} + +private Optional getContainingMonitorOptional(int x, int y) { Monitor[] monitors = getMonitors(); for (Monitor currentMonitor : monitors) { Rectangle clientArea = currentMonitor.getClientArea(); if (clientArea.contains(x, y)) { - return currentMonitor; + return Optional.of(currentMonitor); } } - return getPrimaryMonitor(); + return Optional.empty(); +} + +Point translatePointIfInDisplayCoordinateGap(int x, int y) { + if(getContainingMonitorOptional(x, y).isEmpty() && getContainingMonitorInPixelsCoordinateOptional(x, y).isPresent()) { + return translateLocationInPointInDisplayCoordinateSystem(x, y); + } + return new Point(x, y); } private Monitor getContainingMonitor(int x, int y, int width, int height) { @@ -5405,14 +5416,18 @@ private Monitor getContainingMonitor(int x, int y, int width, int height) { } private Monitor getContainingMonitorInPixelsCoordinate(int xInPixels, int yInPixels) { + return getContainingMonitorInPixelsCoordinateOptional(xInPixels, yInPixels).orElse(getPrimaryMonitor()); +} + +private Optional getContainingMonitorInPixelsCoordinateOptional(int xInPixels, int yInPixels) { Monitor[] monitors = getMonitors(); for (Monitor current : monitors) { Rectangle clientArea = getMonitorClientAreaInPixels(current); if (clientArea.contains(xInPixels, yInPixels)) { - return current; + return Optional.of(current); } } - return getPrimaryMonitor(); + return Optional.empty(); } private Rectangle getMonitorClientAreaInPixels(Monitor monitor) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java index 287646dad6..93635d13e2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Shell.java @@ -1586,7 +1586,8 @@ public void setLocation(Point location) { @Override public void setLocation(int x, int y) { - Point location = display.translateLocationInPixelsInDisplayCoordinateSystem(x, y); + Point translatedPoint = display.translatePointIfInDisplayCoordinateGap(x, y); + Point location = display.translateLocationInPixelsInDisplayCoordinateSystem(translatedPoint.x, translatedPoint.y); setLocationInPixels(location.x, location.y); } @@ -1598,7 +1599,8 @@ public void setBounds(Rectangle rect) { @Override public void setBounds(int x, int y, int width, int height) { - Rectangle boundsInPixels = display.translateRectangleInPixelsInDisplayCoordinateSystemByContainment(x, y, width, height); + Point translatedPoint = display.translatePointIfInDisplayCoordinateGap(x, y); + Rectangle boundsInPixels = display.translateRectangleInPixelsInDisplayCoordinateSystemByContainment(translatedPoint.x, translatedPoint.y, width, height); setBoundsInPixels(boundsInPixels.x, boundsInPixels.y, boundsInPixels.width, boundsInPixels.height); }