From 7984f08925e18e24e6b54ac4498d65fa26b2a4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 13 Sep 2024 08:51:12 +0200 Subject: [PATCH] osc: OSC-1 does not set the icon, it sets the icon _label_ In fact, there appears there *is* no escape sequence to set the icon. Keep most of the logic in place, but in practice, we'll always set the icon to the app-id. That is, at startup, we set it to the configured app-id (either from config, or the command line). OSC-176, which sets the app-id, also updates the icon (to the app-id). --- csi.c | 11 ----------- osc.c | 2 -- terminal.c | 36 ++++++------------------------------ terminal.h | 5 ++--- 4 files changed, 8 insertions(+), 46 deletions(-) diff --git a/csi.c b/csi.c index 39821d8d..61e0e44b 100644 --- a/csi.c +++ b/csi.c @@ -1377,10 +1377,6 @@ csi_dispatch(struct terminal *term, uint8_t final) tll_push_back( term->window_title_stack, xstrdup(term->window_title)); } - if (what == 0 || what == 1) { - tll_push_back( - term->window_icon_stack, xstrdup(term->window_icon)); - } break; } @@ -1394,13 +1390,6 @@ csi_dispatch(struct terminal *term, uint8_t final) free(title); } } - if (what == 0 || what == 1) { - if (tll_length(term->window_icon_stack) > 0) { - char *icon = tll_pop_back(term->window_icon_stack); - term_set_icon(term, icon); - free(icon); - } - } break; } diff --git a/osc.c b/osc.c index 541a13f4..5efc7588 100644 --- a/osc.c +++ b/osc.c @@ -1147,11 +1147,9 @@ osc_dispatch(struct terminal *term) switch (param) { case 0: /* icon + title */ term_set_window_title(term, string); - term_set_icon(term, string); break; case 1: /* icon */ - term_set_icon(term, string); break; case 2: /* title */ diff --git a/terminal.c b/terminal.c index 5e9a60a5..6d62a3ed 100644 --- a/terminal.c +++ b/terminal.c @@ -1814,9 +1814,7 @@ term_destroy(struct terminal *term) composed_free(term->composed); free(term->app_id); - free(term->window_icon); free(term->window_title); - tll_free_and_free(term->window_icon_stack, free); tll_free_and_free(term->window_title_stack, free); for (size_t i = 0; i < sizeof(term->fonts) / sizeof(term->fonts[0]); i++) @@ -2048,9 +2046,7 @@ term_reset(struct terminal *term, bool hard) term->saved_charsets = term->charsets; tll_free_and_free(term->window_title_stack, free); term_set_window_title(term, term->conf->title); - tll_free_and_free(term->window_icon_stack, free); term_set_app_id(term, NULL); - term_set_icon(term, NULL); term_set_user_mouse_cursor(term, NULL); @@ -3610,39 +3606,19 @@ term_set_app_id(struct terminal *term, const char *app_id) render_refresh_icon(term); } -void -term_set_icon(struct terminal *term, const char *icon) -{ - if (icon != NULL && *icon == '\0') - icon = NULL; - if (term->window_icon == NULL && icon == NULL) - return; - if (term->window_icon != NULL && icon != NULL && streq(term->window_icon, icon)) - return; - - if (icon != NULL && !is_valid_utf8(icon)) { - LOG_WARN("%s: icon label is not valid UTF-8, ignoring", icon); - return; - } - - free(term->window_icon); - if (icon != NULL) { - term->window_icon = xstrdup(icon); - } else { - term->window_icon = NULL; - } - render_refresh_icon(term); -} - const char * term_icon(const struct terminal *term) { const char *app_id = term->app_id != NULL ? term->app_id : term->conf->app_id; - return term->window_icon != NULL + return +#if 0 +term->window_icon != NULL ? term->window_icon - : streq(app_id, "footclient") + : + #endif + streq(app_id, "footclient") ? "foot" : app_id; } diff --git a/terminal.h b/terminal.h index 28576f23..e87df54c 100644 --- a/terminal.h +++ b/terminal.h @@ -552,8 +552,8 @@ struct terminal { bool window_title_has_been_set; char *window_title; tll(char *) window_title_stack; - char *window_icon; - tll(char *)window_icon_stack; + //char *window_icon; /* No escape sequence available to set the icon */ + //tll(char *)window_icon_stack; char *app_id; struct { @@ -932,7 +932,6 @@ void term_set_user_mouse_cursor(struct terminal *term, const char *cursor); void term_set_window_title(struct terminal *term, const char *title); void term_set_app_id(struct terminal *term, const char *app_id); -void term_set_icon(struct terminal *term, const char *icon); const char *term_icon(const struct terminal *term); void term_flash(struct terminal *term, unsigned duration_ms); void term_bell(struct terminal *term);