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-dimming-rule.h"
37 #include "modest-tny-folder.h"
38 #include <modest-runtime.h>
41 static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
42 static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique, ModestDimmingRule *rule);
43 static gboolean _already_opened_msg (ModestWindow *win);
44 static gboolean _selected_msg_marked_as (ModestWindow *win, TnyHeaderFlags mask, gboolean opposite);
45 static gboolean _selected_folder_not_writeable (ModestMainWindow *win);
46 static gboolean _selected_folder_is_any_of_type (ModestMainWindow *win, TnyFolderType types[], guint ntypes);
47 static gboolean _selected_folder_is_root (ModestMainWindow *win);
48 static gboolean _selected_folder_is_empty (ModestMainWindow *win);
49 static gboolean _msg_download_in_progress (ModestMsgViewWindow *win);
50 static gboolean _msg_download_completed (ModestMainWindow *win);
51 static gboolean _msg_sent_in_progress (ModestWindow *win);
52 static gboolean _marked_as_deleted (ModestWindow *win);
56 modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data)
58 gboolean dimmed = FALSE;
60 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
62 /* Check dimmed rule */
64 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
70 modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
72 gboolean dimmed = FALSE;
73 GtkWidget *folder_view = NULL;
74 TnyFolderStore *parent_folder = NULL;
76 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
79 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
80 MODEST_WIDGET_TYPE_FOLDER_VIEW);
81 /* Get selected folder as parent of new folder to create */
82 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
86 if (TNY_IS_ACCOUNT (parent_folder)) {
87 /* If it's the local account then do not dim */
88 if (modest_tny_account_is_virtual_local_folders (
89 TNY_ACCOUNT (parent_folder)))
92 const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
93 /* If it's POP then dim */
94 dimmed = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
95 MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
98 /* TODO: the specs say that only one level of subfolder is allowed, is this true ? */
100 /* Apply folder rules */
101 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
108 modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
110 gboolean dimmed = FALSE;
112 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
114 /* Check dimmed rule */
116 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
118 dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
124 modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
126 gboolean dimmed = FALSE;
128 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
130 /* Check dimmed rule */
132 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
134 dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
140 modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data)
142 ModestDimmingRule *rule = NULL;
143 gboolean dimmed = FALSE;
145 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
146 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
147 rule = MODEST_DIMMING_RULE (user_data);
149 /* Check dimmed rule */
151 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
153 dimmed = _msg_sent_in_progress (win);
155 modest_dimming_rule_set_notification (rule, _("TEST"));
162 modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
164 ModestDimmingRule *rule = NULL;
165 gboolean dimmed = FALSE;
166 TnyFolderType types[3];
168 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
169 rule = MODEST_DIMMING_RULE (user_data);
171 /* main window dimming rules */
172 if (MODEST_IS_MAIN_WINDOW(win)) {
174 types[0] = TNY_FOLDER_TYPE_DRAFTS;
175 types[1] = TNY_FOLDER_TYPE_OUTBOX;
176 types[2] = TNY_FOLDER_TYPE_ROOT;
178 /* Check dimmed rule */
180 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
182 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
185 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
187 modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply"));
190 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, rule);
192 /* msg view window dimming rules */
193 } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
195 /* Check dimmed rule */
197 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
205 modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data)
207 gboolean dimmed = FALSE;
209 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
211 /* Check dimmed rule */
213 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
215 dimmed = _msg_download_completed (MODEST_MAIN_WINDOW(win));
221 modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data)
223 gboolean dimmed = FALSE;
225 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
227 /* Check dimmed rule */
235 modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
237 ModestDimmingRule *rule = NULL;
238 gboolean dimmed = FALSE;
240 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
241 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
242 rule = MODEST_DIMMING_RULE (user_data);
244 /* Check dimmed rule */
246 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
248 modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del"));
251 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
253 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
256 dimmed = _already_opened_msg (win);
258 modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages"));
261 dimmed = _marked_as_deleted (win);
263 modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
266 dimmed = _msg_sent_in_progress (win);
268 modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
275 modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
277 gboolean dimmed = FALSE;
278 GtkWidget *header_view = NULL;
280 /* main window dimming rules */
281 if (MODEST_IS_MAIN_WINDOW(win)) {
283 /* Check dimmed rule */
284 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
285 MODEST_WIDGET_TYPE_HEADER_VIEW);
287 /* If the header view does not have the focus then do
288 not apply msg dimming rules because the action will
289 show the folder details that have no dimming
291 if (gtk_widget_is_focus (header_view)) {
292 /* Check dimmed rule */
294 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
297 /* msg view window dimming rules */
300 /* Check dimmed rule */
302 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
310 modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data)
312 gboolean dimmed = FALSE;
313 TnyHeaderFlags flags;
315 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
317 flags = TNY_HEADER_FLAG_SEEN;
319 /* Check dimmed rule */
321 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
323 dimmed = _selected_msg_marked_as (win, flags, FALSE);
329 modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data)
331 gboolean dimmed = FALSE;
332 TnyHeaderFlags flags;
334 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
336 flags = TNY_HEADER_FLAG_SEEN;
338 /* Check dimmed rule */
340 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
342 dimmed = _selected_msg_marked_as (win, flags, TRUE);
348 modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data)
350 gboolean dimmed = FALSE;
352 if (MODEST_IS_MAIN_WINDOW (win))
353 dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data);
355 dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data);
362 modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data)
364 GtkWidget *folder_view = NULL;
365 GtkWidget *header_view = NULL;
366 gboolean dimmed = FALSE;
368 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE);
370 /* Get the folder view */
371 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
372 MODEST_WIDGET_TYPE_FOLDER_VIEW);
374 /* Get header view */
375 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
376 MODEST_WIDGET_TYPE_HEADER_VIEW);
378 /* Check common diming rules */
380 /* Check diming rules for folder transfer */
381 if (gtk_widget_is_focus (folder_view)) {
383 dimmed = _selected_folder_not_writeable(MODEST_MAIN_WINDOW(win));
385 /* Check diming rules for msg transfer */
386 else if (gtk_widget_is_focus (header_view)) {
388 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
396 modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data)
398 gboolean dimmed = FALSE;
404 modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data)
406 TnyFolderType types[3];
407 gboolean dimmed = FALSE;
409 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
411 types[0] = TNY_FOLDER_TYPE_DRAFTS;
412 types[1] = TNY_FOLDER_TYPE_OUTBOX;
413 types[2] = TNY_FOLDER_TYPE_SENT;
415 /* Check dimmed rule */
417 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
423 modest_ui_dimming_rules_on_delete_msgs (ModestWindow *win, gpointer user_data)
425 TnyFolderType types[5];
426 gboolean dimmed = FALSE;
428 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
430 types[0] = TNY_FOLDER_TYPE_DRAFTS;
431 types[1] = TNY_FOLDER_TYPE_OUTBOX;
432 types[2] = TNY_FOLDER_TYPE_SENT;
433 types[3] = TNY_FOLDER_TYPE_INBOX;
434 types[4] = TNY_FOLDER_TYPE_ROOT;
436 /* Check dimmed rule */
438 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 5);
444 modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data)
446 gboolean dimmed = FALSE;
448 /* Check dimmed rule */
450 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
456 /* *********************** static utility functions ******************** */
459 _marked_as_deleted (ModestWindow *win)
461 gboolean result = FALSE;
462 TnyHeaderFlags flags;
464 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
466 flags = TNY_HEADER_FLAG_DELETED;
468 /* Check dimmed rule */
469 result = _selected_msg_marked_as (win, flags, FALSE);
475 _selected_folder_not_writeable (ModestMainWindow *win)
477 GtkWidget *folder_view = NULL;
478 TnyFolderStore *parent_folder = NULL;
479 ModestTnyFolderRules rules;
480 gboolean result = FALSE;
482 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
484 /* Get folder view */
485 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
486 MODEST_WIDGET_TYPE_FOLDER_VIEW);
487 /* If no folder view, always dimmed */
491 /* Get selected folder as parent of new folder to create */
492 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
493 if (!(parent_folder && TNY_IS_FOLDER(parent_folder)))
496 /* Check dimmed rule */
497 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
498 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
501 g_object_unref (parent_folder);
507 _selected_folder_is_root (ModestMainWindow *win)
509 TnyFolderType types[2];
510 gboolean result = FALSE;
512 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
514 types[0] = TNY_FOLDER_TYPE_ROOT;
515 types[1] = TNY_FOLDER_TYPE_INBOX;
517 /* Check folder type */
518 result = _selected_folder_is_any_of_type (win, types, 2);
521 GtkWidget *folder_view = NULL;
522 TnyFolderStore *parent_folder = NULL;
524 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
525 MODEST_WIDGET_TYPE_FOLDER_VIEW);
526 /* Get selected folder as parent of new folder to create */
527 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
531 if (TNY_IS_ACCOUNT (parent_folder)) {
532 /* If it's the local account then do not dim */
533 if (modest_tny_account_is_virtual_local_folders (
534 TNY_ACCOUNT (parent_folder)))
537 /* If it's the MMC root folder then dim it */
538 if (!strcmp (tny_account_get_id (TNY_ACCOUNT (parent_folder)), MODEST_MMC_ACCOUNT_ID)) {
541 const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
542 /* If it's POP then dim */
543 result = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
544 MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
555 _selected_folder_is_empty (ModestMainWindow *win)
557 GtkWidget *folder_view = NULL;
558 TnyFolderStore *folder = NULL;
559 gboolean result = FALSE;
561 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
563 /* Get folder view */
564 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
565 MODEST_WIDGET_TYPE_FOLDER_VIEW);
566 /* If no folder view, always dimmed */
570 /* Get selected folder as parent of new folder to create */
571 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
572 if (!(folder && TNY_IS_FOLDER(folder)))
575 /* Check folder type */
576 result = tny_folder_get_all_count (TNY_FOLDER (folder)) == 0;
579 g_object_unref (folder);
585 _selected_folder_is_any_of_type (ModestMainWindow *win,
586 TnyFolderType types[],
589 GtkWidget *folder_view = NULL;
590 TnyFolderStore *folder = NULL;
591 gboolean result = FALSE;
593 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
595 /* Get folder view */
596 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
597 MODEST_WIDGET_TYPE_FOLDER_VIEW);
598 /* If no folder view, always dimmed */
602 /* Get selected folder as parent of new folder to create */
603 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
604 if (!(folder && TNY_IS_FOLDER(folder)))
607 /* Check folder type */
608 result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes);
611 g_object_unref (folder);
617 _folder_is_any_of_type (TnyFolder *folder,
618 TnyFolderType types[],
621 TnyFolderType folder_type;
622 gboolean result = FALSE;
625 g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
627 /* Get folder type */
628 if (modest_tny_folder_is_local_folder (folder))
629 folder_type = modest_tny_folder_get_local_folder_type (folder);
631 folder_type = modest_tny_folder_guess_folder_type (folder);
633 /* Check foler type */
634 for (i=0; i < ntypes; i++) {
635 result = result || folder_type == types[i];
644 _invalid_msg_selected (ModestMainWindow *win,
646 ModestDimmingRule *rule)
648 GtkWidget *header_view = NULL;
649 GtkWidget *folder_view = NULL;
650 TnyList *selected_headers = NULL;
651 gboolean result = FALSE;
653 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
654 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), FALSE);
656 /* Get header view to check selected messages */
657 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
658 MODEST_WIDGET_TYPE_HEADER_VIEW);
660 /* Get folder view to check focus */
661 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
662 MODEST_WIDGET_TYPE_FOLDER_VIEW);
664 /* Get selected headers */
665 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
667 /* Check dimmed rule (TODO: check focus on widgets */
669 result = ((selected_headers == NULL) ||
670 (GTK_WIDGET_HAS_FOCUS (folder_view)));
672 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
674 if (!result && unique) {
675 result = tny_list_get_length (selected_headers) > 1;
677 modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message"));
681 if (selected_headers != NULL)
682 g_object_unref (selected_headers);
688 _already_opened_msg (ModestWindow *win)
690 ModestWindow *window = NULL;
691 ModestWindowMgr *mgr = NULL;
692 GtkWidget *header_view = NULL;
693 TnyList *selected_headers = NULL;
694 TnyIterator *iter = NULL;
695 TnyHeader *header = NULL;
696 gboolean result = TRUE;
698 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
700 /* Get header view to check selected messages */
701 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
702 MODEST_WIDGET_TYPE_HEADER_VIEW);
704 /* Get selected headers */
705 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
706 if (selected_headers == NULL)
709 /* Check dimmed rule (TODO: check focus on widgets */
710 mgr = modest_runtime_get_window_mgr ();
711 iter = tny_list_create_iterator (selected_headers);
712 while (!tny_iterator_is_done (iter) && result) {
713 header = TNY_HEADER (tny_iterator_get_current (iter));
714 window = modest_window_mgr_find_window_by_header (mgr, header);
715 result = result && (window != NULL);
717 g_object_unref (header);
718 tny_iterator_next (iter);
722 if (selected_headers != NULL)
723 g_object_unref (selected_headers);
725 g_object_unref (iter);
731 _selected_msg_marked_as (ModestWindow *win,
735 GtkWidget *header_view = NULL;
736 TnyList *selected_headers = NULL;
737 TnyIterator *iter = NULL;
738 TnyHeader *header = NULL;
739 TnyHeaderFlags flags;
740 gboolean result = FALSE;
742 /* Get header view to check selected messages */
743 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
744 MODEST_WIDGET_TYPE_HEADER_VIEW);
746 /* Get selected headers */
747 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
748 if (selected_headers == NULL)
751 /* Call the function for each header */
752 iter = tny_list_create_iterator (selected_headers);
753 while (!tny_iterator_is_done (iter) && !result) {
754 header = TNY_HEADER (tny_iterator_get_current (iter));
756 flags = tny_header_get_flags (header);
758 result = (flags & mask) == 0;
760 result = (flags & mask) != 0;
762 g_object_unref (header);
763 tny_iterator_next (iter);
767 if (selected_headers != NULL)
768 g_object_unref (selected_headers);
770 g_object_unref (iter);
776 _msg_download_in_progress (ModestMsgViewWindow *win)
778 gboolean result = FALSE;
780 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE);
782 result = modest_msg_view_window_toolbar_on_transfer_mode (win);
788 _msg_download_completed (ModestMainWindow *win)
790 GtkWidget *header_view = NULL;
791 TnyList *selected_headers = NULL;
792 TnyIterator *iter = NULL;
793 TnyHeader *header = NULL;
794 TnyHeaderFlags flags;
795 gboolean result = FALSE;
797 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
800 /* Get header view to check selected messages */
801 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
802 MODEST_WIDGET_TYPE_HEADER_VIEW);
804 /* Get selected headers */
805 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
806 if (selected_headers == NULL)
809 /* Check dimmed rule */
811 iter = tny_list_create_iterator (selected_headers);
812 while (!tny_iterator_is_done (iter) && result) {
813 header = TNY_HEADER (tny_iterator_get_current (iter));
815 flags = tny_header_get_flags (header);
816 /* TODO: is this the right flag?, it seems that some
817 headers that have been previously downloaded do not
819 result = (flags & TNY_HEADER_FLAG_CACHED);
821 g_object_unref (header);
822 tny_iterator_next (iter);
825 g_object_unref (iter);
831 _msg_sent_in_progress (ModestWindow *win)
833 /* ModestTnySendQueue *send_queue = NULL; */
834 /* GtkWidget *header_view = NULL; */
835 /* ModestTnyAccountStore *acc_store = NULL; */
836 /* TnyAccount *account = NULL; */
837 /* TnyList *header_list = NULL; */
838 /* TnyIterator *iter = NULL; */
839 /* TnyHeader *header = NULL; */
840 /* const gchar *account_name = NULL; */
841 gboolean result = FALSE;
842 /* gchar *id = NULL; */
844 /* g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE); */
846 /* /\* Get transport account *\/ */
847 /* acc_store = modest_runtime_get_account_store(); */
848 /* account_name = modest_window_get_active_account (win); */
849 /* account = modest_tny_account_store_get_transport_account_for_open_connection (acc_store, account_name); */
851 /* /\* Get send queue for current ransport account *\/ */
852 /* send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(account)); */
853 /* g_return_val_if_fail (MODEST_IS_TNY_SEND_QUEUE (send_queue), FALSE); */
855 /* if (MODEST_IS_MAIN_WINDOW(win)) { */
857 /* /\* Get header view to check selected messages *\/ */
858 /* header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), */
859 /* MODEST_WIDGET_TYPE_HEADER_VIEW); */
861 /* /\* Get selected headers *\/ */
862 /* header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); */
864 /* /\* Get message header *\/ */
865 /* if (!header_list) return FALSE; */
866 /* iter = tny_list_create_iterator (header_list); */
867 /* header = TNY_HEADER (tny_iterator_get_current (iter)); */
869 /* /\* Get message id *\/ */
870 /* id = g_strdup(tny_header_get_message_id (header)); */
872 /* } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) { */
874 /* /\* Get message header *\/ */
875 /* header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win)); */
877 /* /\* Get message id *\/ */
878 /* id = g_strdup(tny_header_get_message_id (header)); */
881 /* /\* Check if msg id is being processed inside send queue *\/ */
882 /* result = modest_tny_send_queue_msg_is_being_sent (send_queue, id); */
886 /* g_object_unref (header); */
887 /* g_free(header_list); */