aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-02-10 21:49:57 +0800
committerMilan Crha <mcrha@redhat.com>2011-02-10 21:49:57 +0800
commita56bf39d6a0a76b7d941208abb3a4dd07f087115 (patch)
treeaf6c799d203203bf1b26a8f842b81f8065350522
parent4adc621fe04e13a71227874f93850e78c3dd7b97 (diff)
downloadgsoc2013-evolution-a56bf39d6a0a76b7d941208abb3a4dd07f087115.tar.gz
gsoc2013-evolution-a56bf39d6a0a76b7d941208abb3a4dd07f087115.tar.zst
gsoc2013-evolution-a56bf39d6a0a76b7d941208abb3a4dd07f087115.zip
Bug #641502 - Flickering while resizing the mail list
-rw-r--r--libgnomecanvas/gnome-canvas-rect.c4
-rw-r--r--libgnomecanvas/gnome-canvas-rich-text.c6
-rw-r--r--libgnomecanvas/gnome-canvas.c82
3 files changed, 47 insertions, 45 deletions
diff --git a/libgnomecanvas/gnome-canvas-rect.c b/libgnomecanvas/gnome-canvas-rect.c
index d3009b7d13..3cf71bd1b0 100644
--- a/libgnomecanvas/gnome-canvas-rect.c
+++ b/libgnomecanvas/gnome-canvas-rect.c
@@ -276,7 +276,7 @@ gnome_canvas_rect_set_property (GObject *object,
case PROP_DASH:
/* XXX */
- g_assert_not_reached ();
+ g_warn_if_reached ();
break;
default:
@@ -342,7 +342,7 @@ gnome_canvas_rect_get_property (GObject *object,
case PROP_DASH:
/* XXX */
- g_assert_not_reached ();
+ g_warn_if_reached ();
break;
default:
diff --git a/libgnomecanvas/gnome-canvas-rich-text.c b/libgnomecanvas/gnome-canvas-rich-text.c
index 8c1e4142d9..a19738f484 100644
--- a/libgnomecanvas/gnome-canvas-rich-text.c
+++ b/libgnomecanvas/gnome-canvas-rich-text.c
@@ -1581,14 +1581,14 @@ preblink_cb (gpointer data)
return FALSE;
} /* preblink_cb */
-static gint
+static gboolean
blink_cb (gpointer data)
{
GnomeCanvasRichText *text = GNOME_CANVAS_RICH_TEXT (data);
gboolean visible;
- g_assert (text->_priv->layout);
- g_assert (text->_priv->cursor_visible);
+ g_return_val_if_fail (text->_priv->layout, FALSE);
+ g_return_val_if_fail (text->_priv->cursor_visible, FALSE);
visible = gtk_text_layout_get_cursor_visible (text->_priv->layout);
if (visible)
diff --git a/libgnomecanvas/gnome-canvas.c b/libgnomecanvas/gnome-canvas.c
index b26dc94679..86835c2aec 100644
--- a/libgnomecanvas/gnome-canvas.c
+++ b/libgnomecanvas/gnome-canvas.c
@@ -677,7 +677,7 @@ gnome_canvas_item_raise (GnomeCanvasItem *item, gint positions)
parent = GNOME_CANVAS_GROUP (item->parent);
link = g_list_find (parent->item_list, item);
- g_assert (link != NULL);
+ g_return_if_fail (link != NULL);
for (before = link; positions && before; positions--)
before = before->next;
@@ -714,7 +714,7 @@ gnome_canvas_item_lower (GnomeCanvasItem *item, gint positions)
parent = GNOME_CANVAS_GROUP (item->parent);
link = g_list_find (parent->item_list, item);
- g_assert (link != NULL);
+ g_return_if_fail (link != NULL);
if (link->prev)
for (before = link->prev; positions && before; positions--)
@@ -747,7 +747,7 @@ gnome_canvas_item_raise_to_top (GnomeCanvasItem *item)
parent = GNOME_CANVAS_GROUP (item->parent);
link = g_list_find (parent->item_list, item);
- g_assert (link != NULL);
+ g_return_if_fail (link != NULL);
if (put_item_after (link, parent->item_list_end)) {
redraw_if_visible (item);
@@ -774,7 +774,7 @@ gnome_canvas_item_lower_to_bottom (GnomeCanvasItem *item)
parent = GNOME_CANVAS_GROUP (item->parent);
link = g_list_find (parent->item_list, item);
- g_assert (link != NULL);
+ g_return_if_fail (link != NULL);
if (put_item_after (link, NULL)) {
redraw_if_visible (item);
@@ -2250,48 +2250,50 @@ gnome_canvas_draw (GtkWidget *widget,
{
GnomeCanvas *canvas = GNOME_CANVAS (widget);
cairo_rectangle_int_t rect;
+ GtkLayout *layout;
+ GtkAdjustment *hadjustment;
+ GtkAdjustment *vadjustment;
+ gdouble hadjustment_value;
+ gdouble vadjustment_value;
+
+ layout = GTK_LAYOUT (canvas);
+ hadjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (layout));
+ vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (layout));
+
+ hadjustment_value = gtk_adjustment_get_value (hadjustment);
+ vadjustment_value = gtk_adjustment_get_value (vadjustment);
gdk_cairo_get_clip_rectangle (cr, &rect);
if (canvas->need_update) {
- gnome_canvas_request_redraw (canvas,
- rect.x, rect.y,
- rect.x + rect.width,
- rect.y + rect.height);
- } else {
- GtkLayout *layout;
- GtkAdjustment *hadjustment;
- GtkAdjustment *vadjustment;
- gdouble hadjustment_value;
- gdouble vadjustment_value;
-
- layout = GTK_LAYOUT (canvas);
- hadjustment = gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (layout));
- vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (layout));
+ cairo_matrix_t w2c;
- hadjustment_value = gtk_adjustment_get_value (hadjustment);
- vadjustment_value = gtk_adjustment_get_value (vadjustment);
+ /* We start updating root with w2c matrix */
+ gnome_canvas_w2c_matrix (canvas, &w2c);
- cairo_save (cr);
- cairo_translate (cr,
- -canvas->zoom_xofs + rect.x,
- -canvas->zoom_yofs + rect.y);
-
- rect.x += hadjustment_value;
- rect.y += vadjustment_value;
-
- /* No pending updates, draw exposed area immediately */
- gnome_canvas_paint_rect (canvas, cr,
- rect.x, rect.y,
- rect.x + rect.width,
- rect.y + rect.height);
- cairo_restore (cr);
+ gnome_canvas_item_invoke_update (canvas->root, &w2c, 0);
- /* And call expose on parent container class */
- GTK_WIDGET_CLASS (canvas_parent_class)->
- draw (widget, cr);
+ canvas->need_update = FALSE;
}
+ cairo_save (cr);
+ cairo_translate (cr,
+ -canvas->zoom_xofs + rect.x,
+ -canvas->zoom_yofs + rect.y);
+
+ rect.x += hadjustment_value;
+ rect.y += vadjustment_value;
+
+ /* No pending updates, draw exposed area immediately */
+ gnome_canvas_paint_rect (canvas, cr,
+ rect.x, rect.y,
+ rect.x + rect.width,
+ rect.y + rect.height);
+ cairo_restore (cr);
+
+ /* And call expose on parent container class */
+ GTK_WIDGET_CLASS (canvas_parent_class)->draw (widget, cr);
+
return FALSE;
}
@@ -2642,7 +2644,7 @@ gnome_canvas_button (GtkWidget *widget, GdkEventButton *event)
break;
default:
- g_assert_not_reached ();
+ g_warn_if_reached ();
}
return retval;
@@ -2695,7 +2697,7 @@ gnome_canvas_key (GtkWidget *widget, GdkEventKey *event)
if (widget_class->key_release_event)
return (* widget_class->key_release_event) (widget, event);
} else
- g_assert_not_reached ();
+ g_warn_if_reached ();
return FALSE;
} else
@@ -2841,7 +2843,7 @@ idle_handler (gpointer data)
static void
add_idle (GnomeCanvas *canvas)
{
- g_assert (canvas->need_update);
+ g_return_if_fail (canvas->need_update);
if (!canvas->idle_id)
canvas->idle_id = g_idle_add_full (CANVAS_IDLE_PRIORITY,