Add glfwGetCocoaOpenedFilenames()

This commit is contained in:
Andrew Belt 2019-10-13 23:54:16 -04:00
parent d25248343e
commit ec03b24c71
3 changed files with 48 additions and 0 deletions

View File

@ -215,6 +215,20 @@ GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
* @ingroup native
*/
GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
/*! @brief Returns the list of filenames that opened the application,
* such as by dragging files to the app bundle or through file associations.
*
* @return A list of strings, null terminated.
*
* @thread_safety This function may be called from any thread. Access is not
* synchronized.
*
* @since Added in version 3.4.
*
* @ingroup native
*/
const char* const* glfwGetCocoaOpenedFilenames(void);
#endif
#if defined(GLFW_EXPOSE_NATIVE_NSGL)

View File

@ -461,6 +461,20 @@ static GLFWbool initializeTIS(void)
_glfwRestoreVideoModeNS(_glfw.monitors[i]);
}
- (void)application:(NSApplication *)sender openFiles:(NSArray<NSString *> *)filenames
{
int len = [filenames count];
// Last entry is nil
_glfw.ns.openedFilenames = calloc(len + 1, sizeof(char*));
for (int i = 0; i < len; i++)
{
NSString* filename = [filenames objectAtIndex:i];
const char* filenameStr = [filename UTF8String];
_glfw.ns.openedFilenames[i] = _glfw_strdup(filenameStr);
}
}
@end // GLFWApplicationDelegate
@ -577,6 +591,16 @@ void _glfwPlatformTerminate(void)
if (_glfw.ns.keyUpMonitor)
[NSEvent removeMonitor:_glfw.ns.keyUpMonitor];
if (_glfw.ns.openedFilenames)
{
for (char** p = _glfw.ns.openedFilenames; *p; p++)
{
free(*p);
}
free(_glfw.ns.openedFilenames);
_glfw.ns.openedFilenames = nil;
}
free(_glfw.ns.clipboardString);
_glfwTerminateNSGL();
@ -594,3 +618,12 @@ const char* _glfwPlatformGetVersionString(void)
;
}
//////////////////////////////////////////////////////////////////////////
////// GLFW native API //////
//////////////////////////////////////////////////////////////////////////
const char* const* glfwGetCocoaOpenedFilenames(void)
{
return _glfw.ns.openedFilenames;
}

View File

@ -148,6 +148,7 @@ typedef struct _GLFWlibraryNS
double restoreCursorPosX, restoreCursorPosY;
// The window whose disabled cursor mode is active
_GLFWwindow* disabledCursorWindow;
char** openedFilenames;
struct {
CFBundleRef bundle;