ui/cocoa.m: verify with user before quitting QEMU
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 or she wants to quit QEMU. Signed-off-by: John Arbuckle <programmingkidx@gmail.com> Message-id: 29169A74-0347-47F5-934F-A5AD24C225CA@gmail.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									9e071429e6
								
							
						
					
					
						commit
						d9bc14f63e
					
				
							
								
								
									
										39
									
								
								ui/cocoa.m
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								ui/cocoa.m
									
									
									
									
									
								
							@ -809,7 +809,7 @@ QemuCocoaView *cocoaView;
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
@interface QemuCocoaAppController : NSObject
 | 
					@interface QemuCocoaAppController : NSObject
 | 
				
			||||||
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
 | 
					#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
 | 
				
			||||||
                                             <NSApplicationDelegate>
 | 
					                                       <NSWindowDelegate, NSApplicationDelegate>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -829,6 +829,7 @@ QemuCocoaView *cocoaView;
 | 
				
			|||||||
- (void)powerDownQEMU:(id)sender;
 | 
					- (void)powerDownQEMU:(id)sender;
 | 
				
			||||||
- (void)ejectDeviceMedia:(id)sender;
 | 
					- (void)ejectDeviceMedia:(id)sender;
 | 
				
			||||||
- (void)changeDeviceMedia:(id)sender;
 | 
					- (void)changeDeviceMedia:(id)sender;
 | 
				
			||||||
 | 
					- (BOOL)verifyQuit;
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@implementation QemuCocoaAppController
 | 
					@implementation QemuCocoaAppController
 | 
				
			||||||
@ -862,6 +863,7 @@ QemuCocoaView *cocoaView;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
        [normalWindow makeKeyAndOrderFront:self];
 | 
					        [normalWindow makeKeyAndOrderFront:self];
 | 
				
			||||||
        [normalWindow center];
 | 
					        [normalWindow center];
 | 
				
			||||||
 | 
					        [normalWindow setDelegate: self];
 | 
				
			||||||
        stretch_video = false;
 | 
					        stretch_video = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Used for displaying pause on the screen */
 | 
					        /* Used for displaying pause on the screen */
 | 
				
			||||||
@ -933,6 +935,26 @@ QemuCocoaView *cocoaView;
 | 
				
			|||||||
    return YES;
 | 
					    return YES;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (NSApplicationTerminateReply)applicationShouldTerminate:
 | 
				
			||||||
 | 
					                                                         (NSApplication *)sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    COCOA_DEBUG("QemuCocoaAppController: applicationShouldTerminate\n");
 | 
				
			||||||
 | 
					    return [self verifyQuit];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Called when the user clicks on a window's close button */
 | 
				
			||||||
 | 
					- (BOOL)windowShouldClose:(id)sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    COCOA_DEBUG("QemuCocoaAppController: windowShouldClose\n");
 | 
				
			||||||
 | 
					    [NSApp terminate: sender];
 | 
				
			||||||
 | 
					    /* If the user allows the application to quit then the call to
 | 
				
			||||||
 | 
					     * NSApp terminate will never return. If we get here then the user
 | 
				
			||||||
 | 
					     * cancelled the quit, so we should return NO to not permit the
 | 
				
			||||||
 | 
					     * closing of this window.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    return NO;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)startEmulationWithArgc:(int)argc argv:(char**)argv
 | 
					- (void)startEmulationWithArgc:(int)argc argv:(char**)argv
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    COCOA_DEBUG("QemuCocoaAppController: startEmulationWithArgc\n");
 | 
					    COCOA_DEBUG("QemuCocoaAppController: startEmulationWithArgc\n");
 | 
				
			||||||
@ -1125,6 +1147,21 @@ QemuCocoaView *cocoaView;
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Verifies if the user really wants to quit */
 | 
				
			||||||
 | 
					- (BOOL)verifyQuit
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSAlert *alert = [NSAlert new];
 | 
				
			||||||
 | 
					    [alert autorelease];
 | 
				
			||||||
 | 
					    [alert setMessageText: @"Are you sure you want to quit QEMU?"];
 | 
				
			||||||
 | 
					    [alert addButtonWithTitle: @"Cancel"];
 | 
				
			||||||
 | 
					    [alert addButtonWithTitle: @"Quit"];
 | 
				
			||||||
 | 
					    if([alert runModal] == NSAlertSecondButtonReturn) {
 | 
				
			||||||
 | 
					        return YES;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        return NO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user