qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/9] cocoa queue
@ 2014-01-12 22:52 Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 1/9] ui/cocoa: Pass command key through to guest when VM has mousegrab Peter Maydell
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Hi. This is a set of patches for the cocoa UI that have all been
on-list since last month, including the one adding me as a
co-maintainer (with Andreas' agreement).

Please pull.

thanks
-- PMM

The following changes since commit eedc1a5db5e4d941e39e54344322c0b1e89dfdcd:

  Merge remote-tracking branch 'bonzini/scsi-next' into staging (2014-01-10 11:05:17 -0800)

are available in the git repository at:


  git://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-cocoa-20140112

for you to fetch changes up to 30ef3c742526baa7910ab5023f0b85062bd85579:

  MAINTAINERS: add myself as cocoa UI co-maintainer (2014-01-12 22:27:10 +0000)

----------------------------------------------------------------
cocoa queue:
 * pass command key to guest when VM has mousegrab
 * add .qcow2 to extension list for image load dialog
 * fix bugs in code for starting QEMU via image load dialog
 * fix resize/redraw interaction
 * draw window black if guest hasn't sent anything to screen
 * minor style/typo fixes
 * add myself as cocoa co-maintainer

----------------------------------------------------------------
Peter Maydell (9):
      ui/cocoa: Pass command key through to guest when VM has mousegrab
      ui/cocoa: Correct typos in comments and variable names
      ui/cocoa: Send warning message to stderr, not stdout
      ui/cocoa: Add ".qcow2" to extension list for image load dialog
      ui/cocoa: Fix code for starting QEMU via image file load dialog
      ui/cocoa: Redraw at correct size when switching surface
      ui/cocoa: Draw black rectangle if we have no data yet
      ui/cocoa: Remove stray tabs
      MAINTAINERS: add myself as cocoa UI co-maintainer

 MAINTAINERS |   1 +
 ui/cocoa.m  | 100 ++++++++++++++++++++++++++++++++++++++----------------------
 2 files changed, 64 insertions(+), 37 deletions(-)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 1/9] ui/cocoa: Pass command key through to guest when VM has mousegrab
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 2/9] ui/cocoa: Correct typos in comments and variable names Peter Maydell
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

The guest might want to be able to use the command key for its won
purposes (as command if it is MacOS X, or for the Windows key if
it is a PC guest, for instance). In line with other UI frontends,
pass it through if the guest has mousegrab, and only use it for UI
menu accelerators if not grabbed.

Thanks to John Arbuckle for reporting this problem, helping
us work through what the best solution would be and providing
a patch which was the initial inspiration for this one.

Reported-by: John Arbuckle <programmingkidx@gmail.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1386543546-31919-2-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 2524f18..34b58d5 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -129,8 +129,8 @@ int keymap[] =
     14, //  51      0x33    0x0e            BKSP    QZ_BACKSPACE
     0,  //  52      0x34    Undefined
     1,  //  53      0x35    0x01            ESC     QZ_ESCAPE
-    0,  //  54      0x36                            QZ_RMETA
-    0,  //  55      0x37                            QZ_LMETA
+    220, // 54      0x36    0xdc    E0,5C   R GUI   QZ_RMETA
+    219, // 55      0x37    0xdb    E0,5B   L GUI   QZ_LMETA
     42, //  56      0x38    0x2a            L SHFT  QZ_LSHIFT
     58, //  57      0x39    0x3a            CAPS    QZ_CAPSLOCK
     56, //  58      0x3A    0x38            L ALT   QZ_LALT
