Ticket #982: myth-dpms-fixes.patch

File myth-dpms-fixes.patch, 5.9 KB (added by kcodyjr@…, 14 years ago)
  • libs/libmyth/screensaver-osx.cpp

     
    6161    ScreenSaverOSXPrivate::timerCallback(NULL, NULL);
    6262}
    6363
     64bool ScreenSaverOSX::Asleep(void)
     65{
     66    return 0;
     67}
  • libs/libmyth/screensaver-x11.cpp

     
    2020        int interval;
    2121        int preferblank;
    2222        int allowexposure;
    23         bool dpmsdisabled;
    2423        bool xscreensaverRunning;
     24        BOOL dpmsaware;
     25        BOOL dpmscapable;
     26        BOOL dpmsenabled;
     27        bool dpmsdefeated;
    2528    } state;
    2629
    2730    QTimer *resetTimer;
     
    4447        d->timeoutInterval = -1;
    4548        VERBOSE(VB_GENERAL, "XScreenSaver support enabled");
    4649    }
     50
     51    int dummy;
     52    if ((d->state.dpmsaware = DPMSQueryExtension(qt_display(),&dummy,&dummy)))
     53    {
     54        CARD16 power_level;
     55
     56        if ((d->state.dpmscapable = DPMSCapable(qt_xdisplay()))) {
     57
     58            DPMSInfo(qt_xdisplay(), &power_level, &(d->state.dpmsenabled));
     59
     60            if (d->state.dpmsenabled)
     61                VERBOSE(VB_GENERAL, "DPMS is active.");
     62            else
     63                VERBOSE(VB_GENERAL, "DPMS is disabled.");
     64
     65        } else {
     66            d->state.dpmsenabled = false;
     67            VERBOSE(VB_GENERAL, "DPMS is supported but not available.");
     68        }
     69
     70    } else {
     71        d->state.dpmscapable = false;
     72        d->state.dpmsenabled = false;
     73        VERBOSE(VB_GENERAL, "DPMS is not supported.");
     74    }
     75
     76    d->state.dpmsdefeated = false;
     77
    4778}
    4879
    4980ScreenSaverX11::~ScreenSaverX11()
    5081{
     82    /* Ensure DPMS gets left as it was found. */
     83    if (d->state.dpmsdefeated)
     84        Restore();
     85
    5186    delete d;
    5287}
    5388
     
    65100    XResetScreenSaver(qt_xdisplay());
    66101    XSetScreenSaver(qt_xdisplay(), 0, 0, 0, 0);
    67102
    68     int nothing;
    69 
    70     if (DPMSQueryExtension(qt_xdisplay(), &nothing, &nothing))
     103    if (d->state.dpmsenabled)
    71104    {
    72         BOOL on;
    73         CARD16 power_level;
    74 
    75         DPMSInfo(qt_xdisplay(), &power_level, &on);
    76         if (on)
    77         {
    78             d->state.dpmsdisabled = true;
    79             DPMSDisable(qt_xdisplay());       // monitor powersave off
    80             VERBOSE(VB_GENERAL, "Disable DPMS");
    81         }
     105        d->state.dpmsdefeated = true;
     106        DPMSDisable(qt_xdisplay());
     107        VERBOSE(VB_GENERAL, "DPMS powerdown defeated.");
    82108    }
    83109
    84110    if (d->state.xscreensaverRunning)
     
    109135                    d->state.allowexposure);
    110136    d->state.saved = false;
    111137
    112     if (d->state.dpmsdisabled)
     138    if (d->state.dpmsdefeated)
    113139    {
    114         int nothing;
    115         d->state.dpmsdisabled = false;
    116         if (DPMSQueryExtension(qt_xdisplay(), &nothing, &nothing))
    117         {
    118             DPMSEnable(qt_xdisplay());
    119             VERBOSE(VB_GENERAL, "Enable DPMS");
    120         }
     140        d->state.dpmsdefeated = false;
     141        DPMSEnable(qt_xdisplay());
     142        VERBOSE(VB_GENERAL, "DPMS powerdown re-enabled.");
    121143    }
    122144
    123145    if (d->state.xscreensaverRunning && d->resetTimer)
     
    130152    if (d->state.xscreensaverRunning)
    131153        resetSlot();
    132154
    133     int nothing;
    134     if (DPMSQueryExtension(qt_xdisplay(), &nothing, &nothing))
    135     {
    136         BOOL on;
    137         CARD16 power_level;
    138         if (!d->state.dpmsdisabled)
    139         {
    140             DPMSInfo(qt_xdisplay(), &power_level, &on);
    141             if (power_level != DPMSModeOn)
    142                 DPMSForceLevel(qt_xdisplay(), DPMSModeOn);
    143         }
    144     }
     155    if (Asleep())
     156        DPMSForceLevel(qt_xdisplay(), DPMSModeOn);
    145157}
    146158
     159bool ScreenSaverX11::Asleep(void)
     160{
     161    if (!d->state.dpmsenabled)
     162        return 0;
     163
     164    if (d->state.dpmsdefeated)
     165        return 0;
     166
     167    BOOL on;
     168    CARD16 power_level;
     169
     170    DPMSInfo(qt_xdisplay(), &power_level, &on);
     171
     172    return (power_level != DPMSModeOn);
     173}
     174
    147175void ScreenSaverX11::resetSlot()
    148176{
    149177    myth_system(QString("xscreensaver-command -deactivate >&- 2>&- &"));
  • libs/libmyth/screensaver-null.cpp

     
    1717void ScreenSaverNull::Reset(void)
    1818{
    1919}
     20
     21bool ScreenSaverNull::Asleep(void)
     22{
     23    return 0;
     24}
  • libs/libmyth/screensaver.h

     
    3636    virtual void Disable(void) = 0;
    3737    virtual void Restore(void) = 0;
    3838    virtual void Reset(void) = 0;
     39
     40    virtual bool Asleep(void) = 0;
    3941};
    4042
    4143#endif // MYTH_SCREENSAVER_H
  • libs/libmyth/screensaver-null.h

     
    1212    void Disable(void);
    1313    void Restore(void);
    1414    void Reset(void);
     15
     16    bool Asleep(void);
    1517};
    1618
    1719#endif // MYTH_SCREENSAVER_NULL_H
  • libs/libmyth/screensaver-osx.h

     
    1313    void Restore(void);
    1414    void Reset(void);
    1515
     16    bool Asleep(void);
     17
    1618protected:
    1719    class ScreenSaverOSXPrivate *d;
    1820};
  • libs/libmyth/screensaver-x11.h

     
    1717    void Restore(void);
    1818    void Reset(void);
    1919
     20    bool Asleep(void);
     21
    2022  public slots:
    2123    void resetSlot();
    2224