From 61efc26c4511f8c28c69d484a4a84c36ce6086db Mon Sep 17 00:00:00 2001 From: Friedrich Beckmann Date: Fri, 16 Nov 2018 20:16:53 +0100 Subject: [PATCH] fixed setting the font size via css syntax - Closes Bug #55006 The pspp 1.2.0 release showed a problem with setting the font via the font selection dialog. The root cause is that the style setting should be done via css syntax and not pango syntax. I changed the code to do the style setting via css syntax. See: https://savannah.gnu.org/bugs/?55006 The minimum width setting in the comment dialog does not work how it is implemented. I removed that code part as it does not seem to be crucial. At least on MacOS the default width is large enough to hold 80 characters. Even without that the user can increase the size of the dialog. --- src/ui/gui/psppire-data-editor.c | 11 +++++-- src/ui/gui/psppire-dialog-action-comments.c | 33 +-------------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 97b18e1b06..6e7a036967 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -579,10 +579,15 @@ set_font_recursively (GtkWidget *w, gpointer data) GtkStyleContext *style = gtk_widget_get_style_context (w); GtkCssProvider *cssp = gtk_css_provider_new (); - gchar *str = pango_font_description_to_string (font_desc); + /* The Pango font description as string has a different syntax than the + css style description: + Pango: Courier Italic 12 + CSS: italic 12pt Courier + I ignore Weight, Style and Variant and just take family and size */ + const gchar *str = pango_font_description_get_family (font_desc); + gint size = pango_font_description_get_size (font_desc); gchar *css = - g_strdup_printf ("* {font: %s}", str); - g_free (str); + g_strdup_printf ("* {font: %dpt %s}", size/PANGO_SCALE, str); GError *err = NULL; gtk_css_provider_load_from_data (cssp, css, -1, &err); diff --git a/src/ui/gui/psppire-dialog-action-comments.c b/src/ui/gui/psppire-dialog-action-comments.c index ca7ad41bfa..e601a60d45 100644 --- a/src/ui/gui/psppire-dialog-action-comments.c +++ b/src/ui/gui/psppire-dialog-action-comments.c @@ -183,24 +183,13 @@ psppire_dialog_action_comments_activate (PsppireDialogAction *pda, GVariant *par g_signal_connect_swapped (pda->dialog, "show", G_CALLBACK (retrieve_comments), pda); { - PangoContext * context ; - PangoLayout * layout ; - PangoRectangle rect; - - /* Since we're going to truncate lines to 80 chars, we need a monospaced font otherwise it'll look silly */ - PangoFontDescription *font_desc = - pango_font_description_from_string ("monospace"); { GtkStyleContext *style = gtk_widget_get_style_context (GTK_WIDGET (act->textview)); GtkCssProvider *cssp = gtk_css_provider_new (); - gchar *str = pango_font_description_to_string (font_desc); - gchar *css = - g_strdup_printf ("* {font: %s}", str); - g_free (str); - + const gchar *css = "* {font-family: monospace}"; GError *err = NULL; gtk_css_provider_load_from_data (cssp, css, -1, &err); if (err) @@ -208,32 +197,12 @@ psppire_dialog_action_comments_activate (PsppireDialogAction *pda, GVariant *par g_warning ("Failed to load font css \"%s\": %s", css, err->message); g_error_free (err); } - g_free (css); gtk_style_context_add_provider (style, GTK_STYLE_PROVIDER (cssp), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref (cssp); } - - /* And let's just make sure that a complete line fits into the - widget's width */ - context = gtk_widget_create_pango_context (act->textview); - layout = pango_layout_new (context); - - pango_layout_set_text (layout, "M", 1); - - pango_layout_set_font_description (layout, font_desc); - - pango_layout_get_extents (layout, NULL, &rect); - - g_object_set (act->textview, "width-request", - PANGO_PIXELS (rect.width) * DOC_LINE_LENGTH + 20, NULL); - - g_object_unref (G_OBJECT (layout)); - g_object_unref (G_OBJECT (context)); - - pango_font_description_free (font_desc); } GtkTextIter iter; g_signal_connect (buffer, "mark-set", -- 2.30.2