@@ -206,8 +206,6 @@ int keymap[] =
 
 /* Aditional 104 Key XP-Keyboard Scancodes from http://www.computer-engineering.org/ps2keyboard/scancodes1.html */
 /*
-    219 //          0xdb            e0,5b   L GUI
-    220 //          0xdc            e0,5c   R GUI
     221 //          0xdd            e0,5d   APPS
         //              E0,2A,E0,37         PRNT SCRN
         //              E1,1D,45,E1,9D,C5   PAUSE
@@ -493,6 +491,12 @@ QemuCocoaView *cocoaView;
     switch ([event type]) {
         case NSFlagsChanged:
             keycode = cocoa_keycode_to_qemu([event keyCode]);
+
+            if ((keycode == 219 || keycode == 220) && !isMouseGrabed) {
+              /* Don't pass command key changes to guest unless mouse is grabbed */
+              keycode = 0;
+            }
+
             if (keycode) {
                 if (keycode == 58 || keycode == 69) { // emulate caps lock and num lock keydown and keyup
                     kbd_put_keycode(keycode);
@@ -516,15 +520,15 @@ QemuCocoaView *cocoaView;
             }
             break;
         case NSKeyDown:
+            keycode = cocoa_keycode_to_qemu([event keyCode]);
 
-            // forward command Key Combos
-            if ([event modifierFlags] & NSCommandKeyMask) {
+            // forward command key combos to the host UI unless the mouse is grabbed
+            if (!isMouseGrabed && ([event modifierFlags] & NSCommandKeyMask)) {
                 [NSApp sendEvent:event];
                 return;
             }
 
             // default
-            keycode = cocoa_keycode_to_qemu([event keyCode]);
 
             // handle control + alt Key Combos (ctrl+alt is reserved for QEMU)
             if (([event modifierFlags] & NSControlKeyMask) && ([event modifierFlags] & NSAlternateKeyMask)) {
@@ -580,6 +584,13 @@ QemuCocoaView *cocoaView;
             break;
         case NSKeyUp:
             keycode = cocoa_keycode_to_qemu([event keyCode]);
+
+            // don't pass the guest a spurious key-up if we treated this
+            // command-key combo as a host UI action
+            if (!isMouseGrabed && ([event modifierFlags] & NSCommandKeyMask)) {
+                return;
+            }
+
             if (qemu_console_is_graphic(NULL)) {
                 if (keycode & 0x80)
                     kbd_put_keycode(0xe0);
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 2/9] ui/cocoa: Correct typos in comments and variable names
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 1/9] ui/cocoa: Pass command key through to guest when VM has mousegrab Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 3/9] ui/cocoa: Send warning message to stderr, not stdout Peter Maydell
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Fix various non-user-visible typos in comments and variable names.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Message-id: 1386543546-31919-3-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 34b58d5..1edb944 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -52,7 +52,7 @@
 #define COCOA_MOUSE_EVENT \
         if (isTabletEnabled) { \
             kbd_mouse_event((int)(p.x * 0x7FFF / (screen.width - 1)), (int)((screen.height - p.y) * 0x7FFF / (screen.height - 1)), 0, buttons); \
-        } else if (isMouseGrabed) { \
+        } else if (isMouseGrabbed) { \
             kbd_mouse_event((int)[event deltaX], (int)[event deltaY], 0, buttons); \
         } else { \
             [NSApp sendEvent:event]; \
@@ -204,7 +204,7 @@ int keymap[] =
     200,//  126     0x7E    0xc8    E0,48   U ARROW QZ_UP
 /* completed according to http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/quartz/SDL_QuartzKeys.h?rev=1.6&content-type=text/x-cvsweb-markup */
 
-/* Aditional 104 Key XP-Keyboard Scancodes from http://www.computer-engineering.org/ps2keyboard/scancodes1.html */
+/* Additional 104 Key XP-Keyboard Scancodes from http://www.computer-engineering.org/ps2keyboard/scancodes1.html */
 /*
     221 //          0xdd            e0,5d   APPS
         //              E0,2A,E0,37         PRNT SCRN
@@ -259,7 +259,7 @@ static int cocoa_keycode_to_qemu(int keycode)
     float cx,cy,cw,ch,cdx,cdy;
     CGDataProviderRef dataProviderRef;
     int modifiers_state[256];
-    BOOL isMouseGrabed;
+    BOOL isMouseGrabbed;
     BOOL isFullscreen;
     BOOL isAbsoluteEnabled;
     BOOL isTabletEnabled;
@@ -270,7 +270,7 @@ static int cocoa_keycode_to_qemu(int keycode)
 - (void) toggleFullScreen:(id)sender;
 - (void) handleEvent:(NSEvent *)event;
 - (void) setAbsoluteEnabled:(BOOL)tIsAbsoluteEnabled;
-- (BOOL) isMouseGrabed;
+- (BOOL) isMouseGrabbed;
 - (BOOL) isAbsoluteEnabled;
 - (float) cdx;
 - (float) cdy;
@@ -492,7 +492,7 @@ QemuCocoaView *cocoaView;
         case NSFlagsChanged:
             keycode = cocoa_keycode_to_qemu([event keyCode]);
 
-            if ((keycode == 219 || keycode == 220) && !isMouseGrabed) {
+            if ((keycode == 219 || keycode == 220) && !isMouseGrabbed) {
               /* Don't pass command key changes to guest unless mouse is grabbed */
               keycode = 0;
             }
@@ -523,7 +523,7 @@ QemuCocoaView *cocoaView;
             keycode = cocoa_keycode_to_qemu([event keyCode]);
 
             // forward command key combos to the host UI unless the mouse is grabbed
-            if (!isMouseGrabed && ([event modifierFlags] & NSCommandKeyMask)) {
+            if (!isMouseGrabbed && ([event modifierFlags] & NSCommandKeyMask)) {
                 [NSApp sendEvent:event];
                 return;
             }
@@ -587,7 +587,7 @@ QemuCocoaView *cocoaView;
 
             // don't pass the guest a spurious key-up if we treated this
             // command-key combo as a host UI action
-            if (!isMouseGrabed && ([event modifierFlags] & NSCommandKeyMask)) {
+            if (!isMouseGrabbed && ([event modifierFlags] & NSCommandKeyMask)) {
                 return;
             }
 
@@ -648,7 +648,7 @@ QemuCocoaView *cocoaView;
         case NSLeftMouseUp:
             if (isTabletEnabled) {
                     COCOA_MOUSE_EVENT
-            } else if (!isMouseGrabed) {
+            } else if (!isMouseGrabbed) {
                 if (p.x > -1 && p.x < screen.width && p.y > -1 && p.y < screen.height) {
                     [self grabMouse];
                 } else {
@@ -665,7 +665,7 @@ QemuCocoaView *cocoaView;
             COCOA_MOUSE_EVENT
             break;
         case NSScrollWheel:
-            if (isTabletEnabled || isMouseGrabed) {
+            if (isTabletEnabled || isMouseGrabbed) {
                 kbd_mouse_event(0, 0, -[event deltaY], 0);
             } else {
                 [NSApp sendEvent:event];
@@ -688,7 +688,7 @@ QemuCocoaView *cocoaView;
     }
     [NSCursor hide];
     CGAssociateMouseAndMouseCursorPosition(FALSE);
-    isMouseGrabed = TRUE; // while isMouseGrabed = TRUE, QemuCocoaApp sends all events to [cocoaView handleEvent:]
+    isMouseGrabbed = TRUE; // while isMouseGrabbed = TRUE, QemuCocoaApp sends all events to [cocoaView handleEvent:]
 }
 
 - (void) ungrabMouse
@@ -703,11 +703,11 @@ QemuCocoaView *cocoaView;
     }
     [NSCursor unhide];
     CGAssociateMouseAndMouseCursorPosition(TRUE);
-    isMouseGrabed = FALSE;
+    isMouseGrabbed = FALSE;
 }
 
 - (void) setAbsoluteEnabled:(BOOL)tIsAbsoluteEnabled {isAbsoluteEnabled = tIsAbsoluteEnabled;}
-- (BOOL) isMouseGrabed {return isMouseGrabed;}
+- (BOOL) isMouseGrabbed {return isMouseGrabbed;}
 - (BOOL) isAbsoluteEnabled {return isAbsoluteEnabled;}
 - (float) cdx {return cdx;}
 - (float) cdy {return cdy;}
@@ -778,7 +778,7 @@ QemuCocoaView *cocoaView;
 {
     COCOA_DEBUG("QemuCocoaAppController: applicationDidFinishLaunching\n");
 
-    // Display an open dialog box if no argument were passed or
+    // Display an open dialog box if no arguments were passed or
     // if qemu was launched from the finder ( the Finder passes "-psn" )
     if( gArgc <= 1 || strncmp ((char *)gArgv[1], "-psn", 4) == 0) {
         NSOpenPanel *op = [[NSOpenPanel alloc] init];
@@ -1010,7 +1010,7 @@ static void cocoa_refresh(DisplayChangeListener *dcl)
 
     if (kbd_mouse_is_absolute()) {
         if (![cocoaView isAbsoluteEnabled]) {
-            if ([cocoaView isMouseGrabed]) {
+            if ([cocoaView isMouseGrabbed]) {
                 [cocoaView ungrabMouse];
             }
         }
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 3/9] ui/cocoa: Send warning message to stderr, not stdout
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 1/9] ui/cocoa: Pass command key through to guest when VM has mousegrab Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 2/9] ui/cocoa: Correct typos in comments and variable names Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 4/9] ui/cocoa: Add ".qcow2" to extension list for image load dialog Peter Maydell
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Bring a warning message into line with the others in this file by
sending it to stderr, not stdout.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1386543546-31919-4-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 1edb944..5249891 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -239,7 +239,7 @@ int keymap[] =
 static int cocoa_keycode_to_qemu(int keycode)
 {
     if (ARRAY_SIZE(keymap) <= keycode) {
-        printf("(cocoa) warning unknown keycode 0x%x\n", keycode);
+        fprintf(stderr, "(cocoa) warning unknown keycode 0x%x\n", keycode);
         return 0;
     }
     return keymap[keycode];
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 4/9] ui/cocoa: Add ".qcow2" to extension list for image load dialog
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (2 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 3/9] ui/cocoa: Send warning message to stderr, not stdout Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 5/9] ui/cocoa: Fix code for starting QEMU via image file " Peter Maydell
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Add ".qcow2" to the list of file extensions which are accepted
by the initial disk image load dialog which is displayed if the
user runs QEMU without any command line arguments.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1386543546-31919-5-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 5249891..fd55044 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -785,7 +785,7 @@ QemuCocoaView *cocoaView;
         [op setPrompt:@"Boot image"];
         [op setMessage:@"Select the disk image you want to boot.\n\nHit the \"Cancel\" button to quit"];
         NSArray *filetypes = [NSArray arrayWithObjects:@"img", @"iso", @"dmg",
-                                 @"qcow", @"cow", @"cloop", @"vmdk", nil];
+                                 @"qcow", @"qcow2", @"cow", @"cloop", @"vmdk", nil];
 #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
         [op setAllowedFileTypes:filetypes];
         [op beginSheetModalForWindow:normalWindow
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 5/9] ui/cocoa: Fix code for starting QEMU via image file load dialog
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (3 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 4/9] ui/cocoa: Add ".qcow2" to extension list for image load dialog Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 6/9] ui/cocoa: Redraw at correct size when switching surface Peter Maydell
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Fix a number of bugs in the code for starting QEMU via the image
file load dialog:
 * use the actual argv[0] rather than "qemu": this avoids failures to
   find BIOS image files caused by not looking in the correct directory
   relative to the executable path
 * allocate a large enough argv array to NULL terminate it
 * use g_strdup(X) rather than g_strdup_printf("%s", X) or
   g_strdup_printf(X)
 * disable the printing of the simulated command line argument
   (which is presumably intended for debug only)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1386543546-31919-6-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index fd55044..b90b782 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -833,18 +833,18 @@ QemuCocoaView *cocoaView;
     if(returnCode == NSCancelButton) {
         exit(0);
     } else if(returnCode == NSOKButton) {
-        const char *bin = "qemu";
         char *img = (char*)[ [ [ sheet URL ] path ] cStringUsingEncoding:NSASCIIStringEncoding];
 
-        char **argv = (char**)malloc( sizeof(char*)*3 );
+        char **argv = g_new(char *, 4);
 
         [sheet close];
 
-        argv[0] = g_strdup_printf("%s", bin);
-        argv[1] = g_strdup_printf("-hda");
-        argv[2] = g_strdup_printf("%s", img);
+        argv[0] = g_strdup(gArgv[0]);
+        argv[1] = g_strdup("-hda");
+        argv[2] = g_strdup(img);
+        argv[3] = NULL;
 
-        printf("Using argc %d argv %s -hda %s\n", 3, bin, img);
+        // printf("Using argc %d argv %s -hda %s\n", 3, gArgv[0], img);
 
         [self startEmulationWithArgc:3 argv:(char**)argv];
     }
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 6/9] ui/cocoa: Redraw at correct size when switching surface
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (4 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 5/9] ui/cocoa: Fix code for starting QEMU via image file " Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 7/9] ui/cocoa: Draw black rectangle if we have no data yet Peter Maydell
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

