Add scrolling message indicator
authorArtem Garmash <artemgarmash@gmail.com>
Tue, 10 Nov 2009 17:38:31 +0000 (19:38 +0200)
committerArtem Garmash <artem.garmash@nokia.com>
Sun, 27 Jun 2010 19:13:40 +0000 (22:13 +0300)
src/el-home-applet.c

index 1fda56e..d871a5d 100644 (file)
@@ -58,6 +58,7 @@ struct _ELHomeAppletPrivate
         GtkWidget *unread;
         GtkWidget *received;
         GtkWidget *empty;
+        GtkWidget *cut_message;
 
         gchar *message;
         gint event_id;
@@ -201,6 +202,7 @@ stop_scroll_anim (ELHomeAppletPrivate *priv)
                 g_source_remove (priv->scroll_anim_id);
                 priv->scroll_anim_id = 0;
                 priv->scroll_on_click = FALSE;
+                gtk_widget_hide (priv->cut_message);
         }
 }
 
@@ -245,6 +247,8 @@ notify_on_current_desktop (GObject      *object,
                 stop_scroll_anim (self->priv);
                 priv->scroll_on_click = priv->scroll_offset;
                 priv->scroll_offset = 0;
+                if (priv->scroll_on_click)
+                        gtk_widget_show (priv->cut_message);
                 gtk_widget_queue_draw (GTK_WIDGET (self));
         }
 }
@@ -362,6 +366,8 @@ expose_event (GtkWidget *self, GdkEventExpose *event)
 
                 priv->hidden_message_height = height - message_height;
                 priv->scroll_on_click = priv->hidden_message_height > 0;
+                if (priv->scroll_on_click)
+                        gtk_widget_show (priv->cut_message);
         }
 
         cairo_rectangle (cr,
@@ -508,6 +514,8 @@ show_event (ELHomeApplet *self, RTComElIter *it)
                 cairo_surface_destroy (priv->message_surface);
                 priv->message_surface = NULL;
         }
+
+        gtk_widget_hide (priv->cut_message);
         gtk_widget_queue_draw (GTK_WIDGET (self));
 }
 
@@ -674,8 +682,10 @@ scroll_anim_cb (ELHomeApplet *self)
                                     C_HEIGHT - priv->received->allocation.height - HEADER_HEIGHT);
 
         to_continue = priv->scroll_offset <= priv->hidden_message_height;
-        if (!to_continue)
+        if (!to_continue) {
                 priv->scroll_anim_id = 0;
+                gtk_widget_hide (priv->cut_message);
+        }
 
         return to_continue;
 }
@@ -744,7 +754,7 @@ el_home_applet_init (ELHomeApplet *self)
 {
         ELHomeAppletPrivate *priv;
         GtkWidget *event_box;
-        GtkWidget *hbox, *vbox, *align;
+        GtkWidget *hbox, *vbox, *align, *footer;
 
         self->priv = EL_HOME_APPLET_GET_PRIVATE (self);
         priv = self->priv;
@@ -789,21 +799,31 @@ el_home_applet_init (ELHomeApplet *self)
         gtk_misc_set_alignment (GTK_MISC (priv->received),
                                 1.0f,
                                 0.5f);
-        gtk_widget_set_size_request (priv->received,
-                                     MESSAGE_WIDTH,
-                                     -1);
         hildon_helper_set_logical_font (priv->received, "SmallSystemFont");
         gtk_widget_set_name (priv->received, "hildon-shadow-label");
 
+
+        priv->cut_message = gtk_label_new ("...");
+        gtk_misc_set_alignment (GTK_MISC (priv->cut_message),
+                                0.5f,
+                                0.0f);
+        hildon_helper_set_logical_font (priv->cut_message, "SmallSystemFont");
+        gtk_widget_set_name (priv->cut_message, "hildon-shadow-label");
+        GTK_WIDGET_SET_FLAGS (priv->cut_message, GTK_NO_SHOW_ALL);
+
         hbox = gtk_hbox_new (FALSE, 0);
         gtk_box_pack_start (GTK_BOX (hbox), priv->unread, FALSE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (hbox), priv->icon, FALSE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (hbox), priv->sender, TRUE, TRUE, 0);
 
+        footer = gtk_hbox_new (FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (footer), priv->cut_message, TRUE, TRUE, 0);
+        gtk_box_pack_end (GTK_BOX (footer), priv->received, FALSE, FALSE, 0);
+
         vbox = gtk_vbox_new (FALSE, 0);
         gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
         gtk_box_pack_start (GTK_BOX (vbox), priv->empty, TRUE, TRUE, 0);
-        gtk_box_pack_end (GTK_BOX (vbox), priv->received, FALSE, FALSE, 0);
+        gtk_box_pack_end (GTK_BOX (vbox), footer, FALSE, FALSE, 0);
 
         align = gtk_alignment_new (0.5f, 0.0f, 1.0f, 1.0f);
         gtk_alignment_set_padding (GTK_ALIGNMENT (align),