diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-04-12 17:18:30 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2020-04-12 17:18:44 +0200 |
| commit | f3e83d3ce5afcce22c4c31dbf36bd094c84658e4 (patch) | |
| tree | 921dc8ea8b323ac6d0af441657efe00b2ac02e50 /src | |
| parent | 6a01871f32a3e68cb4b8c212acf347e31d41e95e (diff) | |
MacOS: show print chooser panel as a sheet.
Diffstat (limited to 'src')
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 29 |
1 files changed, 23 insertions, 6 deletions
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 |
