changeset 29054:226df400639c

maint: merge stable to default.
author John W. Eaton <jwe@octave.org>
date Thu, 12 Nov 2020 02:02:39 -0500
parents cde4b1d9f6ef (current diff) 0678fdb81efc (diff)
children dbf8a7f16c4e
files libgui/graphics/Canvas.cc libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/src/files-dock-widget.cc libgui/src/m-editor/octave-qscintilla.cc m4/acinclude.m4
diffstat 12 files changed, 207 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/graphics/Canvas.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -920,7 +920,12 @@
 
             if (childObj.isa ("axes"))
               {
-                graphics_object go = selectFromAxes (childObj, event->pos ());
+#if defined (HAVE_QWHEELEVENT_POSITION)
+                QPoint pos = event->position().toPoint ();
+#else
+                QPoint pos = event->pos ();
+#endif
+                graphics_object go = selectFromAxes (childObj, pos);
 
                 if (go)
                   {
@@ -946,7 +951,11 @@
 
                 if (zoom_enabled (figObj))
                   {
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+                    if (event->angleDelta().y () > 0)
+#else
                     if (event->delta () > 0)
+#endif
                       newMouseMode = ZoomInMode;
                     else
                       newMouseMode = ZoomOutMode;
@@ -988,7 +997,11 @@
                 {
                   axes::properties& ap = Utils::properties<axes> (axesObj);
 
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+                  double factor = (event->angleDelta().y () > 0 ? 0.1 : -0.1);
+#else
                   double factor = (event->delta () > 0 ? 0.1 : -0.1);
+#endif
 
                   if (event->modifiers () == Qt::NoModifier
                       && mode != "horizontal")
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -174,7 +174,11 @@
 QTerminal::run_selection ()
 {
   QStringList commands = selectedText ().split (QRegExp ("[\r\n]"),
+#if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
+                                                Qt::SkipEmptyParts);
+#else
                                                 QString::SkipEmptyParts);
+#endif
   for (int i = 0; i < commands.size (); i++)
     emit execute_command_in_terminal_signal (commands.at (i));
 
--- a/libgui/qterminal/libqterminal/unix/KeyboardTranslator.cpp	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/qterminal/libqterminal/unix/KeyboardTranslator.cpp	Thu Nov 12 02:02:39 2020 -0500
@@ -829,13 +829,13 @@
 void KeyboardTranslator::addEntry(const Entry& entry)
 {
     const int keyCode = entry.keyCode();
-    _entries.insertMulti(keyCode,entry);
+    _entries.insert(keyCode,entry);
 }
 void KeyboardTranslator::replaceEntry(const Entry& existing , const Entry& replacement)
 {
     if ( !existing.isNull() )
         _entries.remove(existing.keyCode());
-    _entries.insertMulti(replacement.keyCode(),replacement);
+    _entries.insert(replacement.keyCode(),replacement);
 }
 void KeyboardTranslator::removeEntry(const Entry& entry)
 {
--- a/libgui/qterminal/libqterminal/unix/KeyboardTranslator.h	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/qterminal/libqterminal/unix/KeyboardTranslator.h	Thu Nov 12 02:02:39 2020 -0500
@@ -26,6 +26,7 @@
 
 // Qt
 #include <QtCore/QHash>
+#include <QtCore/QMultiHash>
 #include <QtCore/QList>
 #include <QKeySequence>
 #include <QtCore/QMetaType>
@@ -383,7 +384,7 @@
 
 private:
 
-    QHash<int,Entry> _entries; // entries in this keyboard translation,
+    QMultiHash<int,Entry> _entries; // entries in this keyboard translation,
                                                  // entries are indexed according to
                                                  // their keycode
     QString _name;
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Thu Nov 12 02:02:39 2020 -0500
@@ -2051,8 +2051,13 @@
 
 void TerminalView::wheelEvent( QWheelEvent* ev )
 {
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+  if (ev->angleDelta().y() == 0)
+    return;
+#else
   if (ev->orientation() != Qt::Vertical)
     return;
+#endif
 
   if ( _mouseMarks )
     _scrollBar->event(ev);
@@ -2060,9 +2065,19 @@
     {
       int charLine;
       int charColumn;
-      getCharacterPosition( ev->pos() , charLine , charColumn );
-
-      emit mouseSignal( ev->delta() > 0 ? 4 : 5,
+#if defined (HAVE_QWHEELEVENT_POSITION)
+      QPoint pos = ev->position().toPoint();
+#else
+      QPoint pos = ev->pos();
+#endif
+      getCharacterPosition( pos , charLine , charColumn );
+
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+      int delta = ev->angleDelta().y();
+#else
+      int delta = ev->delta();
+#endif
+      emit mouseSignal( delta > 0 ? 4 : 5,
                         charColumn + 1,
                         charLine + 1 +_scrollBar->value() -_scrollBar->maximum() ,
                         0);
--- a/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/qterminal/libqterminal/unix/Vt102Emulation.cpp	Thu Nov 12 02:02:39 2020 -0500
@@ -1213,8 +1213,8 @@
 {
   KeyboardTranslator::Entry entry = _keyTranslator->findEntry(
                                             Qt::Key_Backspace,
-                                            nullptr,
-                                            nullptr);
+                                            Qt::NoModifier);
+
   if ( entry.text().count() > 0 )
       return entry.text()[0];
   else
--- a/libgui/src/dialog.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/src/dialog.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -352,7 +352,7 @@
                                 const QString& defbutton,
                                 const QStringList& role)
     : QMessageBox (QMessageBox::NoIcon, title.isEmpty () ? " " : title,
-                   message, nullptr, nullptr)
+                   message)
   {
     // Create a NonModal message.
     setWindowModality (Qt::NonModal);
--- a/libgui/src/documentation.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/src/documentation.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -443,7 +443,11 @@
     if (rx.indexIn (query_string, 0) != -1)
       m_internal_search = rx.cap (1);
     else
+#if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
+      m_internal_search = query_string.split (" ", Qt::SkipEmptyParts).first ();
+#else
       m_internal_search = query_string.split (" ", QString::SkipEmptyParts).first ();
+#endif
 
     m_help_engine->searchEngine ()->search (queries);
   }
@@ -628,14 +632,23 @@
       return;
 
     // First search in the function index
+#if defined (HAVE_QHELPENGINE_DOCUMENTSFORIDENTIFIER)
+    QList<QHelpLink> found_links
+      = m_help_engine->documentsForIdentifier (ref_name);
+
+    QUrl first_url = found_links.constFirst().url;
+#else
     QMap<QString, QUrl> found_links
       = m_help_engine->linksForIdentifier (ref_name);
 
-    QTabWidget *navi = static_cast<QTabWidget*> (widget (0));
+    QUrl first_url = found_links.constBegin().value ();
+#endif
+
+      QTabWidget *navi = static_cast<QTabWidget*> (widget (0));
 
     if (found_links.count() > 0)
       {
-        m_doc_browser->setSource (found_links.constBegin().value());
+        m_doc_browser->setSource (first_url);
 
         // Switch to function index tab
         m_help_engine->indexWidget()->filterIndices (ref_name);
@@ -721,7 +734,7 @@
     if (! m_help_engine)
       return;
 
-    QTextDocument::FindFlags find_flags = 0;
+    QTextDocument::FindFlags find_flags;
     if (backward)
       find_flags = QTextDocument::FindBackward;
 
@@ -969,7 +982,11 @@
   {
     if (we->modifiers () == Qt::ControlModifier)
       {
-        if (we->delta () > 0)
+#if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
+        if (we->angleDelta().y () > 0)
+#else
+        if (we->delta() > 0)
+#endif
           zoom_in ();
         else
           zoom_out ();
--- a/libgui/src/external-editor-interface.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/src/external-editor-interface.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -59,8 +59,10 @@
     editor.replace ("%f", file);
     editor.replace ("%l", QString::number (line));
 
+    QStringList arguments;
+
     // start the process and check for success
-    bool started_ok = QProcess::startDetached (editor);
+    bool started_ok = QProcess::startDetached (editor, arguments);
 
     if (started_ok != true)
       {
--- a/libgui/src/files-dock-widget.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/src/files-dock-widget.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -409,8 +409,11 @@
             resource_manager& rmgr = m_octave_qobj.get_resource_manager ();
             gui_settings *settings = rmgr.get_settings ();
             QString ext = settings->value (fb_txt_file_ext).toString ();
+#if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
+            QStringList extensions = ext.split (";", Qt::SkipEmptyParts);
+#else
             QStringList extensions = ext.split (";", QString::SkipEmptyParts);
-
+#endif
             if (QFile::exists (abs_fname))
               {
                 if (extensions.contains (suffix))
--- a/libgui/src/m-editor/octave-qscintilla.cc	Wed Nov 11 14:55:09 2020 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Thu Nov 12 02:02:39 2020 -0500
@@ -815,8 +815,12 @@
 
     // Split contents into single lines and complete commands
     QStringList lines = selectedText ().split (QRegExp ("[\r\n]"),
+#if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
+                                               Qt::SkipEmptyParts);
+#else
                                                QString::SkipEmptyParts);
-    for (int i = 0; i < lines.count (); i++)
+#endif
+  for (int i = 0; i < lines.count (); i++)
       {
         QString line = lines.at (i);
         if (line.trimmed ().isEmpty ())
--- a/m4/acinclude.m4	Wed Nov 11 14:55:09 2020 -0500
+++ b/m4/acinclude.m4	Thu Nov 12 02:02:39 2020 -0500
@@ -493,6 +493,103 @@
   fi
 ])
 dnl
+dnl Check whether the Qt class QHelpEngine has the documentsForIdentifier
+dnl function.  dnl This member function was introduced in Qt 5.15.
+dnl
+AC_DEFUN([OCTAVE_CHECK_FUNC_QHELPENGINE_DOCUMENTSFORIDENTIFIER], [
+  AC_CACHE_CHECK([for QHelpEngine::documentsForIdentifier in <QHelpEngine>],
+    [octave_cv_func_qhelpengine_documentsforidentifier],
+    [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 <QHelpEngine>
+        #include <QHelpLink>
+        #include <QList>
+        #include <QString>
+        #include <QUrl>
+        ]], [[
+        QString collection_file;
+        QHelpEngine eng (collection_file);
+        QString id;
+        eng.documentsForIdentifier (id);
+        ]])],
+      octave_cv_func_qhelpengine_documentsforidentifier=yes,
+      octave_cv_func_qhelpengine_documentsforidentifier=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_func_qhelpengine_documentsforidentifier = yes; then
+    AC_DEFINE(HAVE_QHELPENGINE_DOCUMENTSFORIDENTIFIER, 1,
+      [Define to 1 if you have the `QHelpEngine::documentsForIdentifier' member function.])
+  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>
+        void foo (const QWheelEvent& ev)
+        {
+          ev.angleDelta ();
+        };
+        ]])],
+      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 the Qt class QWheelEvent has the position member function.
+dnl This member function was introduced in Qt 5.14.
+dnl
+AC_DEFUN([OCTAVE_CHECK_FUNC_QWHEELEVENT_POSITION], [
+  AC_CACHE_CHECK([for QWheelEvent::position in <QWheelEvent>],
+    [octave_cv_func_qwheelevent_position],
+    [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>
+        void foo (const QWheelEvent& ev)
+        {
+          ev.position ();
+        };
+        ]])],
+      octave_cv_func_qwheelevent_position=yes,
+      octave_cv_func_qwheelevent_position=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_func_qwheelevent_position = yes; then
+    AC_DEFINE(HAVE_QWHEELEVENT_POSITION, 1,
+      [Define to 1 if you have the `QWheelEvent::position' member 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
@@ -593,6 +690,36 @@
   fi
 ])
 dnl
+dnl Check whether the Qt::SplitBehavior enum exists and has
+dnl Qt::KeepEmptyParts and Qt::SkipEmptyParts members.  This enum
+dnl was introduced or modified in Qt 5.14.
+dnl
+AC_DEFUN([OCTAVE_CHECK_QT_SPLITBEHAVIOR_ENUM], [
+  AC_CACHE_CHECK([for Qt::SplitBehavior enum],
+    [octave_cv_qt_splitbehavior_enum],
+    [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 <Qt>
+        ]], [[
+        Qt::SplitBehavior sb_keep = Qt::KeepEmptyParts;
+        Qt::SplitBehavior sb_skip = Qt::SkipEmptyParts;
+        ]])],
+      octave_cv_qt_splitbehavior_enum=yes,
+      octave_cv_qt_splitbehavior_enum=no)
+    CPPFLAGS="$ac_octave_save_CPPFLAGS"
+    CXXFLAGS="$ac_octave_save_CXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_qt_splitbehavior_enum = yes; then
+    AC_DEFINE(HAVE_QT_SPLITBEHAVIOR_ENUM, 1,
+      [Define to 1 if you have the `Qt::SplitBehavior' enum.])
+  fi
+])
+dnl
 dnl Check whether HDF5 library has version 1.6 API functions.
 dnl
 AC_DEFUN([OCTAVE_CHECK_HDF5_HAS_VER_16_API], [
@@ -1898,8 +2025,12 @@
     OCTAVE_CHECK_NEW_QHELPINDEXWIDGET_API
     OCTAVE_CHECK_FUNC_QLIST_ITERATOR_CONSTRUCTOR
     OCTAVE_CHECK_FUNC_QSCREEN_DEVICEPIXELRATIO
+    OCTAVE_CHECK_FUNC_QHELPENGINE_DOCUMENTSFORIDENTIFIER
+    OCTAVE_CHECK_FUNC_QWHEELEVENT_ANGLEDELTA
+    OCTAVE_CHECK_FUNC_QWHEELEVENT_POSITION
 
     OCTAVE_CHECK_QREGION_ITERATORS
+    OCTAVE_CHECK_QT_SPLITBEHAVIOR_ENUM
 
     if test -n "$OPENGL_LIBS"; then
       OCTAVE_CHECK_QT_OPENGL_OK([build_qt_graphics=yes],