Index: ps/ps-document.c
===================================================================
RCS file: /cvs/gnome/evince/ps/ps-document.c,v
retrieving revision 1.64
diff -u -u -r1.64 ps-document.c
--- ps/ps-document.c	3 Dec 2006 20:35:44 -0000	1.64
+++ ps/ps-document.c	6 Dec 2006 13:44:25 -0000
@@ -294,18 +294,6 @@
 	}
 }
 
-static float
-get_xdpi (PSDocument *gs)
-{
-	return 25.4 * gdk_screen_width() / gdk_screen_width_mm();
-}
-
-static float
-get_ydpi (PSDocument *gs)
-{
-	return 25.4 * gdk_screen_height() / gdk_screen_height_mm();
-}
-
 static void
 setup_pixmap (PSDocument *gs, int page, double scale, int rotation)
 {
@@ -447,19 +435,17 @@
 setup_page (PSDocument *gs, int page, double scale, int rotation)
 {
 	gchar *buf;
-	char scaled_xdpi[G_ASCII_DTOSTR_BUF_SIZE];	
-	char scaled_ydpi[G_ASCII_DTOSTR_BUF_SIZE];
+	char scaled_dpi[G_ASCII_DTOSTR_BUF_SIZE];	
 	int urx, ury, llx, lly;
 
 	LOG ("Setup the page");
 
 	get_page_box (gs, page, &urx, &ury, &llx, &lly);
-	g_ascii_dtostr (scaled_xdpi, G_ASCII_DTOSTR_BUF_SIZE, get_xdpi (gs) * scale);
-	g_ascii_dtostr (scaled_ydpi, G_ASCII_DTOSTR_BUF_SIZE, get_ydpi (gs) * scale);
+	g_ascii_dtostr (scaled_dpi, G_ASCII_DTOSTR_BUF_SIZE, 72.0 * scale);
 
 	buf = g_strdup_printf ("%ld %d %d %d %d %d %s %s %d %d %d %d",
 			       0L, rotation, llx, lly, urx, ury,
-			       scaled_xdpi, scaled_ydpi,
+			       scaled_dpi, scaled_dpi,
 			       0, 0, 0, 0);
 	LOG ("GS property %s", buf);
 
@@ -1212,14 +1198,14 @@
 	PSDocument *gs = PS_DOCUMENT (document);
 	int urx, ury, llx, lly;
 
-	get_page_box (PS_DOCUMENT (document), page, &urx, &ury, &llx, &lly);
+	get_page_box (gs, page, &urx, &ury, &llx, &lly);
 
 	if (width) {
-		*width = (urx - llx) / 72.0 * get_xdpi (gs) + 0.5;
+		*width = (urx - llx) + 0.5;
 	}
 
 	if (height) {
-		*height = (ury - lly) / 72.0 * get_ydpi (gs) + 0.5;
+		*height = (ury - lly) + 0.5;
 	}
 }
 
Index: shell/ev-window.c
===================================================================
RCS file: /cvs/gnome/evince/shell/ev-window.c,v
retrieving revision 1.328
diff -u -u -r1.328 ev-window.c
--- shell/ev-window.c	3 Dec 2006 20:54:44 -0000	1.328
+++ shell/ev-window.c	6 Dec 2006 13:44:27 -0000
@@ -265,6 +265,16 @@
 
 G_DEFINE_TYPE (EvWindow, ev_window, GTK_TYPE_WINDOW)
 
+static gdouble
+ev_window_get_screen_dpi (EvWindow *ev_window)
+{
+	GdkScreen *screen;
+
+	screen = gtk_window_get_screen (GTK_WINDOW (ev_window));
+	
+	return 25.4 * gdk_screen_get_width (screen) / gdk_screen_get_width_mm (screen);
+}
+
 static void
 ev_window_set_action_sensitive (EvWindow   *ev_window,
 		    	        const char *name,
@@ -425,6 +435,7 @@
 						      ZOOM_CONTROL_ACTION);
 
 		real_zoom = ev_view_get_zoom (EV_VIEW (ev_window->priv->view));
+		real_zoom *= 72.0 / ev_window_get_screen_dpi (ev_window);
 		zoom = ephy_zoom_get_nearest_zoom_level (real_zoom);
 
 		ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action), zoom);
@@ -810,7 +821,11 @@
 	/* Zoom */
 	if (ev_metadata_manager_get (uri, "zoom", &zoom, FALSE) &&
 	    ev_view_get_sizing_mode (view) == EV_SIZING_FREE) {
-		ev_view_set_zoom (view, g_value_get_double (&zoom), FALSE);
+		gdouble zoom_value;
+
+		zoom_value = g_value_get_double (&zoom);
+		zoom_value *= ev_window_get_screen_dpi (window) / 72.0;
+		ev_view_set_zoom (view, zoom_value, FALSE);
 		g_value_unset (&zoom);
 	}
 
@@ -3023,8 +3038,11 @@
         ev_window_update_actions (ev_window);
 
 	if (ev_view_get_sizing_mode (view) == EV_SIZING_FREE && !ev_window_is_empty (ev_window)) {
-		ev_metadata_manager_set_double (ev_window->priv->uri, "zoom",
-					        ev_view_get_zoom (view));
+		gdouble zoom;
+
+		zoom = ev_view_get_zoom (view);
+		zoom *= 72.0 / ev_window_get_screen_dpi (ev_window);
+		ev_metadata_manager_set_double (ev_window->priv->uri, "zoom", zoom);
 	}
 }
 
@@ -3457,7 +3475,9 @@
 	ev_view_set_sizing_mode (EV_VIEW (ev_window->priv->view), mode);
 	
 	if (mode == EV_SIZING_FREE) {
-		ev_view_set_zoom (EV_VIEW (ev_window->priv->view), zoom, FALSE);
+		ev_view_set_zoom (EV_VIEW (ev_window->priv->view),
+				  zoom * ev_window_get_screen_dpi (ev_window) / 72.0,
+				  FALSE);
 	}
 }
 
