1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-03 14:25:37 +02:00

[240991] Avoid adding change listener when Workbench is already closing

This commit is contained in:
Martin Oberhuber 2008-07-24 12:53:22 +00:00
parent 5a9c8dc1f4
commit 0e39dbbba8
2 changed files with 46 additions and 37 deletions

View file

@ -947,12 +947,12 @@ public class SystemRegistry implements ISystemRegistry
if (firstObject == null || secondObject == null){
return false;
}
// two different message objects should not be considered the same
if (firstObject instanceof SystemMessageObject){
return false;
}
ISystemDragDropAdapter adA = null;
ISystemDragDropAdapter adB = null;
if (firstObjectFullName == null) {
@ -1617,12 +1617,16 @@ public class SystemRegistry implements ISystemRegistry
throw lastException;
}
IHost host = op.getHost();
ISubSystem[] subsystems = op.getSubSystems();
FireNewHostEvents fire = new FireNewHostEvents(host, subsystems, sr);
if (modelListenerManager.hasListeners())
if (modelListenerManager.hasListeners()) {
ISubSystem[] subsystems = op.getSubSystems();
FireNewHostEvents fire = new FireNewHostEvents(host, subsystems, sr);
// FIXME bug 240991: With the current workaround, we might miss events
// in SystemPreferencesManager. Instead of Display.getDefault(),
// we should use the IRSEInteractionProvider here.
Display.getDefault().asyncExec(fire);
////Listening to FireNewHostEvents now
}
// //SystemPreferencesManager listens itself to FireNewHostEvents now
//SystemPreferencesManager.setConnectionNamesOrder(); // update preferences order list
return host;
}

View file

