https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5b40f6f353d47bd341439…
commit 5b40f6f353d47bd3414399a64bf47e40dd28a8e0
Author: Carl J. Bialorucki <cbialo2(a)outlook.com>
AuthorDate: Fri Aug 4 05:20:19 2023 -0600
Commit: GitHub <noreply(a)github.com>
CommitDate: Fri Aug 4 14:20:19 2023 +0300
[EXPLORER] Add support for Windows 7 style system tray icon spacing (#5489)
When using large taskbar icon:
- Increase the padding around system tray icons.
- Push the clock text further to the right, increasing the left padding
between the clock and notification icons.
This matches Windows 7 shell behavior.
- Correct the spacing for the clock area, in the case when bPreferDate is
enabled, only two lines are visible, and the day of the week is shorter
than the date.
CORE-11698
---
base/shell/explorer/precomp.h | 1 +
base/shell/explorer/settings.cpp | 4 ++++
base/shell/explorer/syspager.cpp | 15 ++++++++++++++-
base/shell/explorer/trayclock.cpp | 9 ++++++++-
4 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/base/shell/explorer/precomp.h b/base/shell/explorer/precomp.h
index 91770090ef5..a52e3704266 100644
--- a/base/shell/explorer/precomp.h
+++ b/base/shell/explorer/precomp.h
@@ -211,6 +211,7 @@ struct TaskbarSettings
BOOL bPreferDate;
BOOL bHideInactiveIcons;
BOOL bSmallIcons;
+ BOOL bCompactTrayIcons;
TW_STRUCKRECTS2 sr;
BOOL Load();
diff --git a/base/shell/explorer/settings.cpp b/base/shell/explorer/settings.cpp
index 4c6b3dd2633..0f3daeddea6 100644
--- a/base/shell/explorer/settings.cpp
+++ b/base/shell/explorer/settings.cpp
@@ -32,6 +32,7 @@ BOOL TaskbarSettings::Save()
SHSetValueW(hkExplorer, L"Advanced", L"TaskbarSizeMove",
REG_DWORD, &bAllowSizeMove, sizeof(bAllowSizeMove));
sr.cbSize = sizeof(sr);
SHSetValueW(hkExplorer, L"Advanced", L"TaskbarSmallIcons",
REG_DWORD, &bSmallIcons, sizeof(bSmallIcons));
+ SHSetValueW(hkExplorer, L"Advanced", L"CompactTrayIcons",
REG_DWORD, &bCompactTrayIcons, sizeof(bCompactTrayIcons));
SHSetValueW(hkExplorer, L"StuckRects2", L"Settings", REG_BINARY,
&sr, sizeof(sr));
/* TODO: AutoHide writes something to HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Desktop\Components\0 figure out what and why */
@@ -61,6 +62,9 @@ BOOL TaskbarSettings::Load()
dwRet = SHGetValueW(hkExplorer, L"Advanced",
L"TaskbarSmallIcons", NULL, &dwValue, &cbSize);
bSmallIcons = (dwRet == ERROR_SUCCESS) ? (dwValue != 0) : TRUE;
+ dwRet = SHGetValueW(hkExplorer, L"Advanced", L"CompactTrayIcons",
NULL, &dwValue, &cbSize);
+ bCompactTrayIcons = (dwRet == ERROR_SUCCESS) ? (dwValue != 0) : bSmallIcons;
+
cbSize = sizeof(sr);
dwRet = SHGetValueW(hkExplorer, L"StuckRects2", L"Settings",
NULL, &sr, &cbSize);
diff --git a/base/shell/explorer/syspager.cpp b/base/shell/explorer/syspager.cpp
index 1bb2691b40f..35eb0faf75f 100644
--- a/base/shell/explorer/syspager.cpp
+++ b/base/shell/explorer/syspager.cpp
@@ -1252,6 +1252,11 @@ void CNotifyToolbar::Initialize(HWND hWndParent, CBalloonQueue *
queue)
tbm.dwMask = TBMF_BARPAD | TBMF_BUTTONSPACING | TBMF_PAD;
tbm.cxPad = 1;
tbm.cyPad = 1;
+ if (!g_TaskbarSettings.bCompactTrayIcons)
+ {
+ tbm.cxPad = GetSystemMetrics(SM_CXSMICON) / 2;
+ tbm.cyPad = GetSystemMetrics(SM_CYSMICON) / 2;
+ }
tbm.cxBarPad = 1;
tbm.cyBarPad = 1;
tbm.cxButtonSpacing = 1;
@@ -1397,11 +1402,19 @@ void CSysPagerWnd::GetSize(IN BOOL IsHorizontal, IN PSIZE size)
INT columns = 0;
INT cyButton = GetSystemMetrics(SM_CYSMICON) + 2;
INT cxButton = GetSystemMetrics(SM_CXSMICON) + 2;
+ if (!g_TaskbarSettings.bCompactTrayIcons)
+ {
+ cyButton = MulDiv(GetSystemMetrics(SM_CYSMICON), 3, 2);
+ cxButton = MulDiv(GetSystemMetrics(SM_CXSMICON), 3, 2);
+ }
int VisibleButtonCount = Toolbar.GetVisibleButtonCount();
if (IsHorizontal)
{
- rows = max(size->cy / cyButton, 1);
+ if (!g_TaskbarSettings.bCompactTrayIcons)
+ rows = max(size->cy / MulDiv(cyButton, 3, 2), 1);
+ else
+ rows = max(size->cy / cyButton, 1);
columns = (VisibleButtonCount + rows - 1) / rows;
}
else
diff --git a/base/shell/explorer/trayclock.cpp b/base/shell/explorer/trayclock.cpp
index 39277e19a04..f25c63dbe9c 100644
--- a/base/shell/explorer/trayclock.cpp
+++ b/base/shell/explorer/trayclock.cpp
@@ -267,6 +267,10 @@ WORD CTrayClockWnd::GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE
pSize)
if (!LinesMeasured)
return 0;
+ /* Prevents the date from being cut off when the day of the week is shorter than the
date. */
+ if (VisibleLines > 1 && g_TaskbarSettings.bPreferDate)
+ szMax.cx = LineSizes[CLOCKWND_FORMAT_DATE].cx;
+
for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
{
if (LineSizes[i].cx != 0)
@@ -567,8 +571,11 @@ VOID CTrayClockWnd::PaintLine(IN HDC hDC, IN OUT RECT *rcClient, IN
UINT LineNum
if (LineSizes[LineNumber].cx == 0)
return;
+ INT HShift = ((IsHorizontal && (VisibleLines <= 1 ||
+ g_TaskbarSettings.bCompactTrayIcons)) ? 0 :
TRAY_CLOCK_WND_SPACING_X);
+
TextOut(hDC,
- (rcClient->right - LineSizes[szLinesIndex].cx) / 2,
+ ((rcClient->right - LineSizes[szLinesIndex].cx) / 2) + HShift,
rcClient->top + TRAY_CLOCK_WND_SPACING_Y,
szLines[szLinesIndex],
wcslen(szLines[szLinesIndex]));