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],