From 1675c8267ede3d12d26a362161eed2dda0813079 Mon Sep 17 00:00:00 2001 From: Hayden Gray <35206453+A1029384756@users.noreply.github.com> Date: Mon, 20 Apr 2026 14:50:22 -0400 Subject: [PATCH] [tray/dbus] set tray session name to app subname in flatpak env (#15393) * [tray/dbus] set tray session name to app subname in flatpak env * [tray/dbus] have dbus service name come from the app id. app id falls back to flatpak if in a flatpak environment * [tray/dbus] change dbus menu path to work with apparmor --- src/core/linux/SDL_dbus.c | 2 +- src/core/unix/SDL_appid.c | 6 ++++++ src/tray/unix/SDL_dbustray.c | 7 ++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c index af791b764e..2416907fc6 100644 --- a/src/core/linux/SDL_dbus.c +++ b/src/core/linux/SDL_dbus.c @@ -53,7 +53,7 @@ static unsigned int screensaver_cookie = 0; static SDL_DBusContext dbus; #define DBUS_MENU_INTERFACE "com.canonical.dbusmenu" -#define DBUS_MENU_OBJECT_PATH "/Menu" +#define DBUS_MENU_OBJECT_PATH "/StatusNotifierItem/menu" #define SDL_DBUS_UPDATE_MENU_FLAG_DO_NOT_REPLACE (1 << 0) static const char *menu_introspect = ""; diff --git a/src/core/unix/SDL_appid.c b/src/core/unix/SDL_appid.c index 3b85cbc876..afe157f2cd 100644 --- a/src/core/unix/SDL_appid.c +++ b/src/core/unix/SDL_appid.c @@ -61,6 +61,12 @@ const char *SDL_GetAppID(void) { const char *id_str = SDL_GetAppMetadataProperty(SDL_PROP_APP_METADATA_IDENTIFIER_STRING); +#ifdef SDL_PLATFORM_LINUX + if (!id_str) { + id_str = SDL_getenv("FLATPAK_ID"); + } +#endif + if (!id_str) { // If the hint isn't set, try to use the application's executable name id_str = SDL_GetExeName(); diff --git a/src/tray/unix/SDL_dbustray.c b/src/tray/unix/SDL_dbustray.c index 0885da8f01..c2c66679e7 100644 --- a/src/tray/unix/SDL_dbustray.c +++ b/src/tray/unix/SDL_dbustray.c @@ -28,6 +28,7 @@ #ifdef SDL_USE_LIBDBUS #include "../../video/SDL_surface_c.h" +#include "../../core/unix/SDL_appid.h" #include "../SDL_tray_utils.h" #include "SDL_unixtray.h" #include @@ -468,7 +469,11 @@ SDL_Tray *CreateTray(SDL_TrayDriver *driver, SDL_PropertiesID props) /* Request name */ driver->count++; - SDL_asprintf(&tray_dbus->service_name, "org.kde.StatusNotifierItem-%d-%d", getpid(), driver->count); + if (SDL_GetSandbox() == SDL_SANDBOX_FLATPAK) { + SDL_asprintf(&tray_dbus->service_name, "%s.tray%d", SDL_GetAppID(), driver->count); + } else { + SDL_asprintf(&tray_dbus->service_name, "org.kde.StatusNotifierItem-%d-%d", getpid(), driver->count); + } status = dbus_driver->dbus->bus_request_name(tray_dbus->connection, tray_dbus->service_name, DBUS_NAME_FLAG_REPLACE_EXISTING, &err); if (dbus_driver->dbus->error_is_set(&err)) { SDL_SetError("Unable to create tray: %s", err.message);