diff --git a/org.eclipse.gef/.settings/.api_filters b/org.eclipse.gef/.settings/.api_filters
index dac7f0def..f711a2d0d 100644
--- a/org.eclipse.gef/.settings/.api_filters
+++ b/org.eclipse.gef/.settings/.api_filters
@@ -126,6 +126,14 @@
+
+
+
+
+
+
+
+
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/DefaultPaletteViewerPreferences.java b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/DefaultPaletteViewerPreferences.java
index 2a4dc4d58..e8b34dc83 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/DefaultPaletteViewerPreferences.java
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/DefaultPaletteViewerPreferences.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2024 IBM Corporation and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -15,6 +15,7 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -76,6 +77,7 @@ public DefaultPaletteViewerPreferences(final IPreferenceStore store) {
store.setDefault(PREFERENCE_LAYOUT, LAYOUT_LIST);
store.setDefault(PREFERENCE_AUTO_COLLAPSE, COLLAPSE_AS_NEEDED);
store.setDefault(PREFERENCE_FONT, DEFAULT_FONT);
+ store.setDefault(PREFERENCE_SCROLLBARS_MODE, SWT.SCROLLBAR_OVERLAY);
listener = new PreferenceStoreListener();
store.addPropertyChangeListener(listener);
@@ -231,6 +233,8 @@ protected void handlePreferenceStorePropertyChanged(String property) {
firePropertyChanged(property, Integer.valueOf(getAutoCollapseSetting()));
} else if (property.equals(PREFERENCE_FONT)) {
firePropertyChanged(property, getFontData());
+ } else if (property.equals(PREFERENCE_SCROLLBARS_MODE)) {
+ firePropertyChanged(property, getScrollbarsMode());
} else {
firePropertyChanged(property, Boolean.valueOf(useLargeIcons(convertPreferenceNameToLayout(property))));
}
@@ -356,4 +360,18 @@ public void propertyChange(PropertyChangeEvent evt) {
}
}
+ @Override
+ public void setScrollbarsMode(int mode) {
+ if (mode != SWT.SCROLLBAR_OVERLAY && mode != SWT.NONE) {
+ throw new IllegalArgumentException(
+ "Scrollbar mode must be either SWT.SCROLLBAR_OVERLAY or SWT.NONE, but %d was given!" //$NON-NLS-1$
+ .formatted(mode));
+ }
+ getPreferenceStore().setValue(PREFERENCE_SCROLLBARS_MODE, mode);
+ }
+
+ @Override
+ public int getScrollbarsMode() {
+ return getPreferenceStore().getInt(PREFERENCE_SCROLLBARS_MODE);
+ }
}
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteMessages.java b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteMessages.java
index 245c8be09..a8e1d74d3 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteMessages.java
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteMessages.java
@@ -236,6 +236,12 @@ public class PaletteMessages extends NLS {
* The String ""
*/
public static String SETTINGS_WORKBENCH_FONT_LABEL;
+ /**
+ * The String "Enable Overlay Scrolling"
+ *
+ * @since 3.20
+ */
+ public static String SETTINGS_OVERLAY_SCROLLING;
/**
* The String "-"
*/
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewer.java b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewer.java
index a6b985ecc..ec5bf6327 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewer.java
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2024 IBM Corporation and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -71,6 +71,11 @@ public void propertyChange(PropertyChangeEvent evt) {
|| property.equals(DefaultPaletteViewerPreferences
.convertLayoutToPreferenceName(getPaletteViewerPreferences().getLayoutSetting()))) {
refreshAllEditParts(root);
+ } else if (property.equals(PaletteViewerPreferences.PREFERENCE_SCROLLBARS_MODE)) {
+ FigureCanvas canvas = getFigureCanvas();
+ if (canvas != null) {
+ canvas.setScrollbarsMode((int) evt.getNewValue());
+ }
}
}
@@ -271,6 +276,7 @@ protected void hookControl() {
canvas.setHorizontalScrollBarVisibility(FigureCanvas.NEVER);
canvas.setVerticalScrollBarVisibility(globalScrollbar ? FigureCanvas.ALWAYS : FigureCanvas.AUTOMATIC);
if (prefs != null) {
+ canvas.setScrollbarsMode(prefs.getScrollbarsMode());
prefs.addPropertyChangeListener(prefListener);
}
updateFont();
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewerPreferences.java b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewerPreferences.java
index af739ad54..538478097 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewerPreferences.java
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/PaletteViewerPreferences.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2024 IBM Corporation and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -14,6 +14,7 @@
import java.beans.PropertyChangeListener;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
/**
@@ -26,6 +27,7 @@
* future.
*
* @author Pratik Shah
+ * @noimplement This interface is not intended to be implemented by clients.
*/
public interface PaletteViewerPreferences {
@@ -129,6 +131,14 @@ public interface PaletteViewerPreferences {
*/
String PREFERENCE_FONT = "Palette Font"; //$NON-NLS-1$
+ /**
+ * Linux Only Property name for enabling or disabling the scrollbars
+ * overlay.
+ *
+ * @since 3.20
+ */
+ String PREFERENCE_SCROLLBARS_MODE = "Scrollbars Mode"; //$NON-NLS-1$
+
/**
* @param listener the PropertyChangeListener to be notified of changes
* @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
@@ -298,4 +308,25 @@ public interface PaletteViewerPreferences {
*/
boolean useLargeIcons();
+ /**
+ * Enables or disables overlay scrolling for the palette viewer. Supported
+ * values are:
+ *
+ * - {@link SWT#NONE}
+ * - {@link SWT#SCROLLBAR_OVERLAY}
+ *
+ * Overlay scrollbars are only supported on {@code Linux}.
+ *
+ * @since 3.20
+ */
+ void setScrollbarsMode(int mode);
+
+ /**
+ * Returns whether overlay scrolling is enabled for the palette viewer . Overlay
+ * scrollbars are only supported on {@code Linux}.
+ *
+ * @return One of {@link SWT#SCROLLBAR_OVERLAY} or {@link SWT#NONE}.
+ * @since 3.20
+ */
+ int getScrollbarsMode();
}
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/customize/PaletteSettingsDialog.java b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/customize/PaletteSettingsDialog.java
index c503e4f5d..b914c3c1c 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/customize/PaletteSettingsDialog.java
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/customize/PaletteSettingsDialog.java
@@ -20,6 +20,7 @@
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@@ -31,6 +32,7 @@
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.ImageDescriptor;
@@ -70,6 +72,10 @@ public class PaletteSettingsDialog extends Dialog {
protected static final String CACHE_DETAILS_ICON_SIZE = "details - use large icons"; //$NON-NLS-1$
protected static final String CACHE_FONT = "font"; //$NON-NLS-1$
protected static final String CACHE_COLLAPSE = "auto-collapse setting"; //$NON-NLS-1$
+ /**
+ * @since 3.20
+ */
+ protected static final String CACHE_SCROLLBARS_MODE = "scrollbars mode"; //$NON-NLS-1$
/**
* The unique IDs for the various widgets. These IDs can be used to retrieve
@@ -90,6 +96,10 @@ public class PaletteSettingsDialog extends Dialog {
protected static final int LAYOUT_DETAILS_VIEW_ID = IDialogConstants.CLIENT_ID + 12;
protected static final int FONT_CHANGE_ID = IDialogConstants.CLIENT_ID + 13;
protected static final int DEFAULT_FONT_ID = IDialogConstants.CLIENT_ID + 14;
+ /**
+ * @since 3.20
+ */
+ protected static final int SCROLLBARS_MODE_ID = IDialogConstants.CLIENT_ID + 15;
/**
* Sub - classes that need to create their own unique IDs should do so by adding
@@ -163,6 +173,9 @@ protected void buttonPressed(int buttonId) {
case DEFAULT_FONT_ID:
handleDefaultFontRequested();
break;
+ case SCROLLBARS_MODE_ID:
+ handleScrollbarsModeChanged(b.getSelection());
+ break;
default:
super.buttonPressed(buttonId);
break;
@@ -186,6 +199,7 @@ protected void cacheSettings() {
settings.put(CACHE_COLUMNS_ICON_SIZE,
Boolean.valueOf(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_COLUMNS)));
settings.put(CACHE_LIST_ICON_SIZE, Boolean.valueOf(prefs.useLargeIcons(PaletteViewerPreferences.LAYOUT_LIST)));
+ settings.put(CACHE_SCROLLBARS_MODE, prefs.getScrollbarsMode());
}
/**
@@ -348,6 +362,11 @@ protected Control createDialogArea(Composite parent) {
data.horizontalIndent = 5;
child.setLayoutData(data);
+ if (Platform.getOS().equals(Platform.OS_LINUX)) {
+ child = createScrollbarsSettings(composite);
+ child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
+ }
+
Label label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
data.horizontalSpan = 2;
@@ -436,6 +455,23 @@ protected Control createColumnsOptions(Composite parent) {
return contents;
}
+ /**
+ * Creates and initializes the part of the dialog that displays the options for
+ * overlay scrolling. This method should only be called on Linux. *
+ *
+ * @param parent the parent composite
+ * @return the newly created control
+ *
+ * @since 3.20
+ */
+ protected Control createScrollbarsSettings(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new FillLayout());
+ Button button = createButton(composite, SCROLLBARS_MODE_ID, "Enable overlay scrollbar", SWT.CHECK, null);
+ button.setSelection(prefs.getScrollbarsMode() == SWT.SCROLLBAR_OVERLAY);
+ return composite;
+ }
+
/**
* Creates and initializes (i.e. loads the current settings from
* PaletteViewerPreferences) the part of the dialog that displays the font
@@ -734,6 +770,17 @@ protected void handleLayoutSettingChanged(int newSetting) {
}
}
+ /**
+ * This method is called whenever the "Enable Overlay Scrolling" checkbox is
+ * selected/deselected. The method argument is the new state of the button.
+ *
+ * @param checked If {@code true}, overlay scrolling will be enabled.
+ * @since 3.20
+ */
+ protected void handleScrollbarsModeChanged(boolean checked) {
+ prefs.setScrollbarsMode(checked ? SWT.SCROLLBAR_OVERLAY : SWT.NONE);
+ }
+
/**
* Restores the cached settings, thus undoing any changes made since the last
* caching of settings.
@@ -752,6 +799,7 @@ protected void restoreSettings() {
((Boolean) settings.get(CACHE_LIST_ICON_SIZE)).booleanValue());
prefs.setUseLargeIcons(PaletteViewerPreferences.LAYOUT_COLUMNS,
((Boolean) settings.get(CACHE_COLUMNS_ICON_SIZE)).booleanValue());
+ prefs.setScrollbarsMode((int) settings.get(CACHE_SCROLLBARS_MODE));
}
/**
diff --git a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/messages.properties b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/messages.properties
index 13d41c85e..9c7dbb572 100644
--- a/org.eclipse.gef/src/org/eclipse/gef/ui/palette/messages.properties
+++ b/org.eclipse.gef/src/org/eclipse/gef/ui/palette/messages.properties
@@ -22,6 +22,7 @@ SETTINGS_LIST_VIEW_LABEL=&List
SETTINGS_USE_LARGE_ICONS_LABEL=&Use large icons
SETTINGS_USE_LARGE_ICONS_LABEL_CAPS=&Use Large Icons
SETTINGS_ICONS_VIEW_LABEL=&Icons only
+SETTINGS_OVERLAY_SCROLLING=Enable Overlay Scrolling
COLLAPSE_NEVER_LABEL=&Never close
COLLAPSE_ALWAYS_LABEL=&Always close when opening another drawer
COLLAPSE_AS_NEEDED_LABEL=Close automatically &when there is not enough room