static const GtkActionEntry modest_action_entries [] = {
/* Toplevel menus */
- { "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") },
- { "Close", NULL, N_("mcen_me_inbox_close") },
- { "Zoom", NULL, N_("Zoom") },
+ { "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"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_view_menu_activated) },
+ { "Tools", NULL, N_("mcen_me_inbox_tools"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_tools_menu_activated) },
+ { "Attachments", NULL, N_("mcen_me_viewer_attachments"), NULL, NULL, G_CALLBACK (modest_ui_actions_on_attachment_menu_activated) },
+ { "Close", NULL, N_("mcen_me_inbox_close") },
+ { "Zoom", NULL, N_("Zoom") },
/* Zoom and fullscreen keyboard actions*/
{ "ZoomPlus", NULL, N_("Zoom +"), "F7", NULL, G_CALLBACK (modest_ui_actions_on_zoom_plus) },
static void on_send_receive_csm_activated (GtkMenuItem *item,
gpointer user_data);
+static void
+_on_msg_count_changed (ModestHeaderView *header_view,
+ TnyFolder *folder,
+ TnyFolderChange *change,
+ ModestMainWindow *main_window);
+
static GtkWidget * create_empty_view (void);
G_CALLBACK(modest_ui_actions_on_item_not_found), self);
g_signal_connect (G_OBJECT(priv->header_view), "key-press-event",
G_CALLBACK(on_inner_widgets_key_pressed), self);
+ g_signal_connect (G_OBJECT(priv->header_view), "msg_count_changed",
+ G_CALLBACK(_on_msg_count_changed), self);
/* Header view CSM */
menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/HeaderViewCSM");
}
+static void
+_on_msg_count_changed (ModestHeaderView *header_view,
+ TnyFolder *folder,
+ TnyFolderChange *change,
+ ModestMainWindow *main_window)
+{
+ gboolean folder_empty = FALSE;
+ TnyFolderChangeChanged changed;
+
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (main_window));
+ g_return_if_fail (TNY_IS_FOLDER(folder));
+ g_return_if_fail (TNY_IS_FOLDER_CHANGE(change));
+
+ changed = tny_folder_change_get_changed (change);
+
+ /* If something changes */
+ if ((changed) & TNY_FOLDER_CHANGE_CHANGED_ALL_COUNT)
+ folder_empty = (tny_folder_change_get_new_all_count (change) == 0);
+ else
+ folder_empty = (tny_folder_get_all_count (TNY_FOLDER (folder)) == 0);
+
+ /* Set contents style of headers view */
+ if (folder_empty) {
+ modest_main_window_set_contents_style (main_window,
+ MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
+ }
+ else {
+ modest_main_window_set_contents_style (main_window,
+ MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
+ }
+
+}
+
void
modest_main_window_set_contents_style (ModestMainWindow *self,
ModestMainWindowContentsStyle style)
/* Edit Menu */
{ "/MenuBar/EditMenu", NULL },
{ "/MenuBar/EditMenu/EditCutMenu", G_CALLBACK(modest_ui_dimming_rules_always_dimmed) },
- { "/MenuBar/EditMenu/EditCopyMenu", NULL },
+ { "/MenuBar/EditMenu/EditCopyMenu", G_CALLBACK(modest_ui_dimming_rules_on_copy) },
{ "/MenuBar/EditMenu/EditPasteMenu", G_CALLBACK(modest_ui_dimming_rules_always_dimmed) },
{ "/MenuBar/EditMenu/EditSelectAllMenu", NULL },
{ "/MenuBar/EditMenu/EditMoveToMenu", G_CALLBACK(modest_ui_dimming_rules_on_move_to) },
{ "/MenuBar/ViewMenu", NULL },
{ "/MenuBar/ViewMenu/ZoomMenu", NULL },
{ "/MenuBar/ViewMenu/ViewToggleFullscreenMenu", NULL },
- { "/MenuBar/ViewMenu/ViewPreviousMessageMenu", NULL },
- { "/MenuBar/ViewMenu/ViewNextMessageMenu", NULL },
+ { "/MenuBar/ViewMenu/ViewPreviousMessageMenu", G_CALLBACK(modest_ui_dimming_rules_on_view_previous) },
+ { "/MenuBar/ViewMenu/ViewNextMessageMenu", G_CALLBACK(modest_ui_dimming_rules_on_view_next)},
/* Attachments Menu */
{ "/MenuBar/AttachmentsMenu", NULL },
- { "/MenuBar/AttachmentsMenu/ViewAttachmentMenu", NULL },
- { "/MenuBar/AttachmentsMenu/SaveAttachmentMenu", NULL },
- { "/MenuBar/AttachmentsMenu/RemoveAttachmentMenu", NULL },
+ { "/MenuBar/AttachmentsMenu/ViewAttachmentMenu", G_CALLBACK(modest_ui_dimming_rules_on_view_attachments) },
+ { "/MenuBar/AttachmentsMenu/SaveAttachmentMenu", G_CALLBACK(modest_ui_dimming_rules_on_view_attachments) },
+ { "/MenuBar/AttachmentsMenu/RemoveAttachmentMenu", G_CALLBACK(modest_ui_dimming_rules_on_remove_attachments) },
/* Tools Menu */
{ "/MenuBar/ToolsMenu", NULL },
- { "/MenuBar/ToolsMenu/ToolsContactsMenu", NULL },
+ { "/MenuBar/ToolsMenu/ToolsContactsMenu", },
/* Close Menu */
{ "/MenuBar/CloseMenu", NULL },
{ "/Toolbar/ToolbarDeleteMessage", G_CALLBACK(modest_ui_dimming_rules_on_delete_msg) },
{ "/Toolbar/ToolbarMoveTo", G_CALLBACK(modest_ui_dimming_rules_on_move_to) },
{ "/Toolbar/ToolbarFindInMessage", NULL },
- { "/Toolbar/ToolbarMessageBack", NULL },
- { "/Toolbar/ToolbarMessageNext", NULL },
+ { "/Toolbar/ToolbarMessageBack", G_CALLBACK(modest_ui_dimming_rules_on_view_previous) },
+ { "/Toolbar/ToolbarMessageNext", G_CALLBACK(modest_ui_dimming_rules_on_view_next) },
{ "/Toolbar/ToolbarCancel", NULL },
};
gpointer userdata);
static void modest_msg_view_window_scroll_up (ModestWindow *window);
static void modest_msg_view_window_scroll_down (ModestWindow *window);
-static gboolean modest_msg_view_window_is_last_message (ModestMsgViewWindow *window);
-static gboolean modest_msg_view_window_is_first_message (ModestMsgViewWindow *window);
-static TnyFolderType modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window);
-static void modest_msg_view_window_update_dimmed (ModestMsgViewWindow *window);
static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window);
static void modest_msg_view_window_show_toolbar (ModestWindow *window,
static gboolean set_toolbar_transfer_mode (ModestMsgViewWindow *self);
-static void view_attachment_insensitive_press (GtkWidget *widget, ModestMsgViewWindow *window);
-static void save_attachment_insensitive_press (GtkWidget *widget, ModestMsgViewWindow *window);
static void update_window_title (ModestMsgViewWindow *window);
modest_msg_view_window_update_priority (window);
- modest_msg_view_window_update_dimmed (window);
-
return MODEST_WINDOW(window);
}
GtkActionGroup *action_group = NULL;
GError *error = NULL;
GdkPixbuf *window_icon = NULL;
- GtkAction *action = NULL;
- GtkWidget *widget = NULL;
g_return_val_if_fail (msg, NULL);
priv->last_search = NULL;
- modest_msg_view_window_update_dimmed (MODEST_MSG_VIEW_WINDOW (obj));
/* Set window icon */
window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON);
gtk_window_set_icon (GTK_WINDOW (obj), window_icon);
/* Init the clipboard actions dim status */
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCopyMenu");
- gtk_action_set_sensitive (action, FALSE);
-
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCutMenu");
- gtk_action_set_sensitive (action, FALSE);
-
- /* also set the add to contacts status to false as it depends on clipboard status */
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsAddToContactsMenu");
- gtk_action_set_sensitive (action, FALSE);
-
- /* insensitive handlers */
- widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/ViewAttachmentMenu");
- g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (view_attachment_insensitive_press), self);
- widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/SaveAttachmentMenu");
- g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (save_attachment_insensitive_press), self);
-
gtk_widget_grab_focus (priv->msg_view);
update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
g_signal_emit_by_name (G_OBJECT (priv->main_scroll), "scroll-child", GTK_SCROLL_STEP_DOWN, FALSE);
}
-static gboolean
-modest_msg_view_window_is_last_message (ModestMsgViewWindow *window)
+gboolean
+modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
{
GtkTreePath *path;
ModestMsgViewWindowPrivate *priv;
}
-static gboolean
-modest_msg_view_window_is_first_message (ModestMsgViewWindow *window)
+gboolean
+modest_msg_view_window_has_headers_model (ModestMsgViewWindow *window)
+{
+ ModestMsgViewWindowPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), TRUE);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+
+ return priv->header_model != NULL;
+}
+
+gboolean
+modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
{
GtkTreePath *path;
ModestMsgViewWindowPrivate *priv;
/* Set new message */
modest_msg_view_set_message (MODEST_MSG_VIEW (priv->msg_view), msg);
- modest_msg_view_window_update_dimmed (self);
modest_msg_view_window_update_priority (self);
update_window_title (MODEST_MSG_VIEW_WINDOW (self));
gtk_widget_grab_focus (priv->msg_view);
}
-static TnyFolderType
+TnyFolderType
modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window)
{
ModestMsgViewWindowPrivate *priv;
return folder_type;
}
-static void
-modest_msg_view_window_update_dimmed (ModestMsgViewWindow *window)
-{
- ModestWindowPrivate *parent_priv;
- ModestMsgViewWindowPrivate *priv;
- GtkAction *widget;
- gboolean is_first, is_last;
- TnyFolderType folder_type;
- gboolean is_not_sent;
- GList *attachments, *node;
- gint n_selected;
- gboolean selected_messages = FALSE;
- gboolean nested_attachments = FALSE;
-
- parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
- priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
-
- is_first = modest_msg_view_window_is_first_message (window);
- is_last = modest_msg_view_window_is_last_message (window);
-
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack");
- gtk_action_set_sensitive (widget, !is_first);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewPreviousMessageMenu");
- gtk_action_set_sensitive (widget, !is_first);
-
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
- gtk_action_set_sensitive (widget, !is_last);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewNextMessageMenu");
- gtk_action_set_sensitive (widget, !is_last);
-
- folder_type = modest_msg_view_window_get_folder_type (MODEST_MSG_VIEW_WINDOW (window));
- is_not_sent = ((folder_type == TNY_FOLDER_TYPE_DRAFTS)||(folder_type == TNY_FOLDER_TYPE_OUTBOX));
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply");
- gtk_action_set_sensitive (widget, !is_not_sent);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/MessageMenu/MessageReplyMenu");
- gtk_action_set_sensitive (widget, !is_not_sent);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/MessageMenu/MessageReplyAllMenu");
- gtk_action_set_sensitive (widget, !is_not_sent);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/MessageMenu/MessageForwardMenu");
- gtk_action_set_sensitive (widget, !is_not_sent);
-
- /* Attachment actions dimming */
- attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
- n_selected = g_list_length (attachments);
- for (node = attachments; node != NULL; node = g_list_next (node)) {
- TnyMimePart *mime_part = TNY_MIME_PART (node->data);
- TnyList *nested_list = tny_simple_list_new ();
- if (!tny_mime_part_is_attachment (mime_part)) {
- selected_messages = TRUE;
- break;
- }
- tny_mime_part_get_parts (mime_part, nested_list);
- if (tny_list_get_length (nested_list) > 0)
- nested_attachments = TRUE;
- g_object_unref (nested_list);
- }
- g_list_free (attachments);
-
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/ViewAttachmentMenu");
- gtk_action_set_sensitive (widget, n_selected == 1);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/AttachmentsMenu/SaveAttachmentMenu");
- gtk_action_set_sensitive (widget, (n_selected > 0) && (!selected_messages) && (!nested_attachments));
-
- /* Dimming depending of message being an attachment or not. It's not an attachment if
- * we opened it outside a folder view */
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/MessageMenu/MessageDeleteMenu");
- gtk_action_set_sensitive (widget, priv->header_model != NULL);
- widget = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditMoveToMenu");
- gtk_action_set_sensitive (widget, priv->header_model != NULL);
-
-}
static void
modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
ModestMsgViewWindow *window)
{
ModestWindowPrivate *parent_priv;
- GtkAction *action;
+/* GtkAction *action; */
gboolean is_address;
gchar *selection;
GtkWidget *focused;
is_address = ((selection != NULL) && (modest_text_utils_validate_recipient (selection)));
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsAddToContactsMenu");
- gtk_action_set_sensitive (action, is_address);
+/* action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsAddToContactsMenu"); */
+/* gtk_action_set_sensitive (action, is_address); */
focused = gtk_window_get_focus (GTK_WINDOW (window));
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCopyMenu");
- gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused)));
+/* action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCopyMenu"); */
+/* gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused))); */
- action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCutMenu");
- gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused)));
+/* action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/EditMenu/EditCutMenu"); */
+/* gtk_action_set_sensitive (action, (selection != NULL) && (!MODEST_IS_ATTACHMENTS_VIEW (focused))); */
g_free (selection);
- modest_msg_view_window_update_dimmed (window);
+/* modest_msg_view_window_update_dimmed (window); */
}
}
}
+GList *
+modest_msg_view_window_get_attachments (ModestMsgViewWindow *win)
+{
+ ModestMsgViewWindowPrivate *priv;
+ GList *selected_attachments = NULL;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), NULL);
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (win);
+
+ selected_attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
+
+ return selected_attachments;
+}
+
void
modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart *mime_part)
{
/* g_message ("not implemented %s", __FUNCTION__); */
}
-static void
-view_attachment_insensitive_press (GtkWidget *widget, ModestMsgViewWindow *window)
-{
- GList *attachments = NULL;
- ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
-
- attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
- if (g_list_length (attachments) > 1)
- hildon_banner_show_information (NULL, NULL, _("mcen_ib_unable_to_display_more"));
-
- g_list_free (attachments);
-
-}
-
-static void
-save_attachment_insensitive_press (GtkWidget *widget, ModestMsgViewWindow *window)
-{
- GList *attachments = NULL;
- ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- gboolean selected_messages = FALSE;
- gboolean nested_attachments = FALSE;
- gint n_selected = 0;
- GList *node = NULL;
-
- attachments = modest_msg_view_get_selected_attachments (MODEST_MSG_VIEW (priv->msg_view));
- n_selected = g_list_length (attachments);
- for (node = attachments; node != NULL; node = g_list_next (node)) {
- TnyMimePart *mime_part = TNY_MIME_PART (node->data);
- TnyList *nested_list = tny_simple_list_new ();
- if (!tny_mime_part_is_attachment (mime_part)) {
- selected_messages = TRUE;
- break;
- }
- tny_mime_part_get_parts (mime_part, nested_list);
- if (tny_list_get_length (nested_list) > 0)
- nested_attachments = TRUE;
- g_object_unref (nested_list);
- }
- g_list_free (attachments);
- if (selected_messages) {
- hildon_banner_show_information (NULL, NULL, _("mcen_ib_unable_to_save_attach_mail"));
- } else if (nested_attachments) {
- hildon_banner_show_information (NULL, NULL, _("FIXME:unable to save attachments with nested elements"));
- } else if (n_selected == 0) {
- hildon_banner_show_information (NULL, NULL, _("FIXME:no attachment selected"));
- }
-
- return ;
-
-}
static void
update_window_title (ModestMsgViewWindow *window)
gpointer user_data;
} GetMsgAsyncHelper;
+typedef struct _RefreshAsyncHelper {
+ ModestMailOperation *mail_op;
+ RefreshAsyncUserCallback user_callback;
+ gpointer user_data;
+} RefreshAsyncHelper;
+
typedef struct _XFerMsgAsyncHelper
{
ModestMailOperation *mail_op;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE (self);
/* cancel current operation in account */
- tny_account_cancel (priv->account);
+ //tny_account_cancel (priv->account);
did_a_cancel = TRUE;
GError **error,
gpointer user_data)
{
- ModestMailOperation *self;
- ModestMailOperationPrivate *priv;
+ RefreshAsyncHelper *helper = NULL;
+ ModestMailOperation *self = NULL;
+ ModestMailOperationPrivate *priv = NULL;
- self = MODEST_MAIL_OPERATION (user_data);
+ helper = (RefreshAsyncHelper *) user_data;
+ self = helper->mail_op;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
if (*error) {
priv->status = MODEST_MAIL_OPERATION_STATUS_SUCCESS;
+ /* Call user defined callback, if it exists */
+ if (helper->user_callback)
+ helper->user_callback (priv->source, folder, helper->user_data);
+
out:
/* Free */
+ g_object_unref (helper->mail_op);
+ g_slice_free (RefreshAsyncHelper, helper);
g_object_unref (folder);
/* Notify about operation end */
TnyStatus *status,
gpointer user_data)
{
- ModestMailOperation *self;
- ModestMailOperationPrivate *priv;
+ RefreshAsyncHelper *helper = NULL;
+ ModestMailOperation *self = NULL;
+ ModestMailOperationPrivate *priv = NULL;
ModestMailOperationState *state;
+ g_return_if_fail (user_data != NULL);
g_return_if_fail (status != NULL);
g_return_if_fail (status->code == TNY_FOLDER_STATUS_CODE_REFRESH);
- self = MODEST_MAIL_OPERATION (user_data);
+ helper = (RefreshAsyncHelper *) user_data;
+ self = helper->mail_op;
+ g_return_if_fail (MODEST_IS_MAIL_OPERATION(self));
+
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
priv->done = status->position;
void
modest_mail_operation_refresh_folder (ModestMailOperation *self,
- TnyFolder *folder)
+ TnyFolder *folder,
+ RefreshAsyncUserCallback user_callback,
+ gpointer user_data)
{
- ModestMailOperationPrivate *priv;
+ ModestMailOperationPrivate *priv = NULL;
+ RefreshAsyncHelper *helper = NULL;
priv = MODEST_MAIL_OPERATION_GET_PRIVATE(self);
/* Get account and set it into mail_operation */
priv->account = modest_tny_folder_get_account (folder);
+ /* Create the helper */
+ helper = g_slice_new0 (RefreshAsyncHelper);
+ helper->mail_op = g_object_ref(self);
+ helper->user_callback = user_callback;
+ helper->user_data = user_data;
+
/* Refresh the folder. TODO: tinymail could issue a status
updates before the callback call then this could happen. We
must review the design */
tny_folder_refresh_async (folder,
on_refresh_folder,
on_refresh_folder_status_update,
- self);
+ helper);
}
/**
new_msg = tny_platform_factory_new_msg (fact);
header = tny_msg_get_header (new_msg);
- tny_header_set_from (TNY_HEADER (header), from);
- tny_header_set_replyto (TNY_HEADER (header), from);
- tny_header_set_to (TNY_HEADER (header), mailto);
- tny_header_set_cc (TNY_HEADER (header), cc);
- tny_header_set_bcc (TNY_HEADER (header), bcc);
-
- if (subject)
+ if ((from != NULL) && (strlen(from) > 0)) {
+ tny_header_set_from (TNY_HEADER (header), from);
+ tny_header_set_replyto (TNY_HEADER (header), from);
+ }
+ if ((mailto != NULL) && (strlen(mailto) > 0))
+ tny_header_set_to (TNY_HEADER (header), mailto);
+ if ((cc != NULL) && (strlen(cc) > 0))
+ tny_header_set_cc (TNY_HEADER (header), cc);
+ if ((bcc != NULL) && (strlen(bcc) > 0))
+ tny_header_set_bcc (TNY_HEADER (header), bcc);
+
+ if ((subject != NULL) && (strlen(subject) > 0))
tny_header_set_subject (TNY_HEADER (header), subject);
content_type = get_content_type(body);
new_msg = tny_platform_factory_new_msg (fact);
header = tny_msg_get_header (new_msg);
- tny_header_set_from (TNY_HEADER (header), from);
- tny_header_set_replyto (TNY_HEADER (header), from);
- tny_header_set_to (TNY_HEADER (header), mailto);
- tny_header_set_cc (TNY_HEADER (header), cc);
- tny_header_set_bcc (TNY_HEADER (header), bcc);
- tny_header_set_subject (TNY_HEADER (header), subject);
+ if ((from != NULL) && (strlen(from) > 0)) {
+ tny_header_set_from (TNY_HEADER (header), from);
+ tny_header_set_replyto (TNY_HEADER (header), from);
+ }
+ if ((mailto != NULL) && (strlen(mailto) > 0))
+ tny_header_set_to (TNY_HEADER (header), mailto);
+ if ((cc != NULL) && (strlen(cc) > 0))
+ tny_header_set_cc (TNY_HEADER (header), cc);
+ if ((bcc != NULL) && (strlen(bcc) > 0))
+ tny_header_set_bcc (TNY_HEADER (header), bcc);
+
+ if ((subject != NULL) && (strlen(subject) > 0))
+ tny_header_set_subject (TNY_HEADER (header), subject);
content_type = get_content_type(plain_body);
{
ModestConf *conf;
GtkWidget *header_view;
- gboolean folder_empty = FALSE;
g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window));
set_active_account_from_tny_account (account, MODEST_WINDOW (main_window));
g_object_unref (account);
}
-
-
+
/* Set folder on header view */
modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view),
TNY_FOLDER (folder_store));
-
+
+ /* Resore configuration */
+ modest_widget_memory_restore (conf, G_OBJECT(header_view),
+ MODEST_CONF_HEADER_VIEW_KEY);
+
/* Set main view style */
- folder_empty = tny_folder_get_all_count (TNY_FOLDER (folder_store)) == 0;
- if (folder_empty) {
- modest_main_window_set_contents_style (main_window,
- MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
- }
- else {
- modest_main_window_set_contents_style (main_window,
- MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
- modest_widget_memory_restore (conf, G_OBJECT(header_view),
- MODEST_CONF_HEADER_VIEW_KEY);
- }
+/* modest_main_window_set_contents_style (main_window, */
+/* MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS); */
+/* modest_widget_memory_restore (conf, G_OBJECT(header_view), */
+/* MODEST_CONF_HEADER_VIEW_KEY); */
+
} else {
/* Update the active account */
modest_window_set_active_account (MODEST_WINDOW (main_window), NULL);
}
void
+modest_ui_actions_on_view_menu_activated (GtkAction *action,
+ ModestWindow *window)
+{
+ g_return_if_fail (MODEST_IS_WINDOW (window));
+
+ /* Update dimmed */
+ modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules");
+}
+
+void
+modest_ui_actions_on_tools_menu_activated (GtkAction *action,
+ ModestWindow *window)
+{
+ g_return_if_fail (MODEST_IS_WINDOW (window));
+
+ /* Update dimmed */
+ modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules");
+}
+
+void
+modest_ui_actions_on_attachment_menu_activated (GtkAction *action,
+ ModestWindow *window)
+{
+ g_return_if_fail (MODEST_IS_WINDOW (window));
+
+ /* Update dimmed */
+ modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules");
+}
+
+void
modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action,
ModestWindow *window)
{
ModestWindow *window);
void
+modest_ui_actions_on_view_menu_activated (GtkAction *action,
+ ModestWindow *window);
+
+void
+modest_ui_actions_on_tools_menu_activated (GtkAction *action,
+ ModestWindow *window);
+
+void
+modest_ui_actions_on_attachment_menu_activated (GtkAction *action,
+ ModestWindow *window);
+
+void
modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action,
ModestWindow *window);
#include "modest-ui-dimming-rules.h"
#include "modest-dimming-rule.h"
#include "modest-tny-folder.h"
+#include <widgets/modest-attachments-view.h>
#include <modest-runtime.h>
+#include <tny-simple-list.h>
static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique, ModestDimmingRule *rule);
+static gboolean _invalid_attach_selected (ModestMsgViewWindow *win, gboolean unique, ModestDimmingRule *rule);
+static gboolean _invalid_clipboard_selected (ModestMsgViewWindow *win);
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_any_of_type (ModestWindow *win, TnyFolderType types[], guint ntypes);
static gboolean _selected_folder_is_root_or_inbox (ModestMainWindow *win);
static gboolean _selected_folder_is_root (ModestMainWindow *win);
static gboolean _selected_folder_is_empty (ModestMainWindow *win);
/* Check dimmed rule */
if (!dimmed) {
- dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
+ dimmed = _selected_folder_is_any_of_type (win, types, 3);
if (dimmed)
modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_reply"));
}
ModestDimmingRule *rule = NULL;
gboolean dimmed = FALSE;
- g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (win), FALSE);
g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
rule = MODEST_DIMMING_RULE (user_data);
- /* Check dimmed rule */
- if (!dimmed) {
- dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del"));
- }
- if (!dimmed) {
- dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
- }
- if (!dimmed) {
- dimmed = _already_opened_msg (win);
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages"));
- }
- if (!dimmed) {
- dimmed = _marked_as_deleted (win);
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
- }
- if (!dimmed) {
- dimmed = _msg_sent_in_progress (win);
- if (dimmed)
- modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
+ /* Check dimmed rule */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ if (!dimmed) {
+ dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_nothing_to_del"));
+ }
+ if (!dimmed) {
+ dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE, user_data);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
+ }
+ if (!dimmed) {
+ dimmed = _already_opened_msg (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_nc_unable_to_delete_n_messages"));
+ }
+ if (!dimmed) {
+ dimmed = _marked_as_deleted (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
+ }
+ if (!dimmed) {
+ dimmed = _msg_sent_in_progress (win);
+ if (dimmed)
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_message_unableto_delete"));
+ }
+ }
+ else if (MODEST_IS_MSG_VIEW_WINDOW (win)) {
+ if (!dimmed) {
+ dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
+ }
}
return dimmed;
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);
+ else if (MODEST_IS_MSG_VIEW_WINDOW (win))
+ dimmed = modest_ui_dimming_rules_on_view_window_move_to (win, user_data);
return dimmed;
}
{
gboolean dimmed = FALSE;
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = !modest_msg_view_window_has_headers_model (MODEST_MSG_VIEW_WINDOW(win));
+
return dimmed;
}
/* Check dimmed rule */
if (!dimmed)
- dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 3);
+ dimmed = _selected_folder_is_any_of_type (win, types, 3);
return dimmed;
}
/* Check dimmed rule */
if (!dimmed)
- dimmed = _selected_folder_is_any_of_type (MODEST_MAIN_WINDOW(win), types, 5);
+ dimmed = _selected_folder_is_any_of_type (win, types, 5);
return dimmed;
}
{
gboolean dimmed = FALSE;
+ g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
+
/* Check dimmed rule */
if (!dimmed)
dimmed = _selected_folder_is_empty (MODEST_MAIN_WINDOW(win));
return dimmed;
}
+gboolean
+modest_ui_dimming_rules_on_view_attachments (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = _invalid_attach_selected (MODEST_MSG_VIEW_WINDOW(win), TRUE, rule);
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = _invalid_attach_selected (MODEST_MSG_VIEW_WINDOW(win), FALSE, rule);
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data)
+{
+ ModestDimmingRule *rule = NULL;
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+ g_return_val_if_fail (MODEST_IS_DIMMING_RULE (user_data), FALSE);
+ rule = MODEST_DIMMING_RULE (user_data);
+
+ /* Check dimmed rule */
+ if (!dimmed) {
+ dimmed = _invalid_attach_selected (MODEST_MSG_VIEW_WINDOW(win), FALSE, NULL);
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_display_more"));
+ }
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data)
+{
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = _invalid_clipboard_selected (MODEST_MSG_VIEW_WINDOW(win));
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data)
+{
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = modest_msg_view_window_first_message_selected (MODEST_MSG_VIEW_WINDOW(win));
+
+ return dimmed;
+}
+
+gboolean
+modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data)
+{
+ gboolean dimmed = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win), FALSE);
+
+ /* Check dimmed rule */
+ if (!dimmed)
+ dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW(win));
+
+ return dimmed;
+}
+
gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data)
{
types[1] = TNY_FOLDER_TYPE_INBOX;
/* Check folder type */
- result = _selected_folder_is_any_of_type (win, types, 2);
+ result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 2);
if (!result) {
GtkWidget *folder_view = NULL;
types[0] = TNY_FOLDER_TYPE_ROOT;
/* Check folder type */
- result = _selected_folder_is_any_of_type (win, types, 1);
+ result = _selected_folder_is_any_of_type (MODEST_WINDOW(win), types, 1);
return result;
}
}
static gboolean
-_selected_folder_is_any_of_type (ModestMainWindow *win,
+_selected_folder_is_any_of_type (ModestWindow *win,
TnyFolderType types[],
guint ntypes)
{
GtkWidget *folder_view = NULL;
TnyFolderStore *folder = NULL;
+ TnyFolderType folder_type;
+ guint i=0;
gboolean result = FALSE;
- g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
+ /*Get curent folder */
+ if (MODEST_IS_MAIN_WINDOW(win)) {
- /* 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;
+ /* 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;
- /* Check folder type */
- result = _folder_is_any_of_type (TNY_FOLDER(folder), types, ntypes);
+ /* 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);
+ }
+ else if (MODEST_IS_MSG_VIEW_WINDOW(win)) {
+ folder_type = modest_msg_view_window_get_folder_type (MODEST_MSG_VIEW_WINDOW (win));
+ for (i=0; i < ntypes; i++) {
+ result = result || folder_type == types[i];
+ }
+ }
+
/* free */
g_object_unref (folder);
static gboolean
+_invalid_clipboard_selected (ModestMsgViewWindow *win)
+{
+ GtkClipboard *clipboard = NULL;
+ gchar *selection = NULL;
+ GtkWidget *focused = NULL;
+ gboolean result = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), TRUE);
+
+ /* Get clipboard selection*/
+ clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
+ selection = gtk_clipboard_wait_for_text (clipboard);
+
+ /* Get focuesed widget */
+ focused = gtk_window_get_focus (GTK_WINDOW (win));
+
+ /* Check dimming */
+ result = ((selection == NULL) ||
+ (MODEST_IS_ATTACHMENTS_VIEW (focused)));
+
+ return result;
+}
+
+static gboolean
+_invalid_attach_selected (ModestMsgViewWindow *win,
+ gboolean unique,
+ ModestDimmingRule *rule)
+{
+ GList *attachments, *node;
+ gint n_selected;
+ gboolean nested_attachments = FALSE;
+ gboolean selected_messages = FALSE;
+ gboolean result = FALSE;
+
+ g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win), TRUE);
+
+ /* Get selected atachments */
+ attachments = modest_msg_view_window_get_attachments (win);
+ n_selected = g_list_length (attachments);
+ for (node = attachments; node != NULL; node = g_list_next (node)) {
+ TnyMimePart *mime_part = TNY_MIME_PART (node->data);
+ TnyList *nested_list = tny_simple_list_new ();
+ if (!tny_mime_part_is_attachment (mime_part)) {
+ selected_messages = TRUE;
+ break;
+ }
+ tny_mime_part_get_parts (mime_part, nested_list);
+ if (tny_list_get_length (nested_list) > 0)
+ nested_attachments = TRUE;
+ g_object_unref (nested_list);
+ }
+
+ /* Check unique */
+ if (unique)
+ result = n_selected != 1;
+ else
+
+ result = n_selected == 1;
+
+ /* Set notifications */
+ if (!result && rule != NULL) {
+ if (selected_messages) {
+ modest_dimming_rule_set_notification (rule, _("mcen_ib_unable_to_save_attach_mail"));
+ } else if (nested_attachments) {
+ modest_dimming_rule_set_notification (rule, _("FIXME:unable to save attachments with nested elements"));
+ } else if (n_selected == 0) {
+ modest_dimming_rule_set_notification (rule, _("FIXME:no attachment selected"));
+ }
+ }
+
+ /* Free */
+ g_list_free (attachments);
+
+ return result;
+}
+
+static gboolean
_invalid_msg_selected (ModestMainWindow *win,
gboolean unique,
ModestDimmingRule *rule)
/* Check dimmed rule (TODO: check focus on widgets */
if (!result) {
- result = ((selected_headers == NULL) ||
- (GTK_WIDGET_HAS_FOCUS (folder_view)));
+ result = (selected_headers == NULL);
+/* result = ((selected_headers == NULL) || */
+/* (GTK_WIDGET_HAS_FOCUS (folder_view))); */
if (result)
modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
}
return result;
}
+
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);
gboolean modest_ui_dimming_rules_on_select_all (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_view_attachments (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_save_attachments (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_remove_attachments (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_copy (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data);
+gboolean modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data);
gboolean modest_ui_dimming_rules_on_tools_smtp_servers (ModestWindow *win, gpointer user_data);
#include <modest-dnd.h>
#include <modest-tny-folder.h>
+#include <modest-main-window.h>
+
#include <modest-marshal.h>
#include <modest-text-utils.h>
#include <modest-icon-names.h>
static void tny_folder_observer_init (TnyFolderObserverIface *klass);
+static void _on_new_folder_assigned (const GObject *obj, TnyFolder *folder, gpointer user_data);
+
+
typedef struct _ModestHeaderViewPrivate ModestHeaderViewPrivate;
struct _ModestHeaderViewPrivate {
TnyFolder *folder;
};
+typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper;
+struct _HeadersCountChangedHelper {
+ ModestHeaderView *self;
+ TnyFolderChange *change;
+};
+
+
#define MODEST_HEADER_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MODEST_TYPE_HEADER_VIEW, \
ModestHeaderViewPrivate))
HEADER_SELECTED_SIGNAL,
HEADER_ACTIVATED_SIGNAL,
ITEM_NOT_FOUND_SIGNAL,
- STATUS_UPDATE_SIGNAL,
+ MSG_COUNT_CHANGED_SIGNAL,
LAST_SIGNAL
};
g_cclosure_marshal_VOID__INT,
G_TYPE_NONE, 1, G_TYPE_INT);
- signals[STATUS_UPDATE_SIGNAL] =
- g_signal_new ("status_update",
+ signals[MSG_COUNT_CHANGED_SIGNAL] =
+ g_signal_new ("msg_count_changed",
G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (ModestHeaderViewClass,status_update),
+ G_STRUCT_OFFSET (ModestHeaderViewClass, msg_count_changed),
NULL, NULL,
- modest_marshal_VOID__STRING_INT_INT,
- G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
+ modest_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
}
static void
modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
{
ModestHeaderViewPrivate *priv;
-
+ ModestMailOperation *mail_op = NULL;
+ ModestWindowMgr *mgr = NULL;
+ GObject *source = NULL;
+
priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
if (priv->folder) {
}
if (folder) {
- ModestMailOperation *mail_op;
+
+ /* Get main window to use it as source of mail operation */
+ mgr = modest_runtime_get_window_mgr ();
+ source = G_OBJECT (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ()));
/* Set folder in the model */
modest_header_view_set_folder_intern (self, folder);
/* no message selected */
g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, NULL);
- /* Create the mail operation */
- mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, NULL);
+ /* Create the mail operation (source will be the parent widget) */
+ mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE, source);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
/* Refresh the folder asynchronously */
- modest_mail_operation_refresh_folder (mail_op, folder);
+ modest_mail_operation_refresh_folder (mail_op, folder,
+ _on_new_folder_assigned,
+ NULL);
/* Free */
g_object_unref (mail_op);
gint t1, t2;
gint val1, val2;
gint cmp;
- static int counter = 0;
+/* static int counter = 0; */
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN(user_data), 0);
/* col_id = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (tree_model)); */
col_id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(user_data), MODEST_HEADER_VIEW_FLAG_SORT));
- if (!(++counter % 100)) {
- GObject *header_view = g_object_get_data(G_OBJECT(user_data),
- MODEST_HEADER_VIEW_PTR);
- g_signal_emit (header_view,
- signals[STATUS_UPDATE_SIGNAL],
- 0, _("Sorting..."), 0, 0);
- }
+/* if (!(++counter % 100)) { */
+/* GObject *header_view = g_object_get_data(G_OBJECT(user_data), */
+/* MODEST_HEADER_VIEW_PTR); */
+/* g_signal_emit (header_view, */
+/* signals[STATUS_UPDATE_SIGNAL], */
+/* 0, _("Sorting..."), 0, 0); */
+/* } */
switch (col_id) {
case TNY_HEADER_FLAG_ATTACHMENTS:
}
static void
+idle_notify_headers_count_changed_destroy (gpointer data)
+{
+ HeadersCountChangedHelper *helper = NULL;
+
+ g_return_if_fail (data != NULL);
+ helper = (HeadersCountChangedHelper *) data;
+
+ g_object_unref (helper->change);
+ g_slice_free (HeadersCountChangedHelper, helper);
+}
+
+static gboolean
+idle_notify_headers_count_changed (gpointer data)
+{
+ TnyFolder *folder = NULL;
+ ModestHeaderViewPrivate *priv = NULL;
+ HeadersCountChangedHelper *helper = NULL;
+
+ g_return_val_if_fail (data != NULL, FALSE);
+ helper = (HeadersCountChangedHelper *) data;
+ g_return_val_if_fail (MODEST_IS_HEADER_VIEW(helper->self), FALSE);
+ g_return_val_if_fail (TNY_FOLDER_CHANGE(helper->change), FALSE);
+
+ folder = tny_folder_change_get_folder (helper->change);
+
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE (helper->self);
+ g_mutex_lock (priv->observers_lock);
+
+ g_signal_emit (G_OBJECT(helper->self), signals[MSG_COUNT_CHANGED_SIGNAL], 0, folder, helper->change);
+
+ g_mutex_unlock (priv->observers_lock);
+
+ return FALSE;
+}
+
+static void
folder_monitor_update (TnyFolderObserver *self,
TnyFolderChange *change)
{
- ModestHeaderViewPrivate *priv = MODEST_HEADER_VIEW_GET_PRIVATE (self);
TnyFolderChangeChanged changed;
-
- g_mutex_lock (priv->observers_lock);
+ HeadersCountChangedHelper *helper = NULL;
changed = tny_folder_change_get_changed (change);
code calls dbus for example */
if (changed & TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS)
g_idle_add (idle_notify_added_headers, NULL);
+
+ /* Check folder count */
+ if ((changed & TNY_FOLDER_CHANGE_CHANGED_ADDED_HEADERS) ||
+ (changed & TNY_FOLDER_CHANGE_CHANGED_REMOVED_HEADERS)) {
+ helper = g_slice_new0 (HeadersCountChangedHelper);
+ helper->self = MODEST_HEADER_VIEW(self);
+ helper->change = g_object_ref(change);
+
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ idle_notify_headers_count_changed,
+ helper,
+ idle_notify_headers_count_changed_destroy);
+ }
+}
- g_mutex_unlock (priv->observers_lock);
+
+static void
+_on_new_folder_assigned (const GObject *obj, TnyFolder *folder, gpointer user_data)
+{
+ ModestMainWindow *win = NULL;
+ gboolean folder_empty = FALSE;
+
+ g_return_if_fail (MODEST_IS_MAIN_WINDOW (obj));
+ g_return_if_fail (TNY_IS_FOLDER (folder));
+
+ win = MODEST_MAIN_WINDOW (obj);
+
+ /* Check if folder is empty and set headers view contents style */
+ folder_empty = tny_folder_get_all_count (folder) == 0;
+ if (folder_empty) {
+ modest_main_window_set_contents_style (win,
+ MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
+ }
+ else {
+ modest_main_window_set_contents_style (win,
+ MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
+/* modest_widget_memory_restore (conf, G_OBJECT(header_view), */
+/* MODEST_CONF_HEADER_VIEW_KEY); */
+ }
+
}
#define __MODEST_HEADER_VIEW_H__
#include <tny-folder.h>
+#include <tny-folder-change.h>
#include <tny-gtk-account-list-model.h>
#include <tny-msg.h>
#include <tny-header.h>
TnyHeader *header,
gpointer user_data);
- /* msg == NULL implies that the operation is finished, ie.
- * the progress indictation can be hidden */
- void (*status_update) (ModestHeaderView* self,
- const gchar* msg,
- gint num, gint total,
- gpointer user_data);
+ void (*msg_count_changed) (ModestHeaderView* self,
+ TnyFolder *folder,
+ TnyFolderChange *change,
+ gpointer user_data);
};
/**
void
modest_main_window_notify_send_receive_completed (ModestMainWindow *self);
+
G_END_DECLS
#endif /* __MODEST_MAIN_WINDOW_H__ */
TnyMimePart *mime_part);
/**
+ * modest_msg_view_window_get_attachments:
+ * @window: a #ModestMsgViewWindow
+ *
+ * Get selected attachments from #ModetMsgView private object.
+ */
+GList * modest_msg_view_window_get_attachments (ModestMsgViewWindow *win);
+
+/**
* modest_msg_view_window_save_attachments:
* @window: a #ModestMsgViewWindow
* @mime_parts: a #GList of #TnyMimePart
* Check if toolbar is in transfer mode, which determines whether a
* transfer operation is being processed.
*/
-gboolean
-modest_msg_view_window_toolbar_on_transfer_mode (ModestMsgViewWindow *self);
+gboolean modest_msg_view_window_toolbar_on_transfer_mode (ModestMsgViewWindow *self);
+
+
+/**
+ * modest_msg_view_window_last_message_selected:
+ * @window: a #ModestMsgViewWindow
+ *
+ * Check message currently viewed is the last message into folder .
+*/
+gboolean modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window);
+
+
+/**
+ * modest_msg_view_window_first_message_selected:
+ * @window: a #ModestMsgViewWindow
+ *
+ * Check message currently viewed is the last message into folder .
+*/
+gboolean modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window);
+
+/**
+ * modest_msg_view_window_has_headers_model:
+ * @window: a #ModestMsgViewWindow
+ *
+ * Check if window has been created with a full headers model.
+*/
+gboolean modest_msg_view_window_has_headers_model (ModestMsgViewWindow *window);
+
+/**
+ * modest_msg_view_window_get_folder_type:
+ * @window: a #ModestMsgViewWindow
+ *
+ * Gets folder type of message currently viewed .
+*/
+TnyFolderType
+modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window);
G_END_DECLS