diff options
Diffstat (limited to 'tests')
5 files changed, 365 insertions, 365 deletions
diff --git a/tests/org.eclipse.swt.tests.cocoa/.settings/org.eclipse.m2e.core.prefs b/tests/org.eclipse.swt.tests.cocoa/.settings/org.eclipse.m2e.core.prefs index 14b697b7bb..f897a7f1cb 100644 --- a/tests/org.eclipse.swt.tests.cocoa/.settings/org.eclipse.m2e.core.prefs +++ b/tests/org.eclipse.swt.tests.cocoa/.settings/org.eclipse.m2e.core.prefs @@ -1,4 +1,4 @@ -activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
+activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/tests/org.eclipse.swt.tests.gtk/.settings/org.eclipse.m2e.core.prefs b/tests/org.eclipse.swt.tests.gtk/.settings/org.eclipse.m2e.core.prefs index 14b697b7bb..f897a7f1cb 100644 --- a/tests/org.eclipse.swt.tests.gtk/.settings/org.eclipse.m2e.core.prefs +++ b/tests/org.eclipse.swt.tests.gtk/.settings/org.eclipse.m2e.core.prefs @@ -1,4 +1,4 @@ -activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
+activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547093_LogoffStuck.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547093_LogoffStuck.java index 9effebffa8..c16a3dd49a 100644 --- a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547093_LogoffStuck.java +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug547093_LogoffStuck.java @@ -1,56 +1,56 @@ -/*******************************************************************************
- * Copyright (c) 2019 Syntevo and others. All rights reserved.
- * The contents of this file are made available under the terms
- * of the GNU Lesser General Public License (LGPL) Version 2.1 that
- * accompanies this distribution (lgpl-v21.txt). The LGPL is also
- * available at http://www.gnu.org/licenses/lgpl.html. If the version
- * of the LGPL at http://www.gnu.org is different to the version of
- * the LGPL accompanying this distribution and there is any conflict
- * between the two license versions, the terms of the LGPL accompanying
- * this distribution shall govern.
- *
- * Contributors:
- * Syntevo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.tests.gtk.snippets;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-public class Bug547093_LogoffStuck {
- public static void main (String [] args) {
- Display display = new Display ();
-
- Shell shell = new Shell (display);
- shell.setLayout(new FillLayout());
- shell.setSize(300, 200);
-
- display.addListener(SWT.Dispose, event -> {
- /*
- * System.exit() prevents org.eclipse.swt.internal.SessionManagerDBus
- * from sending reply to session manager and it gets stuck waiting for
- * that reply.
- */
- System.exit(0);
- });
-
- final Label label = new Label(shell, SWT.WRAP | SWT.CENTER);
- label.setText("\n\n\nWhen you logoff, GNOME session manager will get stuck for 90 seconds");
-
- // Test for deadlock with shutdown hook on regular closing
- shell.addListener(SWT.Close, event -> {
- System.exit(0);
- });
-
- shell.open ();
-
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch ()) display.sleep ();
- }
-
- display.dispose ();
- }
-}
+/******************************************************************************* + * Copyright (c) 2019 Syntevo and others. All rights reserved. + * The contents of this file are made available under the terms + * of the GNU Lesser General Public License (LGPL) Version 2.1 that + * accompanies this distribution (lgpl-v21.txt). The LGPL is also + * available at http://www.gnu.org/licenses/lgpl.html. If the version + * of the LGPL at http://www.gnu.org is different to the version of + * the LGPL accompanying this distribution and there is any conflict + * between the two license versions, the terms of the LGPL accompanying + * this distribution shall govern. + * + * Contributors: + * Syntevo - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; + +public class Bug547093_LogoffStuck { + public static void main (String [] args) { + Display display = new Display (); + + Shell shell = new Shell (display); + shell.setLayout(new FillLayout()); + shell.setSize(300, 200); + + display.addListener(SWT.Dispose, event -> { + /* + * System.exit() prevents org.eclipse.swt.internal.SessionManagerDBus + * from sending reply to session manager and it gets stuck waiting for + * that reply. + */ + System.exit(0); + }); + + final Label label = new Label(shell, SWT.WRAP | SWT.CENTER); + label.setText("\n\n\nWhen you logoff, GNOME session manager will get stuck for 90 seconds"); + + // Test for deadlock with shutdown hook on regular closing + shell.addListener(SWT.Close, event -> { + System.exit(0); + }); + + shell.open (); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); + } +} diff --git a/tests/org.eclipse.swt.tests.win32/ManualTests/org/eclipse/swt/tests/win32/snippets/Bug543747_JvmCrash_Msctf.java b/tests/org.eclipse.swt.tests.win32/ManualTests/org/eclipse/swt/tests/win32/snippets/Bug543747_JvmCrash_Msctf.java index 7bed16d8ea..9e5f96f168 100644 --- a/tests/org.eclipse.swt.tests.win32/ManualTests/org/eclipse/swt/tests/win32/snippets/Bug543747_JvmCrash_Msctf.java +++ b/tests/org.eclipse.swt.tests.win32/ManualTests/org/eclipse/swt/tests/win32/snippets/Bug543747_JvmCrash_Msctf.java @@ -1,143 +1,143 @@ -/*******************************************************************************
- * Copyright (c) 2019 Syntevo and others. All rights reserved.
- * The contents of this file are made available under the terms
- * of the GNU Lesser General Public License (LGPL) Version 2.1 that
- * accompanies this distribution (lgpl-v21.txt). The LGPL is also
- * available at http://www.gnu.org/licenses/lgpl.html. If the version
- * of the LGPL at http://www.gnu.org is different to the version of
- * the LGPL accompanying this distribution and there is any conflict
- * between the two license versions, the terms of the LGPL accompanying
- * this distribution shall govern.
- *
- * Contributors:
- * Syntevo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.tests.win32.snippets;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public class Bug543747_JvmCrash_Msctf {
- public static void reproduce526758(Shell parentShell) {
- Shell tempShell = new Shell(parentShell);
-
- // Create something to catch initial focus, so that
- // text.setFocus() does something. This is only to
- // show that .setFocus() is important.
- new Button(tempShell, SWT.PUSH);
-
- // This Text will cause crash.
- Text text = new Text(tempShell, 0);
-
- // Shell must be visible to prevent early return in .setFocus()
- tempShell.setSize(10, 10);
- tempShell.open();
-
- // ImmAssociateContext() itself is lazy.
- // .setFocus() causes it to start up.
- text.setFocus();
-
- // Destroying the shell triggers the bug.
- tempShell.dispose();
-
- // JVM still alive?
- MessageBox msgbox = new MessageBox(parentShell);
- msgbox.setMessage("Crash didn't reproduce");
- msgbox.open();
- }
-
- public static void reproduce543747(Shell parentShell) {
- Shell tempShell = new Shell(parentShell);
-
- // Create something to catch initial focus, so that
- // text.setFocus() does something. This is only to
- // show that .setFocus() is important.
- new Button(tempShell, SWT.PUSH);
-
- // This Text will cause crash.
- // Text needs to have an intermediate parent for this bug.
- Composite composite = new Composite(tempShell, 0);
- Text text = new Text(composite, 0);
-
- // Shell must be visible to prevent early return in .setFocus()
- tempShell.setSize(10, 10);
- tempShell.open();
-
- // ImmAssociateContext() itself is lazy.
- // .setFocus() causes it to start up.
- text.setFocus();
-
- // Destroying the shell triggers the bug.
- tempShell.dispose();
-
- // Give additional instructions
- MessageBox msgbox = new MessageBox(parentShell);
- msgbox.setMessage(
- "Now please do one of:\n" +
- "a) Open Task Manager, go to Users, right-click your user, select Disconnect, log in again\n" +
- "b) Connect Remote Desktop to this machine\n" +
- "\n" +
- "The snippet is expected to crash just after that."
- );
- msgbox.open();
- }
-
- public static void main (String [] args) {
- Display display = new Display ();
-
- Shell shell = new Shell (display);
- RowLayout layout = new RowLayout(SWT.VERTICAL);
- layout.marginHeight = 10;
- layout.marginWidth = 10;
- layout.spacing = 10;
- shell.setLayout(layout);
-
- final Text labelInfo = new Text(shell, SWT.READ_ONLY | SWT.MULTI);
- labelInfo.setText(
- "Both of these crashes are only seen on Win10 1809+\n" +
- "\n" +
- "To reproduce reliably, use Application Verifier:\n" +
- "1) Install Application Verifier:\n" +
- "a) Download Windows SDK:\n" +
- " https://go.microsoft.com/fwlink/p/?LinkID=2033908\n" +
- "b) Install it, selecting Application Verifier. Other components are not required.\n" +
- "\n" +
- "2) Configure Application Verifier\n" +
- "a) Run 'Application Verifier (X64)' from Start menu.\n" +
- "b) Use File | Add application... to add java.exe\n" +
- "c) IMPORTANT: On the right pane, make sure that only 'Basics/Heaps' is selected.\n" +
- " JVM always crashes with 'Basics/Exceptions' and 'Basics/Memory'\n" +
- "d) Click 'Save'. You can close Application Verifier now\n" +
- " It will be active until you explicitly disable it.\n" +
- "e) Restart application once.\n" +
- "f) Note: applications run slower and consume more RAM under Application Verifier.\n" +
- "\n" +
- "3) Reproduce the problem\n" +
- "\n" +
- "4) Disable Application Verifier if you want\n" +
- "a) Keep it enabled it if you're ready to tolerate the slowness, but find more bugs\n" +
- "b) Go to Application Verifier again\n" +
- "c) Delete java.exe from the list.\n" +
- "d) Click Save.\n" +
- "e) There's no need to uninstall Application Verifier, but you can do that if you like."
- );
-
- final Button button526758 = new Button(shell, SWT.PUSH);
- button526758.setText("Reproduce crash 526758");
- button526758.addListener(SWT.Selection, event -> {reproduce526758(shell);});
-
- final Button button543747 = new Button(shell, SWT.PUSH);
- button543747.setText("Reproduce crash 543747");
- button543747.addListener(SWT.Selection, event -> {reproduce543747(shell);});
-
- shell.pack();
- shell.open();
-
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch ()) display.sleep ();
- }
-
- display.dispose ();
- }
-}
+/******************************************************************************* + * Copyright (c) 2019 Syntevo and others. All rights reserved. + * The contents of this file are made available under the terms + * of the GNU Lesser General Public License (LGPL) Version 2.1 that + * accompanies this distribution (lgpl-v21.txt). The LGPL is also + * available at http://www.gnu.org/licenses/lgpl.html. If the version + * of the LGPL at http://www.gnu.org is different to the version of + * the LGPL accompanying this distribution and there is any conflict + * between the two license versions, the terms of the LGPL accompanying + * this distribution shall govern. + * + * Contributors: + * Syntevo - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.win32.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; + +public class Bug543747_JvmCrash_Msctf { + public static void reproduce526758(Shell parentShell) { + Shell tempShell = new Shell(parentShell); + + // Create something to catch initial focus, so that + // text.setFocus() does something. This is only to + // show that .setFocus() is important. + new Button(tempShell, SWT.PUSH); + + // This Text will cause crash. + Text text = new Text(tempShell, 0); + + // Shell must be visible to prevent early return in .setFocus() + tempShell.setSize(10, 10); + tempShell.open(); + + // ImmAssociateContext() itself is lazy. + // .setFocus() causes it to start up. + text.setFocus(); + + // Destroying the shell triggers the bug. + tempShell.dispose(); + + // JVM still alive? + MessageBox msgbox = new MessageBox(parentShell); + msgbox.setMessage("Crash didn't reproduce"); + msgbox.open(); + } + + public static void reproduce543747(Shell parentShell) { + Shell tempShell = new Shell(parentShell); + + // Create something to catch initial focus, so that + // text.setFocus() does something. This is only to + // show that .setFocus() is important. + new Button(tempShell, SWT.PUSH); + + // This Text will cause crash. + // Text needs to have an intermediate parent for this bug. + Composite composite = new Composite(tempShell, 0); + Text text = new Text(composite, 0); + + // Shell must be visible to prevent early return in .setFocus() + tempShell.setSize(10, 10); + tempShell.open(); + + // ImmAssociateContext() itself is lazy. + // .setFocus() causes it to start up. + text.setFocus(); + + // Destroying the shell triggers the bug. + tempShell.dispose(); + + // Give additional instructions + MessageBox msgbox = new MessageBox(parentShell); + msgbox.setMessage( + "Now please do one of:\n" + + "a) Open Task Manager, go to Users, right-click your user, select Disconnect, log in again\n" + + "b) Connect Remote Desktop to this machine\n" + + "\n" + + "The snippet is expected to crash just after that." + ); + msgbox.open(); + } + + public static void main (String [] args) { + Display display = new Display (); + + Shell shell = new Shell (display); + RowLayout layout = new RowLayout(SWT.VERTICAL); + layout.marginHeight = 10; + layout.marginWidth = 10; + layout.spacing = 10; + shell.setLayout(layout); + + final Text labelInfo = new Text(shell, SWT.READ_ONLY | SWT.MULTI); + labelInfo.setText( + "Both of these crashes are only seen on Win10 1809+\n" + + "\n" + + "To reproduce reliably, use Application Verifier:\n" + + "1) Install Application Verifier:\n" + + "a) Download Windows SDK:\n" + + " https://go.microsoft.com/fwlink/p/?LinkID=2033908\n" + + "b) Install it, selecting Application Verifier. Other components are not required.\n" + + "\n" + + "2) Configure Application Verifier\n" + + "a) Run 'Application Verifier (X64)' from Start menu.\n" + + "b) Use File | Add application... to add java.exe\n" + + "c) IMPORTANT: On the right pane, make sure that only 'Basics/Heaps' is selected.\n" + + " JVM always crashes with 'Basics/Exceptions' and 'Basics/Memory'\n" + + "d) Click 'Save'. You can close Application Verifier now\n" + + " It will be active until you explicitly disable it.\n" + + "e) Restart application once.\n" + + "f) Note: applications run slower and consume more RAM under Application Verifier.\n" + + "\n" + + "3) Reproduce the problem\n" + + "\n" + + "4) Disable Application Verifier if you want\n" + + "a) Keep it enabled it if you're ready to tolerate the slowness, but find more bugs\n" + + "b) Go to Application Verifier again\n" + + "c) Delete java.exe from the list.\n" + + "d) Click Save.\n" + + "e) There's no need to uninstall Application Verifier, but you can do that if you like." + ); + + final Button button526758 = new Button(shell, SWT.PUSH); + button526758.setText("Reproduce crash 526758"); + button526758.addListener(SWT.Selection, event -> {reproduce526758(shell);}); + + final Button button543747 = new Button(shell, SWT.PUSH); + button543747.setText("Reproduce crash 543747"); + button543747.addListener(SWT.Selection, event -> {reproduce543747(shell);}); + + shell.pack(); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch ()) display.sleep (); + } + + display.dispose (); + } +} diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548982_TreeAddRemoveMany.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548982_TreeAddRemoveMany.java index 16ee502bab..d72f592130 100644 --- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548982_TreeAddRemoveMany.java +++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548982_TreeAddRemoveMany.java @@ -1,159 +1,159 @@ -/*******************************************************************************
- * Copyright (c) 2019 Syntevo and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Syntevo - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.tests.manual;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-public final class Bug548982_TreeAddRemoveMany {
- // Options
- // Java only
- private static boolean CREATE_CTOR_2PARAM = false;
- // Native & Java
- private static boolean LOCK_REDRAW = false;
- private static boolean CREATE_AFTER_EXPAND = false;
- private static boolean CREATE_REVERSE_ORDER = false;
- private static boolean DELETE_PARENT_ITEM = false;
- private static boolean DELETE_AFTER_COLLAPSE = false;
- private static int NUM_ITEMS = 20000;
-
- private static Tree tree;
- private static TreeItem rootItem;
- private static int iteration = 0;
-
- private static void CreateRootItem() {
- rootItem = new TreeItem(tree, SWT.NONE, 0);
- rootItem.setText("Root");
-
- CreateExpanderSubItem();
- }
-
- private static void CreateExpanderSubItem() {
- new TreeItem(rootItem, SWT.NONE);
- }
-
- private static void CreateTreeItems() {
- iteration++;
-
- final long start = System.currentTimeMillis();
-
- if (LOCK_REDRAW) {
- tree.setRedraw(false);
- }
-
- // Delete artificial item from 'CreateExpanderSubItem'
- rootItem.removeAll();
-
- if (CREATE_REVERSE_ORDER) {
- for (int i = NUM_ITEMS - 1; i >= 0; i--) {
- TreeItem child = new TreeItem(rootItem, SWT.NONE, 0);
- child.setText("Item:" + iteration + ":" + i);
- }
- } else {
- for (int i = 0; i < NUM_ITEMS; i++) {
- TreeItem child;
-
- if (CREATE_CTOR_2PARAM)
- child = new TreeItem(rootItem, SWT.NONE);
- else
- child = new TreeItem(rootItem, SWT.NONE, i);
-
- child.setText("Item:" + iteration + ":" + i);
- }
- }
-
- if (LOCK_REDRAW) {
- tree.setRedraw(true);
- }
-
- final long end = System.currentTimeMillis();
- System.out.println("CreateTreeItems: " + (end - start) + " ms");
- }
-
- private static void DeleteTreeItems() {
- final long start = System.currentTimeMillis();
-
- if (LOCK_REDRAW) {
- tree.setRedraw(false);
- }
-
- if (DELETE_PARENT_ITEM) {
- rootItem.dispose();
- CreateRootItem();
- } else {
- rootItem.removeAll();
- CreateExpanderSubItem();
- }
-
- if (LOCK_REDRAW) {
- tree.setRedraw(true);
- }
-
- final long end = System.currentTimeMillis();
- System.out.println("DeleteTreeItems: " + (end - start) + " ms");
- }
-
- public static void main(String[] args) {
- final Display display = new Display();
- final Shell shell = new Shell(display);
- shell.setLayout(new GridLayout());
- shell.setSize(800, 600);
-
- Label lblHint = new Label(shell, 0);
- lblHint.setText("Expand/collapse tree item. Timings will be printed to console. Various options are available in code near // Options.");
-
- tree = new Tree(shell, SWT.BORDER | SWT.VIRTUAL);
- tree.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
- final TreeColumn col = new TreeColumn(tree, SWT.NONE);
- col.setText("Column 1");
- col.setWidth(400);
-
- tree.addListener(SWT.Collapse, event -> {
- if (!DELETE_AFTER_COLLAPSE) {
- DeleteTreeItems();
- } else {
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- DeleteTreeItems();
- }
- });
- }
- });
-
- tree.addListener(SWT.Expand, event -> {
- if (!CREATE_AFTER_EXPAND) {
- CreateTreeItems();
- } else {
- display.asyncExec(new Runnable() {
- @Override
- public void run() {
- CreateTreeItems();
- }
- });
- }
- });
-
- CreateRootItem();
-
- shell.open();
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch()) {
- display.sleep();
- }
- }
- display.dispose();
- }
+/******************************************************************************* + * Copyright (c) 2019 Syntevo and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Syntevo - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.manual; + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; + +public final class Bug548982_TreeAddRemoveMany { + // Options + // Java only + private static boolean CREATE_CTOR_2PARAM = false; + // Native & Java + private static boolean LOCK_REDRAW = false; + private static boolean CREATE_AFTER_EXPAND = false; + private static boolean CREATE_REVERSE_ORDER = false; + private static boolean DELETE_PARENT_ITEM = false; + private static boolean DELETE_AFTER_COLLAPSE = false; + private static int NUM_ITEMS = 20000; + + private static Tree tree; + private static TreeItem rootItem; + private static int iteration = 0; + + private static void CreateRootItem() { + rootItem = new TreeItem(tree, SWT.NONE, 0); + rootItem.setText("Root"); + + CreateExpanderSubItem(); + } + + private static void CreateExpanderSubItem() { + new TreeItem(rootItem, SWT.NONE); + } + + private static void CreateTreeItems() { + iteration++; + + final long start = System.currentTimeMillis(); + + if (LOCK_REDRAW) { + tree.setRedraw(false); + } + + // Delete artificial item from 'CreateExpanderSubItem' + rootItem.removeAll(); + + if (CREATE_REVERSE_ORDER) { + for (int i = NUM_ITEMS - 1; i >= 0; i--) { + TreeItem child = new TreeItem(rootItem, SWT.NONE, 0); + child.setText("Item:" + iteration + ":" + i); + } + } else { + for (int i = 0; i < NUM_ITEMS; i++) { + TreeItem child; + + if (CREATE_CTOR_2PARAM) + child = new TreeItem(rootItem, SWT.NONE); + else + child = new TreeItem(rootItem, SWT.NONE, i); + + child.setText("Item:" + iteration + ":" + i); + } + } + + if (LOCK_REDRAW) { + tree.setRedraw(true); + } + + final long end = System.currentTimeMillis(); + System.out.println("CreateTreeItems: " + (end - start) + " ms"); + } + + private static void DeleteTreeItems() { + final long start = System.currentTimeMillis(); + + if (LOCK_REDRAW) { + tree.setRedraw(false); + } + + if (DELETE_PARENT_ITEM) { + rootItem.dispose(); + CreateRootItem(); + } else { + rootItem.removeAll(); + CreateExpanderSubItem(); + } + + if (LOCK_REDRAW) { + tree.setRedraw(true); + } + + final long end = System.currentTimeMillis(); + System.out.println("DeleteTreeItems: " + (end - start) + " ms"); + } + + public static void main(String[] args) { + final Display display = new Display(); + final Shell shell = new Shell(display); + shell.setLayout(new GridLayout()); + shell.setSize(800, 600); + + Label lblHint = new Label(shell, 0); + lblHint.setText("Expand/collapse tree item. Timings will be printed to console. Various options are available in code near // Options."); + + tree = new Tree(shell, SWT.BORDER | SWT.VIRTUAL); + tree.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL)); + final TreeColumn col = new TreeColumn(tree, SWT.NONE); + col.setText("Column 1"); + col.setWidth(400); + + tree.addListener(SWT.Collapse, event -> { + if (!DELETE_AFTER_COLLAPSE) { + DeleteTreeItems(); + } else { + display.asyncExec(new Runnable() { + @Override + public void run() { + DeleteTreeItems(); + } + }); + } + }); + + tree.addListener(SWT.Expand, event -> { + if (!CREATE_AFTER_EXPAND) { + CreateTreeItems(); + } else { + display.asyncExec(new Runnable() { + @Override + public void run() { + CreateTreeItems(); + } + }); + } + }); + + CreateRootItem(); + + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + display.dispose(); + } }
\ No newline at end of file |