Index: precomp.h =================================================================== --- precomp.h (revision 72030) +++ precomp.h (working copy) @@ -180,6 +180,7 @@ /* Structure to hold non-default options*/ typedef struct _ADVANCED_SETTINGS { + BOOL bHideClock; BOOL bShowSeconds; } ADVANCED_SETTINGS, *PADVANCED_SETTINGS; Index: settings.cpp =================================================================== --- settings.cpp (revision 72030) +++ settings.cpp (working copy) @@ -29,6 +29,7 @@ HKEY hKey; /* Set defaults */ + AdvancedSettings.bHideClock = FALSE; AdvancedSettings.bShowSeconds = FALSE; /* Check registry */ @@ -37,6 +38,10 @@ DWORD dwValue, dwValueLength, dwType; dwValueLength = sizeof(dwValue); + if (RegQueryValueExW(hKey, L"HideClock", NULL, &dwType, (PBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD) + AdvancedSettings.bHideClock = dwValue != 0; + + dwValueLength = sizeof(dwValue); if (RegQueryValueExW(hKey, L"ShowSeconds", NULL, &dwType, (PBYTE)&dwValue, &dwValueLength) == ERROR_SUCCESS && dwType == REG_DWORD) AdvancedSettings.bShowSeconds = dwValue != 0; Index: trayntfy.cpp =================================================================== --- trayntfy.cpp (revision 72030) +++ trayntfy.cpp (working copy) @@ -1550,10 +1550,16 @@ BOOL PrevHidden = HideClock; HideClock = (wParam == 0); + LoadAdvancedSettings(); + if (m_clock != NULL && PrevHidden != HideClock) { m_clock->ShowWindow(HideClock ? SW_HIDE : SW_SHOW); } + if (m_clock != NULL) + { + m_clock->UpdateWnd(); + } return (LRESULT) (!PrevHidden); } Index: trayprop.cpp =================================================================== --- trayprop.cpp (revision 72030) +++ trayprop.cpp (working copy) @@ -188,12 +188,30 @@ pPropInfo->hTaskbarWnd = hwnd; - // FIXME: check buttons + if (AdvancedSettings.bHideClock) + EnableWindow(GetDlgItem(hwnd, IDC_TASKBARPROP_SECONDS), FALSE); + else + EnableWindow(GetDlgItem(hwnd, IDC_TASKBARPROP_SECONDS), TRUE); + + CheckDlgButton(hwnd, IDC_TASKBARPROP_CLOCK, AdvancedSettings.bHideClock ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwnd, IDC_TASKBARPROP_SECONDS, AdvancedSettings.bShowSeconds ? BST_CHECKED : BST_UNCHECKED); UpdateTaskbarBitmap(pPropInfo); } +#define TNWM_SHOWCLOCK (WM_USER + 0x102) + +static HWND GetTrayNotifyWindow(void) +{ + HWND hTrayWnd, hTrayNotifyWnd = NULL; + hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); + if (hTrayWnd) + { + hTrayNotifyWnd = FindWindowExW(hTrayWnd, NULL, L"TrayNotifyWnd", NULL); + } + return hTrayNotifyWnd; +} + INT_PTR CALLBACK TaskbarPageProc(HWND hwndDlg, UINT uMsg, @@ -243,6 +261,7 @@ case WM_NOTIFY: { LPNMHDR pnmh = (LPNMHDR)lParam; + HWND hTrayNotifyWnd; switch (pnmh->code) { @@ -250,8 +269,18 @@ break; case PSN_APPLY: + /* save settings */ + AdvancedSettings.bHideClock = !IsDlgButtonChecked(hwndDlg, IDC_TASKBARPROP_CLOCK); AdvancedSettings.bShowSeconds = IsDlgButtonChecked(hwndDlg, IDC_TASKBARPROP_SECONDS); + SaveSettingDword(szAdvancedSettingsKey, TEXT("HideClock"), AdvancedSettings.bHideClock); SaveSettingDword(szAdvancedSettingsKey, TEXT("ShowSeconds"), AdvancedSettings.bShowSeconds); + + /* send TNWM_SHOWCLOCK message to tray notify window */ + hTrayNotifyWnd = GetTrayNotifyWindow(); + if (!AdvancedSettings.bHideClock) + SendMessage(hTrayNotifyWnd, TNWM_SHOWCLOCK, TRUE, 0); + else + SendMessage(hTrayNotifyWnd, TNWM_SHOWCLOCK, FALSE, 0); break; }