Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 355033 - SWT: Widget is disposed when using HtmlField
Summary: SWT: Widget is disposed when using HtmlField
Status: CLOSED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Scout (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-18 03:52 EDT by Claudio Guglielmo CLA
Modified: 2021-08-19 11:23 EDT (History)
2 users (show)

See Also:
zimmermann: indigo+
zimmermann: juno+


Attachments
Patch to resolve the bug. (641 bytes, patch)
2011-08-18 03:54 EDT, Claudio Guglielmo CLA
zimmermann: iplog+
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Claudio Guglielmo CLA 2011-08-18 03:52:04 EDT
Build Identifier: 3.7.0

When using a htmlfield inside a tabbox a widget is disposed exception can occur. 
For some reason the component org.eclipse.swt.ole.win32.OleClientSite creates a TRAVERSE_TAB_NEXT event when its getting disposed. This leads to a SwtScoutTabItem#setUiFocus() call which generates the exception.


org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed)
	at org.eclipse.swt.SWT.error(SWT.java:4083)
	at org.eclipse.swt.SWT.error(SWT.java:3998)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.scout.rt.ui.swt.window.dialog.SwtScoutDialog.open(SwtScoutDialog.java:215)
	at org.eclipse.scout.rt.ui.swt.window.dialog.SwtScoutDialog.showForm(SwtScoutDialog.java:84)
	at org.eclipse.scout.rt.ui.swt.AbstractSwtEnvironment.showStandaloneForm(AbstractSwtEnvironment.java:970)
	at org.eclipse.scout.rt.test.ui.swt.SwtEnvironment.showStandaloneForm(SwtEnvironment.java:83)
	at org.eclipse.scout.rt.ui.swt.AbstractSwtEnvironment$P_ScoutDesktopListener$1.run(AbstractSwtEnvironment.java:1291)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.scout.rt.test.ui.swt.SwtApplication.start(SwtApplication.java:24)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
Caused by: org.eclipse.swt.SWTException: Widget is disposed
	at org.eclipse.swt.SWT.error(SWT.java:4083)
	at org.eclipse.swt.SWT.error(SWT.java:3998)
	at org.eclipse.swt.SWT.error(SWT.java:3969)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
	at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
	at org.eclipse.swt.custom.CTabItem.getFont(CTabItem.java:193)
	at org.eclipse.scout.rt.ui.swt.form.fields.tabbox.SwtScoutTabItem.updateImage(SwtScoutTabItem.java:104)
	at org.eclipse.scout.rt.ui.swt.form.fields.tabbox.SwtScoutTabItem.setUiFocus(SwtScoutTabItem.java:91)
	at org.eclipse.scout.rt.ui.swt.form.fields.tabbox.SwtScoutTabBox$P_SwtFocusListener.handleEvent(SwtScoutTabBox.java:236)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:2618)
	at org.eclipse.swt.widgets.Widget.wmSetFocus(Widget.java:2402)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4794)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4231)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:995)
	at org.eclipse.swt.widgets.Control.setTabItemFocus(Control.java:3320)
	at org.eclipse.swt.widgets.Composite.setTabGroupFocus(Composite.java:1157)
	at org.eclipse.swt.widgets.Control.traverseGroup(Control.java:3938)
	at org.eclipse.swt.widgets.Control.traverse(Control.java:3702)
	at org.eclipse.swt.widgets.Control.traverse(Control.java:3734)
	at org.eclipse.swt.ole.win32.OleClientSite.OnUIDeactivate(OleClientSite.java:1008)
	at org.eclipse.swt.ole.win32.OleControlSite.OnUIDeactivate(OleControlSite.java:669)
	at org.eclipse.swt.ole.win32.OleClientSite$5.method10(OleClientSite.java:533)
	at org.eclipse.swt.internal.ole.win32.COMObject.callback10(COMObject.java:155)
	at org.eclipse.swt.internal.win32.OS.VtblCall(Native Method)
	at org.eclipse.swt.internal.ole.win32.IOleInPlaceObject.InPlaceDeactivate(IOleInPlaceObject.java:21)
	at org.eclipse.swt.ole.win32.OleClientSite.deactivateInPlaceClient(OleClientSite.java:559)
	at org.eclipse.swt.ole.win32.OleClientSite.onDispose(OleClientSite.java:908)
	at org.eclipse.swt.ole.win32.OleClientSite.access$1(OleClientSite.java:895)
	at org.eclipse.swt.ole.win32.OleClientSite$1.handleEvent(OleClientSite.java:129)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:808)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
	at org.eclipse.swt.widgets.Canvas.releaseChildren(Canvas.java:167)
	at org.eclipse.swt.widgets.Decorations.releaseChildren(Decorations.java:773)
	at org.eclipse.swt.widgets.Shell.releaseChildren(Shell.java:1267)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:447)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:714)
	at org.eclipse.jface.window.Window.close(Window.java:335)
	at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:979)
	at org.eclipse.scout.rt.ui.swt.window.dialog.SwtScoutDialog.closePart(SwtScoutDialog.java:96)
	at org.eclipse.scout.rt.ui.swt.AbstractSwtEnvironment.hideStandaloneForm(AbstractSwtEnvironment.java:1185)
	at org.eclipse.scout.rt.test.ui.swt.SwtEnvironment.hideStandaloneForm(SwtEnvironment.java:111)
	at org.eclipse.scout.rt.ui.swt.AbstractSwtEnvironment$P_ScoutDesktopListener$2.run(AbstractSwtEnvironment.java:1305)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
	... 34 more

Reproducible: Always

Steps to Reproduce:
1. Create a form with a tabbox containing a stringfield and a htmlfield
2. Open the form as dialog
3. Set the focus on the stringfield
4. Press ESC
5. Notice that the gui freezes
Comment 1 Claudio Guglielmo CLA 2011-08-18 03:54:19 EDT
Created attachment 201698 [details]
Patch to resolve the bug.
Comment 2 Andreas Hoegger CLA 2011-08-24 05:34:15 EDT
Patch applied on trunk and Indigo SP1.
Comment 3 Matthias Zimmermann CLA 2011-10-11 02:32:34 EDT
shipped with 3.7.1
Comment 4 Matthias Zimmermann CLA 2011-10-11 11:35:20 EDT
removed iplog flag from ticket and added iplog flag to attachment