Cocoa backend: distinguish between cancelling drop by esc key/dragging to trash and dropping in unsupported place
This commit is contained in:
parent
f91da73b95
commit
0f10380773
1 changed files with 15 additions and 3 deletions
|
|
@ -823,6 +823,7 @@ - (bool)is_mimetype:(const char*)mime_type;
|
|||
@end
|
||||
|
||||
@interface GLFWDraggingSource : NSObject <NSDraggingSource> {
|
||||
NSPoint start_point;
|
||||
}
|
||||
@end
|
||||
|
||||
|
|
@ -3930,7 +3931,8 @@ - (NSDragOperation)draggingSession:(NSDraggingSession*)session
|
|||
- (void)draggingSession:(NSDraggingSession *)session
|
||||
willBeginAtPoint:(NSPoint)screenPoint
|
||||
{
|
||||
(void)session; (void)screenPoint;
|
||||
(void)session;
|
||||
start_point = screenPoint;
|
||||
}
|
||||
|
||||
- (void)draggingSession:(NSDraggingSession *)session
|
||||
|
|
@ -3944,7 +3946,7 @@ - (void)draggingSession:(NSDraggingSession *)session
|
|||
endedAtPoint:(NSPoint)screenPoint
|
||||
operation:(NSDragOperation)operation
|
||||
{
|
||||
(void)session; (void)screenPoint;
|
||||
(void)session;
|
||||
_GLFWwindow *window = _glfwWindowForId(_glfw.drag.window_id);
|
||||
if (window) {
|
||||
GLFWDragEvent ev = {0};
|
||||
|
|
@ -3954,7 +3956,17 @@ - (void)draggingSession:(NSDraggingSession *)session
|
|||
case NSDragOperationNone: break;
|
||||
default: ev.action = GLFW_DRAG_OPERATION_GENERIC; break;
|
||||
}
|
||||
ev.type = (operation == NSDragOperationNone) ? GLFW_DRAG_CANCELLED : GLFW_DRAG_DROPPED;
|
||||
switch (operation) {
|
||||
case NSDragOperationDelete: ev.type = GLFW_DRAG_CANCELLED; break;
|
||||
case NSDragOperationNone: {
|
||||
NSEvent *currentEvent = [NSApp currentEvent];
|
||||
if (currentEvent.type == NSEventTypeKeyDown && currentEvent.keyCode == 53) {
|
||||
ev.type = GLFW_DRAG_CANCELLED;
|
||||
} else ev.type = GLFW_DRAG_DROPPED;
|
||||
} break;
|
||||
default:
|
||||
ev.type = GLFW_DRAG_DROPPED; break;
|
||||
}
|
||||
_glfwInputDragSourceRequest(window, &ev);
|
||||
if (operation == NSDragOperationNone) _glfwFreeDragSourceData();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue