Added SDL_ClickTrayEntry()
Also removed the app delegate from the tray code on Cocoa and folded that into SDL3AppDelegate. Fixes https://github.com/libsdl-org/SDL/issues/11906
This commit is contained in:
@@ -58,31 +58,6 @@ struct SDL_Tray {
|
||||
SDL_TrayMenu *menu;
|
||||
};
|
||||
|
||||
static NSApplication *app = NULL;
|
||||
|
||||
@interface AppDelegate: NSObject <NSApplicationDelegate>
|
||||
- (IBAction)menu:(id)sender;
|
||||
@end
|
||||
|
||||
@implementation AppDelegate{}
|
||||
- (IBAction)menu:(id)sender
|
||||
{
|
||||
SDL_TrayEntry *entry = [[sender representedObject] pointerValue];
|
||||
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry->flags & SDL_TRAYENTRY_CHECKBOX) {
|
||||
SDL_SetTrayEntryChecked(entry, !SDL_GetTrayEntryChecked(entry));
|
||||
}
|
||||
|
||||
if (entry->callback) {
|
||||
entry->callback(entry->userdata, entry);
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
static void DestroySDLMenu(SDL_TrayMenu *menu)
|
||||
{
|
||||
for (int i = 0; i < menu->nEntries; i++) {
|
||||
@@ -106,11 +81,6 @@ static void DestroySDLMenu(SDL_TrayMenu *menu)
|
||||
SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||
{
|
||||
SDL_Tray *tray = (SDL_Tray *)SDL_calloc(1, sizeof(*tray));
|
||||
|
||||
AppDelegate *delegate = [[AppDelegate alloc] init];
|
||||
app = [NSApplication sharedApplication];
|
||||
[app setDelegate:delegate];
|
||||
|
||||
if (!tray) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -118,7 +88,7 @@ SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
|
||||
tray->statusItem = nil;
|
||||
tray->statusBar = [NSStatusBar systemStatusBar];
|
||||
tray->statusItem = [tray->statusBar statusItemWithLength:NSVariableStatusItemLength];
|
||||
[app activateIgnoringOtherApps:TRUE];
|
||||
[[NSApplication sharedApplication] activateIgnoringOtherApps:TRUE];
|
||||
|
||||
if (tooltip) {
|
||||
tray->statusItem.button.toolTip = [NSString stringWithUTF8String:tooltip];
|
||||
@@ -421,6 +391,21 @@ void SDL_SetTrayEntryCallback(SDL_TrayEntry *entry, SDL_TrayCallback callback, v
|
||||
entry->userdata = userdata;
|
||||
}
|
||||
|
||||
void SDL_ClickTrayEntry(SDL_TrayEntry *entry)
|
||||
{
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry->flags & SDL_TRAYENTRY_CHECKBOX) {
|
||||
SDL_SetTrayEntryChecked(entry, !SDL_GetTrayEntryChecked(entry));
|
||||
}
|
||||
|
||||
if (entry->callback) {
|
||||
entry->callback(entry->userdata, entry);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_TrayMenu *SDL_GetTrayEntryParent(SDL_TrayEntry *entry)
|
||||
{
|
||||
return entry->parent;
|
||||
|
||||
@@ -119,6 +119,10 @@ void SDL_SetTrayEntryCallback(SDL_TrayEntry *entry, SDL_TrayCallback callback, v
|
||||
SDL_Unsupported();
|
||||
}
|
||||
|
||||
void SDL_ClickTrayEntry(SDL_TrayEntry *entry)
|
||||
{
|
||||
}
|
||||
|
||||
SDL_TrayMenu *SDL_GetTrayEntryParent(SDL_TrayEntry *entry)
|
||||
{
|
||||
SDL_Unsupported();
|
||||
|
||||
@@ -671,6 +671,21 @@ void SDL_SetTrayEntryCallback(SDL_TrayEntry *entry, SDL_TrayCallback callback, v
|
||||
entry->userdata = userdata;
|
||||
}
|
||||
|
||||
void SDL_ClickTrayEntry(SDL_TrayEntry *entry)
|
||||
{
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry->flags & SDL_TRAYENTRY_CHECKBOX) {
|
||||
SDL_SetTrayEntryChecked(entry, !SDL_GetTrayEntryChecked(entry));
|
||||
}
|
||||
|
||||
if (entry->callback) {
|
||||
entry->callback(entry->userdata, entry);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_TrayMenu *SDL_GetTrayEntryParent(SDL_TrayEntry *entry)
|
||||
{
|
||||
return entry->parent;
|
||||
|
||||
@@ -536,6 +536,21 @@ void SDL_SetTrayEntryCallback(SDL_TrayEntry *entry, SDL_TrayCallback callback, v
|
||||
entry->userdata = userdata;
|
||||
}
|
||||
|
||||
void SDL_ClickTrayEntry(SDL_TrayEntry *entry)
|
||||
{
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry->flags & SDL_TRAYENTRY_CHECKBOX) {
|
||||
SDL_SetTrayEntryChecked(entry, !SDL_GetTrayEntryChecked(entry));
|
||||
}
|
||||
|
||||
if (entry->callback) {
|
||||
entry->callback(entry->userdata, entry);
|
||||
}
|
||||
}
|
||||
|
||||
SDL_TrayMenu *SDL_GetTrayEntryParent(SDL_TrayEntry *entry)
|
||||
{
|
||||
return entry->parent;
|
||||
|
||||
Reference in New Issue
Block a user