feat:为托盘右键菜单添加设置入口 (#405)
* 软件设置内的贡献者列表添加了 PANDA-JSR * feat(tray): add separate entries for new/legacy settings * feat(tray): merge settings menu entries * fix: use ikw namespace for tray menu stack panel
This commit is contained in:
@@ -32,6 +32,16 @@
|
|||||||
</Image>
|
</Image>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem Name="OpenSettingsTrayIconMenuItem" Click="OpenSettingsTrayIconMenuItem_Clicked">
|
||||||
|
<MenuItem.Header>
|
||||||
|
<ikw:SimpleStackPanel Orientation="Horizontal" Margin="-4,0,0,0">
|
||||||
|
<TextBlock FontSize="14" VerticalAlignment="Center" Foreground="#18181b" Text="打开设置" />
|
||||||
|
</ikw:SimpleStackPanel>
|
||||||
|
</MenuItem.Header>
|
||||||
|
<MenuItem.Icon>
|
||||||
|
<Image Width="28" Height="28" Margin="-2" Source="/Resources/Icons-Fluent/ic_fluent_settings_24_regular.png" />
|
||||||
|
</MenuItem.Icon>
|
||||||
|
</MenuItem>
|
||||||
<Separator Margin="0,3" />
|
<Separator Margin="0,3" />
|
||||||
<MenuItem Name="DisableAllHotkeysMenuItem" Click="DisableAllHotkeysMenuItem_Clicked">
|
<MenuItem Name="DisableAllHotkeysMenuItem" Click="DisableAllHotkeysMenuItem_Clicked">
|
||||||
<MenuItem.Header>
|
<MenuItem.Header>
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ using Ink_Canvas.Helpers;
|
|||||||
using iNKORE.UI.WPF.Controls;
|
using iNKORE.UI.WPF.Controls;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
@@ -37,7 +39,9 @@ namespace Ink_Canvas
|
|||||||
var FoldFloatingBarTrayIconMenuItemIconEyeOn = (Image)((Grid)((MenuItem)s.Items[s.Items.Count - 5]).Icon).Children[1];
|
var FoldFloatingBarTrayIconMenuItemIconEyeOn = (Image)((Grid)((MenuItem)s.Items[s.Items.Count - 5]).Icon).Children[1];
|
||||||
var FoldFloatingBarTrayIconMenuItemHeaderText = (TextBlock)((SimpleStackPanel)((MenuItem)s.Items[s.Items.Count - 5]).Header).Children[0];
|
var FoldFloatingBarTrayIconMenuItemHeaderText = (TextBlock)((SimpleStackPanel)((MenuItem)s.Items[s.Items.Count - 5]).Header).Children[0];
|
||||||
var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4];
|
var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4];
|
||||||
var HideICCMainWindowTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 9];
|
var HideICCMainWindowTrayIconMenuItem = s.Items.OfType<MenuItem>()
|
||||||
|
.FirstOrDefault(mi => mi.Name == "HideICCMainWindowTrayIconMenuItem");
|
||||||
|
if (HideICCMainWindowTrayIconMenuItem == null) return;
|
||||||
var mainWin = (MainWindow)Current.MainWindow;
|
var mainWin = (MainWindow)Current.MainWindow;
|
||||||
if (mainWin.IsLoaded)
|
if (mainWin.IsLoaded)
|
||||||
{
|
{
|
||||||
@@ -84,6 +88,73 @@ namespace Ink_Canvas
|
|||||||
/// 1. 获取主窗口实例
|
/// 1. 获取主窗口实例
|
||||||
/// 2. 如果主窗口已加载,且在无焦点模式下启用了始终置顶,则恢复主窗口的置顶状态
|
/// 2. 如果主窗口已加载,且在无焦点模式下启用了始终置顶,则恢复主窗口的置顶状态
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
|
private bool EnsureMainWindowReadyForSettings(MainWindow mainWin)
|
||||||
|
{
|
||||||
|
if (mainWin?.IsLoaded != true)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var trayMenu = ((TaskbarIcon)Current.Resources["TaskbarTrayIcon"]).ContextMenu;
|
||||||
|
var hideMainWindowMenuItem = trayMenu?.Items.OfType<MenuItem>()
|
||||||
|
.FirstOrDefault(mi => mi.Name == "HideICCMainWindowTrayIconMenuItem");
|
||||||
|
|
||||||
|
if (hideMainWindowMenuItem != null && hideMainWindowMenuItem.IsChecked)
|
||||||
|
{
|
||||||
|
hideMainWindowMenuItem.IsChecked = false;
|
||||||
|
}
|
||||||
|
else if (!mainWin.IsVisible)
|
||||||
|
{
|
||||||
|
mainWin.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mainWin.WindowState == WindowState.Minimized)
|
||||||
|
{
|
||||||
|
mainWin.WindowState = WindowState.Normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWin.Activate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsLegacySettingsVisible(MainWindow mainWin)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var borderSettingsField = typeof(MainWindow).GetField("BorderSettings", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
|
||||||
|
var borderSettings = borderSettingsField?.GetValue(mainWin) as FrameworkElement;
|
||||||
|
return borderSettings?.Visibility == Visibility.Visible;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OpenSettingsTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var mainWin = Current.MainWindow as MainWindow;
|
||||||
|
if (!EnsureMainWindowReadyForSettings(mainWin))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsLegacySettingsVisible(mainWin))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var method = typeof(MainWindow).GetMethod("BtnSettings_Click", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
method?.Invoke(mainWin, new object[] { null, null });
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"Open settings from tray failed: {ex.Message}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void SysTrayMenu_Closed(object sender, RoutedEventArgs e)
|
private void SysTrayMenu_Closed(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var mainWin = (MainWindow)Current.MainWindow;
|
var mainWin = (MainWindow)Current.MainWindow;
|
||||||
|
|||||||
Reference in New Issue
Block a user