Bug 67948 [Team API] File content type is not changed in Explorer view until Eclipse restarted
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSLightweightDecorator.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSLightweightDecorator.java
index 43d4209..5bed95c 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSLightweightDecorator.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSLightweightDecorator.java
@@ -583,11 +583,15 @@
 	 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
 	 */
 	public void propertyChange(PropertyChangeEvent event) {
-		String prop = event.getProperty();
-		if(prop.equals(TeamUI.GLOBAL_IGNORES_CHANGED)) {
-			refresh();
-		} else if(prop.equals(CVSUIPlugin.P_DECORATORS_CHANGED)) {
-			refresh();
-		}		
+		if (isEventOfInterest(event)) {
+		    refresh();
+		}	
 	}
+
+    private boolean isEventOfInterest(PropertyChangeEvent event) {
+        String prop = event.getProperty();
+        return prop.equals(TeamUI.GLOBAL_IGNORES_CHANGED) 
+        	|| prop.equals(TeamUI.GLOBAL_FILE_TYPES_CHANGED) 
+        	|| prop.equals(CVSUIPlugin.P_DECORATORS_CHANGED);
+    }
 }
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantLabelDecorator.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantLabelDecorator.java
index 8b4abcf..5f66ae1 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantLabelDecorator.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSParticipantLabelDecorator.java
@@ -22,6 +22,7 @@
 import org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator;
 import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
 import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
+import org.eclipse.team.ui.TeamUI;
 import org.eclipse.team.ui.synchronize.ISynchronizeModelElement;
 import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
 
@@ -32,6 +33,7 @@
 		this.configuration = configuration;
 		// Listen for decorator changed to refresh the viewer's labels.
 		CVSUIPlugin.addPropertyChangeListener(this);
+		TeamUI.addPropertyChangeListener(this);
 	}
 	
 	public String decorateText(String input, Object element) {
@@ -59,7 +61,7 @@
 	}
 	public void propertyChange(PropertyChangeEvent event) {
 		String property = event.getProperty();
-		if(property.equals(CVSUIPlugin.P_DECORATORS_CHANGED)) {
+		if(property.equals(CVSUIPlugin.P_DECORATORS_CHANGED) || property.equals(TeamUI.GLOBAL_FILE_TYPES_CHANGED)) {
 			Viewer viewer = configuration.getPage().getViewer();
 			if(viewer instanceof StructuredViewer && !viewer.getControl().isDisposed()) {
 				((StructuredViewer)viewer).refresh(true);
@@ -68,6 +70,7 @@
 	}
 	public void dispose() {
 		CVSUIPlugin.removePropertyChangeListener(this);
+		TeamUI.removePropertyChangeListener(this);
 	}
 	
 	protected String getRevisionNumber(ISynchronizeModelElement element) {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/TextPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/TextPreferencePage.java
index 142579c..0cd7d27 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/TextPreferencePage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/TextPreferencePage.java
@@ -17,6 +17,7 @@
 import org.eclipse.jface.dialogs.*;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.TableEditor;
@@ -26,8 +27,10 @@
 import org.eclipse.swt.widgets.*;
 import org.eclipse.team.core.IFileTypeInfo;
 import org.eclipse.team.core.Team;
+import org.eclipse.team.internal.ui.*;
 import org.eclipse.team.internal.ui.IHelpContextIds;
 import org.eclipse.team.internal.ui.Policy;
+import org.eclipse.team.ui.TeamUI;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.help.WorkbenchHelp;
@@ -286,6 +289,7 @@
 			i++;
 		}
 		Team.setAllTypes(extensions, types);
+		TeamUIPlugin.broadcastPropertyChange(new PropertyChangeEvent(this, TeamUI.GLOBAL_FILE_TYPES_CHANGED, null, null));
 		return true;
 	}
 	/**
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
index 9ba7a3d..b391651 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamUI.java
@@ -27,6 +27,8 @@
 	 * Property constant indicating the global ignores list has changed. 
 	 */
 	public static String GLOBAL_IGNORES_CHANGED = TeamUIPlugin.ID + "global_ignores_changed"; //$NON-NLS-1$
+	
+	public static String GLOBAL_FILE_TYPES_CHANGED = TeamUIPlugin.ID + "global_file_types_changed"; //$NON-NLS-1$
 
 	/**
 	 * Return the synchronize manager.