diff options
| author | weinan li <[email protected]> | 2025-11-07 12:54:35 +0000 |
|---|---|---|
| committer | Méven Car <[email protected]> | 2025-11-07 12:54:35 +0000 |
| commit | bad63660b4c3253fdbd5fc3f989146519a7338b7 (patch) | |
| tree | 56c3c9c21e7392038ad3a7bcbb6cadacbc4bcef1 | |
| parent | 438d51032ae236af50d414e2bfdd36c0690f7f84 (diff) | |
informationpanel: ensure selection info is shown when using keyboard navigation
The original implementation prioritized mouse hover over keyboard selection,
preventing panel updates when navigating with arrow keys while the mouse
was over another item.
This patch adds explicit state tracking to ensure keyboard selections
always update the panel, regardless of mouse position.
BUG: 474507
| -rw-r--r-- | src/panels/information/informationpanel.cpp | 9 | ||||
| -rw-r--r-- | src/panels/information/informationpanel.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 8adb64ff0..03e048ae7 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -60,11 +60,13 @@ void InformationPanel::setSelection(const KFileItemList &selection) m_shownUrl = url(); showItemInfo(); } + m_isSelectionActive = false; m_infoTimer->stop(); } else { if ((count == 1) && !selection.first().url().isEmpty()) { m_urlCandidate = selection.first().url(); } + m_isSelectionActive = true; showItemInfo(); } } @@ -88,6 +90,8 @@ void InformationPanel::requestDelayedItemInfo(const KFileItem &item) cancelRequest(); + m_isSelectionActive = false; + m_hoveredItem = item; m_infoTimer->start(); } @@ -231,9 +235,10 @@ void InformationPanel::showItemInfo() } else { // The information for exactly one item should be shown KFileItem item; - if (!m_hoveredItem.isNull() && InformationPanelSettings::showHovered()) { + + if (!m_isSelectionActive && !m_hoveredItem.isNull() && InformationPanelSettings::showHovered()) { item = m_hoveredItem; - } else if (!m_selection.isEmpty()) { + } else if (m_isSelectionActive && !m_selection.isEmpty()) { Q_ASSERT(m_selection.count() == 1); item = m_selection.first(); } diff --git a/src/panels/information/informationpanel.h b/src/panels/information/informationpanel.h index eda70759a..44425bc93 100644 --- a/src/panels/information/informationpanel.h +++ b/src/panels/information/informationpanel.h @@ -147,6 +147,8 @@ private: KFileItem m_hoveredItem; KFileItemList m_selection; + bool m_isSelectionActive = false; + KIO::Job *m_folderStatJob; InformationPanelContent *m_content; |
