diff options
Diffstat (limited to 'mail/e-mail-notebook-view.c')
-rw-r--r-- | mail/e-mail-notebook-view.c | 220 |
1 files changed, 203 insertions, 17 deletions
diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c index 5fa6c6844f..cdf21bc702 100644 --- a/mail/e-mail-notebook-view.c +++ b/mail/e-mail-notebook-view.c @@ -29,8 +29,10 @@ #include <glib/gi18n.h> #include "mail/e-mail-reader.h" +#include "mail/message-list.h" #include "e-mail-notebook-view.h" -#include "e-mail-paned-view.h" +#include "e-mail-folder-pane.h" +#include "e-mail-message-pane.h" #include <shell/e-shell-window-actions.h> @@ -40,6 +42,11 @@ struct _EMailNotebookViewPrivate { GHashTable *views; }; +enum { + PROP_0, + PROP_GROUP_BY_THREADS, +}; + #define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \ E_SHELL_WINDOW_ACTION_GROUP ((window), "mail") @@ -66,10 +73,14 @@ static void mnv_page_changed (GtkNotebook *book, GtkNotebookPage *page, guint page_num, EMailNotebookView *view) { - EMailView *mview = gtk_notebook_get_nth_page (book, page_num); + EMailView *mview = (EMailView *)gtk_notebook_get_nth_page (book, page_num); view->priv->current_view = mview; + /* For EMailReader related changes to EShellView*/ g_signal_emit_by_name (view, "changed"); + /* For EMailShellContent related changes */ + g_signal_emit_by_name (view, "view-changed"); + } static void @@ -89,19 +100,58 @@ mail_notebook_view_constructed (GObject *object) g_signal_connect (widget, "switch-page", G_CALLBACK(mnv_page_changed), object); - priv->current_view = e_mail_paned_view_new (E_MAIL_VIEW(object)->content); - gtk_widget_show (priv->current_view); - gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new ("Please select a folder")); + priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(object)->content); + e_mail_paned_view_set_preview_visible ((EMailPanedView *)priv->current_view, FALSE); + gtk_widget_show ((GtkWidget *)priv->current_view); + gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view, gtk_label_new ("Please select a folder")); } static void +mail_notebook_view_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_GROUP_BY_THREADS: + e_mail_reader_set_group_by_threads ( + E_MAIL_READER(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view), + g_value_get_boolean (value)); + return; + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void +mail_notebook_view_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_GROUP_BY_THREADS: + g_value_set_boolean ( + value, + e_mail_reader_get_group_by_threads ( + E_MAIL_READER(E_MAIL_NOTEBOOK_VIEW(object)->priv->current_view))); + return; + + } + + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} + +static void mail_notebook_view_class_init (EMailViewClass *klass) { GObjectClass * object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->constructed = mail_notebook_view_constructed; + object_class->set_property = mail_notebook_view_set_property; + object_class->get_property = mail_notebook_view_get_property; object_class->finalize = e_mail_notebook_view_finalize; @@ -109,8 +159,41 @@ mail_notebook_view_class_init (EMailViewClass *klass) klass->set_search_strings = e_mail_notebook_view_set_search_strings; klass->get_view_instance = e_mail_notebook_view_get_view_instance; klass->update_view_instance = e_mail_notebook_view_update_view_instance; - - + klass->set_orientation = e_mail_notebook_view_set_orientation; + klass->get_orientation = e_mail_notebook_view_get_orientation; + klass->set_show_deleted = e_mail_notebook_view_set_show_deleted; + klass->get_show_deleted = e_mail_notebook_view_get_show_deleted; + klass->set_preview_visible = e_mail_notebook_view_set_preview_visible; + klass->get_preview_visible = e_mail_notebook_view_get_preview_visible; + + /* 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_PREVIEW_VISIBLE, + g_param_spec_boolean ( + "preview-visible", + "Preview is Visible", + "Whether the preview pane is visible", + TRUE, + G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_SHOW_DELETED, + g_param_spec_boolean ( + "show-deleted", + "Show Deleted", + NULL, + FALSE, + G_PARAM_READWRITE)); + + g_object_class_override_property ( + object_class, PROP_ORIENTATION, "orientation"); */ } @@ -231,6 +314,8 @@ emnv_get_page_num (EMailNotebookView *view, } g_warn_if_reached (); + + return; } static void @@ -246,6 +331,38 @@ reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent) } static void +mail_netbook_view_open_mail (EMailView *view, const char *uid, EMailNotebookView *nview) +{ + const gchar *folder_uri; + CamelFolder *folder; + EMailMessagePane *pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content); + int page; + EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (nview)->priv; + + + gtk_widget_show (pane); + folder = e_mail_reader_get_folder (E_MAIL_READER(view)); + folder_uri = e_mail_reader_get_folder_uri (E_MAIL_READER(view)); + + page = gtk_notebook_append_page (priv->book, pane, gtk_label_new (_("Mail"))); + gtk_notebook_set_current_page (priv->book, page); + + g_signal_connect ( E_MAIL_READER(pane), "changed", + G_CALLBACK (reconnect_changed_event), + nview); + g_signal_connect ( E_MAIL_READER (pane), "folder-loaded", + G_CALLBACK (reconnect_folder_loaded_event), + nview); + e_mail_reader_set_folder ( + E_MAIL_READER (pane), folder, folder_uri); + e_mail_reader_set_group_by_threads ( + E_MAIL_READER (pane), + e_mail_reader_get_group_by_threads (E_MAIL_READER(view))); + + e_mail_reader_set_message (E_MAIL_READER (pane), uid); +} + +static void mail_notebook_view_set_folder (EMailReader *reader, CamelFolder *folder, const gchar *folder_uri) @@ -266,20 +383,25 @@ mail_notebook_view_set_folder (EMailReader *reader, if (folder || folder_uri) { int page; - - new_view = e_mail_paned_view_new (E_MAIL_VIEW(reader)->content); - priv->current_view = (EMailView *)new_view; - gtk_widget_show (new_view); - page = gtk_notebook_append_page (priv->book, new_view, gtk_label_new (camel_folder_get_full_name(folder))); - e_mail_reader_set_folder (E_MAIL_READER(new_view), folder, folder_uri); - gtk_notebook_set_current_page (priv->book, page); - g_hash_table_insert (priv->views, g_strdup(folder_uri), new_view); - g_signal_connect ( E_MAIL_READER(new_view), "changed", + + if (g_hash_table_size (priv->views) != 0) { + priv->current_view = e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content); + gtk_widget_show (priv->current_view); + page = gtk_notebook_append_page (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder))); + gtk_notebook_set_current_page (priv->book, page); + } else + gtk_notebook_set_tab_label (priv->book, priv->current_view, gtk_label_new (camel_folder_get_full_name(folder))); + + e_mail_reader_set_folder (E_MAIL_READER(priv->current_view), folder, folder_uri); + g_hash_table_insert (priv->views, g_strdup(folder_uri), priv->current_view); + g_signal_connect ( E_MAIL_READER(priv->current_view), "changed", G_CALLBACK (reconnect_changed_event), reader); - g_signal_connect ( E_MAIL_READER (new_view), "folder-loaded", + g_signal_connect ( E_MAIL_READER (priv->current_view), "folder-loaded", G_CALLBACK (reconnect_folder_loaded_event), reader); + g_signal_connect ( priv->current_view, "open-mail", + G_CALLBACK (mail_netbook_view_open_mail), reader); } } @@ -312,6 +434,17 @@ e_mail_notebook_view_get_searchbar (EMailView *view) return e_mail_view_get_searchbar (E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view); */ } +static void +mail_notebook_view_open_selected_mail (EMailReader *reader) +{ + EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (reader)->priv; + + if (!priv->current_view) + return ; + + return e_mail_reader_open_selected_mail (E_MAIL_READER(priv->current_view)); +} + void e_mail_notebook_view_set_search_strings (EMailView *view, GSList *search_strings) @@ -346,6 +479,7 @@ mail_notebook_view_reader_init (EMailReaderIface *iface) iface->get_window = mail_notebook_view_get_window; iface->set_folder = mail_notebook_view_set_folder; iface->show_search_bar = mail_notebook_view_show_search_bar; + iface->open_selected_mail = mail_notebook_view_open_selected_mail; } GType @@ -384,3 +518,55 @@ e_mail_notebook_view_register_type (GTypeModule *type_module) type_module, mail_notebook_view_type, E_TYPE_MAIL_READER, &reader_info); } + +void +e_mail_notebook_view_set_show_deleted (EMailNotebookView *view, + gboolean show_deleted) +{ + if (!view->priv->current_view) + return; + + e_mail_view_set_show_deleted (view->priv->current_view, show_deleted); +} +gboolean +e_mail_notebook_view_get_show_deleted (EMailNotebookView *view) +{ + if (!view->priv->current_view) + return FALSE; + + return e_mail_view_get_show_deleted (view->priv->current_view); +} +void +e_mail_notebook_view_set_preview_visible (EMailNotebookView *view, + gboolean preview_visible) +{ + if (!view->priv->current_view) + return ; + + e_mail_view_set_preview_visible (view->priv->current_view, preview_visible); +} +gboolean +e_mail_notebook_view_get_preview_visible (EMailNotebookView *view) +{ + if (!view->priv->current_view) + return FALSE; + + return e_mail_view_get_preview_visible (view->priv->current_view); +} +void +e_mail_notebook_view_set_orientation (EMailNotebookView *view, + GtkOrientation orientation) +{ + if (!view->priv->current_view) + return; + + e_mail_view_set_orientation (view->priv->current_view, orientation); +} +GtkOrientation +e_mail_notebook_view_get_orientation (EMailNotebookView *view) +{ + if (!view->priv->current_view) + return GTK_ORIENTATION_VERTICAL; + + return e_mail_view_get_orientation (view->priv->current_view); +} |