The parsing of DESKTOP_STARTUP_ID to the newly spawned application was broken. QXCBConnection in the constuctor runs:
m_startupId = qgetenv("DESKTOP_STARTUP_ID"); qunsetenv("DESKTOP_STARTUP_ID");
Therefore it won't be available as the env here which is always after the platform has loaded.
The handling of startupIDs was effectively completely missing with a TODO. I have effectively opted for the documented solution 2. For creating new windows, everything is automatic. For raising an existing window it is up to the client to handle the startup ID using the value stored via QX11Info.
In the worst case is we attach now obsoleted startupIDs to new windows, but that should be no worse than not having any startup IDs.