diff options
author | aradermache | 2013-06-07 12:26:08 +0000 |
---|---|---|
committer | aradermache | 2013-06-07 12:26:08 +0000 |
commit | f00f311c4e2995187092bcf8bce5bf552dc5ab74 (patch) | |
tree | fc241861bccb02c84b01b479fd8393d2e3f97d51 | |
parent | 9a664b0bf7fa243562236f6732ed0d9a88de335d (diff) | |
download | org.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.tar.gz org.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.tar.xz org.eclipse.papyrus-f00f311c4e2995187092bcf8bce5bf552dc5ab74.zip |
Bug 409381 - [Validation] Performance issues in the validation update
-rw-r--r-- | plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java index d6b03eecdc0..9098bab1502 100644 --- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java +++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/DecoratingLabelProviderWTooltips.java @@ -34,6 +34,7 @@ import org.eclipse.papyrus.infra.services.decoration.util.IPapyrusDecoration; import org.eclipse.papyrus.views.modelexplorer.core.ui.pagebookview.ModelExplorerDecorationAdapter;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.internal.navigator.NavigatorDecoratingLabelProvider;
/**
@@ -66,8 +67,31 @@ public class DecoratingLabelProviderWTooltips extends NavigatorDecoratingLabelPr public void update(Observable o, Object arg) {
if((decorationService != null) && (o == decorationService)) {
- fireLabelProviderChanged(new LabelProviderChangedEvent(this));
+
+ // fix for bug 409381 - [Validation] Performance issues. Make updates asynchronously so that
+ // most updates are ignored.
+ // TODO: check whether the decoration service should offer a service for listeners that want to
+ // be notified in this lazy way.
+ if (!asyncUpdateRunning) {
+ asyncUpdateRunning = true;
+
+ Display.getDefault().asyncExec(new Runnable () {
+ public void run() {
+ fireLabelProviderChanged(new LabelProviderChangedEvent(DecoratingLabelProviderWTooltips.this));
+ while (updatePending) {
+ updatePending = false;
+ fireLabelProviderChanged(new LabelProviderChangedEvent(DecoratingLabelProviderWTooltips.this));
+ }
+ asyncUpdateRunning = false;
+
+ }
+ });
+ }
+ else {
+ updatePending = true;
+ }
}
+
}
@Override
@@ -120,4 +144,9 @@ public class DecoratingLabelProviderWTooltips extends NavigatorDecoratingLabelPr public int getToolTipTimeDisplayed(Object object) {
return 10000;
}
+
+ protected boolean asyncUpdateRunning;
+
+ protected boolean updatePending;
+
}
|