Skip to content

Commit 5179e72

Browse files
Maximilian Wittmeriloveeclipse
Maximilian Wittmer
authored andcommitted
find/replace overlay: clean up PreferenceChangeListener
The PreferenceChangeListener now starts listening when an Overlay was created and stops listening once the Overlay is disposed of. Fixes a previous resource leak. fixes jdt#1444
1 parent 577fcac commit 5179e72

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/FindReplaceAction.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,6 @@ public FindReplaceAction(ResourceBundle bundle, String prefix, IWorkbenchPart wo
302302
Assert.isLegal(workbenchPart != null);
303303
fWorkbenchPart= workbenchPart;
304304
update();
305-
306-
hookDialogPreferenceListener();
307305
}
308306

309307
/**
@@ -331,8 +329,6 @@ public FindReplaceAction(ResourceBundle bundle, String prefix, Shell shell, IFin
331329
fTarget= target;
332330
fShell= shell;
333331
update();
334-
335-
hookDialogPreferenceListener();
336332
}
337333

338334
/**
@@ -354,15 +350,18 @@ public FindReplaceAction(ResourceBundle bundle, String prefix, IWorkbenchWindow
354350
super(bundle, prefix);
355351
fWorkbenchWindow= workbenchWindow;
356352
update();
357-
358-
hookDialogPreferenceListener();
359353
}
360354

361355
private void hookDialogPreferenceListener() {
362356
IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(INSTANCE_SCOPE_NODE_NAME);
363357
preferences.addPreferenceChangeListener(overlayDialogPreferenceListener);
364358
}
365359

360+
private void removeDialogPreferenceListener() {
361+
IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode(INSTANCE_SCOPE_NODE_NAME);
362+
preferences.removePreferenceChangeListener(overlayDialogPreferenceListener);
363+
}
364+
366365
@Override
367366
public void run() {
368367
if (fTarget == null) {
@@ -420,12 +419,14 @@ private void showOverlayInEditor() {
420419
shellToUse = fShell;
421420
}
422421
overlay = new FindReplaceOverlay(shellToUse, fWorkbenchPart, fTarget);
422+
hookDialogPreferenceListener();
423423

424424
FindReplaceOverlayFirstTimePopup.displayPopupIfNotAlreadyShown(shellToUse);
425425
}
426426

427427
overlay.setPositionToTop(shouldPositionOverlayOnTop());
428428
overlay.open();
429+
overlay.getShell().addDisposeListener(__ -> removeDialogPreferenceListener());
429430
}
430431

431432
@Override

0 commit comments

Comments
 (0)