Message ID | 95F1C5B4-8236-49CC-8001-DAECD69B1298@gmail.com |
---|---|
State | New |
Headers | show |
On 23 September 2015 at 16:06, Programmingkid <programmingkidx@gmail.com> wrote: > Removes the open dialog code that runs when no arguments > are supplied with QEMU. Not everyone needs a hard drive > or cdrom to boot their target. A user might only need to > use their target's bios to do work. With that said, > this patch removes the unneeded open dialog code. > > Signed-off-by: John Arbuckle <programmingkidx@gmail.com> > > --- > Add a dialog box that tells the user to start QEMU from > the commandline instead of the Finder. > > ui/cocoa.m | 66 > ++++++++++++----------------------------------------------- > 1 files changed, 14 insertions(+), 52 deletions(-) > > diff --git a/ui/cocoa.m b/ui/cocoa.m > index 334e6f6..dc8e0f6 100644 > --- a/ui/cocoa.m > +++ b/ui/cocoa.m > @@ -814,7 +814,6 @@ QemuCocoaView *cocoaView; > { > } > - (void)startEmulationWithArgc:(int)argc argv:(char**)argv; > -- (void)openPanelDidEnd:(NSOpenPanel *)sheet > returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; > - (void)doToggleFullScreen:(id)sender; > - (void)toggleFullScreen:(id)sender; > - (void)showQEMUDoc:(id)sender; > @@ -896,27 +895,20 @@ QemuCocoaView *cocoaView; > { > COCOA_DEBUG("QemuCocoaAppController: applicationDidFinishLaunching\n"); > > > > - // Display an open dialog box if no arguments were passed or > - // if qemu was launched from the finder ( the Finder passes "-psn" ) > - if( gArgc <= 1 || strncmp ((char *)gArgv[1], "-psn", 4) == 0) { Here we look at whether we were passed "-psn" as our check for whether we were launched from the Finder... > + // if the user launched QEMU from the Finder > + if(gArgc == 1) { ...but here you have changed the condition. Why? (Also, isn't a simple test on gArgc going to cause us to put up the dialog box even if qemu was started from the command line with no arguments?) thanks -- PMM
On Sep 25, 2015, at 12:09 PM, Peter Maydell wrote: > On 23 September 2015 at 16:06, Programmingkid <programmingkidx@gmail.com> wrote: >> Removes the open dialog code that runs when no arguments >> are supplied with QEMU. Not everyone needs a hard drive >> or cdrom to boot their target. A user might only need to >> use their target's bios to do work. With that said, >> this patch removes the unneeded open dialog code. >> >> Signed-off-by: John Arbuckle <programmingkidx@gmail.com> >> >> --- >> Add a dialog box that tells the user to start QEMU from >> the commandline instead of the Finder. >> >> ui/cocoa.m | 66 >> ++++++++++++----------------------------------------------- >> 1 files changed, 14 insertions(+), 52 deletions(-) >> >> diff --git a/ui/cocoa.m b/ui/cocoa.m >> index 334e6f6..dc8e0f6 100644 >> --- a/ui/cocoa.m >> +++ b/ui/cocoa.m >> @@ -814,7 +814,6 @@ QemuCocoaView *cocoaView; >> { >> } >> - (void)startEmulationWithArgc:(int)argc argv:(char**)argv; >> -- (void)openPanelDidEnd:(NSOpenPanel *)sheet >> returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; >> - (void)doToggleFullScreen:(id)sender; >> - (void)toggleFullScreen:(id)sender; >> - (void)showQEMUDoc:(id)sender; >> @@ -896,27 +895,20 @@ QemuCocoaView *cocoaView; >> { >> COCOA_DEBUG("QemuCocoaAppController: applicationDidFinishLaunching\n"); >> >> >> >> - // Display an open dialog box if no arguments were passed or >> - // if qemu was launched from the finder ( the Finder passes "-psn" ) >> - if( gArgc <= 1 || strncmp ((char *)gArgv[1], "-psn", 4) == 0) { > > Here we look at whether we were passed "-psn" as our check for > whether we were launched from the Finder... > >> + // if the user launched QEMU from the Finder >> + if(gArgc == 1) { > > ...but here you have changed the condition. Why? I will change it back to checking for -psn. > (Also, isn't a simple test on gArgc going to cause us to put up > the dialog box even if qemu was started from the command line with > no arguments?) I suppose you are right. Will make a new patch to fix this problem.
On 25 September 2015 at 09:12, Programmingkid <programmingkidx@gmail.com> wrote: > > On Sep 25, 2015, at 12:09 PM, Peter Maydell wrote: >> (Also, isn't a simple test on gArgc going to cause us to put up >> the dialog box even if qemu was started from the command line with >> no arguments?) > > I suppose you are right. Will make a new patch to fix this problem. Given that that was the problem you were trying to address with these patches in the first place, it would be a good idea to test that your changes do now let you do what you wanted... -- PMM
On Sep 25, 2015, at 12:21 PM, Peter Maydell wrote: > On 25 September 2015 at 09:12, Programmingkid <programmingkidx@gmail.com> wrote: >> >> On Sep 25, 2015, at 12:09 PM, Peter Maydell wrote: >>> (Also, isn't a simple test on gArgc going to cause us to put up >>> the dialog box even if qemu was started from the command line with >>> no arguments?) >> >> I suppose you are right. Will make a new patch to fix this problem. > > Given that that was the problem you were trying to address with > these patches in the first place, it would be a good idea to test > that your changes do now let you do what you wanted... > > -- PMM I don't think Mac OS X adds the -psn argument anymore. It might have in the past, but I don't see any sign of it on Mac OS 10.6. I made a test program and launched it from both the terminal and the Finder. I didn't see the -psn argument. Do you see -psn with this program? #include <stdio.h> int main(int argc, char *argv[]) { int i; printf("argc = %d\n", argc); for(i = 0; i < argc; i++) { printf("arg %d = %s\n", i, argv[i]); } printf("done\n"); return 0; }
On 25 September 2015 at 11:24, Programmingkid <programmingkidx@gmail.com> wrote: > I don't think Mac OS X adds the -psn argument anymore. It might have > in the past, but I don't see any sign of it on Mac OS 10.6. I made > a test program and launched it from both the terminal and the Finder. > I didn't see the -psn argument. Hmm, you're right. Googling suggests that the -psn argument is added only if the program is in an 'application bundle' (ie not just a bare executable). So that means we can't easily distinguish being run from the GUI vs from the command line, which means we don't have a convenient way to check for whether we should bring up that dialog box. I think that brings us back to somewhere near your first patch -- just remove the dialog box code. If anybody is somehow running QEMU in an application bundle they'll let us know that it's broken, I'm sure :-) Sorry for all the back-and-forth on this patch. Can you send out a v3 that goes back to that approach, please? -- PMM
diff --git a/ui/cocoa.m b/ui/cocoa.m index 334e6f6..dc8e0f6 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -814,7 +814,6 @@ QemuCocoaView *cocoaView; { } - (void)startEmulationWithArgc:(int)argc argv:(char**)argv; -- (void)openPanelDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; - (void)doToggleFullScreen:(id)sender; - (void)toggleFullScreen:(id)sender; - (void)showQEMUDoc:(id)sender; @@ -896,27 +895,20 @@ QemuCocoaView *cocoaView; { COCOA_DEBUG("QemuCocoaAppController: applicationDidFinishLaunching\n"); - // Display an open dialog box if no arguments were passed or - // if qemu was launched from the finder ( the Finder passes "-psn" ) - if( gArgc <= 1 || strncmp ((char *)gArgv[1], "-psn", 4) == 0) { - NSOpenPanel *op = [[NSOpenPanel alloc] init]; - [op setPrompt:@"Boot image"]; - [op setMessage:@"Select the disk image you want to boot.\n\nHit the \"Cancel\" button to quit"]; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - [op setAllowedFileTypes:supportedImageFileTypes]; - [op beginSheetModalForWindow:normalWindow - completionHandler:^(NSInteger returnCode) - { [self openPanelDidEnd:op - returnCode:returnCode contextInfo:NULL ]; } ]; -#else - // Compatibility code for pre-10.6, using deprecated method - [op beginSheetForDirectory:nil file:nil types:filetypes - modalForWindow:normalWindow modalDelegate:self - didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; -#endif - } else { - // or launch QEMU, with the global args - [self startEmulationWithArgc:gArgc argv:(char **)gArgv]; + // if the user launched QEMU from the Finder + if(gArgc == 1) { + NSAlert *alert = [NSAlert new]; + [alert autorelease]; + [alert setMessageText: @"Please start QEMU from the command line with" + " appropriate arguments"]; + [alert addButtonWithTitle: @"Quit"]; + [alert addButtonWithTitle: @"Continue"]; + if([alert runModal] == NSAlertFirstButtonReturn) { + [NSApp terminate: self]; + } else { + // launch QEMU, with the global args + [self startEmulationWithArgc:gArgc argv:(char **)gArgv]; + } } } @@ -942,36 +934,6 @@ QemuCocoaView *cocoaView; exit(status); } -- (void)openPanelDidEnd:(NSOpenPanel *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo -{ - COCOA_DEBUG("QemuCocoaAppController: openPanelDidEnd\n"); - - /* The NSFileHandlingPanelOKButton/NSFileHandlingPanelCancelButton values for - * returnCode strictly only apply for the 10.6-and-up beginSheetModalForWindow - * API. For the legacy pre-10.6 beginSheetForDirectory API they are NSOKButton - * and NSCancelButton. However conveniently the values are the same. - * We use the non-legacy names because the others are deprecated in OSX 10.10. - */ - if (returnCode == NSFileHandlingPanelCancelButton) { - exit(0); - } else if (returnCode == NSFileHandlingPanelOKButton) { - char *img = (char*)[ [ [ sheet URL ] path ] cStringUsingEncoding:NSASCIIStringEncoding]; - - char **argv = g_new(char *, 4); - - [sheet close]; - - argv[0] = g_strdup(gArgv[0]); - argv[1] = g_strdup("-hda"); - argv[2] = g_strdup(img); - argv[3] = NULL; - - // printf("Using argc %d argv %s -hda %s\n", 3, gArgv[0], img); - - [self startEmulationWithArgc:3 argv:(char**)argv]; - } -} - /* We abstract the method called by the Enter Fullscreen menu item * because Mac OS 10.7 and higher disables it. This is because of the * menu item's old selector's name toggleFullScreen:
Removes the open dialog code that runs when no arguments are supplied with QEMU. Not everyone needs a hard drive or cdrom to boot their target. A user might only need to use their target's bios to do work. With that said, this patch removes the unneeded open dialog code. Signed-off-by: John Arbuckle <programmingkidx@gmail.com> --- Add a dialog box that tells the user to start QEMU from the commandline instead of the Finder. ui/cocoa.m | 66 ++++++++++++----------------------------------------------- 1 files changed, 14 insertions(+), 52 deletions(-)