113 lines
2.8 KiB
C
113 lines
2.8 KiB
C
#pragma once
|
|
|
|
#include <stddef.h>
|
|
#include <zdwm/action.h>
|
|
#include <zdwm/types.h>
|
|
|
|
#include "core/types.h"
|
|
|
|
typedef struct binding_table_t binding_table_t;
|
|
|
|
typedef struct key_binding_t {
|
|
const char *key_str;
|
|
modifier_mask_t modifiers;
|
|
keysym_t keysym;
|
|
zdwm_action_fn *fn;
|
|
zdwm_action_arg_t arg;
|
|
} key_binding_t;
|
|
|
|
/**
|
|
* @brief 添加新的模式
|
|
*
|
|
* @details 按键模式名不能重复,如果添加重复的名字仅第一次成功,后续将添加失败
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param mode_name 按键模式名字,不能为 nullptr 或空字符串
|
|
*
|
|
* @return 添加成功返回新增模式的 id 否则返回 ZDWM_BINDING_MODE_ID_INVALID
|
|
*/
|
|
zdwm_binding_mode_id_t
|
|
binding_table_add_mode(binding_table_t *table, const char *mode_name);
|
|
|
|
/**
|
|
* @brief 添加按键绑定
|
|
*
|
|
* @details mode_id 对应的模式不存在或 key_sequence 不合法,都会添加失败
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param mode_id 模式 ID
|
|
* @param key_sequence 按键序列的字符串表达
|
|
* @param fn 用户行为函数
|
|
* @param arg 用户行为函数所需的参数
|
|
*
|
|
* @return 添加成功返回 true 否则返回 false
|
|
*/
|
|
bool binding_table_add_bind(
|
|
binding_table_t *table,
|
|
zdwm_binding_mode_id_t mode_id,
|
|
const char *key_sequence,
|
|
zdwm_action_fn fn,
|
|
zdwm_action_arg_t arg
|
|
);
|
|
|
|
/**
|
|
* @brief 销毁按键绑定表
|
|
*/
|
|
void binding_table_destroy(binding_table_t *table);
|
|
|
|
/**
|
|
* @brief 创建按键绑定表
|
|
*/
|
|
binding_table_t *binding_table_create(void);
|
|
|
|
/**
|
|
* @brief 通过模式 ID 设置默认模式
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param mode_id 按键模式 ID
|
|
*
|
|
* @return 切换成功返回 true 否则返回 false
|
|
*/
|
|
bool binding_table_set_default_mode(
|
|
binding_table_t *table,
|
|
zdwm_binding_mode_id_t mode_id
|
|
);
|
|
|
|
/**
|
|
* @brief 通过模式 ID 设置当前模式
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param mode_id 按键模式 ID
|
|
*
|
|
* @return 切换成功返回 true 否则返回 false
|
|
*/
|
|
bool binding_table_set_current_mode(
|
|
binding_table_t *table,
|
|
zdwm_binding_mode_id_t mode_id
|
|
);
|
|
|
|
/**
|
|
* @brief 切换按键绑定模式
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param delta 切换变化量
|
|
*
|
|
* @return 无法切换返回 false 否则返回 true
|
|
*/
|
|
bool binding_table_cycle_mode(binding_table_t *table, int delta);
|
|
|
|
/**
|
|
* @brief 获取当前按键绑定列表
|
|
*
|
|
* @param table 按键绑定表
|
|
* @param count 保存按键个数的指针
|
|
*
|
|
* @return 返回当前按键列表的头指针,调用方仅只读访问,不持有对应的内存。
|
|
*
|
|
* @notice
|
|
* 1. count 指针不能为 nullptr ,若 count 传 nullptr 视为调用方错误
|
|
* 2. 调用方需判断返回的指针是否为 nullptr
|
|
*/
|
|
const key_binding_t *
|
|
binding_table_get_current_bindings(binding_table_t *table, size_t *count);
|