From 60255bc58dbd8e37c5e7b76fbbd37a75dd1c27bf Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Wed, 2 Jul 2014 08:54:28 -0400 Subject: [PATCH] Bug 438367 - Expressions shown in advanced hover are re-evaluated on every debug event Change-Id: Id281d505ee770ba492ad51a8322a4150aee60401 Signed-off-by: Marc Khouzam Reviewed-on: https://git.eclipse.org/r/29104 Reviewed-by: Anton Leherbauer --- .../ui/ExpressionInformationControlCreator.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/ExpressionInformationControlCreator.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/ExpressionInformationControlCreator.java index 2f2e017a3ed..0578c1f7c43 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/ExpressionInformationControlCreator.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/ExpressionInformationControlCreator.java @@ -125,6 +125,7 @@ public class ExpressionInformationControlCreator implements IInformationControlC private Composite fDetailPaneComposite; private DetailPaneProxy fDetailPane; private Tree fTree; + private IViewerUpdateListener fViewerUpdateListener; private ViewerInputService fInputService; @@ -311,7 +312,15 @@ public class ExpressionInformationControlCreator implements IInformationControlC @Override public void setVisible(boolean visible) { - if (!visible) { + if (!visible) { + if (fViewer != null && fViewerUpdateListener != null) { + // Remove update listener to avoid refreshing variables that were + // previously shown in a hover at every step + // Bug 438367 + fViewer.removeViewerUpdateListener(fViewerUpdateListener); + fViewerUpdateListener = null; + } + persistSettings(getShell()); } super.setVisible(visible); @@ -381,7 +390,7 @@ public class ExpressionInformationControlCreator implements IInformationControlC initSashWeights(); // add update listener to auto-select and display details of root expression - fViewer.addViewerUpdateListener(new IViewerUpdateListener() { + fViewerUpdateListener = new IViewerUpdateListener() { @Override public void viewerUpdatesComplete() { fViewer.getDisplay().timerExec(100, new Runnable() { @@ -409,7 +418,9 @@ public class ExpressionInformationControlCreator implements IInformationControlC @Override public void updateComplete(IViewerUpdate update) { } - }); + }; + + fViewer.addViewerUpdateListener(fViewerUpdateListener); setForegroundColor(getShell().getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); setBackgroundColor(getShell().getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));