Index: gtkhtml/ChangeLog
===================================================================
--- gtkhtml/ChangeLog	(revision 8779)
+++ gtkhtml/ChangeLog	(working copy)
@@ -1,3 +1,12 @@
+2008-03-12  Milan Crha  <mcrha@redhat.com>
+
+	** Fix for bug #339093
+
+	* gtkhtml-private.h: (struct _GtkHTMLPrivate):
+	* gtkhtml.c: (key_press_event), (gtk_html_init), (command):
+	Skip ZOOM commands only when in non-editing mode and when not
+	invoked by key bindings.
+
 2008-03-11  Matthew Barnes  <mbarnes@redhat.com>
 
 	** Fixes bug #266206 (original patch by Owen Taylor)
Index: gtkhtml/gtkhtml-private.h
===================================================================
--- gtkhtml/gtkhtml-private.h	(revision 8779)
+++ gtkhtml/gtkhtml-private.h	(working copy)
@@ -76,6 +76,8 @@ struct _GtkHTMLPrivate {
 	HTMLObject *resize_object;
 
 	gboolean in_url_test_mode;
+
+	gboolean in_key_binding;
 };
 
 void  gtk_html_private_calc_scrollbars  (GtkHTML                *html,
Index: gtkhtml/gtkhtml.c
===================================================================
--- gtkhtml/gtkhtml.c	(revision 8779)
+++ gtkhtml/gtkhtml.c	(working copy)
@@ -1033,8 +1033,11 @@ key_press_event (GtkWidget *widget, GdkE
 	if (html_class->use_emacs_bindings && html_class->emacs_bindings && !html->binding_handled)
 		gtk_binding_set_activate (html_class->emacs_bindings, event->keyval, event->state, GTK_OBJECT (widget));
 
-	if (!html->binding_handled)
+	if (!html->binding_handled) {
+		html->priv->in_key_binding = TRUE;
 		retval = GTK_WIDGET_CLASS (parent_class)->key_press_event (widget, event);
+		html->priv->in_key_binding = FALSE;
+	}
 
 	retval = retval || html->binding_handled;
 	update = html->priv->update_styles;
@@ -3300,6 +3303,7 @@ gtk_html_init (GtkHTML* html)
 	html->priv->in_object_resize = FALSE;
 	html->priv->resize_cursor = gdk_cursor_new (GDK_BOTTOM_RIGHT_CORNER);
 	html->priv->in_url_test_mode = FALSE;
+	html->priv->in_key_binding = FALSE;
 
 	/* IM Context */
 	html->priv->im_context = gtk_im_multicontext_new ();
@@ -4829,15 +4833,25 @@ command (GtkHTML *html, GtkHTMLCommandTy
 	/* printf ("command %d %s\n", com_type, get_value_nick (com_type)); */
 	html->binding_handled = TRUE;
 
+	#define ensure_key_binding_not_editable() \
+		if (html->priv->in_key_binding && html_engine_get_editable (e)) { \
+			html->binding_handled = FALSE; \
+			rv = FALSE; \
+			break; \
+		}
+
 	/* non-editable + editable commands */
 	switch (com_type) {
 	case GTK_HTML_COMMAND_ZOOM_IN:
+		ensure_key_binding_not_editable ();
 		gtk_html_zoom_in (html);
 		break;
 	case GTK_HTML_COMMAND_ZOOM_OUT:
+		ensure_key_binding_not_editable ();
 		gtk_html_zoom_out (html);
 		break;
 	case GTK_HTML_COMMAND_ZOOM_RESET:
+		ensure_key_binding_not_editable ();
 		gtk_html_zoom_reset (html);
 		break;
 	case GTK_HTML_COMMAND_SEARCH_INCREMENTAL_FORWARD:
@@ -4913,6 +4927,8 @@ command (GtkHTML *html, GtkHTMLCommandTy
 		html->binding_handled = FALSE;
 	}
 
+	#undef ensure_key_binding_not_editable
+
 	if (!html_engine_get_editable (e) || html->binding_handled)
 		return rv;
 
