TnyFolderStore *parent_folder,
const gchar *suggested_name);
+static GtkWidget* get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog);
+
+
/*
* This function checks whether a TnyFolderStore is a pop account
*/
gtk_tree_path_free (prev_path);
}
- /* Update toolbar dimming state */
+ /* Update window dimming state */
if (main_window)
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
+ modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window));
/* Free */
g_list_foreach (sel_list, (GFunc) gtk_tree_path_free, NULL);
attachments = g_slist_next(attachments);
}
modest_window_mgr_register_window (modest_runtime_get_window_mgr(), msg_win);
-
- if (win) {
- gtk_window_set_transient_for (GTK_WINDOW (msg_win),
- GTK_WINDOW (win));
- }
gtk_widget_show_all (GTK_WIDGET (msg_win));
cleanup:
modest_ui_actions_compose_msg(win, NULL, NULL, NULL, NULL, NULL, NULL);
}
+void
+modest_ui_actions_on_new_msg_or_folder (GtkAction *action, ModestWindow *win)
+{
+ g_return_if_fail (MODEST_IS_WINDOW (win));
+
+ /* Check first if the header view has the focus */
+ if (MODEST_IS_MAIN_WINDOW (win)) {
+ GtkWidget *w;
+ w = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ if (gtk_widget_is_focus (w)) {
+ modest_ui_actions_on_new_folder (action, MODEST_MAIN_WINDOW(win));
+ return;
+ }
+ }
+
+ modest_ui_actions_on_new_msg (action, win);
+}
+
+
gboolean
modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
TnyHeader *header,
gtk_widget_show_all (GTK_WIDGET(win));
}
- /* Update toolbar dimming state */
+ /* Update window dimming state */
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (parent_win));
+ modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (parent_win));
}
cleanup:
/* Connect to the account and perform */
if (uncached_msgs > 0) {
- modest_platform_connect_and_perform ((GtkWindow *) win, g_object_ref (account),
+ modest_platform_connect_and_perform ((GtkWindow *) win, TRUE, g_object_ref (account),
open_msgs_performer, g_object_ref (not_opened_headers));
} else {
/* Call directly the performer, do not need to connect */
TNY_ACCOUNT_TYPE_STORE);
/* Invoke the connect and perform */
- modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL, info->account,
+ modest_platform_connect_and_perform ((win) ? GTK_WINDOW (win) : NULL,
+ (win) ? TRUE : FALSE, info->account,
do_send_receive_performer, info);
}
if (!gtk_widget_is_focus (GTK_WIDGET(header_view)))
gtk_widget_grab_focus (GTK_WIDGET(header_view));
- /* Update toolbar dimming state */
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
+ /* Update window dimming state */
+ modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window));
}
void
{
ModestMainWindow *win = NULL;
GtkWidget *header_view;
- gboolean folder_empty = FALSE;
- gboolean all_marked_as_deleted = FALSE;
g_return_if_fail (TNY_IS_FOLDER (folder));
if (current_folder != NULL && folder != current_folder) {
g_object_unref (current_folder);
return;
- }
- g_object_unref (current_folder);
+ } else if (current_folder)
+ g_object_unref (current_folder);
}
/* Check if folder is empty and set headers view contents style */
- folder_empty = (tny_folder_get_all_count (folder) == 0);
- all_marked_as_deleted = modest_header_view_is_empty (MODEST_HEADER_VIEW(header_view));
- if (folder_empty || all_marked_as_deleted)
+ if (tny_folder_get_all_count (folder) == 0)
modest_main_window_set_contents_style (win,
MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY);
}
}
}
- /* Update toolbar dimming state */
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (main_window));
+ /* Update window dimming state */
+ modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (main_window));
}
void
edit_window = MODEST_MSG_EDIT_WINDOW (user_data);
- /* If there was any error do nothing */
- if (modest_mail_operation_get_error (mail_op) != NULL)
+ /* It might not be a good idea to do nothing if there was an error,
+ * so let's at least show a generic error banner. */
+ /* TODO error while saving attachment, show "Saving draft failed" banner */
+ if (modest_mail_operation_get_error (mail_op) != NULL) {
+ g_warning ("%s failed: %s\n", __FUNCTION__, (modest_mail_operation_get_error (mail_op))->message);
+ modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed"));
return;
+ }
modest_msg_edit_window_set_draft (edit_window, saved_draft);
}
from = modest_account_mgr_get_from_string (account_mgr, account_name);
/* Create the mail operation */
- mail_operation = modest_mail_operation_new (G_OBJECT(edit_window));
+ mail_operation = modest_mail_operation_new (NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
modest_mail_operation_save_to_drafts (mail_operation,
ModestAccountMgr *account_mgr = modest_runtime_get_account_mgr();
gchar *account_name = g_strdup (data->account_name);
if (!account_name)
- g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
+ account_name = g_strdup(modest_window_get_active_account (MODEST_WINDOW(edit_window)));
if (!account_name)
account_name = modest_account_mgr_get_default_account (account_mgr);
if (!account_name) {
modest_msg_edit_window_free_msg_data (edit_window, data);
/* Run account setup wizard */
- if (!modest_ui_actions_run_account_setup_wizard (MODEST_WINDOW(edit_window)))
+ if (!modest_ui_actions_run_account_setup_wizard (MODEST_WINDOW(edit_window))) {
return;
+ }
}
/* Get the currently-active transport account for this modest account: */
}
if (!transport_account) {
+ modest_msg_edit_window_free_msg_data (edit_window, data);
/* Run account setup wizard */
if (!modest_ui_actions_run_account_setup_wizard(MODEST_WINDOW(edit_window)))
return;
gchar *from = modest_account_mgr_get_from_string (account_mgr, account_name);
/* Create the mail operation */
- ModestMailOperation *mail_operation = modest_mail_operation_new (G_OBJECT(edit_window));
+ ModestMailOperation *mail_operation = modest_mail_operation_new (NULL);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
modest_mail_operation_send_new_mail (mail_operation,
gpointer user_data)
{
gchar *suggested_name = (gchar *) user_data;
- GtkWindow *main_window = (GtkWindow *) modest_mail_operation_get_source (mail_op);
+ GtkWindow *source_win = (GtkWindow *) modest_mail_operation_get_source (mail_op);
if (modest_mail_operation_get_error (mail_op)) {
/* Show an error */
- modest_platform_information_banner (GTK_WIDGET (main_window), NULL,
+ modest_platform_information_banner (GTK_WIDGET (source_win), NULL,
_("mail_in_ui_folder_create_error"));
/* Try again */
- do_create_folder (main_window, parent_folder, (const gchar *) suggested_name);
+ do_create_folder (source_win, parent_folder, (const gchar *) suggested_name);
} else {
+ /* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
+ * FIXME: any other? */
GtkWidget *folder_view;
- folder_view =
- modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
-
+ if (MODEST_IS_MAIN_WINDOW(source_win))
+ folder_view =
+ modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source_win),
+ MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+ else
+ folder_view =
+ get_folder_view_from_move_to_dialog (GTK_WIDGET(source_win));
+
/* Select the newly created folder */
modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view),
new_folder, FALSE);
}
/* Free. Note that the first time it'll be NULL so noop */
g_free (suggested_name);
- g_object_unref (main_window);
+ g_object_unref (source_win);
}
static void
if (parent_folder) {
/* The parent folder will be freed in the callback */
modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window),
+ TRUE,
parent_folder,
create_folder_performer,
parent_folder);
} RenameFolderInfo;
static void
-on_rename_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window,
- TnyAccount *account, gpointer user_data)
+on_rename_folder_cb (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
+{
+ /* Select now */
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW (user_data),
+ new_folder, FALSE);
+}
+
+static void
+on_rename_folder_performer (gboolean canceled,
+ GError *err,
+ GtkWindow *parent_window,
+ TnyAccount *account,
+ gpointer user_data)
{
ModestMailOperation *mail_op = NULL;
GtkTreeSelection *sel = NULL;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view));
gtk_tree_selection_unselect_all (sel);
- /* Select *after* the changes */
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW(folder_view),
- TNY_FOLDER(data->folder), TRUE);
-
/* Actually rename the folder */
modest_mail_operation_rename_folder (mail_op,
- TNY_FOLDER (data->folder),
- (const gchar *) (data->new_name));
-
- /* TODO folder view filter refilter */
- /*
- GtkTreeModel *tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view));
- if (GTK_IS_TREE_MODEL_FILTER (tree_model))
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model)); */
+ TNY_FOLDER (data->folder),
+ (const gchar *) (data->new_name),
+ on_rename_folder_cb,
+ folder_view);
}
g_object_unref (mail_op);
RenameFolderInfo *rename_folder_data = g_new0 (RenameFolderInfo, 1);
rename_folder_data->folder = folder;
rename_folder_data->new_name = folder_name;
- modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window),
- folder, on_rename_folder_cb, rename_folder_data);
+ modest_platform_connect_if_remote_and_perform (GTK_WINDOW(main_window), TRUE,
+ folder, on_rename_folder_performer, rename_folder_data);
}
}
g_object_unref (folder);
info->folder = folder;
info->move_to_trash = move_to_trash;
g_object_ref (G_OBJECT (info->folder));
- TnyAccount *account = tny_folder_get_account(TNY_FOLDER(folder));
- modest_platform_connect_and_perform (GTK_WINDOW (main_window),
- account, on_delete_folder_cb, info);
+ TnyAccount *account = tny_folder_get_account (TNY_FOLDER (folder));
+ modest_platform_connect_if_remote_and_perform (GTK_WINDOW (main_window),
+ TRUE,
+ TNY_FOLDER_STORE (account),
+ on_delete_folder_cb, info);
g_object_unref (account);
}
g_object_unref (G_OBJECT (folder));
static void
-destroy_information_note (ModestMailOperation *mail_op, gpointer user_data)
+destroy_information_note (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ /* destroy information note */
+ gtk_widget_destroy (GTK_WIDGET(user_data));
+}
+
+static void
+destroy_folder_information_note (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
{
/* destroy information note */
gtk_widget_destroy (GTK_WIDGET(user_data));
src_folder,
folder_store,
delete,
- destroy_information_note,
+ destroy_folder_information_note,
inf_note);
}
/* Enable window dimming management */
modest_window_enable_dimming (MODEST_WINDOW(window));
- modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (window));
+ modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
}
}
* updating the display name apparently is expensive */
const gchar* old_name = gtk_window_get_title (window);
+ if (display_name == NULL)
+ display_name = " ";
+
if (old_name && display_name && strcmp (old_name, display_name) == 0)
return; /* don't do anything */
/* This is usually used to change the title of the main window, which
* is the one that holds the folder view. Note that this change can
* happen even when the widget doesn't have the focus. */
- if (display_name)
- gtk_window_set_title (window, display_name);
- else
- gtk_window_set_title (window, " ");
+ gtk_window_set_title (window, display_name);
}
gtk_widget_set_sensitive (new_button, new_sensitive);
}
+
+#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
+
+static GtkWidget*
+get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog)
+{
+ return GTK_WIDGET(g_object_get_data (G_OBJECT(move_to_dialog),
+ MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
+}
+
static GtkWidget*
create_move_to_dialog (GtkWindow *win,
GtkWidget *folder_view,
}
}
+ /* we keep a pointer to the embedded folder view, so we can retrieve it with
+ * get_folder_view_from_move_to_dialog
+ * (see above) later (needed for focus handling)
+ */
+ g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, *tree_view);
+
+
/* Hide special folders */
modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (*tree_view), FALSE);
-
+
gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
/* Add scroll to dialog */
return response;
}
-
-
static void
-move_to_cb (ModestMailOperation *mail_op, gpointer user_data)
+move_to_cb (ModestMailOperation *mail_op,
+ gpointer user_data)
{
MoveToHelper *helper = (MoveToHelper *) user_data;
g_free (helper);
}
+static void
+folder_move_to_cb (ModestMailOperation *mail_op,
+ TnyFolder *new_folder,
+ gpointer user_data)
+{
+ move_to_cb (mail_op, user_data);
+}
+
+static void
+msgs_move_to_cb (ModestMailOperation *mail_op,
+ gpointer user_data)
+{
+ move_to_cb (mail_op, user_data);
+}
+
void
modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op,
gpointer user_data)
headers,
TNY_FOLDER (dst_folder),
TRUE,
- move_to_cb,
+ msgs_move_to_cb,
helper);
g_object_unref (G_OBJECT (mail_op));
TNY_FOLDER (info->src_folder),
info->dst_folder,
info->delete_original,
- move_to_cb,
+ folder_move_to_cb,
helper);
-
- modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
- TNY_FOLDER (info->dst_folder), TRUE);
+
+ if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+ modest_folder_view_select_folder (MODEST_FOLDER_VIEW(info->folder_view),
+ TNY_FOLDER (info->dst_folder), TRUE);
+ }
/* Unref mail operation */
g_object_unref (G_OBJECT (mail_op));
info->folder_view = folder_view;
g_object_ref (G_OBJECT (info->src_folder));
g_object_ref (G_OBJECT (info->dst_folder));
- modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win),
+ modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE,
TNY_FOLDER_STORE (dst_folder), on_move_folder_cb, info);
}
} else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) {
}
if (do_xfer) /* Transfer messages */ {
g_object_ref (dst_folder);
- modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win),
+ modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE,
TNY_FOLDER_STORE (dst_folder), xfer_messages_from_move_to_cb, dst_folder);
}
}
if (do_xfer) {
g_object_ref (dst_folder);
- modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win),
+ modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE,
TNY_FOLDER_STORE (dst_folder), xfer_messages_from_move_to_cb, dst_folder);
}
g_object_unref (account);
g_object_unref (iter);
/* Connect and perform the message retrieval */
- modest_platform_connect_and_perform ((GtkWindow *) window,
+ modest_platform_connect_and_perform ((GtkWindow *) window, TRUE,
g_object_ref (account),
retrieve_msg_contents_performer,
g_object_ref (headers));
}
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_group (window, "ModestMenuDimmingRules");
-}
-
-void
-modest_ui_actions_on_edit_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_view_menu_activated (GtkAction *action,
- ModestWindow *window)
+modest_ui_actions_check_window_dimming_rules (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_format_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)
-{
- g_return_if_fail (MODEST_IS_WINDOW (window));
-
- /* Update dimmed */
- modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules");
-}
-
-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_group (window, "ModestMenuDimmingRules");
-}
-
-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_group (window, "ModestMenuDimmingRules");
-}
-
-void
-modest_ui_actions_check_toolbar_dimming_rules (ModestWindow *window)
-{
- g_return_if_fail (MODEST_IS_WINDOW (window));
-
- /* Update dimmed */
- modest_window_check_dimming_rules_group (window, "ModestToolbarDimmingRules");
+ modest_window_check_dimming_rules_group (window, "ModestWindowDimmingRules");
}
void
message = g_strdup (_("emev_ib_ui_smtp_send_error"));
break;
default:
- g_return_if_reached ();
+ g_warning ("%s: unexpected TNY_TRANSPORT_ACCOUNT_ERROR %d",
+ __FUNCTION__, err->code);
+ message = g_strdup (_("emev_ib_ui_smtp_send_error"));
+ break;
}
/* TODO if the username or the password where not defined we