diff options
Diffstat (limited to 'mail')
-rw-r--r-- | mail/ChangeLog | 24 | ||||
-rw-r--r-- | mail/em-folder-selector.c | 35 | ||||
-rw-r--r-- | mail/em-folder-tree.c | 75 | ||||
-rw-r--r-- | mail/em-folder-tree.h | 4 |
4 files changed, 90 insertions, 48 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index d73bcf8895..c17a8b3fa5 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,27 @@ +2004-08-30 Not Zed <NotZed@Ximian.com> + + ** See bug #64377. + + * em-folder-selector.c (emfs_response): only set the uri if we + have one to set. + + * em-folder-tree.c (em_folder_tree_finalize): Removed + cose using selected_path and selected_uri strings. + (emft_popup_new_folder): " + (emft_popup_copy_folder_selected): " + (emft_tree_selection_changed): + (emft_tree_row_activated): ", free paths after use. + + * em-folder-selector.c (emfs_create_name_changed): free + get_selected_uri return. + (emfs_create_name_activate): " + (em_folder_selector_get_selected_path): handle api change, store + the selected_path too. + + * em-folder-tree.c (em_folder_tree_get_selected_uri): + de-constify,and get the selection directly from the tree. + (em_folder_tree_get_selected_path): same. + 2004-08-27 Not Zed <NotZed@Ximian.com> ** See bug #63456. diff --git a/mail/em-folder-selector.c b/mail/em-folder-selector.c index d5aecd9667..7df4d50e9f 100644 --- a/mail/em-folder-selector.c +++ b/mail/em-folder-selector.c @@ -166,7 +166,8 @@ emfs_response (GtkWidget *dialog, int response, EMFolderSelector *emfs) dialog = em_folder_selector_create_new (emft, 0, _("Create New Folder"), _("Specify where to create the folder:")); gtk_window_set_transient_for ((GtkWindow *) dialog, (GtkWindow *) emfs); uri = em_folder_selector_get_selected_uri (emfs); - em_folder_tree_set_selected (emft, uri); + if (uri) + em_folder_tree_set_selected (emft, uri); if (gtk_dialog_run ((GtkDialog *) dialog) == GTK_RESPONSE_OK) { uri = em_folder_selector_get_selected_uri ((EMFolderSelector *) dialog); @@ -189,16 +190,17 @@ emfs_response (GtkWidget *dialog, int response, EMFolderSelector *emfs) static void emfs_create_name_changed (GtkEntry *entry, EMFolderSelector *emfs) { - const char *path, *text = NULL; + char *path; + const char *text = NULL; gboolean active; if (emfs->name_entry->text_length > 0) text = gtk_entry_get_text (emfs->name_entry); path = em_folder_tree_get_selected_uri(emfs->emft); - active = text && path && !strchr (text, '/'); - + g_free(path); + gtk_dialog_set_response_sensitive ((GtkDialog *) emfs, GTK_RESPONSE_OK, active); } @@ -276,13 +278,15 @@ static void emfs_create_name_activate (GtkEntry *entry, EMFolderSelector *emfs) { if (emfs->name_entry->text_length > 0) { - const char *path, *text; + char *path; + const char *text; text = gtk_entry_get_text (emfs->name_entry); path = em_folder_tree_get_selected_uri(emfs->emft); if (text && path && !strchr (text, '/')) g_signal_emit_by_name (emfs, "response", GTK_RESPONSE_OK); + g_free(path); } } @@ -333,7 +337,8 @@ em_folder_selector_set_selected_list (EMFolderSelector *emfs, GList *list) const char * em_folder_selector_get_selected_uri (EMFolderSelector *emfs) { - const char *uri, *name; + char *uri; + const char *name; if (!(uri = em_folder_tree_get_selected_uri (emfs->emft))) { d(printf ("no selected folder?\n")); @@ -397,32 +402,36 @@ em_folder_selector_get_selected_paths (EMFolderSelector *emfs) const char * em_folder_selector_get_selected_path (EMFolderSelector *emfs) { - const char *path; + char *uri, *path; if (emfs->selected_path) { /* already did the work in a previous call */ return emfs->selected_path; } - if (!em_folder_tree_get_selected_uri(emfs->emft)) { + if ((uri = em_folder_tree_get_selected_uri(emfs->emft)) == NULL) { d(printf ("no selected folder?\n")); return NULL; } + g_free(uri); path = em_folder_tree_get_selected_path(emfs->emft); - path = path?path:""; if (emfs->name_entry) { const char *name; char *newpath; name = gtk_entry_get_text (emfs->name_entry); if (strcmp (path, "") != 0) - newpath = g_strdup_printf ("%s/%s", path, name); + newpath = g_strdup_printf ("%s/%s", path?path:"", name); else newpath = g_strdup (name); - path = emfs->selected_path = newpath; + g_free(path); + emfs->selected_path = newpath; + } else { + g_free(emfs->selected_path); + emfs->selected_path = path?path:g_strdup(""); } - - return path; + + return emfs->selected_path; } diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index bd5ea3a369..ae14a2b40c 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -86,9 +86,6 @@ struct _EMFolderTreePrivate { 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 */ - char *selected_uri; - char *selected_path; - guint32 excluded; int do_multiselect:1; /* multiple select mode */ @@ -378,8 +375,6 @@ em_folder_tree_init (EMFolderTree *emft) priv = g_new0 (struct _EMFolderTreePrivate, 1); priv->select_uris_table = g_hash_table_new(g_str_hash, g_str_equal); - priv->selected_uri = NULL; - priv->selected_path = NULL; priv->treeview = NULL; priv->model = NULL; priv->drag_row = NULL; @@ -399,8 +394,6 @@ em_folder_tree_finalize (GObject *obj) emft->priv->select_uris = NULL; } - g_free (emft->priv->selected_uri); - g_free (emft->priv->selected_path); g_free (emft->priv); G_OBJECT_CLASS (parent_class)->finalize (obj); @@ -1933,14 +1926,11 @@ emft_tree_row_activated (GtkTreeView *treeview, GtkTreePath *tree_path, GtkTreeV emft_clear_selected_list(emft); - g_free (priv->selected_uri); - priv->selected_uri = uri; - - g_free (priv->selected_path); - priv->selected_path = full_name; - g_signal_emit (emft, signals[FOLDER_SELECTED], 0, full_name, uri, flags); g_signal_emit (emft, signals[FOLDER_ACTIVATED], 0, full_name, uri); + + g_free(full_name); + g_free(uri); } #if 0 @@ -2141,7 +2131,7 @@ emft_popup_copy_folder_selected (const char *uri, void *data) struct _copy_folder_data *cfd = data; struct _EMFolderTreePrivate *priv; CamelStore *fromstore = NULL, *tostore = NULL; - char *tobase = NULL, *frombase; + char *tobase = NULL, *frombase = NULL, *fromuri = NULL; CamelException ex; CamelURL *url; @@ -2155,9 +2145,13 @@ emft_popup_copy_folder_selected (const char *uri, void *data) d(printf ("%sing folder '%s' to '%s'\n", cfd->delete ? "move" : "copy", priv->selected_path, uri)); camel_exception_init (&ex); - frombase = priv->selected_path; - - if (!(fromstore = camel_session_get_store (session, priv->selected_uri, &ex))) { + + fromuri = em_folder_tree_get_selected_uri(cfd->emft); + g_return_if_fail(fromuri != NULL); + frombase = em_folder_tree_get_selected_path(cfd->emft); + g_return_if_fail(frombase != NULL); + + if (!(fromstore = camel_session_get_store (session, fromuri, &ex))) { e_error_run((GtkWindow *)gtk_widget_get_toplevel((GtkWidget *) cfd->emft), cfd->delete?"mail:no-move-folder-notexist":"mail:no-copy-folder-notexist", frombase, uri, ex.desc, NULL); goto fail; @@ -2191,6 +2185,8 @@ fail: camel_object_unref(fromstore); if (tostore) camel_object_unref(tostore); + g_free(frombase); + g_free(fromuri); camel_exception_clear (&ex); g_free (cfd); } @@ -2427,11 +2423,14 @@ emft_popup_new_folder (GtkWidget *item, EMFolderTree *emft) { EMFolderTree *folder_tree; GtkWidget *dialog; - + char *uri; + folder_tree = (EMFolderTree *) em_folder_tree_new_with_model (emft->priv->model); dialog = em_folder_selector_create_new (folder_tree, 0, _("Create folder"), _("Specify where to create the folder:")); - em_folder_selector_set_selected ((EMFolderSelector *) dialog, emft->priv->selected_uri); + uri = em_folder_tree_get_selected_uri(emft); + em_folder_selector_set_selected ((EMFolderSelector *) dialog, uri); + g_free(uri); g_signal_connect (dialog, "response", G_CALLBACK (emft_popup_new_folder_response), emft); gtk_widget_show (dialog); } @@ -2840,7 +2839,6 @@ emft_tree_user_event (GtkTreeView *treeview, GdkEvent *e, EMFolderTree *emft) static void emft_tree_selection_changed (GtkTreeSelection *selection, EMFolderTree *emft) { - struct _EMFolderTreePrivate *priv = emft->priv; char *full_name, *uri; GtkTreeModel *model; GtkTreeIter iter; @@ -2852,16 +2850,11 @@ emft_tree_selection_changed (GtkTreeSelection *selection, EMFolderTree *emft) gtk_tree_model_get (model, &iter, COL_STRING_FULL_NAME, &full_name, COL_STRING_URI, &uri, COL_UINT_FLAGS, &flags, -1); - g_free (priv->selected_uri); - priv->selected_uri = uri; - - g_free (priv->selected_path); - priv->selected_path = full_name; - g_signal_emit (emft, signals[FOLDER_SELECTED], 0, full_name, uri, flags); + g_free(uri); + g_free(full_name); } - void em_folder_tree_set_selected (EMFolderTree *emft, const char *uri) { @@ -2873,24 +2866,40 @@ em_folder_tree_set_selected (EMFolderTree *emft, const char *uri) g_list_free(l); } -const char * +char * em_folder_tree_get_selected_uri (EMFolderTree *emft) { + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + char *uri = NULL; + g_return_val_if_fail (EM_IS_FOLDER_TREE (emft), NULL); + + 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 emft->priv->selected_uri; + return uri; } - -const char * +char * em_folder_tree_get_selected_path (EMFolderTree *emft) { + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + char *name = NULL; + g_return_val_if_fail (EM_IS_FOLDER_TREE (emft), NULL); + + 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 emft->priv->selected_path; + return name; } - EMFolderTreeModel * em_folder_tree_get_model (EMFolderTree *emft) { diff --git a/mail/em-folder-tree.h b/mail/em-folder-tree.h index 9b97ec0e9b..8ce1ad5873 100644 --- a/mail/em-folder-tree.h +++ b/mail/em-folder-tree.h @@ -80,8 +80,8 @@ GList *em_folder_tree_get_selected_uris (EMFolderTree *emft); GList *em_folder_tree_get_selected_paths (EMFolderTree *emft); void em_folder_tree_set_selected (EMFolderTree *emft, const char *uri); -const char *em_folder_tree_get_selected_uri (EMFolderTree *emft); -const char *em_folder_tree_get_selected_path (EMFolderTree *emft); +char *em_folder_tree_get_selected_uri (EMFolderTree *emft); +char *em_folder_tree_get_selected_path (EMFolderTree *emft); EMFolderTreeModel *em_folder_tree_get_model (EMFolderTree *emft); |