+static void
+attachment_deleted (ModestAttachmentsView *attachments_view,
+ gpointer user_data)
+{
+ modest_msg_edit_window_remove_attachments (MODEST_MSG_EDIT_WINDOW (user_data),
+ NULL);
+}
+
+static void
+text_buffer_can_undo (GtkTextBuffer *buffer, GParamSpec *param_spec, ModestMsgEditWindow *window)
+{
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ g_object_get (G_OBJECT (buffer), "can-undo", &(priv->can_undo), NULL);
+}
+
+static void
+text_buffer_can_redo (GtkTextBuffer *buffer, GParamSpec *param_spec, ModestMsgEditWindow *window)
+{
+ ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ g_object_get (G_OBJECT (buffer), "can-redo", &(priv->can_redo), NULL);
+}
+
+gboolean
+modest_msg_edit_window_can_undo (ModestMsgEditWindow *window)
+{
+ ModestMsgEditWindowPrivate *priv;
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE);
+ priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ return priv->can_undo;
+}
+
+gboolean
+modest_msg_edit_window_can_redo (ModestMsgEditWindow *window)
+{
+ ModestMsgEditWindowPrivate *priv;
+ g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE);
+ priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (window);
+
+ return priv->can_redo;
+}
+
+static void
+body_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor)
+{
+ modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (editor));
+ modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (editor));
+}
+
+static void
+recpt_field_changed (GtkTextBuffer *buffer,
+ ModestMsgEditWindow *editor)
+{
+ modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (editor));
+ modest_ui_actions_check_menu_dimming_rules (MODEST_WINDOW (editor));
+}
+
+static void
+connect_signals (ModestMsgEditWindow *obj)
+{
+ ModestMsgEditWindowPrivate *priv;
+
+ priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
+
+ g_signal_connect (G_OBJECT (priv->text_buffer), "notify::can-undo",
+ G_CALLBACK (text_buffer_can_undo), obj);
+ g_signal_connect (G_OBJECT (priv->text_buffer), "notify::can-redo",
+ G_CALLBACK (text_buffer_can_redo), obj);
+ g_signal_connect (G_OBJECT (priv->text_buffer), "changed",
+ G_CALLBACK (body_changed), obj);
+ g_signal_connect (G_OBJECT (priv->text_buffer), "modified-changed",
+ G_CALLBACK (body_changed), obj);
+
+ g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->to_field))),
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+ g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->cc_field))),
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+ g_signal_connect (G_OBJECT (modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (priv->bcc_field))),
+ "changed", G_CALLBACK (recpt_field_changed), obj);
+
+ g_signal_connect (G_OBJECT (priv->attachments_view), "delete", G_CALLBACK (attachment_deleted), obj);
+}
+