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.
32 #endif /*HAVE_CONFIG_H*/
35 #include "modest-ui-dimming-rules.h"
36 #include "modest-ui-actions.h"
37 #include "modest-dimming-rule.h"
38 #include "modest-debug.h"
39 #include "modest-tny-folder.h"
40 #include "modest-tny-account.h"
41 #include "modest-tny-msg.h"
42 #include "modest-tny-mime-part.h"
43 #include "modest-text-utils.h"
44 #include <modest-address-book.h>
45 #include <widgets/modest-attachments-view.h>
46 #include <modest-runtime.h>
47 #include <tny-simple-list.h>
48 #include <widgets/modest-recpt-editor.h>
49 #include <gtkhtml/gtkhtml.h>
50 #ifdef MODEST_TOOLKIT_HILDON2
51 #include <modest-header-window.h>
55 static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
56 static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique, ModestDimmingRule *rule);
57 static gboolean _invalid_attach_selected (ModestWindow *win,
58 gboolean unique, gboolean for_view, gboolean for_remove,
59 ModestDimmingRule *rule);
60 static gboolean _purged_attach_selected (ModestWindow *win, gboolean all, ModestDimmingRule *rule);
61 static gboolean _clipboard_is_empty (ModestWindow *win);
62 static gboolean _invalid_clipboard_selected (ModestWindow *win, ModestDimmingRule *rule);
63 static gboolean _selected_folder_not_writeable (ModestMainWindow *win, gboolean for_paste);
64 static gboolean _selected_folder_not_moveable (ModestMainWindow *win);
65 static gboolean _selected_folder_not_renameable (ModestMainWindow *win);
66 static gboolean _selected_folder_not_deletable (ModestMainWindow *win);
67 static gboolean _selected_folder_is_any_of_type (ModestWindow *win, TnyFolderType types[], guint ntypes);
68 static gboolean _selected_folder_is_root_or_inbox (ModestMainWindow *win);
69 static gboolean _selected_folder_is_root (ModestMainWindow *win);
70 static gboolean _header_view_is_all_selected (ModestMainWindow *win);
71 static gboolean _selected_folder_is_empty (ModestMainWindow *win);
72 static gboolean _folder_view_has_focus (ModestWindow *win);
73 static gboolean _selected_folder_is_same_as_source (ModestWindow *win);
74 static gboolean _msg_download_in_progress (ModestWindow *win);
75 static gboolean _msg_download_completed (ModestMainWindow *win);
76 static gboolean _selected_msg_sent_in_progress (ModestWindow *win);
77 static gboolean _invalid_folder_for_purge (ModestWindow *win, ModestDimmingRule *rule);
78 static gboolean _transfer_mode_enabled (ModestWindow *win);
79 static gboolean _selected_folder_has_subfolder_with_same_name (ModestWindow *win);
80 static void fill_list_of_caches (gpointer key, gpointer value, gpointer userdata);
84 _define_main_window_dimming_state (ModestMainWindow *window)
86 DimmedState *state = NULL;
87 GtkWidget *focused_widget = NULL;
88 GtkWidget *header_view = NULL;
89 GtkTreeModel *model = NULL;
90 TnyList *selected_headers = NULL;
91 TnyIterator *iter = NULL;
92 TnyHeader *header = NULL;
93 ModestCacheMgr *cache_mgr = NULL;
94 GHashTable *send_queue_cache = NULL;
95 ModestTnySendQueue *send_queue = NULL;
96 GSList *send_queues = NULL, *node = NULL;
97 ModestWindowMgr *mgr = NULL;
98 gboolean found = FALSE;
99 gchar *msg_uid = NULL;
100 TnyHeaderFlags flags;
101 gboolean all_deleted = TRUE;
102 gboolean all_seen = TRUE;
103 gboolean all_cached = TRUE;
104 gboolean all_has_attach = TRUE;
105 TnyFolder *folder = NULL;
107 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(window), NULL);
110 state = g_slice_new0 (DimmedState);
111 state->n_selected = 0;
112 state->already_opened_msg = 0;
113 state->any_marked_as_deleted = FALSE;
114 state->all_marked_as_deleted = FALSE;
115 state->any_marked_as_seen = FALSE;
116 state->all_marked_as_seen = FALSE;
117 state->any_marked_as_cached = FALSE;
118 state->all_marked_as_cached = FALSE;
119 state->any_has_attachments = FALSE;
120 state->all_has_attachments = FALSE;
121 state->sent_in_progress = FALSE;
122 state->all_selected = FALSE;
124 /* Get focused widget */
125 focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
126 if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
129 } else if (MODEST_IS_HEADER_VIEW (focused_widget)) {
130 header_view = focused_widget;
132 header_view = modest_main_window_get_child_widget (window, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
135 /* Get header view and selected headers */
136 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
137 if (!selected_headers)
140 /* Examine selected headers */
141 iter = tny_list_create_iterator (selected_headers);
142 while (!tny_iterator_is_done (iter)) {
143 header = TNY_HEADER (tny_iterator_get_current (iter));
144 flags = tny_header_get_flags (header);
150 mgr = modest_runtime_get_window_mgr ();
151 if (modest_window_mgr_find_registered_header (mgr, header, NULL))
152 state->already_opened_msg++;
155 /* Mark as deleted */
156 all_deleted = all_deleted && (flags & TNY_HEADER_FLAG_DELETED);
157 state->all_marked_as_deleted = all_deleted;
158 if (!state->any_marked_as_deleted)
159 state->any_marked_as_deleted = flags & TNY_HEADER_FLAG_DELETED;
162 all_seen = all_seen && (flags & TNY_HEADER_FLAG_SEEN);
163 state->all_marked_as_seen = all_seen;
164 if (!state->any_marked_as_seen)
165 state->any_marked_as_seen = flags & TNY_HEADER_FLAG_SEEN;
168 all_cached = all_cached && (flags & TNY_HEADER_FLAG_CACHED);
169 state->all_marked_as_cached = all_cached;
170 if (!state->any_marked_as_cached)
171 state->any_marked_as_cached = flags & TNY_HEADER_FLAG_CACHED;
173 /* Mark has_attachments */
174 all_has_attach = all_has_attach && (flags & TNY_HEADER_FLAG_ATTACHMENTS);
175 state->all_has_attachments = all_has_attach;
176 if (!state->any_has_attachments)
177 state->any_has_attachments = flags & TNY_HEADER_FLAG_ATTACHMENTS;
179 /* sent in progress */
180 folder = tny_header_get_folder (header);
182 if (modest_tny_folder_guess_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX) {
183 msg_uid = modest_tny_send_queue_get_msg_id (header);
184 if (!state->sent_in_progress) {
185 cache_mgr = modest_runtime_get_cache_mgr ();
186 send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
187 MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
189 g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
191 for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
192 send_queue = MODEST_TNY_SEND_QUEUE (node->data);
194 /* Check if msg uid is being processed inside send queue */
195 found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);
197 state->sent_in_progress = found;
200 g_object_unref (folder);
202 tny_iterator_next (iter);
203 g_object_unref (header);
206 /* check if all the headers are selected or not */
207 model = gtk_tree_view_get_model(GTK_TREE_VIEW(header_view));
210 count = gtk_tree_model_iter_n_children(model, NULL);
211 if(state->n_selected == count)
212 state->all_selected = TRUE;
217 g_object_unref(selected_headers);
218 g_object_unref(iter);
219 g_slist_free (send_queues);
225 _define_msg_view_window_dimming_state (ModestMsgViewWindow *window)
227 DimmedState *state = NULL;
228 TnyHeader *header = NULL;
229 ModestCacheMgr *cache_mgr = NULL;
230 GHashTable *send_queue_cache = NULL;
231 ModestTnySendQueue *send_queue = NULL;
232 GSList *send_queues = NULL, *node = NULL;
233 gboolean found = FALSE;
234 gchar *msg_uid = NULL;
235 TnyHeaderFlags flags;
236 gboolean all_deleted = TRUE;
237 gboolean all_seen = TRUE;
238 gboolean all_cached = TRUE;
239 gboolean all_has_attach = TRUE;
241 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(window), NULL);
244 state = g_slice_new0 (DimmedState);
245 state->n_selected = 0;
246 state->already_opened_msg = 0;
247 state->any_marked_as_deleted = FALSE;
248 state->all_marked_as_deleted = FALSE;
249 state->any_marked_as_seen = FALSE;
250 state->all_marked_as_seen = FALSE;
251 state->any_marked_as_cached = FALSE;
252 state->all_marked_as_cached = FALSE;
253 state->any_has_attachments = FALSE;
254 state->all_has_attachments = FALSE;
255 state->sent_in_progress = FALSE;
257 header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(window));
260 g_return_val_if_fail (TNY_IS_HEADER(header), state);
261 flags = tny_header_get_flags (header);
266 /* Mark as deleted */
267 all_deleted = all_deleted && (flags & TNY_HEADER_FLAG_DELETED);
268 state->all_marked_as_deleted = all_deleted;
269 if (!state->any_marked_as_deleted)
270 state->any_marked_as_deleted = flags & TNY_HEADER_FLAG_DELETED;
273 all_seen = all_seen && (flags & TNY_HEADER_FLAG_SEEN);
274 state->all_marked_as_seen = all_seen;
275 if (!state->any_marked_as_seen)
276 state->any_marked_as_seen = flags & TNY_HEADER_FLAG_SEEN;
279 all_cached = all_cached && (flags & TNY_HEADER_FLAG_CACHED);
280 state->all_marked_as_cached = all_cached;
281 if (!state->any_marked_as_cached)
282 state->any_marked_as_cached = flags & TNY_HEADER_FLAG_CACHED;
284 /* Mark has_attachments */
285 all_has_attach = all_has_attach && (flags & TNY_HEADER_FLAG_ATTACHMENTS);
286 state->all_has_attachments = all_has_attach;
287 if (!state->any_has_attachments)
288 state->any_has_attachments = (flags & TNY_HEADER_FLAG_ATTACHMENTS)?1:0;
290 /* sent in progress */
291 msg_uid = modest_tny_send_queue_get_msg_id (header);
292 if (!state->sent_in_progress) {
293 cache_mgr = modest_runtime_get_cache_mgr ();
294 send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
295 MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
297 g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
299 for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
300 send_queue = MODEST_TNY_SEND_QUEUE (node->data);
302 /* Check if msg uid is being processed inside send queue */
303 found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);
305 state->sent_in_progress = found;
310 g_object_unref (header);
311 g_slist_free (send_queues);
318 modest_ui_dimming_rules_define_dimming_state (ModestWindow *window)
320 DimmedState *state = NULL;
322 g_return_val_if_fail (MODEST_IS_WINDOW(window), NULL);
324 if (MODEST_IS_MAIN_WINDOW (window))
325 state = _define_main_window_dimming_state (MODEST_MAIN_WINDOW(window));
326 else if (MODEST_IS_MSG_VIEW_WINDOW (window)) {
327 state = _define_msg_view_window_dimming_state (MODEST_MSG_VIEW_WINDOW(window));
334 modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data)
336 ModestDimmingRule *rule = NULL;
337 gboolean dimmed = FALSE;
339 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
340 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
341 rule = MODEST_DIMMING_RULE (user_data);
343 /* Check dimmed rule */
344 if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
345 dimmed = _msg_download_in_progress (win);
347 modest_dimming_rule_set_notification (rule, "");
348 } else if (MODEST_IS_MAIN_WINDOW(win)) {
349 dimmed = !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(),
352 modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined"));
359 modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
361 ModestDimmingRule *rule = NULL;
362 GtkWidget *folder_view = NULL;
363 TnyFolderStore *parent_folder = NULL;
364 gboolean dimmed = FALSE;
366 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
367 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
368 rule = MODEST_DIMMING_RULE (user_data);
370 dimmed = _transfer_mode_enabled (win);
372 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error"));
376 /* Get selected folder as parent of new folder to create */
377 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
378 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
379 if (!folder_view) /* folder view may not have been created yet */
382 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
386 if (TNY_IS_ACCOUNT (parent_folder)) {
387 /* If it's the local account then do not dim */
388 if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder))) {
391 ModestProtocolType protocol_type = modest_tny_account_get_protocol_type (TNY_ACCOUNT (parent_folder));
392 if (protocol_type != MODEST_PROTOCOL_REGISTRY_TYPE_INVALID) {
393 ModestProtocolRegistry *protocol_registry;
395 protocol_registry = modest_runtime_get_protocol_registry ();
396 /* If account does not support folders (pop) then dim */
397 dimmed = (!modest_protocol_registry_protocol_type_has_tag (protocol_registry, protocol_type,
398 MODEST_PROTOCOL_REGISTRY_STORE_HAS_FOLDERS));
400 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error"));
404 TnyFolderType types[3];
406 types[0] = TNY_FOLDER_TYPE_DRAFTS;
407 types[1] = TNY_FOLDER_TYPE_OUTBOX;
408 types[2] = TNY_FOLDER_TYPE_SENT;
410 /* Apply folder rules */
412 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win), FALSE);
414 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error"));
417 dimmed = _selected_folder_is_any_of_type (win, types, 3);
419 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_create_error"));
423 /* if not the folder is selected then dim */
424 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
425 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
426 if (folder_view && !gtk_widget_is_focus (folder_view))
429 g_object_unref (parent_folder);
435 modest_ui_dimming_rules_on_delete (ModestWindow *win, gpointer user_data)
437 ModestDimmingRule *rule = NULL;
438 GtkWidget *folder_view = NULL;
439 GtkWidget *header_view = NULL;
440 gboolean dimmed = FALSE;
442 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
443 rule = MODEST_DIMMING_RULE (user_data);
445 if (MODEST_IS_MAIN_WINDOW (win)) {
446 /* Get the folder view */
447 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
448 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
450 /* Get header view */
451 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
452 MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
454 if (header_view && gtk_widget_is_focus (header_view))
455 dimmed = modest_ui_dimming_rules_on_delete_msg (win, rule);
457 if (folder_view && gtk_widget_is_focus (folder_view))
458 dimmed = modest_ui_dimming_rules_on_delete_folder (win, rule);
460 if (header_view && folder_view &&
461 !gtk_widget_is_focus (header_view) &&
462 !gtk_widget_is_focus (folder_view)) {
464 modest_dimming_rule_set_notification (rule, dgettext("hildon-common-strings", "ckct_ib_nothing_to_delete"));
467 #ifdef MODEST_TOOLKIT_HILDON2
468 } else if (MODEST_IS_HEADER_WINDOW (win)) {
471 dimmed = _transfer_mode_enabled (win);
474 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
477 GtkWidget *header_view;
480 header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
481 folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
483 dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
484 g_object_unref (folder);
490 dimmed = modest_ui_dimming_rules_on_delete_folder (win, rule);
499 modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
501 ModestDimmingRule *rule = NULL;
502 TnyFolderType types[6];
503 gboolean dimmed = FALSE;
505 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
506 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
507 rule = MODEST_DIMMING_RULE (user_data);
509 types[0] = TNY_FOLDER_TYPE_DRAFTS;
510 types[1] = TNY_FOLDER_TYPE_OUTBOX;
511 types[2] = TNY_FOLDER_TYPE_SENT;
512 types[3] = TNY_FOLDER_TYPE_INBOX;
513 types[4] = TNY_FOLDER_TYPE_ROOT;
514 types[5] = TNY_FOLDER_TYPE_ARCHIVE;
517 /* Check dimmed rule */
518 dimmed = _selected_folder_not_deletable (MODEST_MAIN_WINDOW(win));
520 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error"));
522 dimmed = _selected_folder_is_any_of_type (win, types, 6);
524 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error"));
527 dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
529 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_delete_error"));
532 dimmed = _transfer_mode_enabled (win);
534 modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
541 modest_ui_dimming_rules_on_sort (ModestWindow *win, gpointer user_data)
543 ModestDimmingRule *rule = NULL;
544 gboolean dimmed = FALSE;
546 #ifdef MODEST_TOOLKIT_HILDON2
547 if (MODEST_IS_HEADER_WINDOW (win)) {
552 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
553 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
554 rule = MODEST_DIMMING_RULE (user_data);
556 /* Check dimmed rule */
557 dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
560 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
567 modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
569 ModestDimmingRule *rule = NULL;
570 TnyFolderType types[4];
571 gboolean dimmed = FALSE;
573 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
574 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
575 rule = MODEST_DIMMING_RULE (user_data);
577 types[0] = TNY_FOLDER_TYPE_DRAFTS;
578 types[1] = TNY_FOLDER_TYPE_OUTBOX;
579 types[2] = TNY_FOLDER_TYPE_SENT;
580 types[3] = TNY_FOLDER_TYPE_ARCHIVE;
582 /* Check dimmed rule */
583 dimmed = _selected_folder_not_renameable (MODEST_MAIN_WINDOW(win));
585 modest_dimming_rule_set_notification (rule, "");
587 dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
589 modest_dimming_rule_set_notification (rule, "");
592 dimmed = _selected_folder_is_any_of_type (win, types, 4);
594 modest_dimming_rule_set_notification (rule, "");
597 dimmed = _transfer_mode_enabled (win);
599 modest_dimming_rule_set_notification (rule, "");
606 modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data)
608 ModestDimmingRule *rule = NULL;
609 gboolean dimmed = FALSE;
610 const DimmedState *state = NULL;
612 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
613 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
614 rule = MODEST_DIMMING_RULE (user_data);
615 state = modest_window_get_dimming_state (win);
617 /* Check dimmed rule */
618 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
620 dimmed = state->any_marked_as_deleted;
622 gchar *msg = modest_ui_actions_get_msg_already_deleted_error_msg (win);
623 modest_dimming_rule_set_notification (rule, msg);
628 dimmed = _selected_msg_sent_in_progress (win);
630 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_open_while_sent"));
637 modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
639 ModestDimmingRule *rule = NULL;
640 gboolean dimmed = FALSE;
641 TnyFolderType types[3];
643 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
644 rule = MODEST_DIMMING_RULE (user_data);
646 types[0] = TNY_FOLDER_TYPE_DRAFTS;
647 types[1] = TNY_FOLDER_TYPE_OUTBOX;
648 types[2] = TNY_FOLDER_TYPE_ROOT;
650 /* Check dimmed rule */
651 dimmed = _selected_folder_is_any_of_type (win, types, 3);
653 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
655 /* main window dimming rules */
656 if (MODEST_IS_MAIN_WINDOW(win)) {
659 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
661 modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply"));
664 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, rule);
666 /* msg view window dimming rules */
667 } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
669 /* Check dimmed rule */
671 dimmed = _transfer_mode_enabled (win);
673 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
676 dimmed = _msg_download_in_progress (win);
678 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
687 modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data)
689 ModestDimmingRule *rule = NULL;
690 gboolean dimmed = FALSE;
692 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
693 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
694 rule = MODEST_DIMMING_RULE (user_data);
696 /* Check dimmed rule */
697 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
699 dimmed = _msg_download_completed (MODEST_MAIN_WINDOW(win));
701 modest_dimming_rule_set_notification (rule, "");
708 modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data)
710 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
716 _message_already_sent (ModestMsgViewWindow *view_window)
720 gboolean already_sent = FALSE;
722 header = modest_msg_view_window_get_header (view_window);
724 folder = tny_header_get_folder (header);
726 if (modest_tny_folder_guess_folder_type (folder) ==
727 TNY_FOLDER_TYPE_OUTBOX) {
728 ModestTnySendQueueStatus status =
729 modest_tny_all_send_queues_get_msg_status (header);
730 if (status == MODEST_TNY_SEND_QUEUE_UNKNOWN ||
731 status == MODEST_TNY_SEND_QUEUE_SENDING)
734 g_object_unref (folder);
736 g_object_unref (header);
743 modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
745 ModestDimmingRule *rule = NULL;
746 const DimmedState *state = NULL;
747 gboolean dimmed = FALSE;
749 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
750 rule = MODEST_DIMMING_RULE (user_data);
751 state = modest_window_get_dimming_state (win);
753 /* Check dimmed rule */
754 if (MODEST_IS_MAIN_WINDOW (win)) {
755 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
757 modest_dimming_rule_set_notification (rule, _CS("ckct_ib_nothing_to_delete"));
759 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
762 dimmed = state->sent_in_progress;
764 modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
767 dimmed = state->any_marked_as_deleted;
769 gchar *msg = modest_ui_actions_get_msg_already_deleted_error_msg (win);
770 modest_dimming_rule_set_notification (rule, msg);
775 dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
777 gchar *message = NULL;
779 message = g_strdup_printf(_("mcen_nc_unable_to_delete_n_messages"),
780 state->already_opened_msg);
781 modest_dimming_rule_set_notification (rule, message);
787 else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
788 dimmed = _transfer_mode_enabled (win);
790 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
792 dimmed = state->any_marked_as_deleted;
794 gchar *msg = modest_ui_actions_get_msg_already_deleted_error_msg (win);
795 modest_dimming_rule_set_notification (rule, msg);
800 dimmed = state->sent_in_progress;
802 modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
805 /* This could happen if we're viewing a message of the
806 outbox that has been already sent */
808 dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
810 /* The delete button should be dimmed when viewing an attachment,
811 * but should be enabled when viewing a message from the list,
812 * or when viewing a search result.
815 if (!modest_msg_view_window_is_search_result (MODEST_MSG_VIEW_WINDOW(win))) {
816 dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
818 modest_dimming_rule_set_notification (rule, _CS("ckct_ib_unable_to_delete"));
828 modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
830 ModestDimmingRule *rule = NULL;
831 GtkWidget *header_view = NULL;
832 gboolean dimmed = FALSE;
834 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
835 rule = MODEST_DIMMING_RULE (user_data);
837 /* main window dimming rules */
838 if (MODEST_IS_MAIN_WINDOW(win)) {
840 /* Check dimmed rule */
841 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
842 MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
844 /* If the header view has the focus: */
845 if (header_view && gtk_widget_is_focus (header_view)) {
846 /* Check dimmed rule */
848 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
851 /* If the folder view has the focus: */
852 GtkWidget *folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
853 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
854 if (folder_view && gtk_widget_is_focus (folder_view)) {
855 TnyFolderStore *folder_store
856 = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
858 /* Only enable for folders, not accounts,
859 * though the UI spec is not clear about that.
860 * If we enable this for accounts then we must
861 * add code to handle them in modest_ui_actions_on_details(). */
862 if (!TNY_IS_FOLDER(folder_store)) {
864 modest_dimming_rule_set_notification (rule, "");
867 g_object_unref (folder_store);
870 modest_dimming_rule_set_notification (rule, "");
873 dimmed = _msg_download_in_progress (win);
875 modest_dimming_rule_set_notification (rule, "");
883 /* msg view window dimming rules */
885 /* Check dimmed rule */
886 if (MODEST_IS_MSG_VIEW_WINDOW (win))
887 dimmed = _msg_download_in_progress (win);
889 modest_dimming_rule_set_notification (rule, "");
890 if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
891 if (!modest_msg_view_window_is_search_result (MODEST_MSG_VIEW_WINDOW(win))) {
892 dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW (win));
895 modest_dimming_rule_set_notification (rule, "");
904 modest_ui_dimming_rules_on_mark_as_read_msg_in_view (ModestWindow *win, gpointer user_data)
906 ModestDimmingRule *rule = NULL;
908 TnyHeaderFlags flags;
909 gboolean dimmed = FALSE;
912 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
913 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
914 rule = MODEST_DIMMING_RULE (user_data);
916 header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
922 flags = tny_header_get_flags (header);
923 if (flags & TNY_HEADER_FLAG_SEEN)
928 g_object_unref (header);
934 modest_ui_dimming_rules_on_mark_as_unread_msg_in_view (ModestWindow *win, gpointer user_data)
936 ModestDimmingRule *rule = NULL;
938 TnyHeaderFlags flags;
939 gboolean dimmed = FALSE;
942 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
943 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
944 rule = MODEST_DIMMING_RULE (user_data);
946 header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
952 flags = tny_header_get_flags (header);
953 if (!(flags & TNY_HEADER_FLAG_SEEN))
958 g_object_unref (header);
963 modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data)
965 ModestDimmingRule *rule = NULL;
966 TnyHeaderFlags flags;
967 const DimmedState *state = NULL;
968 gboolean dimmed = FALSE;
970 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
971 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
972 rule = MODEST_DIMMING_RULE (user_data);
973 state = modest_window_get_dimming_state (win);
975 flags = TNY_HEADER_FLAG_SEEN;
977 /* Check dimmed rule */
978 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
980 dimmed = state->all_marked_as_seen;
982 modest_dimming_rule_set_notification (rule, "");
989 modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data)
991 ModestDimmingRule *rule = NULL;
992 TnyHeaderFlags flags;
993 const DimmedState *state = NULL;
994 gboolean dimmed = FALSE;
996 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
997 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
998 rule = MODEST_DIMMING_RULE (user_data);
999 state = modest_window_get_dimming_state (win);
1001 flags = TNY_HEADER_FLAG_SEEN;
1003 /* Check dimmed rule */
1004 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
1006 dimmed = !state->any_marked_as_seen;
1008 modest_dimming_rule_set_notification (rule, "");
1015 modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data)
1017 ModestDimmingRule *rule = NULL;
1018 gboolean dimmed = FALSE;
1020 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1021 rule = MODEST_DIMMING_RULE (user_data);
1023 if (MODEST_IS_MAIN_WINDOW (win))
1024 dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data);
1025 #ifdef MODEST_TOOLKIT_HILDON2
1026 else if (MODEST_IS_HEADER_WINDOW (win))
1027 dimmed = modest_ui_dimming_rules_on_header_window_move_to (win, user_data);
1029 else if (MODEST_IS_MSG_VIEW_WINDOW (win))
1030 dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data);
1037 modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data)
1039 GtkWidget *folder_view = NULL;
1040 ModestDimmingRule *rule = NULL;
1041 const DimmedState *state = NULL;
1042 gboolean dimmed = FALSE;
1044 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE);
1045 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1046 rule = MODEST_DIMMING_RULE (user_data);
1047 state = modest_window_get_dimming_state (win);
1049 /* Get the folder view */
1050 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
1051 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
1054 /* Check diming rules for folders transfer */
1055 if (folder_view && gtk_widget_is_focus (folder_view)) {
1056 TnyFolderType types[5];
1058 types[0] = TNY_FOLDER_TYPE_DRAFTS;
1059 types[1] = TNY_FOLDER_TYPE_OUTBOX;
1060 types[2] = TNY_FOLDER_TYPE_SENT;
1061 types[3] = TNY_FOLDER_TYPE_ROOT;
1062 types[4] = TNY_FOLDER_TYPE_INBOX;
1064 /* Apply folder rules */
1065 dimmed = _selected_folder_not_moveable (MODEST_MAIN_WINDOW(win));
1067 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
1069 dimmed = _selected_folder_is_any_of_type (win, types, 5);
1071 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
1075 /* Check diming rules for messages transfer */
1077 dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
1079 gchar *message = g_strdup_printf(_("emev_nc_unabletomove_items"),
1080 state->already_opened_msg);
1081 modest_dimming_rule_set_notification (rule, message);
1086 if (!(folder_view && gtk_widget_is_focus (folder_view)))
1087 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
1091 dimmed = _selected_msg_sent_in_progress (win);
1093 modest_dimming_rule_set_notification (rule, _("sfil_ib_unable_to_move_selected_items"));
1100 modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data)
1102 ModestDimmingRule *rule = NULL;
1103 gboolean dimmed = FALSE;
1105 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1106 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1107 rule = MODEST_DIMMING_RULE (user_data);
1109 /* Check dimmed rule */
1110 dimmed = _transfer_mode_enabled (win);
1112 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
1114 dimmed = modest_window_get_dimming_state (win)->any_marked_as_deleted;
1116 gchar *msg = modest_ui_actions_get_msg_already_deleted_error_msg (win);
1117 modest_dimming_rule_set_notification (rule, msg);
1123 dimmed = _selected_msg_sent_in_progress (win);
1125 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_item"));
1128 /* This could happen if we're viewing a message of the outbox
1129 that has been already sent */
1131 dimmed = _message_already_sent (MODEST_MSG_VIEW_WINDOW(win));
1134 if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
1135 /* The move_to button should be dimmed when viewing an attachment,
1136 * but should be enabled when viewing a message from the list,
1137 * or when viewing a search result.
1139 if (!modest_msg_view_window_is_search_result (MODEST_MSG_VIEW_WINDOW(win))) {
1140 dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW (win));
1145 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_item"));
1152 modest_ui_dimming_rules_on_header_window_move_to (ModestWindow *win, gpointer user_data)
1154 ModestDimmingRule *rule = NULL;
1155 gboolean dimmed = FALSE;
1157 g_return_val_if_fail (MODEST_IS_HEADER_WINDOW(win), FALSE);
1158 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1159 rule = MODEST_DIMMING_RULE (user_data);
1161 /* Check dimmed rule */
1162 dimmed = _transfer_mode_enabled (win);
1164 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
1167 GtkWidget *header_view;
1170 header_view = GTK_WIDGET (modest_header_window_get_header_view (MODEST_HEADER_WINDOW (win)));
1171 folder = modest_header_view_get_folder (MODEST_HEADER_VIEW (header_view));
1173 dimmed = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
1174 g_object_unref (folder);
1182 modest_ui_dimming_rules_on_find_msg (ModestWindow *win, gpointer user_data)
1184 ModestDimmingRule *rule = NULL;
1185 gboolean dimmed = FALSE;
1187 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1188 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1189 rule = MODEST_DIMMING_RULE (user_data);
1191 /* Check dimmed rule */
1192 dimmed = _transfer_mode_enabled (win);
1194 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
1200 modest_ui_dimming_rules_on_paste (ModestWindow *win, gpointer user_data)
1202 ModestDimmingRule *rule = NULL;
1203 TnyFolderType types[3];
1204 gboolean dimmed = FALSE;
1206 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
1207 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1208 rule = MODEST_DIMMING_RULE (user_data);
1210 types[0] = TNY_FOLDER_TYPE_DRAFTS;
1211 types[1] = TNY_FOLDER_TYPE_OUTBOX;
1212 types[2] = TNY_FOLDER_TYPE_SENT;
1214 /* Check dimmed rule */
1215 dimmed = _clipboard_is_empty (win);
1217 modest_dimming_rule_set_notification (rule,
1218 dgettext("hildon-common-strings",
1219 "ecoc_ib_edwin_nothing_to_paste"));
1221 dimmed = _selected_folder_is_any_of_type (win, types, 3);
1223 modest_dimming_rule_set_notification (rule,
1224 dgettext("hildon-common-strings",
1225 "ckct_ib_unable_to_paste_here"));
1228 dimmed = !_folder_view_has_focus (win);
1230 modest_dimming_rule_set_notification (rule,
1231 dgettext("hildon-common-strings",
1232 "ckct_ib_unable_to_paste_here"));
1235 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win), TRUE);
1237 modest_dimming_rule_set_notification (rule,
1238 dgettext("hildon-common-strings",
1239 "ckct_ib_unable_to_paste_here"));
1242 dimmed = _selected_folder_is_same_as_source (win);
1244 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_copy_target_error"));
1247 dimmed = _selected_folder_has_subfolder_with_same_name (win);
1249 modest_dimming_rule_set_notification (rule, _("mail_in_ui_folder_copy_target_error"));
1257 modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data)
1259 ModestDimmingRule *rule = NULL;
1260 gboolean dimmed = FALSE;
1261 GtkWidget *focused = NULL;
1263 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
1264 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1265 rule = MODEST_DIMMING_RULE (user_data);
1267 focused = gtk_window_get_focus (GTK_WINDOW (win));
1269 /* Main window dimming rules */
1270 if (MODEST_IS_MAIN_WINDOW (win))
1271 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
1273 if (!dimmed && MODEST_IS_MAIN_WINDOW (win))
1274 dimmed = _header_view_is_all_selected (MODEST_MAIN_WINDOW(win));
1276 if (!dimmed && GTK_IS_ENTRY (focused)) {
1277 const gchar *current_text;
1278 current_text = gtk_entry_get_text (GTK_ENTRY (focused));
1279 dimmed = ((current_text == NULL) || (current_text[0] == '\0'));
1282 if (!dimmed && GTK_IS_TEXT_VIEW (focused)) {
1283 GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused));
1284 dimmed = (gtk_text_buffer_get_char_count (buffer) < 1);
1287 if (dimmed && MODEST_IS_ATTACHMENTS_VIEW (focused))
1293 modest_ui_dimming_rules_on_view_attachments (ModestWindow *win, gpointer user_data)
1295 ModestDimmingRule *rule = NULL;
1296 gboolean dimmed = FALSE;
1298 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1299 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1300 rule = MODEST_DIMMING_RULE (user_data);
1302 /* Check dimmed rule */
1303 dimmed = _invalid_attach_selected (win, TRUE, TRUE, FALSE, rule);
1306 dimmed = _purged_attach_selected (win, FALSE, NULL);
1308 modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
1316 modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_data)
1318 ModestDimmingRule *rule = NULL;
1319 gboolean dimmed = FALSE;
1321 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1322 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1323 rule = MODEST_DIMMING_RULE (user_data);
1325 /* Check dimmed rule */
1326 dimmed = _invalid_attach_selected (win, FALSE, FALSE, FALSE, rule);
1329 dimmed = _purged_attach_selected (win, FALSE, NULL);
1331 modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
1339 modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data)
1341 ModestDimmingRule *rule = NULL;
1342 const DimmedState *state = NULL;
1343 gboolean dimmed = FALSE;
1345 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
1346 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1347 rule = MODEST_DIMMING_RULE (user_data);
1348 state = modest_window_get_dimming_state (win);
1350 /* Check in main window if there's only one message selected */
1351 if (MODEST_IS_MAIN_WINDOW (win)) {
1352 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW (win), TRUE, rule);
1355 /* Check in view window if there's any attachment selected */
1356 if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
1357 dimmed = _invalid_attach_selected (win, FALSE, FALSE, TRUE, NULL);
1359 modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected"));
1362 /* Messages as attachments could not be removed */
1363 if (!dimmed && MODEST_IS_MSG_VIEW_WINDOW (win)) {
1364 TnyList *attachments;
1366 attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW (win));
1368 iter = tny_list_create_iterator (attachments);
1369 while (!tny_iterator_is_done (iter) && !dimmed) {
1370 TnyMimePart *mime_part = (TnyMimePart *)
1371 tny_iterator_get_current (iter);
1372 if (modest_tny_mime_part_is_msg (mime_part))
1374 g_object_unref (mime_part);
1375 tny_iterator_next (iter);
1377 g_object_unref (iter);
1378 g_object_unref (attachments);
1384 dimmed = _selected_msg_sent_in_progress (win);
1386 modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
1390 /* cannot purge in editable drafts nor pop folders */
1392 dimmed = _invalid_folder_for_purge (win, rule);
1394 modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
1397 /* Check if the selected message in main window has attachments */
1398 if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
1399 dimmed = !(state->any_has_attachments);
1401 modest_dimming_rule_set_notification (rule, _("mail_ib_unable_to_purge_attachments"));
1404 /* Check if all attachments are already purged */
1406 dimmed = _purged_attach_selected (win, TRUE, rule);
1409 /* Check if the message is already downloaded */
1410 if (!dimmed && MODEST_IS_MAIN_WINDOW (win)) {
1411 dimmed = !_msg_download_completed (MODEST_MAIN_WINDOW (win));
1413 modest_dimming_rule_set_notification (rule, _("mail_ib_attach_not_local"));
1420 modest_ui_dimming_rules_on_undo (ModestWindow *win, gpointer user_data)
1422 ModestDimmingRule *rule = NULL;
1423 gboolean dimmed = FALSE;
1425 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1426 rule = MODEST_DIMMING_RULE (user_data);
1428 /* Check dimmed rule */
1429 if (MODEST_IS_MAIN_WINDOW (win)) {
1430 dimmed = _clipboard_is_empty (win);
1432 modest_dimming_rule_set_notification (rule, "");
1435 if (!dimmed && MODEST_IS_MSG_EDIT_WINDOW (win)) {
1436 dimmed = !modest_msg_edit_window_can_undo (MODEST_MSG_EDIT_WINDOW (win));
1443 modest_ui_dimming_rules_on_redo (ModestWindow *win, gpointer user_data)
1445 ModestDimmingRule *rule = NULL;
1446 gboolean dimmed = FALSE;
1448 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1449 rule = MODEST_DIMMING_RULE (user_data);
1451 /* Check dimmed rule */
1452 if (MODEST_IS_MSG_EDIT_WINDOW (win)) {
1453 dimmed = !modest_msg_edit_window_can_redo (MODEST_MSG_EDIT_WINDOW (win));
1460 modest_ui_dimming_rules_on_cut (ModestWindow *win, gpointer user_data)
1462 ModestDimmingRule *rule = NULL;
1463 const DimmedState *state = NULL;
1464 gboolean dimmed = FALSE;
1466 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1467 rule = MODEST_DIMMING_RULE (user_data);
1468 state = modest_window_get_dimming_state (win);
1470 /* Check common dimming rules */
1471 dimmed = _invalid_clipboard_selected (win, rule);
1473 /* Check window specific dimming rules */
1474 if (MODEST_IS_MAIN_WINDOW (win)) {
1475 /* Get focused widget */
1476 GtkWidget *focused = gtk_window_get_focus (GTK_WINDOW (win));
1478 if (MODEST_IS_HEADER_VIEW (focused)) {
1480 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
1482 modest_dimming_rule_set_notification (rule, "");
1485 dimmed = _selected_msg_sent_in_progress (win);
1487 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
1490 dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
1492 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_cut_mess"));
1495 else if (MODEST_IS_FOLDER_VIEW (focused)) {
1496 TnyFolderType types[3];
1498 types[0] = TNY_FOLDER_TYPE_DRAFTS;
1499 types[1] = TNY_FOLDER_TYPE_OUTBOX;
1500 types[2] = TNY_FOLDER_TYPE_SENT;
1502 /* Apply folder rules */
1504 dimmed = _selected_folder_not_deletable (MODEST_MAIN_WINDOW(win));
1506 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
1509 dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
1511 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
1514 dimmed = _selected_folder_is_any_of_type (win, types, 3);
1516 modest_dimming_rule_set_notification (rule, _("emev_nc_unabletomove_items"));
1525 modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data)
1527 ModestDimmingRule *rule = NULL;
1528 const DimmedState *state = NULL;
1529 gboolean dimmed = FALSE;
1531 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1532 rule = MODEST_DIMMING_RULE (user_data);
1533 state = modest_window_get_dimming_state (win);
1535 /* Check common dimming rules */
1536 dimmed = _invalid_clipboard_selected (win, rule);
1538 /* Check window specific dimming rules */
1539 if (MODEST_IS_MAIN_WINDOW (win)) {
1540 /* Get focused widget */
1541 GtkWidget *focused = gtk_window_get_focus (GTK_WINDOW (win));
1543 if (MODEST_IS_HEADER_VIEW (focused)) {
1545 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
1547 modest_dimming_rule_set_notification (rule, "");
1550 dimmed = _selected_msg_sent_in_progress (win);
1552 modest_dimming_rule_set_notification (rule, _(""));
1555 dimmed = (state->already_opened_msg > 0) ? TRUE : FALSE;
1557 modest_dimming_rule_set_notification (rule, _(""));
1560 else if (MODEST_IS_FOLDER_VIEW (focused)) {
1561 TnyFolderType types[3];
1563 types[0] = TNY_FOLDER_TYPE_DRAFTS;
1564 types[1] = TNY_FOLDER_TYPE_OUTBOX;
1565 types[2] = TNY_FOLDER_TYPE_SENT;
1568 dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
1570 modest_dimming_rule_set_notification (rule, _(""));
1573 dimmed = _selected_folder_is_any_of_type (win, types, 3);
1575 modest_dimming_rule_set_notification (rule, _(""));
1584 modest_ui_dimming_rules_on_set_style (ModestWindow *win, gpointer user_data)
1586 ModestDimmingRule *rule = NULL;
1587 const DimmedState *state = NULL;
1588 gboolean dimmed = FALSE;
1590 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1591 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
1592 rule = MODEST_DIMMING_RULE (user_data);
1593 state = modest_window_get_dimming_state (win);
1596 /* Check common dimming rules */
1597 ModestMsgEditFormat format;
1598 format = modest_msg_edit_window_get_format (MODEST_MSG_EDIT_WINDOW (win));
1600 dimmed = (format != MODEST_MSG_EDIT_FORMAT_HTML);
1602 modest_dimming_rule_set_notification (rule, _("mcen_ib_item_unavailable_plaintext"));
1606 body = modest_msg_edit_window_get_child_widget (MODEST_MSG_EDIT_WINDOW (win),
1607 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
1609 dimmed = ((body == NULL)||(!gtk_widget_is_focus (body)));
1611 modest_dimming_rule_set_notification (rule, _("mcen_ib_move_cursor_to_message"));
1619 modest_ui_dimming_rules_on_zoom (ModestWindow *win, gpointer user_data)
1621 ModestDimmingRule *rule = NULL;
1622 const DimmedState *state = NULL;
1623 gboolean dimmed = FALSE;
1625 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1626 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
1627 rule = MODEST_DIMMING_RULE (user_data);
1628 state = modest_window_get_dimming_state (win);
1631 body = modest_msg_edit_window_get_child_widget (MODEST_MSG_EDIT_WINDOW (win),
1632 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
1634 dimmed = ((body == NULL)||(!gtk_widget_is_focus (body)));
1636 modest_dimming_rule_set_notification (rule, _("mcen_ib_move_cursor_to_message"));
1642 modest_ui_dimming_rules_on_editor_paste (ModestWindow *win, gpointer user_data)
1644 ModestDimmingRule *rule = NULL;
1645 const DimmedState *state = NULL;
1646 gboolean dimmed = FALSE;
1647 GtkWidget *focused = NULL;
1649 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1650 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
1651 rule = MODEST_DIMMING_RULE (user_data);
1652 state = modest_window_get_dimming_state (win);
1654 focused = gtk_window_get_focus (GTK_WINDOW (win));
1656 dimmed = MODEST_IS_ATTACHMENTS_VIEW (focused);
1659 dimmed = GTK_IS_TOGGLE_BUTTON (focused);
1663 ModestEmailClipboard *e_clipboard = modest_runtime_get_email_clipboard ();
1664 const gchar *clipboard_text = modest_msg_edit_window_get_clipboard_text (MODEST_MSG_EDIT_WINDOW (win));
1666 dimmed = modest_email_clipboard_cleared (e_clipboard) &&
1667 ((clipboard_text == NULL) || (clipboard_text[0] == '\0'));
1674 modest_ui_dimming_rules_on_editor_remove_attachment (ModestWindow *win, gpointer user_data)
1676 ModestDimmingRule *rule = NULL;
1677 const DimmedState *state = NULL;
1678 gboolean dimmed = FALSE;
1679 TnyList *selected_attachments = NULL;
1680 gint n_att_selected = 0;
1681 GtkWidget *attachments_view;
1683 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1684 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
1685 rule = MODEST_DIMMING_RULE (user_data);
1686 state = modest_window_get_dimming_state (win);
1688 attachments_view = modest_msg_edit_window_get_child_widget (
1689 MODEST_MSG_EDIT_WINDOW (win),
1690 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_ATTACHMENTS);
1692 selected_attachments = modest_attachments_view_get_selection (
1693 MODEST_ATTACHMENTS_VIEW (attachments_view));
1694 n_att_selected = tny_list_get_length (selected_attachments);
1695 g_object_unref (selected_attachments);
1697 dimmed = (n_att_selected < 1);
1703 modest_ui_dimming_rules_on_send (ModestWindow *win, gpointer user_data)
1705 ModestDimmingRule *rule = NULL;
1706 const DimmedState *state = NULL;
1707 gboolean dimmed = FALSE;
1708 GtkWidget *subject_field, *body_field;
1709 GtkTextBuffer *body_buffer;
1710 const gchar *subject = NULL;
1712 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1713 g_return_val_if_fail (MODEST_IS_MSG_EDIT_WINDOW (win), TRUE);
1714 rule = MODEST_DIMMING_RULE (user_data);
1715 state = modest_window_get_dimming_state (win);
1717 body_field = modest_msg_edit_window_get_child_widget (
1718 MODEST_MSG_EDIT_WINDOW (win),
1719 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BODY);
1720 subject_field = modest_msg_edit_window_get_child_widget (
1721 MODEST_MSG_EDIT_WINDOW (win),
1722 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_SUBJECT);
1723 body_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (body_field));
1724 subject = gtk_entry_get_text (GTK_ENTRY (subject_field));
1726 dimmed = (subject == NULL || subject[0] == '\0');
1728 modest_dimming_rule_set_notification (rule, _("mcen_ib_subject_not_modified"));
1731 GtkWidget *to_field, *cc_field, *bcc_field;
1732 GtkTextBuffer * to_buffer, *cc_buffer, *bcc_buffer;
1733 cc_field = modest_msg_edit_window_get_child_widget (
1734 MODEST_MSG_EDIT_WINDOW (win),
1735 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_CC);
1736 to_field = modest_msg_edit_window_get_child_widget (
1737 MODEST_MSG_EDIT_WINDOW (win),
1738 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_TO);
1739 bcc_field = modest_msg_edit_window_get_child_widget (
1740 MODEST_MSG_EDIT_WINDOW (win),
1741 MODEST_MSG_EDIT_WINDOW_WIDGET_TYPE_BCC);
1742 to_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (to_field));
1743 cc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (cc_field));
1744 bcc_buffer = modest_recpt_editor_get_buffer (MODEST_RECPT_EDITOR (bcc_field));
1746 dimmed = ((gtk_text_buffer_get_char_count (to_buffer) +
1747 gtk_text_buffer_get_char_count (cc_buffer) +
1748 gtk_text_buffer_get_char_count (bcc_buffer)) == 0);
1750 modest_dimming_rule_set_notification (rule, _("mcen_ib_add_recipients_first"));
1757 modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data)
1759 ModestDimmingRule *rule = NULL;
1760 gboolean dimmed = FALSE;
1762 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1763 rule = MODEST_DIMMING_RULE (user_data);
1765 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1767 /* Check dimmed rule */
1768 dimmed = _transfer_mode_enabled (win);
1770 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
1773 dimmed = modest_msg_view_window_first_message_selected (
1774 MODEST_MSG_VIEW_WINDOW(win));
1775 modest_dimming_rule_set_notification (rule, NULL);
1782 modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data)
1784 ModestDimmingRule *rule = NULL;
1785 gboolean dimmed = FALSE;
1787 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
1788 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1789 rule = MODEST_DIMMING_RULE (user_data);
1791 /* Check dimmed rule */
1792 dimmed = _transfer_mode_enabled (win);
1794 modest_dimming_rule_set_notification (rule, _("mail_ib_notavailable_downloading"));
1797 dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW (win));
1798 modest_dimming_rule_set_notification (rule, NULL);
1806 modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data)
1808 return !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(),
1813 modest_ui_dimming_rules_on_cancel_sending (ModestWindow *win, gpointer user_data)
1815 ModestDimmingRule *rule = NULL;
1816 TnyFolderType types[1];
1817 const DimmedState *state = NULL;
1818 gboolean dimmed = FALSE;
1820 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
1821 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1822 rule = MODEST_DIMMING_RULE (user_data);
1823 state = modest_window_get_dimming_state (win);
1825 types[0] = TNY_FOLDER_TYPE_OUTBOX;
1827 /* Check dimmed rules */
1828 dimmed = !_selected_folder_is_any_of_type (win, types, 1);
1830 modest_dimming_rule_set_notification (rule, "");
1832 dimmed = !state->sent_in_progress;
1834 modest_dimming_rule_set_notification (rule, "");
1841 modest_ui_dimming_rules_on_cancel_sending_all (ModestWindow *win, gpointer user_data)
1843 /* TODO: implement dimming rule for cancelling sending all messages. Should
1844 * be just cancelling all messages to put them in "waiting" state */
1849 modest_ui_dimming_rules_on_send_receive (ModestWindow *win, gpointer user_data)
1851 ModestDimmingRule *rule = NULL;
1852 gboolean dimmed = FALSE;
1854 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1855 rule = MODEST_DIMMING_RULE (user_data);
1857 /* Check dimmed rule */
1858 dimmed = !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(),
1861 modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined"));
1867 modest_ui_dimming_rules_on_send_receive_all (ModestWindow *win, gpointer user_data)
1869 ModestDimmingRule *rule = NULL;
1870 gboolean dimmed = FALSE;
1872 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1873 rule = MODEST_DIMMING_RULE (user_data);
1875 /* Check dimmed rule */
1876 GSList *account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr (), TRUE);
1877 if (g_slist_length (account_names) <= 1)
1880 modest_dimming_rule_set_notification (rule, _("mcen_nc_no_email_acnts_defined"));
1882 modest_account_mgr_free_account_names (account_names);
1887 #ifdef MODEST_TOOLKIT_HILDON2
1889 modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_data)
1892 GSList *recipients, *node;
1893 gboolean has_recipients_to_add;
1895 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1896 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE);
1898 msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win));
1899 recipients = modest_tny_msg_get_all_recipients_list (msg);
1901 has_recipients_to_add = FALSE;
1902 for (node = recipients; node != NULL; node = g_slist_next (node)) {
1903 if (!modest_address_book_has_address ((const gchar *) node->data)) {
1904 has_recipients_to_add = TRUE;
1909 g_slist_foreach (recipients, (GFunc) g_free, NULL);
1910 g_slist_free (recipients);
1911 g_object_unref (msg);
1913 return !has_recipients_to_add;
1917 modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_data)
1919 ModestDimmingRule *rule = NULL;
1920 gboolean dimmed = FALSE;
1921 GtkWidget *focused = NULL;
1923 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
1924 rule = MODEST_DIMMING_RULE (user_data);
1925 focused = gtk_window_get_focus (GTK_WINDOW (win));
1930 gchar *selection = NULL;
1931 if (GTK_IS_TEXT_VIEW (focused)) {
1932 GtkTextIter start, end;
1933 GtkTextBuffer *buffer = NULL;
1934 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused));
1935 if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) {
1936 selection = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
1938 } else if (GTK_IS_LABEL (focused)) {
1939 selection = modest_text_utils_label_get_selection (GTK_LABEL (focused));
1941 gboolean do_check = TRUE;
1942 GtkClipboard *clipboard;
1943 if (GTK_IS_HTML (focused)) {
1946 sel = gtk_html_get_selection_html (GTK_HTML (focused), &len);
1947 do_check = !((sel == NULL) || (sel[0] == '\0'));
1948 } else if (MODEST_IS_ATTACHMENTS_VIEW (focused)) {
1952 clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
1953 selection = gtk_clipboard_wait_for_text (clipboard);
1958 dimmed = !((selection != NULL) && (modest_text_utils_validate_recipient (selection, NULL)));
1965 /* *********************** static utility functions ******************** */
1969 _selected_folder_not_writeable (ModestMainWindow *win,
1972 GtkWidget *folder_view = NULL;
1973 TnyFolderStore *parent_folder = NULL;
1974 ModestEmailClipboard *clipboard = NULL;
1975 ModestTnyFolderRules rules;
1976 gboolean is_local_acc = FALSE;
1977 gboolean xfer_folders = FALSE;
1978 gboolean result = FALSE;
1980 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
1982 /* Get folder view */
1983 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
1984 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
1985 /* If no folder view, always dimmed */
1989 /* Get selected folder as parent of new folder to create */
1990 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
1991 if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) {
1992 /* If it's the local account and its transfering folders, then do not dim */
1993 if (TNY_IS_ACCOUNT (parent_folder)) {
1994 is_local_acc = modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (parent_folder));
1996 clipboard = modest_runtime_get_email_clipboard ();
1997 xfer_folders = modest_email_clipboard_folder_copied (clipboard);
2002 result = !(is_local_acc && xfer_folders);
2004 result = !is_local_acc;
2008 /* Check dimmed rule */
2009 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
2010 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
2014 if (parent_folder != NULL)
2015 g_object_unref (parent_folder);
2021 _selected_folder_not_deletable (ModestMainWindow *win)
2023 GtkWidget *folder_view = NULL;
2024 TnyFolderStore *parent_folder = NULL;
2025 ModestTnyFolderRules rules;
2026 gboolean result = FALSE;
2028 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2030 /* Get folder view */
2031 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2032 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2033 /* If no folder view, always dimmed */
2037 /* Get selected folder as parent of new folder to create */
2038 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2039 if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) {
2044 /* Check dimmed rule */
2045 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
2046 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_DELETABLE;
2050 if (parent_folder != NULL)
2051 g_object_unref (parent_folder);
2057 _selected_folder_not_moveable (ModestMainWindow *win)
2059 GtkWidget *folder_view = NULL;
2060 TnyFolderStore *parent_folder = NULL;
2061 ModestTnyFolderRules rules;
2062 gboolean result = FALSE;
2064 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2066 /* Get folder view */
2067 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2068 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2069 /* If no folder view, always dimmed */
2073 /* Get selected folder as parent of new folder to create */
2074 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2075 if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) {
2080 /* Check dimmed rule */
2081 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
2082 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE;
2086 if (parent_folder != NULL)
2087 g_object_unref (parent_folder);
2093 _selected_folder_not_renameable (ModestMainWindow *win)
2095 GtkWidget *folder_view = NULL;
2096 TnyFolderStore *parent_folder = NULL;
2097 ModestTnyFolderRules rules;
2098 gboolean result = FALSE;
2100 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2102 /* Get folder view */
2103 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2104 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2105 /* If no folder view, always dimmed */
2109 /* Get selected folder as parent of new folder to create */
2110 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2111 if (!(parent_folder && TNY_IS_FOLDER(parent_folder))) {
2116 /* Check dimmed rule */
2117 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
2118 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_RENAMEABLE;
2122 if (parent_folder != NULL)
2123 g_object_unref (parent_folder);
2129 _selected_folder_is_root_or_inbox (ModestMainWindow *win)
2131 TnyFolderType types[2];
2132 gboolean result = FALSE;
2134 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2136 types[0] = TNY_FOLDER_TYPE_ROOT;
2137 types[1] = TNY_FOLDER_TYPE_INBOX;
2139 /* Check folder type */
2140 result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 2);
2142 /* Check pop and MMC accounts */
2144 result = _selected_folder_is_root (win);
2152 _selected_folder_is_root (ModestMainWindow *win)
2154 TnyFolderType types[1];
2155 gboolean result = FALSE;
2157 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2159 /* All accounts are root items: */
2160 GtkWidget *folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2161 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2163 gboolean is_account = FALSE;
2164 TnyFolderStore *folder_store =
2165 modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2167 is_account = TNY_IS_ACCOUNT (folder_store);
2169 g_object_unref (folder_store);
2170 folder_store = NULL;
2177 /* Try something more precise: */
2178 types[0] = TNY_FOLDER_TYPE_ROOT;
2180 /* Check folder type */
2181 result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 1);
2187 _header_view_is_all_selected (ModestMainWindow *win)
2189 const DimmedState *state = NULL;
2191 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
2193 state = modest_window_get_dimming_state (MODEST_WINDOW(win));
2195 return state->all_selected;
2199 _selected_folder_is_empty (ModestMainWindow *win)
2201 GtkWidget *folder_view = NULL, *header_view = NULL;
2202 TnyFolderStore *folder = NULL;
2203 gboolean result = FALSE;
2205 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2207 /* Get folder view */
2208 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2209 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2211 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2212 MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
2214 /* If no folder view, always dimmed */
2215 if (!folder_view || !header_view)
2218 /* Get selected folder as parent of new folder to create */
2219 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2220 if (!(folder && TNY_IS_FOLDER(folder))) {
2222 g_object_unref (folder);
2226 /* Check folder type */
2227 if (modest_header_view_is_empty (MODEST_HEADER_VIEW (header_view)) ||
2228 tny_folder_get_all_count (TNY_FOLDER (folder)) == 0)
2232 g_object_unref (folder);
2238 _folder_view_has_focus (ModestWindow *win)
2240 GtkWidget *folder_view = NULL;
2242 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2244 /* Get folder view */
2245 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2246 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2250 if (gtk_widget_is_focus(folder_view))
2257 _selected_folder_is_same_as_source (ModestWindow *win)
2259 ModestEmailClipboard *clipboard = NULL;
2260 GtkWidget *folder_view = NULL;
2261 TnyFolderStore *folder = NULL;
2262 gboolean result = FALSE;
2264 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2266 /* Get folder view */
2267 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2268 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2272 /* Get selected folder as destination folder */
2273 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2274 if (!(folder && TNY_IS_FOLDER(folder))) {
2279 /* Check clipboard is cleared */
2280 clipboard = modest_runtime_get_email_clipboard ();
2281 if (modest_email_clipboard_cleared (clipboard)) {
2286 /* Check source folder */
2287 result = modest_email_clipboard_check_source_folder (clipboard, TNY_FOLDER (folder));
2291 g_object_unref (folder);
2297 _selected_folder_is_any_of_type (ModestWindow *win,
2298 TnyFolderType types[],
2301 GtkWidget *folder_view = NULL;
2302 TnyFolderStore *folder = NULL;
2303 TnyFolderType folder_type;
2305 gboolean result = FALSE;
2307 /*Get current folder */
2308 if (MODEST_IS_MAIN_WINDOW(win)) {
2310 /* Get folder view */
2311 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2312 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2313 /* If no folder view, always dimmed */
2317 /* Get selected folder as parent of new folder to create */
2318 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2320 if (!(folder && TNY_IS_FOLDER(folder))) {
2322 g_object_unref (folder);
2326 /* Check folder type */
2327 result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes);
2329 else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
2330 folder_type = modest_msg_view_window_get_folder_type (MODEST_MSG_VIEW_WINDOW (win));
2331 for (i=0; i < ntypes; i++) {
2332 result = result || folder_type == types[i];
2339 g_object_unref (folder);
2345 _folder_is_any_of_type (TnyFolder *folder,
2346 TnyFolderType types[],
2349 TnyFolderType folder_type;
2350 gboolean result = FALSE;
2353 g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
2355 /* Get folder type */
2356 folder_type = modest_tny_folder_guess_folder_type (folder);
2357 if (folder_type == TNY_FOLDER_TYPE_INVALID)
2358 g_warning ("%s: BUG: TNY_FOLDER_TYPE_INVALID", __FUNCTION__);
2360 /* Check foler type */
2361 for (i=0; i < ntypes; i++) {
2362 result = result || folder_type == types[i];
2369 _clipboard_is_empty (ModestWindow *win)
2371 gboolean result = FALSE;
2373 if (MODEST_IS_MAIN_WINDOW (win)) {
2374 ModestEmailClipboard *clipboard = NULL;
2375 clipboard = modest_runtime_get_email_clipboard ();
2376 if (modest_email_clipboard_cleared (clipboard))
2384 _invalid_clipboard_selected (ModestWindow *win,
2385 ModestDimmingRule *rule)
2387 const DimmedState *state = NULL;
2388 gboolean result = FALSE;
2389 GtkWidget *focused = NULL;
2391 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
2392 state = modest_window_get_dimming_state (win);
2393 /* Get focuesed widget */
2394 focused = gtk_window_get_focus (GTK_WINDOW (win));
2396 if (MODEST_IS_MSG_EDIT_WINDOW (win)) {
2397 gboolean has_selection = FALSE;
2398 if (GTK_IS_TEXT_VIEW (focused)) {
2399 GtkTextBuffer *buffer = NULL;
2400 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused));
2401 has_selection = modest_text_utils_buffer_selection_is_valid (buffer);
2402 } else if (GTK_IS_EDITABLE (focused)) {
2403 has_selection = gtk_editable_get_selection_bounds (GTK_EDITABLE (focused), NULL, NULL);
2405 result = !has_selection;
2406 } else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
2408 MODEST_DEBUG_BLOCK (g_message ("FOCUSED %s", g_type_name (G_TYPE_FROM_INSTANCE (focused))););
2409 if (GTK_IS_LABEL (focused) &&
2410 !gtk_label_get_selection_bounds (GTK_LABEL (focused), NULL, NULL)) {
2412 } else if (GTK_IS_TEXT_VIEW (focused)) {
2413 GtkTextBuffer *buffer;
2414 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused));
2415 result = !gtk_text_buffer_get_has_selection (buffer);
2416 } else if (GTK_IS_HTML (focused)) {
2419 sel = gtk_html_get_selection_html (GTK_HTML (focused), &len);
2420 result = ((sel == NULL) || (sel[0] == '\0'));
2421 } else if (MODEST_IS_ATTACHMENTS_VIEW (focused)) {
2424 GtkClipboard *clipboard;
2427 clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
2428 /* Get clipboard selection*/
2429 selection = gtk_clipboard_wait_for_text (clipboard);
2431 result = (selection == NULL);
2439 modest_dimming_rule_set_notification (rule, "");
2442 else if (MODEST_IS_MAIN_WINDOW (win)) {
2444 result = state->n_selected == 0;
2446 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
2454 _invalid_attach_selected (ModestWindow *win,
2457 gboolean for_remove,
2458 ModestDimmingRule *rule)
2460 TnyList *attachments;
2462 TnyHeaderFlags flags;
2463 gboolean nested_attachments = FALSE;
2464 gboolean selected_messages = FALSE;
2465 const DimmedState *state = NULL;
2466 gboolean result = FALSE;
2468 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
2469 state = modest_window_get_dimming_state (win);
2471 if (MODEST_IS_MAIN_WINDOW (win)) {
2472 flags = TNY_HEADER_FLAG_ATTACHMENTS;
2474 result = !state->any_has_attachments;
2476 else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
2478 /* Get selected atachments */
2479 attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW(win));
2480 n_selected = tny_list_get_length (attachments);
2485 result = n_selected != 1;
2488 result = n_selected < 1;
2491 /* Check attached type (view operation not required) */
2492 if (!result && !for_view) {
2494 iter = tny_list_create_iterator (attachments);
2495 while (!tny_iterator_is_done (iter) && !result) {
2496 TnyMimePart *mime_part = TNY_MIME_PART (tny_iterator_get_current (iter));
2497 TnyList *nested_list = tny_simple_list_new ();
2499 if (!for_remove && modest_tny_mime_part_is_msg (mime_part)) {
2501 window_msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win));
2502 if ((TnyMimePart *) window_msg != mime_part) {
2503 selected_messages = TRUE;
2506 g_object_unref (window_msg);
2508 tny_mime_part_get_parts (mime_part, nested_list);
2509 if (!for_remove && tny_list_get_length (nested_list) > 0) {
2510 nested_attachments = TRUE;
2513 g_object_unref (nested_list);
2514 g_object_unref (mime_part);
2515 tny_iterator_next (iter);
2517 g_object_unref (iter);
2520 /* Set notifications */
2521 if (result && rule != NULL) {
2522 if (selected_messages) {
2523 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_save_attach_mail"));
2524 } else if (nested_attachments) {
2525 modest_dimming_rule_set_notification (rule, _("FIXME:unable to save attachments with nested elements"));
2526 } else if (n_selected == 0) {
2527 modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected"));
2528 } else if (unique) {
2529 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_display_more"));
2534 g_object_unref (attachments);
2541 _purged_attach_selected (ModestWindow *win, gboolean all, ModestDimmingRule *rule)
2543 TnyList *attachments = NULL;
2546 gint n_attachments = 0;
2547 gboolean result = FALSE;
2549 /* This should check if _all_ the attachments are already purged. If only some
2550 * of them are purged, then it does not cause dim as there's a confirmation dialog
2551 * for removing only local attachments */
2553 /* Get selected atachments */
2554 if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
2555 attachments = modest_msg_view_window_get_attachments (MODEST_MSG_VIEW_WINDOW(win));
2556 } else if (MODEST_IS_MAIN_WINDOW (win)) {
2557 /* If we're in main window, we won't know if there are already purged attachments */
2561 if (attachments == NULL)
2564 if (tny_list_get_length (attachments) == 0) {
2565 g_object_unref (attachments);
2569 iter = tny_list_create_iterator (attachments);
2570 while (!tny_iterator_is_done (iter)) {
2571 TnyMimePart *mime_part = TNY_MIME_PART (tny_iterator_get_current (iter));
2572 if (tny_mime_part_is_purged (mime_part)) {
2576 g_object_unref (mime_part);
2577 tny_iterator_next (iter);
2579 g_object_unref (iter);
2582 g_object_unref (attachments);
2585 result = (purged == n_attachments);
2587 result = (purged > 0);
2589 /* This string no longer exists, refer to NB#75415 for more info
2590 if (result && (rule != NULL))
2591 modest_dimming_rule_set_notification (rule, _("mail_ib_attachment_already_purged"));
2598 _invalid_msg_selected (ModestMainWindow *win,
2600 ModestDimmingRule *rule)
2602 GtkWidget *folder_view = NULL;
2603 const DimmedState *state = NULL;
2604 gboolean result = FALSE;
2606 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
2607 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), FALSE);
2608 state = modest_window_get_dimming_state (MODEST_WINDOW(win));
2610 /* Get folder view to check focus */
2611 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
2612 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2614 /* Check dimmed rule (TODO: check focus on widgets */
2616 result = ((state->n_selected == 0 ) ||
2617 (gtk_widget_is_focus (folder_view)));
2619 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
2621 if (!result && unique) {
2622 result = state->n_selected > 1;
2624 modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message"));
2632 _msg_download_in_progress (ModestWindow *win)
2634 gboolean result = FALSE;
2636 g_return_val_if_fail (MODEST_IS_WINDOW (win), FALSE);
2638 if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
2639 result = modest_msg_view_window_toolbar_on_transfer_mode (MODEST_MSG_VIEW_WINDOW(win));
2641 else if (MODEST_IS_MAIN_WINDOW (win)) {
2642 result = modest_main_window_transfer_mode_enabled (MODEST_MAIN_WINDOW(win));
2649 _msg_download_completed (ModestMainWindow *win)
2651 const DimmedState *state = modest_window_get_dimming_state (MODEST_WINDOW(win));
2652 return state->any_marked_as_cached;
2656 fill_list_of_caches (gpointer key, gpointer value, gpointer userdata)
2658 GSList **send_queues = (GSList **) userdata;
2659 *send_queues = g_slist_prepend (*send_queues, value);
2663 _selected_msg_sent_in_progress (ModestWindow *win)
2665 const DimmedState *state = modest_window_get_dimming_state (win);
2666 return state->sent_in_progress;
2671 _invalid_folder_for_purge (ModestWindow *win,
2672 ModestDimmingRule *rule)
2674 TnyFolder *folder = NULL;
2675 TnyAccount *account = NULL;
2676 gboolean result = FALSE;
2678 if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
2680 /* Get folder and account of message */
2681 TnyMsg *msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win));
2682 g_return_val_if_fail(msg != NULL, TRUE);
2683 folder = tny_msg_get_folder (msg);
2684 g_object_unref (msg);
2685 if (folder == NULL) {
2689 } else if (MODEST_IS_MAIN_WINDOW (win)) {
2690 GtkWidget *folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
2691 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2694 folder = (TnyFolder *) modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
2695 /* Could be a folder store */
2696 if (folder == NULL || ! TNY_IS_FOLDER (folder))
2699 g_return_val_if_reached (FALSE);
2701 account = modest_tny_folder_get_account (folder);
2702 if (account == NULL) goto frees;
2705 if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (account))) {
2706 TnyFolderType types[2];
2707 types[0] = TNY_FOLDER_TYPE_DRAFTS;
2708 types[1] = TNY_FOLDER_TYPE_OUTBOX;
2710 if (_selected_folder_is_any_of_type (win, types, 2)) {
2714 ModestProtocolType protocol_type = modest_tny_account_get_protocol_type (TNY_ACCOUNT (account));
2715 /* If it's a remote folder then dim */
2716 if (modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (),
2718 MODEST_PROTOCOL_REGISTRY_REMOTE_STORE_PROTOCOLS)) {
2725 g_object_unref (folder);
2726 if (account != NULL)
2727 g_object_unref (account);
2733 _transfer_mode_enabled (ModestWindow *win)
2735 gboolean result = FALSE;
2738 if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
2739 result = modest_msg_view_window_transfer_mode_enabled (MODEST_MSG_VIEW_WINDOW (win));
2740 } else if (MODEST_IS_MAIN_WINDOW(win)) {
2741 result = modest_main_window_transfer_mode_enabled (MODEST_MAIN_WINDOW (win));
2742 #ifdef MODEST_TOOLKIT_HILDON2
2743 } else if (MODEST_IS_HEADER_WINDOW (win)) {
2744 result = modest_header_window_transfer_mode_enabled (MODEST_HEADER_WINDOW (win));
2747 g_warning("_transfer_mode_enabled called with wrong window type");
2754 _selected_folder_has_subfolder_with_same_name (ModestWindow *win)
2756 GtkWidget *folder_view = NULL;
2757 TnyFolderStore *folder = NULL;
2758 ModestEmailClipboard *clipboard = NULL;
2759 const gchar *folder_name = NULL;
2760 gboolean result = FALSE;
2762 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE);
2764 /*Get current parent folder */
2765 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
2766 MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
2767 /* If no folder view, always dimmed */
2768 if (!folder_view) return FALSE;
2770 /* Get selected folder as parent of new folder to create */
2771 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
2772 if (!(folder && TNY_IS_FOLDER(folder))) goto frees;
2774 /* get modest clipboard and source folder */
2775 clipboard = modest_runtime_get_email_clipboard ();
2776 folder_name = modest_email_clipboard_get_folder_name (clipboard);
2777 if (folder_name == NULL) goto frees;
2779 /* Check source subfolders names */
2780 result = modest_tny_folder_has_subfolder_with_name (folder, folder_name,
2786 g_object_unref (folder);
2793 modest_ui_dimming_rules_on_save_to_drafts (ModestWindow *win,
2796 ModestDimmingRule *rule = NULL;
2798 g_return_val_if_fail (MODEST_MSG_EDIT_WINDOW (win), FALSE);
2799 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
2800 rule = MODEST_DIMMING_RULE (user_data);
2802 /* Check dimmed rule */
2803 return !modest_msg_edit_window_is_modified (MODEST_MSG_EDIT_WINDOW (win));
2807 modest_ui_dimming_rules_on_insert_image (ModestWindow *win,
2810 g_return_val_if_fail (MODEST_MSG_EDIT_WINDOW (win), FALSE);
2812 ModestMsgEditFormat format =
2813 modest_msg_edit_window_get_format (MODEST_MSG_EDIT_WINDOW (win));
2815 return (format != MODEST_MSG_EDIT_FORMAT_HTML);