From 591b2da171452f29bf2e379a2eb03142cf0a535a Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Sat, 4 Feb 2017 14:15:50 +0100 Subject: [PATCH] Remove the default handler for the checkout command in CommitEditor Provide a dedicated handler with an appropriate activeWhen clause instead. Somehow handler activation expressions are not properly re-evaluated for these CommitEditor commands; seems to have something to do with them being used in the header of a SharedHeaderFormEditor. Add a PartListener to the CommitEditor that forces an update of the toolbar on activations. Bug: 495064 Bug: 511635 Change-Id: I8086b4ec328fb6b4eaa63a6f3b68ca0b075c5866 Signed-off-by: Thomas Wolf --- org.eclipse.egit.ui/plugin.xml | 12 ++++- .../egit/ui/internal/commit/CommitEditor.java | 63 +++++++++++++++++++++- 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/org.eclipse.egit.ui/plugin.xml b/org.eclipse.egit.ui/plugin.xml index fbab05a62..076eb5b50 100644 --- a/org.eclipse.egit.ui/plugin.xml +++ b/org.eclipse.egit.ui/plugin.xml @@ -2410,6 +2410,17 @@ + + + + + + + + + @@ -5966,7 +5977,6 @@ name="%CreateBranchCommand"> diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java index 7cc1117ac..230b668e3 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/commit/CommitEditor.java @@ -32,6 +32,7 @@ import org.eclipse.egit.ui.internal.commit.command.StashDropHandler; import org.eclipse.egit.ui.internal.repository.RepositoriesView; import org.eclipse.jface.action.ContributionManager; import org.eclipse.jface.action.ControlContribution; +import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.JFaceResources; @@ -54,6 +55,9 @@ import org.eclipse.ui.IEditorActionBarContributor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IPartListener; +import org.eclipse.ui.IPartService; +import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.IFormColors; @@ -156,6 +160,48 @@ public class CommitEditor extends SharedHeaderFormEditor implements private FocusTracker headerFocusTracker = new FocusTracker(); + private IToolBarManager toolbar; + + /** Ensures that the toolbar buttons in the header are properly updated. */ + private IPartListener activationListener = new IPartListener() { + + private boolean isActive; + + @Override + public void partActivated(IWorkbenchPart part) { + if (part == CommitEditor.this) { + if (!isActive) { + isActive = true; + updateToolbar(); + } + } else if (isActive) { + isActive = false; + updateToolbar(); + } + } + + @Override + public void partBroughtToTop(IWorkbenchPart part) { + // Nothing to do + } + + @Override + public void partClosed(IWorkbenchPart part) { + // Nothing to do + } + + @Override + public void partDeactivated(IWorkbenchPart part) { + // Nothing to do + } + + @Override + public void partOpened(IWorkbenchPart part) { + // Nothing to do + } + + }; + private static class CommitEditorNestedSite extends MultiPageEditorSite { public CommitEditorNestedSite(CommitEditor topLevelEditor, @@ -238,7 +284,7 @@ public class CommitEditor extends SharedHeaderFormEditor implements form.setToolTipText(commitName); getToolkit().decorateFormHeading(form.getForm()); - IToolBarManager toolbar = form.getToolBarManager(); + toolbar = form.getToolBarManager(); ControlContribution repositoryLabelControl = new ControlContribution( "repositoryLabel") { //$NON-NLS-1$ @@ -287,6 +333,8 @@ public class CommitEditor extends SharedHeaderFormEditor implements } }; toolbar.add(repositoryLabelControl); + CommonUtils.getService(getSite(), IPartService.class) + .addPartListener(activationListener); if (commit.isStash()) { toolbar.add(createCommandContributionItem(StashApplyHandler.ID)); toolbar.add(createCommandContributionItem(StashDropHandler.ID)); @@ -332,6 +380,17 @@ public class CommitEditor extends SharedHeaderFormEditor implements } } + private void updateToolbar() { + if (toolbar != null) { + // isEnabled() on a CommandContributionItem actually re-evaluates + // the enablement. + for (IContributionItem item : toolbar.getItems()) { + item.isEnabled(); + } + toolbar.update(true); + } + } + private String getFormattedHeaderTitle(String commitName) { if (getCommit().isStash()) { int stashIndex = getStashIndex(getCommit().getRepository(), @@ -411,6 +470,8 @@ public class CommitEditor extends SharedHeaderFormEditor implements @Override public void dispose() { + CommonUtils.getService(getSite(), IPartService.class) + .removePartListener(activationListener); refListenerHandle.remove(); headerFocusTracker.dispose(); super.dispose(); -- 2.11.4.GIT