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

Reply via email to