diff --git a/ui/drivers/cocoa/cocoa_common.m b/ui/drivers/cocoa/cocoa_common.m index 8b1aaf4606..c75b289c1f 100644 --- a/ui/drivers/cocoa/cocoa_common.m +++ b/ui/drivers/cocoa/cocoa_common.m @@ -64,7 +64,9 @@ void *glkitview_init(void); #if defined(HAVE_COCOA) [self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [self registerForDraggedTypes:[NSArray arrayWithObjects:NSColorPboardType, NSFilenamesPboardType, nil]]; + ui_window_cocoa_t view; + view.data = (CocoaView*)self; + ui_window_cocoa_set_droppable(&view, true); #elif defined(HAVE_COCOATOUCH) self.view = (__bridge GLKView*)glkitview_init(); diff --git a/ui/drivers/cocoa/ui_cocoa_window.h b/ui/drivers/cocoa/ui_cocoa_window.h index 8bc9b01a78..e3c70a5174 100644 --- a/ui/drivers/cocoa/ui_cocoa_window.h +++ b/ui/drivers/cocoa/ui_cocoa_window.h @@ -43,6 +43,8 @@ void ui_window_cocoa_destroy(void *data); void ui_window_cocoa_set_title(void *data, char *buf); +void ui_window_cocoa_set_droppable(void *data, bool droppable); + RETRO_END_DECLS #endif diff --git a/ui/drivers/cocoa/ui_cocoa_window.m b/ui/drivers/cocoa/ui_cocoa_window.m index bc24283761..042846bcf4 100644 --- a/ui/drivers/cocoa/ui_cocoa_window.m +++ b/ui/drivers/cocoa/ui_cocoa_window.m @@ -55,10 +55,26 @@ void ui_window_cocoa_set_title(void *data, char *buf) [[cocoa_view window] setTitle:[NSString stringWithCString:text encoding:NSUTF8StringEncoding]]; } +void ui_window_cocoa_set_droppable(void *data, bool droppable) +{ + ui_window_cocoa_t *cocoa = (ui_window_cocoa_t*)data; + CocoaView *cocoa_view = (CocoaView*)cocoa->data; + + if (droppable) + { + [[cocoa_view window] registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; + } + else + { + [[cocoa_view window] unregisterDraggedTypes]; + } +} + const ui_window_t ui_window_cocoa = { ui_window_cocoa_destroy, ui_window_cocoa_set_focused, ui_window_cocoa_set_visible, ui_window_cocoa_set_title, + ui_window_cocoa_set_droppable, "cocoa" }; diff --git a/ui/drivers/null/ui_null_window.c b/ui/drivers/null/ui_null_window.c index 1b0b93656c..8298ef118c 100644 --- a/ui/drivers/null/ui_null_window.c +++ b/ui/drivers/null/ui_null_window.c @@ -38,10 +38,15 @@ static void ui_window_null_set_title(void *data, char *buf) { } +static void ui_window_null_set_droppable(void *data, bool droppable) +{ +} + const ui_window_t ui_window_null = { ui_window_null_destroy, ui_window_null_set_focused, ui_window_null_set_visible, ui_window_null_set_title, + ui_window_null_set_droppable, "null" }; diff --git a/ui/drivers/win32/ui_win32_window.c b/ui/drivers/win32/ui_win32_window.c index 88199f26ad..300bc50bca 100644 --- a/ui/drivers/win32/ui_win32_window.c +++ b/ui/drivers/win32/ui_win32_window.c @@ -73,10 +73,15 @@ void ui_window_win32_set_title(void *data, char *buf) SetWindowText(window->hwnd, buf); } +void ui_window_win32_set_droppable(void *data, bool droppable) +{ +} + const ui_window_t ui_window_win32 = { ui_window_win32_destroy, ui_window_win32_set_focused, ui_window_win32_set_visible, ui_window_win32_set_title, + ui_window_win32_set_droppable, "win32" }; diff --git a/ui/drivers/win32/ui_win32_window.h b/ui/drivers/win32/ui_win32_window.h index a3a6e9ecdd..19f38b5763 100644 --- a/ui/drivers/win32/ui_win32_window.h +++ b/ui/drivers/win32/ui_win32_window.h @@ -46,6 +46,8 @@ void ui_window_win32_destroy(void *data); void ui_window_win32_set_title(void *data, char *buf); +void ui_window_win32_set_droppable(void *data, bool droppable); + RETRO_END_DECLS #endif diff --git a/ui/ui_companion_driver.h b/ui/ui_companion_driver.h index dcd0cebfaf..9113b9ef88 100644 --- a/ui/ui_companion_driver.h +++ b/ui/ui_companion_driver.h @@ -37,6 +37,7 @@ typedef struct ui_window void (*set_focused)(void *data); void (*set_visible)(void *data, bool visible); void (*set_title)(void *data, char *buf); + void (*set_droppable)(void *data, bool droppable); const char *ident; } ui_window_t;