From 329e11a09d5b5d7eb328fca38fcd6faa69028739 Mon Sep 17 00:00:00 2001 From: cxgeorge <> Date: Wed, 28 Feb 2001 21:08:14 +0000 Subject: [PATCH] fix icon stuff --- panda/src/wdxdisplay/config_wdxdisplay.cxx | 8 ++++++-- panda/src/wdxdisplay/config_wdxdisplay.h | 3 ++- panda/src/wdxdisplay/wdxGraphicsWindow.cxx | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/panda/src/wdxdisplay/config_wdxdisplay.cxx b/panda/src/wdxdisplay/config_wdxdisplay.cxx index f357211891..76a81c7233 100644 --- a/panda/src/wdxdisplay/config_wdxdisplay.cxx +++ b/panda/src/wdxdisplay/config_wdxdisplay.cxx @@ -16,8 +16,6 @@ ConfigureFn(config_wdxdisplay) { init_libwdxdisplay(); } -string IconFileName = config_wdxdisplay.GetString("win32-window-icon",""); - //////////////////////////////////////////////////////////////////// // Function: init_libwdxdisplay // Description: Initializes the library. This must be called at @@ -43,3 +41,9 @@ init_libwdxdisplay() { wdxGraphicsWindow::get_class_type(), wdxGraphicsWindow::make_wdxGraphicsWindow); } + +// cant use global var cleanly because global var static init executed after init_libwgl(), incorrectly reiniting var +Filename get_icon_filename() { + string iconname = config_wdxdisplay.GetString("win32-window-icon",""); + return ExecutionEnvironment::expand_string(iconname); +} diff --git a/panda/src/wdxdisplay/config_wdxdisplay.h b/panda/src/wdxdisplay/config_wdxdisplay.h index 203f0a4a83..bb8475973d 100644 --- a/panda/src/wdxdisplay/config_wdxdisplay.h +++ b/panda/src/wdxdisplay/config_wdxdisplay.h @@ -7,11 +7,12 @@ #define __CONFIG_WDXDISPLAY_H__ #include +#include #include NotifyCategoryDecl(wdxdisplay, EXPCL_PANDADX, EXPTP_PANDADX); -extern string IconFileName; +extern Filename get_icon_filename(); extern EXPCL_PANDADX void init_libwdxdisplay(); diff --git a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx index 5b3ab600b6..ee241cd095 100644 --- a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx +++ b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx @@ -1103,8 +1103,13 @@ void wdxGraphicsWindow::config(void) { wc.lpfnWndProc = (WNDPROC) static_window_proc; wc.hInstance = hinstance; - if(!IconFileName.empty()) { - wc.hIcon = (HICON) LoadImage(NULL, IconFileName.c_str(), IMAGE_ICON, 0, 0, LR_LOADFROMFILE); + + string windows_icon_filename = get_icon_filename().to_os_specific(); + + if(!windows_icon_filename.empty()) { + // Note: LoadImage seems to cause win2k internal heap corruption (outputdbgstr warnings) + // if icon is more than 8bpp + wc.hIcon = (HICON) LoadImage(NULL, windows_icon_filename.c_str(), IMAGE_ICON, 0, 0, LR_LOADFROMFILE); } else { wc.hIcon = NULL; // use default app icon }