diff options
author | Vsevolod Kukol <sevoku@microsoft.com> | 2019-04-09 19:35:43 +0300 |
---|---|---|
committer | xamarin-jenkins <jo.shields+jenkins@xamarin.com> | 2019-04-09 19:47:25 +0300 |
commit | 29a5415dc0765bb2cd600a3e99bb925e0fbecaa4 (patch) | |
tree | c6ec6a98671c19523552a6e7b277c5733e3ab9a7 | |
parent | 06350243e589622e1b6a30edbbcbb4420574745f (diff) |
[Ide] (Re)store Memento when hiding/showing the main IDE window
Fixes VSTS #827638
Fixes VSTS #835478 (when using close button)
-rw-r--r-- | main/src/addins/MacPlatform/MacPlatform.cs | 8 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs | 20 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/Ide.cs | 2 |
3 files changed, 22 insertions, 8 deletions
diff --git a/main/src/addins/MacPlatform/MacPlatform.cs b/main/src/addins/MacPlatform/MacPlatform.cs index 7dfdbb217f..97a8063b12 100644 --- a/main/src/addins/MacPlatform/MacPlatform.cs +++ b/main/src/addins/MacPlatform/MacPlatform.cs @@ -622,16 +622,14 @@ namespace MonoDevelop.MacIntegration ApplicationEvents.Reopen += delegate (object sender, ApplicationEventArgs e) { if (Ide.WelcomePage.WelcomePageService.HasWindowImplementation && !(IdeApp.Workbench.RootWindow?.Visible ?? false)) { if (IdeApp.Workbench.RootWindow != null) { - IdeApp.Workbench.RootWindow.Visible = false; + IdeApp.Workbench.Hide (); } Ide.WelcomePage.WelcomePageService.ShowWelcomeWindow (new Ide.WelcomePage.WelcomeWindowShowOptions (true)); e.Handled = true; } else if (IdeApp.Workbench != null && IdeApp.Workbench.RootWindow != null) { IdeApp.Workbench.RootWindow.Deiconify (); - IdeApp.Workbench.RootWindow.Visible = true; - - IdeApp.Workbench.RootWindow.Present (); + IdeApp.Workbench.Present (); e.Handled = true; } }; @@ -765,7 +763,7 @@ namespace MonoDevelop.MacIntegration { args.RetVal = true; if (await IdeApp.Workspace.Close ()) { - IdeApp.Workbench.RootWindow.Visible = false; + IdeApp.Workbench.Hide (); } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs index 71b5ef3f78..e6adc00629 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs @@ -125,13 +125,13 @@ namespace MonoDevelop.Ide.Gui } } - internal void Realize (string workbenchMemento) + internal void Realize () { Counters.Initialization.Trace ("Realizing Root Window"); RootWindow.Realize (); Counters.Initialization.Trace ("Loading memento"); - var memento = PropertyService.Get (workbenchMemento, new Properties ()); + var memento = IdeApp.Preferences.WorkbenchMemento.Value; Counters.Initialization.Trace ("Setting memento"); workbench.Memento = memento; @@ -155,6 +155,10 @@ namespace MonoDevelop.Ide.Gui LayoutChanged (this, EventArgs.Empty); hasEverBeenShown = true; + } else if (!RootWindow.Visible) { + // restore memento if the root window has been hidden before + var memento = IdeApp.Preferences.WorkbenchMemento.Value; + workbench.Memento = memento; } } @@ -163,6 +167,18 @@ namespace MonoDevelop.Ide.Gui if (!RootWindow.Visible) Show (); } + + internal void Hide () + { + if (RootWindow.Visible) { + IdeApp.Preferences.WorkbenchMemento.Value = (Properties)workbench.Memento; + // FIXME: On mac the window can not be hidden while in fullscreen, we should unllscreen first and then hide + if (Platform.IsMac && DesktopService.GetIsFullscreen (RootWindow)) { + return; + } + RootWindow.Hide (); + } + } internal async Task<bool> Close () { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/Ide.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/Ide.cs index 72127a6068..90452e195c 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/Ide.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/Ide.cs @@ -257,7 +257,7 @@ namespace MonoDevelop.Ide monitor.Step (1); Counters.Initialization.Trace ("Realizing Workbench Window"); - workbench.Realize ("SharpDevelop.Workbench.WorkbenchMemento"); + workbench.Realize (); monitor.Step (1); MessageService.RootWindow = workbench.RootWindow; |