changeset 18036:c97ee13f1027 stable

fix build for systems without QFont::Monospace * acinclude.m4 (OCTAVE_CHECK_QFONT_MONOSPACE): New macro. * configure.ac: Use it. * resource-manager.cc (resource_manager::do_reload_settings): Provide fallback for default font family if QFont::Monospace is not available.
author John W. Eaton <jwe@octave.org>
date Mon, 02 Dec 2013 11:29:22 -0500
parents 8bc09600f0ed
children 708173343c50
files configure.ac libgui/src/resource-manager.cc m4/acinclude.m4
diffstat 3 files changed, 41 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Sat Nov 30 08:42:24 2013 -0800
+++ b/configure.ac	Mon Dec 02 11:29:22 2013 -0500
@@ -2728,6 +2728,7 @@
   fi
 
   if test $build_gui = yes; then
+    OCTAVE_CHECK_QFONT_MONOSPACE
     OCTAVE_CHECK_FUNC_SETPLACEHOLDERTEXT
   fi
 
--- a/libgui/src/resource-manager.cc	Sat Nov 30 08:42:24 2013 -0800
+++ b/libgui/src/resource-manager.cc	Mon Dec 02 11:29:22 2013 -0500
@@ -192,18 +192,29 @@
       qt_settings.close ();
 
       // Get the default monospaced font and replace placeholder
-      QFont fixed_font = QFont ();
+#if defined (HAVE_QFONT_MONOSPACE)
+      QFont fixed_font;
       fixed_font.setStyleHint (QFont::Monospace);
-      settings_text.replace("__default_font__",fixed_font.defaultFamily ());
-      settings_text.replace("__default_font_size__","10");
+      QString default_family = fixed_font.defaultFamily ();
+#elif defined (Q_WS_X11) || defined (Q_WS_WIN)
+      QString default_family = "Courier New";
+#elif defined (Q_WS_MAC)
+      QString default_family = "Courier";
+#else
+      QString default_family = "courier";
+#endif
+      settings_text.replace ("__default_font__", default_family);
+      settings_text.replace ("__default_font_size__", "10");
 
       QFile user_settings (settings_file);
-      if (!user_settings.open (QIODevice::WriteOnly))
+
+      if (! user_settings.open (QIODevice::WriteOnly))
         return;
 
       QTextStream out (&user_settings);
+
       out << settings_text;
-      user_settings.flush ();
+
       user_settings.close ();
     }
 
--- a/m4/acinclude.m4	Sat Nov 30 08:42:24 2013 -0800
+++ b/m4/acinclude.m4	Mon Dec 02 11:29:22 2013 -0500
@@ -359,6 +359,30 @@
   fi
 ])
 dnl
+dnl Check whether Qt provides QFont::Monospace
+dnl
+AC_DEFUN([OCTAVE_CHECK_QFONT_MONOSPACE], [
+  AC_CACHE_CHECK([whether Qt provides QFont::Monospace],
+    [octave_cv_decl_qfont_monospace],
+    [AC_LANG_PUSH(C++)
+    ac_octave_save_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$QT_CPPFLAGS $CPPFLAGS"
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <QFont>
+        ]], [[
+        QFont::StyleHint hint = QFont::Monospace;
+        ]])],
+      octave_cv_decl_qfont_monospace=yes,
+      octave_cv_decl_qfont_monospace=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_decl_qfont_monospace = yes; then
+    AC_DEFINE(HAVE_QFONT_MONOSPACE, 1,
+      [Define to 1 if Qt provides QFont::Monospace.])
+  fi
+])
+dnl
 dnl Check whether Qscintilla SetPlaceholderText function exists.
 dnl FIXME: This test uses a version number.  It potentially could
 dnl        be re-written to actually call the function, but is it worth it?