diff options
Diffstat (limited to 'mail/em-folder-tree.c')
-rw-r--r-- | mail/em-folder-tree.c | 490 |
1 files changed, 245 insertions, 245 deletions
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index acf317a15c..adf8616755 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -86,10 +86,10 @@ struct _selected_uri { struct _EMFolderTreePrivate { GtkTreeView *treeview; EMFolderTreeModel *model; - + GSList *select_uris; /* selected_uri structures of each path pending selection. */ GHashTable *select_uris_table; /*Removed as they're encountered, so use this to find uri's not presnet but selected */ - + guint32 excluded; gboolean (*excluded_func)(EMFolderTree *emft, GtkTreeModel *model, GtkTreeIter *iter, void *data); void *excluded_data; @@ -99,16 +99,16 @@ struct _EMFolderTreePrivate { * else has set the cursor, otherwise * we need to set it when we set the * selection */ - + guint save_state_id; - + guint autoscroll_id; guint autoexpand_id; GtkTreeRowReference *autoexpand_row; - + guint loading_row_id; guint loaded_row_id; - + GtkTreeRowReference *drag_row; }; @@ -183,7 +183,7 @@ GType em_folder_tree_get_type (void) { static GType type = 0; - + if (!type) { static const GTypeInfo info = { sizeof (EMFolderTreeClass), @@ -196,10 +196,10 @@ em_folder_tree_get_type (void) 0, /* n_preallocs */ (GInstanceInitFunc) em_folder_tree_init, }; - + type = g_type_register_static (GTK_TYPE_VBOX, "EMFolderTree", &info, 0); } - + return type; } @@ -209,14 +209,14 @@ em_folder_tree_class_init (EMFolderTreeClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - + parent_class = g_type_class_ref (GTK_TYPE_VBOX); - + object_class->finalize = em_folder_tree_finalize; gtk_object_class->destroy = em_folder_tree_destroy; widget_class->popup_menu = emft_popup_menu; - + signals[FOLDER_SELECTED] = g_signal_new ("folder-selected", G_OBJECT_CLASS_TYPE (object_class), @@ -228,7 +228,7 @@ em_folder_tree_class_init (EMFolderTreeClass *klass) G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT); - + signals[FOLDER_ACTIVATED] = g_signal_new ("folder-activated", G_OBJECT_CLASS_TYPE (object_class), @@ -246,20 +246,20 @@ subdirs_contain_unread (GtkTreeModel *model, GtkTreeIter *root) { unsigned int unread; GtkTreeIter iter; - + if (!gtk_tree_model_iter_children (model, &iter, root)) return FALSE; - + do { gtk_tree_model_get (model, &iter, COL_UINT_UNREAD, &unread, -1); if (unread) return TRUE; - + if (gtk_tree_model_iter_has_child (model, &iter)) if (subdirs_contain_unread (model, &iter)) return TRUE; } while (gtk_tree_model_iter_next (model, &iter)); - + return FALSE; } @@ -287,7 +287,7 @@ render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GdkPixbuf *pixbuf = NULL; gboolean is_store; guint32 flags; - + if (!initialised) { folder_icons[FOLDER_ICON_NORMAL] = e_icon_factory_get_icon ("folder", E_ICON_SIZE_MENU); folder_icons[FOLDER_ICON_INBOX] = e_icon_factory_get_icon ("mail-inbox", E_ICON_SIZE_MENU); @@ -298,10 +298,10 @@ render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer, folder_icons[FOLDER_ICON_SHARED_BY_ME] = e_icon_factory_get_icon ("stock_shared-by-me", E_ICON_SIZE_MENU); folder_icons[FOLDER_ICON_SENT] = e_icon_factory_get_icon ("mail-sent", E_ICON_SIZE_MENU); folder_icons[FOLDER_ICON_VIRTUAL] = e_icon_factory_get_icon ("folder-saved-search", E_ICON_SIZE_MENU); - + initialised = TRUE; } - + gtk_tree_model_get (model, iter, COL_BOOL_IS_STORE, &is_store, COL_UINT_FLAGS, &flags, -1); if (!is_store) { @@ -322,9 +322,9 @@ render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer, pixbuf = folder_icons[FOLDER_ICON_SENT]; break; default: - if (flags & CAMEL_FOLDER_SHARED_TO_ME) + if (flags & CAMEL_FOLDER_SHARED_TO_ME) pixbuf = folder_icons[FOLDER_ICON_SHARED_TO_ME]; - else if (flags & CAMEL_FOLDER_SHARED_BY_ME) + else if (flags & CAMEL_FOLDER_SHARED_BY_ME) pixbuf = folder_icons[FOLDER_ICON_SHARED_BY_ME]; else if (flags & CAMEL_FOLDER_VIRTUAL) pixbuf = folder_icons[FOLDER_ICON_VIRTUAL]; @@ -332,7 +332,7 @@ render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer, pixbuf = folder_icons[FOLDER_ICON_NORMAL]; } } - + g_object_set (renderer, "pixbuf", pixbuf, "visible", !is_store, NULL); } @@ -344,16 +344,16 @@ render_display_name (GtkTreeViewColumn *column, GtkCellRenderer *renderer, unsigned int unread; char *display; char *name; - + gtk_tree_model_get (model, iter, COL_STRING_DISPLAY_NAME, &name, COL_BOOL_IS_STORE, &is_store, COL_UINT_UNREAD, &unread, -1); - + if (!(bold = is_store || unread)) { if (gtk_tree_model_iter_has_child (model, iter)) bold = subdirs_contain_unread (model, iter); } - + if (!is_store && unread) { /* Translators: This is the string used for displaying the * folder names in folder trees. "%s" will be replaced by @@ -374,11 +374,11 @@ render_display_name (GtkTreeViewColumn *column, GtkCellRenderer *renderer, g_free (name); } else display = name; - + g_object_set (renderer, "text", display, "weight", bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, NULL); - + g_free (display); } @@ -424,7 +424,7 @@ static void em_folder_tree_init (EMFolderTree *emft) { struct _EMFolderTreePrivate *priv; - + priv = g_new0 (struct _EMFolderTreePrivate, 1); priv->select_uris_table = g_hash_table_new(g_str_hash, g_str_equal); priv->treeview = NULL; @@ -447,7 +447,7 @@ em_folder_tree_finalize (GObject *obj) } g_free (emft->priv); - + G_OBJECT_CLASS (parent_class)->finalize (obj); } @@ -456,38 +456,38 @@ em_folder_tree_destroy (GtkObject *obj) { EMFolderTree *emft = (EMFolderTree *) obj; struct _EMFolderTreePrivate *priv = emft->priv; - + if (priv->loading_row_id != 0) { g_signal_handler_disconnect (priv->model, priv->loading_row_id); priv->loading_row_id = 0; } - + if (priv->loaded_row_id != 0) { g_signal_handler_disconnect (priv->model, priv->loaded_row_id); priv->loaded_row_id = 0; } - + if (priv->save_state_id != 0) { g_source_remove (priv->save_state_id); emft_save_state (emft); } - + if (priv->autoscroll_id != 0) { g_source_remove (priv->autoscroll_id); priv->autoscroll_id = 0; } - + if (priv->autoexpand_id != 0) { gtk_tree_row_reference_free (priv->autoexpand_row); priv->autoexpand_row = NULL; - + g_source_remove (priv->autoexpand_id); priv->autoexpand_id = 0; } - + priv->treeview = NULL; priv->model = NULL; - + GTK_OBJECT_CLASS (parent_class)->destroy (obj); } @@ -501,24 +501,24 @@ folder_tree_new (EMFolderTree *emft, EMFolderTreeModel *model) gboolean side_bar_search; GConfClient *gconf; - gconf = mail_config_get_gconf_client (); + gconf = mail_config_get_gconf_client (); side_bar_search = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/side_bar_search", NULL); - + tree = gtk_tree_view_new_with_model ((GtkTreeModel *) model); GTK_WIDGET_SET_FLAGS(tree, GTK_CAN_FOCUS); - + column = gtk_tree_view_column_new (); gtk_tree_view_append_column ((GtkTreeView *) tree, column); - + renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func (column, renderer, render_pixbuf, NULL, NULL); - + renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, render_display_name, NULL, NULL); - + selection = gtk_tree_view_get_selection ((GtkTreeView *) tree); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); gtk_tree_selection_set_select_function(selection, emft_select_func, emft, NULL); @@ -536,29 +536,29 @@ em_folder_tree_construct (EMFolderTree *emft, EMFolderTreeModel *model) struct _EMFolderTreePrivate *priv = emft->priv; GtkTreeSelection *selection; GtkWidget *scrolled; - + scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); - + priv->model = model; priv->treeview = folder_tree_new (emft, model); gtk_widget_show ((GtkWidget *) priv->treeview); - + g_signal_connect (priv->model, "row-changed", G_CALLBACK (emft_model_row_changed), emft); g_signal_connect (priv->treeview, "row-expanded", G_CALLBACK (emft_tree_row_expanded), emft); g_signal_connect (priv->treeview, "test-collapse-row", G_CALLBACK (emft_tree_test_collapse_row), emft); g_signal_connect (priv->treeview, "row-activated", G_CALLBACK (emft_tree_row_activated), emft); g_signal_connect (priv->treeview, "button-press-event", G_CALLBACK (emft_tree_button_press), emft); g_signal_connect (priv->treeview, "key-press-event", G_CALLBACK (emft_tree_user_event), emft); - + selection = gtk_tree_view_get_selection ((GtkTreeView *) priv->treeview); g_signal_connect (selection, "changed", G_CALLBACK (emft_tree_selection_changed), emft); - + gtk_container_add ((GtkContainer *) scrolled, (GtkWidget *) priv->treeview); gtk_widget_show (scrolled); - + gtk_box_pack_start ((GtkBox *) emft, scrolled, TRUE, TRUE, 0); } @@ -567,16 +567,16 @@ em_folder_tree_new (void) { EMFolderTreeModel *model; EMFolderTree *emft; - + model = em_folder_tree_model_new (mail_component_peek_base_directory (mail_component_peek ())); emft = (EMFolderTree *) em_folder_tree_new_with_model (model); g_object_unref (model); - + return (GtkWidget *) emft; } /* NOTE: Removes and frees the selected uri structure */ -static void +static void emft_select_uri(EMFolderTree *emft, GtkTreePath *path, struct _selected_uri *u) { struct _EMFolderTreePrivate *priv = emft->priv; @@ -613,47 +613,47 @@ emft_expand_node (EMFolderTreeModel *model, const char *key, EMFolderTree *emft) n = strlen (key); else n = (p - key); - + uid = g_alloca (n + 1); memcpy (uid, key, n); uid[n] = '\0'; - + if ((account = mail_config_get_account_by_uid (uid)) && account->enabled) { CamelException ex; - + camel_exception_init (&ex); store = (CamelStore *) camel_session_get_service (session, account->source->url, CAMEL_PROVIDER_STORE, &ex); camel_exception_clear (&ex); - + if (store == NULL) return; } else if (!strcmp (uid, "vfolder")) { if (!(store = vfolder_store)) return; - + camel_object_ref (store); } else if (!strcmp (uid, "local")) { if (!(store = mail_component_peek_local_store (NULL))) return; - + camel_object_ref (store); } else { return; } - + if (!(si = g_hash_table_lookup (priv->model->store_hash, store))) { camel_object_unref (store); return; } - + camel_object_unref (store); - + if (p != NULL) { if (!(row = g_hash_table_lookup (si->full_hash, p + 1))) return; } else row = si->row; - + path = gtk_tree_row_reference_get_path (row); gtk_tree_view_expand_row (priv->treeview, path, FALSE); @@ -682,7 +682,7 @@ emft_maybe_expand_row (EMFolderTreeModel *model, GtkTreePath *tree_path, GtkTree COL_POINTER_CAMEL_STORE, &store, COL_BOOL_IS_STORE, &is_store, -1); - + si = g_hash_table_lookup (model->store_hash, store); if ((account = mail_config_get_account_by_name (si->display_name))) { key = g_strdup_printf ("%s/%s", account->uid, full_name ? full_name : ""); @@ -720,19 +720,19 @@ em_folder_tree_new_with_model (EMFolderTreeModel *model) { EMFolderTree *emft; AtkObject *a11y; - + emft = g_object_new (EM_TYPE_FOLDER_TREE, NULL); em_folder_tree_construct (emft, model); g_object_ref (model); - + em_folder_tree_model_expand_foreach (model, (EMFTModelExpandFunc)emft_expand_node, emft); - + emft->priv->loading_row_id = g_signal_connect (model, "loading-row", G_CALLBACK (emft_maybe_expand_row), emft); emft->priv->loaded_row_id = g_signal_connect (model, "loaded-row", G_CALLBACK (emft_maybe_expand_row), emft); a11y = gtk_widget_get_accessible (GTK_WIDGET (emft->priv->treeview)); atk_object_set_name (a11y, _("Mail Folder Tree")); - + return (GtkWidget *) emft; } @@ -744,15 +744,15 @@ tree_drag_begin (GtkWidget *widget, GdkDragContext *context, EMFolderTree *emft) GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; - + selection = gtk_tree_view_get_selection ((GtkTreeView *) widget); if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; - + path = gtk_tree_model_get_path (model, &iter); priv->drag_row = gtk_tree_row_reference_new (model, path); gtk_tree_path_free (path); - + /* FIXME: set a drag icon? */ } @@ -766,10 +766,10 @@ tree_drag_data_delete(GtkWidget *widget, GdkDragContext *context, EMFolderTree * CamelStore *store; CamelException ex; GtkTreeIter iter; - + if (!priv->drag_row || (src_path = gtk_tree_row_reference_get_path (priv->drag_row))) return; - + if (!gtk_tree_model_get_iter((GtkTreeModel *)priv->model, &iter, src_path)) goto fail; @@ -777,10 +777,10 @@ tree_drag_data_delete(GtkWidget *widget, GdkDragContext *context, EMFolderTree * COL_POINTER_CAMEL_STORE, &store, COL_STRING_FULL_NAME, &full_name, COL_BOOL_IS_STORE, &is_store, -1); - + if (is_store) goto fail; - + camel_exception_init(&ex); camel_store_delete_folder(store, full_name, &ex); if (camel_exception_is_set(&ex)) @@ -800,24 +800,24 @@ tree_drag_data_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData CamelStore *store; CamelException ex; GtkTreeIter iter; - + if (!priv->drag_row || !(src_path = gtk_tree_row_reference_get_path(priv->drag_row))) return; - + if (!gtk_tree_model_get_iter((GtkTreeModel *)priv->model, &iter, src_path)) goto fail; - + gtk_tree_model_get((GtkTreeModel *)priv->model, &iter, COL_POINTER_CAMEL_STORE, &store, COL_STRING_FULL_NAME, &full_name, COL_STRING_URI, &uri, -1); - + /* make sure user isn't trying to drag on a placeholder row */ if (full_name == NULL) goto fail; - + camel_exception_init(&ex); - + switch (info) { case DND_DRAG_TYPE_FOLDER: /* dragging to a new location in the folder tree */ @@ -827,7 +827,7 @@ tree_drag_data_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData /* dragging to nautilus or something, probably */ if ((folder = camel_store_get_folder(store, full_name, 0, &ex))) { GPtrArray *uids = camel_folder_get_uids(folder); - + em_utils_selection_set_urilist(selection, folder, uids); camel_folder_free_uids(folder, uids); camel_object_unref(folder); @@ -836,7 +836,7 @@ tree_drag_data_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData default: abort(); } - + if (camel_exception_is_set(&ex)) camel_exception_clear(&ex); fail: @@ -849,7 +849,7 @@ fail: /* Drop handling */ struct _DragDataReceivedAsync { struct _mail_msg msg; - + /* input data */ GdkDragContext *context; @@ -860,7 +860,7 @@ struct _DragDataReceivedAsync { char *full_name; guint32 action; guint info; - + unsigned int move:1; unsigned int moved:1; unsigned int aborted:1; @@ -886,17 +886,17 @@ emft_drop_async_desc (struct _mail_msg *mm, int done) struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; CamelURL *url; char *buf; - + if (m->info == DND_DROP_TYPE_FOLDER) { url = camel_url_new ((char *)m->selection->data, NULL); - + if (m->move) buf = g_strdup_printf (_("Moving folder %s"), url->fragment ? url->fragment : url->path + 1); else buf = g_strdup_printf (_("Copying folder %s"), url->fragment ? url->fragment : url->path + 1); - + camel_url_free (url); - + return buf; } else { if (m->move) @@ -911,7 +911,7 @@ emft_drop_async_drop (struct _mail_msg *mm) { struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; CamelFolder *folder; - + /* for types other than folder, we can't drop to the root path */ if (m->info == DND_DROP_TYPE_FOLDER) { /* copy or move (aka rename) a folder */ @@ -945,7 +945,7 @@ static void emft_drop_async_free (struct _mail_msg *mm) { struct _DragDataReceivedAsync *m = (struct _DragDataReceivedAsync *) mm; - + g_object_unref(m->context); camel_object_unref(m->store); g_free(m->full_name); @@ -1025,23 +1025,23 @@ tree_drag_data_received(GtkWidget *widget, GdkDragContext *context, int x, int y if (!gtk_tree_view_get_dest_row_at_pos (priv->treeview, x, y, &dest_path, &pos)) return; - + /* this means we are receiving no data */ if (!selection->data || selection->length == -1) { gtk_drag_finish(context, FALSE, FALSE, GDK_CURRENT_TIME); return; } - + if (!gtk_tree_model_get_iter((GtkTreeModel *)priv->model, &iter, dest_path)) { gtk_drag_finish(context, FALSE, FALSE, GDK_CURRENT_TIME); return; } - + gtk_tree_model_get((GtkTreeModel *)priv->model, &iter, COL_POINTER_CAMEL_STORE, &store, COL_BOOL_IS_STORE, &is_store, COL_STRING_FULL_NAME, &full_name, -1); - + /* make sure user isn't try to drop on a placeholder row */ if (full_name == NULL && !is_store) { gtk_drag_finish (context, FALSE, FALSE, GDK_CURRENT_TIME); @@ -1105,61 +1105,61 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) gboolean is_store; GtkTreeIter iter; GList *targets; - + /* This is a bit of a mess, but should handle all the cases properly */ if (!gtk_tree_model_get_iter((GtkTreeModel *)p->model, &iter, path)) return GDK_NONE; - + gtk_tree_model_get((GtkTreeModel *)p->model, &iter, COL_BOOL_IS_STORE, &is_store, COL_STRING_FULL_NAME, &full_name, COL_POINTER_CAMEL_STORE, &dstore, COL_STRING_URI, &uri, -1); - + local = mail_component_peek_local_store (NULL); - + targets = context->targets; - + /* Check for special destinations */ if (uri && full_name) { #if 0 /* only allow copying/moving folders (not messages) into the local Outbox */ if (dstore == local && !strcmp (full_name, "Outbox")) { GdkAtom xfolder; - + xfolder = drop_atoms[DND_DROP_TYPE_FOLDER]; while (targets != NULL) { if (targets->data == (gpointer) xfolder) { atom = xfolder; goto done; } - + targets = targets->next; } - + goto done; } #endif - + /* don't allow copying/moving into the UNMATCHED vfolder */ if (!strncmp (uri, "vfolder:", 8) && !strcmp (full_name, CAMEL_UNMATCHED_NAME)) goto done; - + /* don't allow copying/moving into a vTrash/vJunk folder */ if (!strcmp (full_name, CAMEL_VTRASH_NAME) || !strcmp (full_name, CAMEL_VJUNK_NAME)) goto done; } - + if (p->drag_row) { GtkTreePath *src_path = gtk_tree_row_reference_get_path(p->drag_row); - + if (src_path) { if (gtk_tree_model_get_iter((GtkTreeModel *)p->model, &iter, src_path)) gtk_tree_model_get((GtkTreeModel *)p->model, &iter, COL_POINTER_CAMEL_STORE, &sstore, COL_STRING_URI, &src_uri, -1); - + /* can't dnd onto itself or below itself - bad things happen, no point dragging to where we were either */ if (gtk_tree_path_compare(path, src_path) == 0 @@ -1169,16 +1169,16 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) gtk_tree_path_free(src_path); goto done; } - + gtk_tree_path_free(src_path); } } - + /* Check for special sources, and vfolder stuff */ if (src_uri) { CamelURL *url; char *url_path; - + /* FIXME: this is a total hack, but i think all we can do at present */ /* Check for dragging from special folders which can't be moved/copied */ url = camel_url_new(src_uri, NULL); @@ -1187,9 +1187,9 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) /* don't allow moving any of the the local special folders */ if (sstore == local && is_special_local_folder (url_path)) { GdkAtom xfolder; - + camel_url_free (url); - + /* TODO: not sure if this is legal, but it works, force copy for special local folders */ context->suggested_action = GDK_ACTION_COPY; xfolder = drop_atoms[DND_DROP_TYPE_FOLDER]; @@ -1198,19 +1198,19 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) atom = xfolder; goto done; } - + targets = targets->next; } - + goto done; } - + /* don't allow copying/moving of the UNMATCHED vfolder */ if (!strcmp (url->protocol, "vfolder") && !strcmp (url_path, CAMEL_UNMATCHED_NAME)) { camel_url_free (url); goto done; } - + /* don't allow copying/moving of any vTrash/vJunk folder nor maildir 'inbox' */ if (strcmp(url_path, CAMEL_VTRASH_NAME) == 0 || strcmp(url_path, CAMEL_VJUNK_NAME) == 0 @@ -1221,7 +1221,7 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) } } camel_url_free(url); - + /* Search Folders can only be dropped into other Search Folders */ if (strncmp(src_uri, "vfolder:", 8) == 0) { /* TODO: not sure if this is legal, but it works, force move only for vfolders */ @@ -1236,11 +1236,11 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) atom = xfolder; goto done; } - + targets = targets->next; } } - + goto done; } } @@ -1250,7 +1250,7 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) goto done; /* Now we either have a store or a normal folder */ - + if (is_store) { GdkAtom xfolder; @@ -1260,12 +1260,12 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) atom = xfolder; goto done; } - + targets = targets->next; } } else { int i; - + while (targets != NULL) { for (i = 0; i < NUM_DROP_TYPES; i++) { if (targets->data == (gpointer) drop_atoms[i]) { @@ -1273,16 +1273,16 @@ emft_drop_target(EMFolderTree *emft, GdkDragContext *context, GtkTreePath *path) goto done; } } - + targets = targets->next; } } - + done: - + g_free (full_name); g_free (uri); - + return atom; } @@ -1294,28 +1294,28 @@ tree_drag_drop (GtkWidget *widget, GdkDragContext *context, int x, int y, guint int cell_x, cell_y; GtkTreePath *path; GdkAtom target; - + if (priv->autoscroll_id != 0) { g_source_remove (priv->autoscroll_id); priv->autoscroll_id = 0; } - + if (priv->autoexpand_id != 0) { gtk_tree_row_reference_free (priv->autoexpand_row); priv->autoexpand_row = NULL; - + g_source_remove (priv->autoexpand_id); priv->autoexpand_id = 0; } - + if (!gtk_tree_view_get_path_at_pos (priv->treeview, x, y, &path, &column, &cell_x, &cell_y)) return FALSE; - + target = emft_drop_target(emft, context, path); gtk_tree_path_free (path); if (target == GDK_NONE) return FALSE; - + return TRUE; } @@ -1323,7 +1323,7 @@ static void tree_drag_end (GtkWidget *widget, GdkDragContext *context, EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; - + if (priv->drag_row) { gtk_tree_row_reference_free (priv->drag_row); priv->drag_row = NULL; @@ -1336,20 +1336,20 @@ static void tree_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time, EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; - + if (priv->autoscroll_id != 0) { g_source_remove (priv->autoscroll_id); priv->autoscroll_id = 0; } - + if (priv->autoexpand_id != 0) { gtk_tree_row_reference_free (priv->autoexpand_row); priv->autoexpand_row = NULL; - + g_source_remove (priv->autoexpand_id); priv->autoexpand_id = 0; } - + gtk_tree_view_set_drag_dest_row(emft->priv->treeview, NULL, GTK_TREE_VIEW_DROP_BEFORE); } @@ -1365,29 +1365,29 @@ tree_autoscroll (EMFolderTree *emft) GdkWindow *window; int offset, y; float value; - + /* get the y pointer position relative to the treeview */ window = gtk_tree_view_get_bin_window (priv->treeview); gdk_window_get_pointer (window, NULL, &y, NULL); - + /* rect is in coorinates relative to the scrolled window relative to the treeview */ gtk_tree_view_get_visible_rect (priv->treeview, &rect); - + /* move y into the same coordinate system as rect */ y += rect.y; - + /* see if we are near the top edge */ if ((offset = y - (rect.y + 2 * SCROLL_EDGE_SIZE)) > 0) { /* see if we are near the bottom edge */ if ((offset = y - (rect.y + rect.height - 2 * SCROLL_EDGE_SIZE)) < 0) return TRUE; } - + vadjustment = gtk_tree_view_get_vadjustment (priv->treeview); - + value = CLAMP (vadjustment->value + offset, 0.0, vadjustment->upper - vadjustment->page_size); gtk_adjustment_set_value (vadjustment, value); - + return TRUE; } @@ -1396,11 +1396,11 @@ tree_autoexpand (EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; GtkTreePath *path; - + path = gtk_tree_row_reference_get_path (priv->autoexpand_row); gtk_tree_view_expand_row (priv->treeview, path, FALSE); gtk_tree_path_free (path); - + return TRUE; } @@ -1415,19 +1415,19 @@ tree_drag_motion (GtkWidget *widget, GdkDragContext *context, int x, int y, guin GtkTreeIter iter; GdkAtom target; int i; - + if (!gtk_tree_view_get_dest_row_at_pos(priv->treeview, x, y, &path, &pos)) return FALSE; - + if (priv->autoscroll_id == 0) priv->autoscroll_id = g_timeout_add (150, (GSourceFunc) tree_autoscroll, emft); - + gtk_tree_model_get_iter (model, &iter, path); - + if (gtk_tree_model_iter_has_child (model, &iter) && !gtk_tree_view_row_expanded (priv->treeview, path)) { if (priv->autoexpand_id != 0) { GtkTreePath *autoexpand_path; - + autoexpand_path = gtk_tree_row_reference_get_path (priv->autoexpand_row); if (gtk_tree_path_compare (autoexpand_path, path) != 0) { /* row changed, restart timer */ @@ -1436,7 +1436,7 @@ tree_drag_motion (GtkWidget *widget, GdkDragContext *context, int x, int y, guin g_source_remove (priv->autoexpand_id); priv->autoexpand_id = g_timeout_add (600, (GSourceFunc) tree_autoexpand, emft); } - + gtk_tree_path_free (autoexpand_path); } else { priv->autoexpand_id = g_timeout_add (600, (GSourceFunc) tree_autoexpand, emft); @@ -1445,7 +1445,7 @@ tree_drag_motion (GtkWidget *widget, GdkDragContext *context, int x, int y, guin } else if (priv->autoexpand_id != 0) { gtk_tree_row_reference_free (priv->autoexpand_row); priv->autoexpand_row = NULL; - + g_source_remove (priv->autoexpand_id); priv->autoexpand_id = 0; } @@ -1473,9 +1473,9 @@ tree_drag_motion (GtkWidget *widget, GdkDragContext *context, int x, int y, guin } gtk_tree_path_free(path); - + gdk_drag_status(context, action, time); - + return action != 0; } @@ -1485,14 +1485,14 @@ em_folder_tree_enable_drag_and_drop (EMFolderTree *emft) struct _EMFolderTreePrivate *priv; static int setup = 0; int i; - + g_return_if_fail (EM_IS_FOLDER_TREE (emft)); - + priv = emft->priv; if (!setup) { for (i=0; i<NUM_DRAG_TYPES; i++) drag_atoms[i] = gdk_atom_intern(drag_types[i].target, FALSE); - + for (i=0; i<NUM_DROP_TYPES; i++) drop_atoms[i] = gdk_atom_intern(drop_types[i].target, FALSE); @@ -1501,7 +1501,7 @@ em_folder_tree_enable_drag_and_drop (EMFolderTree *emft) gtk_drag_source_set((GtkWidget *)priv->treeview, GDK_BUTTON1_MASK, drag_types, NUM_DRAG_TYPES, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK); gtk_drag_dest_set((GtkWidget *)priv->treeview, GTK_DEST_DEFAULT_ALL, drop_types, NUM_DROP_TYPES, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK); - + g_signal_connect (priv->treeview, "drag-begin", G_CALLBACK (tree_drag_begin), emft); g_signal_connect (priv->treeview, "drag-data-delete", G_CALLBACK (tree_drag_data_delete), emft); g_signal_connect (priv->treeview, "drag-data-get", G_CALLBACK (tree_drag_data_get), emft); @@ -1516,7 +1516,7 @@ void em_folder_tree_set_multiselect (EMFolderTree *tree, gboolean mode) { GtkTreeSelection *sel = gtk_tree_view_get_selection ((GtkTreeView *) tree->priv->treeview); - + tree->priv->do_multiselect = mode; gtk_tree_selection_set_mode (sel, mode ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); } @@ -1551,14 +1551,14 @@ em_folder_tree_get_selected_uris (EMFolderTree *emft) if (gtk_tree_model_get_iter(model, &iter, path)) { char *uri; - + gtk_tree_model_get(model, &iter, COL_STRING_URI, &uri, -1); list = g_list_prepend (list, uri); } gtk_tree_path_free(path); } g_list_free(rows); - + return g_list_reverse (list); } @@ -1567,7 +1567,7 @@ get_selected_uris_path_iterate (GtkTreeModel *model, GtkTreePath *treepath, GtkT { GList **list = (GList **) data; char *full_name; - + gtk_tree_model_get (model, iter, COL_STRING_FULL_NAME, &full_name, -1); *list = g_list_append (*list, full_name); } @@ -1577,9 +1577,9 @@ em_folder_tree_get_selected_paths (EMFolderTree *emft) { GtkTreeSelection *selection = gtk_tree_view_get_selection (emft->priv->treeview); GList *list = NULL; - + gtk_tree_selection_selected_foreach (selection, get_selected_uris_path_iterate, &list); - + return list; } @@ -1626,7 +1626,7 @@ em_folder_tree_set_selected_list (EMFolderTree *emft, GList *list, gboolean expa const char *path; char *expand_key, *end; EAccount *account; - + if (((CamelService *)u->store)->provider->url_flags & CAMEL_URL_FRAGMENT_IS_PATH) path = url->fragment; else @@ -1671,16 +1671,16 @@ static void dump_fi (CamelFolderInfo *fi, int depth) { int i; - + while (fi != NULL) { for (i = 0; i < depth; i++) fputs (" ", stdout); - + printf ("path='%s'; full_name='%s'\n", fi->path, fi->full_name); - + if (fi->child) dump_fi (fi->child, depth + 1); - + fi = fi->sibling; } } @@ -1688,14 +1688,14 @@ dump_fi (CamelFolderInfo *fi, int depth) struct _EMFolderTreeGetFolderInfo { struct _mail_msg msg; - + /* input data */ GtkTreeRowReference *root; EMFolderTree *emft; CamelStore *store; guint32 flags; char *top; - + /* output data */ CamelFolderInfo *fi; }; @@ -1717,7 +1717,7 @@ emft_get_folder_info__get (struct _mail_msg *mm) { struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; guint32 flags = m->flags | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; - + m->fi = camel_store_get_folder_info (m->store, m->top, flags, &mm->ex); } @@ -1732,15 +1732,15 @@ emft_get_folder_info__got (struct _mail_msg *mm) GtkTreeStore *model; GtkTreePath *path; gboolean is_store; - + /* check that we haven't been destroyed */ if (priv->treeview == NULL) return; - + /* check that our parent folder hasn't been deleted/unsubscribed */ if (!gtk_tree_row_reference_valid (m->root)) return; - + if (!(si = g_hash_table_lookup (priv->model->store_hash, m->store))) { /* store has been removed in the interim - do nothing */ return; @@ -1760,7 +1760,7 @@ emft_get_folder_info__got (struct _mail_msg *mm) } gtk_tree_path_free (path); - + /* make sure we still need to load the tree subfolders... */ gtk_tree_model_get ((GtkTreeModel *) model, &root, COL_BOOL_IS_STORE, &is_store, @@ -1768,7 +1768,7 @@ emft_get_folder_info__got (struct _mail_msg *mm) /* get the first child (which will be a dummy node) */ gtk_tree_model_iter_children ((GtkTreeModel *) model, &iter, &root); - + /* FIXME: camel's IMAP code is totally on crack here, @top's * folder info should be @fi and fi->child should be what we * want to fill our tree with... *sigh* */ @@ -1777,11 +1777,11 @@ emft_get_folder_info__got (struct _mail_msg *mm) fi = m->fi->next; } else fi = m->fi; - + if (fi == NULL) { /* no children afterall... remove the "Loading..." placeholder node */ emft_update_model_expanded_state (priv, &root, FALSE); - + if (is_store) { path = gtk_tree_model_get_path ((GtkTreeModel *) model, &root); gtk_tree_view_collapse_row (priv->treeview, path); @@ -1793,15 +1793,15 @@ emft_get_folder_info__got (struct _mail_msg *mm) } } else { int fully_loaded = (m->flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) ? TRUE : FALSE; - + do { em_folder_tree_model_set_folder_info (priv->model, &iter, si, fi, fully_loaded); - + if ((fi = fi->next) != NULL) gtk_tree_store_append (model, &iter, &root); } while (fi != NULL); } - + gtk_tree_store_set (model, &root, COL_BOOL_LOAD_SUBDIRS, FALSE, -1); emft_queue_save_state (m->emft); } @@ -1810,9 +1810,9 @@ static void emft_get_folder_info__free (struct _mail_msg *mm) { struct _EMFolderTreeGetFolderInfo *m = (struct _EMFolderTreeGetFolderInfo *) mm; - + camel_store_free_folder_info (m->store, m->fi); - + gtk_tree_row_reference_free (m->root); g_object_unref(m->emft); camel_object_unref (m->store); @@ -1835,13 +1835,13 @@ emft_update_model_expanded_state (struct _EMFolderTreePrivate *priv, GtkTreeIter EAccount *account; char *full_name; char *key; - + gtk_tree_model_get ((GtkTreeModel *) priv->model, iter, COL_STRING_FULL_NAME, &full_name, COL_POINTER_CAMEL_STORE, &store, COL_BOOL_IS_STORE, &is_store, -1); - + si = g_hash_table_lookup (priv->model->store_hash, store); if ((account = mail_config_get_account_by_name (si->display_name))) { key = g_strdup_printf ("%s/%s", account->uid, full_name ? full_name : ""); @@ -1852,7 +1852,7 @@ emft_update_model_expanded_state (struct _EMFolderTreePrivate *priv, GtkTreeIter /* local store */ key = g_strdup_printf ("local/%s", full_name ? full_name : ""); } - + em_folder_tree_model_set_expanded (priv->model, key, expanded); g_free (full_name); g_free (key); @@ -1865,7 +1865,7 @@ emft_model_row_changed (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *ite GtkTreeIter child_iter = *iter; g_signal_handlers_block_by_func (model, emft_model_row_changed, emft); - + /* Folders are displayed with a bold weight to indicate that they contain unread messages. We signal that parent rows have changed here to update them. */ @@ -1878,7 +1878,7 @@ emft_model_row_changed (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *ite gtk_tree_path_free (parent_path); child_iter = parent_iter; } - + g_signal_handlers_unblock_by_func (model, emft_model_row_changed, emft); } @@ -1891,17 +1891,17 @@ emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *t CamelStore *store; char *full_name; gboolean load; - + model = gtk_tree_view_get_model (treeview); - + gtk_tree_model_get (model, root, COL_STRING_FULL_NAME, &full_name, COL_POINTER_CAMEL_STORE, &store, COL_BOOL_LOAD_SUBDIRS, &load, -1); - + emft_update_model_expanded_state (priv, root, TRUE); - + if (!load) { emft_queue_save_state (emft); g_free (full_name); @@ -1909,7 +1909,7 @@ emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *t } gtk_tree_store_set((GtkTreeStore *)model, root, COL_BOOL_LOAD_SUBDIRS, FALSE, -1); - + m = mail_msg_new (&get_folder_info_op, NULL, sizeof (struct _EMFolderTreeGetFolderInfo)); m->root = gtk_tree_row_reference_new (model, tree_path); camel_object_ref (store); @@ -1918,7 +1918,7 @@ emft_tree_row_expanded (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePath *t g_object_ref(emft); m->top = full_name; m->flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST; - + e_thread_put (mail_thread_new, (EMsg *) m); } @@ -1928,17 +1928,17 @@ emft_tree_test_collapse_row (GtkTreeView *treeview, GtkTreeIter *root, GtkTreePa GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter cursor; - + selection = gtk_tree_view_get_selection (treeview); if (gtk_tree_selection_get_selected (selection, &model, &cursor)) { /* select the collapsed node IFF it is a parent of the currently selected folder */ if (gtk_tree_store_is_ancestor ((GtkTreeStore *) model, root, &cursor)) gtk_tree_view_set_cursor (treeview, tree_path, NULL, FALSE); } - + emft_update_model_expanded_state (emft->priv, root, FALSE); emft_queue_save_state (emft); - + return FALSE; } @@ -1950,18 +1950,18 @@ emft_tree_row_activated (GtkTreeView *treeview, GtkTreePath *tree_path, GtkTreeV char *full_name, *uri; GtkTreeIter iter; guint32 flags; - + if (!emft_select_func(NULL, model, tree_path, FALSE, emft)) return; - + if (!gtk_tree_model_get_iter (model, &iter, tree_path)) return; - + gtk_tree_model_get (model, &iter, COL_STRING_FULL_NAME, &full_name, COL_STRING_URI, &uri, COL_UINT_FLAGS, &flags, -1); emft_clear_selected_list(emft); - + g_signal_emit (emft, signals[FOLDER_SELECTED], 0, full_name, uri, flags); g_signal_emit (emft, signals[FOLDER_ACTIVATED], 0, full_name, uri); @@ -2020,7 +2020,7 @@ static void selfunc (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { struct _emft_selection_data *dat = (struct _emft_selection_data *) data; - + dat->model = model; if (!dat->set) *(dat->iter) = *iter; @@ -2031,7 +2031,7 @@ static gboolean emft_selection_get_selected (GtkTreeSelection *selection, GtkTreeModel **model, GtkTreeIter *iter) { struct _emft_selection_data dat = { NULL, iter, FALSE }; - + if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_MULTIPLE) { gtk_tree_selection_selected_foreach (selection, selfunc, &dat); if (model) @@ -2046,7 +2046,7 @@ static void emft_popup_delete_folder (EPopup *ep, EPopupItem *pitem, void *data) { EMFolderTree *emft = data; - CamelFolder *folder; + CamelFolder *folder; if ((folder = em_folder_tree_get_selected_folder (emft)) != NULL) { em_folder_utils_delete_folder(folder); @@ -2095,11 +2095,11 @@ emft_popup_properties (EPopup *ep, EPopupItem *pitem, void *data) GtkTreeModel *model; GtkTreeIter iter; char *uri; - + selection = gtk_tree_view_get_selection (priv->treeview); if (!emft_selection_get_selected (selection, &model, &iter)) return; - + gtk_tree_model_get (model, &iter, COL_STRING_URI, &uri, -1); em_folder_properties_show (NULL, NULL, uri); g_free (uri); @@ -2114,7 +2114,7 @@ static EPopupItem emft_popup_items[] = { #endif { E_POPUP_ITEM, "10.emc.00", N_("_Copy..."), emft_popup_copy, NULL, "stock_folder-copy", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT }, { E_POPUP_ITEM, "10.emc.01", N_("_Move..."), emft_popup_move, NULL, "stock_folder-move", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_DELETE }, - + { E_POPUP_BAR, "20.emc" }, /* FIXME: need to disable for nochildren folders */ { E_POPUP_ITEM, "20.emc.00", N_("_New Folder..."), emft_popup_new_folder, NULL, "folder-new", 0, EM_POPUP_FOLDER_INFERIORS }, @@ -2124,7 +2124,7 @@ static EPopupItem emft_popup_items[] = { { E_POPUP_ITEM, "20.emc.03", N_("Re_fresh"), emft_popup_refresh_folder, NULL, "view-refresh", EM_POPUP_FOLDER_NONSTATIC, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT}, { E_POPUP_ITEM, "20.emc.04", N_("Fl_ush Outbox"), emft_popup_flush_outbox, NULL, "mail-send", EM_POPUP_FOLDER_OUTBOX, 0 }, - + { E_POPUP_BAR, "80.emc" }, { E_POPUP_ITEM, "80.emc.00", N_("_Properties"), emft_popup_properties, NULL, "document-properties", 0, EM_POPUP_FOLDER_FOLDER|EM_POPUP_FOLDER_SELECT } }; @@ -2165,7 +2165,7 @@ emft_popup (EMFolderTree *emft, GdkEvent *event) selection = gtk_tree_view_get_selection (treeview); if (!emft_selection_get_selected (selection, &model, &iter)) return FALSE; - + gtk_tree_model_get (model, &iter, COL_POINTER_CAMEL_STORE, &store, COL_STRING_URI, &uri, COL_STRING_FULL_NAME, &full_name, COL_BOOL_IS_STORE, &isstore, COL_UINT_FLAGS, &folder_type_flags, -1); @@ -2176,7 +2176,7 @@ emft_popup (EMFolderTree *emft, GdkEvent *event) g_free (uri); return FALSE; } - + /* TODO: em_popup_target_folder_new? */ if (isstore) { flags |= EM_POPUP_FOLDER_STORE; @@ -2184,11 +2184,11 @@ emft_popup (EMFolderTree *emft, GdkEvent *event) flags |= EM_POPUP_FOLDER_FOLDER; local = mail_component_peek_local_store (NULL); - + /* don't allow deletion of special local folders */ if (!(store == local && is_special_local_folder (full_name))) flags |= EM_POPUP_FOLDER_DELETE; - + /* hack for vTrash/vJunk */ if (!strcmp (full_name, CAMEL_VTRASH_NAME) || !strcmp (full_name, CAMEL_VJUNK_NAME)) info_flags |= CAMEL_FOLDER_VIRTUAL | CAMEL_FOLDER_NOINFERIORS; @@ -2206,34 +2206,34 @@ emft_popup (EMFolderTree *emft, GdkEvent *event) * This is the context menu shown on the folder tree. */ emp = em_popup_new ("org.gnome.evolution.mail.foldertree.popup"); - + /* FIXME: pass valid fi->flags here */ target = em_popup_target_new_folder (emp, uri, info_flags, flags); - + for (i = 0; i < sizeof (emft_popup_items) / sizeof (emft_popup_items[0]); i++) menus = g_slist_prepend (menus, &emft_popup_items[i]); - + if ((folder_type_flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_TRASH) menus = g_slist_prepend (menus, &trash_popup_item); e_popup_add_items ((EPopup *)emp, menus, NULL, emft_popup_free, emft); menu = e_popup_create_menu_once ((EPopup *)emp, (EPopupTarget *)target, 0); - + if (event == NULL || event->type == GDK_KEY_PRESS) { /* FIXME: menu pos function */ gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time()); } else { gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button.button, event->button.time); } - + g_free (full_name); g_free (uri); return TRUE; } -static gboolean +static gboolean emft_popup_menu (GtkWidget *widget) { return emft_popup (EM_FOLDER_TREE (widget), NULL); @@ -2247,26 +2247,26 @@ emft_tree_button_press (GtkTreeView *treeview, GdkEventButton *event, EMFolderTr /* this centralises working out when the user's done something */ emft_tree_user_event(treeview, (GdkEvent *)event, emft); - + if (event->button != 3 && !(event->button == 1 && event->type == GDK_2BUTTON_PRESS)) return FALSE; - + if (!gtk_tree_view_get_path_at_pos (treeview, (int) event->x, (int) event->y, &tree_path, NULL, NULL, NULL)) return FALSE; - + /* select/focus the row that was right-clicked or double-clicked */ selection = gtk_tree_view_get_selection (treeview); gtk_tree_selection_select_path(selection, tree_path); gtk_tree_view_set_cursor (treeview, tree_path, NULL, FALSE); - + if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { emft_tree_row_activated (treeview, tree_path, NULL, emft); gtk_tree_path_free (tree_path); return TRUE; } - + gtk_tree_path_free (tree_path); - + return emft_popup (emft, (GdkEvent *)event); } @@ -2294,10 +2294,10 @@ emft_tree_selection_changed (GtkTreeSelection *selection, EMFolderTree *emft) GtkTreeModel *model; GtkTreeIter iter; guint32 flags; - + if (!emft_selection_get_selected (selection, &model, &iter)) { em_folder_tree_model_set_selected (emft->priv->model, NULL); - g_signal_emit (emft, signals[FOLDER_SELECTED], 0, NULL, NULL, 0); + g_signal_emit (emft, signals[FOLDER_SELECTED], 0, NULL, NULL, 0); emft_queue_save_state (emft); return; } @@ -2340,7 +2340,7 @@ em_folder_tree_select_next_path (EMFolderTree *emft, gboolean skip_read_folders) current_path = gtk_tree_model_get_path (model, &iter); - do { + do { if (gtk_tree_model_iter_has_child (model, &iter)) { gtk_tree_model_iter_children (model, &child, &iter); path = gtk_tree_model_get_path (model, &child); @@ -2370,7 +2370,7 @@ em_folder_tree_select_next_path (EMFolderTree *emft, gboolean skip_read_folders) } if (path) { - if (!gtk_tree_view_row_expanded (emft->priv->treeview, path)) + if (!gtk_tree_view_row_expanded (emft->priv->treeview, path)) gtk_tree_view_expand_to_path (emft->priv->treeview, path); gtk_tree_selection_select_path(selection, path); @@ -2380,14 +2380,14 @@ em_folder_tree_select_next_path (EMFolderTree *emft, gboolean skip_read_folders) priv->cursor_set = TRUE; } gtk_tree_view_scroll_to_cell (priv->treeview, path, NULL, TRUE, 0.5f, 0.0f); - } + } return; } -static GtkTreeIter +static GtkTreeIter get_last_child (GtkTreeModel *model, GtkTreeIter *iter) { - GtkTreeIter *child = g_new0 (GtkTreeIter, 1); + GtkTreeIter *child = g_new0 (GtkTreeIter, 1); gboolean has_child = gtk_tree_model_iter_has_child (model, iter); if (gtk_tree_model_iter_next (model, iter)) { @@ -2428,7 +2428,7 @@ em_folder_tree_select_prev_path (EMFolderTree *emft, gboolean skip_read_folders) { gtk_tree_model_get_iter_first (model, &iter); iter = get_last_child (model,&iter); - path = gtk_tree_model_get_path (model, &iter); + path = gtk_tree_model_get_path (model, &iter); } } else { gtk_tree_model_get_iter (model, &iter, path); @@ -2459,7 +2459,7 @@ em_folder_tree_select_prev_path (EMFolderTree *emft, gboolean skip_read_folders) priv->cursor_set = TRUE; } gtk_tree_view_scroll_to_cell (priv->treeview, path, NULL, TRUE, 0.5f, 0.0f); - } + } return; } @@ -2477,7 +2477,7 @@ em_folder_tree_get_selected_uri (EMFolderTree *emft) selection = gtk_tree_view_get_selection(emft->priv->treeview); if (gtk_tree_selection_get_selected(selection, &model, &iter)) gtk_tree_model_get(model, &iter, COL_STRING_URI, &uri, -1); - + return uri; } @@ -2494,7 +2494,7 @@ em_folder_tree_get_selected_path (EMFolderTree *emft) selection = gtk_tree_view_get_selection(emft->priv->treeview); if (gtk_tree_selection_get_selected(selection, &model, &iter)) gtk_tree_model_get(model, &iter, COL_STRING_FULL_NAME, &name, -1); - + return name; } @@ -2543,8 +2543,8 @@ em_folder_tree_get_selected_folder_info (EMFolderTree *emft) selection = gtk_tree_view_get_selection(emft->priv->treeview); if (gtk_tree_selection_get_selected(selection, &model, &iter)) gtk_tree_model_get (model, &iter, COL_POINTER_CAMEL_STORE, &store, - COL_STRING_FULL_NAME, &full_name, - COL_STRING_DISPLAY_NAME, &name, + COL_STRING_FULL_NAME, &full_name, + COL_STRING_DISPLAY_NAME, &name, COL_STRING_URI, &uri, -1); fi = g_new0(CamelFolderInfo, 1); @@ -2573,7 +2573,7 @@ EMFolderTreeModel * em_folder_tree_get_model (EMFolderTree *emft) { g_return_val_if_fail (EM_IS_FOLDER_TREE (emft), NULL); - + return emft->priv->model; } @@ -2593,10 +2593,10 @@ static gboolean emft_save_state (EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; - + em_folder_tree_model_save_state (priv->model); priv->save_state_id = 0; - + return FALSE; } @@ -2605,9 +2605,9 @@ static void emft_queue_save_state (EMFolderTree *emft) { struct _EMFolderTreePrivate *priv = emft->priv; - + if (priv->save_state_id != 0) return; - + priv->save_state_id = g_timeout_add (1000, (GSourceFunc) emft_save_state, emft); } |