[system/dolphin] src/views: ZoomWidgetAction: Focus last button on BacktabFocusReason

Kai Uwe Broulik <[email protected]> Wed, 5 Aug 2026 08:31:46 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit c2242415d9536d2bea6bffcc528d73e566ecbeb6 by Kai Uwe Broulik.
Committed on 05/08/2026 at 08:26.
Pushed by broulik into branch 'master'.

ZoomWidgetAction: Focus last button on BacktabFocusReason

This way when approaching the menu entry from below using arrow up,
the *last* action in the zoom widget will be focused as expected.

Instead of using focusProxy, adjust focus manually.

M  +12   -1    src/views/zoomwidgetaction.cpp

https://invent.kde.org/system/dolphin/-/commit/c2242415d9536d2bea6bffcc528d73e566ecbeb6

diff --git a/src/views/zoomwidgetaction.cpp b/src/views/zoomwidgetaction.cpp
index 431ac4f62f..62be8799e5 100644
--- a/src/views/zoomwidgetaction.cpp
+++ b/src/views/zoomwidgetaction.cpp
@@ -51,6 +51,18 @@ protected:
 
         painter.drawControl(QStyle::CE_MenuItem, option);
     }
+
+    void focusInEvent(QFocusEvent *event) override
+    {
+        const auto buttons = findChildren<QToolButton *>();
+        Q_ASSERT(!buttons.isEmpty());
+
+        if (event->reason() == Qt::BacktabFocusReason) {
+            buttons.last()->setFocus(event->reason());
+        } else {
+            buttons.first()->setFocus(event->reason());
+        }
+    }
 };
 
 ZoomWidgetAction::ZoomWidgetAction(QAction *zoomInAction, QAction *zoomResetAction, QAction *zoomOutAction, QObject *parent)
@@ -128,7 +140,6 @@ QWidget *ZoomWidgetAction::createWidget(QWidget *parent)
     zoomOutButton->setDefaultAction(m_zoomOutAction);
     zoomOutButton->installEventFilter(this);
     zoomWidgetLayout->addWidget(zoomOutButton);
-    zoomWidget->setFocusProxy(zoomOutButton);
 
     QIcon zoomOutIcon;
     QPixmap zoomOutPixmapNormal = m_zoomOutAction->icon().pixmap(zoomOutButton->iconSize(), QIcon::Normal);