summaryrefslogtreecommitdiffstats
path: root/win/tkWinWm.c
diff options
context:
space:
mode:
authorhobbs <hobbs>2005-02-11 20:34:53 (GMT)
committerhobbs <hobbs>2005-02-11 20:34:53 (GMT)
commitd4159c07943ed7e784782c9fa621a039632e57f0 (patch)
tree92488d16cdc683054b57543fc0481601d097cb88 /win/tkWinWm.c
parenta545a81323625e0180c45d7b6d846789bcd988ff (diff)
downloadtk-d4159c07943ed7e784782c9fa621a039632e57f0.zip
tk-d4159c07943ed7e784782c9fa621a039632e57f0.tar.gz
tk-d4159c07943ed7e784782c9fa621a039632e57f0.tar.bz2
* win/tkWinWm.c (TkWinGetIcon): fix toplevel retrieval for
determining icon ref (potential crash). [Bug 1105738]
Diffstat (limited to 'win/tkWinWm.c')
-rw-r--r--win/tkWinWm.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/win/tkWinWm.c b/win/tkWinWm.c
index 8fd60a9..de56e6e 100644
--- a/win/tkWinWm.c
+++ b/win/tkWinWm.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkWinWm.c,v 1.54.2.17 2005/01/04 01:28:51 hobbs Exp $
+ * RCS: @(#) $Id: tkWinWm.c,v 1.54.2.18 2005/02/11 20:35:09 hobbs Exp $
*/
#include "tkWinInt.h"
@@ -1130,9 +1130,8 @@ WinSetIcon(interp, titlebaricon, tkw)
*----------------------------------------------------------------------
*/
HICON
-TkWinGetIcon(Tk_Window tkw, DWORD iconsize)
+TkWinGetIcon(Tk_Window tkwin, DWORD iconsize)
{
- TkWindow *winPtr;
WmInfo *wmPtr;
HICON icon;
ThreadSpecificData *tsdPtr = (ThreadSpecificData *)
@@ -1145,17 +1144,19 @@ TkWinGetIcon(Tk_Window tkw, DWORD iconsize)
return GetIcon(tsdPtr->iconPtr, iconsize);
}
- if (Tk_WindowId(tkw) == None) {
- Tk_MakeWindowExist(tkw);
+ /* ensure we operate on the toplevel, that has the icon refs */
+ while (!Tk_IsTopLevel(tkwin)) {
+ tkwin = Tk_Parent(tkwin);
+ if (tkwin == NULL) {
+ return NULL;
+ }
}
- winPtr = (TkWindow *)tkw;
- if (!(Tk_IsTopLevel(tkw))) {
- winPtr = GetTopLevel(Tk_GetHWND(Tk_WindowId(tkw)));
+ if (Tk_WindowId(tkwin) == None) {
+ Tk_MakeWindowExist(tkwin);
}
- /* We must get the window's wrapper, not the window itself */
- wmPtr = winPtr->wmInfoPtr;
+ wmPtr = ((TkWindow *) tkwin)->wmInfoPtr;
if (wmPtr->iconPtr != NULL) {
/*
* return window toplevel icon