From: Javier Fernandez Garcia-Boente Date: Tue, 29 May 2007 20:39:49 +0000 (+0000) Subject: * Implementation of 'email menu' dimming rules of main window. X-Git-Tag: git_migration_finished~3495 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=3c8a0d459b487c9d3c459927f21dd1574a402e9e * Implementation of 'email menu' dimming rules of main window. * Implementation of 'edit menu' dimming rules of main window. * Implementation of 'folder view CSM' dimming rules of main window. pmo-trunk-r1991 --- diff --git a/src/maemo/modest-main-window-ui-dimming.h b/src/maemo/modest-main-window-ui-dimming.h index 0f0394a..d1e128a 100644 --- a/src/maemo/modest-main-window-ui-dimming.h +++ b/src/maemo/modest-main-window-ui-dimming.h @@ -17,22 +17,22 @@ static const ModestDimmingEntry modest_dimming_entries [] = { { "/MenuBar/EmailMenu/EmailOpenMenu", G_CALLBACK(modest_ui_dimming_rules_on_open_msg) }, { "/MenuBar/EmailMenu/EmailReplyMenu", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg) }, { "/MenuBar/EmailMenu/EmailReplyAllMenu", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg) }, - { "/MenuBar/EmailMenu/EmailForwardMenu", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg)}, + { "/MenuBar/EmailMenu/EmailForwardMenu", G_CALLBACK(modest_ui_dimming_rules_on_reply_msg) }, { "/MenuBar/EmailMenu/EmailContentsMenu", G_CALLBACK(modest_ui_dimming_rules_on_contents_msg) }, - { "/MenuBar/EmailMenu/EmailPurgeAttachmentsMenu", NULL }, - { "/MenuBar/EmailMenu/EmailDeleteMenu", NULL }, - { "/MenuBar/EmailMenu/EmailDetailsMenu", NULL }, + { "/MenuBar/EmailMenu/EmailPurgeAttachmentsMenu", G_CALLBACK(modest_ui_dimming_rules_always_dimmed) }, + { "/MenuBar/EmailMenu/EmailDeleteMenu", G_CALLBACK(modest_ui_dimming_rules_on_delete_msg) }, + { "/MenuBar/EmailMenu/EmailDetailsMenu", G_CALLBACK(modest_ui_dimming_rules_on_details_msg) }, /* Edit Menu */ { "/MenuBar/EditMenu", NULL }, - { "/MenuBar/EditMenu/EditUndoMenu", NULL }, + { "/MenuBar/EditMenu/EditUndoMenu", }, { "/MenuBar/EditMenu/EditCutMenu", NULL }, { "/MenuBar/EditMenu/EditCopyMenu", NULL }, - { "/MenuBar/EditMenu/EditPasteMenu", NULL }, + { "/MenuBar/EditMenu/EditPasteMenu", G_CALLBACK(modest_ui_dimming_rules_on_paste_msgs) }, { "/MenuBar/EditMenu/EditSelectAllMenu", NULL }, - { "/MenuBar/EditMenu/EditMarkAsReadMenu", NULL }, - { "/MenuBar/EditMenu/EditMarkAsUnreadMenu", NULL }, - { "/MenuBar/EditMenu/EditMoveToMenu", NULL }, + { "/MenuBar/EditMenu/EditMarkAsReadMenu", G_CALLBACK(modest_ui_dimming_rules_on_mark_as_read_msg) }, + { "/MenuBar/EditMenu/EditMarkAsUnreadMenu", G_CALLBACK(modest_ui_dimming_rules_on_mark_as_unread_msg) }, + { "/MenuBar/EditMenu/EditMoveToMenu", G_CALLBACK(modest_ui_dimming_rules_on_move_to) }, /* View Menu */ { "/MenuBar/ViewMenu", NULL }, @@ -75,9 +75,9 @@ static const ModestDimmingEntry modest_dimming_entries [] = { /* Contextual Menus (Folder View) */ { "/FolderViewCSM/FolderViewCSMNewFolder", G_CALLBACK(modest_ui_dimming_rules_on_new_folder) }, - { "/FolderViewCSM/FolderViewCSMRenameFolder", NULL }, - { "/FolderViewCSM/FolderViewCSMPasteMsgs", NULL }, - { "/FolderViewCSM/FolderViewCSMDeleteFolder", NULL }, + { "/FolderViewCSM/FolderViewCSMRenameFolder", G_CALLBACK(modest_ui_dimming_rules_on_rename_folder) }, + { "/FolderViewCSM/FolderViewCSMPasteMsgs", G_CALLBACK(modest_ui_dimming_rules_on_paste_msgs) }, + { "/FolderViewCSM/FolderViewCSMDeleteFolder", G_CALLBACK(modest_ui_dimming_rules_on_paste_msgs) }, { "/FolderViewCSM/FolderViewCSMSearchMessages", NULL }, { "/FolderViewCSM/FolderViewCSMHelp", NULL }, diff --git a/src/maemo/modest-main-window-ui.h b/src/maemo/modest-main-window-ui.h index 825fdfa..fb506b2 100644 --- a/src/maemo/modest-main-window-ui.h +++ b/src/maemo/modest-main-window-ui.h @@ -40,8 +40,8 @@ G_BEGIN_DECLS static const GtkActionEntry modest_action_entries [] = { /* Toplevel menus */ - { "Email", NULL, N_("mcen_me_inbox_email"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_edit_menu_activated) }, - { "Edit", NULL, N_("mcen_me_inbox_edit") }, + { "Email", NULL, N_("mcen_me_inbox_email"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_email_menu_activated) }, + { "Edit", NULL, N_("mcen_me_inbox_edit"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_edit_menu_activated) }, { "View", NULL, N_("mcen_me_inbox_view") }, { "Tools", NULL, N_("mcen_me_inbox_tools") }, { "Attachments", NULL, N_("mcen_me_viewer_attachments") }, diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 1df7e28..d15c62f 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -423,6 +423,14 @@ on_account_store_connecting_finished (TnyAccountStore *store, ModestMainWindow * modest_ui_actions_do_send_receive (NULL, MODEST_WINDOW (self)); } +static void +_folder_view_csm_menu_activated (GtkWidget *widget, gpointer user_data) +{ + g_return_if_fail (MODEST_IS_MAIN_WINDOW (user_data)); + + /* Update dimmed */ + modest_window_check_dimming_rules (MODEST_WINDOW (user_data)); +} static void @@ -445,7 +453,9 @@ connect_signals (ModestMainWindow *self) menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewCSM"); gtk_widget_tap_and_hold_setup (GTK_WIDGET (priv->folder_view), menu, NULL, 0); - + g_signal_connect (G_OBJECT(priv->folder_view), "tap-and-hold", + G_CALLBACK(_folder_view_csm_menu_activated), + self); /* header view */ /* g_signal_connect (G_OBJECT(priv->header_view), "status_update", */ /* G_CALLBACK(modest_ui_actions_on_header_status_update), self); */ diff --git a/src/maemo/ui/modest-main-window-ui.xml b/src/maemo/ui/modest-main-window-ui.xml index 7df3028..471c6dc 100644 --- a/src/maemo/ui/modest-main-window-ui.xml +++ b/src/maemo/ui/modest-main-window-ui.xml @@ -114,12 +114,12 @@ - + - + @@ -131,7 +131,7 @@ - + diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 6fcec5b..d44cd5a 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -2803,6 +2803,16 @@ modest_ui_actions_on_retrieve_msg_contents (GtkAction *action, } void +modest_ui_actions_on_email_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules (window); +} + +void modest_ui_actions_on_edit_menu_activated (GtkAction *action, ModestWindow *window) { @@ -2811,3 +2821,33 @@ modest_ui_actions_on_edit_menu_activated (GtkAction *action, /* Update dimmed */ modest_window_check_dimming_rules (window); } + +void +modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules (window); +} + +void +modest_ui_actions_on_folder_view_csm_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules (window); +} + +void +modest_ui_actions_on_header_view_csm_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules (window); +} diff --git a/src/modest-ui-actions.h b/src/modest-ui-actions.h index aea8d87..cbc46a5 100644 --- a/src/modest-ui-actions.h +++ b/src/modest-ui-actions.h @@ -323,8 +323,25 @@ void modest_ui_actions_remove_attachments (GtkAction *action, void modest_ui_actions_on_retrieve_msg_contents (GtkAction *action, ModestWindow *window); -void modest_ui_actions_on_edit_menu_activated (GtkAction *action, - ModestWindow *window); +void +modest_ui_actions_on_email_menu_activated (GtkAction *action, + ModestWindow *window); + +void +modest_ui_actions_on_edit_menu_activated (GtkAction *action, + ModestWindow *window); + +void +modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action, + ModestWindow *window); + +void +modest_ui_actions_on_folder_view_csm_menu_activated (GtkAction *action, + ModestWindow *window); + +void +modest_ui_actions_on_header_view_csm_menu_activated (GtkAction *action, + ModestWindow *window); /** * modest_ui_actions_move_folder_error_handler: diff --git a/src/modest-ui-dimming-rules.c b/src/modest-ui-dimming-rules.c index 3572d5a..b7ddb0d 100644 --- a/src/modest-ui-dimming-rules.c +++ b/src/modest-ui-dimming-rules.c @@ -33,38 +33,43 @@ #include "modest-ui-dimming-rules.h" #include "modest-tny-folder.h" +#include + static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes); static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique); +static gboolean _already_opened_msg (ModestWindow *win); +static gboolean _selected_msg_marked_as (ModestWindow *win, TnyHeaderFlags mask, gboolean opposite); +static gboolean _selected_folder_not_writeable (ModestMainWindow *win); +static gboolean _selected_folder_is_any_of_type (ModestMainWindow *win, TnyFolderType types[], guint ntypes); +static gboolean _selected_folder_is_root (ModestMainWindow *win); gboolean modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data) { - GtkWidget *folder_view = NULL; - TnyFolderStore *parent_folder = NULL; - ModestTnyFolderRules rules; gboolean dimmed = FALSE; g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); - - /* Get folder view */ - folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), - MODEST_WIDGET_TYPE_FOLDER_VIEW); - /* If no folder view, always dimmed */ - if (!folder_view) - return TRUE; - - /* Get selected folder as parent of new folder to create */ - parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); - if (!parent_folder) - return TRUE; - + /* Check dimmed rule */ - rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder)); - dimmed = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; + if (!dimmed) + dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); - /* free */ - g_object_unref (parent_folder); + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _selected_folder_not_writeable (MODEST_MAIN_WINDOW(win)); + if (!dimmed) + dimmed = _selected_folder_is_root (MODEST_MAIN_WINDOW(win)); return dimmed; } @@ -77,7 +82,8 @@ modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data) g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); /* Check dimmed rule */ - dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE); + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE); return dimmed; } @@ -85,42 +91,22 @@ modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data) gboolean modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data) { - GtkWidget *folder_view = NULL; - TnyFolderStore *current_folder = NULL; - gboolean local_folder = FALSE; gboolean dimmed = FALSE; - TnyFolderType types[2]; + TnyFolderType types[3]; g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); - /* Get folder view */ - folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), - MODEST_WIDGET_TYPE_FOLDER_VIEW); - /* If no folder view, always dimmed */ - if (!folder_view) - return TRUE; - - /* Get selected folder as parent of new folder to create */ - current_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); - if (!current_folder) - return TRUE; - - if (TNY_IS_FOLDER(current_folder)) - local_folder = modest_tny_folder_is_local_folder (TNY_FOLDER(current_folder)); types[0] = TNY_FOLDER_TYPE_DRAFTS; types[1] = TNY_FOLDER_TYPE_OUTBOX; + types[2] = TNY_FOLDER_TYPE_ROOT; /* Check dimmed rule */ if (!dimmed) - dimmed = ((local_folder) && - (_folder_is_any_of_type (TNY_FOLDER(current_folder), types, 2))); + dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3); if (!dimmed) dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE); - /* free */ - g_object_unref (current_folder); - return dimmed; } @@ -138,9 +124,269 @@ modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data) return dimmed; } +gboolean +modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_WINDOW(win), FALSE); + + /* Check dimmed rule */ + if (!dimmed) + dimmed = TRUE; + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE); + if (!dimmed) + dimmed = _already_opened_msg (win); + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_details_msg (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE); + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + TnyHeaderFlags flags; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + flags = TNY_HEADER_FLAG_SEEN; + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE); + if (!dimmed) + dimmed = _selected_msg_marked_as (win, flags, FALSE); + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + TnyHeaderFlags flags; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + flags = TNY_HEADER_FLAG_SEEN; + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE); + if (!dimmed) + dimmed = _selected_msg_marked_as (win, flags, TRUE); + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + if (MODEST_IS_MAIN_WINDOW (win)) + dimmed = modest_ui_dimming_rules_on_main_window_move_to (win, user_data); + else + dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data); + + return dimmed; +} + + +gboolean +modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data) +{ + GtkWidget *folder_view = NULL; + GtkWidget *header_view = NULL; + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), TRUE); + + /* Get the folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + + /* Get header view */ + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + + /* Check common diming rules */ + + /* Check diming rules for folder transfer */ + if (gtk_widget_is_focus (folder_view)) { + if (!dimmed) + dimmed = _selected_folder_not_writeable(MODEST_MAIN_WINDOW(win)); + } + /* Check diming rules for msg transfer */ + else if (gtk_widget_is_focus (header_view)) { + if (!dimmed) + dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE); + + } + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data) +{ + gboolean dimmed = FALSE; + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data) +{ + TnyFolderType types[3]; + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + types[0] = TNY_FOLDER_TYPE_DRAFTS; + types[1] = TNY_FOLDER_TYPE_OUTBOX; + types[2] = TNY_FOLDER_TYPE_SENT; + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3); + + return dimmed; +} + +gboolean +modest_ui_dimming_rules_on_delete_msgs (ModestWindow *win, gpointer user_data) +{ + TnyFolderType types[5]; + gboolean dimmed = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + types[0] = TNY_FOLDER_TYPE_DRAFTS; + types[1] = TNY_FOLDER_TYPE_OUTBOX; + types[2] = TNY_FOLDER_TYPE_SENT; + types[3] = TNY_FOLDER_TYPE_INBOX; + types[4] = TNY_FOLDER_TYPE_ROOT; + + /* Check dimmed rule */ + if (!dimmed) + dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 5); + + return dimmed; +} + + /* *********************** static utility functions ******************** */ static gboolean +_selected_folder_not_writeable (ModestMainWindow *win) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *parent_folder = NULL; + ModestTnyFolderRules rules; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) + return TRUE; + + /* Get selected folder as parent of new folder to create */ + parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(parent_folder || TNY_IS_FOLDER(parent_folder))) + return TRUE; + + /* Check dimmed rule */ + rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder)); + result = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; + + /* free */ + g_object_unref (parent_folder); + + return result; +} + +static gboolean +_selected_folder_is_root (ModestMainWindow *win) +{ + TnyFolderType types[2]; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + types[0] = TNY_FOLDER_TYPE_ROOT; + types[1] = TNY_FOLDER_TYPE_INBOX; + + /* Check folder type */ + result = _selected_folder_is_any_of_type (win, types, 2); + + return result; +} + +static gboolean +_selected_folder_is_any_of_type (ModestMainWindow *win, + TnyFolderType types[], + guint ntypes) +{ + GtkWidget *folder_view = NULL; + TnyFolderStore *folder = NULL; + gboolean result = FALSE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get folder view */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + /* If no folder view, always dimmed */ + if (!folder_view) + return TRUE; + + /* Get selected folder as parent of new folder to create */ + folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + if (!(folder || TNY_IS_FOLDER(folder))) + return TRUE; + + /* Check folder type */ + result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes); + + /* free */ + g_object_unref (folder); + + return result; +} + +static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes) @@ -201,3 +447,91 @@ _invalid_msg_selected (ModestMainWindow *win, return result; } + +static gboolean +_already_opened_msg (ModestWindow *win) +{ + ModestWindow *window = NULL; + ModestWindowMgr *mgr = NULL; + GtkWidget *header_view = NULL; + TnyList *selected_headers = NULL; + TnyIterator *iter = NULL; + TnyHeader *header = NULL; + gboolean result = TRUE; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE); + + /* Get header view to check selected messages */ + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + + /* Get selected headers */ + selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); + if (selected_headers == NULL) + return FALSE; + + /* Check dimmed rule (TODO: check focus on widgets */ + mgr = modest_runtime_get_window_mgr (); + iter = tny_list_create_iterator (selected_headers); + while (!tny_iterator_is_done (iter) && result) { + header = TNY_HEADER (tny_iterator_get_current (iter)); + window = modest_window_mgr_find_window_by_msguid (mgr, tny_header_get_uid (header)); + result = result && (window != NULL); + + g_object_unref (header); + tny_iterator_next (iter); + } + + /* free */ + if (selected_headers != NULL) + g_object_unref (selected_headers); + if (iter != NULL) + g_object_unref (iter); + + return result; +} + +static gboolean +_selected_msg_marked_as (ModestWindow *win, + TnyHeaderFlags mask, + gboolean opposite) +{ + GtkWidget *header_view = NULL; + TnyList *selected_headers = NULL; + TnyIterator *iter = NULL; + TnyHeader *header = NULL; + TnyHeaderFlags flags; + gboolean result = FALSE; + + /* Get header view to check selected messages */ + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + + /* Get selected headers */ + selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view)); + if (selected_headers == NULL) + return TRUE; + + /* Call the function for each header */ + iter = tny_list_create_iterator (selected_headers); + while (!tny_iterator_is_done (iter) && !result) { + header = TNY_HEADER (tny_iterator_get_current (iter)); + + flags = tny_header_get_flags (header); + if (opposite) + result = (flags & mask) == 0; + else + result = (flags & mask) != 0; + + g_object_unref (header); + tny_iterator_next (iter); + } + + /* free */ + if (selected_headers != NULL) + g_object_unref (selected_headers); + if (iter != NULL) + g_object_unref (iter); + + return result; +} diff --git a/src/modest-ui-dimming-rules.h b/src/modest-ui-dimming-rules.h index 97c9c8d..f069165 100644 --- a/src/modest-ui-dimming-rules.h +++ b/src/modest-ui-dimming-rules.h @@ -38,9 +38,20 @@ G_BEGIN_DECLS /* Menu & toolbar dimming rules */ gboolean modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_rename_folder (ModestWindow *win, gpointer user_data); gboolean modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data); gboolean modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data); gboolean modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_always_dimmed (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_delete_msg (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_details_msg (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_mark_as_read_msg (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_mark_as_unread_msg (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_move_to (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_main_window_move_to (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_view_window_move_to (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_paste_msgs (ModestWindow *win, gpointer user_data); +gboolean modest_ui_dimming_rules_on_delete_msgs (ModestWindow *win, gpointer user_data); G_END_DECLS #endif