Author: mlytwyn
Date: Sat Apr 8 03:02:38 2017
New Revision: 40457
URL: http://svn.gna.org/viewcvs/gnustep?rev=40457&view=rev
Log:
Fix XIB 5 keyEquivalentModifierMask unloading and cleanup button flags 2
Modified:
libs/gui/branches/gnustep_testplant_branch/Headers/AppKit/NSButtonCell.h
libs/gui/branches/gnustep_testplant_branch/Source/GSXib5KeyedUnarchiver.m
libs/gui/branches/gnustep_testplant_branch/Source/NSButtonCell.m
Modified:
libs/gui/branches/gnustep_testplant_branch/Headers/AppKit/NSButtonCell.h
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/branches/gnustep_testplant_branch/Headers/AppKit/NSButtonCell.h?rev=40457&r1=40456&r2=40457&view=diff
==============================================================================
--- libs/gui/branches/gnustep_testplant_branch/Headers/AppKit/NSButtonCell.h
(original)
+++ libs/gui/branches/gnustep_testplant_branch/Headers/AppKit/NSButtonCell.h
Sat Apr 8 03:02:38 2017
@@ -171,6 +171,12 @@
#endif
} GSButtonCellFlags;
+typedef union _GSButtonCellFlagsUnion
+{
+ GSButtonCellFlags flags;
+ uint32_t value;
+} GSButtonCellFlagsUnion;
+
typedef struct _GSButtonCellFlags2 {
#if GS_WORDS_BIGENDIAN == 1
unsigned int keyEquivalentModifierMask:24;
@@ -188,6 +194,12 @@
unsigned int keyEquivalentModifierMask:24;
#endif
} GSButtonCellFlags2;
+
+typedef union _GSButtonCellFlags2Union
+{
+ GSButtonCellFlags2 flags;
+ uint32_t value;
+} GSButtonCellFlags2Union;
@interface NSCell (Private)
- (NSSize) _scaleImageWithSize: (NSSize)imageSize
Modified:
libs/gui/branches/gnustep_testplant_branch/Source/GSXib5KeyedUnarchiver.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/branches/gnustep_testplant_branch/Source/GSXib5KeyedUnarchiver.m?rev=40457&r1=40456&r2=40457&view=diff
==============================================================================
--- libs/gui/branches/gnustep_testplant_branch/Source/GSXib5KeyedUnarchiver.m
(original)
+++ libs/gui/branches/gnustep_testplant_branch/Source/GSXib5KeyedUnarchiver.m
Sat Apr 8 03:02:38 2017
@@ -1323,12 +1323,12 @@
id object = nil;
NSDictionary *attributes = [[element elementForKey:
@"keyEquivalentModifierMask"] attributes];
- if (attributes == nil)
+ if ((attributes == nil) || ([attributes count] == 0))
{
// Seems that Apple decided to omit this attribute IF Control key alone
// is applied. If this key is present WITH NO setting then that NULL
// value is used for the modifier mask...
- object = [NSNumber numberWithUnsignedInteger: NSCommandKeyMask];
+ object = [NSNumber numberWithUnsignedInteger: 0];
}
else
{
@@ -2421,9 +2421,6 @@
object = [NSImage imageNamed: @"NSSwitch"];
}
}
-#if defined(DEBUG_XIB5)
- NSWarnMLog(@"object: %@", object);
-#endif
}
return object;
@@ -2454,9 +2451,6 @@
}
}
}
-#if defined(DEBUG_XIB5)
- NSWarnMLog(@"object: %@", object);
-#endif
return object;
}
@@ -2470,9 +2464,6 @@
{
object = [NSImage imageNamed: [element attributeForKey: @"image"]];
}
-#if defined(DEBUG_XIB5)
- NSWarnMLog(@"object: %@", object);
-#endif
return object;
}
@@ -2483,54 +2474,49 @@
NSNumber *value = nil;
Class class = NSClassFromString([element attributeForKey: @"class"]);
- if ([class isSubclassOfClass: [NSButtonCell class]])
- {
- typedef union _GSButtonCellFlagsUnion
- {
- GSButtonCellFlags flags;
- uint32_t value;
- } GSButtonCellFlagsUnion;
-
- GSButtonCellFlagsUnion mask = { { 0 } };
- NSDictionary *behavior = [[element elementForKey:
@"behavior"] attributes];
- NSDictionary *attributes = [element attributes];
- NSString *imagePos = [attributes objectForKey:
@"imagePosition"];
-
- mask.flags.isPushin = [[behavior objectForKey: @"pushIn"]
boolValue];
- mask.flags.changeContents = [[behavior objectForKey:
@"changeContents"] boolValue];
- mask.flags.changeBackground = [[behavior objectForKey:
@"changeBackground"] boolValue];
- mask.flags.changeGray = [[behavior objectForKey:
@"changeGray"] boolValue];
-
- mask.flags.highlightByContents = [[behavior objectForKey:
@"lightByContents"] boolValue];
- mask.flags.highlightByBackground = [[behavior objectForKey:
@"lightByBackground"] boolValue];
- mask.flags.highlightByGray = [[behavior objectForKey:
@"lightByGray"] boolValue];
- mask.flags.drawing = [[behavior objectForKey: @"drawing"]
boolValue];
-
- mask.flags.isBordered = [attributes objectForKey:
@"borderStyle"] != nil;
- mask.flags.imageDoesOverlap = [@"only" isEqualToString: imagePos];
- mask.flags.imageDoesOverlap |= [@"overlaps" isEqualToString:
imagePos];
- mask.flags.isHorizontal = [@"left" isEqualToString: imagePos];
- mask.flags.isHorizontal |= [@"right" isEqualToString: imagePos];
- mask.flags.isBottomOrLeft = [@"left" isEqualToString: imagePos];
- mask.flags.isBottomOrLeft |= [@"bottom" isEqualToString: imagePos];
-
- mask.flags.isImageAndText = [@"only" isEqualToString: [attributes
objectForKey: @"imagePosition"]] == NO;
- mask.flags.isImageSizeDiff = 1; // FIXME...
- //mask.flags.hasKeyEquiv = [[behavior objectForKey:
@"hasKeyEquiv"] boolValue];
- //mask.flags.lastState = [[behavior objectForKey:
@"lastState"] boolValue];
-
- mask.flags.isTransparent = [[behavior objectForKey:
@"transparent"] boolValue];
- mask.flags.inset = [[attributes objectForKey: @"inset"]
intValue];
- mask.flags.doesNotDimImage = [[behavior objectForKey:
@"doesNotDimImage"] boolValue];
- mask.flags.useButtonImageSource = 0; //[attributes objectForKey:
@"imagePosition"] != nil;
- //mask.flags.unused2 = [[behavior objectForKey: @"XXXXX"]
boolValue]; // alt mnem loc???
-
- // Return the value...
- value = [NSNumber numberWithUnsignedInteger: mask.value];
- }
-#if defined(DEBUG_XIB5)
- NSWarnMLog(@"mask: %@", value);
-#endif
+ if ([class isSubclassOfClass: [NSButtonCell class]] == NO)
+ {
+ NSWarnMLog(@"attempt to access button flags 2 for NON-NSButtonCell based
class");
+ }
+ else
+ {
+ GSButtonCellFlagsUnion mask = { { 0 } };
+ NSDictionary *behavior = [[element elementForKey:
@"behavior"] attributes];
+ NSDictionary *attributes = [element attributes];
+ NSString *imagePos = [attributes objectForKey:
@"imagePosition"];
+
+ mask.flags.isPushin = [[behavior objectForKey: @"pushIn"]
boolValue];
+ mask.flags.changeContents = [[behavior objectForKey:
@"changeContents"] boolValue];
+ mask.flags.changeBackground = [[behavior objectForKey:
@"changeBackground"] boolValue];
+ mask.flags.changeGray = [[behavior objectForKey:
@"changeGray"] boolValue];
+
+ mask.flags.highlightByContents = [[behavior objectForKey:
@"lightByContents"] boolValue];
+ mask.flags.highlightByBackground = [[behavior objectForKey:
@"lightByBackground"] boolValue];
+ mask.flags.highlightByGray = [[behavior objectForKey:
@"lightByGray"] boolValue];
+ mask.flags.drawing = [[behavior objectForKey: @"drawing"]
boolValue];
+
+ mask.flags.isBordered = [attributes objectForKey:
@"borderStyle"] != nil;
+ mask.flags.imageDoesOverlap = [@"only" isEqualToString: imagePos];
+ mask.flags.imageDoesOverlap |= [@"overlaps" isEqualToString:
imagePos];
+ mask.flags.isHorizontal = [@"left" isEqualToString: imagePos];
+ mask.flags.isHorizontal |= [@"right" isEqualToString: imagePos];
+ mask.flags.isBottomOrLeft = [@"left" isEqualToString: imagePos];
+ mask.flags.isBottomOrLeft |= [@"bottom" isEqualToString:
imagePos];
+
+ mask.flags.isImageAndText = [@"only" isEqualToString:
[attributes objectForKey: @"imagePosition"]] == NO;
+ mask.flags.isImageSizeDiff = 1; // FIXME...
+ //mask.flags.hasKeyEquiv = [[behavior objectForKey:
@"hasKeyEquiv"] boolValue];
+ //mask.flags.lastState = [[behavior objectForKey:
@"lastState"] boolValue];
+
+ mask.flags.isTransparent = [[behavior objectForKey:
@"transparent"] boolValue];
+ mask.flags.inset = [[attributes objectForKey: @"inset"]
intValue];
+ mask.flags.doesNotDimImage = [[behavior objectForKey:
@"doesNotDimImage"] boolValue];
+ mask.flags.useButtonImageSource = 0; //[attributes objectForKey:
@"imagePosition"] != nil;
+ //mask.flags.unused2 = [[behavior objectForKey: @"XXXXX"]
boolValue]; // alt mnem loc???
+
+ // Return the value...
+ value = [NSNumber numberWithUnsignedInteger: mask.value];
+ }
return value;
}
@@ -2540,92 +2526,87 @@
NSNumber *value = nil;
Class class = NSClassFromString([element attributeForKey: @"class"]);
- if ([class isSubclassOfClass: [NSButtonCell class]])
- {
- typedef union _GSButtonCellFlags2Union
- {
- GSButtonCellFlags2 flags;
- uint32_t value;
- } GSButtonCellFlags2Union;
-
- GSButtonCellFlags2Union mask = { { 0 } };
- NSDictionary *attributes = [element attributes];
- NSString *bezelStyle = [attributes
objectForKey:@"bezelStyle"];
- NSString *imageScaling = [attributes
objectForKey:@"imageScaling"];
-
- if (bezelStyle)
- {
- uint32_t flag = NSRegularSquareBezelStyle; // Default if not specified...
-
- if ([@"rounded" isEqualToString: bezelStyle])
- flag = NSRoundedBezelStyle;
- else if ([@"regularSquare" isEqualToString: bezelStyle])
- flag = NSRegularSquareBezelStyle;
- else if ([@"disclosure" isEqualToString: bezelStyle])
- flag = NSDisclosureBezelStyle;
- else if ([@"shadowlessSquare" isEqualToString: bezelStyle])
- flag = NSShadowlessSquareBezelStyle;
- else if ([@"circular" isEqualToString: bezelStyle])
- flag = NSCircularBezelStyle;
- else if ([@"texturedSquare" isEqualToString: bezelStyle])
- flag = NSTexturedSquareBezelStyle;
- else if ([@"helpButton" isEqualToString: bezelStyle])
- flag = NSHelpButtonBezelStyle;
- else if ([@"smallSquare" isEqualToString: bezelStyle])
- flag = NSSmallSquareBezelStyle;
- else if ([@"texturedRounded" isEqualToString: bezelStyle])
- flag = NSTexturedRoundedBezelStyle;
- else if ([@"roundedRectangle" isEqualToString: bezelStyle])
- flag = NSRoundRectBezelStyle;
- else if ([@"roundedRect" isEqualToString: bezelStyle])
- flag = NSRoundRectBezelStyle;
- else if ([@"recessed" isEqualToString: bezelStyle])
- flag = NSRecessedBezelStyle;
- else if ([@"roundedDisclosure" isEqualToString: bezelStyle])
- flag = NSRoundedDisclosureBezelStyle;
-#if 0
- else if ([@"inline" isEqualToString: bezelStyle])
- flag = NSInlineBezelStyle; // New value added in Cocoa version???
-#endif
+ if ([class isSubclassOfClass: [NSButtonCell class]] == NO)
+ {
+ NSWarnMLog(@"attempt to access button flags 2 for NON-NSButtonCell based
class");
+ }
+ else
+ {
+ GSButtonCellFlags2Union mask = { { 0 } };
+ NSDictionary *attributes = [element attributes];
+ NSString *bezelStyle = [attributes
objectForKey:@"bezelStyle"];
+ NSString *imageScaling = [attributes
objectForKey:@"imageScaling"];
+
+ if (bezelStyle)
+ {
+ uint32_t flag = NSRegularSquareBezelStyle; // Default if not
specified...
+
+ if ([@"rounded" isEqualToString: bezelStyle])
+ flag = NSRoundedBezelStyle;
+ else if ([@"regularSquare" isEqualToString: bezelStyle])
+ flag = NSRegularSquareBezelStyle;
+ else if ([@"disclosure" isEqualToString: bezelStyle])
+ flag = NSDisclosureBezelStyle;
+ else if ([@"shadowlessSquare" isEqualToString: bezelStyle])
+ flag = NSShadowlessSquareBezelStyle;
+ else if ([@"circular" isEqualToString: bezelStyle])
+ flag = NSCircularBezelStyle;
+ else if ([@"texturedSquare" isEqualToString: bezelStyle])
+ flag = NSTexturedSquareBezelStyle;
+ else if ([@"helpButton" isEqualToString: bezelStyle])
+ flag = NSHelpButtonBezelStyle;
+ else if ([@"smallSquare" isEqualToString: bezelStyle])
+ flag = NSSmallSquareBezelStyle;
+ else if ([@"texturedRounded" isEqualToString: bezelStyle])
+ flag = NSTexturedRoundedBezelStyle;
+ else if ([@"roundedRectangle" isEqualToString: bezelStyle])
+ flag = NSRoundRectBezelStyle;
+ else if ([@"roundedRect" isEqualToString: bezelStyle])
+ flag = NSRoundRectBezelStyle;
+ else if ([@"recessed" isEqualToString: bezelStyle])
+ flag = NSRecessedBezelStyle;
+ else if ([@"roundedDisclosure" isEqualToString: bezelStyle])
+ flag = NSRoundedDisclosureBezelStyle;
+ #if 0
+ else if ([@"inline" isEqualToString: bezelStyle])
+ flag = NSInlineBezelStyle; // New value added in Cocoa version???
+ #endif
+ else
+ NSWarnMLog(@"unknown bezelStyle: %@", bezelStyle);
+
+ mask.flags.bezelStyle = (flag & 7);
+ mask.flags.bezelStyle2 = (flag & 8) >> 3;
+ if (flag == 0)
+ NSWarnMLog(@"_bezel_style: %ld", (long)mask.value);
+ }
+
+ // Image scaling...
+ if ([@"axesIndependently" isEqualToString: imageScaling])
+ {
+ mask.flags.imageScaling = 3;
+ }
+ else if ([@"proportionallyDown" isEqualToString: imageScaling])
+ {
+ mask.flags.imageScaling = 2;
+ }
+ else if ([@"proportionallyUpOrDown" isEqualToString: imageScaling])
+ {
+ mask.flags.imageScaling = 1;
+ }
else
- NSWarnMLog(@"unknown bezelStyle: %@", bezelStyle);
-
- mask.flags.bezelStyle = (flag & 7);
- mask.flags.bezelStyle2 = (flag & 8) >> 3;
- if (flag == 0)
- NSWarnMLog(@"_bezel_style: %ld", (long)mask.value);
- }
-
- // Image scaling...
- if ([@"axesIndependently" isEqualToString: imageScaling])
- {
- mask.flags.imageScaling = 3;
- }
- else if ([@"proportionallyDown" isEqualToString: imageScaling])
- {
- mask.flags.imageScaling = 2;
- }
- else if ([@"proportionallyUpOrDown" isEqualToString: imageScaling])
- {
- mask.flags.imageScaling = 1;
- }
- else
- {
- // Warn about unknown image scaling to add later...
- if (imageScaling && [imageScaling length])
- NSWarnMLog(@"unknown image scaling: %@", imageScaling);
- mask.flags.imageScaling = 0;
- }
-
- // keyEquivalentModifierMask...
- mask.flags.keyEquivalentModifierMask = [[self
decodeModifierMaskForElement: element] unsignedIntValue];
-
- // Return value...
- value = [NSNumber numberWithUnsignedInteger: mask.value];
- }
-#if defined(DEBUG_XIB5)
- NSWarnMLog(@"mask: %@", value);
-#endif
+ {
+ // Warn about unknown image scaling to add later...
+ if (imageScaling && [imageScaling length])
+ NSWarnMLog(@"unknown image scaling: %@", imageScaling);
+ mask.flags.imageScaling = 0;
+ }
+
+ // keyEquivalentModifierMask...
+ mask.flags.keyEquivalentModifierMask = [[self
decodeModifierMaskForElement: element] unsignedIntValue];
+
+ // Return value...
+ value = [NSNumber numberWithUnsignedInteger: mask.value];
+ }
return value;
}
Modified: libs/gui/branches/gnustep_testplant_branch/Source/NSButtonCell.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/branches/gnustep_testplant_branch/Source/NSButtonCell.m?rev=40457&r1=40456&r2=40457&view=diff
==============================================================================
--- libs/gui/branches/gnustep_testplant_branch/Source/NSButtonCell.m
(original)
+++ libs/gui/branches/gnustep_testplant_branch/Source/NSButtonCell.m Sat Apr
8 03:02:38 2017
@@ -1840,18 +1840,17 @@
}
if ([aDecoder containsValueForKey: @"NSButtonFlags2"])
{
- unsigned int bFlags2 = [aDecoder decodeIntForKey:
@"NSButtonFlags2"];
- GSButtonCellFlags2 buttonCellFlags2;
- NSUInteger imageScale;
-
- memcpy((void *)&buttonCellFlags2, (void *)&bFlags2, sizeof(struct
_GSButtonCellFlags2));
-
- [self setShowsBorderOnlyWhileMouseInside:
buttonCellFlags2.showsBorderOnlyWhileMouseInside];
- [self setBezelStyle: buttonCellFlags2.bezelStyle |
(buttonCellFlags2.bezelStyle2 << 3)];
- [self setKeyEquivalentModifierMask:
(buttonCellFlags2.keyEquivalentModifierMask &
-
NSDeviceIndependentModifierFlagsMask)];
+ GSButtonCellFlags2Union mask = { { 0 } };
+ NSUInteger imageScale = NSImageScaleNone;
+
+ // Get the button flags 2 value...
+ mask.value = [aDecoder decodeIntForKey: @"NSButtonFlags2"];
+
+ [self setShowsBorderOnlyWhileMouseInside:
mask.flags.showsBorderOnlyWhileMouseInside];
+ [self setBezelStyle: mask.flags.bezelStyle | (mask.flags.bezelStyle2
<< 3)];
+ [self setKeyEquivalentModifierMask:
(mask.flags.keyEquivalentModifierMask & NSDeviceIndependentModifierFlagsMask)];
- switch (buttonCellFlags2.imageScaling)
+ switch (mask.flags.imageScaling)
{
case 3:
imageScale = NSImageScaleAxesIndependently;
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs