┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorweinan li <[email protected]>2025-11-07 12:54:35 +0000
committerMéven Car <[email protected]>2025-11-07 12:54:35 +0000
commitbad63660b4c3253fdbd5fc3f989146519a7338b7 (patch)
tree56c3c9c21e7392038ad3a7bcbb6cadacbc4bcef1 /src
parent438d51032ae236af50d414e2bfdd36c0690f7f84 (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
Diffstat (limited to 'src')
-rw-r--r--src/panels/information/informationpanel.cpp9
-rw-r--r--src/panels/information/informationpanel.h2
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;