changeset 28845:50c112129700 stable

avoid deprecated Qt QRegion::rects function * TerminalView.cpp: If QRegion has C++ standard iterators, use range-based for loop directly with QRegion object instead of foreach with a QVector of QRect objects returned from QRegion::rects. * acinclude.m4 (OCTAVE_CHECK_QREGION_ITERATORS): New macro. (OCTAVE_CHECK_QT_VERSION): Use it.
author John W. Eaton <jwe@octave.org>
date Mon, 03 Aug 2020 09:07:11 -0400
parents 2df0c2d86d50
children 2219027f5bd4
files libgui/qterminal/libqterminal/unix/TerminalView.cpp m4/acinclude.m4
diffstat 2 files changed, 48 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Tue Jul 14 01:19:30 2020 -0400
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Mon Aug 03 09:07:11 2020 -0400
@@ -23,6 +23,10 @@
     02110-1301  USA.
 */
 
+#if defined (HAVE_CONFIG_H)
+#  include "config.h"
+#endif
+
 // Own
 #include "unix/TerminalView.h"
 
@@ -956,7 +960,11 @@
   QPainter paint(this);
   //qDebug("%s %d paintEvent %d %d", __FILE__, __LINE__, paint.window().top(), paint.window().right());
 
+#if defined (HAVE_QREGION_ITERATORS)
+  for (QRect rect : (pe->region() & contentsRect()))
+#else
   foreach (QRect rect, (pe->region() & contentsRect()).rects())
+#endif
     {
       drawBackground(paint,rect,palette().window().color());
       drawContents(paint, rect);
--- a/m4/acinclude.m4	Tue Jul 14 01:19:30 2020 -0400
+++ b/m4/acinclude.m4	Mon Aug 03 09:07:11 2020 -0400
@@ -896,6 +896,44 @@
   fi
 ])
 dnl
+dnl Check whether the Qt class QRegion has the iterators and related
+dnl functions introduced in Qt 5.8.
+dnl
+AC_DEFUN([OCTAVE_CHECK_QREGION_ITERATORS], [
+  AC_CACHE_CHECK([for QRegion iterators and related functions],
+    [octave_cv_qregion_iterators],
+    [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 <QRegion>
+        ]], [[
+        QRegion region;
+        QRegion::const_iterator it;
+        it = region.begin ();
+        it = region.end ();
+        it = region.cbegin ();
+        it = region.cend ();
+        QRegion::const_reverse_iterator rit;
+        rit = region.rbegin ();
+        rit = region.rend ();
+        rit = region.crbegin ();
+        rit = region.crend ();
+        ]])],
+      octave_cv_qregion_iterators=yes,
+      octave_cv_qregion_iterators=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_qregion_iterators = yes; then
+    AC_DEFINE(HAVE_QREGION_ITERATORS, 1,
+      [Define to 1 if you have the `QFontMetrics::horizontalAdvance' function.])
+  fi
+])
+dnl
 dnl Check whether HDF5 library has version 1.6 API functions.
 dnl
 AC_DEFUN([OCTAVE_CHECK_HDF5_HAS_VER_16_API], [
@@ -2308,6 +2346,8 @@
     OCTAVE_CHECK_MEMBER_QFONT_MONOSPACE
     OCTAVE_HAVE_QGUIAPPLICATION
 
+    OCTAVE_CHECK_QREGION_ITERATORS
+
     if test -n "$OPENGL_LIBS"; then
       OCTAVE_CHECK_QT_OPENGL_OK([build_qt_graphics=yes],
         [warn_qt_opengl="Qt does not work with the OpenGL libs (GL and GLU); disabling OpenGL graphics with Qt GUI"])