changeset 27215:274766cae722

allow building with Qt4 to work again * acinclude.m4 (OCTAVE_CHECK_FUNC_QWHEELEVENT_ANGLEDELTA): New macro. (OCTAVE_CHECK_QT_VERSION): Use it. * QtHandlesUtils.cc (makeScrollEventStruct): Work with both Qt4 and Qt5.
author John W. Eaton <jwe@octave.org>
date Wed, 26 Jun 2019 12:09:37 -0400
parents 47589e990a27
children 823b4bcf79fc
files libgui/graphics/QtHandlesUtils.cc m4/acinclude.m4
diffstat 2 files changed, 45 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/QtHandlesUtils.cc	Tue Apr 02 12:00:29 2019 +0000
+++ b/libgui/graphics/QtHandlesUtils.cc	Wed Jun 26 12:09:37 2019 -0400
@@ -391,8 +391,14 @@
 
       // We assume a standard mouse with 15 degree steps and Qt returns
       // 1/8 of a degree.
-      retval.setfield ("VerticalScrollCount",
-                       octave_value (- event->angleDelta().y () / 120));
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+      int ydelta = -(event->angleDelta().y ());
+#else
+      int ydelta = (event->orientation () == Qt::Vertical
+                    ? -(event->delta ()) : 0);
+#endif
+      retval.setfield ("VerticalScrollCount", octave_value (ydelta / 120));
+
       // FIXME: Is there any way to access the number of lines a scroll step
       // should correspond to?
       retval.setfield ("VerticalScrollAmount", octave_value (3));
--- a/m4/acinclude.m4	Tue Apr 02 12:00:29 2019 +0000
+++ b/m4/acinclude.m4	Wed Jun 26 12:09:37 2019 -0400
@@ -693,6 +693,42 @@
   fi
 ])
 dnl
+dnl Check whether the Qt class QWheelEvent has the angleDelta member function.
+dnl This member function was introduced in Qt 5.
+dnl
+dnl FIXME: Delete this entirely when we drop support for Qt 4.
+dnl
+AC_DEFUN([OCTAVE_CHECK_FUNC_QWHEELEVENT_ANGLEDELTA], [
+  AC_CACHE_CHECK([for QWheelEvent::angleDelta in <QWheelEvent>],
+    [octave_cv_func_qwheelevent_angledelta],
+    [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 <QWheelEvent>
+        class wheel_event : public QWheelEvent
+        {
+        public:
+          wheel_event (QWidget *parent = 0) : QWheelEvent (parent) { this->angleDelta (); }
+          ~wheel_event () {}
+        };
+        ]], [[
+        wheel_event tw;
+        ]])],
+      octave_cv_func_qwheelevent_angledelta=yes,
+      octave_cv_func_qwheelevent_angledelta=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_func_qwheelevent_angledelta = yes; then
+    AC_DEFINE(HAVE_QWHEELEVENT_ANGLEDELTA, 1,
+      [Define to 1 if you have the `QWheelEvent::angleDelta' member function.])
+  fi
+])
+dnl
 dnl Check whether Qt message handler function accepts QMessageLogContext
 dnl argument.  This change was introduced in Qt 5.
 dnl
@@ -2107,6 +2143,7 @@
     OCTAVE_CHECK_FUNC_QSCREEN_DEVICEPIXELRATIO
     OCTAVE_CHECK_FUNC_QTABWIDGET_SETMOVABLE
     OCTAVE_CHECK_FUNC_QTMESSAGEHANDLER_ACCEPTS_QMESSAGELOGCONTEXT
+    OCTAVE_CHECK_FUNC_QWHEELEVENT_ANGLEDELTA
     OCTAVE_CHECK_MEMBER_QFONT_FORCE_INTEGER_METRICS
     OCTAVE_CHECK_MEMBER_QFONT_MONOSPACE
     OCTAVE_HAVE_QGUIAPPLICATION