Added a new tree-store column (COL_UNDERLINE) for channel rows so the UI can track underline state per channel entry in the channel list model.

Initialized each new channel row with PANGO_UNDERLINE_NONE so only the active channel gets emphasized.
Updated tree selection handling to remove underline from the previously focused row and apply PANGO_UNDERLINE_SINGLE to the newly selected row, creating a clear “currently viewed channel” indicator.
Bound the channel name renderer’s underline property to the new model column so underline changes are reflected immediately in the channel list UI.
This commit is contained in:
2026-02-17 20:51:13 -07:00
parent f90783c298
commit 18632bc5fd
2 changed files with 26 additions and 4 deletions

View File

@@ -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);

View File

@@ -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)