qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] Fixes fullscreen aspect ratio and leaving fullscree


From: Programmingkid
Subject: [Qemu-devel] [PATCH] Fixes fullscreen aspect ratio and leaving fullscreen mode problem on Mac OS X
Date: Mon, 29 Dec 2014 23:17:40 -0500

This patch fixes these problems for QEMU on Mac OS X:
- fullscreen mode not having the correct aspect ratio
- the inability to leave fullscreen mode

signed-off-by: John Arbuckle <address@hidden>

From 5baa57950e03ed18afbb63b4b500bbde95baad5c Mon Sep 17 00:00:00 2001
From: John Arbuckle <address@hidden>
Date: Mon, 29 Dec 2014 22:47:56 -0500
Subject: [PATCH] Fixes fullscreen aspect ratio and leaving fullscreen mode
 problem.

signed-off-by: John Arbuckle <address@hidden>

---
 configure  |    2 +-
 ui/cocoa.m |   19 +++++++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/configure b/configure
index cae588c..32d3d3f 100755
--- a/configure
+++ b/configure
@@ -611,7 +611,7 @@ Darwin)
   cocoa="yes"
   audio_drv_list="coreaudio"
   audio_possible_drivers="coreaudio sdl fmod"
-  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
+  LDFLAGS="-framework CoreFoundation -framework IOKit -framework 
ApplicationServices $LDFLAGS"
   libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit 
$libs_softmmu"
   # Disable attempts to use ObjectiveC features in os/object.h since they
   # won't work when we're compiling with gcc as a C compiler.
diff --git a/ui/cocoa.m b/ui/cocoa.m
index d37c29b..d1bebb9 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -29,6 +29,7 @@
 #include "ui/console.h"
 #include "ui/input.h"
 #include "sysemu/sysemu.h"
+#import <ApplicationServices/ApplicationServices.h>
 
 #ifndef MAC_OS_X_VERSION_10_4
 #define MAC_OS_X_VERSION_10_4 1040
@@ -482,8 +483,16 @@ QemuCocoaView *cocoaView;
 - (void) toggleFullScreen:(id)sender
 {
     COCOA_DEBUG("QemuCocoaView: toggleFullScreen\n");
-
+    static CFDictionaryRef original_mode;
+
+    // initialize original_mode only once - before the resolution has been 
changed
+    if (!original_mode) {
+        original_mode = CGDisplayCurrentMode(kCGDirectMainDisplay);
+    }
     if (isFullscreen) { // switch from fullscreen to desktop
+        if (original_mode != nil) {
+            CGDisplaySwitchToMode(kCGDirectMainDisplay, original_mode);
+        }
         isFullscreen = FALSE;
         [self ungrabMouse];
         [self setContentDimensions];
@@ -501,6 +510,12 @@ QemuCocoaView *cocoaView;
         }
 #endif
     } else { // switch from desktop to fullscreen
+        size_t desired_bit_depth = 32;
+        boolean_t exact_match;
+        CFDictionaryRef mode = 
CGDisplayBestModeForParameters(kCGDirectMainDisplay, desired_bit_depth, cw, ch, 
&exact_match);
+        if (mode != nil) {
+            CGDisplaySwitchToMode(kCGDirectMainDisplay, mode);
+        }
         isFullscreen = TRUE;
         [self grabMouse];
         [self setContentDimensions];
@@ -561,7 +576,7 @@ QemuCocoaView *cocoaView;
             }
 
             // release Mouse grab when pressing ctrl+alt
-            if (!isFullscreen && ([event modifierFlags] & NSControlKeyMask) && 
([event modifierFlags] & NSAlternateKeyMask)) {
+            if (([event modifierFlags] & NSControlKeyMask) && ([event 
modifierFlags] & NSAlternateKeyMask)) {
                 [self ungrabMouse];
             }
             break;
-- 
1.7.5.4







reply via email to

[Prev in Thread] Current Thread [Next in Thread]