2dust / clashN

A clash client for Windows, support Mihomo
https://1.2345345.xyz
GNU General Public License v3.0
4.73k stars 588 forks source link

【功能请求】改善托盘菜单中代理选单的行为 #242

Closed FrzMtrsprt closed 8 months ago

FrzMtrsprt commented 1 year ago

目前 ClashN 托盘菜单中的代理选单的行为

  1. 系统代理被手动变更后,代理选单中的所选项不会同时改变
  2. 再次点击之前的所选项后,无法将代理状态恢复到原先状态

示例场景

  1. 使用 ClashN 设置系统代理后,系统代理被更改为 ClashN 的代理端口
  2. 手动变更系统代理后,打开 ClashN 托盘菜单中的代理选单,选单仍显示“自动配置系统代理”,但此时系统代理并不是 ClashN 的代理端口
  3. 再次点击“自动配置系统代理”,试图恢复 ClashN 的系统代理,但系统代理并没有恢复

改善方案

  1. 将系统代理的合并为两项:系统代理和 PAC 代理,具有独立的勾选和未勾选状态,允许出现 √√ √× ×√ ××(但√√不会出现,除非用户手动同时设置两种代理),同时去掉“不改变系统代理”和“清除系统代理”
  2. 手动勾选系统代理时,将系统代理设置为启用,并设置为 ClashN 的地址和端口;手动取消勾选系统代理时,将系统代理设置为禁用
  3. 每次右键打开托盘菜单时,查询一次系统代理,若地址和端口与 ClashN 的匹配,则自动勾选系统代理,否则自动取消勾选,PAC 代理同理,这样可以做到选单状态完全反应系统代理状态;勾选状态的自动变化不应触发上一条中系统代理的变化

示意图

image

此问题在v2rayN中也有出现,可以考虑将此方案也用到v2rayN上。

FrzMtrsprt commented 1 year ago

主界面的代理选单同样可以使用上述改进,相关讨论见 #236

2dust commented 1 year ago

不改变代理的选择如何处理?

FrzMtrsprt commented 1 year ago

没太明白这个不改变代理的作用是什么,是让clashN切换到当前系统代理的端口,还是什么也不做呢?

2dust commented 1 year ago

https://github.com/2dust/v2rayN/wiki/%E7%B3%BB%E7%BB%9F%E4%BB%A3%E7%90%86%E5%92%8C%E8%B7%AF%E7%94%B1

2dust commented 1 year ago

不改变代理是很有用的功能

FrzMtrsprt commented 1 year ago

两个选项都不选中就是不改变代理。不在每次重启时强制改变系统代理状态,而是让代理选单实时反应系统代理的状态,可能比目前的方案更直观易用一些。在看到 wiki 之前,我一直以为清除代理和设置代理只会在点击选单时起作用,不知道重启时也会设置/清除代理,所以就忽略了不改变代理这个选项。

2dust commented 1 year ago

两个选项都不选中就是不改变代理 这个特点隐藏的更深了。

大部分用户现在都知道选中第二个或者说颜色变成红色是设置好了代理,暂时不想改变此行为

FrzMtrsprt commented 1 year ago

不改变菜单内容的话,至少可以修复一下再次点击系统代理却无法恢复系统代理的问题。

方案 1:将“清除系统代理”从选单中独立出来看作单独的按钮(位置不改变),无法被勾选,点击一次就清除一次代理(这样可以保证clashN重启时不会把其他应用的代理清掉);每次打开菜单时检测一次系统代理,若与clashN代理不符,自动切换到“不改变系统代理”;剩下三项的行为不改变 方案 2:将Menu的事件触发条件改成每个MenuItem的MenuItem.Click事件,只要点击,即使是重复点击已选项,也再次执行触发事件(设置一次代理或清除一次代理)

方案 1 也可以从根本上解决选单状态无法反映系统代理状态的问题,而方案 2 仍需要让用户自己猜测系统代理的状态

kyobox commented 1 year ago

希望“当前链接”的标题栏可以筛选项目和升降序排列 @2dust