From 4112ca8b399579642ad78b40fc5b8cece5b4743c Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Wed, 18 Mar 2026 11:27:13 -0600 Subject: [PATCH] Use Windows native font dialog in prefs in Windows. --- src/fe-gtk/setup.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c index 985d9e11..46b58542 100644 --- a/src/fe-gtk/setup.c +++ b/src/fe-gtk/setup.c @@ -46,6 +46,8 @@ #ifdef WIN32 #include "../common/fe.h" +#include +#include #endif #include "sexy-spell-entry.h" @@ -1236,6 +1238,34 @@ setup_browsefolder_cb (GtkWidget *button, GtkEntry *entry) static void setup_browsefont_cb (GtkWidget *button, GtkWidget *entry) { +#ifdef WIN32 + CHOOSEFONTW choose_font; + LOGFONTW log_font; + gunichar2 utf16_name[LF_FACESIZE]; + gchar *font_name; + gchar font_spec[FONTNAMELEN + 1]; + gint point_size; + + memset (&choose_font, 0, sizeof (choose_font)); + memset (&log_font, 0, sizeof (log_font)); + + choose_font.lStructSize = sizeof (choose_font); + choose_font.Flags = CF_SCREENFONTS | CF_FORCEFONTEXIST | CF_INITTOLOGFONTSTRUCT; + choose_font.lpLogFont = &log_font; + + if (ChooseFontW (&choose_font)) + { + memcpy (utf16_name, log_font.lfFaceName, sizeof (utf16_name)); + font_name = g_utf16_to_utf8 (utf16_name, -1, NULL, NULL, NULL); + if (font_name && font_name[0]) + { + point_size = choose_font.iPointSize > 0 ? choose_font.iPointSize / 10 : 11; + g_snprintf (font_spec, sizeof (font_spec), "%s %d", font_name, point_size); + gtk_entry_set_text (GTK_ENTRY (entry), font_spec); + } + g_free (font_name); + } +#else GtkWidget *dialog; const char *font_name; @@ -1253,6 +1283,7 @@ setup_browsefont_cb (GtkWidget *button, GtkWidget *entry) G_CALLBACK (setup_fontchooser_response), entry); gtk_widget_show (dialog); +#endif } static void