diff options
-rw-r--r-- | mail/e-mail-backend.c | 1 | ||||
-rw-r--r-- | mail/e-mail-folder-pane.c | 69 | ||||
-rw-r--r-- | mail/e-mail-folder-pane.h | 3 | ||||
-rw-r--r-- | mail/e-mail-message-pane.c | 75 | ||||
-rw-r--r-- | mail/e-mail-message-pane.h | 2 | ||||
-rw-r--r-- | mail/e-mail-notebook-view.c | 354 | ||||
-rw-r--r-- | mail/e-mail-notebook-view.h | 4 | ||||
-rw-r--r-- | mail/e-mail-paned-view.c | 332 | ||||
-rw-r--r-- | mail/e-mail-paned-view.h | 4 | ||||
-rw-r--r-- | mail/e-mail-reader.c | 10 | ||||
-rw-r--r-- | mail/e-mail-view.c | 225 | ||||
-rw-r--r-- | mail/e-mail-view.h | 27 | ||||
-rw-r--r-- | mail/em-format-html.c | 2 | ||||
-rw-r--r-- | mail/message-list.c | 23 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-content.c | 42 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-view-private.c | 8 | ||||
-rw-r--r-- | modules/mail/evolution-module-mail.c | 5 |
17 files changed, 489 insertions, 697 deletions
diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c index 4d2038a73c..b2e22e397d 100644 --- a/mail/e-mail-backend.c +++ b/mail/e-mail-backend.c @@ -374,6 +374,7 @@ mail_backend_constructed (GObject *object) EShell *shell; EShellBackend *shell_backend; MailFolderCache *folder_cache; + const gchar *data_dir; shell_backend = E_SHELL_BACKEND (object); shell = e_shell_backend_get_shell (shell_backend); diff --git a/mail/e-mail-folder-pane.c b/mail/e-mail-folder-pane.c index 3d9dfc2ea9..d12cc48acf 100644 --- a/mail/e-mail-folder-pane.c +++ b/mail/e-mail-folder-pane.c @@ -49,60 +49,23 @@ struct _EMailFolderPanePrivate { gint placeholder; }; -enum { - PROP_0, - PROP_PREVIEW_VISIBLE -}; - G_DEFINE_TYPE (EMailFolderPane, e_mail_folder_pane, E_TYPE_MAIL_PANED_VIEW) -static void -folder_pane_set_preview_visible (EMailView *view, - gboolean preview_visible) -{ -} - static gboolean folder_pane_get_preview_visible (EMailView *view) { - return FALSE; } static void -mail_folder_pane_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - switch (property_id) { - case PROP_PREVIEW_VISIBLE: - g_value_set_boolean ( - value, - FALSE); - return; - - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - -static void -mail_folder_pane_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) +folder_pane_set_preview_visible (EMailView *view, + gboolean preview_visible) { - switch (property_id) { - case PROP_PREVIEW_VISIBLE: - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + /* Ignore the request. */ } static guint -mfp_open_selected_mail (EMailPanedView *view) +mail_paned_view_open_selected_mail (EMailPanedView *view) { GPtrArray *uids; gint i; @@ -182,27 +145,17 @@ mfp_open_selected_mail (EMailPanedView *view) static void e_mail_folder_pane_class_init (EMailFolderPaneClass *class) { - GObjectClass *object_class; EMailViewClass *mail_view_class; EMailPanedViewClass *mail_paned_view_class; g_type_class_add_private (class, sizeof (EMailFolderPanePrivate)); - object_class = G_OBJECT_CLASS (class); - object_class->set_property = mail_folder_pane_set_property; - object_class->get_property = mail_folder_pane_get_property; - mail_view_class = E_MAIL_VIEW_CLASS (class); - mail_view_class->set_preview_visible = folder_pane_set_preview_visible; mail_view_class->get_preview_visible = folder_pane_get_preview_visible; + mail_view_class->set_preview_visible = folder_pane_set_preview_visible; mail_paned_view_class = E_MAIL_PANED_VIEW_CLASS (class); - mail_paned_view_class->open_selected_mail = mfp_open_selected_mail; - - g_object_class_override_property ( - object_class, - PROP_PREVIEW_VISIBLE, - "preview-visible"); + mail_paned_view_class->open_selected_mail = mail_paned_view_open_selected_mail; } static void @@ -211,15 +164,13 @@ e_mail_folder_pane_init (EMailFolderPane *browser) browser->priv = E_MAIL_FOLDER_PANE_GET_PRIVATE (browser); } -GtkWidget * -e_mail_folder_pane_new (EShellContent *content) +EMailView * +e_mail_folder_pane_new (EShellView *shell_view) { - g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL); + g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); return g_object_new ( E_TYPE_MAIL_FOLDER_PANE, - "shell-content", content, - "preview-visible", FALSE, - NULL); + "shell-view", shell_view, NULL); } diff --git a/mail/e-mail-folder-pane.h b/mail/e-mail-folder-pane.h index a7a84a5edb..e9d9ee0858 100644 --- a/mail/e-mail-folder-pane.h +++ b/mail/e-mail-folder-pane.h @@ -22,7 +22,6 @@ #ifndef E_MAIL_FOLDER_PANE_H #define E_MAIL_FOLDER_PANE_H -#include <shell/e-shell-content.h> #include <mail/e-mail-paned-view.h> /* Standard GObject macros */ @@ -60,7 +59,7 @@ struct _EMailFolderPaneClass { }; GType e_mail_folder_pane_get_type (void); -GtkWidget * e_mail_folder_pane_new (EShellContent *content); +EMailView * e_mail_folder_pane_new (EShellView *shell_view); G_END_DECLS diff --git a/mail/e-mail-message-pane.c b/mail/e-mail-message-pane.c index 8ca6802639..8df46a1a39 100644 --- a/mail/e-mail-message-pane.c +++ b/mail/e-mail-message-pane.c @@ -36,46 +36,8 @@ struct _EMailMessagePanePrivate { gint placeholder; }; -enum { - PROP_0, - PROP_PREVIEW_VISIBLE -}; - G_DEFINE_TYPE (EMailMessagePane, e_mail_message_pane, E_TYPE_MAIL_PANED_VIEW) -/* This is too trivial to put in a file. - * It gets merged with the EMailReader UI. */ -static void -mail_message_pane_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (property_id) { - case PROP_PREVIEW_VISIBLE: - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - -static void -mail_message_pane_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - switch (property_id) { - case PROP_PREVIEW_VISIBLE: - g_value_set_boolean ( - value, - TRUE); - return; - } - - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -} - static void mail_message_pane_constructed (GObject *object) { @@ -90,19 +52,17 @@ mail_message_pane_constructed (GObject *object) e_mail_paned_view_hide_message_list_pane (E_MAIL_PANED_VIEW(object), FALSE); } -static void -message_pane_set_preview_visible (EMailView *view, - gboolean preview_visible) +static gboolean +mail_message_pane_get_preview_visible (EMailView *view) { - /* Chain up to parent's set_preview_visible() method. */ - E_MAIL_VIEW_CLASS (e_mail_message_pane_parent_class)-> - set_preview_visible (view, TRUE); + return TRUE; } -static gboolean -message_pane_get_preview_visible (EMailView *view) +static void +mail_message_pane_set_preview_visible (EMailView *view, + gboolean preview_visible) { - return TRUE; + /* Ignore the request. */ } static void @@ -114,18 +74,11 @@ e_mail_message_pane_class_init (EMailMessagePaneClass *class) g_type_class_add_private (class, sizeof (EMailMessagePanePrivate)); object_class = G_OBJECT_CLASS (class); - object_class->set_property = mail_message_pane_set_property; - object_class->get_property = mail_message_pane_get_property; object_class->constructed = mail_message_pane_constructed; mail_view_class = E_MAIL_VIEW_CLASS (class); - mail_view_class->set_preview_visible = message_pane_set_preview_visible; - mail_view_class->get_preview_visible = message_pane_get_preview_visible; - - g_object_class_override_property ( - object_class, - PROP_PREVIEW_VISIBLE, - "preview-visible"); + mail_view_class->get_preview_visible = mail_message_pane_get_preview_visible; + mail_view_class->set_preview_visible = mail_message_pane_set_preview_visible; } static void @@ -134,14 +87,12 @@ e_mail_message_pane_init (EMailMessagePane *browser) browser->priv = E_MAIL_MESSAGE_PANE_GET_PRIVATE (browser); } -GtkWidget * -e_mail_message_pane_new (EShellContent *content) +EMailView * +e_mail_message_pane_new (EShellView *shell_view) { - g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL); + g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); return g_object_new ( E_TYPE_MAIL_MESSAGE_PANE, - "shell-content", content, - "preview-visible", TRUE, - NULL); + "shell-view", shell_view, NULL); } diff --git a/mail/e-mail-message-pane.h b/mail/e-mail-message-pane.h index f947f79cdf..82cee3a13d 100644 --- a/mail/e-mail-message-pane.h +++ b/mail/e-mail-message-pane.h @@ -59,7 +59,7 @@ struct _EMailMessagePaneClass { }; GType e_mail_message_pane_get_type (void); -GtkWidget * e_mail_message_pane_new (EShellContent *content); +EMailView * e_mail_message_pane_new (EShellView *shell_view); G_END_DECLS diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c index 436804de06..fa6d340f52 100644 --- a/mail/e-mail-notebook-view.c +++ b/mail/e-mail-notebook-view.c @@ -70,13 +70,18 @@ enum { #define E_SHELL_WINDOW_ACTION_GROUP_MAIL(window) \ E_SHELL_WINDOW_ACTION_GROUP ((window), "mail") -static EMailViewClass *parent_class; -static GType mail_notebook_view_type; +/* Forward Declarations */ +static void e_mail_notebook_view_reader_init (EMailReaderIface *iface); + +G_DEFINE_TYPE_WITH_CODE ( + EMailNotebookView, e_mail_notebook_view, E_TYPE_MAIL_VIEW, + G_IMPLEMENT_INTERFACE ( + E_TYPE_MAIL_READER, e_mail_notebook_view_reader_init)) #if HAVE_CLUTTER static void mnv_set_current_tab (EMailNotebookView *view, - gint page) + gint page) { ClutterAnimation *animation; @@ -91,7 +96,7 @@ mnv_set_current_tab (EMailNotebookView *view, static gint emnv_get_page_num (EMailNotebookView *view, - GtkWidget *widget) + GtkWidget *widget) { EMailNotebookViewPrivate *priv = view->priv; gint i, n; @@ -108,32 +113,45 @@ emnv_get_page_num (EMailNotebookView *view, } static void -mnv_page_changed (GtkNotebook *book, GtkWidget *page, - guint page_num, EMailNotebookView *view) +mnv_page_changed (GtkNotebook *book, + GtkWidget *page, + guint page_num, + EMailView *view) { - EMailView *mview = (EMailView *)gtk_notebook_get_nth_page (book, page_num); - EShellContent *content = E_MAIL_VIEW(view)->content; - EShellView *shell_view = e_shell_content_get_shell_view (content); - EShellSidebar *sidebar = e_shell_view_get_shell_sidebar (shell_view); - EMFolderTree *tree; - const gchar *uri = e_mail_reader_get_folder_uri (E_MAIL_READER(mview)); - - g_object_get (sidebar, "folder-tree", &tree, NULL); + EMailNotebookViewPrivate *priv; + EShellView *shell_view; + EShellSidebar *shell_sidebar; + EMFolderTree *folder_tree; + EMailView *mview; + const gchar *uri; + + priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (view); + + shell_view = e_mail_view_get_shell_view (view); + shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); + + page = gtk_notebook_get_nth_page (book, page_num); + uri = e_mail_reader_get_folder_uri (E_MAIL_READER (page)); + mview = E_MAIL_VIEW (page); + + g_object_get (shell_sidebar, "folder-tree", &folder_tree, NULL); + if (uri && E_IS_MAIL_FOLDER_PANE (mview)) - em_folder_tree_set_selected (tree, uri, FALSE); + em_folder_tree_set_selected (folder_tree, uri, FALSE); - if (mview != view->priv->current_view) { - mview->prev = view->priv->current_view; - view->priv->current_view = mview; + if (mview != priv->current_view) { + mview->prev = priv->current_view; + priv->current_view = mview; } - /* For EMailReader related changes to EShellView*/ + /* For EMailReader related changes to EShellView */ g_signal_emit_by_name (view, "changed"); g_signal_emit_by_name (view, "folder-loaded"); /* For EMailShellContent related changes */ g_signal_emit_by_name (view, "view-changed"); + g_object_unref (folder_tree); } #if HAVE_CLUTTER @@ -412,8 +430,10 @@ create_under_clutter (GtkWidget *widget, GtkWidget *paned) static void mail_notebook_view_constructed (GObject *object) { - GtkWidget *widget, *container; EMailNotebookViewPrivate *priv; + EShellView *shell_view; + GtkWidget *container; + GtkWidget *widget; #if HAVE_CLUTTER EMailTab *tab; ClutterActor *stage, *clone; @@ -505,18 +525,20 @@ mail_notebook_view_constructed (GObject *object) #endif gtk_notebook_set_show_border ((GtkNotebook *)widget, FALSE); - g_signal_connect (widget, "switch-page", - G_CALLBACK(mnv_page_changed), object); - priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(object)->content); + shell_view = e_mail_view_get_shell_view (E_MAIL_VIEW (object)); + priv->current_view = e_mail_folder_pane_new (shell_view); e_mail_view_set_preview_visible (priv->current_view, FALSE); - gtk_widget_show ((GtkWidget *)priv->current_view); + gtk_widget_show (GTK_WIDGET (priv->current_view)); - gtk_notebook_append_page (priv->book, (GtkWidget *)priv->current_view, - create_tab_label (E_MAIL_NOTEBOOK_VIEW(object), - priv->current_view, - _("Please select a folder"))); + gtk_notebook_append_page ( + priv->book, GTK_WIDGET (priv->current_view), + create_tab_label (E_MAIL_NOTEBOOK_VIEW (object), + priv->current_view, _("Please select a folder"))); + g_signal_connect ( + priv->book, "switch-page", + G_CALLBACK (mnv_page_changed), object); } static void @@ -555,27 +577,6 @@ mail_notebook_view_get_property (GObject *object, G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } -static EShellSearchbar * -mail_notebook_view_get_searchbar (EMailView *view) -{ - EShellView *shell_view; - EShellContent *shell_content; - GtkWidget *widget; - - g_return_val_if_fail ( - E_IS_MAIL_NOTEBOOK_VIEW (view), NULL); - - shell_content = E_MAIL_VIEW (view)->content; - shell_view = e_shell_content_get_shell_view (shell_content); - widget = e_shell_view_get_searchbar (shell_view); - - return E_SHELL_SEARCHBAR (widget); -/* - if (!E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view) - return NULL; - return e_mail_view_get_searchbar (E_MAIL_NOTEBOOK_VIEW(view)->priv->current_view); */ -} - static void mail_notebook_view_set_search_strings (EMailView *view, GSList *search_strings) @@ -625,20 +626,6 @@ mail_notebook_view_get_orientation (EMailView *view) return e_mail_view_get_orientation (priv->current_view); } -static void -mail_notebook_view_set_show_deleted (EMailView *view, - gboolean show_deleted) -{ - EMailNotebookViewPrivate *priv; - - priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (view); - - if (!priv->current_view) - return; - - e_mail_view_set_show_deleted (priv->current_view, show_deleted); -} - static gboolean mail_notebook_view_get_show_deleted (EMailView *view) { @@ -653,8 +640,8 @@ mail_notebook_view_get_show_deleted (EMailView *view) } static void -mail_notebook_view_set_preview_visible (EMailView *view, - gboolean preview_visible) +mail_notebook_view_set_show_deleted (EMailView *view, + gboolean show_deleted) { EMailNotebookViewPrivate *priv; @@ -663,7 +650,7 @@ mail_notebook_view_set_preview_visible (EMailView *view, if (!priv->current_view) return; - e_mail_view_set_preview_visible (priv->current_view, preview_visible); + e_mail_view_set_show_deleted (priv->current_view, show_deleted); } static gboolean @@ -680,89 +667,28 @@ mail_notebook_view_get_preview_visible (EMailView *view) } static void -mail_notebook_view_class_init (EMailNotebookViewClass *class) -{ - GObjectClass *object_class; - EMailViewClass *mail_view_class; - - parent_class = g_type_class_peek_parent (class); - g_type_class_add_private (class, sizeof (EMailNotebookViewPrivate)); - - object_class = G_OBJECT_CLASS (class); - 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; - - mail_view_class = E_MAIL_VIEW_CLASS (class); - mail_view_class->get_searchbar = mail_notebook_view_get_searchbar; - mail_view_class->set_search_strings = mail_notebook_view_set_search_strings; - mail_view_class->get_view_instance = mail_notebook_view_get_view_instance; - mail_view_class->update_view_instance = mail_notebook_view_update_view_instance; - mail_view_class->set_orientation = mail_notebook_view_set_orientation; - mail_view_class->get_orientation = mail_notebook_view_get_orientation; - mail_view_class->set_show_deleted = mail_notebook_view_set_show_deleted; - mail_view_class->get_show_deleted = mail_notebook_view_get_show_deleted; - mail_view_class->set_preview_visible = mail_notebook_view_set_preview_visible; - mail_view_class->get_preview_visible = 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"); */ -} - -static void -mail_notebook_view_init (EMailNotebookView *view) +mail_notebook_view_set_preview_visible (EMailView *view, + gboolean preview_visible) { - view->priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (view); + EMailNotebookViewPrivate *priv; - view->priv->inited = FALSE; - view->priv->views = g_hash_table_new (g_str_hash, g_str_equal); -} + priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (view); -GtkWidget * -e_mail_notebook_view_new (EShellContent *content) -{ - g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL); + if (!priv->current_view) + return; - return g_object_new ( - E_TYPE_MAIL_NOTEBOOK_VIEW, - "shell-content", content, NULL); + e_mail_view_set_preview_visible (priv->current_view, preview_visible); } static GtkActionGroup * mail_notebook_view_get_action_group (EMailReader *reader) { - EShellContent *shell_content; + EMailView *view; EShellWindow *shell_window; EShellView *shell_view; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window); @@ -815,11 +741,11 @@ mail_notebook_view_get_popup_menu (EMailReader *reader) static EShellBackend * mail_notebook_view_get_shell_backend (EMailReader *reader) { - EShellContent *shell_content; + EMailView *view; EShellView *shell_view; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); return e_shell_view_get_shell_backend (shell_view); } @@ -827,12 +753,12 @@ mail_notebook_view_get_shell_backend (EMailReader *reader) static GtkWindow * mail_notebook_view_get_window (EMailReader *reader) { - EShellContent *shell_content; + EMailView *view; EShellWindow *shell_window; EShellView *shell_view; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); return GTK_WINDOW (shell_window); @@ -845,19 +771,23 @@ reconnect_changed_event (EMailReader *child, EMailReader *parent) } static void -reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent) +reconnect_folder_loaded_event (EMailReader *child, + EMailReader *parent) { g_signal_emit_by_name (parent, "folder-loaded"); } static void -mail_netbook_view_open_mail (EMailView *view, const gchar *uid, EMailNotebookView *nview) +mail_netbook_view_open_mail (EMailView *view, + const gchar *uid, + EMailNotebookView *nview) { + EMailNotebookViewPrivate *priv; + EShellView *shell_view; const gchar *folder_uri; CamelFolder *folder; - GtkWidget *pane; + EMailView *pane; gint page; - EMailNotebookViewPrivate *priv = E_MAIL_NOTEBOOK_VIEW (nview)->priv; CamelMessageInfo *info; GtkWidget *preview; gint pos; @@ -867,17 +797,23 @@ mail_netbook_view_open_mail (EMailView *view, const gchar *uid, EMailNotebookVie ClutterActor *clone; ClutterTimeline *timeline; GtkWidget *mlist; +#endif - e_mail_tab_set_active (e_mail_tab_picker_get_tab (priv->tab_picker, - e_mail_tab_picker_get_current_tab (priv->tab_picker)), - FALSE); + priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (nview); + +#if HAVE_CLUTTER + e_mail_tab_set_active ( + e_mail_tab_picker_get_tab (priv->tab_picker, + e_mail_tab_picker_get_current_tab (priv->tab_picker)), FALSE); #endif - pos = emnv_get_page_num (nview, (GtkWidget *)priv->current_view); - pane = e_mail_message_pane_new (E_MAIL_VIEW(nview)->content); - E_MAIL_VIEW(pane)->prev = priv->current_view; - priv->current_view = (EMailView *)pane; - gtk_widget_show (pane); + shell_view = e_mail_view_get_shell_view (E_MAIL_VIEW (nview)); + pos = emnv_get_page_num (nview, GTK_WIDGET (priv->current_view)); + pane = e_mail_message_pane_new (shell_view); + pane->prev = priv->current_view; + priv->current_view = pane; + + gtk_widget_show (GTK_WIDGET (pane)); preview = e_mail_paned_view_get_preview (E_MAIL_PANED_VIEW(pane)); @@ -886,11 +822,10 @@ mail_netbook_view_open_mail (EMailView *view, const gchar *uid, EMailNotebookVie info = camel_folder_get_message_info (folder, uid); - page = gtk_notebook_insert_page (priv->book, pane, - create_tab_label (nview, - priv->current_view, - camel_message_info_subject(info)), - pos+1); + page = gtk_notebook_insert_page ( + priv->book, GTK_WIDGET (pane), + create_tab_label (nview, priv->current_view, + camel_message_info_subject (info)), pos + 1); #if HAVE_CLUTTER mlist = e_mail_reader_get_message_list (E_MAIL_READER(pane)); @@ -1000,8 +935,10 @@ mail_notebook_view_set_folder (EMailReader *reader, if (priv->inited) { EMailView *old_view = priv->current_view; + EShellView *shell_view; - priv->current_view = (EMailView *)e_mail_folder_pane_new (E_MAIL_VIEW(reader)->content); + shell_view = e_mail_view_get_shell_view (E_MAIL_VIEW (reader)); + priv->current_view = e_mail_folder_pane_new (shell_view); gtk_widget_show ((GtkWidget *)priv->current_view); priv->current_view->prev = old_view; page = gtk_notebook_append_page ( @@ -1082,14 +1019,15 @@ mail_notebook_view_set_folder (EMailReader *reader, #endif 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 (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); + g_signal_connect ( + priv->current_view, "changed", + G_CALLBACK (reconnect_changed_event), reader); + g_signal_connect ( + 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); } } @@ -1113,7 +1051,38 @@ mail_notebook_view_open_selected_mail (EMailReader *reader) } static void -mail_notebook_view_reader_init (EMailReaderIface *iface) +e_mail_notebook_view_class_init (EMailNotebookViewClass *class) +{ + GObjectClass *object_class; + EMailViewClass *mail_view_class; + + g_type_class_add_private (class, sizeof (EMailNotebookViewPrivate)); + + object_class = G_OBJECT_CLASS (class); + 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; + + mail_view_class = E_MAIL_VIEW_CLASS (class); + mail_view_class->set_search_strings = mail_notebook_view_set_search_strings; + mail_view_class->get_view_instance = mail_notebook_view_get_view_instance; + mail_view_class->update_view_instance = mail_notebook_view_update_view_instance; + mail_view_class->set_orientation = mail_notebook_view_set_orientation; + mail_view_class->get_orientation = mail_notebook_view_get_orientation; + mail_view_class->get_show_deleted = mail_notebook_view_get_show_deleted; + mail_view_class->set_show_deleted = mail_notebook_view_set_show_deleted; + mail_view_class->get_preview_visible = mail_notebook_view_get_preview_visible; + mail_view_class->set_preview_visible = mail_notebook_view_set_preview_visible; + + /* Inherited from EMailReader */ + g_object_class_override_property ( + object_class, + PROP_GROUP_BY_THREADS, + "group-by-threads"); +} + +static void +e_mail_notebook_view_reader_init (EMailReaderIface *iface) { iface->get_action_group = mail_notebook_view_get_action_group; iface->get_formatter = mail_notebook_view_get_formatter; @@ -1127,40 +1096,21 @@ mail_notebook_view_reader_init (EMailReaderIface *iface) iface->open_selected_mail = mail_notebook_view_open_selected_mail; } -GType -e_mail_notebook_view_get_type (void) +static void +e_mail_notebook_view_init (EMailNotebookView *view) { - return mail_notebook_view_type; + view->priv = E_MAIL_NOTEBOOK_VIEW_GET_PRIVATE (view); + + view->priv->inited = FALSE; + view->priv->views = g_hash_table_new (g_str_hash, g_str_equal); } -void -e_mail_notebook_view_register_type (GTypeModule *type_module) +GtkWidget * +e_mail_notebook_view_new (EShellView *shell_view) { - static const GTypeInfo type_info = { - sizeof (EMailNotebookViewClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) mail_notebook_view_class_init, - (GClassFinalizeFunc) NULL, - NULL, /* class_data */ - sizeof (EMailNotebookView), - 0, /* n_preallocs */ - (GInstanceInitFunc) mail_notebook_view_init, - NULL /* value_table */ - }; - - static const GInterfaceInfo reader_info = { - (GInterfaceInitFunc) mail_notebook_view_reader_init, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface_data */ - }; - - mail_notebook_view_type = g_type_module_register_type ( - type_module, E_TYPE_MAIL_VIEW, - "EMailNotebookView", &type_info, 0); - - g_type_module_add_interface ( - type_module, mail_notebook_view_type, - E_TYPE_MAIL_READER, &reader_info); -} + g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); + return g_object_new ( + E_TYPE_MAIL_NOTEBOOK_VIEW, + "shell-view", shell_view, NULL); +} diff --git a/mail/e-mail-notebook-view.h b/mail/e-mail-notebook-view.h index cdc341ec4a..04b0bd4152 100644 --- a/mail/e-mail-notebook-view.h +++ b/mail/e-mail-notebook-view.h @@ -62,9 +62,7 @@ struct _EMailNotebookViewClass { }; GType e_mail_notebook_view_get_type (void); -void e_mail_notebook_view_register_type - (GTypeModule *type_module); -GtkWidget * e_mail_notebook_view_new (EShellContent *content); +GtkWidget * e_mail_notebook_view_new (EShellView *shell_view); EShellSearchbar * e_mail_notebook_view_get_searchbar (EMailNotebookView *view); diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c index cf13ac5514..342dc39c7b 100644 --- a/mail/e-mail-paned-view.c +++ b/mail/e-mail-paned-view.c @@ -63,7 +63,6 @@ struct _EMailPanedViewPrivate { EMFormatHTMLDisplay *formatter; GalViewInstance *view_instance; - GtkOrientation orientation; /* ETable scrolling hack */ gdouble default_scrollbar_position; @@ -72,40 +71,37 @@ struct _EMailPanedViewPrivate { /* Signal handler IDs */ guint message_list_built_id; - - guint preview_visible : 1; - guint show_deleted : 1; }; enum { PROP_0, - PROP_GROUP_BY_THREADS, - PROP_ORIENTATION, - PROP_PREVIEW_VISIBLE, - PROP_SHOW_DELETED + PROP_GROUP_BY_THREADS }; #define STATE_KEY_GROUP_BY_THREADS "GroupByThreads" #define STATE_KEY_SELECTED_MESSAGE "SelectedMessage" #define STATE_KEY_PREVIEW_VISIBLE "PreviewVisible" -static EMailViewClass *parent_class; -static GType mail_paned_view_type; +/* Forward Declarations */ +static void e_mail_paned_view_reader_init (EMailReaderIface *iface); + +G_DEFINE_TYPE_WITH_CODE ( + EMailPanedView, e_mail_paned_view, E_TYPE_MAIL_VIEW, + G_IMPLEMENT_INTERFACE ( + E_TYPE_MAIL_READER, e_mail_paned_view_reader_init)) static void -mail_paned_view_save_boolean (EMailPanedView *view, +mail_paned_view_save_boolean (EMailView *view, const gchar *key, gboolean value) { EShellView *shell_view; - EShellContent *shell_content; EMailReader *reader; GKeyFile *key_file; const gchar *folder_uri; gchar *group_name; - shell_content = E_MAIL_VIEW (view)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + shell_view = e_mail_view_get_shell_view (view); key_file = e_shell_view_get_state_key_file (shell_view); reader = E_MAIL_READER (view); @@ -122,21 +118,21 @@ mail_paned_view_save_boolean (EMailPanedView *view, } static void -mail_paned_view_message_list_built_cb (EMailPanedView *view, +mail_paned_view_message_list_built_cb (EMailView *view, MessageList *message_list) { - EMailPanedViewPrivate *priv = view->priv; + EMailPanedViewPrivate *priv; EShellView *shell_view; EShellWindow *shell_window; - EShellContent *shell_content; GKeyFile *key_file; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); + g_signal_handler_disconnect ( message_list, priv->message_list_built_id); priv->message_list_built_id = 0; - shell_content = E_MAIL_VIEW (view)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); key_file = e_shell_view_get_state_key_file (shell_view); @@ -170,11 +166,10 @@ mail_paned_view_message_list_built_cb (EMailPanedView *view, } static void -mail_paned_view_message_selected_cb (EMailPanedView *view, +mail_paned_view_message_selected_cb (EMailView *view, const gchar *message_uid, MessageList *message_list) { - EShellContent *shell_content; EShellView *shell_view; GKeyFile *key_file; const gchar *folder_uri; @@ -189,8 +184,7 @@ mail_paned_view_message_selected_cb (EMailPanedView *view, if (folder_uri == NULL) return; - shell_content = E_MAIL_VIEW (view)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + shell_view = e_mail_view_get_shell_view (view); key_file = e_shell_view_get_state_key_file (shell_view); key = STATE_KEY_SELECTED_MESSAGE; @@ -216,7 +210,7 @@ mail_paned_view_restore_state_cb (EShellWindow *shell_window, GObject *object; const gchar *key; - priv = view->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); /* Bind GObject properties to GConf keys. */ @@ -255,7 +249,7 @@ mail_paned_view_notify_group_by_threads_cb (EMailReader *reader) group_by_threads = e_mail_reader_get_group_by_threads (reader); mail_paned_view_save_boolean ( - E_MAIL_PANED_VIEW (reader), + E_MAIL_VIEW (reader), STATE_KEY_GROUP_BY_THREADS, group_by_threads); } @@ -271,24 +265,6 @@ mail_paned_view_set_property (GObject *object, E_MAIL_READER (object), g_value_get_boolean (value)); return; - - case PROP_ORIENTATION: - e_mail_view_set_orientation ( - E_MAIL_VIEW (object), - g_value_get_enum (value)); - return; - - case PROP_PREVIEW_VISIBLE: - e_mail_view_set_preview_visible ( - E_MAIL_VIEW (object), - g_value_get_boolean (value)); - return; - - case PROP_SHOW_DELETED: - e_mail_view_set_show_deleted ( - E_MAIL_VIEW (object), - g_value_get_boolean (value)); - return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -307,27 +283,6 @@ mail_paned_view_get_property (GObject *object, e_mail_reader_get_group_by_threads ( E_MAIL_READER (object))); return; - - case PROP_ORIENTATION: - g_value_set_enum ( - value, - e_mail_view_get_orientation ( - E_MAIL_VIEW (object))); - return; - - case PROP_PREVIEW_VISIBLE: - g_value_set_boolean ( - value, - e_mail_view_get_preview_visible ( - E_MAIL_VIEW (object))); - return; - - case PROP_SHOW_DELETED: - g_value_set_boolean ( - value, - e_mail_view_get_show_deleted ( - E_MAIL_VIEW (object))); - return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -338,7 +293,7 @@ mail_paned_view_dispose (GObject *object) { EMailPanedViewPrivate *priv; - priv = E_MAIL_PANED_VIEW (object)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (object); if (priv->paned != NULL) { g_object_unref (priv->paned); @@ -371,18 +326,18 @@ mail_paned_view_dispose (GObject *object) } /* Chain up to parent's dispose() method. */ - G_OBJECT_CLASS (parent_class)->dispose (object); + G_OBJECT_CLASS (e_mail_paned_view_parent_class)->dispose (object); } static GtkActionGroup * mail_paned_view_get_action_group (EMailReader *reader) { - EShellContent *shell_content; - EShellWindow *shell_window; + EMailView *view; EShellView *shell_view; + EShellWindow *shell_window; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); return E_SHELL_WINDOW_ACTION_GROUP_MAIL (shell_window); @@ -393,7 +348,7 @@ mail_paned_view_get_formatter (EMailReader *reader) { EMailPanedViewPrivate *priv; - priv = E_MAIL_PANED_VIEW (reader)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (reader); return EM_FORMAT_HTML (priv->formatter); } @@ -409,7 +364,7 @@ mail_paned_view_get_message_list (EMailReader *reader) { EMailPanedViewPrivate *priv; - priv = E_MAIL_PANED_VIEW (reader)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (reader); return priv->message_list; } @@ -417,14 +372,14 @@ mail_paned_view_get_message_list (EMailReader *reader) static GtkMenu * mail_paned_view_get_popup_menu (EMailReader *reader) { + EMailView *view; EShellView *shell_view; EShellWindow *shell_window; - EShellContent *shell_content; GtkUIManager *ui_manager; GtkWidget *widget; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); ui_manager = e_shell_window_get_ui_manager (shell_window); @@ -436,11 +391,11 @@ mail_paned_view_get_popup_menu (EMailReader *reader) static EShellBackend * mail_paned_view_get_shell_backend (EMailReader *reader) { - EShellContent *shell_content; + EMailView *view; EShellView *shell_view; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); return e_shell_view_get_shell_backend (shell_view); } @@ -448,12 +403,12 @@ mail_paned_view_get_shell_backend (EMailReader *reader) static GtkWindow * mail_paned_view_get_window (EMailReader *reader) { - EShellContent *shell_content; - EShellWindow *shell_window; + EMailView *view; EShellView *shell_view; + EShellWindow *shell_window; - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); return GTK_WINDOW (shell_window); @@ -461,15 +416,15 @@ mail_paned_view_get_window (EMailReader *reader) static void mail_paned_view_set_folder (EMailReader *reader, - CamelFolder *folder, - const gchar *folder_uri) + CamelFolder *folder, + const gchar *folder_uri) { + EMailPanedViewPrivate *priv; + EMailView *view; EShell *shell; EShellView *shell_view; EShellWindow *shell_window; - EShellContent *shell_content; EShellSettings *shell_settings; - EMailPanedViewPrivate *priv; EMailReaderIface *default_iface; GtkWidget *message_list; GKeyFile *key_file; @@ -478,10 +433,10 @@ mail_paned_view_set_folder (EMailReader *reader, gboolean value; GError *error = NULL; - priv = E_MAIL_PANED_VIEW (reader)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (reader); - shell_content = E_MAIL_VIEW (reader)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (reader); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); shell = e_shell_window_get_shell (shell_window); @@ -553,7 +508,7 @@ mail_paned_view_show_search_bar (EMailReader *reader) { EMailPanedViewPrivate *priv; - priv = E_MAIL_PANED_VIEW (reader)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (reader); gtk_widget_show (priv->search_bar); } @@ -561,10 +516,6 @@ mail_paned_view_show_search_bar (EMailReader *reader) static guint mail_paned_view_reader_open_selected_mail (EMailReader *reader) { - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW (reader)->priv; - return E_MAIL_PANED_VIEW_CLASS (G_OBJECT_GET_CLASS (reader))->open_selected_mail (E_MAIL_PANED_VIEW (reader)); } @@ -572,22 +523,22 @@ static void mail_paned_view_constructed (GObject *object) { EMailPanedViewPrivate *priv; - EShellContent *shell_content; EShellBackend *shell_backend; EShellWindow *shell_window; EShellView *shell_view; ESearchBar *search_bar; EMailReader *reader; + EMailView *view; GtkWidget *message_list; GtkWidget *container; GtkWidget *widget; EWebView *web_view; - priv = E_MAIL_PANED_VIEW (object)->priv; + priv = E_MAIL_PANED_VIEW_GET_PRIVATE (object); priv->formatter = em_format_html_display_new (); - shell_content = E_MAIL_VIEW (object)->content; - shell_view = e_shell_content_get_shell_view (shell_content); + view = E_MAIL_VIEW (object); + shell_view = e_mail_view_get_shell_view (view); shell_window = e_shell_view_get_shell_window (shell_view); shell_backend = e_shell_view_get_shell_backend (shell_view); @@ -666,20 +617,10 @@ mail_paned_view_constructed (GObject *object) object); e_mail_reader_connect_headers (reader); -} - -static EShellSearchbar * -mail_paned_view_get_searchbar (EMailView *view) -{ - EShellView *shell_view; - EShellContent *shell_content; - GtkWidget *widget; - shell_content = view->content; - shell_view = e_shell_content_get_shell_view (shell_content); - widget = e_shell_view_get_searchbar (shell_view); - - return E_SHELL_SEARCHBAR (widget); + /* Do this after creating the message list. Our + * set_preview_visible() method relies on it. */ + e_mail_view_set_preview_visible (view, TRUE); } static void @@ -723,7 +664,6 @@ mail_paned_view_update_view_instance (EMailView *view) EMailPanedViewPrivate *priv; EMailReader *reader; EShell *shell; - EShellContent *shell_content; EShellView *shell_view; EShellWindow *shell_window; EShellViewClass *shell_view_class; @@ -740,8 +680,7 @@ mail_paned_view_update_view_instance (EMailView *view) priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - shell_content = view->content; - shell_view = e_shell_content_get_shell_view (shell_content); + shell_view = e_mail_view_get_shell_view (view); shell_view_class = E_SHELL_VIEW_GET_CLASS (shell_view); view_collection = shell_view_class->view_collection; @@ -873,63 +812,10 @@ mail_paned_view_update_view_instance (EMailView *view) } static void -mail_paned_view_set_orientation (EMailView *view, - GtkOrientation orientation) -{ - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - priv->orientation = orientation; - - g_object_notify (G_OBJECT (view), "orientation"); - - e_mail_view_update_view_instance (view); -} - -static GtkOrientation -mail_paned_view_get_orientation (EMailView *view) -{ - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - return priv->orientation; -} - -static void -mail_paned_view_set_show_deleted (EMailView *view, - gboolean show_deleted) -{ - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - priv->show_deleted = show_deleted; - - g_object_notify (G_OBJECT (view), "show-deleted"); -} - -static gboolean -mail_paned_view_get_show_deleted (EMailView *view) -{ - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - return priv->show_deleted; -} - -static void mail_paned_view_set_preview_visible (EMailView *view, gboolean preview_visible) { - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - if (preview_visible == priv->preview_visible) - return; + EMailViewClass *parent_class; /* If we're showing the preview, tell EMailReader to reload the * selected message. This should force it to download the full @@ -947,23 +833,13 @@ mail_paned_view_set_preview_visible (EMailView *view, e_mail_reader_set_message (reader, cursor_uid); } - priv->preview_visible = preview_visible; - mail_paned_view_save_boolean ( - E_MAIL_PANED_VIEW (view), + E_MAIL_VIEW (view), STATE_KEY_PREVIEW_VISIBLE, preview_visible); - g_object_notify (G_OBJECT (view), "preview-visible"); -} - -static gboolean -mail_paned_view_get_preview_visible (EMailView *view) -{ - EMailPanedViewPrivate *priv; - - priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - - return priv->preview_visible; + /* Chain up to parent's set_preview_visible() method. */ + parent_class = E_MAIL_VIEW_CLASS (e_mail_paned_view_parent_class); + parent_class->set_preview_visible (view, preview_visible); } static guint @@ -973,12 +849,11 @@ mail_paned_view_open_selected_mail (EMailPanedView *view) } static void -mail_paned_view_class_init (EMailPanedViewClass *class) +e_mail_paned_view_class_init (EMailPanedViewClass *class) { GObjectClass *object_class; EMailViewClass *mail_view_class; - parent_class = g_type_class_peek_parent (class); g_type_class_add_private (class, sizeof (EMailPanedViewPrivate)); object_class = G_OBJECT_CLASS (class); @@ -988,17 +863,11 @@ mail_paned_view_class_init (EMailPanedViewClass *class) object_class->get_property = mail_paned_view_get_property; mail_view_class = E_MAIL_VIEW_CLASS (class); - mail_view_class->get_searchbar = mail_paned_view_get_searchbar; mail_view_class->set_search_strings = mail_paned_view_set_search_strings; mail_view_class->get_view_instance = mail_paned_view_get_view_instance; mail_view_class->update_view_instance = mail_paned_view_update_view_instance; - mail_view_class->set_orientation = mail_paned_view_set_orientation; - mail_view_class->get_orientation = mail_paned_view_get_orientation; - mail_view_class->set_show_deleted = mail_paned_view_set_show_deleted; - mail_view_class->get_show_deleted = mail_paned_view_get_show_deleted; mail_view_class->set_preview_visible = mail_paned_view_set_preview_visible; - mail_view_class->get_preview_visible = mail_paned_view_get_preview_visible; class->open_selected_mail = mail_paned_view_open_selected_mail; @@ -1007,33 +876,10 @@ mail_paned_view_class_init (EMailPanedViewClass *class) 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"); } static void -mail_paned_view_reader_init (EMailReaderIface *iface) +e_mail_paned_view_reader_init (EMailReaderIface *iface) { iface->get_action_group = mail_paned_view_get_action_group; iface->get_formatter = mail_paned_view_get_formatter; @@ -1048,73 +894,24 @@ mail_paned_view_reader_init (EMailReaderIface *iface) } static void -mail_paned_view_init (EMailPanedView *view) +e_mail_paned_view_init (EMailPanedView *view) { view->priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view); - view->priv->preview_visible = TRUE; - g_signal_connect ( view, "notify::group-by-threads", G_CALLBACK (mail_paned_view_notify_group_by_threads_cb), NULL); } -GType -e_mail_paned_view_get_type (void) -{ - return mail_paned_view_type; -} - -void -e_mail_paned_view_register_type (GTypeModule *type_module) -{ - static const GTypeInfo type_info = { - sizeof (EMailPanedViewClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) mail_paned_view_class_init, - (GClassFinalizeFunc) NULL, - NULL, /* class_data */ - sizeof (EMailPanedView), - 0, /* n_preallocs */ - (GInstanceInitFunc) mail_paned_view_init, - NULL /* value_table */ - }; -#if 0 - static const GInterfaceInfo orientable_info = { - (GInterfaceInitFunc) NULL, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface_data */ - }; -#endif - static const GInterfaceInfo reader_info = { - (GInterfaceInitFunc) mail_paned_view_reader_init, - (GInterfaceFinalizeFunc) NULL, - NULL /* interface_data */ - }; - - mail_paned_view_type = g_type_module_register_type ( - type_module, E_TYPE_MAIL_VIEW, - "EMailPanedView", &type_info, 0); -#if 0 - g_type_module_add_interface ( - type_module, mail_paned_view_type, - GTK_TYPE_ORIENTABLE, &orientable_info); -#endif - g_type_module_add_interface ( - type_module, mail_paned_view_type, - E_TYPE_MAIL_READER, &reader_info); -} - GtkWidget * -e_mail_paned_view_new (EShellContent *content) +e_mail_paned_view_new (EShellView *shell_view) { - g_return_val_if_fail (E_IS_SHELL_CONTENT (content), NULL); + g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); return g_object_new ( E_TYPE_MAIL_PANED_VIEW, - "shell-content", content, NULL); + "shell-view", shell_view, NULL); } void @@ -1127,7 +924,6 @@ e_mail_paned_view_hide_message_list_pane (EMailPanedView *view, gtk_widget_show (view->priv->scrolled_window); else gtk_widget_hide (view->priv->scrolled_window); - } GtkWidget * diff --git a/mail/e-mail-paned-view.h b/mail/e-mail-paned-view.h index 09d2299a4f..9be60a854f 100644 --- a/mail/e-mail-paned-view.h +++ b/mail/e-mail-paned-view.h @@ -25,7 +25,6 @@ #include <mail/e-mail-view.h> -#include <shell/e-shell-content.h> #include <shell/e-shell-searchbar.h> #include <shell/e-shell-view.h> @@ -68,8 +67,7 @@ struct _EMailPanedViewClass { }; GType e_mail_paned_view_get_type (void); -void e_mail_paned_view_register_type (GTypeModule *type_module); -GtkWidget * e_mail_paned_view_new (EShellContent *content); +GtkWidget * e_mail_paned_view_new (EShellView *shell_view); void e_mail_paned_view_hide_message_list_pane (EMailPanedView *view, gboolean visible); diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index adf56fac7e..ff6245eb69 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -686,15 +686,17 @@ action_mail_next_cb (GtkAction *action, mask = 0; message_list = e_mail_reader_get_message_list (reader); + #if HAVE_CLUTTER - actor = g_object_get_data ((GObject *)message_list, "preview-actor"); - if (actor) { + actor = g_object_get_data (G_OBJECT (message_list), "preview-actor"); + if (actor != NULL) { clutter_actor_set_opacity (actor, 0); clutter_actor_animate ( actor, CLUTTER_EASE_OUT_SINE, 500, "opacity", 255, NULL); } #endif + message_list_select ( MESSAGE_LIST (message_list), direction, flags, mask); } @@ -2190,8 +2192,8 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) string = g_strdup_printf ( _("Retrieving message '%s'"), cursor_uid); #if HAVE_CLUTTER - if (!e_shell_get_express_mode(e_shell_get_default())) - e_web_view_load_string (web_view, string); + if (!e_shell_get_express_mode (e_shell_get_default ())) + e_web_view_load_string (web_view, string); #else e_web_view_load_string (web_view, string); #endif diff --git a/mail/e-mail-view.c b/mail/e-mail-view.c index a3a642ab7f..909f38b33d 100644 --- a/mail/e-mail-view.c +++ b/mail/e-mail-view.c @@ -33,7 +33,11 @@ ((obj), E_TYPE_MAIL_VIEW, EMailViewPrivate)) struct _EMailViewPrivate { - gint placeholder; + EShellView *shell_view; + GtkOrientation orientation; + + guint preview_visible : 1; + guint show_deleted : 1; }; enum { @@ -45,7 +49,10 @@ enum { enum { PROP_0, - PROP_SHELL_VIEW + PROP_ORIENTATION, + PROP_PREVIEW_VISIBLE, + PROP_SHELL_VIEW, + PROP_SHOW_DELETED }; static guint signals[LAST_SIGNAL]; @@ -53,15 +60,44 @@ static guint signals[LAST_SIGNAL]; G_DEFINE_TYPE (EMailView, e_mail_view, GTK_TYPE_VBOX) static void +mail_view_set_shell_view (EMailView *view, + EShellView *shell_view) +{ + g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); + g_return_if_fail (view->priv->shell_view == NULL); + + view->priv->shell_view = g_object_ref (shell_view); +} + +static void mail_view_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { + case PROP_ORIENTATION: + e_mail_view_set_orientation ( + E_MAIL_VIEW (object), + g_value_get_enum (value)); + return; + + case PROP_PREVIEW_VISIBLE: + e_mail_view_set_preview_visible ( + E_MAIL_VIEW (object), + g_value_get_boolean (value)); + return; + case PROP_SHELL_VIEW: - E_MAIL_VIEW(object)->content = - g_value_get_object (value); + mail_view_set_shell_view ( + E_MAIL_VIEW (object), + g_value_get_object (value)); + return; + + case PROP_SHOW_DELETED: + e_mail_view_set_show_deleted ( + E_MAIL_VIEW (object), + g_value_get_boolean (value)); return; } @@ -75,9 +111,28 @@ mail_view_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_ORIENTATION: + g_value_set_enum ( + value, e_mail_view_get_orientation ( + E_MAIL_VIEW (object))); + return; + + case PROP_PREVIEW_VISIBLE: + g_value_set_boolean ( + value, e_mail_view_get_preview_visible ( + E_MAIL_VIEW (object))); + return; + case PROP_SHELL_VIEW: g_value_set_object ( - value, E_MAIL_VIEW(object)->content); + value, e_mail_view_get_shell_view ( + E_MAIL_VIEW (object))); + return; + + case PROP_SHOW_DELETED: + g_value_set_boolean ( + value, e_mail_view_get_show_deleted ( + E_MAIL_VIEW (object))); return; } @@ -85,6 +140,69 @@ mail_view_get_property (GObject *object, } static void +mail_view_dispose (GObject *object) +{ + EMailViewPrivate *priv; + + priv = E_MAIL_VIEW_GET_PRIVATE (object); + + if (priv->shell_view != NULL) { + g_object_unref (priv->shell_view); + priv->shell_view = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (e_mail_view_parent_class)->dispose (object); +} + +static GtkOrientation +mail_view_get_orientation (EMailView *view) +{ + return view->priv->orientation; +} + +static void +mail_view_set_orientation (EMailView *view, + GtkOrientation orientation) +{ + view->priv->orientation = orientation; + + g_object_notify (G_OBJECT (view), "orientation"); + + e_mail_view_update_view_instance (view); +} + +static gboolean +mail_view_get_preview_visible (EMailView *view) +{ + return view->priv->preview_visible; +} + +static void +mail_view_set_preview_visible (EMailView *view, + gboolean preview_visible) +{ + view->priv->preview_visible = preview_visible; + + g_object_notify (G_OBJECT (view), "preview-visible"); +} + +static gboolean +mail_view_get_show_deleted (EMailView *view) +{ + return view->priv->show_deleted; +} + +static void +mail_view_set_show_deleted (EMailView *view, + gboolean show_deleted) +{ + view->priv->show_deleted = show_deleted; + + g_object_notify (G_OBJECT (view), "show-deleted"); +} + +static void e_mail_view_class_init (EMailViewClass *class) { GObjectClass *object_class; @@ -94,6 +212,14 @@ e_mail_view_class_init (EMailViewClass *class) object_class = G_OBJECT_CLASS (class); object_class->set_property = mail_view_set_property; object_class->get_property = mail_view_get_property; + object_class->dispose = mail_view_dispose; + + class->get_orientation = mail_view_get_orientation; + class->set_orientation = mail_view_set_orientation; + class->get_preview_visible = mail_view_get_preview_visible; + class->set_preview_visible = mail_view_set_preview_visible; + class->get_show_deleted = mail_view_get_show_deleted; + class->set_show_deleted = mail_view_set_show_deleted; signals[PANE_CLOSE] = g_signal_new ( "pane-close", @@ -122,21 +248,47 @@ e_mail_view_class_init (EMailViewClass *class) g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); - /** - * EMailView:shell-content - * - * The #EShellContent to which the widget belongs. - **/ + g_object_class_install_property ( + object_class, + PROP_ORIENTATION, + g_param_spec_enum ( + "orientation", + "Orientation", + NULL, + GTK_TYPE_ORIENTATION, + GTK_ORIENTATION_HORIZONTAL, + G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_PREVIEW_VISIBLE, + g_param_spec_boolean ( + "preview-visible", + "Preview Visible", + NULL, + FALSE, + G_PARAM_READWRITE)); + g_object_class_install_property ( object_class, PROP_SHELL_VIEW, g_param_spec_object ( - "shell-content", + "shell-view", + "Shell View", NULL, - NULL, - E_TYPE_SHELL_CONTENT, + E_TYPE_SHELL_VIEW, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property ( + object_class, + PROP_SHOW_DELETED, + g_param_spec_boolean ( + "show-deleted", + "Show Deleted", + NULL, + FALSE, + G_PARAM_READWRITE)); } static void @@ -145,6 +297,14 @@ e_mail_view_init (EMailView *view) view->priv = E_MAIL_VIEW_GET_PRIVATE (view); } +EShellView * +e_mail_view_get_shell_view (EMailView *view) +{ + g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL); + + return view->priv->shell_view; +} + void e_mail_view_update_view_instance (EMailView *view) { @@ -185,17 +345,17 @@ e_mail_view_set_search_strings (EMailView *view, class->set_search_strings (view, search_strings); } -EShellSearchbar * -e_mail_view_get_searchbar (EMailView *view) +GtkOrientation +e_mail_view_get_orientation (EMailView *view) { EMailViewClass *class; - g_return_val_if_fail (E_IS_MAIL_VIEW (view), NULL); + g_return_val_if_fail (E_IS_MAIL_VIEW (view), 0); class = E_MAIL_VIEW_GET_CLASS (view); - g_return_val_if_fail (class->get_searchbar != NULL, NULL); + g_return_val_if_fail (class->get_orientation != NULL, 0); - return class->get_searchbar (view); + return class->get_orientation (view); } void @@ -212,17 +372,17 @@ e_mail_view_set_orientation (EMailView *view, class->set_orientation (view, orientation); } -GtkOrientation -e_mail_view_get_orientation (EMailView *view) +gboolean +e_mail_view_get_preview_visible (EMailView *view) { EMailViewClass *class; - g_return_val_if_fail (E_IS_MAIL_VIEW (view), 0); + g_return_val_if_fail (E_IS_MAIL_VIEW (view), FALSE); class = E_MAIL_VIEW_GET_CLASS (view); - g_return_val_if_fail (class->get_orientation != NULL, 0); + g_return_val_if_fail (class->get_preview_visible != NULL, FALSE); - return class->get_orientation (view); + return class->get_preview_visible (view); } void @@ -240,16 +400,16 @@ e_mail_view_set_preview_visible (EMailView *view, } gboolean -e_mail_view_get_preview_visible (EMailView *view) +e_mail_view_get_show_deleted (EMailView *view) { EMailViewClass *class; g_return_val_if_fail (E_IS_MAIL_VIEW (view), FALSE); class = E_MAIL_VIEW_GET_CLASS (view); - g_return_val_if_fail (class->get_preview_visible != NULL, FALSE); + g_return_val_if_fail (class->get_show_deleted != NULL, FALSE); - return class->get_preview_visible (view); + return class->get_show_deleted (view); } void @@ -265,16 +425,3 @@ e_mail_view_set_show_deleted (EMailView *view, class->set_show_deleted (view, show_deleted); } - -gboolean -e_mail_view_get_show_deleted (EMailView *view) -{ - EMailViewClass *class; - - g_return_val_if_fail (E_IS_MAIL_VIEW (view), FALSE); - - class = E_MAIL_VIEW_GET_CLASS (view); - g_return_val_if_fail (class->get_show_deleted != NULL, FALSE); - - return class->get_show_deleted (view); -} diff --git a/mail/e-mail-view.h b/mail/e-mail-view.h index 5c6e6a42b2..da4e5e2688 100644 --- a/mail/e-mail-view.h +++ b/mail/e-mail-view.h @@ -20,12 +20,12 @@ * */ -#ifndef _E_MAIL_VIEW_H_ -#define _E_MAIL_VIEW_H_ +#ifndef E_MAIL_VIEW_H +#define E_MAIL_VIEW_H -#include <shell/e-shell-content.h> +#include <shell/e-shell-view.h> #include <shell/e-shell-searchbar.h> -#include "widgets/menus/gal-view-instance.h" +#include <menus/gal-view-instance.h> /* Standard GObject macros */ #define E_TYPE_MAIL_VIEW \ @@ -54,39 +54,38 @@ typedef struct _EMailViewPrivate EMailViewPrivate; struct _EMailView { GtkVBox parent; - EMailViewPrivate *priv; - EShellContent *content; EMailView *prev; }; struct _EMailViewClass { GtkVBoxClass parent_class; + /* Signals */ void (*pane_close) (EMailView *view); void (*view_changed) (EMailView *view); void (*open_mail) (EMailView *view, - const gchar *); + const gchar *uid); - EShellSearchbar * - (*get_searchbar) (EMailView *view); + /* Methods */ void (*set_search_strings) (EMailView *view, GSList *search_strings); GalViewInstance * (*get_view_instance) (EMailView *view); void (*update_view_instance) (EMailView *view); + GtkOrientation (*get_orientation) (EMailView *view); void (*set_orientation) (EMailView *view, GtkOrientation orientation); - GtkOrientation (*get_orientation) (EMailView *view); + gboolean (*get_preview_visible) (EMailView *view); void (*set_preview_visible) (EMailView *view, gboolean visible); - gboolean (*get_preview_visible) (EMailView *view); + gboolean (*get_show_deleted) (EMailView *view); void (*set_show_deleted) (EMailView *view, gboolean show_deleted); - gboolean (*get_show_deleted) (EMailView *view); }; GType e_mail_view_get_type (void); +EShellView * e_mail_view_get_shell_view (EMailView *view); void e_mail_view_update_view_instance(EMailView *view); GalViewInstance * e_mail_view_get_view_instance (EMailView *view); @@ -98,11 +97,9 @@ GtkOrientation e_mail_view_get_orientation (EMailView *); void e_mail_view_set_preview_visible (EMailView *view, gboolean visible); gboolean e_mail_view_get_preview_visible (EMailView *view); +gboolean e_mail_view_get_show_deleted (EMailView *view); void e_mail_view_set_show_deleted (EMailView *view, gboolean show_deleted); -gboolean e_mail_view_get_show_deleted (EMailView *view); -EShellSearchbar * - e_mail_view_get_searchbar (EMailView *view); G_END_DECLS diff --git a/mail/em-format-html.c b/mail/em-format-html.c index 302d5afc67..a7e4c03ab5 100644 --- a/mail/em-format-html.c +++ b/mail/em-format-html.c @@ -50,7 +50,7 @@ #include "e-util/e-extensible.h" #include "misc/e-web-view.h" -#include "shell/e-shell.h" +#include <shell/e-shell.h> #include <gtkhtml/gtkhtml.h> #include <gtkhtml/gtkhtml-stream.h> diff --git a/mail/message-list.c b/mail/message-list.c index 0a2a5d446d..8296ea8143 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4120,20 +4120,6 @@ message_list_set_hidedeleted (MessageList *ml, gboolean hidedeleted) } } -#if HAVE_CLUTTER -static void -on_timeline_started (ClutterTimeline *timeline, ClutterActor *actor) -{ - clutter_actor_show(actor); -} - -static void -on_timeline_stopped (ClutterTimeline *timeline, ClutterActor *actor) -{ - clutter_actor_hide(actor); -} -#endif - void message_list_set_search (MessageList *ml, const gchar *search) { @@ -4175,9 +4161,12 @@ message_list_set_search (MessageList *ml, const gchar *search) clutter_behaviour_apply (behaviour, texture); clutter_timeline_set_loop (ml->priv->timeline, TRUE); - g_signal_connect(ml->priv->timeline, "started", G_CALLBACK(on_timeline_started), texture); - g_signal_connect(ml->priv->timeline, "paused", G_CALLBACK(on_timeline_stopped), texture); - //g_signal_connect(ml->priv->timeline, "completed", G_CALLBACK(on_timeline_stopped), texture); + g_signal_connect_swapped ( + ml->priv->timeline, "started", + G_CALLBACK (clutter_actor_show), texture); + g_signal_connect ( + ml->priv->timeline, "paused", + G_CALLBACK (clutter_actor_hide), texture); clutter_timeline_pause (ml->priv->timeline); clutter_timeline_stop (ml->priv->timeline); diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index 6e5168c8a4..7a410bac55 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -89,12 +89,15 @@ reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent) } static void -msc_view_changed (EMailView *view, EMailShellContent *content) +mail_shell_content_view_changed_cb (EMailView *view, + EMailShellContent *content) { + g_object_freeze_notify (G_OBJECT (content)); g_object_notify (G_OBJECT (content), "group-by-threads"); g_object_notify (G_OBJECT (content), "show-deleted"); g_object_notify (G_OBJECT (content), "preview-visible"); g_object_notify (G_OBJECT (content), "orientation"); + g_object_thaw_notify (G_OBJECT (content)); } static void @@ -123,19 +126,24 @@ mail_shell_content_constructed (GObject *object) container = GTK_WIDGET (object); if (e_shell_get_express_mode(e_shell_get_default ())) { - widget = e_mail_notebook_view_new (E_SHELL_CONTENT(object)); - g_signal_connect (widget, "view-changed", G_CALLBACK(msc_view_changed), object); + widget = e_mail_notebook_view_new (shell_view); + g_signal_connect ( + widget, "view-changed", + G_CALLBACK (mail_shell_content_view_changed_cb), + object); } else - widget = e_mail_paned_view_new (E_SHELL_CONTENT(object)); + widget = e_mail_paned_view_new (shell_view); + E_MAIL_SHELL_CONTENT(object)->view = (EMailView *)widget; gtk_container_add (GTK_CONTAINER (container), widget); gtk_widget_show (widget); - g_signal_connect ( E_MAIL_READER(widget), "changed", - G_CALLBACK (reconnect_changed_event), - object); - g_signal_connect ( E_MAIL_READER (widget), "folder-loaded", - G_CALLBACK (reconnect_folder_loaded_event), - object); + + g_signal_connect ( + widget, "changed", + G_CALLBACK (reconnect_changed_event), object); + g_signal_connect ( + widget, "folder-loaded", + G_CALLBACK (reconnect_folder_loaded_event), object); } @@ -422,7 +430,6 @@ e_mail_shell_content_register_type (GTypeModule *type_module) g_type_module_add_interface ( type_module, mail_shell_content_type, GTK_TYPE_ORIENTABLE, &orientable_info); - } GtkWidget * @@ -438,7 +445,18 @@ e_mail_shell_content_new (EShellView *shell_view) EShellSearchbar * e_mail_shell_content_get_searchbar (EMailShellContent *mail_shell_content) { - return e_mail_view_get_searchbar (mail_shell_content->view); + GtkWidget *searchbar; + EShellView *shell_view; + EShellContent *shell_content; + + g_return_val_if_fail ( + E_IS_MAIL_SHELL_CONTENT (mail_shell_content), NULL); + + shell_content = E_SHELL_CONTENT (mail_shell_content); + shell_view = e_shell_content_get_shell_view (shell_content); + searchbar = e_shell_view_get_searchbar (shell_view); + + return E_SHELL_SEARCHBAR (searchbar); } void diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c index 75a272ec73..d11322899d 100644 --- a/modules/mail/e-mail-shell-view-private.c +++ b/modules/mail/e-mail-shell-view-private.c @@ -319,11 +319,11 @@ mail_shell_view_reader_changed_cb (EMailShellView *mail_shell_view, e_mail_shell_view_update_sidebar (mail_shell_view); /* Connect if its not connected already */ - if (g_signal_handler_find (message_list, G_SIGNAL_MATCH_FUNC, - 0, 0, NULL, - mail_shell_view_message_list_key_press_cb, - NULL)) + if (g_signal_handler_find ( + message_list, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, + mail_shell_view_message_list_key_press_cb, NULL)) return; + g_signal_connect_swapped ( message_list, "key-press", G_CALLBACK (mail_shell_view_message_list_key_press_cb), diff --git a/modules/mail/evolution-module-mail.c b/modules/mail/evolution-module-mail.c index cc4e8f41aa..9e9744569b 100644 --- a/modules/mail/evolution-module-mail.c +++ b/modules/mail/evolution-module-mail.c @@ -33,9 +33,6 @@ #include "e-mail-config-format-html.h" #include "e-mail-config-web-view.h" -#include "mail/e-mail-paned-view.h" -#include "mail/e-mail-notebook-view.h" - /* Module Entry Points */ void e_module_load (GTypeModule *type_module); void e_module_unload (GTypeModule *type_module); @@ -54,8 +51,6 @@ e_module_load (GTypeModule *type_module) e_mail_shell_backend_register_type (type_module); e_mail_shell_content_register_type (type_module); - e_mail_paned_view_register_type (type_module); - e_mail_notebook_view_register_type (type_module); e_mail_shell_sidebar_register_type (type_module); e_mail_shell_view_register_type (type_module); |