aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface-gtk/gtk-label.c
diff options
context:
space:
mode:
authorRobin Haberkorn <rhaberkorn@fmsbw.de>2025-12-23 13:54:17 +0100
committerRobin Haberkorn <rhaberkorn@fmsbw.de>2025-12-23 13:54:17 +0100
commit0c89fb700957e411885e7e7835e15f441e8b5e84 (patch)
tree56d756d6fa1923a5198504a322ec9c67cf274922 /src/interface-gtk/gtk-label.c
parent2592ef74ab2eba57c32fe21993ce01e9698b106f (diff)
fixed clicking the "(Unnamed)" buffer in 0EB popups
* When constructing the list of popup items, the unnamed buffer is stored as the empty string instead of a prerendered "(Unnamed)". Using the empty string simplifies autocompletions, which will actually have to insert nothing at all (in addition to terminating the string). * Since unnamed buffers are now special in the popup list, we can render them with special icons as well. Currently, only on Curses we use a file symbol with a question mark. There doesn't appear to be a fitting standard Freedesktop icon to use on GTK and there isn't even any fitting standard emblem to lay over the default file icon.
Diffstat (limited to 'src/interface-gtk/gtk-label.c')
-rw-r--r--src/interface-gtk/gtk-label.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/interface-gtk/gtk-label.c b/src/interface-gtk/gtk-label.c
index e4b2823..e148652 100644
--- a/src/interface-gtk/gtk-label.c
+++ b/src/interface-gtk/gtk-label.c
@@ -32,7 +32,9 @@
#include "gtk-label.h"
-#define GDK_TO_PANGO_COLOR(X) ((guint16)((X) * G_MAXUINT16))
+#define TECO_UNNAMED_FILE "(Unnamed)"
+
+#define GDK_TO_PANGO_COLOR(X) ((guint16)((X) * G_MAXUINT16))
struct _TecoGtkLabel {
GtkLabel parent_instance;
@@ -40,6 +42,7 @@ struct _TecoGtkLabel {
PangoColor fg, bg;
guint16 fg_alpha, bg_alpha;
+ /** text backing the label or empty string for "(Unnamed)" buffer */
teco_string_t string;
};
@@ -251,19 +254,22 @@ teco_gtk_label_set_text(TecoGtkLabel *self, const gchar *str, gssize len)
teco_string_clear(&self->string);
teco_string_init(&self->string, str, len < 0 ? strlen(str) : len);
+ teco_string_t string = self->string;
+ if (!string.len) {
+ string.data = TECO_UNNAMED_FILE;
+ string.len = strlen(string.data);
+ }
+
g_autofree gchar *plaintext = NULL;
+ PangoAttrList *attribs = NULL;
- if (self->string.len > 0) {
- PangoAttrList *attribs = NULL;
+ teco_gtk_label_parse_string(string.data, string.len,
+ &self->fg, self->fg_alpha,
+ &self->bg, self->bg_alpha,
+ &attribs, &plaintext);
- teco_gtk_label_parse_string(self->string.data, self->string.len,
- &self->fg, self->fg_alpha,
- &self->bg, self->bg_alpha,
- &attribs, &plaintext);
-
- gtk_label_set_attributes(GTK_LABEL(self), attribs);
- pango_attr_list_unref(attribs);
- }
+ gtk_label_set_attributes(GTK_LABEL(self), attribs);
+ pango_attr_list_unref(attribs);
gtk_label_set_text(GTK_LABEL(self), plaintext);
}