1- #include < windows.h>
2- #include < commctrl.h>
1+ #include < cstdint>
32#include < cstdio>
43#include < cstdlib>
5- #include < fileapi.h>
64#include < fstream>
7- #include < inicpp.h>
5+
6+ #include < windows.h>
7+ #include < commctrl.h>
8+ #include < fileapi.h>
89#include < minwindef.h>
910#include < powrprof.h>
1011
12+ #include < inicpp.h>
13+
14+ #include " utils.hpp"
15+
1116#define APP_ICON_RESOURCE 100
17+ #define DEBOUNCE_DURATION 1000
1218
1319NOTIFYICONDATA nid;
1420HWND hSliderWindow, hSlider, hTextLabel;
1521HHOOK hMouseHook;
1622HPOWERNOTIFY hPowerNotify;
23+
1724bool isVisible = false ;
1825std::string rwPath;
26+ uint64_t lastChangeBrightness = getMillis();
27+ int lastBrightness = 50 ;
1928
2029LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
2130LRESULT CALLBACK SliderWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam,
@@ -159,6 +168,11 @@ void updateText() {
159168 * Change brightness by sending data to RWEveryting
160169 */
161170void changeBrightness () {
171+ int brightness = SendMessage (hSlider, TBM_GETPOS, 0 , 0 );
172+ uint64_t currentMillis = getMillis ();
173+ if (lastBrightness == brightness || currentMillis - lastChangeBrightness < DEBOUNCE_DURATION)
174+ return ;
175+
162176 char tempDirPath[MAX_PATH];
163177 char tempFileName[MAX_PATH];
164178
@@ -169,7 +183,6 @@ void changeBrightness() {
169183 return ;
170184
171185 char buffer[20 ];
172- int brightness = SendMessage (hSlider, TBM_GETPOS, 0 , 0 );
173186 std::snprintf (buffer, 20 , " mul(Local4, %d)" , brightness);
174187
175188 std::ofstream file (tempFileName);
@@ -195,14 +208,15 @@ void changeBrightness() {
195208 }
196209
197210 DeleteFile (tempFileName);
211+ lastChangeBrightness = getMillis ();
198212}
199213
200214/* *
201215 * Check if the display state changed to on (0x1)
202216 *
203- * @param {WPARAM} wParam :
204- * @param {LPARAM} lParam :
205- * @return {bool} :
217+ * @param {WPARAM} wParam :
218+ * @param {LPARAM} lParam :
219+ * @return {bool} :
206220 */
207221bool isDisplayOn (WPARAM wParam, LPARAM lParam) {
208222 return wParam == PBT_POWERSETTINGCHANGE &&
@@ -220,11 +234,10 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
220234 } else if (LOWORD (lParam) == WM_RBUTTONUP)
221235 showContextMenu (hwnd);
222236
223- } else if (uMsg == WM_POWERBROADCAST &&
224- (wParam == PBT_APMRESUMEAUTOMATIC ||
225- wParam == PBT_APMRESUMESUSPEND ||
226- wParam == PBT_APMPOWERSTATUSCHANGE ||
227- isDisplayOn (wParam, lParam)))
237+ } else if (uMsg == WM_POWERBROADCAST && (wParam == PBT_APMRESUMEAUTOMATIC ||
238+ wParam == PBT_APMRESUMESUSPEND ||
239+ wParam == PBT_APMPOWERSTATUSCHANGE ||
240+ isDisplayOn (wParam, lParam)))
228241 changeBrightness ();
229242
230243 else if (uMsg == WM_DESTROY || (uMsg == WM_COMMAND && LOWORD (wParam) == 1002 ))
0 commit comments