--- a/src/gvnc.c	2009-10-05 21:53:23.000000000 +0200
+++ b/src/gvnc.c	2010-05-27 23:26:13.000000000 +0200
@@ -3576,12 +3576,17 @@
 	if (gvnc_has_error(gvnc))
 		return FALSE;
 
-	if (!gvnc->ops.get_preferred_pixel_format)
-		goto fail;
-	if (gvnc->ops.get_preferred_pixel_format(gvnc->ops_data, &gvnc->fmt))
-		gvnc_set_pixel_format(gvnc, &gvnc->fmt);
-	else
-		goto fail;
+	// restore behaviour of gtk-vnc 3.8: only change pixel format
+	// if true_color_flag has not been set by gvnc_read_pixel_format
+	// (else gtk viewer plugin does not work: uses wrong pixel format)
+	if (!gvnc->fmt.true_color_flag && gvnc->ops.get_preferred_pixel_format) {
+	//if (!gvnc->ops.get_preferred_pixel_format)
+	//	goto fail;
+		if (gvnc->ops.get_preferred_pixel_format(gvnc->ops_data, &gvnc->fmt))
+			gvnc_set_pixel_format(gvnc, &gvnc->fmt);
+		else
+			goto fail;
+	}
 	memset(&gvnc->strm, 0, sizeof(gvnc->strm));
 	/* FIXME what level? */
 	for (i = 0; i < 5; i++)
