Autoscroll to first element in header window if user didn't scroll
authorJose Dapena Paz <jdapena@igalia.com>
Wed, 10 Dec 2008 17:01:14 +0000 (17:01 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Wed, 10 Dec 2008 17:01:14 +0000 (17:01 +0000)
pmo-drop-split-view-r6743

src/hildon2/modest-header-window.c

index f662680..c8afc67 100644 (file)
@@ -78,6 +78,9 @@ struct _ModestHeaderWindowPrivate {
 
        TnyFolder *folder;
 
+       /* autoscroll */
+       gboolean autoscroll;
+
        /* banners */
        GtkWidget *updating_banner;
        guint updating_banner_timeout;
@@ -136,6 +139,12 @@ static void set_delete_edit_mode (GtkButton *button,
                                  ModestHeaderWindow *self);
 static void set_moveto_edit_mode (GtkButton *button,
                                  ModestHeaderWindow *self);
+static gboolean on_expose_event(GtkTreeView *header_view,
+                               GdkEventExpose *event,
+                               gpointer user_data);
+static void on_vertical_movement (HildonPannableArea *area,
+                                 HildonMovementDirection direction,
+                                 gdouble x, gdouble y, gpointer user_data);
 
 /* globals */
 static GtkWindowClass *parent_class = NULL;
@@ -211,6 +220,7 @@ modest_header_window_init (ModestHeaderWindow *obj)
        priv->folder = NULL;
        priv->updating_banner = NULL;
        priv->updating_banner_timeout = 0;
+       priv->autoscroll = TRUE;
        
        modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
                                            GTK_WINDOW(obj),
@@ -277,7 +287,20 @@ connect_signals (ModestHeaderWindow *self)
                                           "updating-msg-list",
                                           G_CALLBACK (on_updating_msg_list), 
                                           self);
-       
+       priv->sighandlers =
+               modest_signal_mgr_connect (priv->sighandlers,
+                                          G_OBJECT (priv->header_view),
+                                          "expose-event",
+                                          G_CALLBACK (on_expose_event),
+                                          self);
+
+       priv->sighandlers =
+               modest_signal_mgr_connect (priv->sighandlers,
+                                          G_OBJECT (priv->contents_view), 
+                                          "vertical-movement", 
+                                          G_CALLBACK (on_vertical_movement), 
+                                          self);
+
        /* TODO: connect header view activate */
 
        /* window */
@@ -331,6 +354,17 @@ create_empty_view (void)
        return align;
 }
 
+static void
+on_vertical_movement (HildonPannableArea *area,
+                     HildonMovementDirection direction,
+                     gdouble x, gdouble y, gpointer user_data)
+{
+       ModestHeaderWindow *self = (ModestHeaderWindow *) user_data;
+       ModestHeaderWindowPrivate *priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+
+       priv->autoscroll = FALSE;
+}
+
 
 ModestWindow *
 modest_header_window_new (TnyFolder *folder)
@@ -742,3 +776,19 @@ set_moveto_edit_mode (GtkButton *button,
 {
        set_edit_mode (self, EDIT_MODE_COMMAND_MOVE);
 }
+
+static gboolean 
+on_expose_event(GtkTreeView *header_view,
+               GdkEventExpose *event,
+               gpointer user_data)
+{
+       ModestHeaderWindow *self = (ModestHeaderWindow *) user_data;
+       ModestHeaderWindowPrivate *priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+
+       g_return_val_if_fail (MODEST_IS_HEADER_WINDOW (self), FALSE);
+
+       if (priv->autoscroll)
+               hildon_pannable_area_jump_to (HILDON_PANNABLE_AREA (priv->contents_view), 0.0, 0.0);
+
+       return FALSE;
+}