diff --git a/libgui/src/octave-dock-widget.cc b/libgui/src/octave-dock-widget.cc --- a/libgui/src/octave-dock-widget.cc +++ b/libgui/src/octave-dock-widget.cc @@ -507,7 +507,12 @@ namespace octave QVariant dock_geom = settings->value (dw_dock_geometry.key.arg (objectName ()), default_dock_size); - if (dock_geom.canConvert (QMetaType::QRect)) +#if defined (HAVE_QMETATYPE_QRECT) + QMetaType::Type rect_type = QMetaType::QRect; +#else + QVariant::Type rect_type = QVariant::Rect; +#endif + if (dock_geom.canConvert (rect_type)) m_recent_dock_geom = dock_geom.toRect (); else m_recent_dock_geom = dw_dock_geometry.def.toRect (); diff --git a/libgui/src/resource-manager.cc b/libgui/src/resource-manager.cc --- a/libgui/src/resource-manager.cc +++ b/libgui/src/resource-manager.cc @@ -241,9 +241,17 @@ namespace octave // if macOS default font is not available): use QFontDatabase if (default_family.isEmpty ()) { +#if defined (HAVE_QFONTDATABASE_SYSTEMFONT) // Get the system's default monospaced font QFont fixed_font = QFontDatabase::systemFont (QFontDatabase::FixedFont); default_family = fixed_font.defaultFamily (); +#elif defined (HAVE_QFONT_MONOSPACE) + QFont fixed_font; + fixed_font.setStyleHint (QFont::Monospace); + default_family = fixed_font.defaultFamily (); +#else + default_family = global_font_family; +#endif } // Test env variable which has preference diff --git a/libgui/src/variable-editor-model.cc b/libgui/src/variable-editor-model.cc --- a/libgui/src/variable-editor-model.cc +++ b/libgui/src/variable-editor-model.cc @@ -987,7 +987,12 @@ namespace octave variable_editor_model::setData (const QModelIndex& idx, const QVariant& v_user_input, int role) { - if (role != Qt::EditRole || ! v_user_input.canConvert (QVariant::String) +#if defined (HAVE_QMETATYPE_QSTRING) + QMetaType::Type string_type = QMetaType::QString; +#else + QVariant::Type string_type = QVariant::String; +#endif + if (role != Qt::EditRole || ! v_user_input.canConvert (string_type) || ! idx.isValid ()) return false; diff --git a/m4/acinclude.m4 b/m4/acinclude.m4 --- a/m4/acinclude.m4 +++ b/m4/acinclude.m4 @@ -1091,6 +1091,35 @@ AC_DEFUN([OCTAVE_CHECK_QT_SPLITBEHAVIOR_ fi ]) dnl +dnl Check whether the Qt class QFontDatabase has the systemFont member +dnl function. This function was introduced in Qt 5.2. +dnl +AC_DEFUN([OCTAVE_CHECK_FUNC_QFONTDATABASE_SYSTEMFONT], [ + AC_CACHE_CHECK([for QFontDatabase::systemFont function], + [octave_cv_func_qfontdatabase_systemfont], + [AC_LANG_PUSH(C++) + ac_octave_save_CPPFLAGS="$CPPFLAGS" + ac_octave_save_CXXFLAGS="$CXXFLAGS" + CPPFLAGS="$QT_CPPFLAGS $CXXPICFLAG $CPPFLAGS" + CXXFLAGS="$CXXPICFLAG $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]], [[ + QFont font = QFontDatabase::systemFont (QFontDatabase::FixedFont); + ]])], + octave_cv_func_qfontdatabase_systemfont=yes, + octave_cv_func_qfontdatabase_systemfont=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_func_qfontdatabase_systemfont = yes; then + AC_DEFINE(HAVE_QFONTDATABASE_SYSTEMFONT, 1, + [Define to 1 if you have the `QFontDatabase::systemFont' function.]) + fi +]) +dnl dnl Check whether the Qt class QList has a constructor that accepts dnl a pair of iterators. This constructor was introduced in Qt 5.14. dnl @@ -1967,6 +1996,62 @@ AC_DEFUN([OCTAVE_CHECK_MEMBER_QFONT_MONO fi ]) dnl +dnl Check whether the Qt class QMetaType has the QRect enumerated type member. +dnl This property was introduced in Qt 5. +dnl +AC_DEFUN([OCTAVE_CHECK_MEMBER_QMETATYPE_QRECT], [ + AC_CACHE_CHECK([for QMetaType::QRect in ], + [octave_cv_decl_qmetatype_qrect], + [AC_LANG_PUSH(C++) + ac_octave_save_CPPFLAGS="$CPPFLAGS" + ac_octave_save_CXXFLAGS="$CXXFLAGS" + CPPFLAGS="$QT_CPPFLAGS $CXXPICFLAG $CPPFLAGS" + CXXFLAGS="$CXXPICFLAG $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + QMetaType::Type type = QMetaType::QRect; + ]])], + octave_cv_decl_qmetatype_qrect=yes, + octave_cv_decl_qmetatype_qrect=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_decl_qmetatype_qrect = yes; then + AC_DEFINE(HAVE_QMETATYPE_QRECT, 1, + [Define to 1 if `QRect' is a member of `QMetaType'.]) + fi +]) +dnl +dnl Check whether the Qt class QMetaType has the QString enumerated type member. +dnl This property was introduced in Qt 5. +dnl +AC_DEFUN([OCTAVE_CHECK_MEMBER_QMETATYPE_QSTRING], [ + AC_CACHE_CHECK([for QMetatype::QString in ], + [octave_cv_decl_qmetatype_qstring], + [AC_LANG_PUSH(C++) + ac_octave_save_CPPFLAGS="$CPPFLAGS" + ac_octave_save_CXXFLAGS="$CXXFLAGS" + CPPFLAGS="$QT_CPPFLAGS $CXXPICFLAG $CPPFLAGS" + CXXFLAGS="$CXXPICFLAG $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + QMetaType::Type type = QMetaType::QString; + ]])], + octave_cv_decl_qmetatype_qstring=yes, + octave_cv_decl_qmetatype_qstring=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_decl_qmetatype_qstring = yes; then + AC_DEFINE(HAVE_QMETATYPE_QSTRING, 1, + [Define to 1 if `QString' is a member of `QMetaType'.]) + fi +]) +dnl dnl Check for the Qhull version. dnl AC_DEFUN([OCTAVE_CHECK_QHULL_VERSION], [ @@ -2518,6 +2603,7 @@ AC_DEFUN([OCTAVE_CHECK_QT_VERSION], [AC_ ## version that we are testing now will be the one used. OCTAVE_CHECK_FUNC_QCOMBOBOX_SETCURRENTTEXT + OCTAVE_CHECK_FUNC_QFONTDATABASE_SYSTEMFONT OCTAVE_CHECK_FUNC_QFONTMETRICS_HORIZONTAL_ADVANCE OCTAVE_CHECK_FUNC_QGUIAPPLICATION_SETDESKTOPFILENAME OCTAVE_CHECK_FUNC_QHEADERVIEW_SETSECTIONRESIZEMODE @@ -2539,6 +2625,8 @@ AC_DEFUN([OCTAVE_CHECK_QT_VERSION], [AC_ OCTAVE_CHECK_FUNC_QWHEELEVENT_POSITION OCTAVE_CHECK_MEMBER_QFONT_FORCE_INTEGER_METRICS OCTAVE_CHECK_MEMBER_QFONT_MONOSPACE + OCTAVE_CHECK_MEMBER_QMETATYPE_QRECT + OCTAVE_CHECK_MEMBER_QMETATYPE_QSTRING OCTAVE_HAVE_QGUIAPPLICATION OCTAVE_CHECK_QREGION_ITERATORS