From patchwork Fri Jul 29 15:16:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Programmingkid X-Patchwork-Id: 654137 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3s1C626Pqhz9sDG for ; Sat, 30 Jul 2016 01:18:01 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=n5cE99iD; dkim-atps=neutral Received: from localhost ([::1]:60087 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bT9Xy-0003r8-UL for incoming@patchwork.ozlabs.org; Fri, 29 Jul 2016 11:17:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47769) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bT9XH-0003V5-7q for qemu-devel@nongnu.org; Fri, 29 Jul 2016 11:17:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bT9X7-0006Ix-0Y for qemu-devel@nongnu.org; Fri, 29 Jul 2016 11:17:15 -0400 Received: from mail-it0-x243.google.com ([2607:f8b0:4001:c0b::243]:36456) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bT9Wy-0006GE-Rh for qemu-devel@nongnu.org; Fri, 29 Jul 2016 11:17:04 -0400 Received: by mail-it0-x243.google.com with SMTP id j124so7271170ith.3 for ; Fri, 29 Jul 2016 08:16:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:content-transfer-encoding:subject:date:message-id:cc:to :mime-version; bh=LcIGz2I2oOO9lPf/7AmAZ1d6MNXRod5pNucNAyDYvLk=; b=n5cE99iD9pzYsYJTRbWlHgw2OohORbfjRve0cY/Oxh6bVsPny8rD2MbjIZtMFAsMEm HC0Bi8wAE3y44XRJFkgZdKUgJ26qSlT0VvfQz0RTce4LiqJJ9sSDOTXA31ulv52f5kqx g8clPMNxkIZOUkCsfgd8wRRbho16pdeoJHXEFARmpNxcQKW2wvx2UTF9oaV+Gkq7uqNs QiOzt0yeETceuxbMhT3b30RoY3w0Zt72teVEAzNAT03BYmOSSRN0R0YLsvL/1gnp3HKY 0j7Q15MYfY9WCLg6r17FhhSKyGLTZnx4MDmZ91v7NQ7H/SqBfLksx0cCLWu7v3j03CjN rrfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:content-transfer-encoding:subject:date :message-id:cc:to:mime-version; bh=LcIGz2I2oOO9lPf/7AmAZ1d6MNXRod5pNucNAyDYvLk=; b=fNzX3tpzIcRjcaZPVTuBCtoCPE40WayalncYWCGGvKqdYJXR/S/BUefDwRquOoSJPG tai8Jin6n6DTa8aPNjx7FGBrj6kERxNkOdKA+1Ucy0OwNKCWEeU8Jj2hqyZjq8Kfp6SO Cn4tU+kLFLZsohi7ljCVKOGScXOSY7WXXRju1H4Nksghi+UpWu6bO8Yd7sPWno3D3szi rkWaW4AJTU5nLwwH1e5w/Rstobsv8e2DYViTE4Uq5ZoKSZsRaZuFj3pasuta8upKWEnC 0VYNkzS/T0q3hpiYmzQQ0Pd9dRMeKraRP3MIGp7txTGXV6WeXn53KQFC3zppqEWeOKs/ 3ETA== X-Gm-Message-State: AEkoousnAh1fABDw4hhHQcbxJhDf9UbhPkSZj0EoDxqNP3CpQBMN5OgVdEjkWpqeSyW4Vw== X-Received: by 10.36.200.134 with SMTP id w128mr47024057itf.92.1469805414834; Fri, 29 Jul 2016 08:16:54 -0700 (PDT) Received: from [192.168.0.6] (d199-74-164-53.col.wideopenwest.com. [74.199.53.164]) by smtp.gmail.com with ESMTPSA id w138sm1513702itc.8.2016.07.29.08.16.51 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jul 2016 08:16:53 -0700 (PDT) From: Programmingkid Date: Fri, 29 Jul 2016 11:16:49 -0400 Message-Id: <5F2AE1F2-649D-47EB-B8B9-22A75F88C209@gmail.com> To: Peter Maydell Mime-Version: 1.0 (Apple Message framework v1084) X-Mailer: Apple Mail (2.1084) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:4001:c0b::243 Subject: [Qemu-devel] [PATCH v3] ui/cocoa.m: Make a better about dialog X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel qemu-devel Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "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 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..e17401b 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -34,6 +34,7 @@ #include "qmp-commands.h" #include "sysemu/blockdev.h" #include +#include "qemu-version.h" #ifndef MAC_OS_X_VERSION_10_5 #define MAC_OS_X_VERSION_10_5 1050 @@ -63,7 +64,7 @@ typedef struct { int bitsPerPixel; } QEMUScreen; -NSWindow *normalWindow; +NSWindow *normalWindow, *about_window; static DisplayChangeListener *dcl; static int last_buttons; @@ -670,7 +671,9 @@ QemuCocoaView *cocoaView; case NSLeftMouseUp: mouse_event = 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 @implementation QemuCocoaAppController @@ -876,6 +881,7 @@ QemuCocoaView *cocoaView; supportedImageFileTypes = [NSArray arrayWithObjects: @"img", @"iso", @"dmg", @"qcow", @"qcow2", @"cloop", @"vmdk", @"cdr", nil]; + [self make_about_window]; } return self; } @@ -1138,6 +1144,101 @@ QemuCocoaView *cocoaView; } } +/* 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 = 0, y = 0, about_width = 400, about_height = 200; + NSRect window_rect = NSMakeRect(x, y, about_width, about_height); + about_window = [[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 = [about_window contentView]; + + /* Create the dimensions of the picture */ + int picture_width = 80, picture_height = 80; + x = (about_width - picture_width)/2; + y = about_height - picture_height - 10; + NSRect picture_rect = NSMakeRect(x, y, picture_width, picture_height); + + /* Get the path to the QEMU binary */ + NSString *binary_name = [NSString stringWithCString: gArgv[0] + encoding: NSASCIIStringEncoding]; + binary_name = [binary_name lastPathComponent]; + NSString *program_path = [[NSString alloc] initWithFormat: @"%@/%@", + [[NSBundle mainBundle] bundlePath], binary_name]; + + /* Make the picture of QEMU */ + NSImageView *picture_view = [[NSImageView alloc] initWithFrame: + picture_rect]; + NSImage *qemu_image = [[NSWorkspace sharedWorkspace] iconForFile: + program_path]; + [picture_view setImage: qemu_image]; + [picture_view setImageScaling: NSScaleToFit]; + [superView addSubview: picture_view]; + + /* Make the name label */ + x = 0; + y = y - 25; + int name_width = about_width, name_height = 20; + NSRect name_rect = NSMakeRect(x, y, name_width, name_height); + NSTextField *name_label = [[NSTextField alloc] initWithFrame: name_rect]; + [name_label setEditable: NO]; + [name_label setBezeled: NO]; + [name_label setDrawsBackground: NO]; + [name_label setAlignment: NSCenterTextAlignment]; + NSString *qemu_name = [[NSString alloc] initWithCString: gArgv[0] + encoding: NSASCIIStringEncoding]; + qemu_name = [qemu_name lastPathComponent]; + [name_label setStringValue: qemu_name]; + [superView addSubview: name_label]; + + /* Set the version label's attributes */ + x = 0; + y = 50; + int version_width = about_width, version_height = 20; + NSRect version_rect = NSMakeRect(x, y, version_width, version_height); + NSTextField *version_label = [[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 = [[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 = 0; + y = 35; + int copyright_width = about_width, copyright_height = 20; + NSRect copyright_rect = NSMakeRect(x, y, copyright_width, copyright_height); + NSTextField *copyright_label = [[NSTextField alloc] initWithFrame: + copyright_rect]; + [copyright_label setEditable: NO]; + [copyright_label setBezeled: NO]; + [copyright_label setDrawsBackground: NO]; + [copyright_label setAlignment: NSCenterTextAlignment]; + [copyright_label setStringValue: + @"Copyright (c) 2003-2008 Fabrice Bellard"]; + [superView addSubview: copyright_label]; +} + @end @@ -1185,7 +1286,7 @@ int main (int argc, const char * argv[]) { // Application menu menu = [[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 = (NSMenuItem *)[menu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; // Hide Others