macOS: When pasting text and the clipboard has a filesystem path, paste the full path instead of the text, which is sometimes just the file name

Fixes #5142
This commit is contained in:
Kovid Goyal 2022-05-30 14:40:45 +05:30
parent 48bb43a2c4
commit cabfcbcb69
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 26 additions and 3 deletions

View File

@ -46,6 +46,9 @@ Detailed list of changes
- ssh kitten: Fix bash not being executed as a login shell since kitty 0.25.0 (:iss:`5130`)
- macOS: When pasting text and the clipboard has a filesystem path, paste the
full path instead of the text, which is sometimes just the file name (:pull:`5142`)
0.25.1 [2022-05-26]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -2497,10 +2497,30 @@ const char* _glfwPlatformGetClipboardString(void)
"Cocoa: Failed to retrieve object from pasteboard");
return NULL;
}
free(_glfw.ns.clipboardString); _glfw.ns.clipboardString = NULL;
free(_glfw.ns.clipboardString);
_glfw.ns.clipboardString = _glfw_strdup([object UTF8String]);
NSDictionary* options = @{NSPasteboardURLReadingFileURLsOnlyKey:@YES};
NSArray* objs = [pasteboard readObjectsForClasses:@[[NSURL class], [NSString class]] options:options];
if (!objs) return NULL;
const NSUInteger count = [objs count];
if (count) {
NSMutableString *path_list = [NSMutableString stringWithCapacity:4096]; // auto-released
const char *text = NULL;
for (NSUInteger i = 0; i < count; i++) {
id obj = objs[i];
if ([obj isKindOfClass:[NSURL class]]) {
NSURL *url = (NSURL*)obj;
if (url.fileURL && url.fileSystemRepresentation) {
if ([path_list length] > 0) [path_list appendString:@("\n")];
[path_list appendString:@(url.fileSystemRepresentation)];
}
} else if ([obj isKindOfClass:[NSString class]]) {
text = [obj UTF8String];
}
}
if (path_list.length > 0) _glfw.ns.clipboardString = _glfw_strdup([path_list UTF8String]);
else if (text) _glfw.ns.clipboardString = _glfw_strdup([path_list UTF8String]);
}
return _glfw.ns.clipboardString;
}