Fixes bug #51605.
2003-12-04 Jeffrey Stedfast <fejj@ximian.com> Fixes bug #51605. * em-folder-selector.c (emfs_response): Handle creating a new folder (pop up a create-folder-selector dialog). * em-folder-tree.c (emft_popup_new_folder_response): Moved all the logic into em_folder_tree_create_folder(). (em_folder_tree_create_folder): New function to create a folder. svn path=/trunk/; revision=23635
This commit is contained in:
committed by
Jeffrey Stedfast
parent
c923f10cb9
commit
ba0792d8ff
@@ -1,3 +1,14 @@
|
||||
2003-12-04 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
Fixes bug #51605.
|
||||
|
||||
* em-folder-selector.c (emfs_response): Handle creating a new
|
||||
folder (pop up a create-folder-selector dialog).
|
||||
|
||||
* em-folder-tree.c (emft_popup_new_folder_response): Moved all the
|
||||
logic into em_folder_tree_create_folder().
|
||||
(em_folder_tree_create_folder): New function to create a folder.
|
||||
|
||||
2003-12-04 Radek Doulik <rodo@ximian.com>
|
||||
|
||||
* em-folder-view.c: set junk toolbar buttons pixmaps
|
||||
|
||||
+27
-13
@@ -57,7 +57,6 @@ static void em_folder_selector_class_init (EMFolderSelectorClass *klass);
|
||||
static void em_folder_selector_init (EMFolderSelector *emfs);
|
||||
static void em_folder_selector_destroy (GtkObject *obj);
|
||||
static void em_folder_selector_finalize (GObject *obj);
|
||||
static void em_folder_selector_response (GtkDialog *dialog, int response);
|
||||
|
||||
|
||||
static GtkDialogClass *parent_class = NULL;
|
||||
@@ -92,14 +91,11 @@ em_folder_selector_class_init (EMFolderSelectorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
|
||||
GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
|
||||
|
||||
parent_class = g_type_class_ref (GTK_TYPE_DIALOG);
|
||||
|
||||
object_class->finalize = em_folder_selector_finalize;
|
||||
gtk_object_class->destroy = em_folder_selector_destroy;
|
||||
|
||||
dialog_class->response = em_folder_selector_response;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -127,15 +123,31 @@ em_folder_selector_finalize (GObject *obj)
|
||||
}
|
||||
|
||||
static void
|
||||
em_folder_selector_response (GtkDialog *dialog, int response)
|
||||
emfs_response (GtkWidget *dialog, int response, EMFolderSelector *emfs)
|
||||
{
|
||||
EMFolderSelector *emfs = (EMFolderSelector *) dialog;
|
||||
EMFolderTreeModel *model;
|
||||
const char *path, *uri;
|
||||
EMFolderTree *emft;
|
||||
|
||||
switch (response) {
|
||||
case EM_FOLDER_SELECTOR_RESPONSE_NEW:
|
||||
/* FIXME: implement me */
|
||||
break;
|
||||
if (response != EM_FOLDER_SELECTOR_RESPONSE_NEW)
|
||||
return;
|
||||
|
||||
model = em_folder_tree_get_model (emfs->emft);
|
||||
emft = (EMFolderTree *) em_folder_tree_new_with_model (model);
|
||||
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);
|
||||
|
||||
if (gtk_dialog_run ((GtkDialog *) dialog) == GTK_RESPONSE_OK) {
|
||||
uri = em_folder_selector_get_selected_uri ((EMFolderSelector *) dialog);
|
||||
path = em_folder_selector_get_selected_path ((EMFolderSelector *) dialog);
|
||||
|
||||
if (em_folder_tree_create_folder (emfs->emft, path, uri))
|
||||
em_folder_tree_set_selected (emfs->emft, uri);
|
||||
}
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
|
||||
g_signal_stop_emission_by_name (emfs, "response");
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -178,8 +190,10 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3
|
||||
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (emfs)->vbox), 6);
|
||||
|
||||
emfs->flags = flags;
|
||||
if (flags & EM_FOLDER_SELECTOR_CAN_CREATE)
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (emfs), GTK_STOCK_NEW, EM_FOLDER_SELECTOR_RESPONSE_NEW, NULL);
|
||||
if (flags & EM_FOLDER_SELECTOR_CAN_CREATE) {
|
||||
gtk_dialog_add_button (GTK_DIALOG (emfs), GTK_STOCK_NEW, EM_FOLDER_SELECTOR_RESPONSE_NEW);
|
||||
g_signal_connect (emfs, "response", G_CALLBACK (emfs_response), emfs);
|
||||
}
|
||||
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (emfs), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
|
||||
@@ -188,7 +202,7 @@ em_folder_selector_construct (EMFolderSelector *emfs, EMFolderTree *emft, guint3
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (emfs), GTK_RESPONSE_OK);
|
||||
|
||||
emfs->emft = emft;
|
||||
gtk_widget_show ((GtkWidget *) emfs->emft);
|
||||
gtk_widget_show ((GtkWidget *) emft);
|
||||
|
||||
g_signal_connect (emfs->emft, "folder-selected", G_CALLBACK (folder_selected_cb), emfs);
|
||||
|
||||
|
||||
@@ -1139,7 +1139,7 @@ em_folder_tree_model_set_expanded (EMFolderTreeModel *model, const char *key, gb
|
||||
static void
|
||||
expanded_save (gpointer key, gpointer value, FILE *fp)
|
||||
{
|
||||
/* FIXME: don't save nodes that don't exist in the tree anymore... */
|
||||
/* FIXME: don't save stale entries */
|
||||
if (!GPOINTER_TO_INT (value))
|
||||
return;
|
||||
|
||||
|
||||
+26
-16
@@ -1000,25 +1000,18 @@ emft_popup_move (GtkWidget *item, EMFolderTree *emft)
|
||||
NULL, emft_popup_copy_folder_selected, cfd);
|
||||
}
|
||||
|
||||
static void
|
||||
emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTree *emft)
|
||||
|
||||
gboolean
|
||||
em_folder_tree_create_folder (EMFolderTree *emft, const char *path, const char *uri)
|
||||
{
|
||||
/* FIXME: ugh, kludge-a-licious: EMFolderSelector uses EMFolderTree so we can poke emfs->emft internals */
|
||||
struct _EMFolderTreePrivate *priv = emfs->emft->priv;
|
||||
struct _EMFolderTreePrivate *priv = emft->priv;
|
||||
struct _EMFolderTreeModelStoreInfo *si;
|
||||
const char *uri, *parent, *path, *full_name;
|
||||
const char *parent, *full_name;
|
||||
char *name, *namebuf = NULL;
|
||||
GtkWidget *dialog;
|
||||
CamelStore *store;
|
||||
CamelException ex;
|
||||
|
||||
if (response != GTK_RESPONSE_OK) {
|
||||
gtk_widget_destroy ((GtkWidget *) emfs);
|
||||
return;
|
||||
}
|
||||
|
||||
uri = em_folder_selector_get_selected_uri (emfs);
|
||||
path = em_folder_selector_get_selected_path (emfs);
|
||||
d(printf ("Creating folder: %s (%s)\n", path, uri));
|
||||
|
||||
camel_exception_init (&ex);
|
||||
@@ -1056,19 +1049,36 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
|
||||
|
||||
g_free (namebuf);
|
||||
|
||||
gtk_widget_destroy ((GtkWidget *) emfs);
|
||||
|
||||
return;
|
||||
return TRUE;
|
||||
|
||||
exception:
|
||||
|
||||
dialog = gtk_message_dialog_new ((GtkWindow *) emfs, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
dialog = gtk_message_dialog_new ((GtkWindow *) 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);
|
||||
g_free (namebuf);
|
||||
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTree *emft)
|
||||
{
|
||||
const char *uri, *path;
|
||||
|
||||
if (response != GTK_RESPONSE_OK) {
|
||||
gtk_widget_destroy ((GtkWidget *) emfs);
|
||||
return;
|
||||
}
|
||||
|
||||
uri = em_folder_selector_get_selected_uri (emfs);
|
||||
path = em_folder_selector_get_selected_path (emfs);
|
||||
|
||||
if (em_folder_tree_create_folder (emfs->emft, path, uri))
|
||||
gtk_widget_destroy ((GtkWidget *) emfs);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -71,6 +71,8 @@ const char *em_folder_tree_get_selected_path (EMFolderTree *emft);
|
||||
|
||||
EMFolderTreeModel *em_folder_tree_get_model (EMFolderTree *emft);
|
||||
|
||||
gboolean em_folder_tree_create_folder (EMFolderTree *emft, const char *path, const char *uri);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
Reference in New Issue
Block a user