Added a GTK3 CSS font provider helper and updated emoji font application to avoid deprecated override APIs in GTK3 builds.

Switched GTK3 setup color previews, entry styling, and user list palette updates to use gtkutil_apply_palette instead of deprecated GTK3 overrides.
This commit is contained in:
2026-01-31 13:49:06 -07:00
parent 1fb1865aca
commit 29ac0f9ee6
2 changed files with 64 additions and 36 deletions

View File

@@ -117,6 +117,44 @@ mg_color_component_to_pango (double value)
return (guint16)(value * 65535.0 + 0.5);
}
#if HAVE_GTK3
static void
mg_apply_font_css (GtkWidget *widget, const PangoFontDescription *desc,
const char *class_name, const char *provider_key)
{
GtkStyleContext *context;
GtkCssProvider *provider;
char *font_str;
GString *css;
if (!widget || !desc)
return;
context = gtk_widget_get_style_context (widget);
if (!context)
return;
provider = g_object_get_data (G_OBJECT (widget), provider_key);
if (!provider)
{
provider = gtk_css_provider_new ();
g_object_set_data_full (G_OBJECT (widget), provider_key, provider, g_object_unref);
}
font_str = pango_font_description_to_string (desc);
css = g_string_new (".");
g_string_append (css, class_name);
g_string_append_printf (css, " { font: %s; }", font_str);
gtk_css_provider_load_from_data (provider, css->str, -1, NULL);
g_string_free (css, TRUE);
g_free (font_str);
gtk_style_context_add_class (context, class_name);
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
#endif
static void
mg_set_label_alignment_start (GtkWidget *widget)
{
@@ -3243,7 +3281,8 @@ mg_apply_emoji_fallback_widget (GtkWidget *widget)
return;
#if HAVE_GTK3
gtk_widget_override_font (widget, desc);
mg_apply_font_css (widget, desc, "zoitechat-emoji-font",
"zoitechat-emoji-font-provider");
#else
gtk_widget_modify_font (widget, desc);
#endif
@@ -3285,7 +3324,8 @@ mg_apply_emoji_primary_widget (GtkWidget *widget)
return;
#if HAVE_GTK3
gtk_widget_override_font (widget, desc);
mg_apply_font_css (widget, desc, "zoitechat-emoji-font",
"zoitechat-emoji-font-provider");
#else
gtk_widget_modify_font (widget, desc);
#endif

View File

@@ -1692,15 +1692,7 @@ setup_color_button_apply (GtkWidget *button, const PaletteColor *color)
{
GtkWidget *target = g_object_get_data (G_OBJECT (button), "zoitechat-color-box");
GtkWidget *apply_widget = GTK_IS_WIDGET (target) ? target : button;
#if HAVE_GTK3
GtkStateFlags states[] = {
GTK_STATE_FLAG_NORMAL,
GTK_STATE_FLAG_PRELIGHT,
GTK_STATE_FLAG_ACTIVE,
GTK_STATE_FLAG_SELECTED,
GTK_STATE_FLAG_INSENSITIVE
};
#else
#if !HAVE_GTK3
GtkStateType states[] = {
GTK_STATE_NORMAL,
GTK_STATE_PRELIGHT,
@@ -1711,18 +1703,18 @@ setup_color_button_apply (GtkWidget *button, const PaletteColor *color)
#endif
guint i;
for (i = 0; i < G_N_ELEMENTS (states); i++)
#if HAVE_GTK3
gtk_widget_override_background_color (apply_widget, states[i], color);
gtkutil_apply_palette (apply_widget, color, NULL, NULL);
#else
for (i = 0; i < G_N_ELEMENTS (states); i++)
gtk_widget_modify_bg (apply_widget, states[i], color);
#endif
if (apply_widget != button)
for (i = 0; i < G_N_ELEMENTS (states); i++)
#if HAVE_GTK3
gtk_widget_override_background_color (button, states[i], color);
gtkutil_apply_palette (button, color, NULL, NULL);
#else
for (i = 0; i < G_N_ELEMENTS (states); i++)
gtk_widget_modify_bg (button, states[i], color);
#endif
@@ -2803,9 +2795,8 @@ static void
setup_apply_entry_style (GtkWidget *entry)
{
#if HAVE_GTK3
gtk_widget_override_background_color (entry, GTK_STATE_FLAG_NORMAL, &colors[COL_BG]);
gtk_widget_override_color (entry, GTK_STATE_FLAG_NORMAL, &colors[COL_FG]);
gtk_widget_override_font (entry, input_style->font_desc);
gtkutil_apply_palette (entry, &colors[COL_BG], &colors[COL_FG],
input_style->font_desc);
#else
gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &colors[COL_BG]);
gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &colors[COL_FG]);
@@ -2819,29 +2810,26 @@ setup_apply_to_sess (session_gui *gui)
mg_update_xtext (gui->xtext);
chanview_apply_theme ((chanview *) gui->chanview);
if (prefs.hex_gui_ulist_style)
{
#if HAVE_GTK3
gtk_widget_override_font (gui->user_tree, input_style->font_desc);
#else
gtk_widget_modify_font (gui->user_tree, input_style->font_desc);
#if !HAVE_GTK3
if (prefs.hex_gui_ulist_style)
gtk_widget_modify_font (gui->user_tree, input_style->font_desc);
#endif
}
#if HAVE_GTK3
if (prefs.hex_gui_ulist_style || fe_dark_mode_is_enabled ())
{
gtk_widget_override_background_color (gui->user_tree, GTK_STATE_FLAG_NORMAL, &colors[COL_BG]);
const PaletteColor *bg = NULL;
const PaletteColor *fg = NULL;
const PangoFontDescription *font = NULL;
if (prefs.hex_gui_ulist_style || fe_dark_mode_is_enabled ())
bg = &colors[COL_BG];
if (fe_dark_mode_is_enabled ())
gtk_widget_override_color (gui->user_tree, GTK_STATE_FLAG_NORMAL, &colors[COL_FG]);
else
gtk_widget_override_color (gui->user_tree, GTK_STATE_FLAG_NORMAL, NULL);
}
else
{
gtk_widget_override_background_color (gui->user_tree, GTK_STATE_FLAG_NORMAL, NULL);
gtk_widget_override_color (gui->user_tree, GTK_STATE_FLAG_NORMAL, NULL);
}
fg = &colors[COL_FG];
if (prefs.hex_gui_ulist_style)
font = input_style->font_desc;
gtkutil_apply_palette (gui->user_tree, bg, fg, font);
}
#else
if (prefs.hex_gui_ulist_style || fe_dark_mode_is_enabled ())
{