diff options
| author | Federico Angelilli <code@fedang.net> | 2024-02-11 00:21:27 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-02-11 00:21:27 +0100 |
| commit | 2d93c1d34036842291b5926ea66c73fd2818f564 (patch) | |
| tree | 1c4ecb60ed1ec1dc633a9c0de89f5a2c3030a638 /src/dwm.c | |
| parent | f8b372787562aecb2a4a55b336c196f47b5c1b0c (diff) | |
Keep track of the dwm program title
Diffstat (limited to 'src/dwm.c')
| -rw-r--r-- | src/dwm.c | 46 |
1 files changed, 42 insertions, 4 deletions
@@ -22,8 +22,12 @@ struct DwmIpc { GSource *source; State *state; Color color; + Color text_color; Color selected; Button *tags[9]; + Button *title; + bool change_title; + bool hidden_title; }; typedef enum { @@ -170,7 +174,7 @@ static void ipc_handle(DwmIpc *dwm, DwmIpcMessage type, char *reply, uint32_t re if (type == IPC_TYPE_EVENT) { if (json_reader_read_member(reader, IPC_EVENT_TAG_CHANGE)) { - log_debug("Reading dwm ipc event [event=%s]", IPC_EVENT_TAG_CHANGE); + log_debug("Handling dwm ipc event [event=%s]", IPC_EVENT_TAG_CHANGE); json_reader_read_member(reader, "new_state"); json_reader_read_member(reader, "selected"); @@ -188,9 +192,17 @@ static void ipc_handle(DwmIpc *dwm, DwmIpcMessage type, char *reply, uint32_t re state_redraw(dwm->state, false); } } else if (JSON_FIELD(reader, IPC_EVENT_CLIENT_FOCUS_CHANGE)) { - log_debug("Ignoring dwm ipc event [event=%s]", IPC_EVENT_CLIENT_FOCUS_CHANGE); - // TODO + log_debug("Handling dwm ipc event [event=%s]", IPC_EVENT_CLIENT_FOCUS_CHANGE); + json_reader_read_member(reader, "new_win_id"); + long win_id = json_reader_get_int_value(reader); + json_reader_end_member(reader); + json_reader_end_member(reader); + + char *msg = g_strdup_printf("{ \"client_window_id\": %ld }\n", win_id); + dwm->change_title = true; + ipc_send(dwm, IPC_TYPE_GET_DWM_CLIENT, msg, strlen(msg)); + g_free(msg); } else if (JSON_FIELD(reader, IPC_EVENT_LAYOUT_CHANGE)) { log_debug("Ignoring dwm ipc event [event=%s]", IPC_EVENT_LAYOUT_CHANGE); // TODO @@ -214,6 +226,29 @@ static void ipc_handle(DwmIpc *dwm, DwmIpcMessage type, char *reply, uint32_t re log_warning("Unrecognized dwm ipc event: %s", event); } + } else if (type == IPC_TYPE_GET_DWM_CLIENT) { + log_debug("Received dwm client information message [type=%d]", type); + + if (dwm->change_title) { + json_reader_read_member(reader, "name"); + const char *title = json_reader_get_string_value(reader); + + log_debug("Changing current program title: %s", title ? title : "?"); + if (title == NULL || strlen(title) == 0) { + state_remove_button(dwm->state, dwm->title); + dwm->hidden_title = true; + } else { + button_simple_set_text(dwm->title, g_strdup(title), dwm->text_color); + if (dwm->hidden_title) { + state_add_button(dwm->state, dwm->title); + dwm->hidden_title = false; + } + } + + dwm->change_title = false; + state_redraw(dwm->state, true); + json_reader_end_member(reader); + } } else { log_debug("Ignoring dwm ipc message [type=%d]", type); //log_debug("%s", reply); @@ -273,7 +308,6 @@ DwmIpc *dwm_create(State *state, const char *socket) { DwmIpc *dwm = g_malloc0(sizeof(DwmIpc)); dwm->state = state; - dwm->tags[0] = NULL; GError *error = NULL; dwm->socket = g_socket_new(G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, 0, &error); @@ -326,6 +360,7 @@ static void change_tag_action(Button *btn) void dwm_register_tags(DwmIpc *dwm, Color color, Color selected, Color text_color, Color line_color) { dwm->color = color; + dwm->text_color = text_color; dwm->selected = selected; // Tags button @@ -336,6 +371,9 @@ void dwm_register_tags(DwmIpc *dwm, Color color, Color selected, Color text_colo button_simple_set_action(dwm->tags[i], change_tag_action, dwm); state_add_button(dwm->state, dwm->tags[i]); } + + dwm->title = button_simple_create(PANGO_ALIGN_CENTER, color, line_color); + dwm->hidden_title = true; } void dwm_destroy(DwmIpc *dwm) |
