WinRT keep display on

Hi David,

I’m trying to keep the screen programmatically on for some time, but I’m not
doing it right. This is my simple code:--------------------------

??? using namespace Windows::System::Display;

??? DisplayRequest ^ request = ref new DisplayRequest();

??? if (keepOn != 0)
??? {
??? ??? request->RequestActive();
??? }
??? else
??? {
??? ??? request->RequestRelease();
??? }


but there must be sth. fundamentally wrong with it, because when I call
RequestRelease() I get an exception from WinRT about calling something at an
unexpected time. I’m calling it from SDL’s main thread, which is probably
not the UI thread.

I saw in your code for the game bar that you are using something called a
"dispatcher", I suppose this is to run sth. on the UI thread. Do I need to
do the same for DisplayRequest()? Anything else I have missed?

Regards,

Daniel

I’m not sure why this call isn’t working. SDL’s main thread on WinRT is,
at present, typically the main thread.

Did the exception contain any more info?

I can plan on looking into this when I get a chance, hopefully in within
the next few weeks, but make no guarantees.

– David L.On Sat, Aug 27, 2016 at 7:54 AM, hardcoredaniel wrote:

Hi David,

I’m trying to keep the screen programmatically on for some time, but I’m
not doing it right. This is my simple code:


using namespace Windows::System::Display;

DisplayRequest ^ request = ref new DisplayRequest();

if (keepOn != 0)
{
    request->RequestActive();
}
else
{
    request->RequestRelease();
}

but there must be sth. fundamentally wrong with it, because when I call
RequestRelease() I get an exception from WinRT about calling something at
an unexpected time. I’m calling it from SDL’s main thread, which is
probably not the UI thread.

I saw in your code for the game bar that you are using something called a
"dispatcher", I suppose this is to run sth. on the UI thread. Do I need to
do the same for DisplayRequest()? Anything else I have missed?

Regards,

Daniel


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Hi David,

unfortunately that was the only message of the exception, “a function being
called at an unexpected time”.

I have googled a bit and found a suggestion to keep the DisplayRequest
object that the requestActive() was called on for the corresponding
requestRelease() call. This code does at least not crash immediately:

DisplayRequest ^ request = nullptr;

void SetKeepDisplayOn(int keepOn)
{

??? if (request == nullptr)
??? {
??? ??? request = ref new DisplayRequest();
??? ??? if (keepOn != 0)
??? ??? {
??? ??? ??? request->RequestActive();
??? ??? }
??? ??? else
??? ??? {
??? ??? ??? SDL_Log(“Error: Trying to release display although not
acquired!\n”);
??? ??? }
??? }
??? else
??? {
??? ??? if (keepOn == 0)
??? ??? {
??? ??? ??? request->RequestRelease();
??? ??? ??? request = nullptr;
??? ??? }
??? ??? else
??? ??? {
??? ??? ??? SDL_Log(“Error: Trying to acquire display although already
acquired!\n”);
??? ??? }
??? }
}

but I can’t say whether this is really correct and without side effects,
esp. w.r.t. the lifetime of DisplayRequest objects. Can you please take a
look at this code for obvious defects?

Regards,

Daniel

---------- P?vodn? zpr?va ----------
Od: David Ludwig
Komu: SDL Development List
Datum: 27. 8. 2016 15:29:14
P?edm?t: Re: [SDL] WinRT keep display on

"

I’m not sure why this call isn’t working.? SDL’s main thread on WinRT is, at
present, typically the main thread.

Did the exception contain any more info?

I can plan on looking into this when I get a chance, hopefully in within the
next few weeks, but make no guarantees.

– David L.On Sat, Aug 27, 2016 at 7:54 AM, hardcoredaniel <@hardcoredaniel (mailto:@hardcoredaniel)> wrote:
"
Hi David,

I’m trying to keep the screen programmatically on for some time, but I’m not
doing it right. This is my simple code:


??? using namespace Windows::System::Display;

??? DisplayRequest ^ request = ref new DisplayRequest();

??? if (keepOn != 0)
??? {
??? ??? request->RequestActive();
??? }
??? else
??? {
??? ??? request->RequestRelease();
??? }


but there must be sth. fundamentally wrong with it, because when I call
RequestRelease() I get an exception from WinRT about calling something at an
unexpected time. I’m calling it from SDL’s main thread, which is probably
not the UI thread.

I saw in your code for the game bar that you are using something called a
"dispatcher", I suppose this is to run sth. on the UI thread. Do I need to
do the same for DisplayRequest()? Anything else I have missed?

Regards,

Daniel


SDL mailing list
SDL at lists.libsdl.org(mailto:SDL at lists.libsdl.org)
http://lists.libsdl.org/ listinfo.cgi/sdl-libsdl.org
(http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org)

"


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org"

I think that’ll work. If not, I went ahead and made SDL manage its own
DisplayRequest, via calls to SDL_EnableScreenSaver() and
SDL_DisableScreenSaver() (via https://hg.libsdl.org/SDL/rev/db77073d402d
). To note, SDL2 will, by default, call SDL_EnableScreenSaver().

– David L.On Sat, Aug 27, 2016 at 12:11 PM, hardcoredaniel wrote:

Hi David,

unfortunately that was the only message of the exception, “a function
being called at an unexpected time”.

I have googled a bit and found a suggestion to keep the DisplayRequest
object that the requestActive() was called on for the corresponding
requestRelease() call. This code does at least not crash immediately:

DisplayRequest ^ request = nullptr;

void SetKeepDisplayOn(int keepOn)
{

if (request == nullptr)
{
    request = ref new DisplayRequest();
    if (keepOn != 0)
    {
        request->RequestActive();
    }
    else
    {
        SDL_Log("Error: Trying to release display although not

acquired!\n");
}
}
else
{
if (keepOn == 0)
{
request->RequestRelease();
request = nullptr;
}
else
{
SDL_Log(“Error: Trying to acquire display although already
acquired!\n”);
}
}
}

but I can’t say whether this is really correct and without side effects,
esp. w.r.t. the lifetime of DisplayRequest objects. Can you please take a
look at this code for obvious defects?

Regards,

Daniel

---------- P?vodn? zpr?va ----------
Od: David Ludwig <@David_Ludwig>
Komu: SDL Development List
Datum: 27. 8. 2016 15:29:14
P?edm?t: Re: [SDL] WinRT keep display on

I’m not sure why this call isn’t working. SDL’s main thread on WinRT is,
at present, typically the main thread.

Did the exception contain any more info?

I can plan on looking into this when I get a chance, hopefully in within
the next few weeks, but make no guarantees.

– David L.

On Sat, Aug 27, 2016 at 7:54 AM, hardcoredaniel wrote:

Hi David,

I’m trying to keep the screen programmatically on for some time, but I’m
not doing it right. This is my simple code:


using namespace Windows::System::Display;

DisplayRequest ^ request = ref new DisplayRequest();

if (keepOn != 0)
{
    request->RequestActive();
}
else
{
    request->RequestRelease();
}

but there must be sth. fundamentally wrong with it, because when I call
RequestRelease() I get an exception from WinRT about calling something at
an unexpected time. I’m calling it from SDL’s main thread, which is
probably not the UI thread.

I saw in your code for the game bar that you are using something called a
"dispatcher", I suppose this is to run sth. on the UI thread. Do I need to
do the same for DisplayRequest()? Anything else I have missed?

Regards,

Daniel


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/ listinfo.cgi/sdl-libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org