mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
Allow setting filename for file promise provider
This commit is contained in:
@@ -871,12 +871,13 @@ static void _glfwUpdateNotchCover(_GLFWwindow*);
|
|||||||
{
|
{
|
||||||
GLFWid windowId, instanceId;
|
GLFWid windowId, instanceId;
|
||||||
char* mimeType; // MIME type for this provider
|
char* mimeType; // MIME type for this provider
|
||||||
|
char *file_name; // Optional file name for this provider
|
||||||
NSFileHandle *file_handle;
|
NSFileHandle *file_handle;
|
||||||
NSURL *file_url;
|
NSURL *file_url;
|
||||||
void (^completion_handler)(NSError*);
|
void (^completion_handler)(NSError*);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithWindow:(_GLFWwindow*)initWindow mimeType:(const char*)mime instanceId:(GLFWid)iid;
|
- (instancetype)initWithWindow:(_GLFWwindow*)initWindow mimeType:(const char*)mime fileName:(const char*)name instanceId:(GLFWid)iid;
|
||||||
- (void)request_drag_data;
|
- (void)request_drag_data;
|
||||||
- (void)promised_data_ready:(const char*)data sz:(size_t)sz type:(int)type;
|
- (void)promised_data_ready:(const char*)data sz:(size_t)sz type:(int)type;
|
||||||
- (void)end_transfer:(int)errorCode;
|
- (void)end_transfer:(int)errorCode;
|
||||||
@@ -4373,7 +4374,7 @@ add_uri_list_drag_items(_GLFWwindow *window, NSMutableArray<NSDraggingItem*>* dr
|
|||||||
if (!type) type = UTTypeItem;
|
if (!type) type = UTTypeItem;
|
||||||
snprintf(buf, sizeof(buf), "kitty-internal/uri-list-item-%d", count);
|
snprintf(buf, sizeof(buf), "kitty-internal/uri-list-item-%d", count);
|
||||||
GLFWFilePromiseProviderDelegate* delegate = [[[GLFWFilePromiseProviderDelegate alloc]
|
GLFWFilePromiseProviderDelegate* delegate = [[[GLFWFilePromiseProviderDelegate alloc]
|
||||||
initWithWindow:window mimeType:buf instanceId:_glfw.drag.instance_id] autorelease];
|
initWithWindow:window mimeType:buf fileName:NULL instanceId:_glfw.drag.instance_id] autorelease];
|
||||||
NSFilePromiseProvider *provider = [[[NSFilePromiseProvider alloc]
|
NSFilePromiseProvider *provider = [[[NSFilePromiseProvider alloc]
|
||||||
initWithFileType:type.identifier delegate:delegate] autorelease];
|
initWithFileType:type.identifier delegate:delegate] autorelease];
|
||||||
// Store the delegate in the provider's user info so it's retained
|
// Store the delegate in the provider's user info so it's retained
|
||||||
@@ -4408,7 +4409,7 @@ add_drag_items(_GLFWwindow *window, NSMutableArray<NSDraggingItem*>* dragItems,
|
|||||||
} else {
|
} else {
|
||||||
// Create file promise provider with our delegate
|
// Create file promise provider with our delegate
|
||||||
GLFWFilePromiseProviderDelegate* delegate = [[[GLFWFilePromiseProviderDelegate alloc]
|
GLFWFilePromiseProviderDelegate* delegate = [[[GLFWFilePromiseProviderDelegate alloc]
|
||||||
initWithWindow:window mimeType:mime_item->mime_type instanceId:_glfw.drag.instance_id] autorelease];
|
initWithWindow:window mimeType:mime_item->mime_type fileName:NULL instanceId:_glfw.drag.instance_id] autorelease];
|
||||||
NSFilePromiseProvider *provider = [[[NSFilePromiseProvider alloc]
|
NSFilePromiseProvider *provider = [[[NSFilePromiseProvider alloc]
|
||||||
initWithFileType:utiString delegate:delegate] autorelease];
|
initWithFileType:utiString delegate:delegate] autorelease];
|
||||||
// Store the delegate in the provider's user info so it's retained
|
// Store the delegate in the provider's user info so it's retained
|
||||||
@@ -4625,11 +4626,12 @@ _glfwPlatformStartDrag(_GLFWwindow* window, const GLFWimage* thumbnail) {@autore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithWindow:(_GLFWwindow*)initWindow mimeType:(const char*)mime instanceId:(GLFWid) instance_id {
|
- (instancetype)initWithWindow:(_GLFWwindow*)initWindow mimeType:(const char*)mime fileName: (const char*)name instanceId:(GLFWid) instance_id {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
windowId = initWindow ? initWindow->id : 0;
|
windowId = initWindow ? initWindow->id : 0;
|
||||||
mimeType = _glfw_strdup(mime);
|
mimeType = _glfw_strdup(mime);
|
||||||
|
file_name = name ? _glfw_strdup(name) : nil;
|
||||||
instanceId = instance_id;
|
instanceId = instance_id;
|
||||||
if (file_promise_providers == nil) file_promise_providers = [[NSMutableArray alloc] init];
|
if (file_promise_providers == nil) file_promise_providers = [[NSMutableArray alloc] init];
|
||||||
[file_promise_providers addObject:self];
|
[file_promise_providers addObject:self];
|
||||||
@@ -4639,6 +4641,7 @@ _glfwPlatformStartDrag(_GLFWwindow* window, const GLFWimage* thumbnail) {@autore
|
|||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
free(mimeType); mimeType = NULL;
|
free(mimeType); mimeType = NULL;
|
||||||
|
free(file_name); file_name = NULL;
|
||||||
if (file_handle) [file_handle release];
|
if (file_handle) [file_handle release];
|
||||||
file_handle = nil;
|
file_handle = nil;
|
||||||
if (file_url) [file_url release];
|
if (file_url) [file_url release];
|
||||||
@@ -4649,6 +4652,7 @@ _glfwPlatformStartDrag(_GLFWwindow* window, const GLFWimage* thumbnail) {@autore
|
|||||||
|
|
||||||
- (NSString*)filePromiseProvider:(NSFilePromiseProvider*)filePromiseProvider fileNameForType:(NSString*)fileType {
|
- (NSString*)filePromiseProvider:(NSFilePromiseProvider*)filePromiseProvider fileNameForType:(NSString*)fileType {
|
||||||
(void)filePromiseProvider; (void)fileType;
|
(void)filePromiseProvider; (void)fileType;
|
||||||
|
if (file_name) return [NSString stringWithUTF8String:file_name];
|
||||||
// Generate a unique filename based on the MIME type
|
// Generate a unique filename based on the MIME type
|
||||||
NSString* extension = @"data";
|
NSString* extension = @"data";
|
||||||
if (mimeType) {
|
if (mimeType) {
|
||||||
|
|||||||
Reference in New Issue
Block a user