|
|
@ -407,57 +407,6 @@ static void updateWindowMode(_GLFWwindow* window) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Splits and translates a text/uri-list into separate file paths
|
|
|
|
|
|
|
|
// NOTE: This function destroys the provided string
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
static char** parseUriList(char* text, int* count) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
const char* prefix = "file://"; |
|
|
|
|
|
|
|
char** paths = NULL; |
|
|
|
|
|
|
|
char* line; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*count = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while ((line = strtok(text, "\r\n"))) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
text = NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (line[0] == '#') |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (strncmp(line, prefix, strlen(prefix)) == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
line += strlen(prefix); |
|
|
|
|
|
|
|
// TODO: Validate hostname
|
|
|
|
|
|
|
|
while (*line != '/') |
|
|
|
|
|
|
|
line++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(*count)++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char* path = _glfw_calloc(strlen(line) + 1, 1); |
|
|
|
|
|
|
|
paths = _glfw_realloc(paths, *count * sizeof(char*)); |
|
|
|
|
|
|
|
paths[*count - 1] = path; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (*line) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (line[0] == '%' && line[1] && line[2]) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
const char digits[3] = { line[1], line[2], '\0' }; |
|
|
|
|
|
|
|
*path = strtol(digits, NULL, 16); |
|
|
|
|
|
|
|
line += 2; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
*path = *line; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
path++; |
|
|
|
|
|
|
|
line++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return paths; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Decode a Unicode code point from a UTF-8 stream
|
|
|
|
// Decode a Unicode code point from a UTF-8 stream
|
|
|
|
// Based on cutef8 by Jeff Bezanson (Public Domain)
|
|
|
|
// Based on cutef8 by Jeff Bezanson (Public Domain)
|
|
|
|
//
|
|
|
|
//
|
|
|
@ -1715,7 +1664,7 @@ static void processEvent(XEvent *event) |
|
|
|
if (result) |
|
|
|
if (result) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int count; |
|
|
|
int count; |
|
|
|
char** paths = parseUriList(data, &count); |
|
|
|
char** paths = _glfwParseUriList(data, &count); |
|
|
|
|
|
|
|
|
|
|
|
_glfwInputDrop(window, count, (const char**) paths); |
|
|
|
_glfwInputDrop(window, count, (const char**) paths); |
|
|
|
|
|
|
|
|
|
|
|