fixed setting the font size via css syntax - Closes Bug #55006
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Fri, 16 Nov 2018 19:16:53 +0000 (20:16 +0100)
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>
Fri, 16 Nov 2018 19:16:53 +0000 (20:16 +0100)
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
src/ui/gui/psppire-dialog-action-comments.c

index 97b18e1b06a6c3b9a31b702b17615771f5e6ceb0..6e7a0369671ea715eda8f30e8cc124fb6b150ef7 100644 (file)
@@ -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);
index ca7ad41bfa73182eff89112b714b9f105c86b47f..e601a60d4520d8d730d0f34d0c0e83f6366c7ccc 100644 (file)
@@ -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",