Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug500924_tabfolder_dispose_crash.java')
-rw-r--r--tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug500924_tabfolder_dispose_crash.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug500924_tabfolder_dispose_crash.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug500924_tabfolder_dispose_crash.java
new file mode 100644
index 0000000000..77bc5cca89
--- /dev/null
+++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug500924_tabfolder_dispose_crash.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Red Hat and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.swt.tests.gtk.snippets;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+
+public class Bug500924_tabfolder_dispose_crash {
+ private static TabItem tab1;
+ private static TabItem tab2;
+ private static Composite cmp1;
+ private static Composite cmp2;
+ private static TabFolder folder;
+
+ public static void main(String[] args) {
+ Display display = new Display();
+ final Shell shell = new Shell(display);
+ shell.setText("SWT Tabitem dispose bug");
+ shell.setLayout(new GridLayout(1,false));
+
+ Button btn1 = new Button(shell, SWT.PUSH);
+ btn1.setText("Show/Hide tab1");
+ btn1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+ btn1.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ TabItem[] arr = folder.getItems();
+ for (int a = 0; a < arr.length; a++) {
+ Control ctrl = arr[a].getControl();
+ arr[a].setControl(null);
+ ctrl.dispose();
+ arr[a].dispose();
+ }
+ }
+ });
+
+ folder = new TabFolder(shell, SWT.NONE);
+ folder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+
+ tab1 = new TabItem(folder, SWT.NONE);
+ tab1.setText("Tab 1");
+
+ cmp1 = new Composite(folder, SWT.NONE);
+ cmp1.setLayout(new FillLayout());
+ new Button(cmp1, SWT.NONE).setText("Button 1");
+ new Button(cmp1, SWT.NONE).setText("Button 2");
+ tab1.setControl(cmp1);
+
+
+ tab2 = new TabItem(folder, SWT.NONE);
+ tab2.setText("Tab 2");
+ cmp2 = new Composite(folder, SWT.NONE);
+ cmp2.setLayout(new FillLayout());
+ new Button(cmp2, SWT.NONE).setText("Button 3");
+ new Button(cmp2, SWT.NONE).setText("Button 4");
+ tab2.setControl(cmp2);
+
+ shell.open();
+
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ display.dispose();
+ }
+}

Back to the top