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
215215#endif
216216
217217GMenu2X::GMenu2X()
218    : input(powerSaver)
218219{
219220    usbnet = samba = inet = web = false;
220221    useSelectionPng = false;
...... 
283284        exit(EXIT_FAILURE);
284285    }
285286
286    if (confInt["backlightTimeout"] > 0)
287        PowerSaver::getInstance()->setScreenTimeout( confInt["backlightTimeout"] );
287    powerSaver.setScreenTimeout(confInt["backlightTimeout"]);
288
288289#ifdef ENABLE_CPUFREQ
289290    setClock(confInt["menuClock"]);
290291#endif
291292}
292293
293294GMenu2X::~GMenu2X() {
294    if (PowerSaver::isRunning()) {
295        delete PowerSaver::getInstance();
296    }
297
298295    fflush(NULL);
299296    sc.clear();
300297
...... 
704701        if (curMenuClock != confInt["menuClock"]) setClock(confInt["menuClock"]);
705702#endif
706703
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"]);
713705
714706        input.repeatRateChanged();
715707
src/gmenu2x.h
2626#include "translator.h"
2727#include "touchscreen.h"
2828#include "inputmanager.h"
29#include "powersaver.h"
2930#include "surface.h"
3031#include "utilities.h"
3132
...... 
144145        return std::make_pair(top, resY - top - bottom);
145146    }
146147
148    PowerSaver powerSaver;
147149    InputManager input;
148150
149151    //Configuration hashes
src/inputmanager.cpp
5757    return true;
5858}
5959
60InputManager::InputManager()
60InputManager::InputManager(PowerSaver& powerSaver)
61    : powerSaver(powerSaver)
6162{
6263#ifndef SDL_JOYSTICK_DISABLED
6364    int i;
...... 
301302    if (i == BUTTON_TYPE_SIZE)
302303        return false;
303304
304    if (wait && PowerSaver::isRunning()) {
305        PowerSaver::getInstance()->resetScreenTimer();
305    if (wait) {
306        powerSaver.resetScreenTimer();
306307    }
307308
308309    return true;
src/inputmanager.h
2929
3030class GMenu2X;
3131class Menu;
32class PowerSaver;
3233class InputManager;
3334
3435enum EventCode {
...... 
6162    };
6263    #define BUTTON_TYPE_SIZE 10
6364
64    InputManager();
65    InputManager(PowerSaver& powerSaver);
6566    ~InputManager();
6667
6768    bool init(GMenu2X *gmenu2x, Menu *menu);
...... 
8182
8283    GMenu2X *gmenu2x;
8384    Menu *menu;
85    PowerSaver& powerSaver;
8486
8587    ButtonMapEntry buttonMap[BUTTON_TYPE_SIZE];
8688#ifndef SDL_JOYSTICK_DISABLED
src/powersaver.cpp
2525    return 0;
2626}
2727
28PowerSaver *PowerSaver::getInstance() {
29    if (!instance) {
30        instance = new PowerSaver();
31    }
32    return instance;
33}
34
35bool PowerSaver::isRunning() {
36    return !!instance;
37}
38
3928PowerSaver::PowerSaver()
4029    : screenState(false)
4130    , screenTimeout(0)
4231    , screenTimer(nullptr)
4332{
4433    enableScreen();
34    assert(!instance);
35    instance = this;
4536}
4637
4738PowerSaver::~PowerSaver() {
src/powersaver.h
55
66class PowerSaver {
77public:
8    static PowerSaver *getInstance();
9    static bool isRunning();
8    PowerSaver();
109    ~PowerSaver();
1110    void resetScreenTimer();
1211    void setScreenTimeout(unsigned int seconds);
1312
1413private:
15    PowerSaver();
1614    void addScreenTimer();
1715    void removeScreenTimer();
1816    void setScreenBlanking(bool state);

Archive Download the corresponding diff file



interactive