# HG changeset patch # User John W. Eaton # Date 1609785454 18000 # Node ID 0348f3f57e3ca6fa7c8e5112622c756d00dd7dab # Parent a3d92c4ad5502686daf2b34f062db6c950db30ef avoid build errors with Qt4 (bug #59813) * acinclude.m4 (OCTAVE_CHECK_FUNC_QFONTDATABASE_SYSTEMFONT, OCTAVE_CHECK_QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE): New macros. (OCTAVE_CHECK_QT_VERSION): Use them. * resource-manager.cc (resource_manager::get_default_font_family): Check availability of QFontDatabase::systemFont, fall back on QFont::setStyleHint, then global_font_family. * octave-dock-widget.cc (octave_dock_widget::handle_settings): Check whether QVariant::canConvert accepts QMetatype::Type. Use QVariant::Type as fallback. * variable-editor-model.cc (variable_editor_model::setData): Likewise. 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 @@ QVariant dock_geom = settings->value (dw_dock_geometry.key.arg (objectName ()), default_dock_size); - if (dock_geom.canConvert (QMetaType::QRect)) +#if defined (QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE) + 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 @@ // 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 @@ 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 (QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE) + 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 @@ 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,37 @@ fi ]) dnl +dnl Check whether QVariant::canConvert accepts a QMetaType::Type +dnl enumeration value as an argument. +dnl +AC_DEFUN([OCTAVE_CHECK_QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE], [ + AC_CACHE_CHECK([whether QVariant::canConvert accepts QMetaType::Type argument], + [octave_cv_qvariant_canconvert_accepts_qmetatype_type], + [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 + ]], [[ + QVariant var; + QMetaType::Type type = QMetaType::QString; + var.canConvert (type); + ]])], + octave_cv_qvariant_canconvert_accepts_qmetatype_type=yes, + octave_cv_qvariant_canconvert_accepts_qmetatype_type=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_qvariant_canconvert_accepts_qmetatype_type = yes; then + AC_DEFINE(QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE, 1, + [Define to 1 if `QVariant::canConvert' accepts `QMetaType::Type' enumeration value as argument.]) + fi +]) +dnl dnl Check for the Qhull version. dnl AC_DEFUN([OCTAVE_CHECK_QHULL_VERSION], [ @@ -2518,6 +2578,7 @@ ## 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 +2600,7 @@ OCTAVE_CHECK_FUNC_QWHEELEVENT_POSITION OCTAVE_CHECK_MEMBER_QFONT_FORCE_INTEGER_METRICS OCTAVE_CHECK_MEMBER_QFONT_MONOSPACE + OCTAVE_CHECK_QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE OCTAVE_HAVE_QGUIAPPLICATION OCTAVE_CHECK_QREGION_ITERATORS