|
tray latest
Cross-platform implementation of a system tray icon with a popup menu and notifications.
|
Cross-platform C++17 Qt-backed system tray icon with a popup menu and notifications.
This is a fork of dmikushin/tray and is intended to add additional features required for our own Sunshine project.
This fork adds the following features:
src directoryLinux
macOS
Windows
Install either Qt6 or Qt5.
Install uv and initialize the shared tooling submodule:
Execute the tray_example application:
Execute the tests application:
The icon and notification_icon fields can be a path to an image file or an icon theme name. Relative file paths are resolved from the process working directory, so applications should copy or install icon files where the running process can find them.
SVG, ICO, PNG, and Qt theme icon names are supported.
For the most predictable cross-platform behavior, use SVG or PNG files for both tray and notification icons. ICO is supported by the Qt-backed paths tested by this project. Qt theme icons should be passed as icon name strings, such as mail-message-new.
Tray structure defines an icon and a menu. Menu is a NULL-terminated array of items. Menu item defines menu text, menu checked and disabled (grayed) flags and a callback with some optional context pointer.
int tray_init(struct tray *) - creates tray icon. Returns -1 if tray icon/menu can't be created.void tray_update(struct tray *) - updates tray icon and menu.int tray_loop(int blocking) - runs one iteration of the UI loop. Returns -1 if tray_exit() has been called.void tray_exit() - terminates UI loop.All functions are meant to be called from the UI thread only.
Menu arrays must be terminated with a NULL item, e.g. the last item in the array must have text field set to NULL.
This software is distributed under MIT license, so feel free to integrate it in your commercial products.