From: Artem Garmash Date: Sat, 7 Nov 2009 22:44:03 +0000 (+0200) Subject: Stop scrolling when the widget is not visible X-Git-Url: https://vcs.maemo.org/git/?p=conv-inbox;a=commitdiff_plain;h=3b005ebeb9059e2e01f063927d9f1afae77c4be7 Stop scrolling when the widget is not visible --- diff --git a/src/el-home-applet.c b/src/el-home-applet.c index 4a4db89..39da22e 100644 --- a/src/el-home-applet.c +++ b/src/el-home-applet.c @@ -46,6 +46,9 @@ #define BOX_RADIOUS 10 +#define SCROLL_PERIOD 100 /* ms */ +#define SCROLL_STEP 1 /* pixel */ + struct _ELHomeAppletPrivate { RTComEl *eventlogger; @@ -229,6 +232,21 @@ style_set_cb (GtkWidget *widget, } } +static void +notify_on_current_desktop (GObject *object, + GParamSpec *unused G_GNUC_UNUSED, + ELHomeApplet *self) +{ + ELHomeAppletPrivate *priv = self->priv; + gboolean on; + + g_object_get (object, "is-on-current-desktop", &on, NULL); + if (!on) { + stop_scroll_anim (self->priv); + priv->scroll_offset = 0; + } +} + static gboolean expose_event (GtkWidget *self, GdkEventExpose *event) { @@ -628,8 +646,12 @@ scroll_anim_cb (ELHomeApplet *self) { ELHomeAppletPrivate *priv = self->priv; - priv->scroll_offset += 1; - gtk_widget_queue_draw (GTK_WIDGET (self)); + priv->scroll_offset += SCROLL_STEP; + gtk_widget_queue_draw_area (GTK_WIDGET (self), + 3*C_X, + HEADER_HEIGHT + C_Y, + MESSAGE_WIDTH, + C_HEIGHT - priv->received->allocation.height - HEADER_HEIGHT); return TRUE; } @@ -661,7 +683,7 @@ button_release_event_cb (GtkWidget *widget, stop_scroll_anim (priv); if (priv->scroll_on_click) { priv->scroll_on_click = FALSE; - priv->scroll_anim_id = g_timeout_add (100, + priv->scroll_anim_id = g_timeout_add (SCROLL_PERIOD, (GSourceFunc)scroll_anim_cb, self); } @@ -771,14 +793,27 @@ el_home_applet_init (ELHomeApplet *self) gtk_container_add (GTK_CONTAINER (event_box), align); gtk_container_add (GTK_CONTAINER (self), event_box); - g_signal_connect (event_box, "button-press-event", - G_CALLBACK (button_press_event_cb), self); - g_signal_connect (event_box, "button-release-event", - G_CALLBACK (button_release_event_cb), self); - g_signal_connect (event_box, "leave-notify-event", - G_CALLBACK (leave_notify_event_cb), self); + g_signal_connect (event_box, + "button-press-event", + G_CALLBACK (button_press_event_cb), + self); + g_signal_connect (event_box, + "button-release-event", + G_CALLBACK (button_release_event_cb), + self); + g_signal_connect (event_box, + "leave-notify-event", + G_CALLBACK (leave_notify_event_cb), + self); - g_signal_connect (event_box, "style-set", G_CALLBACK (style_set_cb), self); + g_signal_connect (event_box, + "style-set", + G_CALLBACK (style_set_cb), + self); + g_signal_connect (self, + "notify::is-on-current-desktop", + G_CALLBACK (notify_on_current_desktop), + self); gtk_widget_show_all (GTK_WIDGET (event_box));