| From | Sent On | Attachments |
|---|---|---|
| Harald Kuhr | Feb 9, 2010 11:58 am | |
| Duncan McGregor | Feb 9, 2010 12:04 pm | |
| Harald Kuhr | Feb 9, 2010 12:27 pm | |
| Harald Kuhr | Feb 9, 2010 12:37 pm | .java |
| Duncan McGregor | Feb 10, 2010 12:37 am | |
| Harald Kuhr | Feb 10, 2010 2:39 am | .java |
| Harald Kuhr | Feb 17, 2010 7:25 am | |
| Duncan McGregor | Feb 18, 2010 1:56 am | |
| Andrew Thompson | Feb 18, 2010 6:52 pm | |
| Harald Kuhr | Feb 19, 2010 6:49 am | |
| Harald Kuhr | Feb 19, 2010 7:23 am | |
| Harald Kuhr | Feb 19, 2010 10:37 am | |
| Harald Kuhr | Feb 19, 2010 12:13 pm | |
| Duncan McGregor | Feb 19, 2010 2:04 pm | |
| Harald Kuhr | Feb 19, 2010 3:06 pm | |
| Andrew Thompson | Feb 20, 2010 8:02 am | |
| Harald Kuhr | Feb 20, 2010 1:12 pm | |
| Andrew Thompson | Feb 20, 2010 5:22 pm | |
| Duncan McGregor | Feb 21, 2010 2:55 am | |
| Harald Kuhr | Feb 21, 2010 8:14 am | |
| Duncan McGregor | Feb 21, 2010 8:40 am | |
| Duncan McGregor | Feb 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,
-- Harald K






.java