From patchwork Thu Jul 28 15:01:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Programmingkid X-Patchwork-Id: 653797 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 3s0bfM3Xcwz9t1S for ; Fri, 29 Jul 2016 01:40:27 +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=sXqshC21; dkim-atps=neutral Received: from localhost ([::1]:54023 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bSnQ8-0008Oh-Jt for incoming@patchwork.ozlabs.org; Thu, 28 Jul 2016 11:40:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46177) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bSmoh-0005ED-PY for qemu-devel@nongnu.org; Thu, 28 Jul 2016 11:01:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bSmoc-0005Z2-PT for qemu-devel@nongnu.org; Thu, 28 Jul 2016 11:01:43 -0400 Received: from mail-io0-x242.google.com ([2607:f8b0:4001:c06::242]:33013) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bSmoc-0005Yy-JI for qemu-devel@nongnu.org; Thu, 28 Jul 2016 11:01:38 -0400 Received: by mail-io0-x242.google.com with SMTP id y195so7718020iod.0 for ; Thu, 28 Jul 2016 08:01:38 -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=KDw4h57UauzpCk8xYAN3rq7lMsh73lVYNyEXWMDtIys=; b=sXqshC21V5y8q0LnO7cqSwF2KCCZpl8ePEz25NNyW0YN4oH8mn6/BydngrpOPbK2U+ JEuSVI5mM1xFhK2dSrGbsb+w+tb03m8qFq7uUOzwUgtziyg8ID6LEPjjZz38vuh2GH6q ka8jqGNsGmqH283sfpHnBDxFSKJRsq2B6rrtudD+2KzNDDvUIkchqTakh4zwTjvloq73 T1IfWJukEjwy6y3BPn6xo6Xczz8alrtP3VzpKJy3Vw73nr4tu1+6q7PgrD4ZK5V52X4G PrnR9U1XNHyZebxogHqxYj+Yxwh2N2H92SCxkyq4B5ujwALyi71QTS2hWif67g6c9BiB bxqA== 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=KDw4h57UauzpCk8xYAN3rq7lMsh73lVYNyEXWMDtIys=; b=BgyPbI+1qaS8oLYnA3P5ag6Xj+gjEYRy3t5reeVGWYdgKcIox24hyoON+T2icE58dq GRuki2qe059X/KA0Or+ouJb2ocTXyryuW19IB/Q83EUe8aHEW3Otuz2fLldp5uyYRXe3 1wiFhXj82wBK71eT/Fs6TKwnzlQ2x6A6FAsNiF05WYjTol+GXmaw2C3nWaaio77qtm13 wAofXbAzaGJEgbZiQttK5v/hpWafc6XGPq8ntc/ppayOKB8yUspak4y1n/1Ol/YL8awk OInzpyYOgzpJ3SCQEONnlACKMgx9bQNID4rzGSMgxq5kCJD0nNV44oADRTRloT/GhVYg msAA== X-Gm-Message-State: AEkoouuBj/yh/tgh7mCWwltpVibYNqATmbub2Qo8WlU/rNadhZM3/kOCsVSM4qfLf+qwtA== X-Received: by 10.107.182.8 with SMTP id g8mr37131523iof.53.1469718097819; Thu, 28 Jul 2016 08:01:37 -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 o201sm5136064iod.16.2016.07.28.08.01.33 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jul 2016 08:01:34 -0700 (PDT) From: Programmingkid Date: Thu, 28 Jul 2016 11:01:33 -0400 Message-Id: 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:c06::242 Subject: [Qemu-devel] [PATCH v2] 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 2 changes: Added QEMU version to the version label ui/cocoa.m | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 3 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index 36c6bf0..c6d8824 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,105 @@ 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]; + + /* Format the version output */ + char buffer[100]; + sprintf(buffer, "%s %s", QEMU_VERSION, QEMU_PKGVERSION); + + /* Create the version string*/ + NSString *version_string; + version_string = [[NSString alloc] initWithFormat: + @"QEMU emulator version %s", buffer]; + [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 +1290,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