A tray icon must support the "client" or "plug" side of the XEMBED specification. XEMBED is a protocol for cross-toolkit widget embedding.
To begin the docking process, the tray icon application sends
a client message event to the manager selection owner window,
as described in the section called “Opcode messages”. This event
should contain the SYSTEM_TRAY_REQUEST_DOCK
opcode, xclient.data.l[2]
should contain
the X window ID of the tray icon to be docked.
At this point the "embedding life cycle" explained in the XEMBED specification begins. The XEMBED specification explains how the embedding application will interact with the embedded tray icon, and how the embedder/embedded relationship may be ended.
Tray icons may be assigned any size by the system tray, and should do their best to cope with any size effectively.