From e55e11b399cdb5a2879bb77bef0436587f96170a Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Thu, 22 Jan 2026 00:49:50 +0000 Subject: [PATCH] Fix flickering tooltip when hovering modified in FileExplorer. Use the new, improved tooltip also in gallery to show full name, modified and size of an item. --- frontend/src/components/CursorTooltip.vue | 86 +++++++++++++++++++++++ frontend/src/components/FileModified.vue | 61 ++-------------- frontend/src/components/GalleryFigure.vue | 22 +++++- 3 files changed, 113 insertions(+), 56 deletions(-) create mode 100644 frontend/src/components/CursorTooltip.vue diff --git a/frontend/src/components/CursorTooltip.vue b/frontend/src/components/CursorTooltip.vue new file mode 100644 index 0000000..66000b3 --- /dev/null +++ b/frontend/src/components/CursorTooltip.vue @@ -0,0 +1,86 @@ + + + + + + + diff --git a/frontend/src/components/FileModified.vue b/frontend/src/components/FileModified.vue index 5c9d2f4..5481c13 100644 --- a/frontend/src/components/FileModified.vue +++ b/frontend/src/components/FileModified.vue @@ -2,15 +2,11 @@ - -
- {{ tooltipText }} -
-
+ {{ tooltipText }} @@ -18,12 +14,15 @@ import { Doc } from '@/repositories/Document' import { formatUnixDate } from '@/utils' import { computed, ref } from 'vue' +import CursorTooltip from './CursorTooltip.vue' const props = defineProps<{ doc: Doc now: number }>() +const tooltip = ref | null>(null) + // Reference props.now to trigger reactivity when time updates const modified = computed(() => { props.now // trigger reactivity @@ -37,50 +36,4 @@ const datetime = computed(() => const tooltipText = computed(() => datetime.value.replace('T', ' ').replace('Z', ' UTC') ) - -const showTooltip = ref(false) -const mouseX = ref(0) -const mouseY = ref(0) -let hoverTimer: ReturnType | null = null - -const tooltipStyle = computed(() => ({ - left: `${mouseX.value + 12}px`, - top: `${mouseY.value + 12}px`, -})) - -const startHover = (e: MouseEvent) => { - mouseX.value = e.clientX - mouseY.value = e.clientY - hoverTimer = setTimeout(() => { - showTooltip.value = true - }, 500) -} - -const updatePosition = (e: MouseEvent) => { - mouseX.value = e.clientX - mouseY.value = e.clientY -} - -const endHover = () => { - if (hoverTimer) { - clearTimeout(hoverTimer) - hoverTimer = null - } - showTooltip.value = false -} - - diff --git a/frontend/src/components/GalleryFigure.vue b/frontend/src/components/GalleryFigure.vue index 182c248..f0e33d9 100644 --- a/frontend/src/components/GalleryFigure.vue +++ b/frontend/src/components/GalleryFigure.vue @@ -4,6 +4,9 @@ @contextmenu.stop @focus.stop="store.cursor = doc.key" @click=onclick + @mouseenter="tooltip?.startHover" + @mousemove="tooltip?.updatePosition" + @mouseleave="tooltip?.endHover" >
@@ -15,19 +18,24 @@
+ +
{{ doc.name }}
+
{{ doc.modified }} — {{ doc.sizedisp }}
+