[EXPLORER] trayclock: Better handle timers, especially when it is hidden
authorSerge Gautherie <reactos-git_serge_171003@gautherie.fr>
Fri, 24 Jan 2020 13:47:58 +0000 (14:47 +0100)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Sun, 26 Apr 2020 18:41:39 +0000 (21:41 +0300)
base/shell/explorer/trayclock.cpp

index 45a6736..e2ccc4a 100644 (file)
@@ -452,8 +452,7 @@ BOOL CTrayClockWnd::ResetTime()
         KillTimer(ID_TRAYCLOCK_TIMER);
         IsTimerEnabled = FALSE;
     }
-
-    if (IsInitTimerEnabled)
+    else if (IsInitTimerEnabled)
     {
         KillTimer(ID_TRAYCLOCK_TIMER_INIT);
     }
@@ -464,9 +463,6 @@ BOOL CTrayClockWnd::ResetTime()
     Ret = SetTimer(ID_TRAYCLOCK_TIMER_INIT, uiDueTime, NULL) != 0;
     IsInitTimerEnabled = Ret;
 
-    /* Update the time */
-    Update();
-
     return Ret;
 }
 
@@ -500,9 +496,6 @@ VOID CTrayClockWnd::CalibrateTimer()
             uiWait2. */
         Ret = SetTimer(ID_TRAYCLOCK_TIMER, uiWait2, NULL) != 0;
         IsTimerEnabled = Ret;
-
-        /* Update the time */
-        Update();
     }
     else
     {
@@ -510,6 +503,9 @@ VOID CTrayClockWnd::CalibrateTimer()
             minute/second ends. */
         ResetTime();
     }
+
+    /* Update the time */
+    Update();
 }
 
 LRESULT CTrayClockWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
@@ -519,8 +515,7 @@ LRESULT CTrayClockWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
     {
         KillTimer(ID_TRAYCLOCK_TIMER);
     }
-
-    if (IsInitTimerEnabled)
+    else if (IsInitTimerEnabled)
     {
         KillTimer(ID_TRAYCLOCK_TIMER_INIT);
     }
@@ -668,7 +663,14 @@ LRESULT CTrayClockWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& b
 
     m_tooltip.AddTool(&ti);
 
-    ResetTime();
+    if (!g_TaskbarSettings.sr.HideClock)
+    {
+        ResetTime();
+    }
+
+    /* Update the time */
+    Update();
+
     return TRUE;
 }
 
@@ -702,6 +704,25 @@ LRESULT CTrayClockWnd::OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM
         g_TaskbarSettings.sr.HideClock = newSettings->sr.HideClock;
         ShowWindow(g_TaskbarSettings.sr.HideClock ? SW_HIDE : SW_SHOW);
         bRealign = TRUE;
+
+        if (g_TaskbarSettings.sr.HideClock)
+        {
+            /* Disable all timers */
+            if (IsTimerEnabled)
+            {
+                KillTimer(ID_TRAYCLOCK_TIMER);
+                IsTimerEnabled = FALSE;
+            }
+            else if (IsInitTimerEnabled)
+            {
+                KillTimer(ID_TRAYCLOCK_TIMER_INIT);
+                IsInitTimerEnabled = FALSE;
+            }
+        }
+        else
+        {
+            ResetTime();
+        }
     }
 
     if (bRealign)