diff -ur epiphany-3.12.1/embed/ephy-embed-prefs.c epiphany-3.12.1.new/embed/ephy-embed-prefs.c
--- epiphany-3.12.1/embed/ephy-embed-prefs.c	2014-03-02 15:12:40.000000000 +0600
+++ epiphany-3.12.1.new/embed/ephy-embed-prefs.c	2014-07-27 17:59:59.212000585 +0600
@@ -199,36 +199,10 @@
                                                              "Epiphany", VERSION);
 }
 
-static gdouble
-get_screen_dpi (GdkScreen *screen)
-{
-  gdouble dpi;
-  gdouble dp, di;
-
-  dpi = gdk_screen_get_resolution (screen);
-  if (dpi != -1)
-    return dpi;
-
-  dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen));
-  di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4;
-
-  return dp / di;
-}
-
 static guint
 normalize_font_size (gdouble font_size)
 {
-  /* WebKit2 uses font sizes in pixels. */
-  GdkScreen *screen;
-  gdouble dpi;
-
-  /* FIXME: We should use the view screen instead of the detault one
-   * but we don't have access to the view here.
-   */
-  screen = gdk_screen_get_default ();
-  dpi = screen ? get_screen_dpi (screen) : 96;
-
-  return font_size / 72.0 * dpi;
+  return font_size / 72.0 * 96;
 }
 
 static void
Только в epiphany-3.12.1.new/embed: ephy-embed-prefs.c.orig
Только в epiphany-3.12.1.new/embed: ephy-embed-prefs.c.rej
diff -ur epiphany-3.12.1/embed/ephy-web-view.c epiphany-3.12.1.new/embed/ephy-web-view.c
--- epiphany-3.12.1/embed/ephy-web-view.c	2014-05-12 18:55:32.000000000 +0600
+++ epiphany-3.12.1.new/embed/ephy-web-view.c	2014-07-27 17:58:26.281000343 +0600
@@ -1437,11 +1437,11 @@
   view = EPHY_WEB_VIEW (user_data);
   host = (EphyHistoryHost *)result_data;
 
-  current_zoom = webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (view));
+  current_zoom = ephy_web_view_get_virtual_zoom_level (WEBKIT_WEB_VIEW (view));
 
   if (host->zoom_level != current_zoom) {
     view->priv->is_setting_zoom = TRUE;
-    webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (view), host->zoom_level);
+    ephy_web_view_set_virtual_zoom_level (WEBKIT_WEB_VIEW (view), host->zoom_level);
     view->priv->is_setting_zoom = FALSE;
   }
 
@@ -1892,7 +1892,7 @@
   double zoom;
   EphyWebViewPrivate *priv = EPHY_WEB_VIEW (web_view)->priv;
 
-  zoom = webkit_web_view_get_zoom_level (web_view);
+  zoom = ephy_web_view_get_virtual_zoom_level (web_view);
 
   if (priv->is_setting_zoom)
     return;
Только в epiphany-3.12.1.new/embed: ephy-web-view.c.orig
diff -ur epiphany-3.12.1/lib/ephy-zoom.c epiphany-3.12.1.new/lib/ephy-zoom.c
--- epiphany-3.12.1/lib/ephy-zoom.c	2014-02-04 21:55:03.000000000 +0600
+++ epiphany-3.12.1.new/lib/ephy-zoom.c	2014-07-27 17:58:26.282000343 +0600
@@ -21,8 +21,45 @@
 #include "config.h"
 #include "ephy-zoom.h"
 
+#include <glib.h>
+#include <gdk/gdk.h>
 #include <math.h>
 
+static float
+get_screen_dpi (void)
+{
+  gdouble dpi;
+  gdouble dp, di;
+
+  GdkScreen* screen = gdk_screen_get_default();
+
+  dpi = gdk_screen_get_resolution (screen);
+  if (dpi != -1)
+    return dpi;
+
+  dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen));
+  di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4;
+
+  return dp / di;
+}
+
+float
+ephy_web_view_get_virtual_zoom_level(WebKitWebView *web_view)
+{
+  float dpi = get_screen_dpi();
+  float zoom = webkit_web_view_get_zoom_level(web_view);
+  return zoom * 96.0 / dpi;
+}
+
+void
+ephy_web_view_set_virtual_zoom_level(WebKitWebView *web_view,
+                                     float level)
+{
+  float dpi = get_screen_dpi();
+  float zoom = level * dpi / 96.0;
+  webkit_web_view_set_zoom_level(web_view, zoom);
+}
+
 int
 ephy_zoom_get_zoom_level_index (float level)
 {
diff -ur epiphany-3.12.1/lib/ephy-zoom.h epiphany-3.12.1.new/lib/ephy-zoom.h
--- epiphany-3.12.1/lib/ephy-zoom.h	2014-02-04 21:55:03.000000000 +0600
+++ epiphany-3.12.1.new/lib/ephy-zoom.h	2014-07-27 17:58:26.284000343 +0600
@@ -32,6 +32,8 @@
 #include <glib.h>
 #include <glib/gi18n.h>
 
+#include <webkit2/webkit2.h>
+
 G_BEGIN_DECLS
 
 static const
@@ -60,6 +66,10 @@
 #define ZOOM_IN   (-1.0)
 #define ZOOM_OUT  (-2.0)
 
+float ephy_web_view_get_virtual_zoom_level(WebKitWebView *web_view);
+void  ephy_web_view_set_virtual_zoom_level(WebKitWebView *web_view,
+                                           float level);
+
 int   ephy_zoom_get_zoom_level_index   (float level);
 float ephy_zoom_get_changed_zoom_level (float level,
                                         int   steps);
diff -ur epiphany-3.12.1/src/ephy-window.c epiphany-3.12.1.new/src/ephy-window.c
--- epiphany-3.12.1/src/ephy-window.c	2014-03-17 18:02:15.000000000 +0600
+++ epiphany-3.12.1.new/src/ephy-window.c	2014-07-27 17:58:26.288000343 +0600
@@ -1352,7 +1352,7 @@
 
 	if (window->priv->closing) return;
 
-	zoom = webkit_web_view_get_zoom_level (web_view);
+	zoom = ephy_web_view_get_virtual_zoom_level (web_view);
 
 	if (zoom >= ZOOM_MAXIMAL)
 	{
@@ -1364,7 +1364,7 @@
 		can_zoom_out = FALSE;
 	}
 
-	if (zoom != 1.0)
+	if (zoom < 0.99 || zoom > 1.01)
 	{
 		can_zoom_normal = TRUE;
 	}
@@ -3623,7 +3623,7 @@
 
 	web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
 
-	current_zoom = webkit_web_view_get_zoom_level (web_view);
+	current_zoom = ephy_web_view_get_virtual_zoom_level (web_view);
 
 	if (zoom == ZOOM_IN)
 	{
@@ -3636,7 +3636,7 @@
 
 	if (zoom != current_zoom)
 	{
-		webkit_web_view_set_zoom_level (web_view, zoom);
+		ephy_web_view_set_virtual_zoom_level (web_view, zoom);
 	}
 }
 
Только в epiphany-3.12.1.new/src: ephy-window.c.orig
