Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
aecdb526
Unverified
Commit
aecdb526
authored
Feb 07, 2018
by
Mihai Moldovan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/update_xext' into 3.6.x
Attributes GH PR #643:
https://github.com/ArcticaProject/nx-libs/pull/643
parents
cbdae3b7
5ec2366c
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
309 additions
and
127 deletions
+309
-127
saver.h
nx-X11/include/extensions/saver.h
+1
-3
saverproto.h
nx-X11/include/extensions/saverproto.h
+10
-3
dpms.c
nx-X11/programs/Xserver/Xext/dpms.c
+3
-3
panoramiX.c
nx-X11/programs/Xserver/Xext/panoramiX.c
+20
-11
saver.c
nx-X11/programs/Xserver/Xext/saver.c
+147
-2
sleepuntil.c
nx-X11/programs/Xserver/Xext/sleepuntil.c
+1
-1
sync.c
nx-X11/programs/Xserver/Xext/sync.c
+10
-2
xres.c
nx-X11/programs/Xserver/Xext/xres.c
+3
-1
xvmain.c
nx-X11/programs/Xserver/Xext/xvmain.c
+3
-3
Imakefile
nx-X11/programs/Xserver/dix/Imakefile
+1
-1
globals.c
nx-X11/programs/Xserver/dix/globals.c
+4
-0
main.c
nx-X11/programs/Xserver/dix/main.c
+0
-6
globals.h
nx-X11/programs/Xserver/include/globals.h
+4
-0
WaitFor.c
nx-X11/programs/Xserver/os/WaitFor.c
+102
-91
No files found.
nx-X11/include/extensions/saver.h
View file @
aecdb526
/*
* $XConsortium: saver.h,v 1.5 94/04/17 20:59:33 rws Exp $
*
Copyright (c) 1992 X Consortium
Permission is hereby granted, free of charge, to any person obtaining a copy
...
...
@@ -37,7 +35,7 @@ in this Software without prior written authorization from the X Consortium.
#define ScreenSaverCycleMask 0x00000002
#define ScreenSaverMajorVersion 1
#define ScreenSaverMinorVersion
0
#define ScreenSaverMinorVersion
1
#define ScreenSaverOff 0
#define ScreenSaverOn 1
...
...
nx-X11/include/extensions/saverproto.h
View file @
aecdb526
/*
* $XConsortium: saverproto.h,v 1.5 94/04/17 20:59:33 keith Exp $
*
Copyright (c) 1992 X Consortium
Permission is hereby granted, free of charge, to any person obtaining a copy
...
...
@@ -26,7 +24,6 @@ in this Software without prior written authorization from the X Consortium.
*
* Author: Keith Packard, MIT X Consortium
*/
/* $XFree86$ */
#ifndef _SAVERPROTO_H_
#define _SAVERPROTO_H_
...
...
@@ -136,6 +133,16 @@ typedef struct _ScreenSaverUnsetAttributes {
}
xScreenSaverUnsetAttributesReq
;
#define sz_xScreenSaverUnsetAttributesReq 8
#define X_ScreenSaverSuspend 5
typedef
struct
_ScreenSaverSuspend
{
CARD8
reqType
;
CARD8
saverReqType
;
CARD16
length
B16
;
Bool
suspend
B32
;
}
xScreenSaverSuspendReq
;
#define sz_xScreenSaverSuspendReq 8
typedef
struct
_ScreenSaverNotify
{
CARD8
type
;
/* always eventBase + ScreenSaverNotify */
BYTE
state
;
/* off, on, cycle */
...
...
nx-X11/programs/Xserver/Xext/dpms.c
View file @
aecdb526
...
...
@@ -183,12 +183,12 @@ ProcDPMSSetTimeouts(client)
client
->
errorValue
=
stuff
->
suspend
;
return
BadValue
;
}
DPMSStandbyTime
=
stuff
->
standby
*
MILLI_PER_SECOND
;
DPMSSuspendTime
=
stuff
->
suspend
*
MILLI_PER_SECOND
;
DPMSOffTime
=
stuff
->
off
*
MILLI_PER_SECOND
;
Set
DPMSTimers
();
Set
ScreenSaverTimer
();
return
(
client
->
noClientException
);
}
...
...
nx-X11/programs/Xserver/Xext/panoramiX.c
View file @
aecdb526
...
...
@@ -72,10 +72,10 @@ static unsigned char PanoramiXReqCode = 0;
int
PanoramiXPixWidth
=
0
;
int
PanoramiXPixHeight
=
0
;
int
PanoramiXNumScreens
=
0
;
_X_EXPORT
int
PanoramiXNumScreens
=
0
;
PanoramiXData
*
panoramiXdataPtr
=
NULL
;
RegionRec
PanoramiXScreenRegion
=
{{
0
,
0
,
0
,
0
},
NULL
};
_X_EXPORT
PanoramiXData
*
panoramiXdataPtr
=
NULL
;
RegionRec
PanoramiXScreenRegion
=
{{
0
,
0
,
0
,
0
},
NULL
};
static
int
PanoramiXNumDepths
;
static
DepthPtr
PanoramiXDepths
;
...
...
@@ -83,13 +83,13 @@ static int PanoramiXNumVisuals;
static
VisualPtr
PanoramiXVisuals
;
/* We support at most 256 visuals */
XID
*
PanoramiXVisualTable
=
NULL
;
_X_EXPORT
XID
*
PanoramiXVisualTable
=
NULL
;
unsigned
long
XRC_DRAWABLE
;
unsigned
long
XRT_WINDOW
;
unsigned
long
XRT_PIXMAP
;
unsigned
long
XRT_GC
;
unsigned
long
XRT_COLORMAP
;
_X_EXPORT
unsigned
long
XRC_DRAWABLE
;
_X_EXPORT
unsigned
long
XRT_WINDOW
;
_X_EXPORT
unsigned
long
XRT_PIXMAP
;
_X_EXPORT
unsigned
long
XRT_GC
;
_X_EXPORT
unsigned
long
XRT_COLORMAP
;
/*
* Function prototypes
...
...
@@ -330,7 +330,7 @@ XineramaDestroyClip(GCPtr pGC)
int
_X_EXPORT
int
XineramaDeleteResource
(
void
*
data
,
XID
id
)
{
free
(
data
);
...
...
@@ -411,7 +411,7 @@ typedef struct _connect_callback_list {
static
XineramaConnectionCallbackList
*
ConnectionCallbackList
=
NULL
;
Bool
_X_EXPORT
Bool
XineramaRegisterConnectionBlockCallback
(
void
(
*
func
)(
void
))
{
XineramaConnectionCallbackList
*
newlist
;
...
...
@@ -1037,7 +1037,16 @@ ProcXineramaIsActive(ClientPtr client)
rep
.
type
=
X_Reply
;
rep
.
length
=
0
;
rep
.
sequenceNumber
=
client
->
sequence
;
#if 1
{
/* The following hack fools clients into thinking that Xinerama
* is disabled even though it is not. */
extern
Bool
PanoramiXExtensionDisabledHack
;
rep
.
state
=
!
noPanoramiXExtension
&&
!
PanoramiXExtensionDisabledHack
;
}
#else
rep
.
state
=
!
noPanoramiXExtension
;
#endif
if
(
client
->
swapped
)
{
swaps
(
&
rep
.
sequenceNumber
);
swapl
(
&
rep
.
length
);
...
...
nx-X11/programs/Xserver/Xext/saver.c
View file @
aecdb526
...
...
@@ -51,7 +51,10 @@ in this Software without prior written authorization from the X Consortium.
#include "panoramiX.h"
#include "panoramiXsrv.h"
#endif
#ifdef DPMSExtension
#define DPMS_SERVER
#include <nx-X11/extensions/dpms.h>
#endif
#include <stdio.h>
...
...
@@ -68,12 +71,14 @@ static DISPATCH_PROC(ProcScreenSaverQueryVersion);
static
DISPATCH_PROC
(
ProcScreenSaverSelectInput
);
static
DISPATCH_PROC
(
ProcScreenSaverSetAttributes
);
static
DISPATCH_PROC
(
ProcScreenSaverUnsetAttributes
);
static
DISPATCH_PROC
(
ProcScreenSaverSuspend
);
static
DISPATCH_PROC
(
SProcScreenSaverDispatch
);
static
DISPATCH_PROC
(
SProcScreenSaverQueryInfo
);
static
DISPATCH_PROC
(
SProcScreenSaverQueryVersion
);
static
DISPATCH_PROC
(
SProcScreenSaverSelectInput
);
static
DISPATCH_PROC
(
SProcScreenSaverSetAttributes
);
static
DISPATCH_PROC
(
SProcScreenSaverUnsetAttributes
);
static
DISPATCH_PROC
(
SProcScreenSaverSuspend
);
static
Bool
ScreenSaverHandle
(
ScreenPtr
/* pScreen */
,
...
...
@@ -110,6 +115,32 @@ static void ScreenSaverResetProc (
ExtensionEntry
*
/* extEntry */
);
static
RESTYPE
SuspendType
;
/* resource type for suspension records */
typedef
struct
_ScreenSaverSuspension
*
ScreenSaverSuspensionPtr
;
/* List of clients that are suspending the screensaver. */
static
ScreenSaverSuspensionPtr
suspendingClients
=
NULL
;
/*
* clientResource is a resource ID that's added when the record is
* allocated, so the record is freed and the screensaver resumed when
* the client disconnects. count is the number of times the client has
* requested the screensaver be suspended.
*/
typedef
struct
_ScreenSaverSuspension
{
ScreenSaverSuspensionPtr
next
;
ClientPtr
pClient
;
XID
clientResource
;
int
count
;
}
ScreenSaverSuspensionRec
;
static
int
ScreenSaverFreeSuspend
(
pointer
/*value */
,
XID
/* id */
);
/*
* each screen has a list of clients requesting
* ScreenSaverNotify events. Each client has a resource
...
...
@@ -227,13 +258,15 @@ ScreenSaverExtensionInit(void)
AttrType
=
CreateNewResourceType
(
ScreenSaverFreeAttr
);
EventType
=
CreateNewResourceType
(
ScreenSaverFreeEvents
);
SuspendType
=
CreateNewResourceType
(
ScreenSaverFreeSuspend
);
ScreenPrivateIndex
=
AllocateScreenPrivateIndex
();
for
(
i
=
0
;
i
<
screenInfo
.
numScreens
;
i
++
)
{
pScreen
=
screenInfo
.
screens
[
i
];
SetScreenPrivate
(
pScreen
,
NULL
);
}
if
(
AttrType
&&
EventType
&&
ScreenPrivateIndex
!=
-
1
&&
if
(
AttrType
&&
EventType
&&
S
uspendType
&&
S
creenPrivateIndex
!=
-
1
&&
(
extEntry
=
AddExtension
(
ScreenSaverName
,
ScreenSaverNumberEvents
,
0
,
ProcScreenSaverDispatch
,
SProcScreenSaverDispatch
,
ScreenSaverResetProc
,
StandardMinorOpcode
)))
...
...
@@ -427,6 +460,45 @@ ScreenSaverFreeAttr (value, id)
return
TRUE
;
}
static
int
ScreenSaverFreeSuspend
(
pointer
value
,
XID
id
)
{
ScreenSaverSuspensionPtr
data
=
(
ScreenSaverSuspensionPtr
)
value
;
ScreenSaverSuspensionPtr
*
prev
,
this
;
/* Unlink and free the suspension record for the client */
for
(
prev
=
&
suspendingClients
;
(
this
=
*
prev
);
prev
=
&
this
->
next
)
{
if
(
this
==
data
)
{
*
prev
=
this
->
next
;
free
(
this
);
break
;
}
}
/* Reenable the screensaver if this was the last client suspending it. */
if
(
screenSaverSuspended
&&
suspendingClients
==
NULL
)
{
screenSaverSuspended
=
FALSE
;
/* The screensaver could be active, since suspending it (by design)
doesn't prevent it from being forceably activated */
#ifdef DPMSExtension
if
(
screenIsSaved
!=
SCREEN_SAVER_ON
&&
DPMSPowerLevel
==
DPMSModeOn
)
#else
if
(
screenIsSaved
!=
SCREEN_SAVER_ON
)
#endif
{
UpdateCurrentTimeIf
();
lastDeviceEventTime
=
currentTime
;
SetScreenSaverTimer
();
}
}
return
Success
;
}
static
void
SendScreenSaverNotify
(
pScreen
,
state
,
forced
)
ScreenPtr
pScreen
;
...
...
@@ -1286,12 +1358,73 @@ ProcScreenSaverUnsetAttributes (ClientPtr client)
return
ScreenSaverUnsetAttributes
(
client
);
}
static
int
ProcScreenSaverSuspend
(
ClientPtr
client
)
{
ScreenSaverSuspensionPtr
*
prev
,
this
;
REQUEST
(
xScreenSaverSuspendReq
);
REQUEST_SIZE_MATCH
(
xScreenSaverSuspendReq
);
/* Check if this client is suspending the screensaver */
for
(
prev
=
&
suspendingClients
;
(
this
=
*
prev
);
prev
=
&
this
->
next
)
if
(
this
->
pClient
==
client
)
break
;
if
(
this
)
{
if
(
stuff
->
suspend
==
TRUE
)
this
->
count
++
;
else
if
(
--
this
->
count
==
0
)
FreeResource
(
this
->
clientResource
,
RT_NONE
);
return
Success
;
}
/* If we get to this point, this client isn't suspending the screensaver */
if
(
stuff
->
suspend
==
FALSE
)
return
Success
;
/*
* Allocate a suspension record for the client, and stop the screensaver
* if it isn't already suspended by another client. We attach a resource ID
* to the record, so the screensaver will be reenabled and the record freed
* if the client disconnects without reenabling it first.
*/
this
=
(
ScreenSaverSuspensionPtr
)
malloc
(
sizeof
(
ScreenSaverSuspensionRec
));
if
(
!
this
)
return
BadAlloc
;
memset
(
this
,
0
,
sizeof
(
ScreenSaverSuspensionRec
));
this
->
next
=
NULL
;
this
->
pClient
=
client
;
this
->
count
=
1
;
this
->
clientResource
=
FakeClientID
(
client
->
index
);
if
(
!
AddResource
(
this
->
clientResource
,
SuspendType
,
(
pointer
)
this
))
{
free
(
this
);
return
BadAlloc
;
}
*
prev
=
this
;
if
(
!
screenSaverSuspended
)
{
screenSaverSuspended
=
TRUE
;
FreeScreenSaverTimer
();
}
return
(
client
->
noClientException
);
}
static
DISPATCH_PROC
((
*
NormalVector
[]))
=
{
ProcScreenSaverQueryVersion
,
ProcScreenSaverQueryInfo
,
ProcScreenSaverSelectInput
,
ProcScreenSaverSetAttributes
,
ProcScreenSaverUnsetAttributes
,
ProcScreenSaverSuspend
,
};
#define NUM_REQUESTS ((sizeof NormalVector) / (sizeof NormalVector[0]))
...
...
@@ -1375,12 +1508,24 @@ SProcScreenSaverUnsetAttributes (client)
return
ProcScreenSaverUnsetAttributes
(
client
);
}
static
int
SProcScreenSaverSuspend
(
ClientPtr
client
)
{
REQUEST
(
xScreenSaverSuspendReq
);
swaps
(
&
stuff
->
length
);
REQUEST_SIZE_MATCH
(
xScreenSaverSuspendReq
);
swapl
(
&
stuff
->
suspend
);
return
ProcScreenSaverSuspend
(
client
);
}
static
DISPATCH_PROC
((
*
SwappedVector
[]))
=
{
SProcScreenSaverQueryVersion
,
SProcScreenSaverQueryInfo
,
SProcScreenSaverSelectInput
,
SProcScreenSaverSetAttributes
,
SProcScreenSaverUnsetAttributes
,
SProcScreenSaverSuspend
,
};
static
int
...
...
nx-X11/programs/Xserver/Xext/sleepuntil.c
View file @
aecdb526
...
...
@@ -78,7 +78,7 @@ static void SertafiedWakeupHandler(
void
*
/* LastSelectMask */
);
int
_X_EXPORT
int
ClientSleepUntil
(
client
,
revive
,
notifyFunc
,
closure
)
ClientPtr
client
;
TimeStamp
*
revive
;
...
...
nx-X11/programs/Xserver/Xext/sync.c
View file @
aecdb526
...
...
@@ -296,14 +296,18 @@ static void
SyncDeleteTriggerFromCounter
(
pTrigger
)
SyncTrigger
*
pTrigger
;
{
SyncTriggerList
*
pCur
,
*
pPrev
=
NULL
;
SyncTriggerList
*
pCur
;
SyncTriggerList
*
pPrev
;
/* pCounter needs to be stored in pTrigger before calling here. */
if
(
!
pTrigger
->
pCounter
)
return
;
for
(
pCur
=
pTrigger
->
pCounter
->
pTriglist
;
pCur
;
pCur
=
pCur
->
next
)
pPrev
=
NULL
;
pCur
=
pTrigger
->
pCounter
->
pTriglist
;
while
(
pCur
)
{
if
(
pCur
->
pTrigger
==
pTrigger
)
{
...
...
@@ -311,9 +315,13 @@ SyncDeleteTriggerFromCounter(pTrigger)
pPrev
->
next
=
pCur
->
next
;
else
pTrigger
->
pCounter
->
pTriglist
=
pCur
->
next
;
free
(
pCur
);
break
;
}
pPrev
=
pCur
;
pCur
=
pCur
->
next
;
}
if
(
IsSystemCounter
(
pTrigger
->
pCounter
))
...
...
nx-X11/programs/Xserver/Xext/xres.c
View file @
aecdb526
...
...
@@ -6,6 +6,8 @@
#include <dix-config.h>
#endif
#include <stdio.h>
#include <string.h>
#include <nx-X11/X.h>
#include <nx-X11/Xproto.h>
#include "misc.h"
...
...
@@ -206,7 +208,7 @@ ProcXResQueryClientPixmapBytes (ClientPtr client)
rep
.
sequenceNumber
=
client
->
sequence
;
rep
.
length
=
0
;
rep
.
bytes
=
bytes
;
#ifdef XSERVER64
#ifdef
_
XSERVER64
rep
.
bytes_overflow
=
bytes
>>
32
;
#else
rep
.
bytes_overflow
=
0
;
...
...
nx-X11/programs/Xserver/Xext/xvmain.c
View file @
aecdb526
...
...
@@ -253,7 +253,7 @@ CreateResourceTypes()
}
int
_X_EXPORT
int
XvScreenInit
(
ScreenPtr
pScreen
)
{
XvScreenPtr
pxvs
;
...
...
@@ -333,13 +333,13 @@ XvResetProc(ExtensionEntry* extEntry)
{
}
int
_X_EXPORT
int
XvGetScreenIndex
()
{
return
XvScreenIndex
;
}
unsigned
long
_X_EXPORT
unsigned
long
XvGetRTPort
()
{
return
XvRTPort
;
...
...
nx-X11/programs/Xserver/dix/Imakefile
View file @
aecdb526
...
...
@@ -132,7 +132,7 @@ NormalLibraryTarget(dix,$(OBJS))
LintLibraryTarget(dix,$(SRCS) $(XPSRC))
NormalLintTarget($(SRCS) $(XPSRC))
SpecialCObjectRule(globals,$(ICONFIGFILES),$(SITE_DEFINES))
SpecialCObjectRule(globals,$(ICONFIGFILES),$(SITE_DEFINES)
$(EXT_DEFINES)
)
SpecialCObjectRule(main,$(ICONFIGFILES),$(VENDOR_DEFINES))
SpecialCObjectRule(pixmap,$(ICONFIGFILES),$(_NOOP_))
SpecialCObjectRule(privates,$(ICONFIGFILES),$(_NOOP_))
...
...
nx-X11/programs/Xserver/dix/globals.c
View file @
aecdb526
...
...
@@ -127,6 +127,10 @@ int defaultScreenSaverAllowExposures = DEFAULT_SCREEN_SAVER_EXPOSURES;
int
logoScreenSaver
=
DEFAULT_LOGO_SCREEN_SAVER
;
#endif
#ifdef SCREENSAVER
Bool
screenSaverSuspended
=
FALSE
;
#endif
char
*
defaultFontPath
=
COMPILEDDEFAULTFONTPATH
;
char
*
defaultTextFont
=
COMPILEDDEFAULTFONT
;
char
*
defaultCursorFont
=
COMPILEDCURSORFONT
;
...
...
nx-X11/programs/Xserver/dix/main.c
View file @
aecdb526
...
...
@@ -335,9 +335,6 @@ main(int argc, char *argv[], char *envp[])
InitRootWindow
(
screenInfo
.
screens
[
i
]
->
root
);
DefineInitialRootWindow
(
screenInfo
.
screens
[
0
]
->
root
);
SaveScreens
(
SCREEN_SAVER_FORCER
,
ScreenSaverReset
);
#ifdef DPMSExtension
SetDPMSTimers
();
#endif
#ifdef PANORAMIX
if
(
!
noPanoramiXExtension
)
{
...
...
@@ -387,9 +384,6 @@ main(int argc, char *argv[], char *envp[])
}
FreeFonts
();
#ifdef DPMSExtension
FreeDPMSTimers
();
#endif
FreeAuditTimer
();
ReleaseClientIds
(
serverClient
);
...
...
nx-X11/programs/Xserver/include/globals.h
View file @
aecdb526
...
...
@@ -11,6 +11,10 @@ extern CARD32 defaultScreenSaverInterval;
extern
CARD32
ScreenSaverTime
;
extern
CARD32
ScreenSaverInterval
;
#ifdef SCREENSAVER
extern
Bool
screenSaverSuspended
;
#endif
extern
char
*
defaultFontPath
;
extern
int
monitorResolution
;
extern
Bool
loadableFonts
;
...
...
nx-X11/programs/Xserver/os/WaitFor.c
View file @
aecdb526
...
...
@@ -701,26 +701,89 @@ TimerInit(void)
}
}
#ifdef DPMSExtension
#define DPMS_CHECK_MODE(mode,time)\
if (time > 0 && DPMSPowerLevel < mode && timeout >= time)\
DPMSSet(mode);
#define DPMS_CHECK_TIMEOUT(time)\
if (time > 0 && (time - timeout) > 0)\
return time - timeout;
static
CARD32
NextDPMSTimeout
(
INT32
timeout
)
{
/*
* Return the amount of time remaining until we should set
* the next power level. Fallthroughs are intentional.
*/
switch
(
DPMSPowerLevel
)
{
case
DPMSModeOn
:
DPMS_CHECK_TIMEOUT
(
DPMSStandbyTime
)
case
DPMSModeStandby
:
DPMS_CHECK_TIMEOUT
(
DPMSSuspendTime
)
case
DPMSModeSuspend
:
DPMS_CHECK_TIMEOUT
(
DPMSOffTime
)
default:
/* DPMSModeOff */
return
0
;
}
}
#endif
/* DPMSExtension */
static
CARD32
ScreenSaverTimeoutExpire
(
OsTimerPtr
timer
,
CARD32
now
,
void
*
arg
)
{
INT32
timeout
=
now
-
lastDeviceEventTime
.
milliseconds
;
INT32
timeout
=
now
-
lastDeviceEventTime
.
milliseconds
;
CARD32
nextTimeout
=
0
;
#ifdef DPMSExtension
/*
* Check each mode lowest to highest, since a lower mode can
* have the same timeout as a higher one.
*/
if
(
DPMSEnabled
)
{
DPMS_CHECK_MODE
(
DPMSModeOff
,
DPMSOffTime
)
DPMS_CHECK_MODE
(
DPMSModeSuspend
,
DPMSSuspendTime
)
DPMS_CHECK_MODE
(
DPMSModeStandby
,
DPMSStandbyTime
)
if
(
timeout
<
ScreenSaverTime
)
{
return
ScreenSaverTime
-
timeout
;
nextTimeout
=
NextDPMSTimeout
(
timeout
);
}
/*
* Only do the screensaver checks if we're not in a DPMS
* power saving mode
*/
if
(
DPMSPowerLevel
!=
DPMSModeOn
)
return
nextTimeout
;
#endif
/* DPMSExtension */
if
(
!
ScreenSaverTime
)
return
nextTimeout
;
if
(
timeout
<
ScreenSaverTime
)
{
return
nextTimeout
>
0
?
MIN
(
ScreenSaverTime
-
timeout
,
nextTimeout
)
:
ScreenSaverTime
-
timeout
;
}
ResetOsBuffers
();
/* not ideal, but better than nothing */
SaveScreens
(
SCREEN_SAVER_ON
,
ScreenSaverActive
);
#ifdef DPMSExtension
if
(
ScreenSaverInterval
>
0
&&
DPMSPowerLevel
==
DPMSModeOn
)
#else
if
(
ScreenSaverInterval
>
0
)
#endif
/* DPMSExtension */
return
ScreenSaverInterval
;
{
nextTimeout
=
nextTimeout
>
0
?
MIN
(
ScreenSaverInterval
,
nextTimeout
)
:
ScreenSaverInterval
;
}
return
0
;
return
nextTimeout
;
}
static
OsTimerPtr
ScreenSaverTimer
=
NULL
;
...
...
@@ -737,93 +800,41 @@ FreeScreenSaverTimer(void)
void
SetScreenSaverTimer
(
void
)
{
if
(
ScreenSaverTime
>
0
)
{
ScreenSaverTimer
=
TimerSet
(
ScreenSaverTimer
,
0
,
ScreenSaverTime
,
ScreenSaverTimeoutExpire
,
NULL
);
}
else
if
(
ScreenSaverTimer
)
{
FreeScreenSaverTimer
();
}
}
CARD32
timeout
=
0
;
#ifdef DPMSExtension
static
OsTimerPtr
DPMSStandbyTimer
=
NULL
;
static
OsTimerPtr
DPMSSuspendTimer
=
NULL
;
static
OsTimerPtr
DPMSOffTimer
=
NULL
;
static
CARD32
DPMSStandbyTimerExpire
(
OsTimerPtr
timer
,
CARD32
now
,
void
*
arg
)
{
INT32
timeout
=
now
-
lastDeviceEventTime
.
milliseconds
;
if
(
timeout
<
DPMSStandbyTime
)
{
return
DPMSStandbyTime
-
timeout
;
}
if
(
DPMSPowerLevel
<
DPMSModeStandby
)
{
if
(
DPMSEnabled
)
DPMSSet
(
DPMSModeStandby
);
}
return
DPMSStandbyTime
;
}
static
CARD32
DPMSSuspendTimerExpire
(
OsTimerPtr
timer
,
CARD32
now
,
void
*
arg
)
{
INT32
timeout
=
now
-
lastDeviceEventTime
.
milliseconds
;
if
(
timeout
<
DPMSSuspendTime
)
{
return
DPMSSuspendTime
-
timeout
;
}
if
(
DPMSPowerLevel
<
DPMSModeSuspend
)
{
if
(
DPMSEnabled
)
DPMSSet
(
DPMSModeSuspend
);
}
return
DPMSSuspendTime
;
}
static
CARD32
DPMSOffTimerExpire
(
OsTimerPtr
timer
,
CARD32
now
,
void
*
arg
)
{
INT32
timeout
=
now
-
lastDeviceEventTime
.
milliseconds
;
if
(
timeout
<
DPMSOffTime
)
{
return
DPMSOffTime
-
timeout
;
}
if
(
DPMSPowerLevel
<
DPMSModeOff
)
{
if
(
DPMSEnabled
)
DPMSSet
(
DPMSModeOff
);
if
(
DPMSEnabled
)
{
/*
* A higher DPMS level has a timeout that's either less
* than or equal to that of a lower DPMS level.
*/
if
(
DPMSStandbyTime
>
0
)
timeout
=
DPMSStandbyTime
;
else
if
(
DPMSSuspendTime
>
0
)
timeout
=
DPMSSuspendTime
;
else
if
(
DPMSOffTime
>
0
)
timeout
=
DPMSOffTime
;
}
return
DPMSOffTime
;
}
#endif
void
FreeDPMSTimers
(
void
)
{
if
(
DPMSStandbyTimer
)
{
TimerFree
(
DPMSStandbyTimer
);
DPMSStandbyTimer
=
NULL
;
if
(
ScreenSaverTime
>
0
)
{
timeout
=
timeout
>
0
?
MIN
(
ScreenSaverTime
,
timeout
)
:
ScreenSaverTime
;
}
if
(
DPMSSuspendTimer
)
{
TimerFree
(
DPMSSuspendTimer
);
DPMSSuspendTimer
=
NULL
;
#ifdef SCREENSAVER
if
(
timeout
&&
!
screenSaverSuspended
)
{
#else
if
(
timeout
)
{
#endif
ScreenSaverTimer
=
TimerSet
(
ScreenSaverTimer
,
0
,
timeout
,
ScreenSaverTimeoutExpire
,
NULL
);
}
if
(
DPMSOffTimer
)
{
TimerFree
(
DPMSOffTimer
);
DPMSOffTimer
=
NULL
;
else
if
(
ScreenSaverTimer
)
{
FreeScreenSaverTimer
();
}
}
void
SetDPMSTimers
(
void
)
{
if
(
!
DPMSEnabled
)
return
;
DPMSStandbyTimer
=
TimerSet
(
DPMSStandbyTimer
,
0
,
DPMSStandbyTime
,
DPMSStandbyTimerExpire
,
NULL
);
DPMSSuspendTimer
=
TimerSet
(
DPMSSuspendTimer
,
0
,
DPMSSuspendTime
,
DPMSSuspendTimerExpire
,
NULL
);
DPMSOffTimer
=
TimerSet
(
DPMSOffTimer
,
0
,
DPMSOffTime
,
DPMSOffTimerExpire
,
NULL
);
}
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment