Date: | 2014-08-14 09:47:05 (9 years 7 months ago) |
---|---|
Author: | Maarten ter Huurne |
Commit: | c1689e41fbe8538a7b50da9c7cbf1b1f98da23d9 |
Message: | Dismantled Singleton pattern of PowerSaver The instance-on-demand didn't really work, since we needed explicit control over this object's destruction to ensure the timer is stopped when launching an application. And trying to combine getInstance() with explicit external delete was just ugly. |
Files: |
src/gmenu2x.cpp (3 diffs) src/gmenu2x.h (2 diffs) src/inputmanager.cpp (2 diffs) src/inputmanager.h (3 diffs) src/powersaver.cpp (1 diff) src/powersaver.h (1 diff) |
Change Details
src/gmenu2x.cpp | ||
---|---|---|
215 | 215 | #endif |
216 | 216 | |
217 | 217 | GMenu2X::GMenu2X() |
218 | : input(powerSaver) | |
218 | 219 | { |
219 | 220 | usbnet = samba = inet = web = false; |
220 | 221 | useSelectionPng = false; |
... | ... | |
283 | 284 | exit(EXIT_FAILURE); |
284 | 285 | } |
285 | 286 | |
286 | if (confInt["backlightTimeout"] > 0) | |
287 | PowerSaver::getInstance()->setScreenTimeout( confInt["backlightTimeout"] ); | |
287 | powerSaver.setScreenTimeout(confInt["backlightTimeout"]); | |
288 | ||
288 | 289 | #ifdef ENABLE_CPUFREQ |
289 | 290 | setClock(confInt["menuClock"]); |
290 | 291 | #endif |
291 | 292 | } |
292 | 293 | |
293 | 294 | GMenu2X::~GMenu2X() { |
294 | if (PowerSaver::isRunning()) { | |
295 | delete PowerSaver::getInstance(); | |
296 | } | |
297 | ||
298 | 295 | fflush(NULL); |
299 | 296 | sc.clear(); |
300 | 297 | |
... | ... | |
704 | 701 | if (curMenuClock != confInt["menuClock"]) setClock(confInt["menuClock"]); |
705 | 702 | #endif |
706 | 703 | |
707 | if (confInt["backlightTimeout"] == 0) { | |
708 | if (PowerSaver::isRunning()) | |
709 | delete PowerSaver::getInstance(); | |
710 | } else { | |
711 | PowerSaver::getInstance()->setScreenTimeout( confInt["backlightTimeout"] ); | |
712 | } | |
704 | powerSaver.setScreenTimeout(confInt["backlightTimeout"]); | |
713 | 705 | |
714 | 706 | input.repeatRateChanged(); |
715 | 707 |
src/gmenu2x.h | ||
---|---|---|
26 | 26 | #include "translator.h" |
27 | 27 | #include "touchscreen.h" |
28 | 28 | #include "inputmanager.h" |
29 | #include "powersaver.h" | |
29 | 30 | #include "surface.h" |
30 | 31 | #include "utilities.h" |
31 | 32 | |
... | ... | |
144 | 145 | return std::make_pair(top, resY - top - bottom); |
145 | 146 | } |
146 | 147 | |
148 | PowerSaver powerSaver; | |
147 | 149 | InputManager input; |
148 | 150 | |
149 | 151 | //Configuration hashes |
src/inputmanager.cpp | ||
---|---|---|
57 | 57 | return true; |
58 | 58 | } |
59 | 59 | |
60 | InputManager::InputManager() | |
60 | InputManager::InputManager(PowerSaver& powerSaver) | |
61 | : powerSaver(powerSaver) | |
61 | 62 | { |
62 | 63 | #ifndef SDL_JOYSTICK_DISABLED |
63 | 64 | int i; |
... | ... | |
301 | 302 | if (i == BUTTON_TYPE_SIZE) |
302 | 303 | return false; |
303 | 304 | |
304 | if (wait && PowerSaver::isRunning()) { | |
305 | PowerSaver::getInstance()->resetScreenTimer(); | |
305 | if (wait) { | |
306 | powerSaver.resetScreenTimer(); | |
306 | 307 | } |
307 | 308 | |
308 | 309 | return true; |
src/inputmanager.h | ||
---|---|---|
29 | 29 | |
30 | 30 | class GMenu2X; |
31 | 31 | class Menu; |
32 | class PowerSaver; | |
32 | 33 | class InputManager; |
33 | 34 | |
34 | 35 | enum EventCode { |
... | ... | |
61 | 62 | }; |
62 | 63 | #define BUTTON_TYPE_SIZE 10 |
63 | 64 | |
64 | InputManager(); | |
65 | InputManager(PowerSaver& powerSaver); | |
65 | 66 | ~InputManager(); |
66 | 67 | |
67 | 68 | bool init(GMenu2X *gmenu2x, Menu *menu); |
... | ... | |
81 | 82 | |
82 | 83 | GMenu2X *gmenu2x; |
83 | 84 | Menu *menu; |
85 | PowerSaver& powerSaver; | |
84 | 86 | |
85 | 87 | ButtonMapEntry buttonMap[BUTTON_TYPE_SIZE]; |
86 | 88 | #ifndef SDL_JOYSTICK_DISABLED |
src/powersaver.cpp | ||
---|---|---|
25 | 25 | return 0; |
26 | 26 | } |
27 | 27 | |
28 | PowerSaver *PowerSaver::getInstance() { | |
29 | if (!instance) { | |
30 | instance = new PowerSaver(); | |
31 | } | |
32 | return instance; | |
33 | } | |
34 | ||
35 | bool PowerSaver::isRunning() { | |
36 | return !!instance; | |
37 | } | |
38 | ||
39 | 28 | PowerSaver::PowerSaver() |
40 | 29 | : screenState(false) |
41 | 30 | , screenTimeout(0) |
42 | 31 | , screenTimer(nullptr) |
43 | 32 | { |
44 | 33 | enableScreen(); |
34 | assert(!instance); | |
35 | instance = this; | |
45 | 36 | } |
46 | 37 | |
47 | 38 | PowerSaver::~PowerSaver() { |
src/powersaver.h | ||
---|---|---|
5 | 5 | |
6 | 6 | class PowerSaver { |
7 | 7 | public: |
8 | static PowerSaver *getInstance(); | |
9 | static bool isRunning(); | |
8 | PowerSaver(); | |
10 | 9 | ~PowerSaver(); |
11 | 10 | void resetScreenTimer(); |
12 | 11 | void setScreenTimeout(unsigned int seconds); |
13 | 12 | |
14 | 13 | private: |
15 | PowerSaver(); | |
16 | 14 | void addScreenTimer(); |
17 | 15 | void removeScreenTimer(); |
18 | 16 | void setScreenBlanking(bool state); |
Branches:
install_locations
master
opkrun
packages