mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-24 13:06:14 +01:00
GWin32AppInfo: Check for local file path first
When launching a registered handler we compose the command-line string using the registered command-line template. Applications expect files in their command-line as local paths rather than complete URI strings. For example, "Program.exe" "%1" Should expand to "Program.exe" "C:\file.dat" Rather than "Program.exe" "file:///C:\file.dat" Fixes https://gitlab.gnome.org/GNOME/glib/-/issues/2843
This commit is contained in:
parent
cbee90b8a4
commit
b0b16cf06e
@ -4334,10 +4334,25 @@ expand_macro_single (char macro, file_or_uri *obj)
|
||||
case '8':
|
||||
case '9':
|
||||
/* TODO: handle 'l' and 'd' differently (longname and desktop name) */
|
||||
if (obj->uri)
|
||||
result = g_strdup (obj->uri);
|
||||
else if (obj->file)
|
||||
result = g_strdup (obj->file);
|
||||
if (obj->file)
|
||||
{
|
||||
result = g_strdup (obj->file);
|
||||
}
|
||||
else if (obj->uri)
|
||||
{
|
||||
const char *prefix = "file:///";
|
||||
const size_t prefix_len = strlen (prefix);
|
||||
|
||||
if (g_str_has_prefix (obj->uri, prefix) == 0 && obj->uri[prefix_len] != 0)
|
||||
{
|
||||
GFile *file = g_file_new_for_uri (obj->uri);
|
||||
result = g_file_get_path (file);
|
||||
g_object_unref (file);
|
||||
}
|
||||
|
||||
if (!result)
|
||||
result = g_strdup (obj->uri);
|
||||
}
|
||||
break;
|
||||
case 'u':
|
||||
case 'U':
|
||||
|
Loading…
Reference in New Issue
Block a user