From 5a412ab6e2276302418f2535c2128ad9846d3543 Mon Sep 17 00:00:00 2001
From: Přemysl Eric Janouch
Date: Wed, 26 Jul 2023 14:57:35 +0200
Subject: xW: handle WM_SYSCOLORCHANGE
---
xW/xW.cpp | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/xW/xW.cpp b/xW/xW.cpp
index d3de8a6..e4733a2 100644
--- a/xW/xW.cpp
+++ b/xW/xW.cpp
@@ -499,7 +499,7 @@ convert_item_formatting(Relay::ItemData *item, CHARFORMAT2 &cf, bool &inverse)
}
static std::vector
-convert_items(std::vector> &items)
+convert_items(const std::vector> &items)
{
CHARFORMAT2 cf = default_charformat();
std::vector result;
@@ -1627,6 +1627,21 @@ window_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (auto b = buffer_by_name(g.buffer_current))
refresh_buffer(*b);
return 0;
+ case WM_SYSCOLORCHANGE:
+ // The topic would flicker with WS_EX_TRANSPARENT.
+ // The buffer only changed its text colour, not background.
+ SendMessage(g.hwndTopic,
+ EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE));
+ SendMessage(g.hwndBuffer,
+ EM_SETBKGNDCOLOR, 1, 0);
+
+ // XXX: This is incomplete, we'd have to run convert_items() again;
+ // essentially only COLOR_GRAYTEXT is reloaded in here.
+ if (auto b = buffer_by_name(g.buffer_current))
+ refresh_buffer(*b);
+
+ // Pass it to all child windows, through DefWindowProc().
+ break;
case WM_ACTIVATE:
if (LOWORD(wParam) == WA_INACTIVE)
g.hwndLastFocused = GetFocus();
--
cgit v1.2.3-70-g09d2