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 gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data)
474 const gboolean dimmed =
475 !modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(),
482 /* *********************** static utility functions ******************** */
485 _marked_as_deleted (ModestWindow *win)
487 gboolean result = FALSE;
488 TnyHeaderFlags flags;
490 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
492 flags = TNY_HEADER_FLAG_DELETED;
494 /* Check dimmed rule */
495 result = _selected_msg_marked_as (win, flags, FALSE);
501 _selected_folder_not_writeable (ModestMainWindow *win)
503 GtkWidget *folder_view = NULL;
504 TnyFolderStore *parent_folder = NULL;
505 ModestTnyFolderRules rules;
506 gboolean result = FALSE;
508 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
510 /* Get folder view */
511 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
512 MODEST_WIDGET_TYPE_FOLDER_VIEW);
513 /* If no folder view, always dimmed */
517 /* Get selected folder as parent of new folder to create */
518 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
519 if (!(parent_folder && TNY_IS_FOLDER(parent_folder)))
522 /* Check dimmed rule */
523 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
524 result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
527 g_object_unref (parent_folder);
533 _selected_folder_is_root_or_inbox (ModestMainWindow *win)
535 TnyFolderType types[2];
536 gboolean result = FALSE;
538 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
540 types[0] = TNY_FOLDER_TYPE_ROOT;
541 types[1] = TNY_FOLDER_TYPE_INBOX;
543 /* Check folder type */
544 result = _selected_folder_is_any_of_type (win, types, 2);
547 GtkWidget *folder_view = NULL;
548 TnyFolderStore *parent_folder = NULL;
550 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
551 MODEST_WIDGET_TYPE_FOLDER_VIEW);
552 /* Get selected folder as parent of new folder to create */
553 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
557 if (TNY_IS_ACCOUNT (parent_folder)) {
558 /* If it's the local account then do not dim */
559 if (modest_tny_account_is_virtual_local_folders (
560 TNY_ACCOUNT (parent_folder)))
563 /* If it's the MMC root folder then dim it */
564 if (!strcmp (tny_account_get_id (TNY_ACCOUNT (parent_folder)), MODEST_MMC_ACCOUNT_ID)) {
567 const gchar *proto_str = tny_account_get_proto (TNY_ACCOUNT (parent_folder));
568 /* If it's POP then dim */
569 result = (modest_protocol_info_get_transport_store_protocol (proto_str) ==
570 MODEST_PROTOCOL_STORE_POP) ? TRUE : FALSE;
580 _selected_folder_is_root (ModestMainWindow *win)
582 TnyFolderType types[1];
583 gboolean result = FALSE;
585 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
587 types[0] = TNY_FOLDER_TYPE_ROOT;
589 /* Check folder type */
590 result = _selected_folder_is_any_of_type (win, types, 1);
597 _selected_folder_is_empty (ModestMainWindow *win)
599 GtkWidget *folder_view = NULL;
600 TnyFolderStore *folder = NULL;
601 gboolean result = FALSE;
603 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
605 /* Get folder view */
606 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
607 MODEST_WIDGET_TYPE_FOLDER_VIEW);
608 /* If no folder view, always dimmed */
612 /* Get selected folder as parent of new folder to create */
613 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
614 if (!(folder && TNY_IS_FOLDER(folder)))
617 /* Check folder type */
618 result = tny_folder_get_all_count (TNY_FOLDER (folder)) == 0;
621 g_object_unref (folder);
627 _selected_folder_is_any_of_type (ModestMainWindow *win,
628 TnyFolderType types[],
631 GtkWidget *folder_view = NULL;
632 TnyFolderStore *folder = NULL;
633 gboolean result = FALSE;
635 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
637 /* Get folder view */
638 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
639 MODEST_WIDGET_TYPE_FOLDER_VIEW);
640 /* If no folder view, always dimmed */
644 /* Get selected folder as parent of new folder to create */
645 folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
646 if (!(folder && TNY_IS_FOLDER(folder)))
649 /* Check folder type */
650 result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes);
653 g_object_unref (folder);
659 _folder_is_any_of_type (TnyFolder *folder,
660 TnyFolderType types[],
663 TnyFolderType folder_type;
664 gboolean result = FALSE;
667 g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
669 /* Get folder type */
670 if (modest_tny_folder_is_local_folder (folder))
671 folder_type = modest_tny_folder_get_local_folder_type (folder);
673 folder_type = modest_tny_folder_guess_folder_type (folder);
675 /* Check foler type */
676 for (i=0; i < ntypes; i++) {
677 result = result || folder_type == types[i];
686 _invalid_msg_selected (ModestMainWindow *win,
688 ModestDimmingRule *rule)
690 GtkWidget *header_view = NULL;
691 GtkWidget *folder_view = NULL;
692 TnyList *selected_headers = NULL;
693 gboolean result = FALSE;
695 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
696 g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), FALSE);
698 /* Get header view to check selected messages */
699 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
700 MODEST_WIDGET_TYPE_HEADER_VIEW);
702 /* Get folder view to check focus */
703 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
704 MODEST_WIDGET_TYPE_FOLDER_VIEW);
706 /* Get selected headers */
707 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
709 /* Check dimmed rule (TODO: check focus on widgets */
711 result = ((selected_headers == NULL) ||
712 (GTK_WIDGET_HAS_FOCUS (folder_view)));
714 modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
716 if (!result && unique) {
717 result = tny_list_get_length (selected_headers) > 1;
719 modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message"));
723 if (selected_headers != NULL)
724 g_object_unref (selected_headers);
730 _already_opened_msg (ModestWindow *win)
732 ModestWindow *window = NULL;
733 ModestWindowMgr *mgr = NULL;
734 GtkWidget *header_view = NULL;
735 TnyList *selected_headers = NULL;
736 TnyIterator *iter = NULL;
737 TnyHeader *header = NULL;
738 gboolean result = TRUE;
740 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), 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 /* Check dimmed rule (TODO: check focus on widgets */
752 mgr = modest_runtime_get_window_mgr ();
753 iter = tny_list_create_iterator (selected_headers);
754 while (!tny_iterator_is_done (iter) && result) {
755 header = TNY_HEADER (tny_iterator_get_current (iter));
756 window = modest_window_mgr_find_window_by_header (mgr, header);
757 result = result && (window != NULL);
759 g_object_unref (header);
760 tny_iterator_next (iter);
764 if (selected_headers != NULL)
765 g_object_unref (selected_headers);
767 g_object_unref (iter);
773 _selected_msg_marked_as (ModestWindow *win,
777 GtkWidget *header_view = NULL;
778 TnyList *selected_headers = NULL;
779 TnyIterator *iter = NULL;
780 TnyHeader *header = NULL;
781 TnyHeaderFlags flags;
782 gboolean result = FALSE;
784 /* Get header view to check selected messages */
785 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
786 MODEST_WIDGET_TYPE_HEADER_VIEW);
788 /* Get selected headers */
789 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
790 if (selected_headers == NULL)
793 /* Call the function for each header */
794 iter = tny_list_create_iterator (selected_headers);
795 while (!tny_iterator_is_done (iter) && !result) {
796 header = TNY_HEADER (tny_iterator_get_current (iter));
798 flags = tny_header_get_flags (header);
800 result = (flags & mask) == 0;
802 result = (flags & mask) != 0;
804 g_object_unref (header);
805 tny_iterator_next (iter);
809 if (selected_headers != NULL)
810 g_object_unref (selected_headers);
812 g_object_unref (iter);
818 _msg_download_in_progress (ModestMsgViewWindow *win)
820 gboolean result = FALSE;
822 g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE);
824 result = modest_msg_view_window_toolbar_on_transfer_mode (win);
830 _msg_download_completed (ModestMainWindow *win)
832 GtkWidget *header_view = NULL;
833 TnyList *selected_headers = NULL;
834 TnyIterator *iter = NULL;
835 TnyHeader *header = NULL;
836 TnyHeaderFlags flags;
837 gboolean result = FALSE;
839 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
842 /* Get header view to check selected messages */
843 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
844 MODEST_WIDGET_TYPE_HEADER_VIEW);
846 /* Get selected headers */
847 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
848 if (selected_headers == NULL)
851 /* Check dimmed rule */
853 iter = tny_list_create_iterator (selected_headers);
854 while (!tny_iterator_is_done (iter) && result) {
855 header = TNY_HEADER (tny_iterator_get_current (iter));
857 flags = tny_header_get_flags (header);
858 /* TODO: is this the right flag?, it seems that some
859 headers that have been previously downloaded do not
861 result = (flags & TNY_HEADER_FLAG_CACHED);
863 g_object_unref (header);
864 tny_iterator_next (iter);
867 g_object_unref (iter);
873 _msg_sent_in_progress (ModestWindow *win)
875 /* ModestTnySendQueue *send_queue = NULL; */
876 /* GtkWidget *header_view = NULL; */
877 /* ModestTnyAccountStore *acc_store = NULL; */
878 /* TnyAccount *account = NULL; */
879 /* TnyList *header_list = NULL; */
880 /* TnyIterator *iter = NULL; */
881 /* TnyHeader *header = NULL; */
882 /* const gchar *account_name = NULL; */
883 gboolean result = FALSE;
884 /* gchar *id = NULL; */
886 /* g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), FALSE); */
888 /* /\* Get transport account *\/ */
889 /* acc_store = modest_runtime_get_account_store(); */
890 /* account_name = modest_window_get_active_account (win); */
891 /* account = modest_tny_account_store_get_transport_account_for_open_connection (acc_store, account_name); */
893 /* /\* Get send queue for current ransport account *\/ */
894 /* send_queue = modest_runtime_get_send_queue (TNY_TRANSPORT_ACCOUNT(account)); */
895 /* g_return_val_if_fail (MODEST_IS_TNY_SEND_QUEUE (send_queue), FALSE); */
897 /* if (MODEST_IS_MAIN_WINDOW(win)) { */
899 /* /\* Get header view to check selected messages *\/ */
900 /* header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), */
901 /* MODEST_WIDGET_TYPE_HEADER_VIEW); */
903 /* /\* Get selected headers *\/ */
904 /* header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); */
906 /* /\* Get message header *\/ */
907 /* if (!header_list) return FALSE; */
908 /* iter = tny_list_create_iterator (header_list); */
909 /* header = TNY_HEADER (tny_iterator_get_current (iter)); */
911 /* /\* Get message id *\/ */
912 /* id = g_strdup(tny_header_get_message_id (header)); */
914 /* } else if (MODEST_IS_MSG_VIEW_WINDOW(win)) { */
916 /* /\* Get message header *\/ */
917 /* header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW(win)); */
919 /* /\* Get message id *\/ */
920 /* id = g_strdup(tny_header_get_message_id (header)); */
923 /* /\* Check if msg id is being processed inside send queue *\/ */
924 /* result = modest_tny_send_queue_msg_is_being_sent (send_queue, id); */
928 /* g_object_unref (header); */
929 /* g_free(header_list); */