Bug 747795 - Attached file not found.

MSWin only. ShellExecuteW("open") doesn't decode http escapes on file:
IRIs.
This commit is contained in:
John Ralls 2015-07-11 11:20:56 -07:00
parent 211b923cd7
commit 2137cb6d38

View File

@ -430,19 +430,31 @@ gnc_launch_assoc (const char *uri)
void
gnc_launch_assoc (const char *uri)
{
wchar_t *winuri = (wchar_t *)g_utf8_to_utf16(uri, -1, NULL, NULL, NULL);
wchar_t *wincmd = (wchar_t *)g_utf8_to_utf16("open", -1, NULL, NULL, NULL);
wchar_t *winuri = NULL;
/* ShellExecuteW open doesn't decode http escapes if it's passed a
* file URI so we have to do it. */
if (strcmp (g_uri_parse_scheme(uri), "file") == 0)
{
gchar *filename = g_filename_from_uri (uri, NULL, NULL);
winuri = (wchar_t *)g_utf8_to_utf16(filename, -1, NULL, NULL, NULL);
}
else
winuri = (wchar_t *)g_utf8_to_utf16(uri, -1, NULL, NULL, NULL);
if (winuri)
{
if ((INT_PTR)ShellExecuteW(NULL, wincmd, winuri, NULL, NULL, SW_SHOWNORMAL) <= 32)
{
const gchar *message =
_("GnuCash could not find the associated file.");
gnc_error_dialog(NULL, "%s", message);
}
g_free (winuri);
wchar_t *wincmd = (wchar_t *)g_utf8_to_utf16("open", -1,
NULL, NULL, NULL);
if ((INT_PTR)ShellExecuteW(NULL, wincmd, winuri,
NULL, NULL, SW_SHOWNORMAL) <= 32)
{
const gchar *message =
_("GnuCash could not find the associated file");
gnc_error_dialog(NULL, "%s: %s", message, uri);
}
g_free (wincmd);
g_free (winuri);
}
g_free (wincmd);
}
#else