If the surface switch involved a resize, we were doing the redraw
at the old size rather than the new, because the update of
screen.width and screen.height was being done after the setFrame
method calls which triggered a redraw. Normally this isn't very
noticeable because typically after the guest triggers the window
resize it also draws something to it, which will in turn cause
us to redraw. However, the combination of a guest which never
draws to the display and a command line setting of a screen size
larger than the default can reveal odd effects.

Move most of the handling of resizes to the top of the method,
and guard it with a check that the surface size actually changed,
to avoid unnecessary operations (including some user visible ones
like "recenter the window on the screen") if the surface is the
same size as the old one.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1387853507-26298-2-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index b90b782..6a1f6b6 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -405,6 +405,17 @@ QemuCocoaView *cocoaView;
 
     int w = surface_width(surface);
     int h = surface_height(surface);
+    bool isResize = (w != screen.width || h != screen.height);
+
+    int oldh = screen.height;
+    if (isResize) {
+        // Resize before we trigger the redraw, or we'll redraw at the wrong size
+        COCOA_DEBUG("switchSurface: new size %d x %d\n", w, h);
+        screen.width = w;
+        screen.height = h;
+        [self setContentDimensions];
+        [self setFrame:NSMakeRect(cx, cy, cw, ch)];
+    }
 
     // update screenBuffer
     if (dataProviderRef)
