patch 9.1.1813: MS-Windows: title bar is always white
Commit:
https://github.com/vim/vim/commit/dddde9ce123c665e27faccbcb368ca9e88ed18ed
Author: Mao-Yining <[email protected]>
Date: Mon Sep 29 21:13:57 2025 +0000
patch 9.1.1813: MS-Windows: title bar is always white
Problem: MS-Windows: title bar is always white
Solution: Set_caption() and set the title bars color to the
Normal highlighting background (Mao-Yining)
The implement of 'guidarkmode' is a much longer task, so I would like to
complete this most needed feature.
This commit seen the caption bar as the extension of the background so
it is follow the option 'background' before Windows 11 and follow the
background color after Windows 11.
fixes: #3922
fixes: #18028
closes: #18282
Signed-off-by: Mao-Yining <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt
index 6c0af5079..026f3a74d 100644
--- a/runtime/doc/gui_w32.txt
+++ b/runtime/doc/gui_w32.txt
@@ -1,4 +1,4 @@
-*gui_w32.txt* For Vim version 9.1. Last change: 2025 Aug 06
+*gui_w32.txt* For Vim version 9.1. Last change: 2025 Sep 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -488,4 +488,12 @@ VIM_KEYCODE_TRANS_STRATEGY can be set to the desired value
("experimental" or
set VIM_KEYCODE_TRANS_STRATEGY=experimental
gvim.exe
<
+
+Title Bar's Behaviour *gui-w32-title-bar-behaviour*
+
+The color of the gVim title bar (sometimes also called the caption bar) is
+treated as part of the application's background. Starting with Windows 11,
+it follows the background color defined by |hl-Normal|, so it matches the
+background of the current colorscheme.
+
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/tags b/runtime/doc/tags
index c59f848d5..cb14b75fd 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -8223,6 +8223,7 @@ gui-w32-cmdargs gui_w32.txt /*gui-w32-cmdargs*
gui-w32-dialogs gui_w32.txt /*gui-w32-dialogs*
gui-w32-printing gui_w32.txt /*gui-w32-printing*
gui-w32-start gui_w32.txt /*gui-w32-start*
+gui-w32-title-bar-behaviour gui_w32.txt /*gui-w32-title-bar-behaviour*
gui-w32-various gui_w32.txt /*gui-w32-various*
gui-w32-windowid gui_w32.txt /*gui-w32-windowid*
gui-w32s os_win32.txt /*gui-w32s*
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index 4ad3eb2a4..910a03614 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt* For Vim version 9.1. Last change: 2025 Sep 28
+*version9.txt* For Vim version 9.1. Last change: 2025 Sep 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41748,6 +41748,8 @@ Plugins~
Platform specific ~
- MS-Winodws: Paths like "\Windows" and "/Windows" are now considered to be
absolute paths (to the current drive) and no longer relative.
+- MS-Windows: The title bar background follows the |hl-Normal| highlighting
+ group background color.
- macOS: increase default scheduler priority to TASK_DEFAULT_APPLICATION.
Others: ~
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 1ee4ab167..19dcfe24f 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -318,6 +318,14 @@ gui_mch_set_rendering_options(char_u *s)
# define SPI_SETWHEELSCROLLCHARS 0x006D
#endif
+#ifndef DWMWA_CAPTION_COLOR
+# define DWMWA_CAPTION_COLOR 35
+#endif
+
+#ifndef DWMWA_TEXT_COLOR
+# define DWMWA_TEXT_COLOR 36
+#endif
+
#ifdef PROTO
/*
* Define a few things for generating prototypes. This is just to avoid
@@ -468,6 +476,9 @@ static int (WINAPI *pGetSystemMetricsForDpi)(int, UINT) =
NULL;
static DPI_AWARENESS_CONTEXT (WINAPI
*pSetThreadDpiAwarenessContext)(DPI_AWARENESS_CONTEXT dpiContext) = NULL;
static DPI_AWARENESS (WINAPI
*pGetAwarenessFromDpiAwarenessContext)(DPI_AWARENESS_CONTEXT) = NULL;
+// Sets the value of Desktop Window Manager (DWM) non-client rendering
attributes for a window.
+static HRESULT (WINAPI *pDwmSetWindowAttribute)(HWND, DWORD, LPCVOID, DWORD) =
NULL;
+
static int WINAPI
stubGetSystemMetricsForDpi(int nIndex, UINT dpi UNUSED)
{
@@ -1591,6 +1602,20 @@ _TextAreaWndProc(
}
}
+ static void
+load_dwm_func(void)
+{
+ static HMODULE hLibDwm = NULL;
+ hLibDwm = vimLoadLib("dwmapi.dll");
+ if (hLibDwm == NULL)
+ return;
+
+ pDwmSetWindowAttribute = (HRESULT (WINAPI *)(HWND, DWORD, LPCVOID, DWORD))
+ GetProcAddress(hLibDwm, "DwmSetWindowAttribute");
+}
+
+extern BOOL win11_or_later; // this is in os_win32.c
+
/*
* Called when the foreground or background color has been changed.
*/
@@ -1604,6 +1629,21 @@ gui_mch_new_colors(void)
s_hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)s_brush);
InvalidateRect(s_hwnd, NULL, TRUE);
DeleteObject(prevBrush);
+
+ // Set The Caption Bar
+
+ if (pDwmSetWindowAttribute == NULL)
+ return;
+
+ if (win11_or_later)
+ {
+ const COLORREF captionColor = gui.back_pixel;
+ pDwmSetWindowAttribute(s_hwnd, DWMWA_CAPTION_COLOR,
+ &captionColor, sizeof(captionColor));
+ const COLORREF textColor = gui.norm_pixel;
+ pDwmSetWindowAttribute(s_hwnd, DWMWA_TEXT_COLOR,
+ &textColor, sizeof(textColor));
+ }
}
/*
@@ -5636,6 +5676,8 @@ gui_mch_init(void)
load_dpi_func();
+ load_dwm_func();
+
s_dpi = pGetDpiForSystem();
update_scrollbar_size();
diff --git a/src/os_win32.c b/src/os_win32.c
index 3873a2b37..06387c3f9 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -222,8 +222,10 @@ static int suppress_winsize = 1; // don't fiddle with
console
static WCHAR *exe_pathw = NULL;
-static BOOL win8_or_later = FALSE;
-static BOOL win10_22H2_or_later = FALSE;
+BOOL win8_or_later = FALSE;
+BOOL win10_22H2_or_later = FALSE;
+BOOL win11_or_later = FALSE;
+
#if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
static BOOL use_alternate_screen_buffer = FALSE;
#endif
@@ -1010,6 +1012,10 @@ PlatformId(void)
|| ovi.dwMajorVersion > 10)
win10_22H2_or_later = TRUE;
+ if ((ovi.dwMajorVersion == 10 && ovi.dwBuildNumber >= 22000)
+ || ovi.dwMajorVersion > 10)
+ win11_or_later = TRUE;
+
#ifdef HAVE_ACL
// Enable privilege for getting or setting SACLs.
if (!win32_enable_privilege(SE_SECURITY_NAME))
diff --git a/src/version.c b/src/version.c
index d989f097a..3cc88a106 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1813,
/**/
1812,
/**/
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1v3LRc-001vXx-Qx%40256bit.org.