feat(bar): 在 workspace 列表末尾显示当前 workspace 布局符号
This commit is contained in:
@@ -65,6 +65,8 @@ void bar_output_add_workspace(
|
|||||||
.active_fg = config->tag_active_fg,
|
.active_fg = config->tag_active_fg,
|
||||||
.urgent_bg = config->tag_urgent_bg,
|
.urgent_bg = config->tag_urgent_bg,
|
||||||
.urgent_fg = config->tag_urgent_fg,
|
.urgent_fg = config->tag_urgent_fg,
|
||||||
|
.layout_bg = config->layout_bg,
|
||||||
|
.layout_fg = config->layout_fg,
|
||||||
};
|
};
|
||||||
auto item = bar_add_item(
|
auto item = bar_add_item(
|
||||||
bar_output->output_id,
|
bar_output->output_id,
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
typedef struct bar_workspace_t {
|
typedef struct bar_workspace_t {
|
||||||
zdwm_workspace_t info;
|
zdwm_workspace_t info;
|
||||||
|
zdwm_layout_notify_t layout;
|
||||||
size_t window_count;
|
size_t window_count;
|
||||||
size_t urgent_window_count;
|
size_t urgent_window_count;
|
||||||
} bar_workspace_t;
|
} bar_workspace_t;
|
||||||
@@ -101,9 +102,9 @@ static void bar_workspaces_update(
|
|||||||
auto data = (bar_workspace_state_t *)state;
|
auto data = (bar_workspace_state_t *)state;
|
||||||
if (!data->list_inited || !data->active_inited || !data->dirty) return;
|
if (!data->list_inited || !data->active_inited || !data->dirty) return;
|
||||||
|
|
||||||
if (data->count != cell_api->get_cell_count(item)) {
|
/* 当前 workspace 的 layout 指示器放在最后 */
|
||||||
cell_api->set_cell_count(item, data->count);
|
cell_api->set_cell_count(item, data->count + 1);
|
||||||
}
|
auto layout_index = data->count;
|
||||||
|
|
||||||
auto config = &data->config;
|
auto config = &data->config;
|
||||||
for (size_t i = 0; i < data->count; ++i) {
|
for (size_t i = 0; i < data->count; ++i) {
|
||||||
@@ -121,6 +122,11 @@ static void bar_workspaces_update(
|
|||||||
if (info->id == data->workspace_id) {
|
if (info->id == data->workspace_id) {
|
||||||
cell_api->cell_set_bg(item, i, config->active_bg);
|
cell_api->cell_set_bg(item, i, config->active_bg);
|
||||||
cell_api->cell_set_fg(item, i, config->active_fg);
|
cell_api->cell_set_fg(item, i, config->active_fg);
|
||||||
|
|
||||||
|
cell_api->cell_set_bg(item, layout_index, config->layout_bg);
|
||||||
|
cell_api->cell_set_fg(item, layout_index, config->layout_fg);
|
||||||
|
cell_api->cell_set_text(item, layout_index, workspace->layout.symbol);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,6 +219,20 @@ static void bar_workspace_active_updated(
|
|||||||
state->dirty = true;
|
state->dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bar_workspace_layout_notify(zdwm_layout_notify_t layout, void *user_data) {
|
||||||
|
auto state = (bar_workspace_state_t *)user_data;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < state->count; ++i) {
|
||||||
|
auto workspace = &state->workspaces[i];
|
||||||
|
if (workspace->info.id == layout.workspace) {
|
||||||
|
workspace->layout = layout;
|
||||||
|
state->dirty = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void bar_workspace_window_added(const zdwm_window_t *window, void *user_data) {
|
void bar_workspace_window_added(const zdwm_window_t *window, void *user_data) {
|
||||||
auto state = (bar_workspace_state_t *)user_data;
|
auto state = (bar_workspace_state_t *)user_data;
|
||||||
|
|
||||||
@@ -271,6 +291,7 @@ void bar_workspace_add_listeners(listeners_t *listeners, void *state) {
|
|||||||
|
|
||||||
ADD(listeners_add_initial_workspace_listener, bar_workspace_list_filter);
|
ADD(listeners_add_initial_workspace_listener, bar_workspace_list_filter);
|
||||||
ADD(listeners_add_active_workspace_listener, bar_workspace_active_updated);
|
ADD(listeners_add_active_workspace_listener, bar_workspace_active_updated);
|
||||||
|
ADD(listeners_add_layout_notify, bar_workspace_layout_notify);
|
||||||
ADD(listeners_add_initial_window_listener, bar_workspace_initial_windows);
|
ADD(listeners_add_initial_window_listener, bar_workspace_initial_windows);
|
||||||
ADD(listeners_add_window_added_listener, bar_workspace_window_added);
|
ADD(listeners_add_window_added_listener, bar_workspace_window_added);
|
||||||
ADD(listeners_add_window_updated_listener, bar_workspace_window_updated);
|
ADD(listeners_add_window_updated_listener, bar_workspace_window_updated);
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ typedef struct bar_workspace_config_t {
|
|||||||
const char *active_fg;
|
const char *active_fg;
|
||||||
const char *urgent_bg;
|
const char *urgent_bg;
|
||||||
const char *urgent_fg;
|
const char *urgent_fg;
|
||||||
|
const char *layout_bg;
|
||||||
|
const char *layout_fg;
|
||||||
} bar_workspace_config_t;
|
} bar_workspace_config_t;
|
||||||
|
|
||||||
extern zdwm_bar_item_type_t bar_workspace;
|
extern zdwm_bar_item_type_t bar_workspace;
|
||||||
|
|||||||
@@ -187,6 +187,8 @@ bool config_defaults_build(
|
|||||||
.tag_active_fg = "#eeeeee",
|
.tag_active_fg = "#eeeeee",
|
||||||
.tag_urgent_bg = "#222222",
|
.tag_urgent_bg = "#222222",
|
||||||
.tag_urgent_fg = "#ff0000",
|
.tag_urgent_fg = "#ff0000",
|
||||||
|
.layout_bg = "#222222",
|
||||||
|
.layout_fg = "#bbbbbb",
|
||||||
};
|
};
|
||||||
api->set_bar_config(builder, bar_config);
|
api->set_bar_config(builder, bar_config);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user