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:
@@ -3,6 +3,8 @@ using Ink_Canvas.Helpers;
|
||||
using iNKORE.UI.WPF.Controls;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
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 FoldFloatingBarTrayIconMenuItemHeaderText = (TextBlock)((SimpleStackPanel)((MenuItem)s.Items[s.Items.Count - 5]).Header).Children[0];
|
||||
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;
|
||||
if (mainWin.IsLoaded)
|
||||
{
|
||||
@@ -84,6 +88,73 @@ namespace Ink_Canvas
|
||||
/// 1. 获取主窗口实例
|
||||
/// 2. 如果主窗口已加载,且在无焦点模式下启用了始终置顶,则恢复主窗口的置顶状态
|
||||
/// </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)
|
||||
{
|
||||
var mainWin = (MainWindow)Current.MainWindow;
|
||||
|
||||
Reference in New Issue
Block a user