aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2010-06-19 23:39:49 +0800
committerMatthew Barnes <mbarnes@redhat.com>2010-06-19 23:39:49 +0800
commit0439c01a9ab20875796c8ecae855627424742bf4 (patch)
treeae34c7e94f9da39c354f9532c94360b8b4f6746a
parent493cc5200496a857a31636c3b0de4617245ec3cd (diff)
downloadgsoc2013-evolution-0439c01a9ab20875796c8ecae855627424742bf4.tar.gz
gsoc2013-evolution-0439c01a9ab20875796c8ecae855627424742bf4.tar.zst
gsoc2013-evolution-0439c01a9ab20875796c8ecae855627424742bf4.zip
Bug 616724 - Initialize message window with threaded state of main window
-rw-r--r--mail/e-mail-browser.c19
-rw-r--r--mail/e-mail-reader-utils.c3
-rw-r--r--mail/e-mail-reader.c47
-rw-r--r--mail/e-mail-reader.h5
-rw-r--r--modules/mail/e-mail-shell-content.c75
-rw-r--r--modules/mail/e-mail-shell-content.h5
-rw-r--r--modules/mail/e-mail-shell-view-private.c2
7 files changed, 100 insertions, 56 deletions
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index e076585755..062623124d 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -63,6 +63,7 @@ struct _EMailBrowserPrivate {
enum {
PROP_0,
PROP_FOCUS_TRACKER,
+ PROP_GROUP_BY_THREADS,
PROP_SHELL_BACKEND,
PROP_SHOW_DELETED,
PROP_UI_MANAGER
@@ -348,6 +349,12 @@ mail_browser_set_property (GObject *object,
GParamSpec *pspec)
{
switch (property_id) {
+ case PROP_GROUP_BY_THREADS:
+ e_mail_reader_set_group_by_threads (
+ E_MAIL_READER (object),
+ g_value_get_boolean (value));
+ return;
+
case PROP_SHELL_BACKEND:
mail_browser_set_shell_backend (
E_MAIL_BROWSER (object),
@@ -377,6 +384,12 @@ mail_browser_get_property (GObject *object,
E_MAIL_BROWSER (object)));
return;
+ case PROP_GROUP_BY_THREADS:
+ g_value_set_boolean (
+ value, e_mail_reader_get_group_by_threads (
+ E_MAIL_READER (object)));
+ return;
+
case PROP_SHELL_BACKEND:
g_value_set_object (
value, e_mail_reader_get_shell_backend (
@@ -770,6 +783,12 @@ mail_browser_class_init (EMailBrowserClass *class)
E_TYPE_FOCUS_TRACKER,
G_PARAM_READABLE));
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
+ object_class,
+ PROP_GROUP_BY_THREADS,
+ "group-by-threads");
+
g_object_class_install_property (
object_class,
PROP_SHELL_BACKEND,
diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c
index 566d2e7ac2..539f9274b1 100644
--- a/mail/e-mail-reader-utils.c
+++ b/mail/e-mail-reader-utils.c
@@ -264,6 +264,9 @@ e_mail_reader_open_selected (EMailReader *reader)
e_mail_reader_set_folder (
E_MAIL_READER (browser), folder, folder_uri);
e_mail_reader_set_message (E_MAIL_READER (browser), uid);
+ e_mail_reader_set_group_by_threads (
+ E_MAIL_READER (browser),
+ e_mail_reader_get_group_by_threads (reader));
gtk_widget_show (browser);
}
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 502ee0d2d7..abfbf3b0ab 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -76,6 +76,8 @@ struct _EMailReaderPrivate {
* happen when the -user- selects a message. */
guint folder_was_just_selected : 1;
guint restoring_message_selection : 1;
+
+ guint group_by_threads : 1;
};
enum {
@@ -2487,6 +2489,15 @@ mail_reader_class_init (EMailReaderIface *iface)
iface->set_message = mail_reader_set_message;
iface->update_actions = mail_reader_update_actions;
+ g_object_interface_install_property (
+ iface,
+ g_param_spec_boolean (
+ "group-by-threads",
+ "Group by Threads",
+ "Whether to group messages by threads",
+ FALSE,
+ G_PARAM_READWRITE));
+
signals[CHANGED] = g_signal_new (
"changed",
G_OBJECT_CLASS_TYPE (iface),
@@ -3100,6 +3111,42 @@ e_mail_reader_set_message (EMailReader *reader,
iface->set_message (reader, uid);
}
+gboolean
+e_mail_reader_get_group_by_threads (EMailReader *reader)
+{
+ EMailReaderPrivate *priv;
+
+ g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE);
+
+ priv = E_MAIL_READER_GET_PRIVATE (reader);
+
+ return priv->group_by_threads;
+}
+
+void
+e_mail_reader_set_group_by_threads (EMailReader *reader,
+ gboolean group_by_threads)
+{
+ EMailReaderPrivate *priv;
+ GtkWidget *message_list;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ priv = E_MAIL_READER_GET_PRIVATE (reader);
+
+ if (group_by_threads == priv->group_by_threads)
+ return;
+
+ priv->group_by_threads = group_by_threads;
+
+ /* XXX MessageList should define a property for this. */
+ message_list = e_mail_reader_get_message_list (reader);
+ message_list_set_threaded (
+ MESSAGE_LIST (message_list), group_by_threads);
+
+ g_object_notify (G_OBJECT (reader), "group-by-threads");
+}
+
void
e_mail_reader_create_charset_menu (EMailReader *reader,
GtkUIManager *ui_manager,
diff --git a/mail/e-mail-reader.h b/mail/e-mail-reader.h
index b493cff98f..53fcd09a26 100644
--- a/mail/e-mail-reader.h
+++ b/mail/e-mail-reader.h
@@ -130,6 +130,11 @@ void e_mail_reader_set_folder_uri (EMailReader *reader,
const gchar *folder_uri);
void e_mail_reader_set_message (EMailReader *reader,
const gchar *uid);
+gboolean e_mail_reader_get_group_by_threads
+ (EMailReader *reader);
+void e_mail_reader_set_group_by_threads
+ (EMailReader *reader,
+ gboolean group_by_threads);
void e_mail_reader_create_charset_menu
(EMailReader *reader,
GtkUIManager *ui_manager,
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index 340e323da1..75787ced9a 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -69,7 +69,6 @@ struct _EMailShellContentPrivate {
/* Signal handler IDs */
guint message_list_built_id;
- guint group_by_threads : 1;
guint preview_visible : 1;
guint show_deleted : 1;
};
@@ -239,6 +238,18 @@ mail_shell_content_restore_state_cb (EShellWindow *shell_window,
gconf_bridge_bind_property (bridge, key, object, "vposition");
}
+static void
+mail_shell_content_notify_group_by_threads_cb (EMailReader *reader)
+{
+ gboolean group_by_threads;
+
+ group_by_threads = e_mail_reader_get_group_by_threads (reader);
+
+ mail_shell_content_save_boolean (
+ E_MAIL_SHELL_CONTENT (reader),
+ STATE_KEY_GROUP_BY_THREADS, group_by_threads);
+}
+
static GtkOrientation
mail_shell_content_get_orientation (EMailShellContent *mail_shell_content)
{
@@ -264,8 +275,8 @@ mail_shell_content_set_property (GObject *object,
{
switch (property_id) {
case PROP_GROUP_BY_THREADS:
- e_mail_shell_content_set_group_by_threads (
- E_MAIL_SHELL_CONTENT (object),
+ e_mail_reader_set_group_by_threads (
+ E_MAIL_READER (object),
g_value_get_boolean (value));
return;
@@ -301,8 +312,8 @@ mail_shell_content_get_property (GObject *object,
case PROP_GROUP_BY_THREADS:
g_value_set_boolean (
value,
- e_mail_shell_content_get_group_by_threads (
- E_MAIL_SHELL_CONTENT (object)));
+ e_mail_reader_get_group_by_threads (
+ E_MAIL_READER (object)));
return;
case PROP_ORIENTATION:
@@ -628,8 +639,7 @@ mail_shell_content_set_folder (EMailReader *reader,
g_clear_error (&error);
}
- e_mail_shell_content_set_group_by_threads (
- E_MAIL_SHELL_CONTENT (shell_content), value);
+ e_mail_reader_set_group_by_threads (reader, value);
key = STATE_KEY_PREVIEW_VISIBLE;
value = g_key_file_get_boolean (key_file, group_name, key, &error);
@@ -686,15 +696,11 @@ mail_shell_content_class_init (EMailShellContentClass *class)
shell_content_class = E_SHELL_CONTENT_CLASS (class);
shell_content_class->check_state = mail_shell_content_check_state;
- g_object_class_install_property (
+ /* Inherited from EMailReader */
+ g_object_class_override_property (
object_class,
PROP_GROUP_BY_THREADS,
- g_param_spec_boolean (
- "group-by-threads",
- "Group by Threads",
- "Whether to group messages by threads",
- FALSE,
- G_PARAM_READWRITE));
+ "group-by-threads");
g_object_class_install_property (
object_class,
@@ -742,6 +748,11 @@ mail_shell_content_init (EMailShellContent *mail_shell_content)
mail_shell_content->priv->preview_visible = TRUE;
+ g_signal_connect (
+ mail_shell_content, "notify::group-by-threads",
+ G_CALLBACK (mail_shell_content_notify_group_by_threads_cb),
+ NULL);
+
/* Postpone widget construction until we have a shell view. */
}
@@ -803,42 +814,6 @@ e_mail_shell_content_new (EShellView *shell_view)
}
gboolean
-e_mail_shell_content_get_group_by_threads (EMailShellContent *mail_shell_content)
-{
- g_return_val_if_fail (
- E_IS_MAIL_SHELL_CONTENT (mail_shell_content), FALSE);
-
- return mail_shell_content->priv->group_by_threads;
-}
-
-void
-e_mail_shell_content_set_group_by_threads (EMailShellContent *mail_shell_content,
- gboolean group_by_threads)
-{
- EMailReader *reader;
- GtkWidget *message_list;
-
- g_return_if_fail (E_IS_MAIL_SHELL_CONTENT (mail_shell_content));
-
- if (group_by_threads == mail_shell_content->priv->group_by_threads)
- return;
-
- mail_shell_content->priv->group_by_threads = group_by_threads;
-
- mail_shell_content_save_boolean (
- mail_shell_content,
- STATE_KEY_GROUP_BY_THREADS, group_by_threads);
-
- /* XXX MessageList should define a property for this. */
- reader = E_MAIL_READER (mail_shell_content);
- message_list = e_mail_reader_get_message_list (reader);
- message_list_set_threaded (
- MESSAGE_LIST (message_list), group_by_threads);
-
- g_object_notify (G_OBJECT (mail_shell_content), "group-by-threads");
-}
-
-gboolean
e_mail_shell_content_get_preview_visible (EMailShellContent *mail_shell_content)
{
g_return_val_if_fail (
diff --git a/modules/mail/e-mail-shell-content.h b/modules/mail/e-mail-shell-content.h
index 4be7be206f..a5263bc561 100644
--- a/modules/mail/e-mail-shell-content.h
+++ b/modules/mail/e-mail-shell-content.h
@@ -66,11 +66,6 @@ GType e_mail_shell_content_get_type (void);
void e_mail_shell_content_register_type
(GTypeModule *type_module);
GtkWidget * e_mail_shell_content_new(EShellView *shell_view);
-gboolean e_mail_shell_content_get_group_by_threads
- (EMailShellContent *mail_shell_content);
-void e_mail_shell_content_set_group_by_threads
- (EMailShellContent *mail_shell_content,
- gboolean group_by_threads);
gboolean e_mail_shell_content_get_preview_visible
(EMailShellContent *mail_shell_content);
void e_mail_shell_content_set_preview_visible
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index 4cef43263d..4aac0075f8 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -575,9 +575,9 @@ e_mail_shell_view_private_constructed (EMailShellView *mail_shell_view)
G_CALLBACK (mail_shell_view_prepare_for_quit_cb),
mail_shell_view);
+ e_mail_reader_init (reader);
e_mail_shell_view_actions_init (mail_shell_view);
e_mail_shell_view_update_search_filter (mail_shell_view);
- e_mail_reader_init (reader);
/* Populate built-in rules for search entry popup menu.
* Keep the assertions, please. If the conditions aren't