Mercurial > octave
changeset 29271:0348f3f57e3c stable
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.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 04 Jan 2021 13:37:34 -0500 |
parents | a3d92c4ad550 |
children | 59696b24ea53 |
files | libgui/src/octave-dock-widget.cc libgui/src/resource-manager.cc libgui/src/variable-editor-model.cc m4/acinclude.m4 |
diffstat | 4 files changed, 82 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.cc Tue Jan 05 18:19:15 2021 +0100 +++ b/libgui/src/octave-dock-widget.cc Mon Jan 04 13:37:34 2021 -0500 @@ -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 ();
--- a/libgui/src/resource-manager.cc Tue Jan 05 18:19:15 2021 +0100 +++ b/libgui/src/resource-manager.cc Mon Jan 04 13:37:34 2021 -0500 @@ -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
--- a/libgui/src/variable-editor-model.cc Tue Jan 05 18:19:15 2021 +0100 +++ b/libgui/src/variable-editor-model.cc Mon Jan 04 13:37:34 2021 -0500 @@ -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;
--- a/m4/acinclude.m4 Tue Jan 05 18:19:15 2021 +0100 +++ b/m4/acinclude.m4 Mon Jan 04 13:37:34 2021 -0500 @@ -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 <QFontDatabase> + #include <QFont> + ]], [[ + 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 <QMetaType> + #include <QVariant> + ]], [[ + 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