diff options
-rw-r--r-- | backends/platform/sdl/win32/win32.cpp | 24 | ||||
-rw-r--r-- | backends/platform/sdl/win32/win32.h | 1 | ||||
-rw-r--r-- | dists/scummvm.rc | 1 | ||||
-rw-r--r-- | dists/scummvm.rc.in | 1 |
4 files changed, 27 insertions, 0 deletions
diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 814f1955fe..420ed2465b 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -34,6 +34,8 @@ #undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one... #include <shellapi.h> +#include <SDL_syswm.h> // For setting the icon + #include "backends/platform/sdl/win32/win32.h" #include "backends/fs/windows/windows-fs-factory.h" #include "backends/taskbar/win32/win32-taskbar.h" @@ -137,6 +139,28 @@ bool OSystem_Win32::displayLogFile() { return false; } +void OSystem_Win32::setupIcon() { + HMODULE handle = GetModuleHandle(NULL); + HICON ico = LoadIcon(handle, MAKEINTRESOURCE(1001 /* IDI_ICON */)); + if (ico) { + SDL_SysWMinfo wminfo; + SDL_VERSION(&wminfo.version); + if (SDL_GetWMInfo(&wminfo)) { + // Replace the handle to the icon associated with the window class by our custom icon + SetClassLongPtr(wminfo.window, GCLP_HICON, (ULONG_PTR)ico); + + // Since there wasn't any default icon, we can't use the return value from SetClassLong + // to check for errors (it would be 0 in both cases: error or no previous value for the + // icon handle). Instead we check for the last-error code value. + if (GetLastError() == ERROR_SUCCESS) + return; + } + } + + // If no icon has been set, fallback to default path + OSystem_SDL::setupIcon(); +} + Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index ef7b6af3f1..cc2fc51d36 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -46,6 +46,7 @@ protected: */ Common::String _logFilePath; + virtual void setupIcon(); virtual Common::String getDefaultConfigFileName(); virtual Common::WriteStream *createLogFile(); }; diff --git a/dists/scummvm.rc b/dists/scummvm.rc index 109437305c..d3330045b5 100644 --- a/dists/scummvm.rc +++ b/dists/scummvm.rc @@ -5,6 +5,7 @@ #endif #define FILE 256 +#define IDI_ICON 1001 IDI_ICON ICON DISCARDABLE "icons/scummvm.ico" diff --git a/dists/scummvm.rc.in b/dists/scummvm.rc.in index c043ce1644..8186e0e8ef 100644 --- a/dists/scummvm.rc.in +++ b/dists/scummvm.rc.in @@ -5,6 +5,7 @@ #endif #define FILE 256 +#define IDI_ICON 1001 IDI_ICON ICON DISCARDABLE "icons/scummvm.ico" |