#include <gtk/gtktreeviewcolumn.h>
#include <tny-account-store-view.h>
#include <tny-simple-list.h>
+#include <tny-list.h>
+#include <tny-iterator.h>
#include <tny-maemo-conic-device.h>
#include "modest-hildon-includes.h"
#include "modest-defs.h"
#include "modest-main-window-ui-dimming.h"
#include "modest-account-mgr.h"
#include "modest-tny-account.h"
+#include "modest-tny-folder.h"
#include "modest-conf.h"
#include <modest-maemo-utils.h>
#include "modest-tny-platform-factory.h"
#include "modest-text-utils.h"
#include "modest-ui-dimming-manager.h"
#include "maemo/modest-osso-state-saving.h"
+#include "modest-text-utils.h"
#ifdef MODEST_HAVE_HILDON0_WIDGETS
#include <hildon-widgets/hildon-program.h>
static GtkWidget * create_empty_view (void);
+static gboolean
+on_folder_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer userdata);
+static gboolean
+on_header_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer userdata);
+static void
+modest_main_window_on_folder_selection_changed (ModestFolderView *folder_view,
+ TnyFolderStore *folder_store,
+ gboolean selected,
+ ModestMainWindow *main_window);
/* list my signals */
enum {
}
-static gboolean
-on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self)
-{
- modest_window_save_state (MODEST_WINDOW(self));
- return FALSE;
-}
+/* static gboolean */
+/* on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) */
+/* { */
+/* modest_window_save_state (MODEST_WINDOW(self)); */
+/* return FALSE; */
+/* } */
typedef struct
{
TnyDevice *device = tny_account_store_get_device (store);
- modest_folder_view_update_model (MODEST_FOLDER_VIEW (priv->folder_view), store);
+ /* modest_folder_view_update_model (MODEST_FOLDER_VIEW (priv->folder_view), store); */
/* Check that we are really online.
* This signal should not be emitted when we are not connected,
g_signal_connect (G_OBJECT(priv->folder_view), "key-press-event",
G_CALLBACK(on_inner_widgets_key_pressed), self);
g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed",
- G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self);
+ G_CALLBACK(modest_main_window_on_folder_selection_changed), self);
g_signal_connect (G_OBJECT(priv->folder_view), "folder-display-name-changed",
G_CALLBACK(modest_ui_actions_on_folder_display_name_changed), self);
+ g_signal_connect (G_OBJECT (priv->folder_view), "focus-in-event",
+ G_CALLBACK (on_folder_view_focus_in), self);
/* Folder view CSM */
menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/FolderViewCSM");
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);
+ g_signal_connect (G_OBJECT (priv->header_view), "focus-in-event",
+ G_CALLBACK (on_header_view_focus_in), self);
/* Header view CSM */
menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/HeaderViewCSM");
self);
/* window */
- g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self);
+/* g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self); */
g_signal_connect (G_OBJECT (self), "window-state-event",
G_CALLBACK (modest_main_window_window_state_event),
NULL);
- g_signal_connect (G_OBJECT(self), "delete-event", G_CALLBACK(on_delete_event), self);
/* Mail Operation Queue */
priv->queue_changed_handler_uid =
ModestDimmingRulesGroup *toolbar_rules_group = NULL;
GtkActionGroup *action_group = NULL;
GError *error = NULL;
- GdkPixbuf *window_icon = NULL;
ModestConf *conf = NULL;
GtkAction *action = NULL;
gtk_box_pack_start (GTK_BOX(priv->main_vbox), priv->main_paned, TRUE, TRUE,0);
gtk_container_add (GTK_CONTAINER(self), priv->main_vbox);
-
- /* Set window icon */
- window_icon = modest_platform_get_icon (MODEST_APP_ICON);
- gtk_window_set_icon (GTK_WINDOW (self), window_icon);
HildonProgram *app = hildon_program_get_instance ();
hildon_program_add_window (app, HILDON_WINDOW (self));
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
g_signal_handlers_unblock_by_func (action, modest_ui_actions_toggle_folders_view, self);
+ if (modest_header_view_has_selected_headers (MODEST_HEADER_VIEW (priv->header_view))) {
+ TnyList *selection = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (priv->header_view));
+ TnyIterator *iterator = tny_list_create_iterator (selection);
+ TnyHeader *header;
+ tny_iterator_first (iterator);
+ header = TNY_HEADER (tny_iterator_get_current (iterator));
+ if (tny_header_get_subject (header))
+ gtk_window_set_title (GTK_WINDOW(self), tny_header_get_subject (header));
+ else
+ gtk_window_set_title (GTK_WINDOW (self), _("mail_va_no_subject"));
+ g_object_unref (header);
+ g_object_unref (iterator);
+ g_object_unref (selection);
+ }
+
break;
case MODEST_MAIN_WINDOW_STYLE_SPLIT:
/* Remove header view */
G_CALLBACK (on_send_receive_csm_activated),
NULL);
item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
}
/* Create a new action group */
it'll be no menu */
if (priv->accounts_popup) {
item = gtk_menu_item_new_with_label (display_name);
- gtk_menu_shell_append (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (priv->accounts_popup), GTK_WIDGET (item));
g_signal_connect_data (G_OBJECT (item),
"activate",
G_CALLBACK (on_send_receive_csm_activated),
static GtkWidget *
create_details_widget (GtkWidget *styled_widget, TnyAccount *account)
{
+ /* TODO: Clean up this function. It's a mess, with lots of copy/paste. murrayc. */
+
GtkWidget *vbox;
GtkWidget *label_w;
gchar *label;
gtk_style_lookup_color (styled_widget->style, "SecondaryTextColor", &color);
gray_color_markup = modest_text_utils_get_color_string (&color);
#else
- gray_color_markup = "#BBBBBB";
+ // gray_color_markup is freed below
+ gray_color_markup = g_strdup ("#BBBBBB");
#endif
/* Account description: */
- if (modest_tny_account_is_virtual_local_folders (account)) {
+ if (modest_tny_account_is_virtual_local_folders (account)
+ || (modest_tny_account_is_memory_card_account (account))) {
gchar *tmp;
/* Local folders: */
/* Get device name */
- gchar *device_name = modest_conf_get_string (modest_runtime_get_conf(),
+ gchar *device_name = NULL;
+ if (modest_tny_account_is_virtual_local_folders (account))
+ device_name = modest_conf_get_string (modest_runtime_get_conf(),
MODEST_CONF_DEVICE_NAME, NULL);
- tmp = g_strdup_printf (_("mcen_fi_localroot_description"), "");
+ else
+ device_name = g_strdup (tny_account_get_name (account));
+
+ tmp = g_strdup_printf (_("mcen_fi_localroot_description"), ""); //TODO: Why the ""?
label = g_markup_printf_escaped ("<span color='%s'>%s</span>%s",
gray_color_markup, tmp, device_name);
g_free (tmp);
g_free (label);
/* Size / Date */
- if (modest_tny_account_is_virtual_local_folders (account)) {
- /* FIXME: format size */
- label = g_markup_printf_escaped ("<span color='%s'>%s:</span> %d",
- gray_color_markup, _("mcen_fi_rootfolder_size"),
- modest_tny_folder_store_get_local_size (folder_store));
+ if (modest_tny_account_is_virtual_local_folders (account)
+ || modest_tny_account_is_memory_card_account (account)) {
+
+ gchar *size = modest_text_utils_get_display_size (
+ modest_tny_folder_store_get_local_size (folder_store));
+
+ label = g_markup_printf_escaped ("<span color='%s'>%s:</span> %s",
+ gray_color_markup, _("mcen_fi_rootfolder_size"),
+ size);
+ g_free (size);
+
label_w = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label_w), label);
gtk_box_pack_start (GTK_BOX (vbox), label_w, FALSE, FALSE, 0);
return vbox;
}
+gboolean
+modest_main_window_send_receive_in_progress (ModestMainWindow *self)
+{
+ ModestMainWindowPrivate *priv = NULL;
+
+ g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (self), FALSE);
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ return priv->send_receive_in_progress;
+}
+
void
modest_main_window_notify_send_receive_initied (ModestMainWindow *self)
{
GtkAction *action = NULL;
GtkWidget *widget = NULL;
-
+ ModestMainWindowPrivate *priv = NULL;
+
g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ priv->send_receive_in_progress = TRUE;
action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");
gtk_action_set_sensitive (action, FALSE);
{
GtkAction *action = NULL;
GtkWidget *widget = NULL;
-
+ ModestMainWindowPrivate *priv = NULL;
+
g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ priv->send_receive_in_progress = FALSE;
action = modest_window_get_action (MODEST_WINDOW(self), "/MenuBar/ToolsMenu/ToolsSendReceiveMainMenu/ToolsSendReceiveAllMenu");
gtk_action_set_sensitive (action, TRUE);
else {
modest_main_window_set_contents_style (main_window,
MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS);
- }
-
+ }
}
void
/* Show and hide toolbar items */
switch (mode) {
case TOOLBAR_MODE_NORMAL:
- if (sort_action)
+ if (sort_action)
gtk_action_set_visible (sort_action, TRUE);
- if (refresh_action)
+ if (refresh_action)
gtk_action_set_visible (refresh_action, TRUE);
if (priv->progress_toolitem) {
gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
gtk_widget_hide (priv->progress_toolitem);
}
if (priv->progress_bar)
- gtk_widget_hide (priv->progress_bar);
+ gtk_widget_hide (priv->progress_bar);
if (cancel_action)
gtk_action_set_visible (cancel_action, FALSE);
+/* if (priv->sort_toolitem) */
+/* gtk_widget_show (priv->sort_toolitem); */
+
+/* if (priv->refresh_toolitem) */
+/* gtk_widget_show (priv->refresh_toolitem); */
+
+/* if (priv->progress_toolitem) */
+/* gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE); */
+/* if (priv->progress_bar) */
+/* gtk_widget_hide (priv->progress_bar); */
+
+/* if (priv->cancel_toolitem) */
+/* gtk_widget_hide (priv->cancel_toolitem); */
/* Hide toolbar if optimized view is enabled */
if (priv->optimized_view)
gtk_widget_show (priv->progress_toolitem);
}
if (priv->progress_bar)
- gtk_widget_show (priv->progress_bar);
+ gtk_widget_show (priv->progress_bar);
+
+/* if (priv->sort_toolitem) */
+/* gtk_widget_hide (priv->sort_toolitem); */
+
+/* if (priv->refresh_toolitem) */
+/* gtk_widget_hide (priv->refresh_toolitem); */
+
+/* if (priv->progress_toolitem) */
+/* gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE); */
+/* if (priv->progress_bar) */
+/* gtk_widget_show (priv->progress_bar); */
+
+/* if (priv->cancel_toolitem) */
+/* gtk_widget_show (priv->cancel_toolitem); */
/* Show toolbar if it's hiden (optimized view ) */
if (priv->optimized_view)
switch (op_type) {
case MODEST_MAIL_OPERATION_TYPE_SEND:
case MODEST_MAIL_OPERATION_TYPE_RECEIVE:
+ case MODEST_MAIL_OPERATION_TYPE_OPEN:
mode = TOOLBAR_MODE_TRANSFER;
if (priv->current_toolbar_mode == TOOLBAR_MODE_NORMAL)
mode_changed = TRUE;
return FALSE;
}
+
+static gboolean
+on_folder_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer userdata)
+{
+ return FALSE;
+}
+
+static gboolean
+on_header_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event,
+ gpointer userdata)
+{
+ ModestMainWindow *main_window = MODEST_MAIN_WINDOW (userdata);
+ ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (main_window);
+
+ if (modest_header_view_has_selected_headers (MODEST_HEADER_VIEW (priv->header_view))) {
+ TnyList *selection = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (priv->header_view));
+ TnyIterator *iterator = tny_list_create_iterator (selection);
+ TnyHeader *header;
+
+ tny_iterator_first (iterator);
+ header = TNY_HEADER (tny_iterator_get_current (iterator));
+
+ if (tny_header_get_subject (header))
+ gtk_window_set_title (GTK_WINDOW(main_window), tny_header_get_subject (header));
+ else
+ gtk_window_set_title (GTK_WINDOW (main_window), _("mail_va_no_subject"));
+
+ g_object_unref (header);
+ g_object_unref (iterator);
+ g_object_unref (selection);
+ }
+ return FALSE;
+}
+
+static void
+modest_main_window_on_folder_selection_changed (ModestFolderView *folder_view,
+ TnyFolderStore *folder_store,
+ gboolean selected,
+ ModestMainWindow *main_window)
+{
+ ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (main_window);
+ GtkAction *action = NULL;
+ gboolean show_reply = TRUE;
+ gboolean show_forward = TRUE;
+ gboolean show_cancel_send = FALSE;
+ gboolean show_clipboard = TRUE;
+ gboolean show_delete = TRUE;
+
+ if (selected) {
+ if (TNY_IS_ACCOUNT (folder_store)) {
+ show_reply = show_forward = show_cancel_send = show_clipboard = show_delete = FALSE;
+ } else if (TNY_IS_FOLDER (folder_store)) {
+ if (modest_tny_folder_is_local_folder (TNY_FOLDER (folder_store))) {
+ TnyFolderType folder_type = modest_tny_folder_get_local_folder_type (
+ TNY_FOLDER (folder_store));
+ switch (folder_type) {
+ case TNY_FOLDER_TYPE_DRAFTS:
+ show_clipboard = show_delete = TRUE;
+ show_reply = show_forward = show_cancel_send = FALSE;
+ break;
+ case TNY_FOLDER_TYPE_SENT:
+ show_forward = show_clipboard = show_delete = TRUE;
+ show_reply = show_cancel_send = FALSE;
+ break;
+ case TNY_FOLDER_TYPE_OUTBOX:
+ show_clipboard = show_delete = show_cancel_send = TRUE;
+ show_reply = show_forward = FALSE;
+ break;
+ default:
+ show_reply = show_forward = show_clipboard = show_delete = TRUE;
+ show_cancel_send = FALSE;
+ }
+ } else {
+ show_reply = show_forward = show_clipboard = show_delete = TRUE;
+ show_cancel_send = FALSE;
+ }
+ }
+ }
+
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMReply");
+ gtk_action_set_visible (action, show_reply);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMReplyAll");
+ gtk_action_set_visible (action, show_reply);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMForward");
+ gtk_action_set_visible (action, show_forward);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMCancelSending");
+ gtk_action_set_visible (action, show_cancel_send);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMCut");
+ gtk_action_set_visible (action, show_clipboard);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMCopy");
+ gtk_action_set_visible (action, show_clipboard);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMPaste");
+ gtk_action_set_visible (action, show_clipboard);
+ action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/HeaderViewCSM/HeaderViewCSMDelete");
+ gtk_action_set_visible (action, show_delete);
+
+ /* We finally call to the ui actions handler, after updating properly
+ * the header view CSM */
+ modest_ui_actions_on_folder_selection_changed (folder_view, folder_store, selected, main_window);
+
+}