atom feed22 messages in net.java.dev.rococoa.usersRe: BOOL mapping issues
FromSent OnAttachments
Harald KuhrFeb 9, 2010 11:58 am 
Duncan McGregorFeb 9, 2010 12:04 pm 
Harald KuhrFeb 9, 2010 12:27 pm 
Harald KuhrFeb 9, 2010 12:37 pm.java
Duncan McGregorFeb 10, 2010 12:37 am 
Harald KuhrFeb 10, 2010 2:39 am.java
Harald KuhrFeb 17, 2010 7:25 am 
Duncan McGregorFeb 18, 2010 1:56 am 
Andrew ThompsonFeb 18, 2010 6:52 pm 
Harald KuhrFeb 19, 2010 6:49 am 
Harald KuhrFeb 19, 2010 7:23 am 
Harald KuhrFeb 19, 2010 10:37 am 
Harald KuhrFeb 19, 2010 12:13 pm 
Duncan McGregorFeb 19, 2010 2:04 pm 
Harald KuhrFeb 19, 2010 3:06 pm 
Andrew ThompsonFeb 20, 2010 8:02 am 
Harald KuhrFeb 20, 2010 1:12 pm 
Andrew ThompsonFeb 20, 2010 5:22 pm 
Duncan McGregorFeb 21, 2010 2:55 am 
Harald KuhrFeb 21, 2010 8:14 am 
Duncan McGregorFeb 21, 2010 8:40 am 
Duncan McGregorFeb 21, 2010 9:01 am 
Subject:Re: BOOL mapping issues
From:Harald Kuhr (hara@gmail.com)
Date:Feb 19, 2010 7:23:28 am
List:net.java.dev.rococoa.users

Hi again,

I finally took the time to debug this further, and created my own NSView
subclass (which involved at least learning some minimal ObjC and XCode usage, so
it wasn't all wasted.. ;-) ). I think I figured out what is going on..

Consider this rather trivial code (bear with me, I'm an ObjC n00b):

@interface MyView : NSView {

}

@end

@implementation MyView

- (void)setHidden:(BOOL)flag { NSLog ( @"setHidden(%d)", flag); // [super setHidden: flag ? YES : NO ]; [super setHidden: flag]; NSLog ( @"isHidden after setHidden(%d) : %d)", flag, [super isHidden]); }

- (BOOL) isHidden { BOOL hidden = [super isHidden]; NSLog(@"isHidden: %d", hidden); return hidden; }

@end

When running one of my test cases, this will print something like:

2010-02-19 16:01:54.724 java[14906:903] isHidden: 0 2010-02-19 16:01:54.729 java[14906:903] setHidden(0) 2010-02-19 16:01:54.729 java[14906:903] isHidden after setHidden(0) : 0) 2010-02-19 16:01:54.731 java[14906:903] isHidden: 0 2010-02-19 16:01:54.735 java[14906:903] isHidden: 0 2010-02-19 16:01:54.736 java[14906:903] setHidden(-1) 2010-02-19 16:01:54.737 java[14906:903] isHidden after setHidden(-1) : 0) 2010-02-19 16:01:54.738 java[14906:903] isHidden: 0

However, if I swap the commented out call to super setHidden with the current
one, I get:

2010-02-19 16:08:27.983 java[14960:903] isHidden: 0 2010-02-19 16:08:27.988 java[14960:903] setHidden(0) 2010-02-19 16:08:27.990 java[14960:903] isHidden after setHidden(0) : 0) 2010-02-19 16:08:27.992 java[14960:903] isHidden: 0 2010-02-19 16:08:27.995 java[14960:903] isHidden: 0 2010-02-19 16:08:27.997 java[14960:903] setHidden(-1) 2010-02-19 16:08:27.998 java[14960:903] isHidden after setHidden(-1) : 1) 2010-02-19 16:08:28.000 java[14960:903] isHidden: 1

(and the tests passes).

Notice that YES is 1, not -1. So there seems to be a mismatch between JNA's
booleans (-1 = TRUE, 0 = FALSE) and what Cocoa expects (1 = YES, 0 = NO).

In most of the cases of course, the bitwise operators will treat anything
non-zero as TRUE/YES, however if there's ever code that tests for == YES or
similar, it might fail (as I guess is the case for setHidden).

Can this be fixed in Rococoa, or is this something for JNA?

Best regards,