Stop scrolling when the widget is not visible
authorArtem Garmash <artemgarmash@gmail.com>
Sat, 7 Nov 2009 22:44:03 +0000 (00:44 +0200)
committerArtem Garmash <artem.garmash@nokia.com>
Sun, 27 Jun 2010 19:13:40 +0000 (22:13 +0300)
src/el-home-applet.c

index 4a4db89..39da22e 100644 (file)
@@ -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));