Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2020-02-20 08:52:55 +0000
committerAndrey Loskutov2020-03-14 19:49:59 +0000
commit42cced92611c0eea6694cb93193ba1af4087018e (patch)
treeb2b99e26b76e08422a1f80a896585c915fac452a
parent439d8fb91e6a33773ef023745d7f65f2ec9aeed8 (diff)
downloadeclipse.platform.swt-42cced92611c0eea6694cb93193ba1af4087018e.tar.gz
eclipse.platform.swt-42cced92611c0eea6694cb93193ba1af4087018e.tar.xz
eclipse.platform.swt-42cced92611c0eea6694cb93193ba1af4087018e.zip
Bug 484682 - don't call forceResize on getClientAreaInPixels()
Beside the fact that get* methods should not modify object state, this can lead to stack overflow. This is experimental and can be switched off to the old behavior via -Dorg.eclipse.swt.resizeOnGetClientArea=true system flag. Change-Id: Ide568466ab2e09b579b4bb3cd2d4914aa7917c8d Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java7
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java4
4 files changed, 15 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
index 4c625c0b33..3dd4747ff0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
@@ -752,7 +752,9 @@ Rectangle getClientAreaInPixels () {
if ((state & ZERO_WIDTH) != 0 && (state & ZERO_HEIGHT) != 0) {
return new Rectangle (0, 0, 0, 0);
}
- forceResize ();
+ if(RESIZE_ON_GETCLIENTAREA) {
+ forceResize ();
+ }
long clientHandle = clientHandle ();
GtkAllocation allocation = new GtkAllocation();
GTK.gtk_widget_get_allocation (clientHandle, allocation);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
index bd6c98d64a..ff43177f65 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Scrollable.java
@@ -40,6 +40,9 @@ public abstract class Scrollable extends Control {
long scrolledHandle;
ScrollBar horizontalBar, verticalBar;
+ /** See bug 484682 */
+ static final boolean RESIZE_ON_GETCLIENTAREA = Boolean.getBoolean("org.eclipse.swt.resizeOnGetClientArea");
+
/**
* Prevents uninitialized instances from being created outside the package.
*/
@@ -232,7 +235,9 @@ public Rectangle getClientArea () {
Rectangle getClientAreaInPixels () {
checkWidget ();
- forceResize ();
+ if(RESIZE_ON_GETCLIENTAREA) {
+ forceResize ();
+ }
long clientHandle = clientHandle ();
GtkAllocation allocation = new GtkAllocation ();
GTK.gtk_widget_get_allocation (clientHandle, allocation);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index c1d08387ed..aeeab7b506 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
@@ -1198,7 +1198,9 @@ void fixChildren (Shell newShell, Shell oldShell, Decorations newDecorations, De
@Override
Rectangle getClientAreaInPixels () {
checkWidget ();
- forceResize ();
+ if(RESIZE_ON_GETCLIENTAREA) {
+ forceResize ();
+ }
long clientHandle = clientHandle ();
GtkAllocation allocation = new GtkAllocation ();
GTK.gtk_widget_get_allocation (clientHandle, allocation);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index 76bee3fd0b..00fadcab8e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
@@ -1262,7 +1262,9 @@ void fixChildren (Shell newShell, Shell oldShell, Decorations newDecorations, De
@Override
Rectangle getClientAreaInPixels () {
checkWidget ();
- forceResize ();
+ if(RESIZE_ON_GETCLIENTAREA) {
+ forceResize ();
+ }
long clientHandle = clientHandle ();
GtkAllocation allocation = new GtkAllocation ();
GTK.gtk_widget_get_allocation (clientHandle, allocation);

Back to the top