diff --git a/steam-runtime-tools/steam.c b/steam-runtime-tools/steam.c index e2207dc8c29416f525c10e36f8bca60e1a9f64f0..e15ed2e3370c332b7692895969f411d5620e9780 100644 --- a/steam-runtime-tools/steam.c +++ b/steam-runtime-tools/steam.c @@ -34,6 +34,7 @@ #include <glib.h> #include <gio/gio.h> +#include "steam-runtime-tools/desktop-entry-internal.h" #include "steam-runtime-tools/enums.h" #include "steam-runtime-tools/glib-compat.h" #include "steam-runtime-tools/utils.h" @@ -299,6 +300,7 @@ _srt_steam_check (const GStrv my_environ, const char *commandline = NULL; const char *executable = NULL; const char *app_id = NULL; + gboolean in_flatpak = FALSE; GStrv env = NULL; GError *error = NULL; @@ -481,8 +483,39 @@ _srt_steam_check (const GStrv my_environ, if (default_app == NULL) { - g_debug ("There isn't a default app that can handle `steam:` URLs"); - issues |= SRT_STEAM_ISSUES_MISSING_STEAM_URI_HANDLER; + GList *desktop_entries = _srt_list_steam_desktop_entries (); + /* If we are running from the Flatpak version of Steam we can't tell + * which one is the default `steam` URI handler. + * So we just list them all and check if we have the known + * "com.valvesoftware.Steam.desktop" that is used in the Flathub's + * version of Steam */ + for (GList *iter = desktop_entries; iter != NULL; iter = iter->next) + { + if (g_strcmp0 (srt_desktop_entry_get_id (iter->data), "com.valvesoftware.Steam.desktop") != 0) + continue; + + /* If we have the desktop entry "com.valvesoftware.Steam.desktop" + * with a commandline that starts with "/app/bin/" we are fairly + * sure to be inside a Flatpak environment. Otherwise report the + * issues about the missing and unexpected Steam URI handler */ + commandline = srt_desktop_entry_get_commandline (iter->data); + if (g_str_has_prefix (commandline, "/app/bin/") + && g_str_has_suffix (commandline, "%U")) + { + g_debug ("It seems like this is a Flatpak environment. The missing default app for `steam:` URLs is not an issue"); + in_flatpak = TRUE; + } + else + { + issues |= SRT_STEAM_ISSUES_UNEXPECTED_STEAM_URI_HANDLER; + } + } + + if (!in_flatpak) + { + g_debug ("There isn't a default app that can handle `steam:` URLs"); + issues |= SRT_STEAM_ISSUES_MISSING_STEAM_URI_HANDLER; + } } else { @@ -514,6 +547,18 @@ _srt_steam_check (const GStrv my_environ, g_debug ("Cannot parse \"Exec=%s\" like a shell would: %s", commandline, error->message); g_clear_error (&error); } + + if (!found_expected_steam_uri_handler) + { + /* If we are running from the host system, do not flag the Flatpak + * version of Steam as unexpected URI handler */ + if (g_str_has_prefix (commandline, executable) + && g_str_has_suffix (commandline, "com.valvesoftware.Steam @@u %U @@") + && g_pattern_match_simple ("* --command=/app/bin/*", commandline)) + { + found_expected_steam_uri_handler = TRUE; + } + } } /* Exclude the special case `/usr/bin/env steam %U` that we use in our unit tests */ @@ -546,7 +591,9 @@ _srt_steam_check (const GStrv my_environ, } else { - if (g_strcmp0 (executable, steam_script) != 0) + if (!in_flatpak + && g_strcmp0 (executable, steam_script) != 0 + && g_strcmp0 (executable, "/usr/bin/flatpak") != 0) { g_debug ("Unexpectedly \"STEAMSCRIPT\" environment variable and the default Steam app " "executable point to different paths: \"%s\" and \"%s\"", steam_script, executable);