Index: app/gwenviewui.rc
===================================================================
--- app/gwenviewui.rc
+++ app/gwenviewui.rc
@@ -29,6 +29,8 @@
+
+
Index: app/viewmainpage.h
===================================================================
--- app/viewmainpage.h
+++ app/viewmainpage.h
@@ -133,6 +133,8 @@
void goToBrowseModeRequested();
void captionUpdateRequested(const QString&);
+
+ void birdEyeViewChanged(bool);
public Q_SLOTS:
void setStatusBarVisible(bool);
@@ -150,6 +152,8 @@
void deselectView(DocumentView*);
void slotDirModelItemsAddedOrRemoved();
+
+ void toggleBirdEyeView(bool);
protected:
bool eventFilter(QObject* watched, QEvent* event) override;
Index: app/viewmainpage.cpp
===================================================================
--- app/viewmainpage.cpp
+++ app/viewmainpage.cpp
@@ -130,6 +130,7 @@
ThumbnailBarView* mThumbnailBar;
KToggleAction* mToggleThumbnailBarAction;
KToggleAction* mSynchronizeAction;
+ KToggleAction* mToggleBirdEyeViewAction;
QCheckBox* mSynchronizeCheckBox;
KSqueezedTextLabel* mDocumentCountLabel;
@@ -254,6 +255,8 @@
QObject::connect(view, &DocumentView::hudDeselectClicked, q, &ViewMainPage::deselectView);
QObject::connect(view, &DocumentView::videoFinished, mSlideShow, &SlideShow::resumeAndGoToNextUrl);
+
+ QObject::connect(q, &ViewMainPage::birdEyeViewChanged, view, &DocumentView::toggleBirdEyeView);
mDocumentViews << view;
#ifdef KF5Activities_FOUND
@@ -465,6 +468,12 @@
this, &ViewMainPage::slotDirModelItemsAddedOrRemoved);
connect(d->mThumbnailBar, &ThumbnailBarView::rowsRemovedSignal,
this, &ViewMainPage::slotDirModelItemsAddedOrRemoved);
+
+ d->mToggleBirdEyeViewAction = view->add("toggle_bird_eye_view");
+ d->mToggleBirdEyeViewAction->setCheckable(true);
+ d->mToggleBirdEyeViewAction->setText(i18n("Bird's eye view"));
+ d->mToggleBirdEyeViewAction->setChecked(GwenviewConfig::birdEyeView());
+ connect(d->mToggleBirdEyeViewAction, &QAction::toggled, this, &ViewMainPage::toggleBirdEyeView);
installEventFilter(this);
}
@@ -715,6 +724,7 @@
DocumentView* view = it.value();
DocumentView::Setup savedSetup = d->mDocumentViewContainer->savedSetup(url);
view->openUrl(url, d->mZoomMode == ZoomMode::Individual && savedSetup.valid ? savedSetup : setup);
+ view->toggleBirdEyeView(GwenviewConfig::birdEyeView());
#ifdef KF5Activities_FOUND
d->mActivityResources.value(view)->setUri(url);
d->mActivityResources.value(view)->setMimetype(MimeTypeUtils::urlMimeType(url));
@@ -873,4 +883,10 @@
d->updateDocumentCountLabel();
}
+void ViewMainPage::toggleBirdEyeView(bool checked)
+{
+ GwenviewConfig::setBirdEyeView(checked);
+ emit birdEyeViewChanged(checked);
+}
+
} // namespace
Index: lib/documentview/birdeyeview.h
===================================================================
--- lib/documentview/birdeyeview.h
+++ lib/documentview/birdeyeview.h
@@ -55,6 +55,7 @@
public Q_SLOTS:
void slotZoomOrSizeChanged();
+ void toggleBirdEyeView(bool);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
Index: lib/documentview/birdeyeview.cpp
===================================================================
--- lib/documentview/birdeyeview.cpp
+++ lib/documentview/birdeyeview.cpp
@@ -60,6 +60,7 @@
QRectF mVisibleRect;
QPointF mStartDragMousePos;
QPointF mStartDragViewPos;
+ bool enabled;
void updateCursor(const QPointF& pos)
{
@@ -69,25 +70,32 @@
void updateVisibility()
{
bool visible;
- if (!mDocView->canZoom() || mDocView->zoomToFit()) {
- // No need to show
- visible = false;
- } else if (mDocView->isAnimated()) {
- // Do not show while animated
- visible = false;
- } else if (mVisibleRect == q->boundingRect()) {
- // All of the image is visible
- visible = false;
- } else if (q->isUnderMouse() || !mStartDragMousePos.isNull()) {
- // User is interacting or about to interact with birdeyeview
- visible = true;
- } else if (mAutoHideTimer->isActive()) {
- // User triggered some activity recently (move mouse, scroll, zoom)
- visible = true;
- } else {
- // No recent activity
- visible = false;
+
+ if (enabled) {
+ if (!mDocView->canZoom() || mDocView->zoomToFit()) {
+ // No need to show
+ visible = false;
+ } else if (mDocView->isAnimated()) {
+ // Do not show while animated
+ visible = false;
+ } else if (mVisibleRect == q->boundingRect()) {
+ // All of the image is visible
+ visible = false;
+ } else if (q->isUnderMouse() || !mStartDragMousePos.isNull()) {
+ // User is interacting or about to interact with birdeyeview
+ visible = true;
+ } else if (mAutoHideTimer->isActive()) {
+ // User triggered some activity recently (move mouse, scroll, zoom)
+ visible = true;
+ } else {
+ // No recent activity
+ visible = false;
+ }
}
+ else {
+ visible = false;
+ }
+
qreal wantedOpacity = visible ? 1 : 0;
if (!qFuzzyCompare(wantedOpacity, q->opacity())) {
mOpacityAnim->setEndValue(wantedOpacity);
@@ -106,6 +114,7 @@
{
d->q = this;
d->mDocView = docView;
+ d->enabled = true;
setFlag(ItemIsSelectable);
setCursor(Qt::ArrowCursor);
setAcceptHoverEvents(true);
@@ -126,6 +135,7 @@
connect(docView, &DocumentView::zoomChanged, this, &BirdEyeView::slotZoomOrSizeChanged);
connect(docView, &DocumentView::zoomToFitChanged, this, &BirdEyeView::slotZoomOrSizeChanged);
connect(docView, &DocumentView::positionChanged, this, &BirdEyeView::slotPositionChanged);
+ connect(docView, &DocumentView::birdEyeViewChanged, this, &BirdEyeView::toggleBirdEyeView);
}
BirdEyeView::~BirdEyeView()
@@ -200,6 +210,12 @@
d->updateVisibility();
}
+void BirdEyeView::toggleBirdEyeView(bool enabled)
+{
+ d->enabled = enabled;
+ d->updateVisibility();
+}
+
void BirdEyeView::slotPositionChanged()
{
adjustVisibleRect();
Index: lib/documentview/documentview.h
===================================================================
--- lib/documentview/documentview.h
+++ lib/documentview/documentview.h
@@ -150,6 +150,8 @@
void setZoomToFill(bool);
void toggleZoomToFill();
+
+ void toggleBirdEyeView(bool);
void setPosition(const QPoint&);
@@ -186,6 +188,8 @@
void zoomToFitChanged(bool);
void zoomToFillChanged(bool);
+
+ void birdEyeViewChanged(bool);
void positionChanged();
Index: lib/documentview/documentview.cpp
===================================================================
--- lib/documentview/documentview.cpp
+++ lib/documentview/documentview.cpp
@@ -465,7 +465,7 @@
connect(d->mTouch, &Touch::swipeLeftTriggered, this, &DocumentView::swipeLeft);
connect(d->mTouch, &Touch::PanTriggered, this, &DocumentView::panGesture);
connect(d->mTouch, &Touch::tapHoldAndMovingTriggered, this, &DocumentView::startDragFromTouch);
-
+
// We use an opacity effect instead of using the opacity property directly, because the latter operates at
// the painter level, which means if you draw multiple layers in paint(), all layers get the specified
// opacity, resulting in all layers being visible when 0 < opacity < 1.
@@ -670,6 +670,10 @@
}
}
+void DocumentView::toggleBirdEyeView(bool enabled) {
+ emit birdEyeViewChanged(enabled);
+}
+
bool DocumentView::zoomToFit() const
{
return d->mAdapter->zoomToFit();
Index: lib/gwenviewconfig.kcfg
===================================================================
--- lib/gwenviewconfig.kcfg
+++ lib/gwenviewconfig.kcfg
@@ -148,6 +148,10 @@
false
+
+
+ true
+
true