From 4d28752276d910690f1e41116af7f1573aaae84b Mon Sep 17 00:00:00 2001 From: Artem Garmash Date: Tue, 3 Nov 2009 17:23:08 +0200 Subject: [PATCH] Stop scrolling when whole message was displayed --- src/el-home-applet.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/el-home-applet.c b/src/el-home-applet.c index 78e8491..c585390 100644 --- a/src/el-home-applet.c +++ b/src/el-home-applet.c @@ -146,6 +146,7 @@ draw_text (cairo_t *cr, PangoLayout *layout; PangoFontDescription *desc; gboolean result; + PangoRectangle extent; cairo_save (cr); cairo_rectangle (cr, @@ -177,7 +178,11 @@ draw_text (cairo_t *cr, cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0); pango_cairo_show_layout (cr, layout); - result = !offset && pango_layout_is_ellipsized (layout); + pango_layout_get_pixel_extents (layout, NULL, &extent); + if (offset) + result = height < (extent.height - offset); + else + result = pango_layout_is_ellipsized (layout); g_object_unref (layout); cairo_restore (cr); @@ -185,6 +190,17 @@ draw_text (cairo_t *cr, return result; } +static void +stop_scroll_anim (ELHomeAppletPrivate *priv) +{ + priv->scroll_on_click = FALSE; + priv->scroll_offset = 0; + if (priv->scroll_anim_id > 0) { + g_source_remove (priv->scroll_anim_id); + priv->scroll_anim_id = 0; + } +} + static gboolean expose_event (GtkWidget *self, GdkEventExpose *event) { @@ -193,6 +209,9 @@ expose_event (GtkWidget *self, GdkEventExpose *event) cairo_t *cr; GdkColor color; float red, green, blue; + int message_height; + + message_height = C_HEIGHT - priv->received->allocation.height - HEADER_HEIGHT; /* find theme active color */ gtk_style_lookup_color (self->style, "ActiveTextColor", &color); @@ -285,7 +304,7 @@ expose_event (GtkWidget *self, GdkEventExpose *event) ellipsized = draw_text (cr, priv->message, 2*C_X, HEADER_HEIGHT, MESSAGE_WIDTH, - MESSAGE_HEIGHT - 2*C_Y, + message_height, priv->scroll_offset); if (!priv->scroll_offset && !priv->active) priv->scroll_on_click = ellipsized; @@ -293,18 +312,10 @@ expose_event (GtkWidget *self, GdkEventExpose *event) cairo_pattern_destroy (grad); cairo_destroy (cr); - return GTK_WIDGET_CLASS (el_home_applet_parent_class)->expose_event (self, event); -} + if (!priv->scroll_on_click && !ellipsized && priv->scroll_offset) + stop_scroll_anim (priv); -static void -stop_scroll_anim (ELHomeAppletPrivate *priv) -{ - priv->scroll_on_click = FALSE; - priv->scroll_offset = 0; - if (priv->scroll_anim_id > 0) { - g_source_remove (priv->scroll_anim_id); - priv->scroll_anim_id = 0; - } + return GTK_WIDGET_CLASS (el_home_applet_parent_class)->expose_event (self, event); } static void -- 1.7.9.5