From 4fb72d30d84c85fbe4354c4fc7ddb2a85dca1621 Mon Sep 17 00:00:00 2001 From: deepend Date: Sat, 12 Sep 2026 06:43:08 -0600 Subject: [PATCH] add custom tab fonts and reduce close button size --- src/common/cfgfiles.c | 1 + src/common/zoitechat.h | 1 + src/fe-gtk/chanview-tabs.c | 21 +++++++++++++++++++++ src/fe-gtk/setup.c | 6 ++++++ 4 files changed, 29 insertions(+) diff --git a/src/common/cfgfiles.c b/src/common/cfgfiles.c index d6943b6f..f01cb479 100644 --- a/src/common/cfgfiles.c +++ b/src/common/cfgfiles.c @@ -443,6 +443,7 @@ const struct prefs vars[] = {"gui_tab_chans", P_OFFINT (hex_gui_tab_chans), TYPE_BOOL}, {"gui_tab_dialogs", P_OFFINT (hex_gui_tab_dialogs), TYPE_BOOL}, {"gui_tab_dots", P_OFFINT (hex_gui_tab_dots), TYPE_BOOL}, + {"gui_tab_font", P_OFFSET (hex_gui_tab_font), TYPE_STR}, {"gui_tab_icons", P_OFFINT (hex_gui_tab_icons), TYPE_BOOL}, {"gui_dark_mode", P_OFFINT (hex_gui_dark_mode), TYPE_INT}, {"gui_gtk3_variant", P_OFFINT (hex_gui_gtk3_variant), TYPE_INT}, diff --git a/src/common/zoitechat.h b/src/common/zoitechat.h index e17473f7..d2d94be8 100644 --- a/src/common/zoitechat.h +++ b/src/common/zoitechat.h @@ -315,6 +315,7 @@ struct zoitechatprefs char hex_dcc_completed_dir[PATHLEN + 1]; char hex_dcc_dir[PATHLEN + 1]; char hex_dcc_ip[DOMAINLEN + 1]; + char hex_gui_tab_font[FONTNAMELEN + 1]; char hex_gui_ulist_doubleclick[256]; char hex_input_command_char[4]; char hex_irc_extra_hilight[300]; diff --git a/src/fe-gtk/chanview-tabs.c b/src/fe-gtk/chanview-tabs.c index 9d342f3b..9c005f51 100644 --- a/src/fe-gtk/chanview-tabs.c +++ b/src/fe-gtk/chanview-tabs.c @@ -19,6 +19,8 @@ /* file included in chanview.c */ +#include "theme/theme-css.h" + typedef struct { GtkWidget *outer; /* outer box */ @@ -690,6 +692,7 @@ cv_tabs_add (chanview *cv, chan *ch, char *name, GtkTreeIter *parent) GtkWidget *label; GtkWidget *close_button; GtkWidget *close_icon; + GtkCssProvider *close_css; but = gtk_toggle_button_new (); gtk_widget_set_name (but, "zoitechat-tab"); @@ -698,9 +701,27 @@ cv_tabs_add (chanview *cv, chan *ch, char *name, GtkTreeIter *parent) cv_add_scroll_events (but); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); label = gtk_label_new (name); + if (prefs.hex_gui_tab_font[0]) + { + PangoFontDescription *font_desc; + + /* Keep activity colours and the Smaller text scale in the label attributes. */ + font_desc = pango_font_description_from_string (prefs.hex_gui_tab_font); + gtkutil_apply_palette (label, NULL, NULL, font_desc); + pango_font_description_free (font_desc); + } close_button = gtk_button_new (); cv_add_scroll_events (close_button); gtk_style_context_add_class (gtk_widget_get_style_context (close_button), "flat"); + gtk_style_context_add_class (gtk_widget_get_style_context (close_button), "zoitechat-tab-close"); + /* Theme button minimums and padding must not determine the tab height. */ + close_css = gtk_css_provider_new (); + gtk_css_provider_load_from_data (close_css, + ".zoitechat-tab-close { min-width: 0; min-height: 0; padding: 1px; margin: 0; }", + -1, NULL); + theme_css_apply_widget_provider (close_button, GTK_STYLE_PROVIDER (close_css)); + g_object_unref (close_css); + gtk_widget_set_valign (close_button, GTK_ALIGN_CENTER); close_icon = gtk_image_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_MENU); gtk_image_set_pixel_size (GTK_IMAGE (close_icon), 8); gtk_button_set_always_show_image (GTK_BUTTON (close_button), TRUE); diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c index 69ba0da1..89bdf09f 100644 --- a/src/fe-gtk/setup.c +++ b/src/fe-gtk/setup.c @@ -340,6 +340,9 @@ static const setting tabs_settings[] = {ST_TOGGLE, N_("Show close button on tabs"), P_OFFINTNL(hex_gui_tab_closebuttons), 0, 0, 0}, {ST_TOGGLE, N_("Middle click to close tab"), P_OFFINTNL(hex_gui_tab_middleclose), 0, 0, 0}, {ST_TOGGLE, N_("Smaller text"), P_OFFINTNL(hex_gui_tab_small), 0, 0, 0}, + {ST_EFONT, N_("Tab font:"), P_OFFSETNL(hex_gui_tab_font), + N_("Font for server and channel tabs in the Tabs layout. Leave blank to use the theme font. Smaller text still applies."), + 0, sizeof prefs.hex_gui_tab_font}, {ST_MENU, N_("Focus new tabs:"), P_OFFINTNL(hex_gui_tab_newtofront), 0, focusnewtabsmenu, 0}, {ST_MENU, N_("Placement of notices:"), P_OFFINTNL(hex_irc_notice_pos), 0, noticeposmenu, 0}, {ST_MENU, N_("Show channel switcher at:"), P_OFFINTNL(hex_gui_tab_pos), 0, cspos, 1}, @@ -2335,6 +2338,9 @@ setup_apply (struct zoitechatprefs *pr) if (DIFF (hex_gui_tab_icons) || DIFF (hex_gui_tab_closebuttons) || DIFF (hex_gui_tab_small)) live_changes.chanview = TRUE; + if (pr->hex_gui_tab_layout == 0 && + strcmp (pr->hex_gui_tab_font, prefs.hex_gui_tab_font) != 0) + live_changes.chanview = TRUE; if (DIFF (hex_gui_tab_sort)) live_changes.tab_resort = TRUE; if (DIFF (hex_gui_tab_trunc))