Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions Ink Canvas/Helpers/LocalizationHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ private static void PatchModernStrings(string onText, string offText)

var current = (ResourceManager)resourceManField.GetValue(null);

// iNKORE Strings 尚未惰性初始化时为 null,此时装补丁会留下空回退,
// 触发 TextContextMenu 等查未知键时 NRE,故直接跳过
if (current == null) return;

if (!_modernStringsPatched)
{
_originalModernStringsRM = current;
Expand Down Expand Up @@ -122,22 +126,22 @@ public ToggleSwitchResourceManager(ResourceManager fallback, Dictionary<string,

public override string GetString(string name)
{
if (_overrides.TryGetValue(name, out var value))
if (_overrides != null && _overrides.TryGetValue(name, out var value))
return value;
return _fallback.GetString(name);
return _fallback?.GetString(name) ?? name;
}

public override string GetString(string name, CultureInfo culture)
{
if (_overrides.TryGetValue(name, out var value))
if (_overrides != null && _overrides.TryGetValue(name, out var value))
return value;
return _fallback.GetString(name, culture);
return _fallback?.GetString(name, culture) ?? name;
}

public override object GetObject(string name) => _fallback.GetObject(name);
public override object GetObject(string name, CultureInfo culture) => _fallback.GetObject(name, culture);
public override object GetObject(string name) => _fallback?.GetObject(name);
public override object GetObject(string name, CultureInfo culture) => _fallback?.GetObject(name, culture);
public override ResourceSet GetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents)
=> _fallback.GetResourceSet(culture, createIfNotExists, tryParents);
=> _fallback?.GetResourceSet(culture, createIfNotExists, tryParents);
}

/// <summary>
Expand Down
34 changes: 33 additions & 1 deletion Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ public partial class MainWindow : Ink_Canvas.Helpers.PerformanceTransparentWin

private static Windows.SettingsViews.SettingsWindow _settingsWindow = null;

private string _pendingSettingsPageTag = null;
private string _pendingSettingsEntryPath = null;

#region "手勢"按鈕

/// <summary>
Expand Down Expand Up @@ -4403,6 +4406,7 @@ internal async void BtnSettings_Click(object sender, RoutedEventArgs e)
_settingsWindow.WindowState = System.Windows.WindowState.Normal;
_settingsWindow.Activate();
_settingsWindow.Focus();
FlushPendingSettingsDeepLink();
return;
}

Expand All @@ -4411,12 +4415,13 @@ internal async void BtnSettings_Click(object sender, RoutedEventArgs e)
if (Ink_Canvas.Helpers.SecurityManager.IsPasswordRequiredForEnterSettings(Settings))
{
bool ok = await Ink_Canvas.Helpers.SecurityManager.PromptAndVerifyPasswordOrTotpAsync(Settings, this, Properties.MainWindowStrings.Main_EnterSettings, Properties.MainWindowStrings.Main_EnterSettings_Message);
if (!ok) return;
if (!ok) { ClearPendingSettingsDeepLink(); return; }
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"安全密码校验失败: {ex}", LogHelper.LogType.Error);
ClearPendingSettingsDeepLink();
return;
}

Expand All @@ -4429,6 +4434,33 @@ internal async void BtnSettings_Click(object sender, RoutedEventArgs e)
_settingsWindow.Topmost = this.Topmost;
_settingsWindow.Closed += (s, args) => _settingsWindow = null;
_settingsWindow.Show();
// 等窗口完成默认导航后再定位深链目标
_ = Dispatcher.InvokeAsync(new Action(FlushPendingSettingsDeepLink), DispatcherPriority.ApplicationIdle);
}

/// <summary>
/// 通过 icc: 深链打开设置窗口并定位到指定设置项。
/// </summary>
private void OpenSettingsAtEntry(string pageTag, string propertyPath)
{
_pendingSettingsPageTag = pageTag;
_pendingSettingsEntryPath = propertyPath;
BtnSettings_Click(null, null);
}

private void FlushPendingSettingsDeepLink()
{
if (_settingsWindow == null || string.IsNullOrEmpty(_pendingSettingsEntryPath)) return;
string pageTag = _pendingSettingsPageTag;
string path = _pendingSettingsEntryPath;
ClearPendingSettingsDeepLink();
_settingsWindow.NavigateToEntry(pageTag, path);
}

private void ClearPendingSettingsDeepLink()
{
_pendingSettingsPageTag = null;
_pendingSettingsEntryPath = null;
}
private bool forceEraser;

Expand Down
13 changes: 13 additions & 0 deletions Ink Canvas/MainWindow_cs/MW_UriHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,19 @@ public void HandleUriCommand(string uri)
return;
}

if (pathLower == "settings/entry")
{
string pageTag = GetUriQueryValue(uri, "page");
string entryPath = GetUriQueryValue(uri, "path");
if (string.IsNullOrEmpty(entryPath))
{
LogHelper.WriteLogToFile("URI 打开设置项缺少参数 path", LogHelper.LogType.Warning);
return;
}
OpenSettingsAtEntry(pageTag, entryPath);
return;
}

LogHelper.WriteLogToFile($"未知的 URI 命令: {command}", LogHelper.LogType.Warning);
}
catch (Exception ex)
Expand Down
10 changes: 8 additions & 2 deletions Ink Canvas/Properties/CommonStrings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 12 additions & 3 deletions Ink Canvas/Properties/CommonStrings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,19 @@
<data name="SettingsTag_Favourite" xml:space="preserve">
<value>收藏</value>
</data>
<data name="SettingsTag_FavouriteAdd" xml:space="preserve">
<value>收藏此设置</value>
<data name="SettingsItemMore" xml:space="preserve">
<value>更多操作</value>
</data>
<data name="SettingsTag_FavouriteRemove" xml:space="preserve">
<data name="SettingsItemCopyKey" xml:space="preserve">
<value>复制设置键名</value>
</data>
<data name="SettingsItemCopyUrl" xml:space="preserve">
<value>复制URL</value>
</data>
<data name="SettingsItemAddFavourite" xml:space="preserve">
<value>设置为收藏</value>
</data>
<data name="SettingsItemRemoveFavourite" xml:space="preserve">
<value>取消收藏</value>
</data>
</root>
2 changes: 1 addition & 1 deletion Ink Canvas/Properties/NavStrings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@
<value>通知设置</value>
</data>
<data name="Nav_AutoFold" xml:space="preserve">
<value>自动收纳</value>
<value>自动收纳/查杀</value>
</data>
<data name="Nav_AutoFold_Tooltip" xml:space="preserve">
<value>自动收纳与浮动窗口拦截设置</value>
Expand Down
Loading