From c70e4c66e6d8d7b6cc5618676b06965ac14ef0ba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 16 Oct 2025 20:02:27 +0000 Subject: [PATCH 1/2] Initial plan From 6853b158ce2ab21a5f296f8d4ab63fd06d0cd27f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 16 Oct 2025 20:09:02 +0000 Subject: [PATCH 2/2] Fix empty Options panel when Theme is canceled - Call RevertSettings() on all option pages when Cancel is clicked - Enhanced ThemePage.RevertSettings() to properly revert theme changes: - Store original active theme in LoadSettings - Clear modifiedThemes list on cancel - Restore original theme selection - Add VisibleChanged handler to ensure panel is populated when form is shown - Fixes issue where Options panel was empty after canceling theme selection Co-authored-by: Kvarkas <3611964+Kvarkas@users.noreply.github.com> --- mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs | 17 +++++++++++++++++ mRemoteNG/UI/Forms/frmOptions.cs | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs index cadd833d..4a6013c5 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs @@ -18,6 +18,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private readonly ThemeManager _themeManager; private readonly bool _oriActiveTheming; + private ThemeInfo _oriActiveTheme; private readonly List modifiedThemes = []; #endregion @@ -65,6 +66,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages // ReSharper disable once CoVariantArrayConversion cboTheme.Items.AddRange(_themeManager.LoadThemes().OrderBy(x => x.Name).ToArray()); cboTheme.SelectedItem = _themeManager.ActiveTheme; + // Store the original active theme for reverting + _oriActiveTheme = _themeManager.ActiveTheme; cboTheme_SelectionChangeCommitted(this, new EventArgs()); cboTheme.DisplayMember = "Name"; @@ -107,6 +110,20 @@ namespace mRemoteNG.UI.Forms.OptionsPages { base.RevertSettings(); _themeManager.ThemingActive = _oriActiveTheming; + + // Clear the modified themes list without saving + modifiedThemes.Clear(); + + // Restore the original theme selection + if (_oriActiveTheme != null) + { + _themeManager.ActiveTheme = _oriActiveTheme; + // Reload the theme list to reflect the original state + cboTheme.Items.Clear(); + cboTheme.Items.AddRange(_themeManager.LoadThemes().OrderBy(x => x.Name).ToArray()); + cboTheme.SelectedItem = _oriActiveTheme; + cboTheme_SelectionChangeCommitted(this, new EventArgs()); + } } #region Private Methods diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index 267d3b7a..37b14106 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -71,6 +71,20 @@ namespace mRemoteNG.UI.Forms //ThemeManager.getInstance().ThemeChanged += ApplyTheme; lstOptionPages.SelectedIndexChanged += LstOptionPages_SelectedIndexChanged; lstOptionPages.SelectedIndex = 0; + + // Handle visibility changes to ensure panel is populated when form is shown + this.VisibleChanged += FrmOptions_VisibleChanged; + } + + private void FrmOptions_VisibleChanged(object sender, EventArgs e) + { + // When the form becomes visible, ensure the panel is populated with the selected page + if (this.Visible && pnlMain.Controls.Count == 0) + { + OptionsPage page = (OptionsPage)lstOptionPages.SelectedObject; + if (page != null) + pnlMain.Controls.Add(page); + } } private void ApplyTheme() @@ -269,6 +283,11 @@ namespace mRemoteNG.UI.Forms private void BtnCancel_Click(object sender, EventArgs e) { + // Revert settings for all pages when Cancel is clicked + foreach (OptionsPage page in _optionPages) + { + page.RevertSettings(); + } this.Visible = false; }