Mercurial > jwe > octave
changeset 24821:88665923596c
Make variable editor code compile under Qt4 (bug #53259)
* variable_editor.cc (variable_dock_widget::toplevel_change):
Condition the maximizing of the floated variable widget on having
QGuiApplication.
(variable_editor::construct_tool_bar): Use Qt::FindDirectChildrenOnly
only if it is available.
* acinclude.m4 (OCTAVE_HAVE_QGUIAPPLICATION,
OCTAVE_QOBJECT_FINDCHILDREN_ACCEPTS_FINDCHILDOPTIONS): New macros.
(OCTAVE_CHECK_QT_VERSION): Use them.
author | Daniel J Sebald <daniel.sebald@ieee.org> |
---|---|
date | Thu, 01 Mar 2018 23:19:55 -0600 |
parents | 735175432a20 |
children | 92b015dca875 |
files | libgui/src/variable-editor.cc m4/acinclude.m4 |
diffstat | 2 files changed, 87 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/variable-editor.cc Fri Mar 02 13:46:45 2018 +0100 +++ b/libgui/src/variable-editor.cc Thu Mar 01 23:19:55 2018 -0600 @@ -129,6 +129,11 @@ // Make initial size expanded very large for "magnified" viewing if (m_initial_float) { + // This will be resolved based on user feedback and preference + // and will eventually work without QGuiApplication. Perhaps + // a maximize button added to the label_dock_widget windows + // along with the dock/undock and close buttons is best. +#if defined (HAVE_QGUIAPPLICATION) QScreen *pscreen = QGuiApplication::primaryScreen (); QRect rect (0, 0, 0, 0); rect = pscreen->availableGeometry (); @@ -136,6 +141,7 @@ rect.width () - 10, rect.height () - 10); setGeometry (rect); m_initial_float = false; +#endif } setFocus (Qt::OtherFocusReason); @@ -1435,8 +1441,12 @@ // The QToolButton mouse-clicks change active window, so connect all // HoverToolButton and RuternFocusToolButton objects to the mechanism // that restores active window and focus before acting. - QList<HoverToolButton *> hbuttonlist = m_tool_bar-> - findChildren<HoverToolButton *> (QString (), Qt::FindDirectChildrenOnly); + QList<HoverToolButton *> hbuttonlist + = m_tool_bar->findChildren<HoverToolButton *> ("" +#if defined (QOBJECT_FINDCHILDREN_ACCEPTS_FINDCHILDOPTIONS) + , Qt::FindDirectChildrenOnly +#endif + ); for (int i = 0; i < hbuttonlist.size (); i++) { connect (hbuttonlist.at (i), SIGNAL (hovered_signal ()), @@ -1444,8 +1454,13 @@ connect (hbuttonlist.at (i), SIGNAL (popup_shown_signal ()), this, SLOT (restore_hovered_focus_variable ())); } - QList<ReturnFocusToolButton *> rfbuttonlist = m_tool_bar-> - findChildren<ReturnFocusToolButton *> (QString (), Qt::FindDirectChildrenOnly); + + QList<ReturnFocusToolButton *> rfbuttonlist + = m_tool_bar->findChildren<ReturnFocusToolButton *> ("" +#if defined (QOBJECT_FINDCHILDREN_ACCEPTS_FINDCHILDOPTIONS) + , Qt::FindDirectChildrenOnly +#endif + ); for (int i = 0; i < rfbuttonlist.size (); i++) { connect (rfbuttonlist.at (i), SIGNAL (about_to_activate ()), @@ -1453,8 +1468,8 @@ } // Same for QMenu - QList<ReturnFocusMenu *> menulist = m_tool_bar-> - findChildren<ReturnFocusMenu *> (QString ()); + QList<ReturnFocusMenu *> menulist + = m_tool_bar->findChildren<ReturnFocusMenu *> (); for (int i = 0; i < menulist.size (); i++) { connect (menulist.at (i), SIGNAL (about_to_activate ()),
--- a/m4/acinclude.m4 Fri Mar 02 13:46:45 2018 +0100 +++ b/m4/acinclude.m4 Thu Mar 01 23:19:55 2018 -0600 @@ -1254,6 +1254,70 @@ fi ]) dnl +dnl Check whether the Qt class QGuiApplication exists. This class +dnl was introduced in Qt 5.0. +dnl +dnl FIXME: Delete this entirely when we drop support for Qt 4. +dnl +AC_DEFUN([OCTAVE_HAVE_QGUIAPPLICATION], [ + AC_CACHE_CHECK([for QGuiApplication], + [octave_cv_decl_qguiapplication], + [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 <QGuiApplication> + ]], [[ + QScreen *pscreen = QGuiApplication::primaryScreen (); + ]])], + octave_cv_decl_qguiapplication=yes, + octave_cv_decl_qguiapplication=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_decl_qguiapplication = yes; then + AC_DEFINE(HAVE_QGUIAPPLICATION, 1, + [Define to 1 if `QGuiApplication' class is available.]) + fi +]) +dnl +dnl Check whether QObject::findChildren accepts Qt::FindChildOptions +dnl argument. +dnl +dnl FIXME: Delete this entirely when we drop support for Qt 4. +dnl +AC_DEFUN([OCTAVE_QOBJECT_FINDCHILDREN_ACCEPTS_FINDCHILDOPTIONS], [ + AC_CACHE_CHECK([whether QObject::findChildren accepts Qt::FindChildOptions], + [octave_cv_qobject_findchildren_accepts_findchildoptions], + [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 <QList> + #include <QObject> + #include <QWidget> + ]], [[ + QObject obj; + QList<QWidget *> widgets + = obj.findChildren<QWidget *> ("name", Qt::FindDirectChildrenOnly); + ]])], + octave_cv_qobject_findchildren_accepts_findchildoptions=yes, + octave_cv_qobject_findchildren_accepts_findchildoptions=no) + CPPFLAGS="$ac_octave_save_CPPFLAGS" + CXXFLAGS="$ac_octave_save_CXXFLAGS" + AC_LANG_POP(C++) + ]) + if test $octave_cv_qobject_findchildren_accepts_findchildoptions = yes; then + AC_DEFINE(QOBJECT_FINDCHILDREN_ACCEPTS_QFINDCHILDOPTIONS, 1, + [Define to 1 if `QObject::findChildren' accepts 'Qt::FindChildOptions' argument.]) + fi +]) +dnl dnl Check for the Qhull version. dnl AC_DEFUN([OCTAVE_CHECK_QHULL_VERSION], [ @@ -1774,6 +1838,8 @@ OCTAVE_CHECK_FUNC_QTABWIDGET_SETMOVABLE OCTAVE_CHECK_MEMBER_QFONT_FORCE_INTEGER_METRICS OCTAVE_CHECK_MEMBER_QFONT_MONOSPACE + OCTAVE_HAVE_QGUIAPPLICATION + OCTAVE_QOBJECT_FINDCHILDREN_ACCEPTS_FINDCHILDOPTIONS if test -n "$OPENGL_LIBS"; then OCTAVE_CHECK_QT_OPENGL_OK([build_qt_graphics=yes],