feat(shortcuts): 添加全局快捷键 Ctrl+N/S/F

- Ctrl+N: 新建路径
- Ctrl+S: 保存(确定)
- Ctrl+F: 聚焦搜索框
- 对话框级 K_ANY 回调,列表级 K_ANY 保持 Ctrl+Z/Y/DEL

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-01 23:17:14 +08:00
parent 5bb0ac66cf
commit e5d24389b4
3 changed files with 25 additions and 0 deletions
+1
View File
@@ -33,6 +33,7 @@ int list_dropfiles_cb(Ihandle *self, const char *filename, int num, int x, int y
// 键盘按键回调 // 键盘按键回调
int list_k_any_cb(Ihandle *self, int c); int list_k_any_cb(Ihandle *self, int c);
int dlg_k_any_cb(Ihandle *self, int c);
// 载入数据与更新UI // 载入数据与更新UI
void load_all_paths(void); void load_all_paths(void);
+23
View File
@@ -202,3 +202,26 @@ int btn_help_cb(Ihandle *self)
return IUP_DEFAULT; return IUP_DEFAULT;
} }
// 对话框全局快捷键回调
int dlg_k_any_cb(Ihandle *self, int c)
{
if (c == K_cN) // Ctrl+N 新建
{
btn_new_cb(self);
return IUP_IGNORE;
}
if (c == K_cS) // Ctrl+S 保存
{
btn_ok_cb(self);
return IUP_IGNORE;
}
if (c == K_cF) // Ctrl+F 聚焦搜索框
{
Ihandle *txt_search = IupGetDialogChild(self, CTRL_TXT_SEARCH);
if (txt_search)
IupSetFocus(txt_search);
return IUP_IGNORE;
}
return IUP_DEFAULT;
}
+1
View File
@@ -181,6 +181,7 @@ Ihandle *create_main_window(void)
IupSetAttribute(dlg, "MINSIZE", lua_config_get_string("dialog", "minsize")); IupSetAttribute(dlg, "MINSIZE", lua_config_get_string("dialog", "minsize"));
IupSetAttribute(dlg, "MINBOX", "NO"); IupSetAttribute(dlg, "MINBOX", "NO");
IupSetAttribute(dlg, "MAXBOX", "NO"); IupSetAttribute(dlg, "MAXBOX", "NO");
IupSetCallback(dlg, "K_ANY", (Icallback)dlg_k_any_cb);
return dlg; return dlg;
} }