diff --git a/Cocoa/Document.xib b/Cocoa/Document.xib index c237073..db6e96c 100644 --- a/Cocoa/Document.xib +++ b/Cocoa/Document.xib @@ -162,7 +162,7 @@ - + diff --git a/Cocoa/GBToolbarFieldCell.h b/Cocoa/GBToolbarFieldCell.h new file mode 100644 index 0000000..e33398a --- /dev/null +++ b/Cocoa/GBToolbarFieldCell.h @@ -0,0 +1,5 @@ +#import + +@interface GBToolbarFieldCell : NSSearchFieldCell + +@end diff --git a/Cocoa/GBToolbarFieldCell.m b/Cocoa/GBToolbarFieldCell.m new file mode 100644 index 0000000..a58e9d3 --- /dev/null +++ b/Cocoa/GBToolbarFieldCell.m @@ -0,0 +1,23 @@ +#import "GBToolbarFieldCell.h" +#import + +@interface NSTextFieldCell() +- (void)textDidChange:(id)sender; +@end + +@implementation GBToolbarFieldCell + +- (void)textDidChange:(id)sender +{ + IMP imp = [NSTextFieldCell instanceMethodForSelector:_cmd]; + method_setImplementation(class_getInstanceMethod([GBToolbarFieldCell class], _cmd), imp); + ((void(*)(id, SEL, id))imp)(self, _cmd, sender); +} + +- (void)endEditing:(NSText *)textObj +{ + IMP imp = [NSTextFieldCell instanceMethodForSelector:_cmd]; + method_setImplementation(class_getInstanceMethod([GBToolbarFieldCell class], _cmd), imp); + ((void(*)(id, SEL, id))imp)(self, _cmd, textObj); +} +@end diff --git a/Cocoa/NSControl+SolariumFixer.m b/Cocoa/SolariumFixer.m similarity index 74% rename from Cocoa/NSControl+SolariumFixer.m rename to Cocoa/SolariumFixer.m index 0e8c415..079bc22 100644 --- a/Cocoa/NSControl+SolariumFixer.m +++ b/Cocoa/SolariumFixer.m @@ -1,7 +1,7 @@ #import #import -// Uncomment to debug +// Comment out to debug #define NSLog(...) // Solarium has weird proportions, we need to fix them. @@ -106,3 +106,51 @@ } @end + +@implementation NSToolbarItem (SolariumFixer) + +- (void)awakeFromNib +{ + if (@available(macOS 26.0, *)) { + NSLog(@"Toolbar item %@ has view %@", self.label, self.view); + if ([self.view isKindOfClass:[NSTextField class]]) { + NSLog(@"Handling (Text field)"); + self.bordered = true; + + NSSize maxSize = self.maxSize; + maxSize.height = 36; + self.maxSize = maxSize; + + NSSize minSize = self.minSize; + minSize.height = 36; + self.minSize = minSize; + + ((NSTextField *)self.view).backgroundColor = [NSColor clearColor]; + ((NSTextField *)self.view).bezeled = false; + ((NSTextField *)self.view).bordered = true; + + // Work around even more AppKit bugs + self.toolbar.displayMode++; + self.toolbar.displayMode--; + } + else if ([self.view isKindOfClass:[NSPopUpButton class]]) { + NSLog(@"Handling (Pop up button)"); + self.bordered = true; + + NSSize maxSize = self.maxSize; + maxSize.height = 28; + self.maxSize = maxSize; + + NSSize minSize = self.minSize; + minSize.height = 28; + self.minSize = minSize; + } + } + else if (@available(macOS 11.0, *)) { // While at it, make macOS 11-15 a bit more consistent + if ([self.view isKindOfClass:[NSTextField class]]) { + ((NSTextField *)self.view).bezelStyle = NSTextFieldRoundedBezel; + } + } +} + +@end diff --git a/HexFiend/HFController.m b/HexFiend/HFController.m index 9d4b1ae..1bb2057 100644 --- a/HexFiend/HFController.m +++ b/HexFiend/HFController.m @@ -473,7 +473,7 @@ static inline Class preferredByteArrayClass(void) { } - (void)_setSingleSelectedContentsRange:(HFRange)newSelection { - HFASSERT(HFRangeIsSubrangeOfRange(newSelection, HFRangeMake(0, [self contentsLength]))); + if (!HFRangeIsSubrangeOfRange(newSelection, HFRangeMake(0, [self contentsLength]))) return; BOOL selectionChanged; if ([selectedContentsRanges count] == 1) { selectionChanged = ! HFRangeEqualsRange([selectedContentsRanges[0] HFRange], newSelection);