From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47972) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bZTqU-0006DP-Gg for qemu-devel@nongnu.org; Mon, 15 Aug 2016 22:11:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bZTqQ-0006dd-5U for qemu-devel@nongnu.org; Mon, 15 Aug 2016 22:11:13 -0400 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]:36008) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bZTqP-0006dZ-UE for qemu-devel@nongnu.org; Mon, 15 Aug 2016 22:11:10 -0400 Received: by mail-io0-x243.google.com with SMTP id y34so6890867ioi.3 for ; Mon, 15 Aug 2016 19:11:09 -0700 (PDT) From: Programmingkid Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Date: Mon, 15 Aug 2016 22:11:06 -0400 Message-Id: Mime-Version: 1.0 (Apple Message framework v1084) Subject: [Qemu-devel] [PATCH v4] ui/cocoa.m: Make a better about dialog List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: qemu-devel qemu-devel The about dialog in QEMU on Mac OS X is very plain and unhelpful. This = patch makes the about dialog look a lot better and have some descriptive = information on what version of QEMU the user is running. Signed-off-by: John Arbuckle --- version 4 changes: Moved qemu-version.h include above Carbon.h include. Replaced NSScaleToFit with NSImageScaleProportionallyUpOrDown. Removed space between QEMU_VERSION and QEMU_PKGVERSION text. Used QEMU_COPYRIGHT in place of text copyright. version 3 changes: Removed buffer related code version 2 changes: Added QEMU version to the version label ui/cocoa.m | 107 = +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 3 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index 36c6bf0..52d9c54 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -33,6 +33,7 @@ #include "sysemu/sysemu.h" #include "qmp-commands.h" #include "sysemu/blockdev.h" +#include "qemu-version.h" #include =20 #ifndef MAC_OS_X_VERSION_10_5 @@ -63,7 +64,7 @@ typedef struct { int bitsPerPixel; } QEMUScreen; =20 -NSWindow *normalWindow; +NSWindow *normalWindow, *about_window; static DisplayChangeListener *dcl; static int last_buttons; =20 @@ -670,7 +671,9 @@ QemuCocoaView *cocoaView; case NSLeftMouseUp: mouse_event =3D true; if (!isMouseGrabbed && [self screenContainsPoint:p]) { - [self grabMouse]; + if([[self window] isKeyWindow]) { + [self grabMouse]; + } } break; case NSRightMouseUp: @@ -824,6 +827,8 @@ QemuCocoaView *cocoaView; - (void)changeDeviceMedia:(id)sender; - (BOOL)verifyQuit; - (void)openDocumentation:(NSString *)filename; +- (IBAction) do_about_menu_item: (id) sender; +- (void)make_about_window; @end =20 @implementation QemuCocoaAppController @@ -876,6 +881,7 @@ QemuCocoaView *cocoaView; supportedImageFileTypes =3D [NSArray arrayWithObjects: @"img", = @"iso", @"dmg", @"qcow", @"qcow2", @"cloop", @"vmdk", = @"cdr", nil]; + [self make_about_window]; } return self; } @@ -1138,6 +1144,101 @@ QemuCocoaView *cocoaView; } } =20 +/* The action method for the About menu item */ +- (IBAction) do_about_menu_item: (id) sender +{ + [about_window makeKeyAndOrderFront: nil]; +} + +/* Create and display the about dialog */ +- (void)make_about_window +{ + /* Make the window */ + int x =3D 0, y =3D 0, about_width =3D 400, about_height =3D 200; + NSRect window_rect =3D NSMakeRect(x, y, about_width, about_height); + about_window =3D [[NSWindow alloc] initWithContentRect:window_rect + styleMask:NSTitledWindowMask | NSClosableWindowMask = | + NSMiniaturizableWindowMask + backing:NSBackingStoreBuffered + defer:NO]; + [about_window setTitle: @"About"]; + [about_window setReleasedWhenClosed: NO]; + [about_window center]; + NSView *superView =3D [about_window contentView]; + + /* Create the dimensions of the picture */ + int picture_width =3D 80, picture_height =3D 80; + x =3D (about_width - picture_width)/2; + y =3D about_height - picture_height - 10; + NSRect picture_rect =3D NSMakeRect(x, y, picture_width, = picture_height); + + /* Get the path to the QEMU binary */ + NSString *binary_name =3D [NSString stringWithCString: gArgv[0] + encoding: NSASCIIStringEncoding]; + binary_name =3D [binary_name lastPathComponent]; + NSString *program_path =3D [[NSString alloc] initWithFormat: = @"%@/%@", + [[NSBundle mainBundle] bundlePath], binary_name]; + + /* Make the picture of QEMU */ + NSImageView *picture_view =3D [[NSImageView alloc] initWithFrame: + picture_rect]; + NSImage *qemu_image =3D [[NSWorkspace sharedWorkspace] iconForFile: + program_path]; + [picture_view setImage: qemu_image]; + [picture_view setImageScaling: NSImageScaleProportionallyUpOrDown]; + [superView addSubview: picture_view]; + + /* Make the name label */ + x =3D 0; + y =3D y - 25; + int name_width =3D about_width, name_height =3D 20; + NSRect name_rect =3D NSMakeRect(x, y, name_width, name_height); + NSTextField *name_label =3D [[NSTextField alloc] initWithFrame: = name_rect]; + [name_label setEditable: NO]; + [name_label setBezeled: NO]; + [name_label setDrawsBackground: NO]; + [name_label setAlignment: NSCenterTextAlignment]; + NSString *qemu_name =3D [[NSString alloc] initWithCString: gArgv[0] + encoding: = NSASCIIStringEncoding]; + qemu_name =3D [qemu_name lastPathComponent]; + [name_label setStringValue: qemu_name]; + [superView addSubview: name_label]; + + /* Set the version label's attributes */ + x =3D 0; + y =3D 50; + int version_width =3D about_width, version_height =3D 20; + NSRect version_rect =3D NSMakeRect(x, y, version_width, = version_height); + NSTextField *version_label =3D [[NSTextField alloc] initWithFrame: + version_rect]; + [version_label setEditable: NO]; + [version_label setBezeled: NO]; + [version_label setAlignment: NSCenterTextAlignment]; + [version_label setDrawsBackground: NO]; + + /* Create the version string*/ + NSString *version_string; + version_string =3D [[NSString alloc] initWithFormat: + @"QEMU emulator version %s%s", QEMU_VERSION, QEMU_PKGVERSION]; + [version_label setStringValue: version_string]; + [superView addSubview: version_label]; + + /* Make copyright label */ + x =3D 0; + y =3D 35; + int copyright_width =3D about_width, copyright_height =3D 20; + NSRect copyright_rect =3D NSMakeRect(x, y, copyright_width, = copyright_height); + NSTextField *copyright_label =3D [[NSTextField alloc] = initWithFrame: + = copyright_rect]; + [copyright_label setEditable: NO]; + [copyright_label setBezeled: NO]; + [copyright_label setDrawsBackground: NO]; + [copyright_label setAlignment: NSCenterTextAlignment]; + [copyright_label setStringValue: [NSString stringWithFormat: @"%s", + QEMU_COPYRIGHT]]; + [superView addSubview: copyright_label]; +} + @end =20 =20 @@ -1185,7 +1286,7 @@ int main (int argc, const char * argv[]) { =20 // Application menu menu =3D [[NSMenu alloc] initWithTitle:@""]; - [menu addItemWithTitle:@"About QEMU" = action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; // = About QEMU + [menu addItemWithTitle:@"About QEMU" = action:@selector(do_about_menu_item:) keyEquivalent:@""]; // About QEMU [menu addItem:[NSMenuItem separatorItem]]; //Separator [menu addItemWithTitle:@"Hide QEMU" action:@selector(hide:) = keyEquivalent:@"h"]; //Hide QEMU menuItem =3D (NSMenuItem *)[menu addItemWithTitle:@"Hide Others" = action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; // Hide = Others --=20 2.7.2