macdrv: implement getting and setting the screen saver state, version 2

C.W. Betts computers57 at hotmail.com
Mon Jan 21 09:31:49 CST 2013


On Jan 20, 2013, at 11:06 PM, Ken Thomases <ken at codeweavers.com> wrote:

> Hi,
> 
> On Jan 20, 2013, at 2:00 PM, C.W. Betts wrote:
> 
>> This version implements changes and advice from Ken Thomases, including using kIOPMAssertionTypePreventUserIdleDisplaySleep on Lion and later. Also, some comments were added.
> 
>> +                    //Get pre-Lion no display sleep counts
> 
> C++-style comments ("//") are not allowed in Wine C code.  They aren't portable.
Oops, forgot about that. Fixed.
> 
> 
>> +                    CFNumberRef count = CFDictionaryGetValue(assertionStates, kIOPMAssertionTypeNoDisplaySleep);
>> +                    CFNumberRef count2 = NULL;
>> +                    long longCount = 0;
>> +                    long longCount2 = 0;
>> +                    CFNumberGetValue(count, kCFNumberLongType, &longCount);
>> +                    //If available, get Lion and later no display sleep counts
>> +                    count2 = CFDictionaryGetValue(assertionStates, kIOPMAssertionTypePreventUserIdleDisplaySleep);
>> +                    if (count2)
>> +                        CFNumberGetValue(count2, kCFNumberLongType, &longCount2);
> 
> The issue discussed for the previous patch is still present.  For example, the following code would be internally consistent and also safe:
> 
>                    CFNumberRef count = CFDictionaryGetValue(assertionStates, kIOPMAssertionTypeNoDisplaySleep);
>                    CFNumberRef count2 = CFDictionaryGetValue(assertionStates, kIOPMAssertionTypePreventUserIdleDisplaySleep);
>                    long longCount = 0;
>                    long longCount2 = 0;
>                    if (count)
>                        CFNumberGetValue(count, kCFNumberLongType, &longCount);
>                    if (count2)
>                        CFNumberGetValue(count2, kCFNumberLongType, &longCount2);
> 
> (Note that this reorganization also eliminates a dead store.  You were initializing count2 and then unconditionally assigning it, making the initialization redundant.  Such unnecessary initializations also defeat potentially valuable compiler warnings.)
Fixed
> 
> 
>> +                    if (longCount || longCount2 )
> 
> There's an extraneous space before the closing parenthesis.
Fixed
> 
> 
>> +                    //Release power assertion
>> +                    IOReturn success = IOPMAssertionRelease(powerAssertion);
> 
> 
> The comment is useless.  It tells us nothing that the code doesn't.  Please don't do that.  In fact, most of the comments you added are like this.
Done
> 
> 
>> +                    //Are we running Lion or later?
>> +                    if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber10_7)
>> +                    	//If so, use Lion's name
>> +                        assertName = kIOPMAssertionTypePreventUserIdleDisplaySleep;
>> +                    else
>> +                    	//If not, use old name
>> +                    	assertName = kIOPMAssertionTypeNoDisplaySleep;
> 
> I'm not sure it's correct that these are two different names for roughly the same thing.  I think the two assertion types do slightly different things.  "NoDisplaySleep" seeks to prevent display sleep for any (non-forced) reason.  "PreventUserIdleDisplaySleep" only seeks to prevent display sleep that is due to user idleness.
From the header for kIOPMAssertionTypeNoDisplaySleep: Deprecated in 10.7; Please use assertion type kIOPMAssertionTypePreventUserIdleDisplaySleep. From Apple Docs, kIOPMAssertionTypePreventUserIdleDisplaySleep is only available on 10.7 or later. I don't think kIOPMAssertionTypePreventUserIdleDisplaySleep will do anything on 10.6
> 
> As I suggested previously, I do want us to use PreventUserIdleDisplaySleep when it's available, so that's good.  (Thank you for making that change.)  What I'm saying now is mostly just that the comments are misleading.  I suggest just removing the comments within the "if".  The code is understandable without them.
> 
> Also, this bit of code uses tabs to indent when none of the rest does.  Please be consistent with the surrounding code.
Oops, I'll look into getting rid of those.
> 
> Thanks,
> Ken
> 
> 




More information about the wine-devel mailing list