diff options
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java')
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java | 74 |
1 files changed, 55 insertions, 19 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java index 75ea6db8ca..02e039330c 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoryPropertySourceProvider.java @@ -14,11 +14,13 @@ package org.eclipse.egit.ui.internal.repository; import org.eclipse.core.runtime.Adapters; +import org.eclipse.egit.ui.Activator; +import org.eclipse.egit.ui.UIPreferences; import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode; import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNodeType; import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jgit.events.ConfigChangedEvent; -import org.eclipse.jgit.events.ConfigChangedListener; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jgit.events.ListenerHandle; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; @@ -40,12 +42,14 @@ public class RepositoryPropertySourceProvider implements private final PropertySheetPage myPage; + private final IPreferenceStore store; + private Object lastObject; private IPropertySource lastRepositorySource; private enum SourceType { - UNDEFINED, REPOSITORY, REMOTE, BRANCH + UNDEFINED, REPOSITORY, REMOTE, BRANCH, TAG } private SourceType lastSourceType = SourceType.UNDEFINED; @@ -54,12 +58,33 @@ public class RepositoryPropertySourceProvider implements private DisposeListener disposeListener; + private boolean listenToDateFormatChanges; + + private IPropertyChangeListener dateFormatListener = event -> { + if (!listenToDateFormatChanges) { + return; + } + String property = event.getProperty(); + if (property == null) { + return; + } + switch (property) { + case UIPreferences.DATE_FORMAT: + case UIPreferences.DATE_FORMAT_CHOICE: + refreshPage(); + break; + default: + break; + } + }; + /** * @param page * the page */ public RepositoryPropertySourceProvider(PropertySheetPage page) { myPage = page; + store = Activator.getDefault().getPreferenceStore(); } private void registerDisposal() { @@ -75,6 +100,9 @@ public class RepositoryPropertySourceProvider implements @Override public void widgetDisposed(DisposeEvent e) { removeListener(); + if (listenToDateFormatChanges) { + store.removePropertyChangeListener(dateFormatListener); + } } }; control.addDisposeListener(disposeListener); @@ -86,6 +114,12 @@ public class RepositoryPropertySourceProvider implements handle.remove(); } + private void refreshPage() { + lastObject = null; + myPage.getSite().getShell().getDisplay() + .asyncExec(() -> myPage.setPropertySourceProvider(this)); + } + @Override public IPropertySource getPropertySource(Object object) { @@ -109,20 +143,7 @@ public class RepositoryPropertySourceProvider implements RepositoryTreeNode node = (RepositoryTreeNode) object; listenerHandle = node.getRepository().getListenerList() - .addConfigChangedListener(new ConfigChangedListener() { - @Override - public void onConfigChanged(ConfigChangedEvent event) { - // force a refresh of the page - lastObject = null; - myPage.getSite().getShell().getDisplay().asyncExec(new Runnable() { - - @Override - public void run() { - myPage.setPropertySourceProvider(RepositoryPropertySourceProvider.this); - } - }); - } - }); + .addConfigChangedListener(event -> refreshPage()); if (node.getType() == RepositoryTreeNodeType.REPO) { lastObject = object; @@ -150,8 +171,14 @@ public class RepositoryPropertySourceProvider implements return lastRepositorySource; } return null; - } else - return null; + } else if (node.getType() == RepositoryTreeNodeType.TAG) { + lastObject = object; + checkChangeType(SourceType.TAG); + lastRepositorySource = new TagPropertySource(node.getRepository(), + (Ref) node.getObject()); + return lastRepositorySource; + } + return null; } private void checkChangeType(SourceType type) { @@ -172,6 +199,15 @@ public class RepositoryPropertySourceProvider implements // removed. bars.updateActionBars(); } + if (lastSourceType == SourceType.TAG) { + // Remove date format listener + store.removePropertyChangeListener(dateFormatListener); + listenToDateFormatChanges = false; + } else if (type == SourceType.TAG) { + // Add date format listener + listenToDateFormatChanges = true; + store.addPropertyChangeListener(dateFormatListener); + } } lastSourceType = type; } |