fix:无焦点功能丢失

This commit is contained in:
2025-10-18 18:29:52 +08:00
parent aa0bb22cdd
commit 254e38895c
2 changed files with 19 additions and 17 deletions
+12 -1
View File
@@ -62,6 +62,7 @@ namespace Ink_Canvas
// 设置面板相关状态 // 设置面板相关状态
private bool userChangedNoFocusModeInSettings; private bool userChangedNoFocusModeInSettings;
private bool isTemporarilyDisablingNoFocusMode = false;
@@ -1839,7 +1840,11 @@ namespace Ink_Canvas
{ {
var hwnd = new WindowInteropHelper(this).Handle; var hwnd = new WindowInteropHelper(this).Handle;
int exStyle = GetWindowLong(hwnd, GWL_EXSTYLE); int exStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
if (Settings.Advanced.IsNoFocusMode)
bool shouldBeNoFocus = isTemporarilyDisablingNoFocusMode ?
false : Settings.Advanced.IsNoFocusMode;
if (shouldBeNoFocus)
{ {
SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_NOACTIVATE); SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_NOACTIVATE);
} }
@@ -2021,6 +2026,12 @@ namespace Ink_Canvas
var toggle = sender as ToggleSwitch; var toggle = sender as ToggleSwitch;
Settings.Advanced.IsNoFocusMode = toggle != null && toggle.IsOn; Settings.Advanced.IsNoFocusMode = toggle != null && toggle.IsOn;
SaveSettingsToFile(); SaveSettingsToFile();
if (isTemporarilyDisablingNoFocusMode)
{
isTemporarilyDisablingNoFocusMode = false;
}
ApplyNoFocusMode(); ApplyNoFocusMode();
// 如果启用了窗口置顶,需要重新应用置顶设置以处理无焦点模式的变化 // 如果启用了窗口置顶,需要重新应用置顶设置以处理无焦点模式的变化
@@ -396,15 +396,11 @@ namespace Ink_Canvas
{ {
BorderSettings.Visibility = Visibility.Collapsed; BorderSettings.Visibility = Visibility.Collapsed;
isOpeningOrHidingSettingsPane = false; isOpeningOrHidingSettingsPane = false;
// 在设置面板完全关闭后,根据情况恢复无焦点模式状态 if (isTemporarilyDisablingNoFocusMode)
if (!userChangedNoFocusModeInSettings && wasNoFocusModeBeforeSettings)
{ {
// 如果用户没有在设置中修改无焦点模式,则恢复之前的状态 isTemporarilyDisablingNoFocusMode = false;
Settings.Advanced.IsNoFocusMode = true;
ToggleSwitchNoFocusMode.IsOn = true; // 同步更新设置面板中的开关状态
ApplyNoFocusMode(); ApplyNoFocusMode();
} }
// 如果用户在设置中修改了无焦点模式,则保持用户的修改
}; };
BorderSettings.RenderTransform = new TranslateTransform(); BorderSettings.RenderTransform = new TranslateTransform();
@@ -2707,11 +2703,9 @@ namespace Ink_Canvas
// 如果当前在设置面板中,需要先恢复无焦点模式状态 // 如果当前在设置面板中,需要先恢复无焦点模式状态
if (BorderSettings.Visibility == Visibility.Visible) if (BorderSettings.Visibility == Visibility.Visible)
{ {
// 如果用户没有在设置中修改无焦点模式,则恢复之前的状态 if (isTemporarilyDisablingNoFocusMode)
if (!userChangedNoFocusModeInSettings && wasNoFocusModeBeforeSettings)
{ {
Settings.Advanced.IsNoFocusMode = true; isTemporarilyDisablingNoFocusMode = false;
ToggleSwitchNoFocusMode.IsOn = true;
ApplyNoFocusMode(); ApplyNoFocusMode();
} }
SaveSettingsToFile(); SaveSettingsToFile();
@@ -2726,11 +2720,9 @@ namespace Ink_Canvas
{ {
if (BorderSettings.Visibility == Visibility.Visible) if (BorderSettings.Visibility == Visibility.Visible)
{ {
// 如果用户没有在设置中修改无焦点模式,则恢复之前的状态 if (isTemporarilyDisablingNoFocusMode)
if (!userChangedNoFocusModeInSettings && wasNoFocusModeBeforeSettings)
{ {
Settings.Advanced.IsNoFocusMode = true; isTemporarilyDisablingNoFocusMode = false;
ToggleSwitchNoFocusMode.IsOn = true;
ApplyNoFocusMode(); ApplyNoFocusMode();
} }
SaveSettingsToFile(); SaveSettingsToFile();
@@ -2777,12 +2769,11 @@ namespace Ink_Canvas
else else
{ {
BorderSettings.Visibility = Visibility.Visible; BorderSettings.Visibility = Visibility.Visible;
// 临时禁用无焦点模式以避免下拉选项被遮挡
wasNoFocusModeBeforeSettings = Settings.Advanced.IsNoFocusMode; wasNoFocusModeBeforeSettings = Settings.Advanced.IsNoFocusMode;
userChangedNoFocusModeInSettings = false; // 重置用户修改标志 userChangedNoFocusModeInSettings = false; // 重置用户修改标志
if (wasNoFocusModeBeforeSettings) if (wasNoFocusModeBeforeSettings)
{ {
Settings.Advanced.IsNoFocusMode = false; isTemporarilyDisablingNoFocusMode = true;
ApplyNoFocusMode(); ApplyNoFocusMode();
} }