Skip to content

Commit

Permalink
Added support for custom tray icon on Windows via SDL hints.
Browse files Browse the repository at this point in the history
SDL_CreateTray now respects SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL
and SDL_HINT_WINDOWS_INTRESOURCE_ICON hints and uses the specified icon
as the tray icon.
  • Loading branch information
Scrooge86x authored and slouken committed Jan 14, 2025
1 parent 5815372 commit 0aa319e
Showing 1 changed file with 26 additions and 4 deletions.
30 changes: 26 additions & 4 deletions src/tray/windows/SDL_tray.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,28 @@ static wchar_t *escape_label(const char *in)
return out;
}

static HICON load_default_icon()
{
HINSTANCE hInstance = GetModuleHandle(NULL);
if (!hInstance) {
return LoadIcon(NULL, IDI_APPLICATION);
}

const char *hint = SDL_GetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL);
if (hint && *hint) {
HICON icon = LoadIcon(hInstance, MAKEINTRESOURCE(SDL_atoi(hint)));
return icon ? icon : LoadIcon(NULL, IDI_APPLICATION);
}

hint = SDL_GetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON);
if (hint && *hint) {
HICON icon = LoadIcon(hInstance, MAKEINTRESOURCE(SDL_atoi(hint)));
return icon ? icon : LoadIcon(NULL, IDI_APPLICATION);
}

return LoadIcon(NULL, IDI_APPLICATION);
}

SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
{
SDL_Tray *tray = (SDL_Tray *)SDL_malloc(sizeof(*tray));
Expand Down Expand Up @@ -216,12 +238,12 @@ SDL_Tray *SDL_CreateTray(SDL_Surface *icon, const char *tooltip)
tray->nid.hIcon = CreateIconFromSurface(icon);

if (!tray->nid.hIcon) {
tray->nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
tray->nid.hIcon = load_default_icon();
}

tray->icon = tray->nid.hIcon;
} else {
tray->nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
tray->nid.hIcon = load_default_icon();
tray->icon = tray->nid.hIcon;
}

Expand All @@ -245,12 +267,12 @@ void SDL_SetTrayIcon(SDL_Tray *tray, SDL_Surface *icon)
tray->nid.hIcon = CreateIconFromSurface(icon);

if (!tray->nid.hIcon) {
tray->nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
tray->nid.hIcon = load_default_icon();
}

tray->icon = tray->nid.hIcon;
} else {
tray->nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
tray->nid.hIcon = load_default_icon();
tray->icon = tray->nid.hIcon;
}

Expand Down

0 comments on commit 0aa319e

Please sign in to comment.