aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-composer-utils.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2009-02-13 12:32:51 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2009-02-13 12:32:51 +0800
commit7986af5369482c4feeaad6880045bf92a4d3f744 (patch)
tree6145dc9d0ca08c545f92f99e9fb973385b6506ec /mail/em-composer-utils.c
parent10c3ddb38138f3408044fd46115d5804f057c13a (diff)
downloadgsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar
gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.gz
gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.bz2
gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.lz
gsoc2013-evolution-7986af5369482c4feeaad6880045bf92a4d3f744.tar.xz
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 'mail/em-composer-utils.c')
-rw-r--r--mail/em-composer-utils.c74
1 files changed, 69 insertions, 5 deletions
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 065cd325df..381e7fbfc5 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -45,6 +45,9 @@
#include "em-composer-utils.h"
#include "composer/e-msg-composer.h"
#include "composer/e-composer-autosave.h"
+#include "composer/e-composer-post-header.h"
+#include "em-folder-selector.h"
+#include "em-folder-tree.h"
#include "em-format-html.h"
#include "em-format-html-print.h"
#include "em-format-quote.h"
@@ -2525,6 +2528,56 @@ em_utils_post_reply_to_message_by_uid (CamelFolder *folder, const char *uid)
mail_get_message (folder, uid, post_reply_to_message, NULL, mail_msg_unordered_push);
}
+static void
+post_header_clicked_cb (EComposerPostHeader *header,
+ EShellModule *shell_module)
+{
+ EMFolderTreeModel *model;
+ GtkWidget *folder_tree;
+ GtkWidget *dialog;
+ GList *list;
+
+ model = e_mail_shell_module_get_folder_tree_model (shell_module);
+ 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) {
+ /* Prevent the header's "custom" flag from being reset,
+ * which is what the default method will do next. */
+ g_signal_stop_emission_by_name (header, "clicked");
+ goto exit;
+ }
+
+ list = em_folder_selector_get_selected_uris (
+ EM_FOLDER_SELECTOR (dialog));
+ e_composer_post_header_set_folders (header, list);
+ g_list_foreach (list, (GFunc) g_free, NULL);
+ g_list_free (list);
+
+exit:
+ gtk_widget_destroy (dialog);
+}
+
/**
* em_configure_new_composer:
* @composer: a newly created #EMsgComposer
@@ -2538,11 +2591,16 @@ void
em_configure_new_composer (EMsgComposer *composer)
{
EComposerHeaderTable *table;
- EMFolderTreeModel *model;
+ EComposerHeaderType header_type;
+ EComposerHeader *header;
struct emcs_t *emcs;
g_return_if_fail (E_IS_MSG_COMPOSER (composer));
+ header_type = E_COMPOSER_HEADER_POST_TO;
+ table = e_msg_composer_get_header_table (composer);
+ header = e_composer_header_table_get_header (table, header_type);
+
emcs = emcs_new ();
g_object_set_data_full (
@@ -2561,8 +2619,14 @@ em_configure_new_composer (EMsgComposer *composer)
composer, "print",
G_CALLBACK (em_utils_composer_print_cb), NULL);
- /* Supply the composer with a folder tree model. */
- table = e_msg_composer_get_header_table (composer);
- model = e_mail_shell_module_get_folder_tree_model (mail_shell_module);
- e_composer_header_table_set_folder_tree_model (table, model);
+ /* Handle "Post To:" button clicks, which displays a folder tree
+ * widget. The composer doesn't know about folder tree widgets,
+ * so it can't handle this itself.
+ *
+ * Note: This is a G_SIGNAL_RUN_LAST signal, which allows us to
+ * stop the signal emission if the user cancels or closes
+ * the folder selector dialog. See the handler function. */
+ g_signal_connect (
+ header, "clicked",
+ G_CALLBACK (post_header_clicked_cb), mail_shell_module);
}