From 12ac449fc6a49974c35f4ea458c6c3e79cf3e45a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Thu, 2 Oct 2025 18:58:59 +0300 Subject: [PATCH 1/3] [GTK4] Do not mix gtk 3 and 4 focus event handlers In https://github.com/eclipse-platform/eclipse.platform.swt/pull/2582 I've mixed the handlers. This fixes it to not call into each other. --- .../gtk/org/eclipse/swt/widgets/Canvas.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index 11f68701043..6ca8783717e 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -260,14 +260,15 @@ long gtk_focus_out_event (long widget, long event) { } @Override -void gtk4_focus_window_event(long handle, long event) { - if(event == SWT.FocusIn) { - gtk_focus_in_event (handle, event); - if (caret != null) caret.setFocus (); - } else { - gtk_focus_out_event(handle, event); - if (caret != null) caret.killFocus(); - } +void gtk4_focus_enter_event(long handle, long event) { + super.gtk4_focus_enter_event (handle, event); + if (caret != null) caret.setFocus (); +} + +@Override +void gtk4_focus_leave_event(long handle, long event) { + super.gtk4_focus_leave_event (handle, event); + if (caret != null) caret.setFocus (); } @Override From 72ae23cb736e1752121b72e8b059fdfdf961ca49 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Thu, 2 Oct 2025 20:07:26 +0200 Subject: [PATCH 2/3] Screenshot --- .github/workflows/maven.yml | 6 ++++++ binaries/pom.xml | 4 ++-- pom.xml | 12 +++++------ .../swt/tests/win32/KeyboardLayoutTest.java | 21 ++++++++++++++++++- .../Test_org_eclipse_swt_events_KeyEvent.java | 2 -- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index e56e888646c..540ec2da638 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -99,3 +99,9 @@ jobs: path: | ${{ github.workspace }}/**/target/surefire-reports/*.xml ${{ github.workspace }}/**/hs_err_pid*.log + - name: Upload screenshots + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: screenshots + path: tests/org.eclipse.swt.tests.win32/screenshots diff --git a/binaries/pom.xml b/binaries/pom.xml index 78946f0f1b8..3a07132562b 100644 --- a/binaries/pom.xml +++ b/binaries/pom.xml @@ -32,13 +32,13 @@ - org.eclipse.swt.cocoa.macosx.x86_64 + org.eclipse.swt.win32.win32.x86_64 diff --git a/pom.xml b/pom.xml index 89832b3b544..16d396ee011 100644 --- a/pom.xml +++ b/pom.xml @@ -183,15 +183,15 @@ - bundles - binaries + bundles/org.eclipse.swt + binaries/org.eclipse.swt.win32.win32.x86_64 local-build/org.eclipse.swt.fragments.localbuild - examples/org.eclipse.swt.examples + + tests/org.eclipse.swt.tests.win32 + diff --git a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/KeyboardLayoutTest.java b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/KeyboardLayoutTest.java index 92f03373964..380befe4622 100644 --- a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/KeyboardLayoutTest.java +++ b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/KeyboardLayoutTest.java @@ -15,9 +15,16 @@ import static org.junit.jupiter.api.Assertions.fail; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.ArrayList; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.internal.win32.INPUT; import org.eclipse.swt.internal.win32.KEYBDINPUT; import org.eclipse.swt.internal.win32.OS; @@ -221,9 +228,21 @@ public boolean isExtended() { }; @BeforeEach - public void setUp(TestInfo testInfo) { + public void setUp(TestInfo testInfo) throws IOException { this.testName = testInfo.getDisplayName(); display = new Display(); + GC gc = new GC(display); + Image image = new Image(display, display.getBounds().width, display.getBounds().height); + gc.copyArea(image, 0, 0); + ImageLoader loader = new ImageLoader(); + loader.data = new ImageData[] {image.getImageData() }; + File folder = new File("screenshots"); + if (!folder.exists()) { + Files.createDirectory(folder.toPath()); + } + String filePath = folder.getAbsolutePath(); + loader.save(filePath + "/" + testName + ".png", SWT.IMAGE_PNG); + shell = new Shell(); Listener listener = event -> { diff --git a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java index 26c0a5406c3..cbfa278a454 100644 --- a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java +++ b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java @@ -18,7 +18,6 @@ import org.eclipse.swt.widgets.Event; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable; /** * Automated Test Suite for class org.eclipse.swt.events.KeyEvent @@ -26,7 +25,6 @@ * @see org.eclipse.swt.events.KeyEvent */ @SuppressWarnings("restriction") -@DisabledIfEnvironmentVariable(named = "GITHUB_ACTIONS", matches = "true", disabledReason = "Windows Server 2025 incompatibility: https://github.com/eclipse-platform/eclipse.platform.swt/issues/2516") public class Test_org_eclipse_swt_events_KeyEvent extends KeyboardLayoutTest { // Windows layouts suitable for 'LoadKeyboardLayout()', obtained from 'GetKeyboardLayoutName()' static char[] LAYOUT_BENGALI = "00020445\0".toCharArray(); From ad87dc76b54884a9d63ab9198fa9719ac9dee28a Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Thu, 2 Oct 2025 21:38:48 -0400 Subject: [PATCH 3/3] Turn off prtscr test --- .../swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java index cbfa278a454..0ccbc14a58e 100644 --- a/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java +++ b/tests/org.eclipse.swt.tests.win32/JUnit Tests/org/eclipse/swt/tests/win32/Test_org_eclipse_swt_events_KeyEvent.java @@ -79,6 +79,9 @@ private boolean isSystemHotkey(int state, UsScan scanCode) { return true; } break; + case PrtScr: + // Opens the snipping tool causing loss of focus of the test + return true; case _0: if (state == __CS) { // Windows bug. Ctrl+Shift+0 is assigned to switch to Japanese layout,