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:
Luca Bacci 2022-12-21 13:57:29 +01:00
parent cbee90b8a4
commit b0b16cf06e

View File

@ -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':