feat: bar 点击回调添加按键和修饰键参数
on_click 新增 modifiers/button,使 bar item 可按按键与修饰键区分动作; 因参数增多,回调与 bar_click 改用结构参数封装。同时将 button_t 与 modifier 类型提升至公开头 include/zdwm/types.h 以供使用
This commit is contained in:
@@ -404,8 +404,12 @@ bool bar_draw(bar_t *bar) {
|
||||
return changed;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
bar_item_click(zdwm_bar_item_t *item, int32_t x, zdwm_action_t *action) {
|
||||
static inline bool bar_item_click(
|
||||
zdwm_bar_item_t *item,
|
||||
bar_click_info_t info,
|
||||
zdwm_action_t *action
|
||||
) {
|
||||
auto x = info.x;
|
||||
if (!(item->region.start <= x && item->region.end >= x)) return false;
|
||||
|
||||
if (!item->api.on_click) return true;
|
||||
@@ -413,7 +417,15 @@ bar_item_click(zdwm_bar_item_t *item, int32_t x, zdwm_action_t *action) {
|
||||
for (size_t i = 0; i < item->count; ++i) {
|
||||
auto cell = &item->cells[i];
|
||||
if (cell->region.start <= x && cell->region.end >= x) {
|
||||
*action = item->api.on_click(item, i, x, item->state);
|
||||
zdwm_bar_click_params_t params = {
|
||||
.item = item,
|
||||
.cell_index = i,
|
||||
.x = x,
|
||||
.modifiers = info.modifiers,
|
||||
.button = info.button,
|
||||
.state = item->state,
|
||||
};
|
||||
*action = item->api.on_click(¶ms);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -422,29 +434,24 @@ bar_item_click(zdwm_bar_item_t *item, int32_t x, zdwm_action_t *action) {
|
||||
}
|
||||
|
||||
static inline bool
|
||||
bar_side_click(bar_side_t *side, int32_t x, zdwm_action_t *action) {
|
||||
if (side->region.start > x || side->region.end < x) return false;
|
||||
bar_side_click(bar_side_t *side, bar_click_info_t info, zdwm_action_t *action) {
|
||||
if (side->region.start > info.x || side->region.end < info.x) return false;
|
||||
|
||||
for (size_t i = 0; i < side->count; ++i) {
|
||||
if (bar_item_click(&side->items[i], x, action)) return true;
|
||||
if (bar_item_click(&side->items[i], info, action)) return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool bar_click(
|
||||
bar_t *bar,
|
||||
zdwm_window_id_t window,
|
||||
int32_t x,
|
||||
zdwm_action_t *action
|
||||
) {
|
||||
bool bar_click(bar_t *bar, bar_click_info_t info, zdwm_action_t *action) {
|
||||
for (size_t i = 0; i < bar->count; ++i) {
|
||||
auto bar_output = &bar->bars[i];
|
||||
if (bar_output->window_id != window) continue;
|
||||
if (bar_output->window_id != info.window) continue;
|
||||
|
||||
if (bar_side_click(&bar_output->left, x, action)) return true;
|
||||
if (bar_item_click(&bar_output->center, x, action)) return true;
|
||||
if (bar_side_click(&bar_output->right, x, action)) return true;
|
||||
if (bar_side_click(&bar_output->left, info, action)) return true;
|
||||
if (bar_item_click(&bar_output->center, info, action)) return true;
|
||||
if (bar_side_click(&bar_output->right, info, action)) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user