On 7 March 2016 at 16:03, Programmingkid <programmingk...@gmail.com> wrote: > Make the help menus actually work. The code will search thru three different > locations for the help file. If it can't be found, it will look on the web for > it. > > Signed-off-by: John Arbuckle <programmingk...@gmail.com> > > --- > Moved opening code to one method. > Searches three different locations on the user's computer first. > Attempts to open file on web if file can't be found on user's computer. > > ui/cocoa.m | 37 +++++++++++++++++++++++++++++++++---- > 1 file changed, 33 insertions(+), 4 deletions(-) > > diff --git a/ui/cocoa.m b/ui/cocoa.m > index 3ee5549..66f0f79 100644 > --- a/ui/cocoa.m > +++ b/ui/cocoa.m > @@ -858,6 +858,7 @@ QemuCocoaView *cocoaView; > - (void)ejectDeviceMedia:(id)sender; > - (void)changeDeviceMedia:(id)sender; > - (BOOL)verifyQuit; > +- (void)openDocumentation:(NSString *)filename; > @end > > @implementation QemuCocoaAppController > @@ -994,20 +995,48 @@ QemuCocoaView *cocoaView; > [cocoaView toggleFullScreen:sender]; > } > > +/* Tries to find then open the specified filename */ > +- (void) openDocumentation: (NSString *) filename > +{ > + /* Where to look for local files */ > + NSString *path_array[] = {@"../share/doc/qemu/", @"../doc/qemu/", > @"../"}; > + NSString *full_file_path; > + const int number_of_paths = 3;
You should be able to use ARRAY_SIZE(path_array) here, you don't need to hard code the 3. > + > + /* iterate thru the possible paths until the file is found */ > + int index; > + for (index = 0; index < number_of_paths; index++) { > + full_file_path = [[NSBundle mainBundle] executablePath]; > + full_file_path = [full_file_path stringByDeletingLastPathComponent]; > + full_file_path = [NSString stringWithFormat: @"%@/%@%@", > full_file_path, > + path_array[index], filename]; > + if ([[NSWorkspace sharedWorkspace] openFile: full_file_path] == YES) > { > + return; > + } > + } > + > + /* Try to open the file on the web if possible */ > + full_file_path = [NSString stringWithFormat: @"%s%@", > + "http://qemu.weilnetz.de/", filename]; None of our other UI frontends try to look up the docs on the web. If we do want to do this we should be using a qemu-project.org URL, ie one we control directly as a project. Plus there's no versioning here so it will show the docs for the latest version even if you're running an old QEMU. Adding a URL lookup should be a different patch if you want to do it, but I don't think it is worth the effort of maintaining versioned documentation on the web for all future QEMU releases, when the local files should be right there anyway. > + NSURL *url = [NSURL URLWithString: full_file_path]; > + if ([[NSWorkspace sharedWorkspace] openURL: url] == NO) { > + NSBeep(); > + QEMU_Alert(@"Failed to open file"); > + } > +} > + > - (void)showQEMUDoc:(id)sender > { > COCOA_DEBUG("QemuCocoaAppController: showQEMUDoc\n"); > > - [[NSWorkspace sharedWorkspace] openFile:[NSString > stringWithFormat:@"%@/../doc/qemu/qemu-doc.html", > - [[NSBundle mainBundle] resourcePath]] withApplication:@"Help > Viewer"]; > + [self openDocumentation: @"qemu-doc.html"]; > } > > - (void)showQEMUTec:(id)sender > { > COCOA_DEBUG("QemuCocoaAppController: showQEMUTec\n"); > > - [[NSWorkspace sharedWorkspace] openFile:[NSString > stringWithFormat:@"%@/../doc/qemu/qemu-tech.html", > - [[NSBundle mainBundle] resourcePath]] withApplication:@"Help > Viewer"]; > + [self openDocumentation: @"qemu-tech.html"]; > } > > /* Stretches video to fit host monitor size */ thanks -- PMM