diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2009-02-13 12:32:51 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2009-02-13 12:32:51 +0800 |
commit | 7986af5369482c4feeaad6880045bf92a4d3f744 (patch) | |
tree | 6145dc9d0ca08c545f92f99e9fb973385b6506ec /composer/e-composer-post-header.c | |
parent | 10c3ddb38138f3408044fd46115d5804f057c13a (diff) | |
download | gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.gz gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.zst gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.zip |
Let the mail module handle composer "Post To:" button clicks, since
EMFolderSelector and EMFolderTree are off-limits to the composer.
This further weakens the composer's mail module dependency.
Add class methods to EComposerHeader for "changed" and "clicked" signals.
Allows subclasses to implement them without connecting to their own signals.
svn path=/branches/kill-bonobo/; revision=37260
Diffstat (limited to 'composer/e-composer-post-header.c')
-rw-r--r-- | composer/e-composer-post-header.c | 148 |
1 files changed, 27 insertions, 121 deletions
diff --git a/composer/e-composer-post-header.c b/composer/e-composer-post-header.c index 5a5ca2e610..88d20d5f58 100644 --- a/composer/e-composer-post-header.c +++ b/composer/e-composer-post-header.c @@ -22,9 +22,7 @@ #include <string.h> #include <glib/gi18n.h> - -#include "mail/em-folder-selector.h" -#include "mail/em-folder-tree.h" +#include <camel/camel-url.h> #define E_COMPOSER_POST_HEADER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE \ @@ -32,12 +30,10 @@ enum { PROP_0, - PROP_ACCOUNT, - PROP_FOLDER_TREE_MODEL + PROP_ACCOUNT }; struct _EComposerPostHeaderPrivate { - EMFolderTreeModel *model; EAccount *account; gchar *base_url; /* derived from account */ gboolean custom; @@ -104,58 +100,6 @@ composer_post_header_split_csv (const gchar *csv) return g_list_reverse (list); } -static void -composer_post_header_changed_cb (EComposerPostHeader *header) -{ - header->priv->custom = TRUE; -} - -static void -composer_post_header_clicked_cb (EComposerPostHeader *header) -{ - EMFolderTreeModel *model; - GtkWidget *folder_tree; - GtkWidget *dialog; - GList *list; - - g_return_if_fail (header->priv->model != NULL); - - model = header->priv->model; - folder_tree = em_folder_tree_new_with_model (model); - - em_folder_tree_set_multiselect ( - EM_FOLDER_TREE (folder_tree), TRUE); - em_folder_tree_set_excluded ( - EM_FOLDER_TREE (folder_tree), - EMFT_EXCLUDE_NOSELECT | - EMFT_EXCLUDE_VIRTUAL | - EMFT_EXCLUDE_VTRASH); - - dialog = em_folder_selector_new ( - EM_FOLDER_TREE (folder_tree), - EM_FOLDER_SELECTOR_CAN_CREATE, - _("Posting destination"), - _("Choose folders to post the message to."), - NULL); - - list = e_composer_post_header_get_folders (header); - em_folder_selector_set_selected_list ( - EM_FOLDER_SELECTOR (dialog), list); - g_list_foreach (list, (GFunc) g_free, NULL); - g_list_free (list); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { - list = em_folder_selector_get_selected_uris ( - EM_FOLDER_SELECTOR (dialog)); - e_composer_post_header_set_folders (header, list); - header->priv->custom = FALSE; - g_list_foreach (list, (GFunc) g_free, NULL); - g_list_free (list); - } - - gtk_widget_destroy (dialog); -} - static GObject * composer_post_header_constructor (GType type, guint n_construct_properties, @@ -171,14 +115,6 @@ composer_post_header_constructor (GType type, E_COMPOSER_HEADER (object), _("Click here to select folders to post to")); - g_signal_connect ( - object, "changed", - G_CALLBACK (composer_post_header_changed_cb), NULL); - - g_signal_connect ( - object, "clicked", - G_CALLBACK (composer_post_header_clicked_cb), NULL); - return object; } @@ -194,12 +130,6 @@ composer_post_header_set_property (GObject *object, E_COMPOSER_POST_HEADER (object), g_value_get_object (value)); return; - - case PROP_FOLDER_TREE_MODEL: - e_composer_post_header_set_folder_tree_model ( - E_COMPOSER_POST_HEADER (object), - g_value_get_object (value)); - return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -217,13 +147,6 @@ composer_post_header_get_property (GObject *object, value, e_composer_post_header_get_account ( E_COMPOSER_POST_HEADER (object))); return; - - case PROP_FOLDER_TREE_MODEL: - g_value_set_object ( - value, - e_composer_post_header_get_folder_tree_model ( - E_COMPOSER_POST_HEADER (object))); - return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -241,11 +164,6 @@ composer_post_header_dispose (GObject *object) priv->account = NULL; } - if (priv->model != NULL) { - g_object_unref (priv->model); - priv->model = NULL; - } - /* Chain up to parent's dispose() method. */ G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -264,9 +182,30 @@ composer_post_header_finalize (GObject *object) } static void +composer_post_header_changed (EComposerHeader *header) +{ + EComposerPostHeaderPrivate *priv; + + priv = E_COMPOSER_POST_HEADER_GET_PRIVATE (header); + + priv->custom = TRUE; +} + +static void +composer_post_header_clicked (EComposerHeader *header) +{ + EComposerPostHeaderPrivate *priv; + + priv = E_COMPOSER_POST_HEADER_GET_PRIVATE (header); + + priv->custom = FALSE; +} + +static void composer_post_header_class_init (EComposerPostHeaderClass *class) { GObjectClass *object_class; + EComposerHeaderClass *header_class; parent_class = g_type_class_peek_parent (class); g_type_class_add_private (class, sizeof (EComposerPostHeaderPrivate)); @@ -278,6 +217,10 @@ composer_post_header_class_init (EComposerPostHeaderClass *class) object_class->dispose = composer_post_header_dispose; object_class->finalize = composer_post_header_finalize; + header_class = E_COMPOSER_HEADER_CLASS (class); + header_class->changed = composer_post_header_changed; + header_class->clicked = composer_post_header_clicked; + g_object_class_install_property ( object_class, PROP_ACCOUNT, @@ -287,16 +230,6 @@ composer_post_header_class_init (EComposerPostHeaderClass *class) NULL, E_TYPE_ACCOUNT, G_PARAM_READWRITE)); - - g_object_class_install_property ( - object_class, - PROP_FOLDER_TREE_MODEL, - g_param_spec_object ( - "folder-tree-model", - NULL, - NULL, - EM_TYPE_FOLDER_TREE_MODEL, - G_PARAM_READWRITE)); } static void @@ -380,33 +313,6 @@ e_composer_post_header_set_account (EComposerPostHeader *header, g_object_notify (G_OBJECT (header), "account"); } -EMFolderTreeModel * -e_composer_post_header_get_folder_tree_model (EComposerPostHeader *header) -{ - g_return_val_if_fail (E_IS_COMPOSER_POST_HEADER (header), NULL); - - return header->priv->model; -} - -void -e_composer_post_header_set_folder_tree_model (EComposerPostHeader *header, - EMFolderTreeModel *model) -{ - g_return_if_fail (E_IS_COMPOSER_POST_HEADER (header)); - - if (model != NULL) { - g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model)); - g_object_ref (model); - } - - if (header->priv->model != NULL) - g_object_unref (header->priv->model); - - header->priv->model = model; - - g_object_notify (G_OBJECT (header), "folder-tree-model"); -} - GList * e_composer_post_header_get_folders (EComposerPostHeader *header) { |