1 /* Copyright (c) 2006, Nokia Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <glib/gi18n.h>
31 #include <tny-account-store.h>
32 #include <tny-simple-list.h>
33 #include <modest-conf.h>
34 #include <modest-runtime.h>
35 #include <modest-tny-msg.h>
37 #include <widgets/modest-window-priv.h>
38 #include <widgets/modest-msg-edit-window.h>
39 #include <widgets/modest-msg-edit-window-ui.h>
40 #include <widgets/modest-combo-box.h>
42 #include <modest-widget-memory.h>
43 #include <modest-account-mgr-helpers.h>
44 #include <gtkhtml/gtkhtml.h>
46 static void modest_msg_edit_window_class_init (ModestMsgEditWindowClass *klass);
47 static void modest_msg_edit_window_init (ModestMsgEditWindow *obj);
48 static void modest_msg_edit_window_finalize (GObject *obj);
57 typedef struct _ModestMsgEditWindowPrivate ModestMsgEditWindowPrivate;
58 struct _ModestMsgEditWindowPrivate {
65 ModestPairList *from_field_protos;
66 GtkWidget *from_field;
71 GtkWidget *subject_field;
76 #define MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
77 MODEST_TYPE_MSG_EDIT_WINDOW, \
78 ModestMsgEditWindowPrivate))
80 static GtkWindowClass *parent_class = NULL;
82 /* uncomment the following if you have defined any signals */
83 /* static guint signals[LAST_SIGNAL] = {0}; */
86 modest_msg_edit_window_get_type (void)
88 static GType my_type = 0;
90 static const GTypeInfo my_info = {
91 sizeof(ModestMsgEditWindowClass),
93 NULL, /* base finalize */
94 (GClassInitFunc) modest_msg_edit_window_class_init,
95 NULL, /* class finalize */
96 NULL, /* class data */
97 sizeof(ModestMsgEditWindow),
99 (GInstanceInitFunc) modest_msg_edit_window_init,
102 my_type = g_type_register_static (MODEST_TYPE_WINDOW,
103 "ModestMsgEditWindow",
111 save_state (ModestWindow *self)
113 modest_widget_memory_save (modest_runtime_get_conf (),
114 G_OBJECT(self), "modest-edit-msg-window");
119 restore_settings (ModestMsgEditWindow *self)
121 modest_widget_memory_restore (modest_runtime_get_conf (),
122 G_OBJECT(self), "modest-edit-msg-window");
126 modest_msg_edit_window_class_init (ModestMsgEditWindowClass *klass)
128 GObjectClass *gobject_class;
129 ModestWindowClass *modest_window_class;
131 gobject_class = (GObjectClass*) klass;
132 modest_window_class = (ModestWindowClass*) klass;
134 parent_class = g_type_class_peek_parent (klass);
135 gobject_class->finalize = modest_msg_edit_window_finalize;
137 g_type_class_add_private (gobject_class, sizeof(ModestMsgEditWindowPrivate));
139 modest_window_class->save_state_func = save_state;
143 modest_msg_edit_window_init (ModestMsgEditWindow *obj)
145 ModestMsgEditWindowPrivate *priv;
146 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
148 priv->toolbar = NULL;
149 priv->menubar = NULL;
150 priv->msg_body = NULL;
151 priv->from_field = NULL;
152 priv->to_field = NULL;
153 priv->cc_field = NULL;
154 priv->bcc_field = NULL;
155 priv->subject_field = NULL;
160 * @result: A ModestPairList, which must be freed with modest_pair_list_free().
162 static ModestPairList*
163 get_transports (void)
165 ModestAccountMgr *account_mgr;
166 GSList *transports = NULL;
167 GSList *cursor, *accounts;
169 account_mgr = modest_runtime_get_account_mgr();
170 cursor = accounts = modest_account_mgr_account_names (account_mgr, TRUE);
172 gchar *account_name = cursor->data ? g_strdup((gchar*)cursor->data) : NULL;
173 gchar *from_string = modest_account_mgr_get_from_string (account_mgr,
176 /* something went wrong: ignore this one */
177 g_free (account_name);
181 pair = modest_pair_new ((gpointer) account_name,
182 (gpointer) from_string , TRUE);
183 transports = g_slist_prepend (transports, pair);
184 } /* don't free account name; it's freed when the transports list is freed */
185 cursor = cursor->next;
187 g_slist_free (accounts);
193 on_from_combo_changed (ModestComboBox *combo, ModestWindow *win)
195 modest_window_set_active_account (
196 win, modest_combo_box_get_active_id(combo));
202 init_window (ModestMsgEditWindow *obj, const gchar* account)
204 GtkWidget *to_button, *cc_button, *bcc_button;
205 GtkWidget *header_table;
206 GtkWidget *main_vbox;
208 GtkWidget *scrolled_window;
209 ModestMsgEditWindowPrivate *priv;
210 ModestWindowPrivate *parent_priv;
212 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
213 parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
215 to_button = gtk_button_new_with_label (_("To..."));
216 cc_button = gtk_button_new_with_label (_("Cc..."));
217 bcc_button = gtk_button_new_with_label (_("Bcc..."));
219 /* Note: This ModestPairList* must exist for as long as the combo
220 * that uses it, because the ModestComboBox uses the ID opaquely,
221 * so it can't know how to manage its memory. */
222 priv->from_field_protos = get_transports ();
223 priv->from_field = modest_combo_box_new (priv->from_field_protos, g_str_equal);
226 modest_combo_box_set_active_id (MODEST_COMBO_BOX(priv->from_field),
228 modest_window_set_active_account (MODEST_WINDOW(obj), account);
230 /* auto-update the active account */
231 g_signal_connect (G_OBJECT(priv->from_field), "changed", G_CALLBACK(on_from_combo_changed), obj);
233 priv->to_field = gtk_entry_new_with_max_length (80);
234 priv->cc_field = gtk_entry_new_with_max_length (80);
235 priv->bcc_field = gtk_entry_new_with_max_length (80);
236 priv->subject_field = gtk_entry_new_with_max_length (80);
238 header_table = gtk_table_new (5,2, FALSE);
240 gtk_table_attach (GTK_TABLE(header_table), gtk_label_new (_("From:")),
241 0,1,0,1, GTK_SHRINK, 0, 0, 0);
242 gtk_table_attach (GTK_TABLE(header_table), to_button, 0,1,1,2, GTK_SHRINK, 0, 0, 0);
243 gtk_table_attach (GTK_TABLE(header_table), cc_button, 0,1,2,3, GTK_SHRINK, 0, 0, 0);
244 gtk_table_attach (GTK_TABLE(header_table), bcc_button, 0,1,3,4, GTK_SHRINK, 0, 0, 0);
245 gtk_table_attach (GTK_TABLE(header_table), gtk_label_new (_("Subject:")),
246 0,1,4,5, GTK_SHRINK, 0, 0, 0);
248 gtk_table_attach_defaults (GTK_TABLE(header_table), priv->from_field, 1,2,0,1);
249 gtk_table_attach_defaults (GTK_TABLE(header_table), priv->to_field, 1,2,1,2);
250 gtk_table_attach_defaults (GTK_TABLE(header_table), priv->cc_field, 1,2,2,3);
251 gtk_table_attach_defaults (GTK_TABLE(header_table), priv->bcc_field, 1,2,3,4);
252 gtk_table_attach_defaults (GTK_TABLE(header_table), priv->subject_field,1,2,4,5);
254 priv->msg_body = gtk_html_new ();
255 gtk_html_load_empty (GTK_HTML (priv->msg_body));
256 gtk_html_set_editable (GTK_HTML (priv->msg_body), TRUE);
258 main_vbox = gtk_vbox_new (FALSE, 0);
260 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
262 gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
263 gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
264 gtk_box_pack_start (GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 0);
266 msg_vbox = gtk_vbox_new (FALSE, 0);
267 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), msg_vbox);
269 gtk_box_pack_start (GTK_BOX(msg_vbox), header_table, FALSE, FALSE, 0);
270 gtk_box_pack_start (GTK_BOX(msg_vbox), priv->msg_body, TRUE, TRUE, 0);
272 gtk_widget_show_all (GTK_WIDGET(main_vbox));
273 gtk_container_add (GTK_CONTAINER(obj), main_vbox);
278 modest_msg_edit_window_finalize (GObject *obj)
280 ModestMsgEditWindowPrivate *priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(obj);
282 /* These had to stay alive for as long as the comboboxes that used them: */
283 modest_pair_list_free (priv->from_field_protos);
285 G_OBJECT_CLASS(parent_class)->finalize (obj);
291 on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgEditWindow *self)
293 modest_window_save_state (MODEST_WINDOW(self));
299 set_msg (ModestMsgEditWindow *self, TnyMsg *msg)
302 const gchar *to, *cc, *bcc, *subject;
303 ModestMsgEditWindowPrivate *priv;
306 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self));
307 g_return_if_fail (TNY_IS_MSG (msg));
309 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (self);
311 header = tny_msg_get_header (msg);
312 to = tny_header_get_to (header);
313 cc = tny_header_get_cc (header);
314 bcc = tny_header_get_bcc (header);
315 subject = tny_header_get_subject (header);
318 gtk_entry_set_text (GTK_ENTRY(priv->to_field), to);
320 gtk_entry_set_text (GTK_ENTRY(priv->cc_field), cc);
322 gtk_entry_set_text (GTK_ENTRY(priv->bcc_field), bcc);
324 gtk_entry_set_text (GTK_ENTRY(priv->subject_field), subject);
327 body = modest_tny_msg_get_body (msg, FALSE, NULL);
328 gtk_html_set_editable (GTK_HTML (priv->msg_body), FALSE);
330 gtk_html_load_from_string (GTK_HTML (priv->msg_body), body, -1);
332 gtk_html_set_editable (GTK_HTML (priv->msg_body), TRUE);
338 modest_msg_edit_window_new (TnyMsg *msg, const gchar *account,
339 gboolean preserve_is_rich)
341 ModestMsgEditWindow *self;
342 ModestMsgEditWindowPrivate *priv;
343 ModestWindowPrivate *parent_priv;
344 GtkActionGroup *action_group;
345 GError *error = NULL;
347 g_return_val_if_fail (msg, NULL);
349 self = MODEST_MSG_EDIT_WINDOW(g_object_new(MODEST_TYPE_MSG_EDIT_WINDOW, NULL));
350 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(self);
351 parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
353 parent_priv->ui_manager = gtk_ui_manager_new();
354 action_group = gtk_action_group_new ("ModestMsgEditWindowActions");
356 /* Add common actions */
357 gtk_action_group_add_actions (action_group,
358 modest_msg_edit_action_entries,
359 G_N_ELEMENTS (modest_msg_edit_action_entries),
361 gtk_action_group_add_toggle_actions (action_group,
362 modest_msg_edit_toggle_action_entries,
363 G_N_ELEMENTS (modest_msg_edit_toggle_action_entries),
365 gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0);
366 g_object_unref (action_group);
368 /* Load the UI definition */
369 gtk_ui_manager_add_ui_from_file (parent_priv->ui_manager,
370 MODEST_UIDIR "modest-msg-edit-window-ui.xml",
373 g_printerr ("modest: could not merge modest-msg-edit-window-ui.xml: %s\n", error->message);
374 g_error_free (error);
379 /* Add accelerators */
380 gtk_window_add_accel_group (GTK_WINDOW (self),
381 gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
383 /* Toolbar / Menubar */
384 priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar");
385 priv->menubar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar");
387 gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
390 init_window (MODEST_MSG_EDIT_WINDOW(self), account);
392 restore_settings (MODEST_MSG_EDIT_WINDOW(self));
394 gtk_window_set_title (GTK_WINDOW(self), "Modest");
395 gtk_window_set_icon_from_file (GTK_WINDOW(self), MODEST_APP_ICON, NULL);
397 g_signal_connect (G_OBJECT(self), "delete-event",
398 G_CALLBACK(on_delete_event), self);
402 return MODEST_WINDOW(self);
406 html_export_save_buffer (gpointer engine,
411 *buffer = g_string_append (*buffer, data);
417 modest_msg_edit_window_get_msg_data (ModestMsgEditWindow *edit_window)
421 const gchar *account_name;
422 gchar *from_string = NULL;
423 ModestMsgEditWindowPrivate *priv;
426 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (edit_window), NULL);
428 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (edit_window);
430 account_name = (gchar*)modest_combo_box_get_active_id (MODEST_COMBO_BOX (priv->from_field));
432 from_string = modest_account_mgr_get_from_string (
433 modest_runtime_get_account_mgr(), account_name);
435 g_printerr ("modest: cannot get from string\n");
441 data = g_slice_new0 (MsgData);
442 data->from = from_string; /* will be freed when data is freed */
443 data->to = g_strdup (gtk_entry_get_text (GTK_ENTRY(priv->to_field)));
444 data->cc = g_strdup ( gtk_entry_get_text (GTK_ENTRY(priv->cc_field)));
445 data->bcc = g_strdup ( gtk_entry_get_text (GTK_ENTRY(priv->bcc_field)));
446 data->subject = g_strdup ( gtk_entry_get_text (GTK_ENTRY(priv->subject_field)));
448 /* GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->msg_body)); */
449 /* GtkTextIter b, e; */
450 /* gtk_text_buffer_get_bounds (buf, &b, &e); */
451 /* data->plain_body = gtk_text_buffer_get_text (buf, &b, &e, FALSE); /\* Returns a copy. *\/ */
453 buffer = g_string_new ("");
454 gtk_html_export (GTK_HTML (priv->msg_body), "text/html", (GtkHTMLSaveReceiverFn) html_export_save_buffer, &buffer);
455 data->html_body = g_string_free (buffer, FALSE);
456 buffer = g_string_new ("");
457 gtk_html_export (GTK_HTML (priv->msg_body), "text/plain", (GtkHTMLSaveReceiverFn) html_export_save_buffer, &buffer);
458 data->plain_body = g_string_free (buffer, FALSE);
464 modest_msg_edit_window_free_msg_data (ModestMsgEditWindow *edit_window,
467 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (edit_window));
475 g_free (data->subject);
476 g_free (data->plain_body);
477 g_free (data->html_body);
479 /* TODO: Free data->attachments? */
481 g_slice_free (MsgData, data);
484 /* Rich formatting API functions */
486 modest_msg_edit_window_get_format (ModestMsgEditWindow *self)
488 return MODEST_MSG_EDIT_FORMAT_TEXT;
492 modest_msg_edit_window_set_format (ModestMsgEditWindow *self,
493 ModestMsgEditFormat format)
496 case MODEST_MSG_EDIT_FORMAT_TEXT:
498 case MODEST_MSG_EDIT_FORMAT_HTML:
499 g_message ("HTML format not supported in Gnome ModestMsgEditWindow");
506 ModestMsgEditFormatState *
507 modest_msg_edit_window_get_format_state (ModestMsgEditWindow *self)
509 ModestMsgEditFormatState *format_state;
511 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (self), NULL);
513 format_state = g_new0 (ModestMsgEditFormatState, 1);
519 modest_msg_edit_window_set_format_state (ModestMsgEditWindow *self,
520 const ModestMsgEditFormatState *format_state)
522 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (self));
524 /* Ends silently as set_format_state should do nothing when edit window format
530 modest_msg_edit_window_select_color (ModestMsgEditWindow *window)
532 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
534 g_message ("Select color operation is not supported");
538 modest_msg_edit_window_select_file_format (ModestMsgEditWindow *window,
541 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
543 g_message ("Select file format operation is not supported");
547 modest_msg_edit_window_select_font (ModestMsgEditWindow *window)
549 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
551 g_message ("Select font operation is not supported");
555 modest_msg_edit_window_select_background_color (ModestMsgEditWindow *window)
557 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
559 g_message ("Select background color operation is not supported");
563 modest_msg_edit_window_insert_image (ModestMsgEditWindow *window)
565 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
567 g_message ("Insert image operation is not supported");
571 modest_msg_edit_window_attach_file (ModestMsgEditWindow *window)
573 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
575 g_message ("Attach file operation is not supported");
579 modest_msg_edit_window_remove_attachments (ModestMsgEditWindow *window,
582 g_return_if_fail (MODEST_MSG_EDIT_WINDOW (window));
584 g_message ("Remove attachments operation is not supported");
588 modest_msg_edit_window_get_parts_size (ModestMsgEditWindow *window,
597 modest_msg_edit_window_show_cc (ModestMsgEditWindow *window,
600 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
602 g_message ("not implemented yet %s", __FUNCTION__);
605 modest_msg_edit_window_show_bcc (ModestMsgEditWindow *window,
608 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
610 g_message ("not implemented yet %s", __FUNCTION__);
613 modest_msg_edit_window_undo (ModestMsgEditWindow *window)
615 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
617 g_message ("not implemented yet %s", __FUNCTION__);
620 modest_msg_edit_window_toggle_fullscreen (ModestMsgEditWindow *window)
622 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
624 g_message ("not implemented yet %s", __FUNCTION__);
627 modest_msg_edit_window_set_priority_flags (ModestMsgEditWindow *window,
628 TnyHeaderFlags priority_flags)
630 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
632 g_message ("not implemented yet %s", __FUNCTION__);
637 modest_msg_edit_window_select_contacts (ModestMsgEditWindow *window)
639 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
641 g_message ("not implemented yet %s", __FUNCTION__);
645 modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to_addressbook)
647 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window), FALSE);
649 g_message ("not implemented yet %s", __FUNCTION__);
654 modest_msg_edit_window_set_file_format (ModestMsgEditWindow *window,
657 g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window));
659 g_message ("not implemented yet %s", __FUNCTION__);
663 modest_msg_edit_window_get_sent (ModestMsgEditWindow *window)
665 ModestMsgEditWindowPrivate *priv;
667 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window);
672 modest_msg_edit_window_set_sent (ModestMsgEditWindow *window,
675 ModestMsgEditWindowPrivate *priv;
677 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE(window);
682 modest_msg_edit_window_get_child_widget (ModestMsgEditWindow *win,
683 ModestMsgEditWindowWidgetType widget_type)
685 ModestMsgEditWindowPrivate *priv;
687 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), NULL);
688 priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (win);
690 switch (widget_type) {
691 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY:
692 return priv->msg_body;
694 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_TO:
695 return priv->to_field;
697 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_CC:
698 return priv->cc_field;
700 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BCC:
701 return priv->bcc_field;
703 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_SUBJECT:
704 return priv->subject_field;
706 case MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_ATTACHMENTS:
715 /* FUNCTIONS NOT IMPLEMENTED YET */
718 modest_msg_edit_window_set_modified (ModestMsgEditWindow *window,
721 g_message (__FUNCTION__);
725 modest_msg_edit_window_toggle_find_toolbar (ModestMsgEditWindow *window,
728 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
732 modest_msg_edit_window_add_part (ModestMsgEditWindow *window,
735 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
739 modest_msg_edit_window_redo (ModestMsgEditWindow *window)
741 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
745 modest_msg_edit_window_offer_attach_file (ModestMsgEditWindow *window)
747 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
751 modest_msg_edit_window_attach_file_one (ModestMsgEditWindow *window, const gchar *file_uri)
753 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
757 modest_msg_edit_window_set_draft (ModestMsgEditWindow *window,
760 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
764 modest_msg_edit_window_is_modified (ModestMsgEditWindow *window)
766 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
771 modest_msg_edit_window_get_clipboard_text (ModestMsgEditWindow *win)
773 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
778 modest_msg_edit_window_can_redo (ModestMsgEditWindow *window)
780 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
784 modest_msg_edit_window_can_undo (ModestMsgEditWindow *window)
786 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);
791 modest_msg_edit_window_get_message_uid (ModestMsgEditWindow *window)
793 g_message ("NOT IMPLEMENTED %s", __FUNCTION__);