From f3e83d3ce5afcce22c4c31dbf36bd094c84658e4 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Sun, 12 Apr 2020 17:18:30 +0200 Subject: MacOS: show print chooser panel as a sheet. --- src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 29 ++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm index afa595f5b..4c6e794f3 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm +++ b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm @@ -91,6 +91,15 @@ Fl_Cocoa_Printer_Driver::~Fl_Cocoa_Printer_Driver(void) { delete driver(); } +@interface print_panel_delegate : NSObject +- (void)printPanelDidEnd:(NSPrintPanel *)printPanel returnCode:(NSInteger)returnCode contextInfo:(NSInteger *)contextInfo; +@end +@implementation print_panel_delegate +- (void)printPanelDidEnd:(NSPrintPanel *)printPanel returnCode:(NSInteger)returnCode contextInfo:(NSInteger *)contextInfo +{ + *contextInfo = returnCode; +} +@end int Fl_Cocoa_Printer_Driver::begin_job (int pagecount, int *frompage, int *topage) //printing using a Quartz graphics context @@ -105,12 +114,20 @@ int Fl_Cocoa_Printer_Driver::begin_job (int pagecount, int *frompage, int *topag NSPrintPanel *panel = [NSPrintPanel printPanel]; //from 10.5 [panel setOptions:NSPrintPanelShowsCopies | NSPrintPanelShowsPageRange | NSPrintPanelShowsPageSetupAccessory]; - NSInteger retval = [panel runModalWithPrintInfo:info];//from 10.5 - if(retval != NSOKButton) { - Fl_Window *w = Fl::first_window(); - if (w) w->show(); - return 1; - } + NSInteger retval = -1; + Fl_Window *top = Fl::first_window(); + NSWindow *main = (top ? (NSWindow*)fl_xid(top->top_window()) : nil); + if (main) { + [panel beginSheetWithPrintInfo:info + modalForWindow:main + delegate:[[[print_panel_delegate alloc] init] autorelease] + didEndSelector:@selector(printPanelDidEnd:returnCode:contextInfo:) + contextInfo:&retval]; + while (retval < 0) Fl::wait(100); + [main makeKeyAndOrderFront:nil]; + } else + retval = [panel runModalWithPrintInfo:info]; //from 10.5 + if (retval != NSOKButton) return 1; printSession = (PMPrintSession)[info PMPrintSession];//from 10.5 pageFormat = (PMPageFormat)[info PMPageFormat];//from 10.5 printSettings = (PMPrintSettings)[info PMPrintSettings];//from 10.5 -- cgit v1.2.3