aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-02-11 00:21:27 +0100
committerFederico Angelilli <code@fedang.net>2024-02-11 00:21:27 +0100
commit2d93c1d34036842291b5926ea66c73fd2818f564 (patch)
tree1c4ecb60ed1ec1dc633a9c0de89f5a2c3030a638 /src
parentf8b372787562aecb2a4a55b336c196f47b5c1b0c (diff)
Keep track of the dwm program title
Diffstat (limited to 'src')
-rw-r--r--src/dwm.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/src/dwm.c b/src/dwm.c
index f323164..e8162eb 100644
--- a/src/dwm.c
+++ b/src/dwm.c
@@ -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)