qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] PATCH] ui/cocoa.m: verify with user before quitting QEM


From: Peter Maydell
Subject: Re: [Qemu-devel] PATCH] ui/cocoa.m: verify with user before quitting QEMU
Date: Sun, 20 Sep 2015 13:21:30 +0100

On 19 September 2015 at 00:20, Programmingkid <address@hidden> wrote:
> This patch prevents the user from accidentally quitting QEMU by pushing
> Command-Q or by pushing the close button on the main window. When the user
> does
> one of these two things, a dialog box appears verifying with the user if he
> wants to quit QEMU.

"if they want to" -- our users are not exclusively male :-)

> Signed-off-by: John Arbuckle <address@hidden>
>
> ---
>  ui/cocoa.m |   22 +++++++++++++++++++++-
>  1 files changed, 21 insertions(+), 1 deletions(-)
>
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index 334e6f6..ff1a72b 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -829,6 +829,7 @@ QemuCocoaView *cocoaView;
>  - (void)powerDownQEMU:(id)sender;
>  - (void)ejectDeviceMedia:(id)sender;
>  - (void)changeDeviceMedia:(id)sender;
> +- (void)verifyQuit;
>  @end
>
>
>
>  @implementation QemuCocoaAppController
> @@ -862,6 +863,7 @@ QemuCocoaView *cocoaView;
>  #endif
>          [normalWindow makeKeyAndOrderFront:self];
>          [normalWindow center];
> +        [normalWindow setDelegate: self];
>          stretch_video = false;
>
>
>
>          /* Used for displaying pause on the screen */
> @@ -933,6 +935,13 @@ QemuCocoaView *cocoaView;
>      return YES;
>  }
>
>
>
> +/* Called when the user clicks on a window's close button */
> +- (BOOL)windowShouldClose:(id)sender
> +{
> +    [self verifyQuit];
> +    return NO;
> +}
> +
>  - (void)startEmulationWithArgc:(int)argc argv:(char**)argv
>  {
>      COCOA_DEBUG("QemuCocoaAppController: startEmulationWithArgc\n");
> @@ -1125,6 +1134,16 @@ QemuCocoaView *cocoaView;
>      }
>  }
>
>
>
> +/* Verifies if the user really wants to quit */
> +- (void)verifyQuit
> +{
> +    NSInteger response;
> +    response = NSRunAlertPanel(@"Quit?", @"Are you sure you want to quit?",
> +                                                       @"Cancel", @"Quit",
> nil);
> +    if(response == NSAlertAlternateReturn)
> +        exit(EXIT_SUCCESS);

Missing braces. Checkpatch will warn you about this kind of thing.

Calling exit() here doesn't really seem right to me -- I think we
should return the "OK to terminate app/close this window"
response to the OSX framework and let it cause us to exit in
the normal way.

> +}
> +
>  @end
>
>
>
>
>
> @@ -1178,7 +1197,8 @@ int main (int argc, const char * argv[]) {
>      [menuItem
> setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
>      [menu addItemWithTitle:@"Show All"
> action:@selector(unhideAllApplications:) keyEquivalent:@""]; // Show All
>      [menu addItem:[NSMenuItem separatorItem]]; //Separator
> -    [menu addItemWithTitle:@"Quit QEMU" action:@selector(terminate:)
> keyEquivalent:@"q"];
> +    [menu addItemWithTitle:@"Quit QEMU" action:@selector(verifyQuit)

Should we be doing this by implementing
NSApplication:applicationShouldTerminate?
That seems to be where the OSX framework expects us to handle
"do you really want to do this" as part of the standard terminate:
flow.

> +
> keyEquivalent:@"q"];
>      menuItem = [[NSMenuItem alloc] initWithTitle:@"Apple" action:nil
> keyEquivalent:@""];
>      [menuItem setSubmenu:menu];
>      [[NSApp mainMenu] addItem:menuItem];

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]