mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-20 06:44:32 +00:00
feat: bring node to front when clicking on any widget (#7202)
## Summary - Adds a capture-phase pointerdown handler to NodeWidgets that calls `bringNodeToFront` whenever any widget is clicked - Improves UX by ensuring the interacted node is always visible on top, without requiring the node itself to be selected fix https://github.com/Comfy-Org/ComfyUI_frontend/issues/7131 ## Before https://github.com/user-attachments/assets/c2c2ff0e-6e5a-49f2-bf2e-333950559ada ## After https://github.com/user-attachments/assets/fc3db735-20eb-40b5-9101-278badc4698e ## Test plan - [ ] Click on any widget (button, dropdown, input, etc.) within a Vue node - [ ] Verify the node moves to the front (highest z-index) when the widget is clicked - [ ] Verify existing widget functionality is unaffected --------- Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
committed by
GitHub
parent
e7756eb6dd
commit
7c830a2f0b
@@ -15,6 +15,7 @@
|
||||
:style="{
|
||||
'grid-template-rows': gridTemplateRows
|
||||
}"
|
||||
@pointerdown.capture="handleBringToFront"
|
||||
@pointerdown="handleWidgetPointerEvent"
|
||||
@pointermove="handleWidgetPointerEvent"
|
||||
@pointerup="handleWidgetPointerEvent"
|
||||
@@ -78,6 +79,7 @@ import { useErrorHandling } from '@/composables/useErrorHandling'
|
||||
import { st } from '@/i18n'
|
||||
import { useCanvasInteractions } from '@/renderer/core/canvas/useCanvasInteractions'
|
||||
import { useNodeTooltips } from '@/renderer/extensions/vueNodes/composables/useNodeTooltips'
|
||||
import { useNodeZIndex } from '@/renderer/extensions/vueNodes/composables/useNodeZIndex'
|
||||
import WidgetDOM from '@/renderer/extensions/vueNodes/widgets/components/WidgetDOM.vue'
|
||||
// Import widget components directly
|
||||
import WidgetLegacy from '@/renderer/extensions/vueNodes/widgets/components/WidgetLegacy.vue'
|
||||
@@ -99,12 +101,20 @@ const { nodeData } = defineProps<NodeWidgetsProps>()
|
||||
|
||||
const { shouldHandleNodePointerEvents, forwardEventToCanvas } =
|
||||
useCanvasInteractions()
|
||||
const { bringNodeToFront } = useNodeZIndex()
|
||||
|
||||
function handleWidgetPointerEvent(event: PointerEvent) {
|
||||
if (shouldHandleNodePointerEvents.value) return
|
||||
event.stopPropagation()
|
||||
forwardEventToCanvas(event)
|
||||
}
|
||||
|
||||
function handleBringToFront() {
|
||||
if (nodeData?.id != null) {
|
||||
bringNodeToFront(String(nodeData.id))
|
||||
}
|
||||
}
|
||||
|
||||
// Error boundary implementation
|
||||
const renderError = ref<string | null>(null)
|
||||
|
||||
|
||||
@@ -134,6 +134,10 @@ function useNodeEventHandlersIndividual() {
|
||||
canvasStore.canvas.deselectAll()
|
||||
canvasStore.canvas.select(node)
|
||||
canvasStore.updateSelectedItems()
|
||||
// Bring node to front when selected (unless pinned)
|
||||
if (!node.flags?.pinned) {
|
||||
bringNodeToFront(nodeId)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -141,6 +145,10 @@ function useNodeEventHandlersIndividual() {
|
||||
canvasStore.canvas.deselect(node)
|
||||
} else {
|
||||
canvasStore.canvas.select(node)
|
||||
// Bring node to front when selected (unless pinned)
|
||||
if (!node.flags?.pinned) {
|
||||
bringNodeToFront(nodeId)
|
||||
}
|
||||
}
|
||||
|
||||
canvasStore.updateSelectedItems()
|
||||
|
||||
Reference in New Issue
Block a user