+
+static void
+remove_banners (ModestMainWindow *window)
+{
+ ModestMainWindowPrivate *priv;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (window);
+
+ if (priv->opening_banner_timeout > 0) {
+ g_source_remove (priv->opening_banner_timeout);
+ priv->opening_banner_timeout = 0;
+ }
+
+ if (priv->opening_banner != NULL) {
+ gtk_widget_destroy (priv->opening_banner);
+ priv->opening_banner = NULL;
+ }
+
+ if (priv->updating_banner_timeout > 0) {
+ g_source_remove (priv->updating_banner_timeout);
+ priv->updating_banner_timeout = 0;
+ }
+
+ if (priv->updating_banner != NULL) {
+ gtk_widget_destroy (priv->updating_banner);
+ priv->updating_banner = NULL;
+ }
+}
+
+
+static void
+on_window_hide (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data)
+{
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (gobject));
+
+ if (!GTK_WIDGET_VISIBLE (gobject)) {
+ TnyFolderStore *folder_store;
+ ModestMainWindowPrivate *priv;
+
+ /* Remove the currently shown banners */
+ remove_banners (MODEST_MAIN_WINDOW (gobject));
+
+ /* Force the folder view to sync the currently selected folder
+ to save the read/unread status and to expunge messages */
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (gobject);
+ folder_store = modest_folder_view_get_selected (priv->folder_view);
+ if (TNY_IS_FOLDER (folder_store)) {
+ ModestMailOperation *mail_op;
+
+ mail_op = modest_mail_operation_new (NULL);
+ modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+ mail_op);
+ modest_mail_operation_sync_folder (mail_op, TNY_FOLDER (folder_store), FALSE);
+ g_object_unref (mail_op);
+ g_object_unref (folder_store);
+ }
+ }
+}
+
+static void
+on_window_destroy (GtkObject *widget,
+ gpointer user_data)
+{
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (widget));
+
+ remove_banners (MODEST_MAIN_WINDOW (widget));
+}
+
+static void
+opening_banner_destroyed (gpointer data,
+ GObject *where_the_object_was)
+{
+ ModestMainWindowPrivate *priv = NULL;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (data);
+
+ priv->opening_banner = NULL;
+}
+
+static gboolean
+show_opening_banner (gpointer user_data)
+{
+ ModestMainWindowPrivate *priv = NULL;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE (user_data);
+
+ if (priv->opening_banner == NULL) {
+
+ /* We're outside the main lock */
+ gdk_threads_enter ();
+ priv->opening_banner =
+ modest_platform_animation_banner (GTK_WIDGET (user_data), NULL,
+ _("mail_me_opening"));
+
+ /* We need this because banners in Maemo could be
+ destroyed by dialogs so we need to properly update
+ our reference to it */
+ g_object_weak_ref (G_OBJECT (priv->opening_banner),
+ opening_banner_destroyed,
+ user_data);
+
+ /* We need this because banners in Maemo could be
+ destroyed by dialogs so we need to properly update
+ our reference to it */
+ g_object_weak_ref (G_OBJECT (priv->updating_banner),
+ updating_banner_destroyed,
+ user_data);
+ gdk_threads_leave ();
+ }
+
+ /* Remove timeout */
+ priv->opening_banner_timeout = 0;
+ return FALSE;
+}