From a2a2d299dc36c0533a273a40429c3ff884b5adf5 Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Wed, 25 Nov 2009 16:57:30 +0100 Subject: [PATCH] Drop old non hildon2 code in folder view --- src/modest-ui-actions.c | 14 - src/widgets/modest-folder-view.c | 901 -------------------------------------- 2 files changed, 915 deletions(-) diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 31e8540..fccb9b7 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -3148,10 +3148,6 @@ on_rename_folder_cb (ModestMailOperation *mail_op, /* Note that if the rename fails new_folder will be NULL */ if (new_folder) { modest_folder_view_select_folder (folder_view, new_folder, FALSE); -#ifndef MODEST_TOOLKIT_HILDON2 - } else { - modest_folder_view_select_first_inbox_or_local (folder_view); -#endif } gtk_widget_grab_focus (GTK_WIDGET (folder_view)); } @@ -3323,10 +3319,6 @@ on_delete_folder_cb (gboolean canceled, mail_op); modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (info->folder), info->move_to_trash); -#ifndef MODEST_TOOLKIT_HILDON2 - modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (folder_view)); -#endif - g_object_unref (mail_op); g_object_unref (info->folder); g_free (info); @@ -4419,14 +4411,8 @@ create_move_to_dialog (GtkWindow *win, g_object_set_data (G_OBJECT(dialog), MODEST_MOVE_TO_DIALOG_FOLDER_VIEW, tree_view); /* Hide special folders */ -#ifndef MODEST_TOOLKIT_HILDON2 - modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (tree_view), FALSE); -#endif if (list_to_move) modest_folder_view_set_list_to_move (MODEST_FOLDER_VIEW (tree_view), list_to_move); -#ifndef MODEST_TOOLKIT_HILDON2 - modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (tree_view)); -#endif gtk_widget_show (GTK_WIDGET (tree_view)); diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 7ef3c74..8c3f8a4 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -72,26 +72,14 @@ const GtkTargetEntry folder_view_drag_types[] = }; /* Default icon sizes for Fremantle style are different */ -#ifdef MODEST_TOOLKIT_HILDON2 #define FOLDER_ICON_SIZE MODEST_ICON_SIZE_BIG -#else -#define FOLDER_ICON_SIZE MODEST_ICON_SIZE_SMALL -#endif /* Column names depending on we use list store or tree store */ -#ifdef MODEST_TOOLKIT_HILDON2 #define NAME_COLUMN TNY_GTK_FOLDER_LIST_STORE_NAME_COLUMN #define UNREAD_COLUMN TNY_GTK_FOLDER_LIST_STORE_UNREAD_COLUMN #define ALL_COLUMN TNY_GTK_FOLDER_LIST_STORE_ALL_COLUMN #define TYPE_COLUMN TNY_GTK_FOLDER_LIST_STORE_TYPE_COLUMN #define INSTANCE_COLUMN TNY_GTK_FOLDER_LIST_STORE_INSTANCE_COLUMN -#else -#define NAME_COLUMN TNY_GTK_FOLDER_STORE_TREE_MODEL_NAME_COLUMN -#define UNREAD_COLUMN TNY_GTK_FOLDER_STORE_TREE_MODEL_UNREAD_COLUMN -#define ALL_COLUMN TNY_GTK_FOLDER_STORE_TREE_MODEL_ALL_COLUMN -#define TYPE_COLUMN TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN -#define INSTANCE_COLUMN TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN -#endif /* 'private'/'protected' functions */ static void modest_folder_view_class_init (ModestFolderViewClass *klass); @@ -144,41 +132,6 @@ static void on_configuration_key_changed (ModestConf* conf, ModestConfNotificationId notification_id, ModestFolderView *self); -#ifndef MODEST_TOOLKIT_HILDON2 -/* DnD functions */ -static void on_drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - gpointer data); - -static void on_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *selection_data, - guint info, - guint time, - gpointer data); - -static gboolean on_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - gpointer user_data); - -static void setup_drag_and_drop (GtkTreeView *self); - -static void on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, - GtkTreePath *path, - GtkTreeIter *iter, - ModestFolderView *self); - -static gint expand_row_timeout (gpointer data); -#endif - static void expand_root_items (ModestFolderView *self); static gboolean _clipboard_set_selected_data (ModestFolderView *folder_view, @@ -198,11 +151,9 @@ static gboolean get_inner_models (ModestFolderView *self, GtkTreeModel **filter_model, GtkTreeModel **sort_model, GtkTreeModel **tny_model); -#ifdef MODEST_TOOLKIT_HILDON2 static void on_activity_changed (TnyGtkFolderListStore *store, gboolean activity, ModestFolderView *folder_view); -#endif enum { FOLDER_SELECTION_CHANGED_SIGNAL, @@ -1059,17 +1010,10 @@ get_folder_icons (ModestFolderView *folder_view, TnyFolderType type, GObject *in !TNY_IS_ACCOUNT (instance) && type != TNY_FOLDER_TYPE_INBOX && modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (instance))) { -#ifdef MODEST_TOOLKIT_HILDON2 return get_composite_icons (MODEST_FOLDER_ICON_REMOTE_FOLDER, &anorm_pixbuf, &anorm_pixbuf_open, &anorm_pixbuf_close); -#else - return get_composite_icons (MODEST_FOLDER_ICON_NORMAL, - &normal_pixbuf, - &normal_pixbuf_open, - &normal_pixbuf_close); -#endif } switch (type) { @@ -1230,25 +1174,19 @@ add_columns (GtkWidget *treeview) /* Set icon and text render function */ renderer = gtk_cell_renderer_pixbuf_new(); -#ifdef MODEST_TOOLKIT_HILDON2 g_object_set (renderer, "xpad", MODEST_MARGIN_DEFAULT, "ypad", MODEST_MARGIN_DEFAULT, NULL); -#endif gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func(column, renderer, icon_cell_data, treeview, NULL); renderer = gtk_cell_renderer_text_new(); g_object_set (renderer, -#ifdef MODEST_TOOLKIT_HILDON2 "ellipsize", PANGO_ELLIPSIZE_MIDDLE, "ypad", MODEST_MARGIN_DEFAULT, "xpad", MODEST_MARGIN_DEFAULT, -#else - "ellipsize", PANGO_ELLIPSIZE_END, -#endif "ellipsize-set", TRUE, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func(column, renderer, @@ -1256,14 +1194,9 @@ add_columns (GtkWidget *treeview) priv->messages_renderer = gtk_cell_renderer_text_new (); g_object_set (priv->messages_renderer, -#ifdef MODEST_TOOLKIT_HILDON2 "yalign", 0.5, "ypad", MODEST_MARGIN_DEFAULT, "xpad", MODEST_MARGIN_DOUBLE, -#else - "scale", PANGO_SCALE_X_SMALL, - "scale-set", TRUE, -#endif "alignment", PANGO_ALIGN_RIGHT, "align-set", TRUE, "xalign", 1.0, @@ -1325,11 +1258,6 @@ modest_folder_view_init (ModestFolderView *obj) /* Build treeview */ add_columns (GTK_WIDGET (obj)); -#ifndef MODEST_TOOLKIT_HILDON2 - /* Setup drag and drop */ - setup_drag_and_drop (GTK_TREE_VIEW(obj)); -#endif - /* Connect signals */ g_signal_connect (G_OBJECT (obj), "key-press-event", @@ -1372,12 +1300,10 @@ modest_folder_view_dispose (GObject *obj) priv = MODEST_FOLDER_VIEW_GET_PRIVATE (obj); -#ifdef MODEST_TOOLKIT_HILDON2 if (priv->signal_handlers) { modest_signal_mgr_disconnect_all_and_destroy (priv->signal_handlers); priv->signal_handlers = NULL; } -#endif /* Free external references */ if (priv->account_store) { @@ -1515,9 +1441,6 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore modest_folder_view_update_model (MODEST_FOLDER_VIEW (self), account_store); priv->reselect = FALSE; -#ifndef MODEST_TOOLKIT_HILDON2 - modest_folder_view_select_first_inbox_or_local (MODEST_FOLDER_VIEW (self)); -#endif g_object_unref (G_OBJECT (device)); } @@ -1625,24 +1548,6 @@ same_account_selected (ModestFolderView *self, return same_account; } -#ifndef MODEST_TOOLKIT_HILDON2 -/** - * - * Selects the first inbox or the local account in an idle - */ -static gboolean -on_idle_select_first_inbox_or_local (gpointer user_data) -{ - ModestFolderView *self = MODEST_FOLDER_VIEW (user_data); - - gdk_threads_enter (); - modest_folder_view_select_first_inbox_or_local (self); - gdk_threads_leave (); - - return FALSE; -} -#endif - static void on_account_changed (TnyAccountStore *account_store, TnyAccount *tny_account, @@ -1686,12 +1591,6 @@ on_account_changed (TnyAccountStore *account_store, /* Refilter the model */ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); -#ifndef MODEST_TOOLKIT_HILDON2 - /* Select the first INBOX if the currently selected folder - belongs to the account that is being deleted */ - if (same_account && !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (tny_account)) - g_idle_add (on_idle_select_first_inbox_or_local, self); -#endif } static void @@ -1773,12 +1672,6 @@ on_account_removed (TnyAccountStore *account_store, /* Refilter the model */ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model)); -#ifndef MODEST_TOOLKIT_HILDON2 - /* Select the first INBOX if the currently selected folder - belongs to the account that is being deleted */ - if (same_account) - g_idle_add (on_idle_select_first_inbox_or_local, self); -#endif } void @@ -1819,9 +1712,6 @@ modest_folder_view_on_map (ModestFolderView *self, deathlock situation */ /* TODO: check if this is still the case */ priv->reselect = FALSE; -#ifndef MODEST_TOOLKIT_HILDON2 - modest_folder_view_select_first_inbox_or_local (self); -#endif /* Notify the display name observers */ g_signal_emit (G_OBJECT(self), signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0, @@ -2326,7 +2216,6 @@ modest_folder_view_update_model (ModestFolderView *self, /* FIXME: the local accounts are not shown when the query selects only the subscribed folders */ -#ifdef MODEST_TOOLKIT_HILDON2 TnyGtkFolderListStoreFlags flags; flags = TNY_GTK_FOLDER_LIST_STORE_FLAG_SHOW_PATH; if (priv->do_refresh) @@ -2337,9 +2226,6 @@ modest_folder_view_update_model (ModestFolderView *self, flags); tny_gtk_folder_list_store_set_path_separator (TNY_GTK_FOLDER_LIST_STORE (model), MODEST_FOLDER_PATH_SEPARATOR); -#else - model = tny_gtk_folder_store_tree_model_new (NULL); -#endif /* When the model is a list store (plain representation) the outbox is not a child of any account so we have to manually @@ -2435,18 +2321,12 @@ modest_folder_view_update_model (ModestFolderView *self, /* Set new model */ gtk_tree_view_set_model (GTK_TREE_VIEW(self), filter_model); -#ifndef MODEST_TOOLKIT_HILDON2 - g_signal_connect (G_OBJECT(filter_model), "row-inserted", - (GCallback) on_row_inserted_maybe_select_folder, self); -#endif -#ifdef MODEST_TOOLKIT_HILDON2 priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, G_OBJECT (model), "activity-changed", G_CALLBACK (on_activity_changed), self); -#endif g_object_unref (model); g_object_unref (filter_model); @@ -2498,11 +2378,6 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) cause (and it actually does it) a free of the summary of the folder (because the main window will clear the headers view */ -#ifndef MODEST_TOOLKIT_HILDON2 - if (TNY_IS_FOLDER(priv->cur_folder_store)) - tny_folder_sync_async (TNY_FOLDER(priv->cur_folder_store), - FALSE, NULL, NULL, NULL); -#endif g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0, priv->cur_folder_store, FALSE); @@ -2863,678 +2738,6 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2, return cmp; } -#ifndef MODEST_TOOLKIT_HILDON2 -/*****************************************************************************/ -/* DRAG and DROP stuff */ -/*****************************************************************************/ -/* - * This function fills the #GtkSelectionData with the row and the - * model that has been dragged. It's called when this widget is a - * source for dnd after the event drop happened - */ -static void -on_drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, - guint info, guint time, gpointer data) -{ - GtkTreeSelection *selection; - GtkTreeModel *model; - GtkTreeIter iter; - GtkTreePath *source_row; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); - if (gtk_tree_selection_get_selected (selection, &model, &iter)) { - - source_row = gtk_tree_model_get_path (model, &iter); - gtk_tree_set_row_drag_data (selection_data, - model, - source_row); - - gtk_tree_path_free (source_row); - } -} - -typedef struct _DndHelper { - ModestFolderView *folder_view; - gboolean delete_source; - GtkTreePath *source_row; -} DndHelper; - -static void -dnd_helper_destroyer (DndHelper *helper) -{ - /* Free the helper */ - gtk_tree_path_free (helper->source_row); - g_slice_free (DndHelper, helper); -} - -static void -xfer_folder_cb (ModestMailOperation *mail_op, - TnyFolder *new_folder, - gpointer user_data) -{ - if (new_folder) { - /* Select the folder */ - modest_folder_view_select_folder (MODEST_FOLDER_VIEW (user_data), - new_folder, FALSE); - } -} - - -/* get the folder for the row the treepath refers to. */ -/* folder must be unref'd */ -static TnyFolderStore * -tree_path_to_folder (GtkTreeModel *model, GtkTreePath *path) -{ - GtkTreeIter iter; - TnyFolderStore *folder = NULL; - - if (gtk_tree_model_get_iter (model,&iter, path)) - gtk_tree_model_get (model, &iter, - INSTANCE_COLUMN, &folder, - -1); - return folder; -} - -/* - * This function is used by drag_data_received_cb to manage drag and - * drop of a header, i.e, and drag from the header view to the folder - * view. - */ -static void -drag_and_drop_from_header_view (GtkTreeModel *source_model, - GtkTreeModel *dest_model, - GtkTreePath *dest_row, - GtkSelectionData *selection_data) -{ - TnyList *headers = NULL; - TnyFolder *folder = NULL, *src_folder = NULL; - TnyFolderType folder_type; - GtkTreeIter source_iter, dest_iter; - ModestWindowMgr *mgr = NULL; - ModestWindow *main_win = NULL; - gchar **uris, **tmp; - - /* Build the list of headers */ - mgr = modest_runtime_get_window_mgr (); - headers = tny_simple_list_new (); - uris = modest_dnd_selection_data_get_paths (selection_data); - tmp = uris; - - while (*tmp != NULL) { - TnyHeader *header; - GtkTreePath *path; - gboolean first = TRUE; - - /* Get header */ - path = gtk_tree_path_new_from_string (*tmp); - gtk_tree_model_get_iter (source_model, &source_iter, path); - gtk_tree_model_get (source_model, &source_iter, - TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, - &header, -1); - - /* Do not enable d&d of headers already opened */ - if (!modest_window_mgr_find_registered_header(mgr, header, NULL)) - tny_list_append (headers, G_OBJECT (header)); - - if (G_UNLIKELY (first)) { - src_folder = tny_header_get_folder (header); - first = FALSE; - } - - /* Free and go on */ - gtk_tree_path_free (path); - g_object_unref (header); - tmp++; - } - g_strfreev (uris); - - /* This could happen ig we perform a d&d very quickly over the - same row that row could dissapear because message is - transferred */ - if (!TNY_IS_FOLDER (src_folder)) - goto cleanup; - - /* Get the target folder */ - gtk_tree_model_get_iter (dest_model, &dest_iter, dest_row); - gtk_tree_model_get (dest_model, &dest_iter, - INSTANCE_COLUMN, - &folder, -1); - - if (!folder || !TNY_IS_FOLDER(folder)) { -/* g_warning ("%s: not a valid target folder (%p)", __FUNCTION__, folder); */ - goto cleanup; - } - - folder_type = modest_tny_folder_guess_folder_type (folder); - if (folder_type == TNY_FOLDER_TYPE_INVALID) { -/* g_warning ("%s: invalid target folder", __FUNCTION__); */ - goto cleanup; /* cannot move messages there */ - } - - if (modest_tny_folder_get_rules((TNY_FOLDER(folder))) & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) { -/* g_warning ("folder not writable"); */ - goto cleanup; /* verboten! */ - } - - /* Ask for confirmation to move */ - main_win = modest_window_mgr_get_main_window (mgr, FALSE); /* don't create */ - if (!main_win) { - g_warning ("%s: BUG: no main window found", __FUNCTION__); - goto cleanup; - } - - /* Transfer messages */ - modest_ui_actions_transfer_messages_helper (GTK_WINDOW (main_win), src_folder, - headers, folder); - - /* Frees */ -cleanup: - if (G_IS_OBJECT (src_folder)) - g_object_unref (src_folder); - if (G_IS_OBJECT(folder)) - g_object_unref (G_OBJECT (folder)); - if (G_IS_OBJECT(headers)) - g_object_unref (headers); -} - -typedef struct { - TnyFolderStore *src_folder; - TnyFolderStore *dst_folder; - ModestFolderView *folder_view; - DndHelper *helper; -} DndFolderInfo; - -static void -dnd_folder_info_destroyer (DndFolderInfo *info) -{ - if (info->src_folder) - g_object_unref (info->src_folder); - if (info->dst_folder) - g_object_unref (info->dst_folder); - g_slice_free (DndFolderInfo, info); -} - -static void -dnd_on_connection_failed_destroyer (DndFolderInfo *info, - GtkWindow *parent_window, - TnyAccount *account) -{ - /* Show error */ - modest_ui_actions_on_account_connection_error (parent_window, account); - - /* Free the helper & info */ - dnd_helper_destroyer (info->helper); - dnd_folder_info_destroyer (info); -} - -static void -drag_and_drop_from_folder_view_src_folder_performer (gboolean canceled, - GError *err, - GtkWindow *parent_window, - TnyAccount *account, - gpointer user_data) -{ - DndFolderInfo *info = NULL; - ModestMailOperation *mail_op; - - info = (DndFolderInfo *) user_data; - - if (err || canceled) { - dnd_on_connection_failed_destroyer (info, parent_window, account); - return; - } - - /* Do the mail operation */ - mail_op = modest_mail_operation_new_with_error_handling ((GObject *) parent_window, - modest_ui_actions_move_folder_error_handler, - info->src_folder, NULL); - - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - /* Transfer the folder */ - modest_mail_operation_xfer_folder (mail_op, - TNY_FOLDER (info->src_folder), - info->dst_folder, - info->helper->delete_source, - xfer_folder_cb, - info->helper->folder_view); - - /* Frees */ - g_object_unref (G_OBJECT (mail_op)); - dnd_helper_destroyer (info->helper); - dnd_folder_info_destroyer (info); -} - - -static void -drag_and_drop_from_folder_view_dst_folder_performer (gboolean canceled, - GError *err, - GtkWindow *parent_window, - TnyAccount *account, - gpointer user_data) -{ - DndFolderInfo *info = NULL; - - info = (DndFolderInfo *) user_data; - - if (err || canceled) { - dnd_on_connection_failed_destroyer (info, parent_window, account); - return; - } - - /* Connect to source folder and perform the copy/move */ - modest_platform_connect_if_remote_and_perform (NULL, TRUE, - info->src_folder, - drag_and_drop_from_folder_view_src_folder_performer, - info); -} - -/* - * This function is used by drag_data_received_cb to manage drag and - * drop of a folder, i.e, and drag from the folder view to the same - * folder view. - */ -static void -drag_and_drop_from_folder_view (GtkTreeModel *source_model, - GtkTreeModel *dest_model, - GtkTreePath *dest_row, - GtkSelectionData *selection_data, - DndHelper *helper) -{ - GtkTreeIter dest_iter, iter; - TnyFolderStore *dest_folder = NULL; - TnyFolderStore *folder = NULL; - gboolean forbidden = FALSE; - ModestWindow *win; - DndFolderInfo *info = NULL; - - win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE); /* don't create */ - if (!win) { - g_warning ("%s: BUG: no main window", __FUNCTION__); - dnd_helper_destroyer (helper); - return; - } - - if (!forbidden) { - /* check the folder rules for the destination */ - folder = tree_path_to_folder (dest_model, dest_row); - if (TNY_IS_FOLDER(folder)) { - ModestTnyFolderRules rules = - modest_tny_folder_get_rules (TNY_FOLDER (folder)); - forbidden = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE; - } else if (TNY_IS_FOLDER_STORE(folder)) { - /* enable local root as destination for folders */ - if (!MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (folder) && - !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (folder))) - forbidden = TRUE; - } - g_object_unref (folder); - } - if (!forbidden) { - /* check the folder rules for the source */ - folder = tree_path_to_folder (source_model, helper->source_row); - if (TNY_IS_FOLDER(folder)) { - ModestTnyFolderRules rules = - modest_tny_folder_get_rules (TNY_FOLDER (folder)); - forbidden = rules & MODEST_FOLDER_RULES_FOLDER_NON_MOVEABLE; - } else - forbidden = TRUE; - g_object_unref (folder); - } - - - /* Check if the drag is possible */ - if (forbidden || !gtk_tree_path_compare (helper->source_row, dest_row)) { - /* Show error */ - modest_platform_run_information_dialog ((GtkWindow *) win, - _("mail_in_ui_folder_move_target_error"), - FALSE); - /* Restore the previous selection */ - folder = tree_path_to_folder (source_model, helper->source_row); - if (folder) { - if (TNY_IS_FOLDER (folder)) - modest_folder_view_select_folder (helper->folder_view, - TNY_FOLDER (folder), FALSE); - g_object_unref (folder); - } - dnd_helper_destroyer (helper); - return; - } - - /* Get data */ - gtk_tree_model_get_iter (dest_model, &dest_iter, dest_row); - gtk_tree_model_get (dest_model, &dest_iter, - INSTANCE_COLUMN, - &dest_folder, -1); - gtk_tree_model_get_iter (source_model, &iter, helper->source_row); - gtk_tree_model_get (source_model, &iter, - INSTANCE_COLUMN, - &folder, -1); - - /* Create the info for the performer */ - info = g_slice_new0 (DndFolderInfo); - info->src_folder = g_object_ref (folder); - info->dst_folder = g_object_ref (dest_folder); - info->helper = helper; - - /* Connect to the destination folder and perform the copy/move */ - modest_platform_connect_if_remote_and_perform (GTK_WINDOW (win), TRUE, - dest_folder, - drag_and_drop_from_folder_view_dst_folder_performer, - info); - - /* Frees */ - g_object_unref (dest_folder); - g_object_unref (folder); -} - -/* - * This function receives the data set by the "drag-data-get" signal - * handler. This information comes within the #GtkSelectionData. This - * function will manage both the drags of folders of the treeview and - * drags of headers of the header view widget. - */ -static void -on_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *selection_data, - guint target_type, - guint time, - gpointer data) -{ - GtkWidget *source_widget; - GtkTreeModel *dest_model, *source_model; - GtkTreePath *source_row, *dest_row; - GtkTreeViewDropPosition pos; - gboolean delete_source = FALSE; - gboolean success = FALSE; - - /* Do not allow further process */ - g_signal_stop_emission_by_name (widget, "drag-data-received"); - source_widget = gtk_drag_get_source_widget (context); - - /* Get the action */ - if (context->action == GDK_ACTION_MOVE) { - delete_source = TRUE; - - /* Notify that there is no folder selected. We need to - do this in order to update the headers view (and - its monitors, because when moving, the old folder - won't longer exist. We can not wait for the end of - the operation, because the operation won't start if - the folder is in use */ - if (source_widget == widget) { - GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); - gtk_tree_selection_unselect_all (sel); - } - } - - /* Check if the get_data failed */ -#if GTK_CHECK_VERSION (2,14,0) - if ((selection_data == NULL) || (gtk_selection_data_get_length (selection_data) < 0)) -#else - if (selection_data == NULL || selection_data->length < 0) -#endif - goto end; - - /* Select the destination model */ - dest_model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - - /* Get the path to the destination row. Can not call - gtk_tree_view_get_drag_dest_row() because the source row - is not selected anymore */ - gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), x, y, - &dest_row, &pos); - - /* Only allow drops IN other rows */ - if (!dest_row || - pos == GTK_TREE_VIEW_DROP_BEFORE || - pos == GTK_TREE_VIEW_DROP_AFTER) - goto end; - - success = TRUE; - /* Drags from the header view */ - if (source_widget != widget) { - source_model = gtk_tree_view_get_model (GTK_TREE_VIEW (source_widget)); - - drag_and_drop_from_header_view (source_model, - dest_model, - dest_row, - selection_data); - } else { - DndHelper *helper = NULL; - - /* Get the source model and row */ - gtk_tree_get_row_drag_data (selection_data, - &source_model, - &source_row); - - /* Create the helper */ - helper = g_slice_new0 (DndHelper); - helper->delete_source = delete_source; - helper->source_row = gtk_tree_path_copy (source_row); - helper->folder_view = MODEST_FOLDER_VIEW (widget); - - drag_and_drop_from_folder_view (source_model, - dest_model, - dest_row, - selection_data, - helper); - - gtk_tree_path_free (source_row); - } - - /* Frees */ - gtk_tree_path_free (dest_row); - - end: - /* Finish the drag and drop */ - gtk_drag_finish (context, success, FALSE, time); -} - -/* - * We define a "drag-drop" signal handler because we do not want to - * use the default one, because the default one always calls - * gtk_drag_finish and we prefer to do it in the "drag-data-received" - * signal handler, because there we have all the information available - * to know if the dnd was a success or not. - */ -static gboolean -drag_drop_cb (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - gpointer user_data) -{ - gpointer target; - - if (!context->targets) - return FALSE; - - /* Check if we're dragging a folder row */ - target = gtk_drag_dest_find_target (widget, context, NULL); - - /* Request the data from the source. */ - gtk_drag_get_data(widget, context, target, time); - - return TRUE; -} - -/* - * This function expands a node of a tree view if it's not expanded - * yet. Not sure why it needs the threads stuff, but gtk+`example code - * does that, so that's why they're here. - */ -static gint -expand_row_timeout (gpointer data) -{ - GtkTreeView *tree_view = data; - GtkTreePath *dest_path = NULL; - GtkTreeViewDropPosition pos; - gboolean result = FALSE; - - gdk_threads_enter (); - - gtk_tree_view_get_drag_dest_row (tree_view, - &dest_path, - &pos); - - if (dest_path && - (pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER || - pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE)) { - gtk_tree_view_expand_row (tree_view, dest_path, FALSE); - gtk_tree_path_free (dest_path); - } - else { - if (dest_path) - gtk_tree_path_free (dest_path); - - result = TRUE; - } - - gdk_threads_leave (); - - return result; -} - -/* - * This function is called whenever the pointer is moved over a widget - * while dragging some data. It installs a timeout that will expand a - * node of the treeview if not expanded yet. This function also calls - * gdk_drag_status in order to set the suggested action that will be - * used by the "drag-data-received" signal handler to know if we - * should do a move or just a copy of the data. - */ -static gboolean -on_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - gpointer user_data) -{ - GtkTreeViewDropPosition pos; - GtkTreePath *dest_row; - GtkTreeModel *dest_model; - ModestFolderViewPrivate *priv; - GdkDragAction suggested_action; - gboolean valid_location = FALSE; - TnyFolderStore *folder = NULL; - - priv = MODEST_FOLDER_VIEW_GET_PRIVATE (widget); - - if (priv->timer_expander != 0) { - g_source_remove (priv->timer_expander); - priv->timer_expander = 0; - } - - gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget), - x, y, - &dest_row, - &pos); - - /* Do not allow drops between folders */ - if (!dest_row || - pos == GTK_TREE_VIEW_DROP_BEFORE || - pos == GTK_TREE_VIEW_DROP_AFTER) { - gtk_tree_view_set_drag_dest_row(GTK_TREE_VIEW (widget), NULL, 0); - gdk_drag_status(context, 0, time); - valid_location = FALSE; - goto out; - } else { - valid_location = TRUE; - } - - /* Check that the destination folder is writable */ - dest_model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - folder = tree_path_to_folder (dest_model, dest_row); - if (folder && TNY_IS_FOLDER (folder)) { - ModestTnyFolderRules rules = modest_tny_folder_get_rules(TNY_FOLDER (folder)); - - if (rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) { - valid_location = FALSE; - goto out; - } - } - - /* Expand the selected row after 1/2 second */ - if (!gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), dest_row)) { - priv->timer_expander = g_timeout_add (500, expand_row_timeout, widget); - } - gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), dest_row, pos); - - /* Select the desired action. By default we pick MOVE */ - suggested_action = GDK_ACTION_MOVE; - - if (context->actions == GDK_ACTION_COPY) - gdk_drag_status(context, GDK_ACTION_COPY, time); - else if (context->actions == GDK_ACTION_MOVE) - gdk_drag_status(context, GDK_ACTION_MOVE, time); - else if (context->actions & suggested_action) - gdk_drag_status(context, suggested_action, time); - else - gdk_drag_status(context, GDK_ACTION_DEFAULT, time); - - out: - if (folder) - g_object_unref (folder); - if (dest_row) { - gtk_tree_path_free (dest_row); - } - g_signal_stop_emission_by_name (widget, "drag-motion"); - - return valid_location; -} - -/* - * This function sets the treeview as a source and a target for dnd - * events. It also connects all the requirede signals. - */ -static void -setup_drag_and_drop (GtkTreeView *self) -{ - /* Set up the folder view as a dnd destination. Set only the - highlight flag, otherwise gtk will have a different - behaviour */ - gtk_drag_dest_set (GTK_WIDGET (self), - GTK_DEST_DEFAULT_HIGHLIGHT, - folder_view_drag_types, - G_N_ELEMENTS (folder_view_drag_types), - GDK_ACTION_MOVE | GDK_ACTION_COPY); - - g_signal_connect (G_OBJECT (self), - "drag_data_received", - G_CALLBACK (on_drag_data_received), - NULL); - - - /* Set up the treeview as a dnd source */ - gtk_drag_source_set (GTK_WIDGET (self), - GDK_BUTTON1_MASK, - folder_view_drag_types, - G_N_ELEMENTS (folder_view_drag_types), - GDK_ACTION_MOVE | GDK_ACTION_COPY); - - g_signal_connect (G_OBJECT (self), - "drag_motion", - G_CALLBACK (on_drag_motion), - NULL); - - g_signal_connect (G_OBJECT (self), - "drag_data_get", - G_CALLBACK (on_drag_data_get), - NULL); - - g_signal_connect (G_OBJECT (self), - "drag_drop", - G_CALLBACK (drag_drop_cb), - NULL); -} -#endif /* * This function manages the navigation through the folders using the @@ -3711,44 +2914,6 @@ find_inbox_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *inbox_iter return FALSE; } -#ifndef MODEST_TOOLKIT_HILDON2 -void -modest_folder_view_select_first_inbox_or_local (ModestFolderView *self) -{ - GtkTreeModel *model; - GtkTreeIter iter, inbox_iter; - GtkTreeSelection *sel; - GtkTreePath *path = NULL; - - g_return_if_fail (self && MODEST_IS_FOLDER_VIEW(self)); - - model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); - if (!model) - return; - - expand_root_items (self); - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (self)); - - if (!gtk_tree_model_get_iter_first (model, &iter)) { - g_warning ("%s: model is empty", __FUNCTION__); - return; - } - - if (find_inbox_iter (model, &iter, &inbox_iter)) - path = gtk_tree_model_get_path (model, &inbox_iter); - else - path = gtk_tree_path_new_first (); - - /* Select the row and free */ - gtk_tree_view_set_cursor (GTK_TREE_VIEW (self), path, NULL, FALSE); - gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (self), path, NULL, FALSE, 0.0, 0.0); - gtk_tree_path_free (path); - - /* set focus */ - gtk_widget_grab_focus (GTK_WIDGET(self)); -} -#endif - /* recursive */ static gboolean find_folder_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *folder_iter, @@ -3784,62 +2949,6 @@ find_folder_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *folder_it return FALSE; } -#ifndef MODEST_TOOLKIT_HILDON2 -static void -on_row_inserted_maybe_select_folder (GtkTreeModel *tree_model, - GtkTreePath *path, - GtkTreeIter *iter, - ModestFolderView *self) -{ - ModestFolderViewPrivate *priv = NULL; - GtkTreeSelection *sel; - TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN; - GObject *instance = NULL; - - if (!MODEST_IS_FOLDER_VIEW(self)) - return; - - priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); - - priv->reexpand = TRUE; - - gtk_tree_model_get (tree_model, iter, - TYPE_COLUMN, &type, - INSTANCE_COLUMN, &instance, - -1); - - if (!instance) - return; - - if (type == TNY_FOLDER_TYPE_INBOX && priv->folder_to_select == NULL) { - priv->folder_to_select = g_object_ref (instance); - } - g_object_unref (instance); - - if (priv->folder_to_select) { - - if (!modest_folder_view_select_folder (self, priv->folder_to_select, - FALSE)) { - GtkTreePath *path; - path = gtk_tree_model_get_path (tree_model, iter); - gtk_tree_view_expand_to_path (GTK_TREE_VIEW(self), path); - - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (self)); - - gtk_tree_selection_select_iter (sel, iter); - gtk_tree_view_set_cursor (GTK_TREE_VIEW(self), path, NULL, FALSE); - - gtk_tree_path_free (path); - } - - /* Disable next */ - modest_folder_view_disable_next_folder_selection (self); - - /* Refilter the model */ - gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (tree_model)); - } -} -#endif void modest_folder_view_disable_next_folder_selection (ModestFolderView *self) @@ -3989,13 +3098,6 @@ modest_folder_view_copy_model (ModestFolderView *folder_view_src, /* Set copied model */ gtk_tree_view_set_model (GTK_TREE_VIEW (folder_view_dst), new_filter_model); -#ifndef MODEST_TOOLKIT_HILDON2 - dst_priv->signal_handlers = modest_signal_mgr_connect (dst_priv->signal_handlers, - G_OBJECT(new_filter_model), "row-inserted", - (GCallback) on_row_inserted_maybe_select_folder, - folder_view_dst); -#endif -#ifdef MODEST_TOOLKIT_HILDON2 if (new_tny_model) { dst_priv->signal_handlers = modest_signal_mgr_connect (dst_priv->signal_handlers, G_OBJECT (new_tny_model), @@ -4003,7 +3105,6 @@ modest_folder_view_copy_model (ModestFolderView *folder_view_src, G_CALLBACK (on_activity_changed), folder_view_dst); } -#endif /* Free */ g_object_unref (new_filter_model); @@ -4320,7 +3421,6 @@ modest_folder_view_get_activity (ModestFolderView *self) } } -#ifdef MODEST_TOOLKIT_HILDON2 static void on_activity_changed (TnyGtkFolderListStore *store, gboolean activity, @@ -4335,7 +3435,6 @@ on_activity_changed (TnyGtkFolderListStore *store, g_signal_emit (G_OBJECT (folder_view), signals[ACTIVITY_CHANGED_SIGNAL], 0, activity); } -#endif TnyList * modest_folder_view_get_model_tny_list (ModestFolderView *self) -- 1.7.9.5