Git commit ea04c61faffb729b540d6168b8b8879113905492 by Nate Graham, on behalf of Eduardo Cruz. Committed on 28/09/2022 at 00:10. Pushed by ngraham into branch 'master'.
Add a configuration option to disable drag-scrolling beyond screen edges The mouse cursor wrap feature while drag-scrolling can be undesirable in some cases; for example it can be annoying to have the cursor jump accidentally to the distant edge of a big screen. Now users can disable this feature if they prefer. BUG: 421040 FIXED-IN: 22.12 M +3 -0 conf/okular.kcfg M +8 -0 doc/index.docbook M +9 -0 part/dlggeneral.cpp M +15 -11 part/pageview.cpp M +1 -1 part/thumbnaillist.cpp https://invent.kde.org/graphics/okular/commit/ea04c61faffb729b540d6168b8b8879113905492 diff --git a/conf/okular.kcfg b/conf/okular.kcfg index 223c9f836..926eed66f 100644 --- a/conf/okular.kcfg +++ b/conf/okular.kcfg @@ -325,6 +325,9 @@ <default>true</default> <emit signal="viewContinuousChanged" /> </entry> + <entry key="DragBeyondScreenEdges" type="Bool" > + <default>true</default> + </entry> <entry key="PrimaryAnnotationToolBar" type="Enum" > <default>FullAnnotationToolBar</default> <choices> diff --git a/doc/index.docbook b/doc/index.docbook index 54fcf86de..c74eb61fb 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -2644,6 +2644,14 @@ Context menu actions like Rename Bookmarks etc.) </para> </listitem> </varlistentry> + <varlistentry> + <term><guilabel>When using Browse Tool, wrap cursor at screen edges</guilabel></term> + <listitem> + <para> + Allows endless scrolling around the entire document with the <link linkend="menutools">Browse Tool</link>. If enabled, the mouse cursor will wrap to the opposite end of the screen when it touches the borders while dragging the document. This feature is only supported on X11. + </para> + </listitem> + </varlistentry> <varlistentry> <term><guilabel>Overview columns</guilabel></term> <listitem> diff --git a/part/dlggeneral.cpp b/part/dlggeneral.cpp index c558a9ebb..b23c95966 100644 --- a/part/dlggeneral.cpp +++ b/part/dlggeneral.cpp @@ -13,6 +13,7 @@ #include <QCheckBox> #include <QComboBox> #include <QFormLayout> +#include <QGuiApplication> #include <QHBoxLayout> #include <QLabel> #include <QSpinBox> @@ -165,6 +166,14 @@ DlgGeneral::DlgGeneral(QWidget *parent, Okular::EmbedMode embedMode) openInContinuousModeByDefault->setText(i18nc("@option:check Config dialog, general page", "Open in continuous mode by default")); openInContinuousModeByDefault->setObjectName(QStringLiteral("kcfg_ViewContinuous")); layout->addRow(programFeaturesLabel(), openInContinuousModeByDefault); + + // Under Wayland the cursor wrap feature is unavailable + if (QGuiApplication::platformName() != QLatin1String("wayland")) { + QCheckBox *dragBeyondScreenEdges = new QCheckBox(this); + dragBeyondScreenEdges->setText(i18nc("@option:check Config dialog, general page", "When using Browse Tool, wrap cursor at screen edges")); + dragBeyondScreenEdges->setObjectName(QStringLiteral("kcfg_DragBeyondScreenEdges")); + layout->addRow(programFeaturesLabel(), dragBeyondScreenEdges); + } // END Program features section // If no Program features section, don’t add a second spacer: diff --git a/part/pageview.cpp b/part/pageview.cpp index 3820f106d..f61882e2e 100644 --- a/part/pageview.cpp +++ b/part/pageview.cpp @@ -2230,11 +2230,13 @@ void PageView::mouseMoveEvent(QMouseEvent *e) const float upperZoomLimit = d->document->supportsTiles() ? 99.99 : 3.99; // Wrap mouse cursor - Qt::Edges wrapEdges; - wrapEdges.setFlag(Qt::TopEdge, d->zoomFactor < upperZoomLimit); - wrapEdges.setFlag(Qt::BottomEdge, d->zoomFactor > 0.101); + if (Okular::Settings::dragBeyondScreenEdges()) { + Qt::Edges wrapEdges; + wrapEdges.setFlag(Qt::TopEdge, d->zoomFactor < upperZoomLimit); + wrapEdges.setFlag(Qt::BottomEdge, d->zoomFactor > 0.101); - deltaY += CursorWrapHelper::wrapCursor(e->globalPos(), wrapEdges).y(); + deltaY += CursorWrapHelper::wrapCursor(e->globalPos(), wrapEdges).y(); + } // update zoom level, perform zoom and redraw if (deltaY) { @@ -2279,13 +2281,15 @@ void PageView::mouseMoveEvent(QMouseEvent *e) setCursor(Qt::ClosedHandCursor); // Wrap mouse cursor - Qt::Edges wrapEdges; - wrapEdges.setFlag(Qt::TopEdge, verticalScrollBar()->value() < verticalScrollBar()->maximum()); - wrapEdges.setFlag(Qt::BottomEdge, verticalScrollBar()->value() > verticalScrollBar()->minimum()); - wrapEdges.setFlag(Qt::LeftEdge, horizontalScrollBar()->value() < horizontalScrollBar()->maximum()); - wrapEdges.setFlag(Qt::RightEdge, horizontalScrollBar()->value() > horizontalScrollBar()->minimum()); - - d->mouseGrabOffset -= CursorWrapHelper::wrapCursor(e->pos(), wrapEdges); + if (Okular::Settings::dragBeyondScreenEdges()) { + Qt::Edges wrapEdges; + wrapEdges.setFlag(Qt::TopEdge, verticalScrollBar()->value() < verticalScrollBar()->maximum()); + wrapEdges.setFlag(Qt::BottomEdge, verticalScrollBar()->value() > verticalScrollBar()->minimum()); + wrapEdges.setFlag(Qt::LeftEdge, horizontalScrollBar()->value() < horizontalScrollBar()->maximum()); + wrapEdges.setFlag(Qt::RightEdge, horizontalScrollBar()->value() > horizontalScrollBar()->minimum()); + + d->mouseGrabOffset -= CursorWrapHelper::wrapCursor(e->pos(), wrapEdges); + } d->scroller->handleInput(QScroller::InputMove, e->pos() + d->mouseGrabOffset, e->timestamp()); } diff --git a/part/thumbnaillist.cpp b/part/thumbnaillist.cpp index 83a8f2950..3ba98d546 100644 --- a/part/thumbnaillist.cpp +++ b/part/thumbnaillist.cpp @@ -911,7 +911,7 @@ void ThumbnailListPrivate::mouseMoveEvent(QMouseEvent *e) } // Wrap mouse cursor - if (!CursorWrapHelper::wrapCursor(mousePos, Qt::TopEdge | Qt::BottomEdge).isNull()) { + if (Okular::Settings::dragBeyondScreenEdges() && !CursorWrapHelper::wrapCursor(mousePos, Qt::TopEdge | Qt::BottomEdge).isNull()) { m_mouseGrabPos.setX(0); m_mouseGrabPos.setY(0); }
