SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_tray.h
1#ifndef SDL3PP_TRAY_H_
2#define SDL3PP_TRAY_H_
3
4#include <SDL3/SDL_tray.h>
5#include "SDL3pp_stdinc.h"
6#include "SDL3pp_surface.h"
7
8namespace SDL {
9
21// Forward decl
22struct Tray;
23
25using TrayRaw = SDL_Tray*;
26
27// Forward decl
28struct TrayRef;
29
32{
34
37 : value(value)
38 {
39 }
40
42 constexpr TrayParam(std::nullptr_t = nullptr)
43 : value(nullptr)
44 {
45 }
46
48 constexpr explicit operator bool() const { return !!value; }
49
51 constexpr auto operator<=>(const TrayParam& other) const = default;
52
54 constexpr operator TrayRaw() const { return value; }
55};
56
58struct TrayMenu;
59
61using TrayMenuRaw = SDL_TrayMenu*;
62
63// Forward decl
64struct TrayMenu;
65
66// Forward decl
67struct TrayEntry;
68
70using TrayEntryRaw = SDL_TrayEntry*;
71
72// Forward decl
73struct TrayEntryScoped;
74
77{
79
82 : value(value)
83 {
84 }
85
87 constexpr TrayEntryParam(std::nullptr_t = nullptr)
88 : value(nullptr)
89 {
90 }
91
93 constexpr explicit operator bool() const { return !!value; }
94
96 constexpr auto operator<=>(const TrayEntryParam& other) const = default;
97
99 constexpr operator TrayEntryRaw() const { return value; }
100};
101
114
116 SDL_TRAYENTRY_BUTTON;
117
119 SDL_TRAYENTRY_CHECKBOX;
120
122 SDL_TRAYENTRY_SUBMENU;
123
125 SDL_TRAYENTRY_DISABLED;
126
128constexpr TrayEntryFlags TRAYENTRY_CHECKED = SDL_TRAYENTRY_CHECKED;
129
141using TrayCallback = void(SDLCALL*)(void* userdata, TrayEntryRaw entry);
142
155
163class Tray
164{
165 TrayRaw m_resource = nullptr;
166
167public:
169 constexpr Tray(std::nullptr_t = nullptr) noexcept
170 : m_resource(0)
171 {
172 }
173
181 constexpr explicit Tray(const TrayRaw resource) noexcept
182 : m_resource(resource)
183 {
184 }
185
186protected:
188 constexpr Tray(const Tray& other) noexcept = default;
189
190public:
192 constexpr Tray(Tray&& other) noexcept
193 : Tray(other.release())
194 {
195 }
196
197 constexpr Tray(const TrayRef& other) = delete;
198
199 constexpr Tray(TrayRef&& other) = delete;
200
225 : m_resource(SDL_CreateTray(icon, tooltip))
226 {
227 }
228
230 ~Tray() { SDL_DestroyTray(m_resource); }
231
233 constexpr Tray& operator=(Tray&& other) noexcept
234 {
235 std::swap(m_resource, other.m_resource);
236 return *this;
237 }
238
239protected:
241 constexpr Tray& operator=(const Tray& other) noexcept = default;
242
243public:
245 constexpr TrayRaw get() const noexcept { return m_resource; }
246
248 constexpr TrayRaw release() noexcept
249 {
250 auto r = m_resource;
251 m_resource = nullptr;
252 return r;
253 }
254
256 constexpr auto operator<=>(const Tray& other) const noexcept = default;
257
259 constexpr explicit operator bool() const noexcept { return !!m_resource; }
260
262 constexpr operator TrayParam() const noexcept { return {m_resource}; }
263
276 void Destroy();
277
290 void SetIcon(SurfaceParam icon);
291
304 void SetTooltip(StringParam tooltip);
305
328
350 TrayMenu GetMenu() const;
351};
352
354struct TrayRef : Tray
355{
356 using Tray::Tray;
357
365 TrayRef(TrayParam resource) noexcept
366 : Tray(resource.value)
367 {
368 }
369
377 TrayRef(TrayRaw resource) noexcept
378 : Tray(resource)
379 {
380 }
381
383 constexpr TrayRef(const TrayRef& other) noexcept = default;
384
387};
388
395{
396 TrayMenuRaw m_trayMenu;
397
398public:
404 constexpr TrayMenu(TrayMenuRaw trayMenu = {}) noexcept
405 : m_trayMenu(trayMenu)
406 {
407 }
408
414 constexpr operator TrayMenuRaw() const noexcept { return m_trayMenu; }
415
431 std::span<TrayEntry> GetEntries();
432
458 TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags);
459
485
504
522 TrayParam GetParentTray() const;
523};
524
533{
534 TrayEntryRaw m_resource = nullptr;
535
536public:
538 constexpr TrayEntry(std::nullptr_t = nullptr) noexcept
539 : m_resource(0)
540 {
541 }
542
548 constexpr TrayEntry(const TrayEntryRaw resource) noexcept
549 : m_resource(resource)
550 {
551 }
552
554 constexpr TrayEntry(const TrayEntry& other) noexcept = default;
555
557 constexpr TrayEntry(TrayEntry&& other) noexcept
558 : TrayEntry(other.release())
559 {
560 }
561
564
566 constexpr TrayEntry& operator=(TrayEntry&& other) noexcept
567 {
568 std::swap(m_resource, other.m_resource);
569 return *this;
570 }
571
573 constexpr TrayEntry& operator=(const TrayEntry& other) noexcept = default;
574
576 constexpr TrayEntryRaw get() const noexcept { return m_resource; }
577
579 constexpr TrayEntryRaw release() noexcept
580 {
581 auto r = m_resource;
582 m_resource = nullptr;
583 return r;
584 }
585
587 constexpr auto operator<=>(const TrayEntry& other) const noexcept = default;
588
590 constexpr explicit operator bool() const noexcept { return !!m_resource; }
591
593 constexpr operator TrayEntryParam() const noexcept { return {m_resource}; }
594
606 void Remove();
607
630
653
673 void SetLabel(StringParam label);
674
691 const char* GetLabel() const;
692
709 void SetChecked(bool checked);
710
727 bool GetChecked() const;
728
743 void SetEnabled(bool enabled);
744
759 bool GetEnabled() const;
760
774 void SetCallback(TrayCB callback);
775
791 void SetCallback(TrayCallback callback, void* userdata);
792
801 void Click();
802
816};
817
820{
822
823 constexpr TrayEntryScoped(const TrayEntry& other) = delete;
824
826 constexpr TrayEntryScoped(TrayEntry&& other) noexcept
827 : TrayEntry(other.release())
828 {
829 }
830
833};
834
859{
860 return Tray(icon, std::move(tooltip));
861}
862
876inline void SetTrayIcon(TrayParam tray, SurfaceParam icon)
877{
878 SDL_SetTrayIcon(tray, icon);
879}
880
882{
883 SDL::SetTrayIcon(m_resource, icon);
884}
885
899inline void SetTrayTooltip(TrayParam tray, StringParam tooltip)
900{
901 SDL_SetTrayTooltip(tray, tooltip);
902}
903
904inline void Tray::SetTooltip(StringParam tooltip)
905{
906 SDL::SetTrayTooltip(m_resource, std::move(tooltip));
907}
908
932{
933 return SDL_CreateTrayMenu(tray);
934}
935
936inline TrayMenu Tray::CreateMenu() { return SDL::CreateTrayMenu(m_resource); }
937
961{
962 return SDL_CreateTraySubmenu(entry);
963}
964
966{
967 return SDL::CreateTraySubmenu(m_resource);
968}
969
992inline TrayMenu GetTrayMenu(TrayParam tray) { return SDL_GetTrayMenu(tray); }
993
994inline TrayMenu Tray::GetMenu() const { return SDL::GetTrayMenu(m_resource); }
995
1019{
1020 return SDL_GetTraySubmenu(entry);
1021}
1022
1024{
1025 return SDL::GetTraySubmenu(m_resource);
1026}
1027
1044inline std::span<TrayEntry> GetTrayEntries(TrayMenu menu)
1045{
1046 int count;
1047 auto entries = SDL_GetTrayEntries(menu, &count);
1048 return std::span<TrayEntry>{reinterpret_cast<TrayEntry*>(entries),
1049 size_t(count)};
1050}
1051
1052inline std::span<TrayEntry> TrayMenu::GetEntries()
1053{
1054 return SDL::GetTrayEntries(m_trayMenu);
1055}
1056
1070inline void RemoveTrayEntry(TrayEntryRaw entry) { SDL_RemoveTrayEntry(entry); }
1071
1073
1101 int pos,
1102 StringParam label,
1103 TrayEntryFlags flags)
1104{
1105 return SDL_InsertTrayEntryAt(menu, pos, label, flags);
1106}
1107
1109 StringParam label,
1110 TrayEntryFlags flags)
1111{
1112 return SDL::InsertTrayEntryAt(m_trayMenu, pos, std::move(label), flags);
1113}
1114
1136{
1137 SDL_SetTrayEntryLabel(entry, label);
1138}
1139
1141{
1142 SDL::SetTrayEntryLabel(m_resource, std::move(label));
1143}
1144
1162inline const char* GetTrayEntryLabel(TrayEntryParam entry)
1163{
1164 return SDL_GetTrayEntryLabel(entry);
1165}
1166
1167inline const char* TrayEntry::GetLabel() const
1168{
1169 return SDL::GetTrayEntryLabel(m_resource);
1170}
1171
1189inline void SetTrayEntryChecked(TrayEntryParam entry, bool checked)
1190{
1191 SDL_SetTrayEntryChecked(entry, checked);
1192}
1193
1194inline void TrayEntry::SetChecked(bool checked)
1195{
1196 SDL::SetTrayEntryChecked(m_resource, checked);
1197}
1198
1217{
1218 return SDL_GetTrayEntryChecked(entry);
1219}
1220
1221inline bool TrayEntry::GetChecked() const
1222{
1223 return SDL::GetTrayEntryChecked(m_resource);
1224}
1225
1241inline void SetTrayEntryEnabled(TrayEntryParam entry, bool enabled)
1242{
1243 SDL_SetTrayEntryEnabled(entry, enabled);
1244}
1245
1246inline void TrayEntry::SetEnabled(bool enabled)
1247{
1248 SDL::SetTrayEntryEnabled(m_resource, enabled);
1249}
1250
1267{
1268 return SDL_GetTrayEntryEnabled(entry);
1269}
1270
1271inline bool TrayEntry::GetEnabled() const
1272{
1273 return SDL::GetTrayEntryEnabled(m_resource);
1274}
1275
1293 TrayCallback callback,
1294 void* userdata)
1295{
1296 SDL_SetTrayEntryCallback(entry, callback, userdata);
1297}
1298
1299inline void TrayEntry::SetCallback(TrayCallback callback, void* userdata)
1300{
1301 SDL::SetTrayEntryCallback(m_resource, callback, userdata);
1302}
1303
1314inline void ClickTrayEntry(TrayEntryParam entry) { SDL_ClickTrayEntry(entry); }
1315
1316inline void TrayEntry::Click() { SDL::ClickTrayEntry(m_resource); }
1317
1332inline void DestroyTray(TrayRaw tray) { SDL_DestroyTray(tray); }
1333
1334inline void Tray::Destroy() { DestroyTray(release()); }
1335
1350{
1351 return SDL_GetTrayEntryParent(entry);
1352}
1353
1355{
1356 return SDL::GetTrayEntryParent(m_resource);
1357}
1358
1378{
1379 return SDL_GetTrayMenuParentEntry(menu);
1380}
1381
1383{
1384 return SDL::GetTrayMenuParentEntry(m_trayMenu);
1385}
1386
1406{
1407 return SDL_GetTrayMenuParentTray(menu);
1408}
1409
1411{
1412 return SDL::GetTrayMenuParentTray(m_trayMenu);
1413}
1414
1425inline void UpdateTrays() { SDL_UpdateTrays(); }
1426
1428
1430{
1431 return InsertEntry(-1, std::move(label), flags);
1432}
1433
1434inline void TrayEntry::SetCallback(TrayCB callback)
1435{
1436 SetCallback(callback.wrapper, callback.data);
1437}
1438
1439} // namespace SDL
1440
1441#endif /* SDL3PP_TRAY_H_ */
Helpers to use C++ strings parameters.
Definition: SDL3pp_strings.h:43
An opaque handle representing an entry on a system tray object.
Definition: SDL3pp_tray.h:533
constexpr TrayEntry & operator=(TrayEntry &&other) noexcept
Assignment operator.
Definition: SDL3pp_tray.h:566
constexpr TrayEntry & operator=(const TrayEntry &other) noexcept=default
Assignment operator.
constexpr TrayEntry(TrayEntry &&other) noexcept
Move constructor.
Definition: SDL3pp_tray.h:557
void SetCallback(TrayCB callback)
Sets a callback to be invoked when the entry is selected.
Definition: SDL3pp_tray.h:1434
constexpr TrayEntryRaw get() const noexcept
Retrieves underlying TrayEntryRaw.
Definition: SDL3pp_tray.h:576
constexpr TrayEntry(const TrayEntry &other) noexcept=default
Copy constructor.
constexpr TrayEntry(std::nullptr_t=nullptr) noexcept
Default ctor.
Definition: SDL3pp_tray.h:538
constexpr TrayEntry(const TrayEntryRaw resource) noexcept
Constructs from TrayEntryParam.
Definition: SDL3pp_tray.h:548
constexpr TrayEntryRaw release() noexcept
Retrieves underlying TrayEntryRaw and clear this.
Definition: SDL3pp_tray.h:579
~TrayEntry()
Destructor.
Definition: SDL3pp_tray.h:563
constexpr auto operator<=>(const TrayEntry &other) const noexcept=default
Comparison.
An opaque handle representing a menu/submenu on a system tray object.
Definition: SDL3pp_tray.h:395
TrayEntry AppendEntry(StringParam label, TrayEntryFlags flags)
Appends a tray entry.
Definition: SDL3pp_tray.h:1429
constexpr TrayMenu(TrayMenuRaw trayMenu={}) noexcept
Wraps TrayMenu.
Definition: SDL3pp_tray.h:404
An opaque handle representing a toplevel system tray object.
Definition: SDL3pp_tray.h:164
constexpr TrayRaw get() const noexcept
Retrieves underlying TrayRaw.
Definition: SDL3pp_tray.h:245
constexpr Tray(const Tray &other) noexcept=default
Copy constructor.
~Tray()
Destructor.
Definition: SDL3pp_tray.h:230
constexpr Tray & operator=(const Tray &other) noexcept=default
Assignment operator.
constexpr Tray(std::nullptr_t=nullptr) noexcept
Default ctor.
Definition: SDL3pp_tray.h:169
constexpr Tray & operator=(Tray &&other) noexcept
Assignment operator.
Definition: SDL3pp_tray.h:233
constexpr auto operator<=>(const Tray &other) const noexcept=default
Comparison.
Tray(SurfaceParam icon, StringParam tooltip)
Create an icon to be placed in the operating system's tray, or equivalent.
Definition: SDL3pp_tray.h:224
constexpr Tray(Tray &&other) noexcept
Move constructor.
Definition: SDL3pp_tray.h:192
constexpr TrayRaw release() noexcept
Retrieves underlying TrayRaw and clear this.
Definition: SDL3pp_tray.h:248
constexpr Tray(const TrayRaw resource) noexcept
Constructs from TrayParam.
Definition: SDL3pp_tray.h:181
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition: SDL3pp_stdinc.h:341
void(SDLCALL *)(void *userdata, TrayEntryRaw entry) TrayCallback
A callback that is invoked when a tray entry is selected.
Definition: SDL3pp_tray.h:141
TrayMenu CreateSubmenu()
Create a submenu for a system tray entry.
Definition: SDL3pp_tray.h:965
TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition: SDL3pp_tray.h:1108
SDL_TrayMenu * TrayMenuRaw
Alias to raw representation for TrayMenu.
Definition: SDL3pp_tray.h:61
void SetTooltip(StringParam tooltip)
Updates the system tray icon's tooltip.
Definition: SDL3pp_tray.h:904
void SetTrayEntryEnabled(TrayEntryParam entry, bool enabled)
Sets whether or not an entry is enabled.
Definition: SDL3pp_tray.h:1241
void UpdateTrays()
Update the trays.
Definition: SDL3pp_tray.h:1425
bool GetTrayEntryEnabled(TrayEntryParam entry)
Gets whether or not an entry is enabled.
Definition: SDL3pp_tray.h:1266
TrayEntry InsertTrayEntryAt(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition: SDL3pp_tray.h:1100
TrayEntryParam GetParentEntry() const
Gets the entry for which the menu is a submenu, if the current menu is a submenu.
Definition: SDL3pp_tray.h:1382
TrayMenu GetMenu() const
Gets a previously created tray menu.
Definition: SDL3pp_tray.h:994
void DestroyTray(TrayRaw tray)
Destroys a tray object.
Definition: SDL3pp_tray.h:1332
constexpr TrayEntryFlags TRAYENTRY_BUTTON
Make the entry a simple button. Required.
Definition: SDL3pp_tray.h:115
void SetIcon(SurfaceParam icon)
Updates the system tray icon's icon.
Definition: SDL3pp_tray.h:881
void SetChecked(bool checked)
Sets whether or not an entry is checked.
Definition: SDL3pp_tray.h:1194
constexpr TrayEntryFlags TRAYENTRY_DISABLED
Make the entry disabled. Optional.
Definition: SDL3pp_tray.h:124
TrayParam GetTrayMenuParentTray(TrayMenuRaw menu)
Gets the tray for which this menu is the first-level menu, if the current menu isn't a submenu.
Definition: SDL3pp_tray.h:1405
TrayMenu CreateMenu()
Create a menu for a system tray.
Definition: SDL3pp_tray.h:936
void SetTrayEntryCallback(TrayEntryParam entry, TrayCallback callback, void *userdata)
Sets a callback to be invoked when the entry is selected.
Definition: SDL3pp_tray.h:1292
TrayMenu GetParent()
Gets the menu containing a certain tray entry.
Definition: SDL3pp_tray.h:1354
void SetTrayEntryLabel(TrayEntryParam entry, StringParam label)
Sets the label of an entry.
Definition: SDL3pp_tray.h:1135
TrayMenu GetTrayEntryParent(TrayEntryParam entry)
Gets the menu containing a certain tray entry.
Definition: SDL3pp_tray.h:1349
void Click()
Simulate a click on a tray entry.
Definition: SDL3pp_tray.h:1316
std::span< TrayEntry > GetTrayEntries(TrayMenu menu)
Returns a list of entries in the menu, in order.
Definition: SDL3pp_tray.h:1044
void SetTrayIcon(TrayParam tray, SurfaceParam icon)
Updates the system tray icon's icon.
Definition: SDL3pp_tray.h:876
TrayMenu GetTraySubmenu(TrayEntryParam entry)
Gets a previously created tray entry submenu.
Definition: SDL3pp_tray.h:1018
void Destroy()
Destroys a tray object.
Definition: SDL3pp_tray.h:1334
void SetEnabled(bool enabled)
Sets whether or not an entry is enabled.
Definition: SDL3pp_tray.h:1246
TrayMenu CreateTrayMenu(TrayParam tray)
Create a menu for a system tray.
Definition: SDL3pp_tray.h:931
void RemoveTrayEntry(TrayEntryRaw entry)
Removes a tray entry.
Definition: SDL3pp_tray.h:1070
void ClickTrayEntry(TrayEntryParam entry)
Simulate a click on a tray entry.
Definition: SDL3pp_tray.h:1314
Tray CreateTray(SurfaceParam icon, StringParam tooltip)
Create an icon to be placed in the operating system's tray, or equivalent.
Definition: SDL3pp_tray.h:858
TrayEntryParam GetTrayMenuParentEntry(TrayMenuRaw menu)
Gets the entry for which the menu is a submenu, if the current menu is a submenu.
Definition: SDL3pp_tray.h:1377
bool GetTrayEntryChecked(TrayEntryParam entry)
Gets whether or not an entry is checked.
Definition: SDL3pp_tray.h:1216
const char * GetTrayEntryLabel(TrayEntryParam entry)
Gets the label of an entry.
Definition: SDL3pp_tray.h:1162
TrayMenu GetSubmenu()
Gets a previously created tray entry submenu.
Definition: SDL3pp_tray.h:1023
const char * GetLabel() const
Gets the label of an entry.
Definition: SDL3pp_tray.h:1167
bool GetChecked() const
Gets whether or not an entry is checked.
Definition: SDL3pp_tray.h:1221
SDL_TrayEntry * TrayEntryRaw
Alias to raw representation for TrayEntry.
Definition: SDL3pp_tray.h:70
std::span< TrayEntry > GetEntries()
Returns a list of entries in the menu, in order.
Definition: SDL3pp_tray.h:1052
bool GetEnabled() const
Gets whether or not an entry is enabled.
Definition: SDL3pp_tray.h:1271
void SetTrayTooltip(TrayParam tray, StringParam tooltip)
Updates the system tray icon's tooltip.
Definition: SDL3pp_tray.h:899
TrayParam GetParentTray() const
Gets the tray for which this menu is the first-level menu, if the current menu isn't a submenu.
Definition: SDL3pp_tray.h:1410
constexpr TrayEntryFlags TRAYENTRY_CHECKED
Make the entry checked. This is valid only for checkboxes. Optional.
Definition: SDL3pp_tray.h:128
void Remove()
Removes a tray entry.
Definition: SDL3pp_tray.h:1072
Uint32 TrayEntryFlags
Flags that control the creation of system tray entries.
Definition: SDL3pp_tray.h:113
TrayMenu GetTrayMenu(TrayParam tray)
Gets a previously created tray menu.
Definition: SDL3pp_tray.h:992
TrayMenu CreateTraySubmenu(TrayEntryParam entry)
Create a submenu for a system tray entry.
Definition: SDL3pp_tray.h:960
void SetTrayEntryChecked(TrayEntryParam entry, bool checked)
Sets whether or not an entry is checked.
Definition: SDL3pp_tray.h:1189
constexpr TrayEntryFlags TRAYENTRY_SUBMENU
Prepare the entry to have a submenu. Required.
Definition: SDL3pp_tray.h:121
constexpr TrayEntryFlags TRAYENTRY_CHECKBOX
Make the entry a checkbox. Required.
Definition: SDL3pp_tray.h:118
void SetLabel(StringParam label)
Sets the label of an entry.
Definition: SDL3pp_tray.h:1140
SDL_Tray * TrayRaw
Alias to raw representation for Tray.
Definition: SDL3pp_tray.h:25
Main include header for the SDL3pp library.
Definition: SDL3pp_callbackWrapper.h:169
Safely wrap Surface for non owning parameters.
Definition: SDL3pp_surface.h:53
Safely wrap TrayEntry for non owning parameters.
Definition: SDL3pp_tray.h:77
constexpr TrayEntryParam(TrayEntryRaw value)
Constructs from TrayEntryRaw.
Definition: SDL3pp_tray.h:81
constexpr auto operator<=>(const TrayEntryParam &other) const =default
Comparison.
constexpr TrayEntryParam(std::nullptr_t=nullptr)
Constructs null/invalid.
Definition: SDL3pp_tray.h:87
TrayEntryRaw value
parameter's TrayEntryRaw
Definition: SDL3pp_tray.h:78
RAII owning version TrayEntry.
Definition: SDL3pp_tray.h:820
~TrayEntryScoped()
Destructor.
Definition: SDL3pp_tray.h:832
constexpr TrayEntryScoped(TrayEntry &&other) noexcept
Move constructor.
Definition: SDL3pp_tray.h:826
Safely wrap Tray for non owning parameters.
Definition: SDL3pp_tray.h:32
constexpr TrayParam(std::nullptr_t=nullptr)
Constructs null/invalid.
Definition: SDL3pp_tray.h:42
TrayRaw value
parameter's TrayRaw
Definition: SDL3pp_tray.h:33
constexpr auto operator<=>(const TrayParam &other) const =default
Comparison.
constexpr TrayParam(TrayRaw value)
Constructs from TrayRaw.
Definition: SDL3pp_tray.h:36
Semi-safe reference for Tray.
Definition: SDL3pp_tray.h:355
TrayRef(TrayParam resource) noexcept
Constructs from TrayParam.
Definition: SDL3pp_tray.h:365
constexpr TrayRef(const TrayRef &other) noexcept=default
Copy constructor.
TrayRef(TrayRaw resource) noexcept
Constructs from TrayParam.
Definition: SDL3pp_tray.h:377
~TrayRef()
Destructor.
Definition: SDL3pp_tray.h:386