# HG changeset patch # User John W. Eaton # Date 1609785454 18000 # Mon Jan 04 13:37:34 2021 -0500 # Branch stable # Node ID 730c8245d2c15c5eff45a30fad2378273dffde46 # Parent 87ca5976c648cc01904f8ef53b576bfb5c8d48fd 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 @@ namespace octave 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 @@ 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 (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 @@ 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,37 @@ AC_DEFUN([OCTAVE_CHECK_MEMBER_QFONT_MONO 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 @@ 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 +2600,7 @@ 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_QVARIANT_CANCONVERT_ACCEPTS_QMETATYPE_TYPE OCTAVE_HAVE_QGUIAPPLICATION OCTAVE_CHECK_QREGION_ITERATORS