#include <gtkhtml/gtkhtml.h>
#define MIN_FREE_SPACE 5 * 1024 * 1024
-#define MOVE_FOLDER_OK_BUTTON "ok-button"
-#define MOVE_FOLDER_NEW_BUTTON "new-button"
+#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
typedef struct _GetMsgAsyncHelper {
ModestWindow *window;
TnyFolderStore *parent_folder,
const gchar *suggested_name);
-static GtkWidget* get_folder_view_from_move_to_dialog (GtkWidget *move_to_dialog);
-
static TnyAccount *get_account_from_folder_store (TnyFolderStore *folder_store);
+static void modest_ui_actions_on_main_window_move_to (GtkAction *action,
+ GtkWidget *folder_view,
+ TnyFolderStore *dst_folder,
+ ModestMainWindow *win);
+
+static void modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
+ TnyFolderStore *dst_folder,
+ ModestMsgViewWindow *win);
+
/*
* This function checks whether a TnyFolderStore is a pop account
*/
#endif
} else {
/* the 'source_win' is either the ModestMainWindow, or the 'Move to folder'-dialog
- * FIXME: any other? */
+ * FIXME: any other? */
GtkWidget *folder_view;
if (MODEST_IS_MAIN_WINDOW(source_win))
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));
-
+ folder_view = GTK_WIDGET(g_object_get_data (G_OBJECT (source_win),
+ MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
+
/* Select the newly created folder. It could happen
that the widget is no longer there (i.e. the window
has been destroyed, so we need to check this */
modest_msg_edit_window_check_names (window, FALSE);
}
+#ifdef MODEST_TOOLKIT_HILDON2
static void
-create_move_to_dialog_on_new_folder(GtkWidget *button, gpointer user_data)
+on_move_to_dialog_folder_activated (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ gpointer user_data)
{
- modest_ui_actions_create_folder (gtk_widget_get_toplevel (button),
- GTK_WIDGET (user_data));
+ gtk_dialog_response (GTK_DIALOG (user_data), GTK_RESPONSE_OK);
}
-
-#ifndef MODEST_TOOLKIT_HILDON2
+#else
/*
* This function is used to track changes in the selection of the
* folder view that is inside the "move to" dialog to enable/disable
gpointer user_data)
{
GtkWidget *dialog = NULL;
- GtkWidget *ok_button = NULL, *new_button = NULL;
gboolean ok_sensitive = TRUE, new_sensitive = TRUE;
gboolean moving_folder = FALSE;
gboolean is_local_account = TRUE;
ModestTnyFolderRules rules;
g_return_if_fail (MODEST_IS_FOLDER_VIEW(self));
-
+
if (!selected)
return;
-
- /* Get the OK button */
+
dialog = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_DIALOG);
if (!dialog)
return;
- ok_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON);
- new_button = g_object_get_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON);
-
/* check if folder_store is an remote account */
if (TNY_IS_ACCOUNT (folder_store)) {
TnyAccount *local_account = NULL;
/* Get the folder to move */
moved_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
-
+
/* Check that we're not moving to the same folder */
if (TNY_IS_FOLDER (moved_folder)) {
parent = tny_folder_get_folder_store (TNY_FOLDER (moved_folder));
if (parent == folder_store)
ok_sensitive = FALSE;
g_object_unref (parent);
- }
+ }
if (ok_sensitive && TNY_IS_ACCOUNT (folder_store)) {
/* Do not allow to move to an account unless it's the
local folders account */
if (!is_local_account)
ok_sensitive = FALSE;
- }
+ }
if (ok_sensitive && (moved_folder == folder_store)) {
/* Do not allow to move to itself */
}
end:
- /* Set sensitivity of the OK button */
- gtk_widget_set_sensitive (ok_button, ok_sensitive);
- /* Set sensitivity of the NEW button */
- gtk_widget_set_sensitive (new_button, new_sensitive);
+ /* Set sensitivity of the OK and NEW button */
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, ok_sensitive);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), MODEST_GTK_RESPONSE_NEW_FOLDER, new_sensitive);
}
#endif
-#ifdef MODEST_TOOLKIT_HILDON2
static void
-on_move_to_dialog_folder_activated (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data)
+on_move_to_dialog_response (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
{
- gtk_dialog_response (GTK_DIALOG (user_data), GTK_RESPONSE_ACCEPT);
-}
-#endif
+ GtkWidget *parent_win, *folder_view;
+ parent_win = (GtkWidget *) user_data;
+ folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog),
+ MODEST_MOVE_TO_DIALOG_FOLDER_VIEW));
-#define MODEST_MOVE_TO_DIALOG_FOLDER_VIEW "move-to-dialog-folder-view"
+ switch (response) {
+ TnyFolderStore *dst_folder;
-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));
+ case MODEST_GTK_RESPONSE_NEW_FOLDER:
+ modest_ui_actions_create_folder (GTK_WIDGET (dialog), folder_view);
+ break;
+ case GTK_RESPONSE_NONE:
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ break;
+ case GTK_RESPONSE_OK:
+ dst_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
+ /* Do window specific stuff */
+ if (MODEST_IS_MAIN_WINDOW (parent_win)) {
+ modest_ui_actions_on_main_window_move_to (NULL,
+ folder_view,
+ dst_folder,
+ MODEST_MAIN_WINDOW (parent_win));
+ } else {
+ modest_ui_actions_on_msg_view_window_move_to (NULL,
+ dst_folder,
+ MODEST_MSG_VIEW_WINDOW (parent_win));
+ }
+ if (dst_folder)
+ g_object_unref (dst_folder);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ break;
+ default:
+ g_warning ("%s unexpected response id %d", __FUNCTION__, response);
+ }
}
static GtkWidget*
create_move_to_dialog (GtkWindow *win,
- GtkWidget *folder_view,
- GtkWidget **tree_view)
+ GtkWidget *folder_view)
{
- GtkWidget *dialog;
-#ifdef MODEST_TOOLKIT_HILDON2
- GtkWidget *pannable;
-#else
- GtkWidget *scroll;
- GtkWidget *ok_button;
-#endif
- GtkWidget *new_button;
-
- dialog = gtk_dialog_new_with_buttons (_("mcen_ti_moveto_folders_title"),
- GTK_WINDOW (win),
- GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT,
- NULL);
-
-#ifndef MODEST_TOOLKIT_GTK
-#ifndef MODEST_TOOLKIT_HILDON2
- ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_ok"), GTK_RESPONSE_ACCEPT);
-#endif
- /* We do this manually so GTK+ does not associate a response ID for
- * the button. */
- new_button = gtk_button_new_from_stock (_("mcen_bd_new"));
- gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0);
-#ifdef MODEST_TOOLKIT_HILDON2
- hildon_gtk_widget_set_theme_size (new_button, HILDON_SIZE_FINGER_HEIGHT);
-#else
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("mcen_bd_dialog_cancel"), GTK_RESPONSE_REJECT);
-#endif
- gtk_widget_show (new_button);
-#else
- /* We do this manually so GTK+ does not associate a response ID for
- * the button. */
- new_button = gtk_button_new_with_label (_("mcen_ti_new_folder"));
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), new_button, FALSE, FALSE, 0);
- gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (GTK_DIALOG (dialog)->action_area), new_button, TRUE);
- gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
- ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT);
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 24);
-#endif
-
-#ifndef MODEST_TOOLKIT_HILDON2
- g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_OK_BUTTON, ok_button);
-#endif
- g_object_set_data (G_OBJECT (dialog), MOVE_FOLDER_NEW_BUTTON, new_button);
+ GtkWidget *dialog, *folder_view_container, *tree_view;
- /* Create scrolled window */
-#ifdef MODEST_TOOLKIT_HILDON2
- pannable = hildon_pannable_area_new ();
-#else
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-#endif
-
-#ifdef MODEST_TOOLKIT_GTK
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
-#endif
+ dialog = modest_platform_create_move_to_dialog (win, &folder_view_container);
/* Create folder view */
- *tree_view = modest_platform_create_folder_view (NULL);
+ tree_view = modest_platform_create_folder_view (NULL);
#ifdef MODEST_TOOLKIT_HILDON2
- /* We return OK on activation */
- g_signal_connect (*tree_view,
- "row-activated",
- G_CALLBACK (on_move_to_dialog_folder_activated),
- dialog);
+ /* We return OK on activation */
+ g_signal_connect (tree_view, "row-activated",
+ G_CALLBACK (on_move_to_dialog_folder_activated),
+ dialog);
#else
/* Track changes in the selection to
* disable the OK button whenever "Move to" is not possible
* disbale NEW button whenever New is not possible */
- g_signal_connect (*tree_view,
+ g_signal_connect (tree_view,
"folder_selection_changed",
G_CALLBACK (on_move_to_dialog_folder_selection_changed),
win);
#endif
- /* Listen to clicks on New button */
- g_signal_connect (G_OBJECT (new_button),
- "clicked",
- G_CALLBACK(create_move_to_dialog_on_new_folder),
- *tree_view);
-
-#ifdef MODEST_TOOLKIT_HILDON2
- modest_folder_view_set_cell_style (MODEST_FOLDER_VIEW (*tree_view),
- MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT);
-#endif
-
/* It could happen that we're trying to move a message from a
window (msg window for example) after the main window was
closed, so we can not just get the model of the folder
if (MODEST_IS_FOLDER_VIEW (folder_view)) {
const gchar *visible_id = NULL;
- modest_folder_view_set_style (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
modest_folder_view_copy_model (MODEST_FOLDER_VIEW(folder_view),
- MODEST_FOLDER_VIEW(*tree_view));
+ MODEST_FOLDER_VIEW(tree_view));
visible_id =
modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view));
/* Show the same account than the one that is shown in the main window */
- modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(*tree_view),
+ modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(tree_view),
visible_id);
} else {
const gchar *active_account_name = NULL;
ModestAccountSettings *settings = NULL;
ModestServerAccountSettings *store_settings = NULL;
- modest_folder_view_set_style (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_style (MODEST_FOLDER_VIEW (tree_view),
MODEST_FOLDER_VIEW_STYLE_SHOW_ALL);
- modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_update_model (MODEST_FOLDER_VIEW (tree_view),
TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()));
active_account_name = modest_window_get_active_account (MODEST_WINDOW (win));
store_settings = modest_account_settings_get_store_settings (settings);
store_account_name = modest_server_account_settings_get_account_name (store_settings);
- modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (*tree_view),
+ modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW (tree_view),
store_account_name);
g_object_unref (store_settings);
g_object_unref (settings);
}
}
- /* 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)
+ /* 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);
+ 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);
-
-#ifdef MODEST_TOOLKIT_HILDON2
- gtk_container_add (GTK_CONTAINER (pannable), *tree_view);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- pannable, TRUE, TRUE, 0);
-#else
- gtk_container_add (GTK_CONTAINER (scroll), *tree_view);
- /* Add scroll to dialog */
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
- scroll, TRUE, TRUE, 0);
-#endif
+ modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE);
+ modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
+ /* Add the tree view to its container */
+ gtk_container_add (GTK_CONTAINER (folder_view_container), tree_view);
- gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
-#ifndef MODEST_TOOLKIT_GTK
- gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 300);
-#else
- gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 400);
-#endif
+ gtk_widget_show (GTK_WIDGET (folder_view_container));
+ gtk_widget_show (GTK_WIDGET (tree_view));
return dialog;
}
-
-
/*
* Shows a confirmation dialog to the user when we're moving messages
* from a remote server to the local storage. Returns the dialog
* ModestMsgViewWindow
*/
static void
-modest_ui_actions_on_window_move_to (GtkAction *action,
- TnyFolderStore *dst_folder,
- ModestWindow *win)
+modest_ui_actions_on_msg_view_window_move_to (GtkAction *action,
+ TnyFolderStore *dst_folder,
+ ModestMsgViewWindow *win)
{
TnyList *headers = NULL;
+ TnyHeader *header = NULL;
TnyFolder *src_folder = NULL;
g_return_if_fail (TNY_IS_FOLDER (dst_folder));
/* Create header list */
- headers = get_selected_headers (MODEST_WINDOW (win));
-
- if (tny_list_get_length (headers) > 0) {
- TnyHeader *header = NULL;
- TnyIterator *iter;
-
- iter = tny_list_create_iterator (headers);
- header = (TnyHeader *) tny_iterator_get_current (iter);
- src_folder = tny_header_get_folder (header);
-
- g_object_unref (header);
- g_object_unref (iter);
-
- /* Transfer the messages */
- modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder, headers,
- TNY_FOLDER (dst_folder));
- }
+ header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win));
+ src_folder = TNY_FOLDER (tny_header_get_folder(header));
+ headers = tny_simple_list_new ();
+ tny_list_append (headers, G_OBJECT (header));
+ /* Transfer the messages */
+ modest_ui_actions_transfer_messages_helper (GTK_WINDOW (win), src_folder, headers,
+ TNY_FOLDER (dst_folder));
/* Frees */
- if (src_folder)
- g_object_unref (src_folder);
+ g_object_unref (src_folder);
+ g_object_unref (header);
g_object_unref (headers);
}
modest_ui_actions_on_move_to (GtkAction *action,
ModestWindow *win)
{
- GtkWidget *dialog = NULL, *folder_view = NULL, *tree_view = NULL;
- gint result = 0;
- TnyFolderStore *dst_folder = NULL;
+ GtkWidget *dialog = NULL, *folder_view = NULL;
ModestMainWindow *main_window;
g_return_if_fail (MODEST_IS_WINDOW (win));
folder_view = NULL;
/* Create and run the dialog */
- dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view, &tree_view);
- modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view));
- modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), (GtkWindow *) win);
- result = gtk_dialog_run (GTK_DIALOG(dialog));
- g_object_ref (tree_view);
- gtk_widget_destroy (dialog);
-
- if (result != GTK_RESPONSE_ACCEPT)
- return;
+ dialog = create_move_to_dialog (GTK_WINDOW (win), folder_view);
+ modest_window_mgr_set_modal (modest_runtime_get_window_mgr (),
+ GTK_WINDOW (dialog),
+ (GtkWindow *) win);
- dst_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (tree_view));
- /* Do window specific stuff */
- if (MODEST_IS_MAIN_WINDOW (win)) {
- modest_ui_actions_on_main_window_move_to (action,
- folder_view,
- dst_folder,
- MODEST_MAIN_WINDOW (win));
- } else {
- modest_ui_actions_on_window_move_to (action,
- dst_folder,
- MODEST_WINDOW (win));
- }
+ /* Listen to response signal */
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (on_move_to_dialog_response),
+ win);
- if (dst_folder)
- g_object_unref (dst_folder);
+ gtk_widget_show (dialog);
}
/*