DPMS support

This commit is contained in:
David Reveman 2006-04-04 17:54:09 +00:00
parent 07695a0320
commit 1343df0907
10 changed files with 143 additions and 7 deletions

View file

@ -1,5 +1,22 @@
2006-04-04 David Reveman <davidr@novell.com>
* hw/xgl/glx/xglxorg.c (xglxInitXorg): No need to try and disable
dpms and screensaver with command line arguments as we now
do that as part of detecting DPMS support in xglx.c.
* hw/xgl/glx/xglx.c (xglxOsVendorInit): Check for DPMS,
get default timeouts, disable current timeouts and screensaver.
Add xglxDPMSSupported and xglxDPMSet for DPMS support.
* hw/xgl/Makefile.am (Xgl_SOURCES): Remove dpmsstubs.c.
* hw/xgl/egl/module/xeglmodule.c:
* hw/xgl/egl/xegl.c:
* hw/xgl/glx/module/xglxmodule.c:
* hw/xgl/glx/xglx.c:
* hw/xgl/xglinit.c: DPMS support by adding DPMSSupported
and DPMSSet as ddx module functions.
* hw/xgl/glx/xglx.c (xglxScreenInit): Re-install colormap
after initializing software cursor (#6489). (Tiago Vignatti)

View file

@ -71,7 +71,6 @@ Xgl_LDFLAGS = -export-dynamic
Xgl_SOURCES = \
xglinit.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xext/dpmsstubs.c \
$(top_srcdir)/Xi/stubs.c \
$(top_srcdir)/fb/fbcmap.c
Xgl_LDADD = \

View file

@ -102,3 +102,15 @@ OsVendorInit (void)
{
xeglOsVendorInit ();
}
Bool
DPMSSupported (void)
{
return FALSE;
}
void
DPMSSet (int level)
{
}

View file

@ -129,3 +129,14 @@ OsVendorInit (void)
{
xeglOsVendorInit ();
}
Bool
DPMSSupported (void)
{
return FALSE;
}
void
DPMSSet (int level)
{
}

View file

@ -102,3 +102,15 @@ OsVendorInit (void)
{
xglxOsVendorInit ();
}
Bool
DPMSSupported (void)
{
return xglxDPMSSupported ();
}
void
DPMSSet (int level)
{
xglxDPMSSet (level);
}

View file

@ -26,6 +26,7 @@
#include "xglx.h"
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/dpms.h>
#include <X11/cursorfont.h>
#include <glitz-glx.h>
@ -132,6 +133,7 @@ static CARD32 lastEventTime = 0;
static ScreenPtr currentScreen = 0;
static Bool softCursor = FALSE;
static Bool fullscreen = TRUE;
static Bool xDpms = FALSE;
static Bool randrExtension = FALSE;
static int randrEvent, randrError;
@ -1413,9 +1415,35 @@ xglxOsVendorInit (void)
xscreen = DefaultScreen (xdisplay);
if (!xDisplayName)
{
int timeout, interval, preferBlanking, allowExposures;
XDefineCursor (xdisplay, RootWindow (xdisplay, xscreen),
XCreateFontCursor (xdisplay, XC_watch));
if (DPMSCapable (xdisplay))
{
CARD16 standby, suspend, off;
DPMSGetTimeouts (xdisplay, &standby, &suspend, &off);
DPMSSetTimeouts (xdisplay, 0, 0, 0);
DPMSEnable (xdisplay);
DPMSForceLevel (xdisplay, DPMSModeOn);
DPMSStandbyTime = standby * MILLI_PER_SECOND;
DPMSSuspendTime = suspend * MILLI_PER_SECOND;
DPMSOffTime = off * MILLI_PER_SECOND;
xDpms = TRUE;
}
XGetScreenSaver (xdisplay, &timeout, &interval,
&preferBlanking, &allowExposures);
XSetScreenSaver (xdisplay, 0, interval,
preferBlanking, allowExposures);
XResetScreenSaver (xdisplay);
}
if (!glitz_glx_find_window_format (xdisplay, xscreen, 0, NULL, 0))
FatalError ("no GLX visuals available\n");
}
@ -1485,3 +1513,16 @@ xglxCreateARGBCursor (ScreenPtr pScreen,
}
#endif
Bool
xglxDPMSSupported (void)
{
return xDpms;
}
void
xglxDPMSSet (int level)
{
if (xDpms)
DPMSForceLevel (xdisplay, level);
}

View file

@ -117,6 +117,15 @@ xglxGiveUp (void);
void
xglxOsVendorInit (void);
Bool
xglxDPMSSupported (void);
int
xglxDPMSGet (int *plevel);
void
xglxDPMSSet (int level);
#ifndef NXGLXORG
void

View file

@ -167,6 +167,19 @@ OsVendorInit (void)
xglxOsVendorInit ();
}
void ddxInitGlobals()
void
ddxInitGlobals (void)
{
}
Bool
DPMSSupported (void)
{
return xglxDPMSSupported ();
}
void
DPMSSet (int level)
{
xglxDPMSSet (level);
}

View file

@ -544,7 +544,6 @@ xglxInitXorg (void)
pid_t pid;
char *name;
char *auth[] = { "-auth", xorgAuthBuf, "-nolisten", "tcp" };
char *saver[] = { "-dpms", "-v", "-s", "0" };
char *endArg = NULL;
int authFd;
int mask;
@ -592,9 +591,6 @@ xglxInitXorg (void)
if (!xglxAddXorgArguments (auth, sizeof (auth) / sizeof (char *)))
return 0;
if (!xglxAddXorgArguments (saver, sizeof (saver) / sizeof (char *)))
return 0;
if (!xglxAddXorgArguments (&xorgDisplay, 1))
return 0;

View file

@ -77,6 +77,8 @@ typedef struct _xglDDXFunc {
void (*abort) (void);
void (*giveUp) (void);
void (*osVendorInit) (void);
Bool (*dpmsSupported) (void);
void (*dpmsSet) (int level);
} xglDDXFuncRec;
static xglDDXFuncRec __ddxFunc;
@ -154,7 +156,9 @@ xglEnsureDDXModule (void)
SYM (__ddxFunc.processArgument, "ddxProcessArgument"),
SYM (__ddxFunc.abort, "AbortDDX"),
SYM (__ddxFunc.giveUp, "ddxGiveUp"),
SYM (__ddxFunc.osVendorInit, "OsVendorInit")
SYM (__ddxFunc.osVendorInit, "OsVendorInit"),
SYM (__ddxFunc.dpmsSupported, "DPMSSupported"),
SYM (__ddxFunc.dpmsSet, "DPMSSet")
};
ddxHandle = xglLoadModule (ddxModuleName, RTLD_NOW | RTLD_GLOBAL);
@ -336,6 +340,28 @@ ddxInitGlobals (void)
{
}
Bool
DPMSSupported (void)
{
if (xglEnsureDDXModule ())
return (*__ddxFunc.dpmsSupported) ();
return FALSE;
}
int
DPMSGet (int *plevel)
{
return -1;
}
void
DPMSSet (int level)
{
if (xglEnsureDDXModule ())
return (*__ddxFunc.dpmsSet) (level);
}
#if 1
/* nvdia's driver seem to be abusing sched_yield and it is causing