=== src/Makefile.am
==================================================================
--- src/Makefile.am	(revision 90718)
+++ src/Makefile.am	(local)
@@ -12,6 +12,8 @@
 	brush.h				\
 	brush-private.h			\
 	cairo-embed.h			\
+	carbon-private.c		\
+	carbon-private.h		\
 	codecs.h			\
 	codecs-private.h		\
 	customlinecap.c			\
=== src/general.c
==================================================================
--- src/general.c	(revision 90718)
+++ src/general.c	(local)
@@ -29,6 +29,7 @@
 #include "codecs-private.h"
 #include "graphics-private.h"
 #include "font-private.h"
+#include "carbon-private.h"
 
 /* large table to avoid a division and three multiplications when premultiplying alpha into R, G and B */
 #include "alpha-premul-table.inc"
@@ -125,13 +126,15 @@
 	Display* display;
 
 	if (dpis == 0) {
+#if __APPLE__
+		float h_dpi, v_dpi;
+		gdip_get_display_dpi_carbon (&h_dpi, &v_dpi);
+
+		dpis = h_dpi;
+		return dpis;
+#else
 		char *val;
 
-		if (getenv ("MONO_MWF_USE_CARBON_BACKEND") != NULL) {
-			dpis = 96.0f;
-			return dpis;
-		}
-
 		display = XOpenDisplay (0);
 		/* If the display is openable lets try to read dpi from it; otherwise use a default of 96.0f */
 		if (display) {
@@ -145,6 +148,7 @@
 		} else {
 			dpis = 96.0f;
 		}
+#endif
 	}
 
 	return dpis;
=== src/graphics.c
==================================================================
--- src/graphics.c	(revision 90718)
+++ src/graphics.c	(local)
@@ -256,7 +256,7 @@
 #ifdef CAIRO_HAS_QUARTZ_SURFACE
 // coverity[+alloc : arg-*3]
 GpStatus
-GdipCreateFromQuartz_macosx (void *ctx, int width, int height, GpGraphics **graphics)
+GdipCreateFromContext_macosx (void *ctx, int width, int height, GpGraphics **graphics)
 {
 	cairo_surface_t *surface;
 
=== src/carbon-private.c
==================================================================
--- src/carbon-private.c	(revision 90718)
+++ src/carbon-private.c	(local)
@@ -0,0 +1,54 @@
+/*
+ * carbon-private.c
+ * 
+ * Copyright (C) 2008 Novell, Inc (http://www.novell.com)
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
+ * and associated documentation files (the "Software"), to deal in the Software without restriction, 
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 
+ * subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in all copies or substantial 
+ * portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 
+ * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * 
+ * Authors:
+ *   Geoff Norton  <gnorton@novell.com>
+ */
+
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#include <IOKit/graphics/IOGraphicsLib.h>
+
+static inline int gdip_get_int_from_dict_for_key (CFDictionaryRef dict, CFStringRef key) {
+	CFNumberRef value = CFDictionaryGetValue (dict, key);
+	int ret = 0;
+
+	if (value == NULL)
+		return 0;
+
+	CFNumberGetValue (value, kCFNumberIntType, &ret);
+
+	return ret;
+}
+
+void gdip_get_display_dpi_carbon (float *h_dpi, float *v_dpi) {
+	CFDictionaryRef mode_dict = CGDisplayCurrentMode (kCGDirectMainDisplay);
+	io_connect_t display_port = CGDisplayIOServicePort (kCGDirectMainDisplay);
+	CFDictionaryRef display_dict = IOCreateDisplayInfoDictionary (display_port, 0);
+	const float mmpi = 25.4;
+	float h_size = (float) gdip_get_int_from_dict_for_key (display_dict, CFSTR (kDisplayHorizontalImageSize)) / mmpi;
+	float v_size = (float) gdip_get_int_from_dict_for_key (display_dict, CFSTR (kDisplayVerticalImageSize)) / mmpi;
+
+	*h_dpi = (float) gdip_get_int_from_dict_for_key (mode_dict, kCGDisplayWidth) / h_size; 
+	*v_dpi = (float) gdip_get_int_from_dict_for_key (mode_dict, kCGDisplayHeight) / v_size; 
+
+	CFRelease (display_dict);
+}
+#endif
=== src/carbon-private.h
==================================================================
--- src/carbon-private.h	(revision 90718)
+++ src/carbon-private.h	(local)
@@ -0,0 +1,30 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *	Geoff Norton (gnorton@novell.com)
+ *
+ * Copyright (C) 2008 Novell, Inc (http://www.novell.com)
+ */
+
+#ifndef __CARBON_PRIVATE_H__
+#define __CARBON_PRIVATE_H__
+
+#ifdef __APPLE__
+void gdip_get_display_dpi_carbon (float *h_dpi, float *v_dpi);
+#endif
+
+#endif