@@ -419,17 +430,16 @@ QemuCocoaView *cocoaView;
     // update windows
     if (isFullscreen) {
         [[fullScreenWindow contentView] setFrame:[[NSScreen mainScreen] frame]];
-        [normalWindow setFrame:NSMakeRect([normalWindow frame].origin.x, [normalWindow frame].origin.y - h + screen.height, w, h + [normalWindow frame].size.height - screen.height) display:NO animate:NO];
+        [normalWindow setFrame:NSMakeRect([normalWindow frame].origin.x, [normalWindow frame].origin.y - h + oldh, w, h + [normalWindow frame].size.height - oldh) display:NO animate:NO];
     } else {
         if (qemu_name)
             [normalWindow setTitle:[NSString stringWithFormat:@"QEMU %s", qemu_name]];
-        [normalWindow setFrame:NSMakeRect([normalWindow frame].origin.x, [normalWindow frame].origin.y - h + screen.height, w, h + [normalWindow frame].size.height - screen.height) display:YES animate:NO];
+        [normalWindow setFrame:NSMakeRect([normalWindow frame].origin.x, [normalWindow frame].origin.y - h + oldh, w, h + [normalWindow frame].size.height - oldh) display:YES animate:NO];
+    }
+
+    if (isResize) {
+        [normalWindow center];
     }
