diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | win/tkWinMenu.c | 21 |
2 files changed, 24 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2006-09-20 Jeff Hobbs <jeffh@ActiveState.com> + + * win/tkWinMenu.c (TkpPostMenu): disable menu animation in menus + with images to avoid clipping bug. [Bug 1329198] + 2006-09-21 Donal K. Fellows <dkf@users.sf.net> * generic/tkImgBmap.c (ImgBmapPostscript): Change 0 to NULL, since diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c index 5b037dd..432e8db 100644 --- a/win/tkWinMenu.c +++ b/win/tkWinMenu.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinMenu.c,v 1.48 2006/05/25 23:50:31 hobbs Exp $ + * RCS: @(#) $Id: tkWinMenu.c,v 1.49 2006/09/21 00:13:36 hobbs Exp $ */ #define OEMRESOURCE @@ -35,6 +35,10 @@ #define ALIGN_BITMAP_TOP 0x00000004 #define ALIGN_BITMAP_BOTTOM 0x00000008 +#ifndef TPM_NOANIMATION +#define TPM_NOANIMATION 0x4000L +#endif + /* * Platform-specific menu flags: * @@ -721,11 +725,12 @@ TkpPostMenu(interp, menuPtr, x, y) int y; { HMENU winMenuHdl = (HMENU) menuPtr->platformData; - int result, flags; + int i, result, flags; RECT noGoawayRect; POINT point; Tk_Window parentWindow = Tk_Parent(menuPtr->tkwin); int oldServiceMode = Tcl_GetServiceMode(); + TkMenuEntry *mePtr; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); @@ -788,6 +793,18 @@ TkpPostMenu(interp, menuPtr, x, y) } } + /* + * Disable menu animation if an image is present, as clipping isn't + * handled correctly with temp DCs. [Bug 1329198] + */ + for (i = 0; i < menuPtr->numEntries; i++) { + mePtr = menuPtr->entries[i]; + if (mePtr->image != NULL) { + flags |= TPM_NOANIMATION; + break; + } + } + TrackPopupMenu(winMenuHdl, flags, x, y, 0, tsdPtr->menuHWND, &noGoawayRect); Tcl_SetServiceMode(oldServiceMode); |