| Summary: | Databinding: observeDelayed does not work as expected | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [RT] RAP | Reporter: | Elias Volanakis <elias> | ||||
| Component: | JFace | Assignee: | Project Inbox <rap-inbox> | ||||
| Status: | RESOLVED FIXED | QA Contact: | |||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | cbateman, lothar | ||||
| Version: | unspecified | ||||||
| Target Milestone: | 1.5 M4 | ||||||
| Hardware: | All | ||||||
| OS: | All | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
|
Description
Elias Volanakis
Created attachment 186261 [details]
Application to reproduce issue
Fixed in CVS HEAD by activating the UICallBack in SWTDelayedObservableValueDecorator ctor and deactivating it in SWTDelayedObservableValueDecorator#dispose(). The current solution seems to keeps a UICallBack open until the widget is being disposed. In many cases this will result in a UICallBack running for the entire lifetime of the application. I think this solution is less than optimal. We once had the idea to add the UICallback in Display#timerExec(), which would also help in other cases. By wrapping the timerExec runnable, we could disable the UICallBack immediately after executing the wrapped runnable. Keeping the UICallback around (that's what we do as a workaround) seems also to negatively impact the clean shutdown of the RAP app when the sesion expires. We have a getDisplay().disposeExec() resgistered, that get's called if we don't use the UICallback and it does not get called when we use the UICallback workaround. I'm sorry, but it's too late for 1.4, we have to carry this issue along to 1.5. The UICallBack activation/deactivation is no longer needed in SWTDelayedObservableValueDecorator as it is done by Display#timeExec (see bug 364863). |