Fixed to not include leading '/' in the folder name in the label.

2003-11-17  Jeffrey Stedfast  <fejj@ximian.com>

	* em-folder-selection-button.c (set_contents): Fixed to not
	include leading '/' in the folder name in the label.

	* em-folder-tree.c (emft_popup_new_folder_response): Implemented
	error reporting via gtk dialogs.
	(emft_popup_copy_folder_selected): Same.

svn path=/trunk/; revision=23401
This commit is contained in:
Jeffrey Stedfast
2003-11-17 20:34:56 +00:00
committed by Jeffrey Stedfast
parent d448d8ab21
commit f0e50562be
3 changed files with 90 additions and 28 deletions

View File

@ -1,3 +1,12 @@
2003-11-17 Jeffrey Stedfast <fejj@ximian.com>
* em-folder-selection-button.c (set_contents): Fixed to not
include leading '/' in the folder name in the label.
* em-folder-tree.c (emft_popup_new_folder_response): Implemented
error reporting via gtk dialogs.
(emft_popup_copy_folder_selected): Same.
2003-11-17 Jeffrey Stedfast <fejj@ximian.com>
* em-folder-tree.c (emft_popup_new_folder_response): Use a

View File

@ -120,7 +120,7 @@ static void
set_contents (EMFolderSelectionButton *button)
{
struct _EMFolderSelectionButtonPrivate *priv = button->priv;
const char *path;
const char *folder_name;
CamelURL *url;
if (priv->uri == NULL
@ -129,15 +129,15 @@ set_contents (EMFolderSelectionButton *button)
return;
}
path = url->fragment ? url->fragment : url->path;
folder_name = url->fragment ? url->fragment : url->path + 1;
if (path == NULL) {
if (folder_name == NULL) {
camel_url_free (url);
set_contents_unselected (button);
return;
}
gtk_label_set_text (GTK_LABEL (priv->label), path);
gtk_label_set_text (GTK_LABEL (priv->label), folder_name);
camel_url_free (url);
}

View File

@ -1130,6 +1130,7 @@ emft_popup_copy_folder_selected (const char *uri, void *data)
CamelStore *fromstore, *tostore;
char *tobase, *frombase;
CamelException ex;
GtkWidget *dialog;
CamelURL *url;
if (uri == NULL) {
@ -1142,19 +1143,14 @@ emft_popup_copy_folder_selected (const char *uri, void *data)
d(printf ("copying folder '%s' to '%s'\n", priv->selected_path, uri));
camel_exception_init (&ex);
if (!(fromstore = camel_session_get_store (session, priv->selected_uri, &ex))) {
/* FIXME: error dialog? */
camel_exception_clear (&ex);
return;
}
if (!(fromstore = camel_session_get_store (session, priv->selected_uri, &ex)))
goto exception;
frombase = priv->selected_path + 1;
if (!(tostore = camel_session_get_store (session, uri, &ex))) {
/* FIXME: error dialog? */
camel_object_unref (fromstore);
camel_exception_clear (&ex);
return;
goto exception;
}
url = camel_url_new (uri, NULL);
@ -1169,6 +1165,17 @@ emft_popup_copy_folder_selected (const char *uri, void *data)
camel_url_free (url);
g_free (cfd);
return;
exception:
dialog = gtk_message_dialog_new ((GtkWindow *) cfd->emft, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("%s"), ex.desc);
g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
camel_exception_clear (&ex);
gtk_widget_show (dialog);
g_free (cfd);
}
static void
@ -1204,6 +1211,7 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
struct _EMFolderTreePrivate *priv = emfs->emft->priv;
struct _EMFolderTreeModelStoreInfo *si;
const char *uri, *parent;
GtkWidget *dialog;
CamelStore *store;
CamelException ex;
char *path, *name;
@ -1218,16 +1226,13 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
d(printf ("Creating folder: %s (%s)\n", path, uri));
camel_exception_init (&ex);
if (!(store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, &ex))) {
/* FIXME: error dialog? */
gtk_widget_destroy ((GtkWidget *) emfs);
return;
}
if (!(store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, &ex)))
goto exception;
if (!(si = g_hash_table_lookup (priv->model->store_hash, store))) {
gtk_widget_destroy ((GtkWidget *) emfs);
camel_object_unref (store);
return;
g_assert_not_reached ();
goto exception;
}
camel_object_unref (store);
@ -1246,21 +1251,28 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
camel_store_create_folder (si->store, parent, name, &ex);
if (camel_exception_is_set (&ex)) {
d(printf ("Create failed: %s\n", ex.desc));
/* FIXME: error dialog? */
goto exception;
} else if (camel_store_supports_subscriptions (si->store)) {
camel_store_subscribe_folder (si->store, path, &ex);
if (camel_exception_is_set (&ex)) {
d(printf ("Subscribe failed: %s\n", ex.desc));
/* FIXME: error dialog? */
}
if (camel_exception_is_set (&ex))
goto exception;
}
camel_exception_clear (&ex);
g_free (path);
gtk_widget_destroy ((GtkWidget *) emfs);
return;
exception:
dialog = gtk_message_dialog_new ((GtkWindow *) emfs, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("%s"), ex.desc);
g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
camel_exception_clear (&ex);
g_free (path);
gtk_widget_show (dialog);
}
static void
@ -2051,9 +2063,50 @@ em_folder_tree_remove_store (EMFolderTree *emft, CamelStore *store)
void
em_folder_tree_set_selected (EMFolderTree *emft, const char *uri)
{
struct _EMFolderTreeModelStoreInfo *si;
struct _EMFolderTreePrivate *priv;
GtkTreeSelection *selection;
GtkTreeRowReference *row;
GtkTreePath *tree_path;
CamelStore *store;
CamelException ex;
CamelURL *url;
char *path;
g_return_if_fail (EM_IS_FOLDER_TREE (emft));
/* FIXME: implement me */
priv = emft->priv;
camel_exception_init (&ex);
if (!(store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, &ex))) {
camel_exception_clear (&ex);
return;
}
if (!(si = g_hash_table_lookup (priv->model->store_hash, store))) {
camel_object_unref (store);
return;
}
camel_object_unref (store);
if (!(url = camel_url_new (uri, NULL)))
return;
path = url->fragment ? url->fragment : url->path;
row = g_hash_table_lookup (si->path_hash, path);
camel_url_free (url);
if (row != NULL) {
/* this is easy... */
selection = gtk_tree_view_get_selection (priv->treeview);
tree_path = gtk_tree_row_reference_get_path (row);
gtk_tree_selection_select_path (selection, tree_path);
gtk_tree_path_free (tree_path);
return;
}
/* FIXME: need to fill out parent paths and stuff so we can select the requested path */
}