From e78b7b1a998300732b98a3a491a9088eaff3701b Mon Sep 17 00:00:00 2001 From: zhaolei Date: Tue, 24 Mar 2026 14:42:04 +0800 Subject: [PATCH] Align drag thumbnail to cursor on macOS --- glfw/cocoa_window.m | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index 4a16bb45e..a7f07c427 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -4209,11 +4209,22 @@ set_image_for_dragging_item(NSDraggingItem *draggingItem, const GLFWimage *thumb if (!_glfw.ns.drag_image) { [imageRep release]; return ENOMEM; } [_glfw.ns.drag_image addRepresentation:imageRep]; [imageRep release]; + if (!_glfw.ns.drag_session) { + _GLFWwindow *glfw_window = _glfwWindowForId(_glfw.drag.window_id); + if (glfw_window && glfw_window->ns.view) { + NSRect contentRect = [glfw_window->ns.view frame]; + NSPoint cursor = NSMakePoint(glfw_window->virtualCursorPosX, + contentRect.size.height - glfw_window->virtualCursorPosY); + [draggingItem setDraggingFrame:NSMakeRect(cursor.x, cursor.y, pointSize.width, pointSize.height) contents:nil]; + } else { + [draggingItem setDraggingFrame:NSMakeRect(0, 0, pointSize.width, pointSize.height) contents:nil]; + } + } [draggingItem setImageComponentsProvider:^NSArray * _Nonnull{ NSDraggingImageComponent *icon = [NSDraggingImageComponent draggingImageComponentWithKey:NSDraggingImageComponentIconKey]; NSImage *image = _glfw.ns.drag_image; icon.contents = image; - icon.frame = NSMakeRect(pointSize.width, pointSize.height, pointSize.width, pointSize.height); + icon.frame = NSMakeRect(0, 0, pointSize.width, pointSize.height); return @[icon]; }]; }