From 27d42146baf52cd8346f7c24d2cb88b09c1618d7 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Mon, 18 Dec 2023 22:41:15 +0200 Subject: [PATCH] Fix compatibility with Catalina and older versions of macOS, improve printer UI --- Cocoa/Document.m | 14 +++++++++++--- Cocoa/Document.xib | 19 +++++++++++++------ Cocoa/NSToolbarItem+NoOverflow.m | 24 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 Cocoa/NSToolbarItem+NoOverflow.m diff --git a/Cocoa/Document.m b/Cocoa/Document.m index 144d0797e..b27b0a3b6 100644 --- a/Cocoa/Document.m +++ b/Cocoa/Document.m @@ -783,16 +783,22 @@ static unsigned *multiplication_table_for_frequency(unsigned frequency) if (@available(macOS 11.0, *)) { self.memoryWindow.toolbarStyle = NSWindowToolbarStyleExpanded; self.printerFeedWindow.toolbarStyle = NSWindowToolbarStyleUnifiedCompact; - self.printerFeedWindow.toolbar.items[0].image = + self.printerFeedWindow.toolbar.items[1].image = [NSImage imageWithSystemSymbolName:@"square.and.arrow.down" accessibilityDescription:@"Save"]; - self.printerFeedWindow.toolbar.items[1].image = + self.printerFeedWindow.toolbar.items[2].image = [NSImage imageWithSystemSymbolName:@"printer" accessibilityDescription:@"Print"]; - self.printerFeedWindow.toolbar.items[0].bordered = false; self.printerFeedWindow.toolbar.items[1].bordered = false; + self.printerFeedWindow.toolbar.items[2].bordered = false; } else { + NSToolbarItem *spinner = self.printerFeedWindow.toolbar.items[0]; + [self.printerFeedWindow.toolbar removeItemAtIndex:0]; + [self.printerFeedWindow.toolbar insertItemWithItemIdentifier:spinner.itemIdentifier atIndex:2]; + [self.printerFeedWindow.toolbar removeItemAtIndex:1]; + [self.printerFeedWindow.toolbar insertItemWithItemIdentifier:NSToolbarPrintItemIdentifier + atIndex:1]; [self.printerFeedWindow.toolbar insertItemWithItemIdentifier:NSToolbarFlexibleSpaceItemIdentifier atIndex:2]; } @@ -2239,9 +2245,11 @@ enum GBWindowResizeAction height:_currentPrinterImageData.length / 160 / sizeof(imageBytes[0]) scale:2.0]; NSRect frame = self.printerFeedWindow.frame; + double oldHeight = frame.size.height; frame.size = self.feedImageView.image.size; [self.printerFeedWindow setContentMaxSize:frame.size]; frame.size.height += self.printerFeedWindow.frame.size.height - self.printerFeedWindow.contentView.frame.size.height; + frame.origin.y -= frame.size.height - oldHeight; [self.printerFeedWindow setFrame:frame display:false animate: self.printerFeedWindow.isVisible]; [self.printerFeedWindow orderFront:NULL]; }); diff --git a/Cocoa/Document.xib b/Cocoa/Document.xib index 39e398dac..855b56fb1 100644 --- a/Cocoa/Document.xib +++ b/Cocoa/Document.xib @@ -694,21 +694,27 @@ - + + + + + + + - + - - + + - - + + @@ -972,5 +978,6 @@ + diff --git a/Cocoa/NSToolbarItem+NoOverflow.m b/Cocoa/NSToolbarItem+NoOverflow.m new file mode 100644 index 000000000..d5864bd9f --- /dev/null +++ b/Cocoa/NSToolbarItem+NoOverflow.m @@ -0,0 +1,24 @@ +#import +#import + +static id nop(id self, SEL _cmd) +{ + return nil; +} + +static double blah(id self, SEL _cmd) +{ + return 80.0; +} + +@implementation NSToolbarItem (NoOverflow) + ++ (void)load +{ + // Prevent collapsing toolbar items into menu items, they don't work in that form + method_setImplementation(class_getInstanceMethod(self, @selector(menuFormRepresentation)), (IMP)nop); + // Prevent over-agressive collapsing of the Printer Feed menu + method_setImplementation(class_getInstanceMethod(NSClassFromString(@"NSToolbarTitleView"), @selector(minSize)), (IMP)blah); +} + +@end