On GTK backend, trayIcon behaves correctly if it is simply instantiated within a window and not put into its own event loop (without TrayIcon::Run(), I mean). gtk_main() seems to block the windows if the TrayIcon::Run() is invoked. For example, the EyeCare example and its trayicon works again as expected if I call EyeCare::Run() (after necessary albeit small corrections done in code)