From 18632bc5fdab66b0a9349b46989e7fd0d0a823a0 Mon Sep 17 00:00:00 2001 From: deepend Date: Tue, 17 Feb 2026 20:51:13 -0700 Subject: [PATCH] =?UTF-8?q?Added=20a=20new=20tree-store=20column=20(COL=5F?= =?UTF-8?q?UNDERLINE)=20for=20channel=20rows=20so=20the=20UI=20can=20track?= =?UTF-8?q?=20underline=20state=20per=20channel=20entry=20in=20the=20chann?= =?UTF-8?q?el=20list=20model.=20Initialized=20each=20new=20channel=20row?= =?UTF-8?q?=20with=20PANGO=5FUNDERLINE=5FNONE=20so=20only=20the=20active?= =?UTF-8?q?=20channel=20gets=20emphasized.=20Updated=20tree=20selection=20?= =?UTF-8?q?handling=20to=20remove=20underline=20from=20the=20previously=20?= =?UTF-8?q?focused=20row=20and=20apply=20PANGO=5FUNDERLINE=5FSINGLE=20to?= =?UTF-8?q?=20the=20newly=20selected=20row,=20creating=20a=20clear=20?= =?UTF-8?q?=E2=80=9Ccurrently=20viewed=20channel=E2=80=9D=20indicator.=20B?= =?UTF-8?q?ound=20the=20channel=20name=20renderer=E2=80=99s=20underline=20?= =?UTF-8?q?property=20to=20the=20new=20model=20column=20so=20underline=20c?= =?UTF-8?q?hanges=20are=20reflected=20immediately=20in=20the=20channel=20l?= =?UTF-8?q?ist=20UI.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/fe-gtk/chanview-tree.c | 21 ++++++++++++++++++++- src/fe-gtk/chanview.c | 9 ++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/fe-gtk/chanview-tree.c b/src/fe-gtk/chanview-tree.c index 7d3c351c..b4279de3 100644 --- a/src/fe-gtk/chanview-tree.c +++ b/src/fe-gtk/chanview-tree.c @@ -41,13 +41,28 @@ static void /* row selected callback */ cv_tree_sel_cb (GtkTreeSelection *sel, chanview *cv) { GtkTreeModel *model; + GtkTreeIter prev_iter; GtkTreeIter iter; chan *ch; + chan *prev_ch; + gboolean has_prev; + + has_prev = cv->focused && gtk_tree_store_iter_is_valid (cv->store, &cv->focused->iter); + if (has_prev) + prev_iter = cv->focused->iter; if (gtk_tree_selection_get_selected (sel, &model, &iter)) { gtk_tree_model_get (model, &iter, COL_CHAN, &ch, -1); + if (has_prev) + { + gtk_tree_model_get (model, &prev_iter, COL_CHAN, &prev_ch, -1); + if (prev_ch != ch) + gtk_tree_store_set (cv->store, &prev_iter, COL_UNDERLINE, PANGO_UNDERLINE_NONE, -1); + } + gtk_tree_store_set (cv->store, &iter, COL_UNDERLINE, PANGO_UNDERLINE_SINGLE, -1); + cv->focused = ch; cv->cb_focus (cv, ch, ch->tag, ch->userdata); } @@ -175,7 +190,11 @@ cv_tree_init (chanview *cv) g_object_set (G_OBJECT (renderer), "ypad", 0, NULL); gtk_cell_renderer_text_set_fixed_height_from_font (GTK_CELL_RENDERER_TEXT (renderer), 1); gtk_tree_view_column_pack_start(col, renderer, TRUE); - gtk_tree_view_column_set_attributes (col, renderer, "text", COL_NAME, "attributes", COL_ATTR, NULL); + gtk_tree_view_column_set_attributes (col, renderer, + "text", COL_NAME, + "attributes", COL_ATTR, + "underline", COL_UNDERLINE, + NULL); gtk_tree_view_column_set_expand (col, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); diff --git a/src/fe-gtk/chanview.c b/src/fe-gtk/chanview.c index f4055d54..90de36d7 100644 --- a/src/fe-gtk/chanview.c +++ b/src/fe-gtk/chanview.c @@ -35,6 +35,7 @@ #define COL_CHAN 1 /* (chan *) */ #define COL_ATTR 2 /* (PangoAttrList *) */ #define COL_PIXBUF 3 /* (GdkPixbuf *) */ +#define COL_UNDERLINE 4 /* (PangoUnderline) */ struct _chanview { @@ -310,8 +311,8 @@ chanview_new (int type, int trunc_len, gboolean sort, gboolean use_icons, chanview *cv; cv = g_new0 (chanview, 1); - cv->store = gtk_tree_store_new (4, G_TYPE_STRING, G_TYPE_POINTER, - PANGO_TYPE_ATTR_LIST, GDK_TYPE_PIXBUF); + cv->store = gtk_tree_store_new (5, G_TYPE_STRING, G_TYPE_POINTER, + PANGO_TYPE_ATTR_LIST, GDK_TYPE_PIXBUF, G_TYPE_INT); #if HAVE_GTK3 cv->font_desc = font_desc; #else @@ -429,7 +430,9 @@ chanview_add_real (chanview *cv, char *name, void *family, void *userdata, memcpy (&(ch->iter), &iter, sizeof (iter)); gtk_tree_store_set (cv->store, &iter, COL_NAME, name, COL_CHAN, ch, - COL_PIXBUF, icon, -1); + COL_PIXBUF, icon, + COL_UNDERLINE, PANGO_UNDERLINE_NONE, + -1); cv->size++; if (!has_parent)