From 75de89ef04f0bd69fe5d33919e281bdb8c30bd9e Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Tue, 13 Jul 2010 13:01:11 +0530 Subject: Make the update-actions work across tabs. --- mail/e-mail-notebook-view.c | 31 +++++++++++++++++++++++++++++++ mail/e-mail-reader.c | 36 ++++++++++++++++++++++++++++++++++++ modules/mail/e-mail-shell-content.c | 18 ++++++++++++++++++ 3 files changed, 85 insertions(+) diff --git a/mail/e-mail-notebook-view.c b/mail/e-mail-notebook-view.c index 16353cdb1d..5fa6c6844f 100644 --- a/mail/e-mail-notebook-view.c +++ b/mail/e-mail-notebook-view.c @@ -62,6 +62,16 @@ e_mail_notebook_view_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +mnv_page_changed (GtkNotebook *book, GtkNotebookPage *page, + guint page_num, EMailNotebookView *view) +{ + EMailView *mview = gtk_notebook_get_nth_page (book, page_num); + + view->priv->current_view = mview; + g_signal_emit_by_name (view, "changed"); +} + static void mail_notebook_view_constructed (GObject *object) { @@ -77,6 +87,8 @@ mail_notebook_view_constructed (GObject *object) gtk_widget_show (widget); gtk_box_pack_start (GTK_BOX(container), widget, TRUE, TRUE, 0); + 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")); @@ -221,6 +233,18 @@ emnv_get_page_num (EMailNotebookView *view, g_warn_if_reached (); } +static void +reconnect_changed_event (EMailReader *child, EMailReader *parent) +{ + g_signal_emit_by_name (parent, "changed"); +} + +static void +reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent) +{ + g_signal_emit_by_name (parent, "folder-loaded"); +} + static void mail_notebook_view_set_folder (EMailReader *reader, CamelFolder *folder, @@ -244,11 +268,18 @@ mail_notebook_view_set_folder (EMailReader *reader, 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", + G_CALLBACK (reconnect_changed_event), + reader); + g_signal_connect ( E_MAIL_READER (new_view), "folder-loaded", + G_CALLBACK (reconnect_folder_loaded_event), + reader); } } diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 71e049bade..a9ff239dd4 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3001,9 +3001,45 @@ e_mail_reader_init (EMailReader *reader) void e_mail_reader_init_private (EMailReader *reader) { + EMFormatHTML *formatter; + EWebView *web_view; + GtkWidget *message_list; + + g_return_if_fail (E_IS_MAIL_READER (reader)); + + formatter = e_mail_reader_get_formatter (reader); + message_list = e_mail_reader_get_message_list (reader); + + web_view = em_format_html_get_web_view (formatter); quark_private = g_quark_from_static_string ("EMailReader-private"); + /* Connect signals. */ + + g_signal_connect_swapped ( + web_view, "key-press-event", + G_CALLBACK (mail_reader_key_press_event_cb), reader); + + g_signal_connect_swapped ( + message_list, "message-selected", + G_CALLBACK (mail_reader_message_selected_cb), reader); + + g_signal_connect_swapped ( + message_list, "message-list-built", + G_CALLBACK (mail_reader_emit_folder_loaded), reader); + + g_signal_connect_swapped ( + message_list, "double-click", + G_CALLBACK (mail_reader_double_click_cb), reader); + + g_signal_connect_swapped ( + message_list, "key-press", + G_CALLBACK (mail_reader_key_press_cb), reader); + + g_signal_connect_swapped ( + message_list, "selection-change", + G_CALLBACK (e_mail_reader_changed), reader); + g_object_set_qdata_full ( G_OBJECT (reader), quark_private, g_slice_new0 (EMailReaderPrivate), diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index 3cdcee2d01..acc2e4906d 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -69,6 +69,18 @@ mail_shell_content_dispose (GObject *object) G_OBJECT_CLASS (parent_class)->dispose (object); } +static void +reconnect_changed_event (EMailReader *child, EMailReader *parent) +{ + g_signal_emit_by_name (parent, "changed"); +} + +static void +reconnect_folder_loaded_event (EMailReader *child, EMailReader *parent) +{ + g_signal_emit_by_name (parent, "folder-loaded"); +} + static void mail_shell_content_constructed (GObject *object) { @@ -98,6 +110,12 @@ mail_shell_content_constructed (GObject *object) 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); } -- cgit v1.2.3