From 7db3fba25fe89240fa80661d81a5dffa2f31ff14 Mon Sep 17 00:00:00 2001
From: Alexander Kurtakov
Date: Mon, 12 Oct 2015 19:08:43 +0300
Subject: Bug 479580 - Widgets with V_SCROLL not scrollable
Hiding scrollbar for widget created with style V_SCROLL shouldn't stop
other means of scrolling e.g. mouse wheel.
The fix is to use new GTK_POLICY_EXTERNAL (added in GTK 3.16) which
allows scrolling when scrollbars invisible which was not the possible
before that.
Change-Id: Icffb3c7792458369a7a7ee07dc317d83bf0757b2
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
---
.../Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java | 1 +
.../Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java | 3 +++
2 files changed, 4 insertions(+)
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
index fe8283d..cf8cda6 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/OS.java
@@ -363,6 +363,7 @@ public class OS extends C {
public static final int GTK_POLICY_ALWAYS = 0x0;
public static final int GTK_POLICY_AUTOMATIC = 0x1;
public static final int GTK_POLICY_NEVER = 0x2;
+ public static final int GTK_POLICY_EXTERNAL = 0x3;
public static final int GTK_POS_TOP = 0x2;
public static final int GTK_POS_BOTTOM = 0x3;
public static final int GTK_PRINT_CAPABILITY_PAGE_SET = 1 << 0;
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
index 2d38a95..7295a27 100644
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
@@ -389,6 +389,9 @@ boolean setScrollBarVisible (ScrollBar bar, boolean visible) {
int [] hsp = new int [1], vsp = new int [1];
OS.gtk_scrolled_window_get_policy (scrolledHandle, hsp, vsp);
int policy = visible ? OS.GTK_POLICY_ALWAYS : OS.GTK_POLICY_NEVER;
+ if (OS.GTK_VERSION >= OS.VERSION(3, 16, 0) && !visible) {
+ policy = OS.GTK_POLICY_EXTERNAL;
+ }
if ((bar.style & SWT.HORIZONTAL) != 0) {
if (hsp [0] == policy) return false;
hsp [0] = policy;
--
cgit v0.11.2-4-g4a35