diff --git a/mRemoteNGTests/Connection/Protocol/IntegratedProgramTests.cs b/mRemoteNGTests/Connection/Protocol/IntegratedProgramTests.cs index 362bf6c6..8088038b 100644 --- a/mRemoteNGTests/Connection/Protocol/IntegratedProgramTests.cs +++ b/mRemoteNGTests/Connection/Protocol/IntegratedProgramTests.cs @@ -63,6 +63,7 @@ namespace mRemoteNGTests.Connection.Protocol private InterfaceControl BuildInterfaceControl(string extAppName, ProtocolBase sut) { + var frmMain = new FrmMain(); var import = new Import(); var connectionsService = new ConnectionsService(PuttySessionsManager.Instance, import); var configWindow = new ConfigWindow(new DockContent()); @@ -75,10 +76,10 @@ namespace mRemoteNGTests.Connection.Protocol connectionTreeWindow.ConnectionTreeContextMenu = connectionTreeContextMenu; var errorAndInfoWindow = new ErrorAndInfoWindow(new DockContent(), connectionTreeWindow); var screenshotManagerWindow = new ScreenshotManagerWindow(new DockContent()); - var shutdown = new Shutdown(new SettingsSaver(new ExternalToolsService()), new ConnectionsService(PuttySessionsManager.Instance, import), FrmMain.Default); + var shutdown = new Shutdown(new SettingsSaver(new ExternalToolsService()), new ConnectionsService(PuttySessionsManager.Instance, import), frmMain); var appUpdater = new AppUpdater(encryptionKeySelectionFunc); Func updateWindowBuilder = () => new UpdateWindow(new DockContent(), shutdown, appUpdater); - Func notificationAreaIconBuilder = () => new NotificationAreaIcon(FrmMain.Default, _connectionInitiator, shutdown); + Func notificationAreaIconBuilder = () => new NotificationAreaIcon(frmMain, _connectionInitiator, shutdown); Func externalToolsWindowBuilder = () => new ExternalToolsWindow(_connectionInitiator, _externalToolsService, () => connectionTree.SelectedNode); Func portScanWindowBuilder = () => new PortScanWindow(() => connectionTreeWindow.SelectedNode, import); Func activeDirectoryImportWindowBuilder = () => new ActiveDirectoryImportWindow(() => connectionTreeWindow.SelectedNode, import); @@ -86,7 +87,7 @@ namespace mRemoteNGTests.Connection.Protocol var windows = new Windows(_connectionInitiator, connectionTreeWindow, configWindow, errorAndInfoWindow, screenshotManagerWindow, sshTransferWindow, updateWindowBuilder, notificationAreaIconBuilder, externalToolsWindowBuilder, connectionsService, portScanWindowBuilder, activeDirectoryImportWindowBuilder, appUpdater, databaseConnectorFactory); - var connectionWindow = new ConnectionWindow(new DockContent(), _connectionInitiator, windows, _externalToolsService); + var connectionWindow = new ConnectionWindow(new DockContent(), _connectionInitiator, windows, _externalToolsService, frmMain); var connectionInfo = new ConnectionInfo {ExtApp = extAppName}; return new InterfaceControl(connectionWindow, sut, connectionInfo); } diff --git a/mRemoteNGTests/UI/Forms/FrmMainTests.cs b/mRemoteNGTests/UI/Forms/FrmMainTests.cs index d3d1988f..02d5576f 100644 --- a/mRemoteNGTests/UI/Forms/FrmMainTests.cs +++ b/mRemoteNGTests/UI/Forms/FrmMainTests.cs @@ -10,7 +10,7 @@ namespace mRemoteNGTests.UI.Forms [Apartment(ApartmentState.STA)] public void CanCreateFrmMain() { - var frmMain = FrmMain.Default; + var frmMain = new FrmMain(); } } } diff --git a/mRemoteNGTests/UI/Forms/OptionsFormSetupAndTeardown.cs b/mRemoteNGTests/UI/Forms/OptionsFormSetupAndTeardown.cs index d84d1b74..4b9be1ed 100644 --- a/mRemoteNGTests/UI/Forms/OptionsFormSetupAndTeardown.cs +++ b/mRemoteNGTests/UI/Forms/OptionsFormSetupAndTeardown.cs @@ -25,15 +25,16 @@ namespace mRemoteNGTests.UI.Forms [SetUp] public void Setup() { + var frmMain = new FrmMain(); var connectionInitiator = Substitute.For(); var import = new Import(); - var shutdown = new Shutdown(new SettingsSaver(new ExternalToolsService()), new ConnectionsService(PuttySessionsManager.Instance, import), FrmMain.Default); - Func notificationIconBuilder = () => new NotificationAreaIcon(FrmMain.Default, connectionInitiator, shutdown); + var shutdown = new Shutdown(new SettingsSaver(new ExternalToolsService()), new ConnectionsService(PuttySessionsManager.Instance, import), frmMain); + Func notificationIconBuilder = () => new NotificationAreaIcon(frmMain, connectionInitiator, shutdown); var connectionsService = new ConnectionsService(PuttySessionsManager.Instance, import); Func encryptionKeySelectionFunc = () => connectionsService.EncryptionKey; var databaseConnectorFactory = new DatabaseConnectorFactory(encryptionKeySelectionFunc); var appUpdater = new AppUpdater(encryptionKeySelectionFunc); - _optionsForm = new frmOptions(connectionInitiator, type => {}, notificationIconBuilder, connectionsService, appUpdater, databaseConnectorFactory, FrmMain.Default); + _optionsForm = new frmOptions(connectionInitiator, type => {}, notificationIconBuilder, connectionsService, appUpdater, databaseConnectorFactory, frmMain); _optionsForm.Show(); } diff --git a/mRemoteV1/Config/Settings/DockPanelLayoutSaver.cs b/mRemoteV1/Config/Settings/DockPanelLayoutSaver.cs index 9779a7bd..104b8a18 100644 --- a/mRemoteV1/Config/Settings/DockPanelLayoutSaver.cs +++ b/mRemoteV1/Config/Settings/DockPanelLayoutSaver.cs @@ -25,7 +25,7 @@ namespace mRemoteNG.Config.Settings _dataProvider = dataProvider; } - public void Save() + public void Save(DockPanel dockPanel) { try { @@ -34,7 +34,7 @@ namespace mRemoteNG.Config.Settings Directory.CreateDirectory(SettingsFileInfo.SettingsPath); } - var serializedLayout = _dockPanelSerializer.Serialize(FrmMain.Default.pnlDock); + var serializedLayout = _dockPanelSerializer.Serialize(dockPanel); _dataProvider.Save(serializedLayout); } catch (Exception ex) diff --git a/mRemoteV1/Config/Settings/SettingsSaver.cs b/mRemoteV1/Config/Settings/SettingsSaver.cs index f9a50ca7..b96d6398 100644 --- a/mRemoteV1/Config/Settings/SettingsSaver.cs +++ b/mRemoteV1/Config/Settings/SettingsSaver.cs @@ -6,6 +6,7 @@ using mRemoteNG.Config.DataProviders; using mRemoteNG.Tools; using mRemoteNG.UI.Controls; using mRemoteNG.UI.Forms; +using WeifenLuo.WinFormsUI.Docking; namespace mRemoteNG.Config.Settings { @@ -60,7 +61,7 @@ namespace mRemoteNG.Config.Settings mRemoteNG.Settings.Default.Save(); - SaveDockPanelLayout(); + SaveDockPanelLayout(frmMain.pnlDock); SaveExternalApps(); } catch (Exception ex) @@ -103,14 +104,14 @@ namespace mRemoteNG.Config.Settings } } - private void SaveDockPanelLayout() + private void SaveDockPanelLayout(DockPanel dockPanel) { var panelLayoutXmlFilePath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName; var panelLayoutSaver = new DockPanelLayoutSaver( new DockPanelLayoutSerializer(), new FileDataProvider(panelLayoutXmlFilePath) ); - panelLayoutSaver.Save(); + panelLayoutSaver.Save(dockPanel); } private void SaveExternalApps() diff --git a/mRemoteV1/UI/Forms/frmMain.cs b/mRemoteV1/UI/Forms/frmMain.cs index 51d65ebc..3708cb11 100644 --- a/mRemoteV1/UI/Forms/frmMain.cs +++ b/mRemoteV1/UI/Forms/frmMain.cs @@ -77,7 +77,7 @@ namespace mRemoteNG.UI.Forms //Added theming support private readonly ToolStripRenderer _toolStripProfessionalRenderer = new ToolStripProfessionalRenderer(); - private FrmMain() + public FrmMain() { InitializeComponent(); @@ -116,7 +116,7 @@ namespace mRemoteNG.UI.Forms _windows = new Windows(_connectionInitiator, connectionTreeWindow, configWindow, errorAndInfoWindow, screenshotManagerWindow, sshTransferWindow, updateWindowBuilder, _notificationAreaIconBuilder, externalToolsWindowBuilder, _connectionsService, portScanWindowBuilder, activeDirectoryImportWindowBuilder, _appUpdater, _databaseConnectorFactory); - Func connectionWindowBuilder = () => new ConnectionWindow(new DockContent(), _connectionInitiator, _windows, externalToolsService); + Func connectionWindowBuilder = () => new ConnectionWindow(new DockContent(), _connectionInitiator, _windows, externalToolsService, this); _screens = new Screens(this); _panelAdder = new PanelAdder(_windowList, connectionWindowBuilder, _screens); _showFullPathInTitle = Settings.Default.ShowCompleteConsPathInTitle; diff --git a/mRemoteV1/UI/Window/ConnectionWindow.cs b/mRemoteV1/UI/Window/ConnectionWindow.cs index 8c128bb7..717be9f7 100644 --- a/mRemoteV1/UI/Window/ConnectionWindow.cs +++ b/mRemoteV1/UI/Window/ConnectionWindow.cs @@ -32,13 +32,16 @@ namespace mRemoteNG.UI.Window private readonly ToolStripRenderer _toolStripProfessionalRenderer = new ToolStripProfessionalRenderer(); private readonly Windows _windows; private readonly ExternalToolsService _externalToolsService; + private readonly FrmMain _frmMain; - public ConnectionWindow(DockContent panel, IConnectionInitiator connectionInitiator, Windows windows, ExternalToolsService externalToolsService, string formText = "") + public ConnectionWindow(DockContent panel, IConnectionInitiator connectionInitiator, + Windows windows, ExternalToolsService externalToolsService, FrmMain frmMain, string formText = "") { DockPnl = panel.ThrowIfNull(nameof(panel)); _connectionInitiator = connectionInitiator.ThrowIfNull(nameof(connectionInitiator)); _windows = windows.ThrowIfNull(nameof(windows)); _externalToolsService = externalToolsService.ThrowIfNull(nameof(externalToolsService)); + _frmMain = frmMain.ThrowIfNull(nameof(frmMain)); if (formText == "") { @@ -160,12 +163,12 @@ namespace mRemoteNG.UI.Window { if (TabController.SelectedTab == null) { - FrmMain.Default.SelectedConnection = null; + _frmMain.SelectedConnection = null; } else { var interfaceControl = TabController.SelectedTab?.Tag as InterfaceControl; - FrmMain.Default.SelectedConnection = interfaceControl?.Info; + _frmMain.SelectedConnection = interfaceControl?.Info; } } #endregion @@ -200,8 +203,8 @@ namespace mRemoteNG.UI.Window { if (_documentHandlersAdded) { - FrmMain.Default.ResizeBegin -= Connection_ResizeBegin; - FrmMain.Default.ResizeEnd -= Connection_ResizeEnd; + _frmMain.ResizeBegin -= Connection_ResizeBegin; + _frmMain.ResizeEnd -= Connection_ResizeEnd; _documentHandlersAdded = false; } DockHandler.FloatPane.FloatWindow.ResizeBegin += Connection_ResizeBegin; @@ -216,8 +219,8 @@ namespace mRemoteNG.UI.Window DockHandler.FloatPane.FloatWindow.ResizeEnd -= Connection_ResizeEnd; _floatHandlersAdded = false; } - FrmMain.Default.ResizeBegin += Connection_ResizeBegin; - FrmMain.Default.ResizeEnd += Connection_ResizeEnd; + _frmMain.ResizeBegin += Connection_ResizeBegin; + _frmMain.ResizeEnd += Connection_ResizeEnd; _documentHandlersAdded = true; } } @@ -244,7 +247,7 @@ namespace mRemoteNG.UI.Window private void Connection_FormClosing(object sender, FormClosingEventArgs e) { - if (!FrmMain.Default.IsClosing && + if (!_frmMain.IsClosing && (Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.All & TabController.TabPages.Count > 0 || Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Multiple & TabController.TabPages.Count > 1)) { @@ -790,7 +793,7 @@ namespace mRemoteNG.UI.Window { try { - if (!(NativeMethods.GetForegroundWindow() == FrmMain.Default.Handle) && !_ignoreChangeSelectedTabClick) + if (!(NativeMethods.GetForegroundWindow() == _frmMain.Handle) && !_ignoreChangeSelectedTabClick) { var clickedTab = TabController.TabPageFromPoint(e.Location); if (clickedTab != null && TabController.SelectedTab != clickedTab)