+static void
+update_progress_hint (ModestAccountsWindow *self)
+{
+ ModestAccountsWindowPrivate *priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE (self);
+
+ if (has_active_operations (self)) {
+ priv->progress_hint = TRUE;
+ } else {
+ priv->progress_hint = FALSE;
+ }
+
+ if (!priv->progress_hint) {
+ priv->progress_hint = modest_window_mgr_has_progress_operation (modest_runtime_get_window_mgr ());
+ }
+
+ if (GTK_WIDGET_VISIBLE (self)) {
+ hildon_gtk_window_set_progress_indicator (GTK_WINDOW (self), priv->progress_hint?1:0);
+ }
+}
+
+static void
+on_progress_list_changed (ModestWindowMgr *mgr,
+ ModestAccountsWindow *self)
+{
+ update_progress_hint (self);
+}
+
+static void
+on_row_inserted (GtkTreeModel *tree_model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ ModestAccountsWindow *self;
+
+ self = (ModestAccountsWindow *) user_data;
+
+ row_count_changed (self);
+}
+
+static void
+on_row_deleted (GtkTreeModel *tree_model,
+ GtkTreePath *path,
+ gpointer user_data)
+{
+ ModestAccountsWindow *self;
+
+ self = (ModestAccountsWindow *) user_data;
+
+ row_count_changed (self);
+}
+
+static void
+row_count_changed (ModestAccountsWindow *self)
+{
+ ModestAccountsWindowPrivate *priv;
+ GtkTreeModel *model;
+ gint count;
+
+ priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE (self);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->account_view));
+
+ count = gtk_tree_model_iter_n_children (model, NULL);
+
+ if (count == 0) {
+ gtk_widget_hide (priv->account_view);
+ gtk_widget_show (priv->no_accounts_container);
+ g_debug ("%s: hiding accounts view", __FUNCTION__);
+ } else {
+ gtk_widget_hide (priv->no_accounts_container);
+ gtk_widget_show (priv->account_view);
+ g_debug ("%s: showing accounts view", __FUNCTION__);
+ }
+ gtk_container_child_set (GTK_CONTAINER(priv->box), priv->pannable,
+ "expand", count > 0,
+ "fill", count > 0,
+ NULL);
+}
+
+static void
+on_mail_operation_started (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ ModestAccountsWindow *self;
+ ModestMailOperationTypeOperation op_type;
+ GObject *source = NULL;
+
+ self = MODEST_ACCOUNTS_WINDOW (user_data);
+ op_type = modest_mail_operation_get_type_operation (mail_op);
+ source = modest_mail_operation_get_source(mail_op);
+ if (G_OBJECT (self) == source) {
+ update_progress_hint (self);
+ }
+ g_object_unref (source);
+}
+
+static void
+on_mail_operation_finished (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ ModestAccountsWindow *self;
+
+ self = MODEST_ACCOUNTS_WINDOW (user_data);
+
+ /* Don't disable the progress hint if there are more pending
+ operations from this window */
+ update_progress_hint (self);
+
+ modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (self));
+}
+
+static void
+on_queue_changed (ModestMailOperationQueue *queue,
+ ModestMailOperation *mail_op,
+ ModestMailOperationQueueNotification type,
+ ModestAccountsWindow *self)
+{
+ ModestAccountsWindowPrivate *priv;
+
+ priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE (self);
+
+ /* If this operations was created by another window, do nothing */
+ if (!modest_mail_operation_is_mine (mail_op, G_OBJECT(self)))
+ return;
+
+ if (type == MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED) {
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-started",
+ G_CALLBACK (on_mail_operation_started),
+ self);
+ priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-finished",
+ G_CALLBACK (on_mail_operation_finished),
+ self);
+ } else if (type == MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED) {
+ priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-started");
+ priv->sighandlers = modest_signal_mgr_disconnect (priv->sighandlers,
+ G_OBJECT (mail_op),
+ "operation-finished");
+ }
+}
+
+void
+modest_accounts_window_pre_create (void)
+{
+ static gboolean pre_created = FALSE;
+ if (!pre_created) {
+ pre_created = TRUE;
+ pre_created_accounts_window = GTK_WIDGET (modest_accounts_window_new_real ());
+ }
+}
+
+
+static gboolean
+on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+ ModestAccountsWindowPrivate *priv;
+ HildonPannableArea *pannable;
+
+ if (event->type == GDK_KEY_RELEASE)
+ return FALSE;
+
+ priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE(user_data);
+
+ pannable = HILDON_PANNABLE_AREA (priv->pannable);
+
+ switch (event->keyval) {
+
+ case GDK_Up:
+ modest_maemo_utils_scroll_pannable(pannable, 0, -1);
+ break;
+
+ case GDK_Down:
+ modest_maemo_utils_scroll_pannable(pannable, 0, 1);
+ break;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+on_delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer userdata)
+{
+ ModestAccountsWindowPrivate *priv;
+
+ priv = MODEST_ACCOUNTS_WINDOW_GET_PRIVATE (widget);
+
+ modest_account_view_set_show_last_update (MODEST_ACCOUNT_VIEW (priv->account_view), FALSE);
+
+ gtk_widget_queue_resize (widget);
+
+ gdk_window_process_updates (priv->account_view->window, TRUE);
+ hildon_gtk_window_take_screenshot (GTK_WINDOW (widget), TRUE);
+
+ modest_account_view_set_show_last_update (MODEST_ACCOUNT_VIEW (priv->account_view), TRUE);
+
+ return FALSE;
+
+}