-    screen.width = w;
-    screen.height = h;
-	[normalWindow center];
-    [self setContentDimensions];
-    [self setFrame:NSMakeRect(cx, cy, cw, ch)];
 }
 
 - (void) toggleFullScreen:(id)sender
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 7/9] ui/cocoa: Draw black rectangle if we have no data yet
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (5 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 6/9] ui/cocoa: Redraw at correct size when switching surface Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 8/9] ui/cocoa: Remove stray tabs Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 9/9] MAINTAINERS: add myself as cocoa UI co-maintainer Peter Maydell
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

If our redraw method is called before we have any data from the guest,
then draw a black rectangle rather than leaving the window empty.
This mostly only matters when the guest machine has no framebuffer
device, but it is more in line with the behaviour of other QEMU UIs.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 1387853507-26298-3-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 6a1f6b6..22ec29b 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -321,7 +321,12 @@ QemuCocoaView *cocoaView;
     CGContextSetShouldAntialias (viewContextRef, NO);
 
     // draw screen bitmap directly to Core Graphics context
-    if (dataProviderRef) {
+    if (!dataProviderRef) {
+        // Draw request before any guest device has set up a framebuffer:
+        // just draw an opaque black rectangle
+        CGContextSetRGBFillColor(viewContextRef, 0, 0, 0, 1.0);
+        CGContextFillRect(viewContextRef, NSRectToCGRect(rect));
+    } else {
         CGImageRef imageRef = CGImageCreate(
             screen.width, //width
             screen.height, //height
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 8/9] ui/cocoa: Remove stray tabs
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (6 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 7/9] ui/cocoa: Draw black rectangle if we have no data yet Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  2014-01-12 22:52 ` [Qemu-devel] [PULL 9/9] MAINTAINERS: add myself as cocoa UI co-maintainer Peter Maydell
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

The ui/cocoa.m file has just three lines with hardcoded tabs; fix them.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Message-id: 1387886052-27067-1-git-send-email-peter.maydell@linaro.org
---
 ui/cocoa.m | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 22ec29b..8661777 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -427,8 +427,8 @@ QemuCocoaView *cocoaView;
         CGDataProviderRelease(dataProviderRef);
 
     //sync host window color space with guests
-	screen.bitsPerPixel = surface_bits_per_pixel(surface);
-	screen.bitsPerComponent = surface_bytes_per_pixel(surface) * 2;
+    screen.bitsPerPixel = surface_bits_per_pixel(surface);
+    screen.bitsPerComponent = surface_bytes_per_pixel(surface) * 2;
 
     dataProviderRef = CGDataProviderCreateWithData(NULL, surface_data(surface), w * 4 * h, NULL);
 
@@ -774,7 +774,7 @@ QemuCocoaView *cocoaView;
         [normalWindow setContentView:cocoaView];
         [normalWindow useOptimizedDrawing:YES];
         [normalWindow makeKeyAndOrderFront:self];
-		[normalWindow center];
+        [normalWindow center];
 
     }
     return self;
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PULL 9/9] MAINTAINERS: add myself as cocoa UI co-maintainer
  2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
                   ` (7 preceding siblings ...)
  2014-01-12 22:52 ` [Qemu-devel] [PULL 8/9] ui/cocoa: Remove stray tabs Peter Maydell
@ 2014-01-12 22:52 ` Peter Maydell
  8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2014-01-12 22:52 UTC (permalink / raw)
  To: Anthony Liguori
  Cc: Blue Swirl, Andreas Färber, qemu-devel, Aurelien Jarno

Add myself to the maintainers list for the cocoa UI; status
remains "Odd Fixes".

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Andreas Färber <andreas.faerber@web.de>
Message-id: 1387207075-10280-1-git-send-email-peter.maydell@linaro.org
---
 MAINTAINERS | 1 +
 1 file changed, 1 insertion(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index a5ab8f8..fb53242 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -714,6 +714,7 @@ F: ui/
 
 Cocoa graphics
 M: Andreas Färber <andreas.faerber@web.de>
+M: Peter Maydell <peter.maydell@linaro.org>
 S: Odd Fixes
 F: ui/cocoa.m
 
-- 
1.8.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-01-12 22:52 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-12 22:52 [Qemu-devel] [PULL 0/9] cocoa queue Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 1/9] ui/cocoa: Pass command key through to guest when VM has mousegrab Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 2/9] ui/cocoa: Correct typos in comments and variable names Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 3/9] ui/cocoa: Send warning message to stderr, not stdout Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 4/9] ui/cocoa: Add ".qcow2" to extension list for image load dialog Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 5/9] ui/cocoa: Fix code for starting QEMU via image file " Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 6/9] ui/cocoa: Redraw at correct size when switching surface Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 7/9] ui/cocoa: Draw black rectangle if we have no data yet Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 8/9] ui/cocoa: Remove stray tabs Peter Maydell
2014-01-12 22:52 ` [Qemu-devel] [PULL 9/9] MAINTAINERS: add myself as cocoa UI co-maintainer Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).