From 43eb2a399ea8e6865e32d06ade288876e33202c0 Mon Sep 17 00:00:00 2001 From: Federico Jeanne Date: Fri, 17 Jul 2026 09:46:27 +0200 Subject: [PATCH 1/2] CTabFolder: support circular page traversal in MRU mode without chevron When setMRUVisible(true) and all tabs fit without a chevron, navigating past the last tab with Ctrl+PageDown (TRAVERSE_PAGE_NEXT) or before the first tab with Ctrl+PageUp (TRAVERSE_PAGE_PREVIOUS) had no effect. Now navigation wraps around to the first/last visible tab respectively, matching the existing behavior of the non-MRU traversal path. Adds a new option to the CTabFolder tab in the CustomControlExample (under: Other > Activate MRU) which demonstrates the before/after behavior. Fixes https://github.com/eclipse-platform/eclipse.platform.ui/issues/4135 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../org/eclipse/swt/custom/CTabFolder.java | 2 ++ .../src/examples_control.properties | 1 + .../examples/controlexample/CTabFolderTab.java | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java index 1e61652cef8..03aac63eafc 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java @@ -2057,6 +2057,8 @@ void onPageTraversal(Event event) { if (e.doit && !isDisposed()) { showList(chevronRect); } + } else { + index = visible [(current + offset + idx) % idx]; } } } diff --git a/examples/org.eclipse.swt.examples/src/examples_control.properties b/examples/org.eclipse.swt.examples/src/examples_control.properties index 54bc35f9c0d..ad7f2ef4442 100644 --- a/examples/org.eclipse.swt.examples/src/examples_control.properties +++ b/examples/org.eclipse.swt.examples/src/examples_control.properties @@ -232,6 +232,7 @@ Set_Min_Visible = Minimize Set_Max_Visible = Maximize Set_Unselected_Close_Visible = Close on Unselected Tabs Set_Unselected_Image_Visible = Image on Unselected Tabs +Set_MRU_Active = Activate MRU Selection_Foreground_Color = Selection Foreground Color Selection_Background_Color = Selection Background Color Item_Foreground_Color = Item Foreground Color diff --git a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CTabFolderTab.java b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CTabFolderTab.java index 728f988c7d4..74b7450e906 100644 --- a/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CTabFolderTab.java +++ b/examples/org.eclipse.swt.examples/src/org/eclipse/swt/examples/controlexample/CTabFolderTab.java @@ -63,7 +63,7 @@ class CTabFolderTab extends Tab { /* Other widgets added to the "Other" group */ Button singleTabButton, imageButton, showMinButton, showMaxButton, - topRightButton, unselectedCloseButton, unselectedImageButton; + topRightButton, unselectedCloseButton, unselectedImageButton, activateMRUButton; ToolBar topRightControl; @@ -233,6 +233,12 @@ void createOtherGroup () { unselectedCloseButton.setText (ControlExample.getResourceString("Set_Unselected_Close_Visible")); unselectedCloseButton.setSelection(true); unselectedCloseButton.addSelectionListener (widgetSelectedAdapter(event -> setUnselectedCloseVisible())); + + activateMRUButton = new Button (otherGroup, SWT.CHECK); + activateMRUButton.setText (ControlExample.getResourceString("Set_MRU_Active")); + activateMRUButton.setSelection(false); + activateMRUButton.addSelectionListener (widgetSelectedAdapter(event -> setMRUActive())); + } /** @@ -412,6 +418,7 @@ void setExampleWidgetState () { setImages(); setMinimizeVisible(); setMaximizeVisible(); + setMRUActive(); setUnselectedCloseVisible(); setUnselectedImageVisible(); setSelectionBackground (); @@ -458,6 +465,13 @@ void setMaximizeVisible () { tabFolder1.setMaximizeVisible(showMaxButton.getSelection ()); setExampleWidgetSize(); } + /** + * Activates/deactivates the MRU setting + */ + void setMRUActive () { + tabFolder1.setMRUVisible(activateMRUButton.getSelection ()); + setExampleWidgetSize(); + } /** * Sets the top right control to a toolbar */ From 0186ea6f7cfe6e2d6503be92dd2e7583a20358db Mon Sep 17 00:00:00 2001 From: Federico Jeanne Date: Tue, 21 Jul 2026 14:11:05 +0200 Subject: [PATCH 2/2] Version bump(s) for 4.41 stream --- examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF index b7b9968fa3f..c078217c52e 100644 --- a/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF +++ b/examples/org.eclipse.swt.examples/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %plugin.SWTStandaloneExampleSet.name Bundle-SymbolicName: org.eclipse.swt.examples; singleton:=true -Bundle-Version: 3.109.100.qualifier +Bundle-Version: 3.109.200.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-21