summaryrefslogtreecommitdiffstats
path: root/win/tkWinMenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'win/tkWinMenu.c')
-rw-r--r--win/tkWinMenu.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c
index 5cd4b3f..6c8210d 100644
--- a/win/tkWinMenu.c
+++ b/win/tkWinMenu.c
@@ -973,7 +973,7 @@ TkWinEmbeddedMenuProc(
break;
case WM_SETTINGCHANGE:
- if (wParam == SPI_SETNONCLIENTMETRICS
+ if (wParam == SPI_SETNONCLIENTMETRICS
|| wParam == SPI_SETKEYBOARDCUES) {
SetDefaults(0);
}
@@ -2624,7 +2624,7 @@ TkpDrawMenuEntry(
fmPtr, adjustedX, adjustedY, width, adjustedHeight);
}
}
-
+
/*
* Copy the entry contents from the temporary bitmap to the menu.
*/
@@ -3194,7 +3194,14 @@ SetDefaults(
TEXTMETRIC tm;
int pointSize;
HFONT menuFont;
- NONCLIENTMETRICS ncMetrics;
+ /* See: [Bug #3239768] tk8.4.19 (and later) WIN32 menu font support */
+ struct {
+ NONCLIENTMETRICS metrics;
+#if (WINVER < 0x0600)
+ int padding;
+#endif
+ } nc;
+ OSVERSIONINFO os;
/*
* Set all of the default options. The loop will terminate when we run out
@@ -3212,10 +3219,17 @@ SetDefaults(
}
Tcl_DStringInit(&menuFontDString);
- ncMetrics.cbSize = sizeof(ncMetrics);
- SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncMetrics),
- &ncMetrics, 0);
- menuFont = CreateFontIndirect(&ncMetrics.lfMenuFont);
+ nc.metrics.cbSize = sizeof(nc);
+
+ os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&os);
+ if (os.dwMajorVersion < 6) {
+ nc.metrics.cbSize -= sizeof(int);
+ }
+
+ SystemParametersInfo(SPI_GETNONCLIENTMETRICS, nc.metrics.cbSize,
+ &nc.metrics, 0);
+ menuFont = CreateFontIndirect(&nc.metrics.lfMenuFont);
SelectObject(scratchDC, menuFont);
GetTextMetrics(scratchDC, &tm);
GetTextFace(scratchDC, LF_FACESIZE, faceName);