[gtkhtml] Bug #642656 - Screen flickers black in body when replying email
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkhtml] Bug #642656 - Screen flickers black in body when replying email
- Date: Fri, 18 Feb 2011 11:39:22 +0000 (UTC)
commit 32e160332ca0293c57133d8b2191984a9e521320
Author: Milan Crha <mcrha redhat com>
Date: Fri Feb 18 12:38:47 2011 +0100
Bug #642656 - Screen flickers black in body when replying email
gtkhtml/gtkhtml.c | 4 +--
gtkhtml/htmlengine.c | 56 +++++++------------------------------------------
2 files changed, 9 insertions(+), 51 deletions(-)
---
diff --git a/gtkhtml/gtkhtml.c b/gtkhtml/gtkhtml.c
index 94f7d1c..43c9987 100644
--- a/gtkhtml/gtkhtml.c
+++ b/gtkhtml/gtkhtml.c
@@ -1248,13 +1248,10 @@ unrealize (GtkWidget *widget)
static gboolean
draw (GtkWidget *widget, cairo_t *cr)
{
- /* printf ("draw x: %d y: %d\n", GTK_HTML (widget)->engine->x_offset, GTK_HTML (widget)->engine->y_offset); */
-
html_engine_draw_cb (GTK_HTML (widget)->engine, cr);
if (GTK_WIDGET_CLASS (parent_class)->draw)
(* GTK_WIDGET_CLASS (parent_class)->draw) (widget, cr);
- /* printf ("draw END\n"); */
return FALSE;
}
@@ -3475,6 +3472,7 @@ gtk_html_init (GtkHTML* html)
{
gtk_widget_set_can_focus (GTK_WIDGET (html), TRUE);
gtk_widget_set_app_paintable (GTK_WIDGET (html), TRUE);
+ gtk_widget_set_double_buffered (GTK_WIDGET (html), TRUE);
html->editor_api = NULL;
html->debug = FALSE;
diff --git a/gtkhtml/htmlengine.c b/gtkhtml/htmlengine.c
index 0578c75..e41d89c 100644
--- a/gtkhtml/htmlengine.c
+++ b/gtkhtml/htmlengine.c
@@ -5047,57 +5047,12 @@ html_engine_draw_real (HTMLEngine *e, gint x, gint y, gint width, gint height, g
if (e->block && e->opened_streams)
return;
- /* printf ("html_engine_draw_real\n"); */
-
/* This case happens when the widget has not been shown yet. */
if (width == 0 || height == 0)
return;
parent = gtk_widget_get_parent (GTK_WIDGET (e->widget));
- /* don't draw in case we are longer than available space and scrollbar is going to be shown */
- if (e->clue && e->clue->ascent + e->clue->descent > e->height - (html_engine_get_top_border (e) + html_engine_get_bottom_border (e))) {
- if (GTK_IS_SCROLLED_WINDOW (parent)) {
- GtkWidget *vscrollbar;
-
- vscrollbar = gtk_scrolled_window_get_vscrollbar (
- GTK_SCROLLED_WINDOW (parent));
- if (vscrollbar != NULL && !gtk_widget_get_visible (vscrollbar)) {
- GtkPolicyType vscrollbar_policy;
-
- gtk_scrolled_window_get_policy (
- GTK_SCROLLED_WINDOW (parent),
- NULL, &vscrollbar_policy);
- if (vscrollbar_policy == GTK_POLICY_AUTOMATIC)
- return;
- }
- }
- }
-
- /* don't draw in case we are shorter than available space and scrollbar is going to be hidden */
- if (e->clue && e->clue->ascent + e->clue->descent <= e->height - (html_engine_get_top_border (e) + html_engine_get_bottom_border (e))) {
- if (GTK_IS_SCROLLED_WINDOW (parent)) {
- GtkWidget *vscrollbar;
-
- vscrollbar = gtk_scrolled_window_get_vscrollbar (
- GTK_SCROLLED_WINDOW (parent));
- if (vscrollbar != NULL && gtk_widget_get_visible (vscrollbar)) {
- GtkPolicyType vscrollbar_policy;
-
- gtk_scrolled_window_get_policy (
- GTK_SCROLLED_WINDOW (parent),
- NULL, &vscrollbar_policy);
- if (vscrollbar_policy == GTK_POLICY_AUTOMATIC)
- return;
- }
- }
- }
-
- /* printf ("html_engine_draw_real THRU\n"); */
-
- /* printf ("html_engine_draw_real %d x %d, %d\n",
- e->width, e->height, e->clue ? e->clue->ascent + e->clue->descent : 0); */
-
e->expose = expose;
x1 = x;
@@ -5161,9 +5116,14 @@ html_engine_draw_cb (HTMLEngine *e, cairo_t *cr)
}
}
- if (html_engine_frozen (e))
+ if (html_engine_frozen (e)) {
+ /* always draw background, at least */
+ gdk_cairo_set_source_color (cr, &html_colorset_get_color_allocated (e->settings->color_set, e->painter, HTMLBgColor)->color);
+ cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
+ cairo_fill (cr);
+
html_engine_add_expose (e, e->x_offset + rect.x, e->y_offset + rect.y, rect.width, rect.height, TRUE);
- else
+ } else
html_engine_draw_real (e, e->x_offset + rect.x, e->y_offset + rect.y, rect.width, rect.height, TRUE);
}
@@ -5728,7 +5688,7 @@ html_engine_freeze (HTMLEngine *engine)
gtk_html_im_reset (engine->widget);
html_engine_flush_draw_queue (engine);
if ((HTML_IS_GDK_PAINTER (engine->painter) || HTML_IS_PLAIN_PAINTER (engine->painter)) && HTML_GDK_PAINTER (engine->painter)->window)
- gdk_window_process_updates (HTML_GDK_PAINTER (engine->painter)->window, FALSE);
+ gdk_window_process_updates (HTML_GDK_PAINTER (engine->painter)->window, FALSE);
}
html_engine_flush_draw_queue (engine);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]