Skip to content

[Linux] TrayIcon: StatusNotifierItem Id is hard-coded to "nativeapi-tray" #81

Description

@lijy91

On Linux, the tray icon is a StatusNotifierItem published by nativeapi, and its Id property is hard-coded (src/platform/linux/tray_icon_linux.cpp):

if (g_strcmp0(property_name, "Id") == 0)
  return g_variant_new_string("nativeapi-tray");

The SNI spec wants Id to be a name that is unique to the application and stable across sessions. Hosts use it to remember per-item settings (hidden/shown, order), and some show it to the user: niri shows it as the hover tooltip. Right now every nativeapi app reports the same nativeapi-tray, so hosts can't tell apps apart, and a user's choice for one app applies to all of them.

Proposal:

  • Default the Id to something app-specific and stable, for example the application id (g_application_get_application_id() of the default GApplication, which is what Flutter's Linux runner sets from APPLICATION_ID), falling back to the executable name. Add a per-icon suffix only when an app has several tray icons.
  • Let apps set it explicitly: TrayIcon::SetId(std::string) (or a constructor argument), set before the item is registered, since Id must not change afterwards. Expose it in the bindings (Flutter: TrayIcon.id).
  • On macOS and Windows it can be a no-op, or map to NSStatusItem.autosaveName on macOS, which serves the same purpose (remembering position/visibility).

Background:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions