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_or_inbox (ModestMainWindow *win);
48 static gboolean _selected_folder_is_root (ModestMainWindow *win);
49 static gboolean _selected_folder_is_empty (ModestMainWindow *win);
50 static gboolean _msg_download_in_progress (ModestMsgViewWindow *win);
51 static gboolean _msg_download_completed (ModestMainWindow *win);
52 static gboolean _msg_sent_in_progress (ModestWindow *win);
53 static gboolean _marked_as_deleted (ModestWindow *win);
57 modest_ui_dimming_rules_on_new_msg (ModestWindow *win, gpointer user_data)
59 gboolean dimmed = FALSE;
61 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
63 /* Check dimmed rule */
65 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
71 modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
73 gboolean dimmed = FALSE;
74 GtkWidget *folder_view = NULL;
75 TnyFolderStore *parent_folder = NULL;
77 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
80 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
81 MODEST_WIDGET_TYPE_FOLDER_VIEW);
82 /* Get selected folder as parent of new folder to create */
83 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
87 if (TNY_IS_ACCOUNT (parent_folder)) {
88 /* If it's the local account then do not dim */
89 if (modest_tny_account_is_virtual_local_folders (
90 TNY_ACCOUNT (parent_folder)))
93 const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
94 /* If it's POP then dim */
95 dimmed = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
96 MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
99 /* TODO: the specs say that only one level of subfolder is allowed, is this true ? */
101 /* Apply folder rules */
102 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
109 modest_ui_dimming_rules_on_delete_folder (ModestWindow *win, gpointer user_data)
111 gboolean dimmed = FALSE;
113 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
115 /* Check dimmed rule */
117 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
119 dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
125 modest_ui_dimming_rules_on_sort (ModestWindow *win, gpointer user_data)
127 gboolean dimmed = FALSE;
129 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
131 /* Check dimmed rule */
133 dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win));
140 modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data)
142 gboolean dimmed = FALSE;
144 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
146 /* Check dimmed rule */
148 dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win));
150 dimmed = _selected_folder_is_root_or_inbox (MODEST_MAIN_WINDOW(win));
156 modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data)
158 ModestDimmingRule *rule = NULL;
159 gboolean dimmed = FALSE;
161 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
162 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
163 rule = MODEST_DIMMING_RULE (user_data);
165 /* Check dimmed rule */
167 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
169 dimmed = _msg_sent_in_progress (win);
171 modest_dimming_rule_set_notification (rule, _("TEST"));
178 modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
180 ModestDimmingRule *rule = NULL;
181 gboolean dimmed = FALSE;
182 TnyFolderType types[3];
184 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
185 rule = MODEST_DIMMING_RULE (user_data);
187 /* main window dimming rules */
188 if (MODEST_IS_MAIN_WINDOW(win)) {
190 types[0] = TNY_FOLDER_TYPE_DRAFTS;
191 types[1] = TNY_FOLDER_TYPE_OUTBOX;
192 types[2] = TNY_FOLDER_TYPE_ROOT;
194 /* Check dimmed rule */
196 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
198 modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
201 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
203 modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_reply"));
206 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, rule);
208 /* msg view window dimming rules */
209 } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
211 /* Check dimmed rule */
213 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
221 modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data)
223 gboolean dimmed = FALSE;
225 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
227 /* Check dimmed rule */
229 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
231 dimmed = _msg_download_completed (MODEST_MAIN_WINDOW(win));
237 modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data)
239 gboolean dimmed = FALSE;
241 g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE);
243 /* Check dimmed rule */
251 modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data)
253 ModestDimmingRule *rule = NULL;
254 gboolean dimmed = FALSE;
256 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
257 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
258 rule = MODEST_DIMMING_RULE (user_data);
260 /* Check dimmed rule */
262 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
264 modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del"));
267 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
269 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
272 dimmed = _already_opened_msg (win);
274 modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages"));
277 dimmed = _marked_as_deleted (win);
279 modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
282 dimmed = _msg_sent_in_progress (win);
284 modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
291 modest_ui_dimming_rules_on_details (ModestWindow *win, gpointer user_data)
293 gboolean dimmed = FALSE;
294 GtkWidget *header_view = NULL;
296 /* main window dimming rules */
297 if (MODEST_IS_MAIN_WINDOW(win)) {
299 /* Check dimmed rule */
300 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
301 MODEST_WIDGET_TYPE_HEADER_VIEW);
303 /* If the header view does not have the focus then do
304 not apply msg dimming rules because the action will
305 show the folder details that have no dimming
307 if (gtk_widget_is_focus (header_view)) {
308 /* Check dimmed rule */
310 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE, user_data);
313 /* msg view window dimming rules */
316 /* Check dimmed rule */
318 dimmed = _msg_download_in_progress (MODEST_MSG_VIEW_WINDOW(win));
326 modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data)
328 gboolean dimmed = FALSE;
329 TnyHeaderFlags flags;
331 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
333 flags = TNY_HEADER_FLAG_SEEN;
335 /* Check dimmed rule */
337 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
339 dimmed = _selected_msg_marked_as (win, flags, FALSE);
345 modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data)
347 gboolean dimmed = FALSE;
348 TnyHeaderFlags flags;
350 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
352 flags = TNY_HEADER_FLAG_SEEN;
354 /* Check dimmed rule */
356 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
358 dimmed = _selected_msg_marked_as (win, flags, TRUE);
364 modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data)
366 gboolean dimmed = FALSE;
368 if (MODEST_IS_MAIN_WINDOW (win))
369 dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data);
371 dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data);
378 modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data)
380 GtkWidget *folder_view = NULL;
381 GtkWidget *header_view = NULL;
382 gboolean dimmed = FALSE;
384 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE);
386 /* Get the folder view */
387 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
388 MODEST_WIDGET_TYPE_FOLDER_VIEW);
390 /* Get header view */
391 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
392 MODEST_WIDGET_TYPE_HEADER_VIEW);
394 /* Check common diming rules */
396 /* Check diming rules for folder transfer */
397 if (gtk_widget_is_focus (folder_view)) {
399 dimmed = _selected_folder_not_writeable(MODEST_MAIN_WINDOW(win));
401 /* Check diming rules for msg transfer */
402 else if (gtk_widget_is_focus (header_view)) {
404 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
412 modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data)
414 gboolean dimmed = FALSE;
420 modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data)
422 TnyFolderType types[3];
423 gboolean dimmed = FALSE;
425 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
427 types[0] = TNY_FOLDER_TYPE_DRAFTS;
428 types[1] = TNY_FOLDER_TYPE_OUTBOX;
429 types[2] = TNY_FOLDER_TYPE_SENT;
431 /* Check dimmed rule */
433 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
439 modest_ui_dimming_rules_on_delete_msgs (ModestWindow *win, gpointer user_data)
441 TnyFolderType types[5];
442 gboolean dimmed = FALSE;
444 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
446 types[0] = TNY_FOLDER_TYPE_DRAFTS;
447 types[1] = TNY_FOLDER_TYPE_OUTBOX;
448 types[2] = TNY_FOLDER_TYPE_SENT;
449 types[3] = TNY_FOLDER_TYPE_INBOX;
450 types[4] = TNY_FOLDER_TYPE_ROOT;
452 /* Check dimmed rule */
454 dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 5);
460 modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data)
462 gboolean dimmed = FALSE;
464 /* Check dimmed rule */
466 dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
472 /* *********************** static utility functions ******************** */
475 _marked_as_deleted (ModestWindow *win)
477 gboolean result = FALSE;
478 TnyHeaderFlags flags;
480 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
482 flags = TNY_HEADER_FLAG_DELETED;
484 /* Check dimmed rule */
485 result = _selected_msg_marked_as (win, flags, FALSE);
491 _selected_folder_not_writeable (ModestMainWindow *win)
493 GtkWidget *folder_view = NULL;
494 TnyFolderStore *parent_folder = NULL;
495 ModestTnyFolderRules rules;
496 gboolean result = FALSE;
498 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
500 /* Get folder view */
501 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
502 MODEST_WIDGET_TYPE_FOLDER_VIEW);
503 /* If no folder view, always dimmed */
507 /* Get selected folder as parent of new folder to create */
508 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
509 if (!(parent_folder && TNY_IS_FOLDER(parent_folder)))
512 /* Check dimmed rule */
513 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
514 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
517 g_object_unref (parent_folder);
523 _selected_folder_is_root_or_inbox (ModestMainWindow *win)
525 TnyFolderType types[2];
526 gboolean result = FALSE;
528 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
530 types[0] = TNY_FOLDER_TYPE_ROOT;
531 types[1] = TNY_FOLDER_TYPE_INBOX;
533 /* Check folder type */
534 result = _selected_folder_is_any_of_type (win, types, 2);
537 GtkWidget *folder_view = NULL;
538 TnyFolderStore *parent_folder = NULL;
540 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
541 MODEST_WIDGET_TYPE_FOLDER_VIEW);
542 /* Get selected folder as parent of new folder to create */
543 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
547 if (TNY_IS_ACCOUNT (parent_folder)) {
548 /* If it's the local account then do not dim */
549 if (modest_tny_account_is_virtual_local_folders (
550 TNY_ACCOUNT (parent_folder)))
553 /* If it's the MMC root folder then dim it */
554 if (!strcmp (tny_account_get_id (TNY_ACCOUNT (parent_folder)), MODEST_MMC_ACCOUNT_ID)) {
557 const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
558 /* If it's POP then dim */
559 result = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
560 MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
570 _selected_folder_is_root (ModestMainWindow *win)
572 TnyFolderType types[1];
573 gboolean result = FALSE;
575 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
577 types[0] = TNY_FOLDER_TYPE_ROOT;
579 /* Check folder type */
580 result = _selected_folder_is_any_of_type (win, types, 1);
587 _selected_folder_is_empty (ModestMainWindow *win)
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 = tny_folder_get_all_count (TNY_FOLDER (folder)) == 0;
611 g_object_unref (folder);
617 _selected_folder_is_any_of_type (ModestMainWindow *win,
618 TnyFolderType types[],
621 GtkWidget *folder_view = NULL;
622 TnyFolderStore *folder = NULL;
623 gboolean result = FALSE;
625 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
627 /* Get folder view */
628 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
629 MODEST_WIDGET_TYPE_FOLDER_VIEW);
630 /* If no folder view, always dimmed */
634 /* Get selected folder as parent of new folder to create */
635 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
636 if (!(folder && TNY_IS_FOLDER(folder)))
639 /* Check folder type */
640 result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes);
643 g_object_unref (folder);
649 _folder_is_any_of_type (TnyFolder *folder,
650 TnyFolderType types[],
653 TnyFolderType folder_type;
654 gboolean result = FALSE;
657 g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
659 /* Get folder type */
660 if (modest_tny_folder_is_local_folder (folder))
661 folder_type = modest_tny_folder_get_local_folder_type (folder);
663 folder_type = modest_tny_folder_guess_folder_type (folder);
665 /* Check foler type */
666 for (i=0; i < ntypes; i++) {
667 result = result || folder_type == types[i];
676 _invalid_msg_selected (ModestMainWindow *win,
678 ModestDimmingRule *rule)
680 GtkWidget *header_view = NULL;
681 GtkWidget *folder_view = NULL;
682 TnyList *selected_headers = NULL;
683 gboolean result = FALSE;
685 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
686 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), FALSE);
688 /* Get header view to check selected messages */
689 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
690 MODEST_WIDGET_TYPE_HEADER_VIEW);
692 /* Get folder view to check focus */
693 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
694 MODEST_WIDGET_TYPE_FOLDER_VIEW);
696 /* Get selected headers */
697 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
699 /* Check dimmed rule (TODO: check focus on widgets */
701 result = ((selected_headers == NULL) ||
702 (GTK_WIDGET_HAS_FOCUS (folder_view)));
704 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
706 if (!result && unique) {
707 result = tny_list_get_length (selected_headers) > 1;
709 modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message"));
713 if (selected_headers != NULL)
714 g_object_unref (selected_headers);
720 _already_opened_msg (ModestWindow *win)
722 ModestWindow *window = NULL;
723 ModestWindowMgr *mgr = NULL;
724 GtkWidget *header_view = NULL;
725 TnyList *selected_headers = NULL;
726 TnyIterator *iter = NULL;
727 TnyHeader *header = NULL;
728 gboolean result = TRUE;
730 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
732 /* Get header view to check selected messages */
733 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
734 MODEST_WIDGET_TYPE_HEADER_VIEW);
736 /* Get selected headers */
737 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
738 if (selected_headers == NULL)
741 /* Check dimmed rule (TODO: check focus on widgets */
742 mgr = modest_runtime_get_window_mgr ();
743 iter = tny_list_create_iterator (selected_headers);
744 while (!tny_iterator_is_done (iter) && result) {
745 header = TNY_HEADER (tny_iterator_get_current (iter));
746 window = modest_window_mgr_find_window_by_header (mgr, header);
747 result = result && (window != NULL);
749 g_object_unref (header);
750 tny_iterator_next (iter);
754 if (selected_headers != NULL)
755 g_object_unref (selected_headers);
757 g_object_unref (iter);
763 _selected_msg_marked_as (ModestWindow *win,
767 GtkWidget *header_view = NULL;
768 TnyList *selected_headers = NULL;
769 TnyIterator *iter = NULL;
770 TnyHeader *header = NULL;
771 TnyHeaderFlags flags;
772 gboolean result = FALSE;
774 /* Get header view to check selected messages */
775 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
776 MODEST_WIDGET_TYPE_HEADER_VIEW);
778 /* Get selected headers */
779 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
780 if (selected_headers == NULL)
783 /* Call the function for each header */
784 iter = tny_list_create_iterator (selected_headers);
785 while (!tny_iterator_is_done (iter) && !result) {
786 header = TNY_HEADER (tny_iterator_get_current (iter));
788 flags = tny_header_get_flags (header);
790 result = (flags & mask) == 0;
792 result = (flags & mask) != 0;
794 g_object_unref (header);
795 tny_iterator_next (iter);
799 if (selected_headers != NULL)
800 g_object_unref (selected_headers);
802 g_object_unref (iter);
808 _msg_download_in_progress (ModestMsgViewWindow *win)
810 gboolean result = FALSE;
812 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE);
814 result = modest_msg_view_window_toolbar_on_transfer_mode (win);
820 _msg_download_completed (ModestMainWindow *win)
822 GtkWidget *header_view = NULL;
823 TnyList *selected_headers = NULL;
824 TnyIterator *iter = NULL;
825 TnyHeader *header = NULL;
826 TnyHeaderFlags flags;
827 gboolean result = FALSE;
829 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
832 /* Get header view to check selected messages */
833 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
834 MODEST_WIDGET_TYPE_HEADER_VIEW);
836 /* Get selected headers */
837 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
838 if (selected_headers == NULL)
841 /* Check dimmed rule */
843 iter = tny_list_create_iterator (selected_headers);
844 while (!tny_iterator_is_done (iter) && result) {
845 header = TNY_HEADER (tny_iterator_get_current (iter));
847 flags = tny_header_get_flags (header);
848 /* TODO: is this the right flag?, it seems that some
849 headers that have been previously downloaded do not
851 result = (flags & TNY_HEADER_FLAG_CACHED);
853 g_object_unref (header);
854 tny_iterator_next (iter);
857 g_object_unref (iter);
863 _msg_sent_in_progress (ModestWindow *win)
865 /* ModestTnySendQueue *send_queue = NULL; */
866 /* GtkWidget *header_view = NULL; */
867 /* ModestTnyAccountStore *acc_store = NULL; */
868 /* TnyAccount *account = NULL; */
869 /* TnyList *header_list = NULL; */
870 /* TnyIterator *iter = NULL; */
871 /* TnyHeader *header = NULL; */
872 /* const gchar *account_name = NULL; */
873 gboolean result = FALSE;
874 /* gchar *id = NULL; */
876 /* g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE); */
878 /* /\* Get transport account *\/ */
879 /* acc_store = modest_runtime_get_account_store(); */
880 /* account_name = modest_window_get_active_account (win); */
881 /* account = modest_tny_account_store_get_transport_account_for_open_connection (acc_store, account_name); */
883 /* /\* Get send queue for current ransport account *\/ */
884 /* send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(account)); */
885 /* g_return_val_if_fail (MODEST_IS_TNY_SEND_QUEUE (send_queue), FALSE); */
887 /* if (MODEST_IS_MAIN_WINDOW(win)) { */
889 /* /\* Get header view to check selected messages *\/ */
890 /* header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), */
891 /* MODEST_WIDGET_TYPE_HEADER_VIEW); */
893 /* /\* Get selected headers *\/ */
894 /* header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); */
896 /* /\* Get message header *\/ */
897 /* if (!header_list) return FALSE; */
898 /* iter = tny_list_create_iterator (header_list); */
899 /* header = TNY_HEADER (tny_iterator_get_current (iter)); */
901 /* /\* Get message id *\/ */
902 /* id = g_strdup(tny_header_get_message_id (header)); */
904 /* } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) { */
906 /* /\* Get message header *\/ */
907 /* header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win)); */
909 /* /\* Get message id *\/ */
910 /* id = g_strdup(tny_header_get_message_id (header)); */
913 /* /\* Check if msg id is being processed inside send queue *\/ */
914 /* result = modest_tny_send_queue_msg_is_being_sent (send_queue, id); */
918 /* g_object_unref (header); */
919 /* g_free(header_list); */