@ -1,17 +1,17 @@
/********************************************************************************
* Copyright (c) 2000, 2008 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* component that contains this file: David McKnight, Kushal Munir,
* Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
*
* Contributors:
* David Dykstal (IBM) - moved SystemPreferencesManager to a this package, was in
* David Dykstal (IBM) - moved SystemPreferencesManager to a this package, was in
* the org.eclipse.rse.core package of the UI plugin.
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core
@ -33,7 +33,6 @@ import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.events.ISystemModelChangeEvent;
import org.eclipse.rse.core.events.ISystemModelChangeEvents;
import org.eclipse.rse.core.events.ISystemModelChangeListener;
import org.eclipse.rse.core.events.ISystemRemoteChangeEvents;
import org.eclipse.rse.core.events.ISystemResourceChangeEvent;
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
import org.eclipse.rse.core.events.ISystemResourceChangeListener;
@ -56,9 +55,9 @@ import org.eclipse.ui.IWorkbench;
* This class should not be subclassed.
*/
public class SystemPreferencesManager {
/*
* The following are preferences that may be set from the
* The following are preferences that may be set from the
* system properties.
*/
private static boolean showLocalConnection;
@ -71,9 +70,9 @@ public class SystemPreferencesManager {
private static SystemPreferencesManager fInstance = new SystemPreferencesManager();
private int fModelChangeListeners = 0;
private ISystemModelChangeListener fModelChangeListener = null;
/*
* Private Constructor to discourage instance creation other than by ourselves.
* Private Constructor to discourage instance creation other than by ourselves.
*/
private SystemPreferencesManager() {
}
@ -83,8 +82,8 @@ public class SystemPreferencesManager {
*/
private static void migrateCorePreferences() {
String[] keys = {
IRSEPreferenceNames.ACTIVEUSERPROFILES,
IRSEPreferenceNames.USE_DEFERRED_QUERIES,
IRSEPreferenceNames.ACTIVEUSERPROFILES,
IRSEPreferenceNames.USE_DEFERRED_QUERIES,
IRSEPreferenceNames.USERIDPERKEY
};
for (int i = 0; i < keys.length; i++) {
@ -116,7 +115,7 @@ public class SystemPreferencesManager {
}
private static void initDefaultsUI() {
//String showProp = System.getProperty("rse.showNewConnectionPrompt");
RSEUIPlugin ui = RSEUIPlugin.getDefault();
Preferences store = ui.getPluginPreferences();
@ -136,7 +135,7 @@ public class SystemPreferencesManager {
store.setDefault(ISystemPreferencesConstants.SHOW_EMPTY_LISTS, ISystemPreferencesConstants.DEFAULT_SHOW_EMPTY_LISTS);
savePreferences();
}
private static boolean getBooleanProperty(String propertyName, boolean defaultValue) {
String property = System.getProperty(propertyName);
boolean value = (property == null) ? defaultValue : property.equals(Boolean.toString(true));
@ -220,10 +219,10 @@ public class SystemPreferencesManager {
}
/**
* Sets user's preference for the order of the connection names according to the
* Sets user's preference for the order of the connection names according to the
* list kept in the system registry.
* This resets any user-specified ordering of profiles since the SystemRegistry
* has no concept of ordered profiles. The hosts inside a profile, though,
* has no concept of ordered profiles. The hosts inside a profile, though,
* will be ordered according to user preference.
*/
public static void setConnectionNamesOrder() {
@ -341,7 +340,7 @@ public class SystemPreferencesManager {
}
/**
* Set if the user has elected to restore the state of the
* Set if the user has elected to restore the state of the
* Remote Systems View from cached information
* @param restore whether or not to restore the state of RSE from cached information.
*/
@ -418,8 +417,8 @@ public class SystemPreferencesManager {
public static String[] getWidgetHistory(String key) {
Preferences store = RSEUIPlugin.getDefault().getPluginPreferences();
String result = store.getString(key);
// bug 237300
// bug 237300
// don't parse strings if we have ""
if (result == null || result.length() == 0){
return null;
@ -460,7 +459,7 @@ public class SystemPreferencesManager {
}
/**
* Parse out list of multiple values into a string array per value.
* Parse out list of multiple values into a string array per value.
* This is the inverse of the {@link #makeString(String[])} operation.
* @param allvalues the string holding the condensed value
* @return the reconstituted array of strings.
@ -478,7 +477,7 @@ public class SystemPreferencesManager {
RSEUIPlugin.getDefault().savePluginPreferences();
RSECorePlugin.getDefault().savePluginPreferences();
}
/*
* Start listening to SystemRegistry model change events
*/
@ -491,17 +490,23 @@ public class SystemPreferencesManager {
}
if (!alreadyListening) {
// FIXME bug 240991: With the current workaround, we might miss events
// Instead of adding the listener deferred in a job, the SystemRegistry
// should send events via the IRSEInteractionProvider
Job addListenerJob = new Job("Add Listener"){ //$NON-NLS-1$
public IStatus run(IProgressMonitor monitor){
public IStatus run(IProgressMonitor monitor){
IWorkbench wb = RSEUIPlugin.getDefault().getWorkbench();
while (wb.getDisplay() == null) {
while (wb.getDisplay() == null && !wb.isClosing()) {
try {
Thread.sleep(1000);
//Checks in the loop are fast enough so we can poll often
Thread.sleep(100);
}
catch (InterruptedException e){}
}
fModelChangeListener = new ModelChangeListener();
RSECorePlugin.getTheSystemRegistry().addSystemModelChangeListener(fModelChangeListener);
if (!wb.isClosing()) {
fModelChangeListener = new ModelChangeListener();
RSECorePlugin.getTheSystemRegistry().addSystemModelChangeListener(fModelChangeListener);
}
return Status.OK_STATUS;
}
};
@ -509,7 +514,7 @@ public class SystemPreferencesManager {
addListenerJob.schedule();
}
}
/*
* A listener for SystemRegistry Model Change events
*/
@ -550,7 +555,7 @@ public class SystemPreferencesManager {
SystemPreferencesManager.setConnectionNamesOrder();
}
}
}
}