mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
[TIMEDATE] Fix the way the current time-zone is found in the list. (#5649)
fies regression CORE-18666 'Wrong timezone saved/displayed'
which was introduced by 0.4.14-dev-1522-g aa69236646
This commit is contained in:
parent
2b14056600
commit
d9cd760173
1 changed files with 40 additions and 25 deletions
|
@ -168,36 +168,51 @@ ShowTimeZoneList(HWND hwnd)
|
|||
{
|
||||
TIME_ZONE_INFORMATION TimeZoneInfo;
|
||||
PTIMEZONE_ENTRY Entry;
|
||||
BOOL bDoAdvancedTest;
|
||||
DWORD dwIndex;
|
||||
DWORD i;
|
||||
DWORD dwCount;
|
||||
DWORD dwIndex = 0;
|
||||
BOOL bFound = FALSE;
|
||||
|
||||
GetTimeZoneInformation(&TimeZoneInfo);
|
||||
bDoAdvancedTest = (!*TimeZoneInfo.StandardName);
|
||||
|
||||
dwIndex = 0;
|
||||
i = 0;
|
||||
Entry = TimeZoneListHead;
|
||||
while (Entry != NULL)
|
||||
if (GetTimeZoneInformation(&TimeZoneInfo) == TIME_ZONE_ID_INVALID)
|
||||
{
|
||||
SendMessageW(hwnd,
|
||||
CB_ADDSTRING,
|
||||
0,
|
||||
(LPARAM)Entry->Description);
|
||||
/* Failed to retrieve current time-zone info, reset it */
|
||||
ZeroMemory(&TimeZoneInfo, sizeof(TimeZoneInfo));
|
||||
}
|
||||
|
||||
if ( (!bDoAdvancedTest && *Entry->StandardName &&
|
||||
wcscmp(Entry->StandardName, TimeZoneInfo.StandardName) == 0) ||
|
||||
( (Entry->TimezoneInfo.Bias == TimeZoneInfo.Bias) &&
|
||||
(Entry->TimezoneInfo.StandardBias == TimeZoneInfo.StandardBias) &&
|
||||
(Entry->TimezoneInfo.DaylightBias == TimeZoneInfo.DaylightBias) &&
|
||||
(memcmp(&Entry->TimezoneInfo.StandardDate, &TimeZoneInfo.StandardDate, sizeof(SYSTEMTIME)) == 0) &&
|
||||
(memcmp(&Entry->TimezoneInfo.DaylightDate, &TimeZoneInfo.DaylightDate, sizeof(SYSTEMTIME)) == 0) ) )
|
||||
for (Entry = TimeZoneListHead; Entry != NULL; Entry = Entry->Next)
|
||||
{
|
||||
dwCount = SendMessageW(hwnd,
|
||||
CB_ADDSTRING,
|
||||
0,
|
||||
(LPARAM)Entry->Description);
|
||||
if (dwCount == CB_ERR || dwCount == CB_ERRSPACE)
|
||||
continue;
|
||||
|
||||
/* If the time-zone was found in the list, skip the tests */
|
||||
if (bFound)
|
||||
continue;
|
||||
|
||||
if (*TimeZoneInfo.StandardName && *Entry->StandardName)
|
||||
{
|
||||
dwIndex = i;
|
||||
/* Compare by name */
|
||||
if (wcscmp(Entry->StandardName, TimeZoneInfo.StandardName) == 0)
|
||||
{
|
||||
dwIndex = dwCount;
|
||||
bFound = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Compare by date and bias */
|
||||
if ((Entry->TimezoneInfo.Bias == TimeZoneInfo.Bias) &&
|
||||
(Entry->TimezoneInfo.StandardBias == TimeZoneInfo.StandardBias) &&
|
||||
(Entry->TimezoneInfo.DaylightBias == TimeZoneInfo.DaylightBias) &&
|
||||
(memcmp(&Entry->TimezoneInfo.StandardDate, &TimeZoneInfo.StandardDate, sizeof(SYSTEMTIME)) == 0) &&
|
||||
(memcmp(&Entry->TimezoneInfo.DaylightDate, &TimeZoneInfo.DaylightDate, sizeof(SYSTEMTIME)) == 0))
|
||||
{
|
||||
dwIndex = dwCount;
|
||||
bFound = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
Entry = Entry->Next;
|
||||
}
|
||||
|
||||
SendMessageW(hwnd,
|
||||
|
|
Loading…
Reference in a new issue