From: Jose Dapena Paz Date: Wed, 10 Dec 2008 17:01:14 +0000 (+0000) Subject: Autoscroll to first element in header window if user didn't scroll X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=3eaf5dee2bd9e042b06d4b4e6b180ba0d1eaf792;p=modest Autoscroll to first element in header window if user didn't scroll pmo-drop-split-view-r6743 --- diff --git a/src/hildon2/modest-header-window.c b/src/hildon2/modest-header-window.c index f662680..c8afc67 100644 --- a/src/hildon2/modest-header-window.c +++ b/src/hildon2/modest-header-window.c @@ -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; +}