diff options
author | Vsevolod Kukol <sevoku@microsoft.com> | 2017-03-24 20:15:44 +0300 |
---|---|---|
committer | Vsevolod Kukol <sevoku@microsoft.com> | 2017-03-24 21:30:01 +0300 |
commit | 9c6565cdbeb792b791748b42645ae1f47e467c73 (patch) | |
tree | 9bd08dd99cee04d743a6c13f96cf42dbdae6f56a /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar | |
parent | 7462d5bb8f640001bf0b9f8574ed7502b6039405 (diff) | |
parent | 4c5318b71fdaff36827e7ab0c9c33900149d5b2a (diff) |
Merge remote-tracking branch 'origin/master' into native-popups
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar')
2 files changed, 39 insertions, 22 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs index 456d8525f5..5507692708 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs @@ -425,8 +425,8 @@ namespace MonoDevelop.Components.MainToolbar foreach (var item in confs) { string config = item.OriginalId; if (config == name) { - IdeApp.Workspace.ActiveConfigurationId = config; ToolbarView.ActiveConfiguration = item; + UpdateBuildConfiguration (); selected = true; break; } @@ -434,7 +434,7 @@ namespace MonoDevelop.Components.MainToolbar if (!selected) { ToolbarView.ActiveConfiguration = ToolbarView.ConfigurationModel.First (); - IdeApp.Workspace.ActiveConfigurationId = defaultConfig; + UpdateBuildConfiguration (); } } } finally { @@ -547,16 +547,16 @@ namespace MonoDevelop.Components.MainToolbar { if (currentSolution != null) { currentSolution.StartupConfigurationChanged -= HandleStartupItemChanged; - currentSolution.Saved -= HandleUpdateCombosWidthDelay; - currentSolution.EntrySaved -= HandleUpdateCombosWidthDelay; + currentSolution.Saved -= HandleSolutionSaved; + currentSolution.EntrySaved -= HandleSolutionEntrySaved; } currentSolution = e.Solution; if (currentSolution != null) { currentSolution.StartupConfigurationChanged += HandleStartupItemChanged; - currentSolution.Saved += HandleUpdateCombosWidthDelay; - currentSolution.EntrySaved += HandleUpdateCombosWidthDelay; + currentSolution.Saved += HandleSolutionSaved; + currentSolution.EntrySaved += HandleSolutionEntrySaved; } TrackStartupProject (); @@ -589,17 +589,16 @@ namespace MonoDevelop.Components.MainToolbar } } - bool updatingCombos; - void HandleUpdateCombosWidthDelay (object sender, EventArgs e) + void HandleSolutionSaved (object sender, EventArgs e) { - if (!updatingCombos) { - updatingCombos = true; - GLib.Timeout.Add (100, () => { - updatingCombos = false; - UpdateCombos (); - return false; - }); - } + UpdateCombos (); + } + + void HandleSolutionEntrySaved (object sender, SolutionItemSavedEventArgs e) + { + // Skip the per-project update when a solution is being saved. The solution Saved callback will do the final update. + if (!e.SavingSolution) + HandleSolutionSaved (sender, e); } void HandleStartupItemChanged (object sender, EventArgs e) @@ -832,6 +831,7 @@ namespace MonoDevelop.Components.MainToolbar class ButtonBarButton : IButtonBarButton { + CommandInfo lastCmdInfo; MainToolbarController Controller { get; set; } string CommandId { get; set; } @@ -855,7 +855,7 @@ namespace MonoDevelop.Components.MainToolbar public void NotifyPushed () { - IdeApp.CommandService.DispatchCommand (CommandId, null, Controller.lastCommandTarget, CommandSource.MainToolbar); + IdeApp.CommandService.DispatchCommand (CommandId, null, Controller.lastCommandTarget, CommandSource.MainToolbar, lastCmdInfo); } public void Update () @@ -863,10 +863,21 @@ namespace MonoDevelop.Components.MainToolbar if (IsSeparator) return; - var ci = IdeApp.CommandService.GetCommandInfo (CommandId, new CommandTargetRoute (Controller.lastCommandTarget)); - if (ci == null) - return; + if (lastCmdInfo != null) { + lastCmdInfo.CancelAsyncUpdate (); + lastCmdInfo.Changed -= LastCmdInfoChanged; + } + + lastCmdInfo = IdeApp.CommandService.GetCommandInfo (CommandId, new CommandTargetRoute (Controller.lastCommandTarget)); + + if (lastCmdInfo != null) { + lastCmdInfo.Changed += LastCmdInfoChanged; + Update (lastCmdInfo); + } + } + void Update (CommandInfo ci) + { if (ci.Icon != Image) { Image = ci.Icon; if (ImageChanged != null) @@ -889,6 +900,11 @@ namespace MonoDevelop.Components.MainToolbar } } + void LastCmdInfoChanged (object sender, EventArgs e) + { + Update (lastCmdInfo); + } + public event EventHandler EnabledChanged; public event EventHandler ImageChanged; public event EventHandler VisibleChanged; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs index 0cb55e0c0d..1e5ea75dcf 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs @@ -34,6 +34,7 @@ using MonoDevelop.Ide.Gui; using MonoDevelop.Core.Text; using MonoDevelop.Ide.TypeSystem; using MonoDevelop.Ide.CodeCompletion;
+using Roslyn.Utilities; using MonoDevelop.Ide; namespace MonoDevelop.Components.MainToolbar @@ -48,7 +49,7 @@ namespace MonoDevelop.Components.MainToolbar { if (IdeApp.ProjectOperations.CurrentSelectedSolution != null) searchResultCallback.ReportResult (new SearchInSolutionSearchResult (pattern)); - return SpecializedTasks.EmptyTask; + return Task.CompletedTask; } //public override Task<ISearchDataSource> GetResults (SearchPopupSearchPattern searchPattern, int resultsCount, CancellationToken token) @@ -99,4 +100,4 @@ namespace MonoDevelop.Components.MainToolbar } } } -}
\ No newline at end of file +} |