Author: jgardou Date: Sat Mar 5 16:45:09 2011 New Revision: 50974
URL: http://svn.reactos.org/svn/reactos?rev=50974&view=rev Log: [EXPLORER-NEW] - Allow displaying seconds in tray upon registry setting Patch by Edijs Kolesnikovics
Modified: trunk/reactos/base/shell/explorer-new/trayntfy.c
Modified: trunk/reactos/base/shell/explorer-new/trayntfy.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer-new/tra... ============================================================================== --- trunk/reactos/base/shell/explorer-new/trayntfy.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/explorer-new/trayntfy.c [iso-8859-1] Sat Mar 5 16:45:09 2011 @@ -19,12 +19,15 @@ */
#include <precomp.h> +#include <string.h>
/* * TrayClockWnd - */ + */
static const TCHAR szTrayClockWndClass[] = TEXT("TrayClockWClass"); +static LPCTSTR s_szRegistryKey = _T("Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"); +BOOL blShowSeconds;
#define ID_TRAYCLOCK_TIMER 0 #define ID_TRAYCLOCK_TIMER_INIT 1 @@ -34,11 +37,51 @@ BOOL IsTime; DWORD dwFormatFlags; LPCTSTR lpFormat; -} ClockWndFormats[] = { - {TRUE, TIME_NOSECONDS, NULL}, - {FALSE, 0, TEXT("dddd")}, - {FALSE, DATE_SHORTDATE, NULL}, -}; +}ClockWndFormats[]= { +{TRUE, 0, NULL}, +{FALSE, 0, TEXT("dddd")}, +{FALSE, DATE_SHORTDATE, NULL} +}; + +HRESULT RegGetDWord(HKEY hKey, LPCTSTR szValueName, DWORD * lpdwResult) +{ + LONG lResult; + DWORD dwDataSize = sizeof(DWORD); + DWORD dwType = 0; + + // Check input parameters... + if (hKey == NULL || lpdwResult == NULL) return E_INVALIDARG; + + // Get dword value from the registry... + lResult = RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE) lpdwResult, &dwDataSize ); + + // Check result and make sure the registry value is a DWORD(REG_DWORD)... + if (lResult != ERROR_SUCCESS) return HRESULT_FROM_WIN32(lResult); + else if (dwType != REG_DWORD) return DISP_E_TYPEMISMATCH; + + return NOERROR; +} + +void LoadSettings(void) +{ + HKEY hKey = NULL; + DWORD dwValue; + + if (RegOpenKey(HKEY_CURRENT_USER, s_szRegistryKey, &hKey) == ERROR_SUCCESS) + { + RegGetDWord(hKey, TEXT("blShowSeconds"), &dwValue); + if (dwValue == 1) + { + blShowSeconds = TRUE; + } + else + { + blShowSeconds = FALSE; + } + + RegCloseKey(hKey); + } +}
#define CLOCKWND_FORMAT_COUNT (sizeof(ClockWndFormats) / sizeof(ClockWndFormats[0]))
@@ -52,6 +95,7 @@ HFONT hFont; RECT rcText; SYSTEMTIME LocalTime; + union { DWORD dwFlags; @@ -233,6 +277,11 @@
if (iRet != 0 && i == 0) { + if (blShowSeconds == FALSE) + { + (This->szLines[0][5] = '\0'); + }; + /* Set the window text to the time only */ SetWindowText(This->hWnd, This->szLines[i]); @@ -296,7 +345,10 @@ /* Calculate the due time */ GetLocalTime(&This->LocalTime); uiDueTime = 1000 - (UINT)This->LocalTime.wMilliseconds; - uiDueTime += (59 - (UINT)This->LocalTime.wSecond) * 1000; + if (blShowSeconds == TRUE) + uiDueTime += ( (UINT)This->LocalTime.wSecond) * 100; + else + uiDueTime += (59 - (UINT)This->LocalTime.wSecond) * 1000;
if (uiDueTime < USER_TIMER_MINIMUM || uiDueTime > USER_TIMER_MAXIMUM) uiDueTime = 1000; @@ -350,6 +402,7 @@ { UINT uiDueTime; BOOL Ret; + int intWait1, intWait2;
/* Kill the initialization timer */ KillTimer(This->hWnd, @@ -357,15 +410,26 @@ This->IsInitTimerEnabled = FALSE;
uiDueTime = TrayClockWnd_CalculateDueTime(This); - - if (uiDueTime > (60 * 1000) - 200) + + if (blShowSeconds == TRUE) + { + intWait1 = 1000-200; + intWait2 = 1000; + } + else + { + intWait1 = 60*1000-200; + intWait2 = 60*1000; + } + + if (uiDueTime > intWait1) { /* The update of the clock will be up to 200 ms late, but that's - acceptable. We're going to setup a timer that fires every - minute. */ + acceptable. We're going to setup a timer that fires depending + intWait2. */ Ret = SetTimer(This->hWnd, ID_TRAYCLOCK_TIMER, - 60 * 1000, + intWait2, NULL) != 0; This->IsTimerEnabled = Ret;
@@ -375,7 +439,7 @@ else { /* Recalibrate the timer and recalculate again when the current - minute ends. */ + minute/second ends. */ TrayClockWnd_ResetTime(This); } } @@ -614,6 +678,7 @@ PTRAY_CLOCK_WND_DATA TcData; DWORD dwStyle; HWND hWnd = NULL; + LoadSettings();
TcData = HeapAlloc(hProcessHeap, 0,