diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2009-01-08 02:23:46 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2009-01-08 02:23:46 +0800 |
commit | 8d8e4ac1c23905892a42b779188c852fdead7f5f (patch) | |
tree | 01609ceef7151d75f81fdc8762ac6c25215e8a51 /mail/e-mail-browser.c | |
parent | 13a0edc3d27cce65a0f720e98516f7ab902ad0fc (diff) | |
download | gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar.gz gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar.bz2 gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar.lz gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar.xz gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.tar.zst gsoc2013-evolution-8d8e4ac1c23905892a42b779188c852fdead7f5f.zip |
Tweak the EShell API.
Disable File -> Close Window when there's only one window.
Replace EMMessageBrowser with EMailBrowser.
svn path=/branches/kill-bonobo/; revision=37009
Diffstat (limited to 'mail/e-mail-browser.c')
-rw-r--r-- | mail/e-mail-browser.c | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c index 13647c1f62..e6c1072304 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -29,6 +29,7 @@ #include "e-util/gconf-bridge.h" #include "mail/e-mail-reader.h" +#include "mail/e-mail-reader-utils.h" #include "mail/e-mail-shell-module.h" #include "mail/em-folder-tree-model.h" #include "mail/em-format-html-display.h" @@ -78,7 +79,7 @@ static void action_close_cb (GtkAction *action, EMailBrowser *browser) { - gtk_widget_destroy (GTK_WIDGET (browser)); + e_mail_browser_close (browser); } static GtkActionEntry mail_browser_entries[] = { @@ -187,6 +188,35 @@ mail_browser_connect_proxy_cb (EMailBrowser *browser, } static void +mail_browser_message_selected_cb (EMailBrowser *browser, + const gchar *uid) +{ + EMFormatHTMLDisplay *html_display; + MessageList *message_list; + CamelMessageInfo *info; + EMailReader *reader; + + if (uid == NULL) + return; + + reader = E_MAIL_READER (browser); + html_display = e_mail_reader_get_html_display (reader); + message_list = e_mail_reader_get_message_list (reader); + info = camel_folder_get_message_info (message_list->folder, uid); + + if (info == NULL) + return; + + gtk_window_set_title ( + GTK_WINDOW (browser), + camel_message_info_subject (info)); + gtk_widget_grab_focus ( + GTK_WIDGET (((EMFormatHTML *) html_display)->html)); + + camel_folder_free_message_info (message_list->folder, info); +} + +static void mail_browser_set_shell_module (EMailBrowser *browser, EShellModule *shell_module) { @@ -367,6 +397,20 @@ mail_browser_constructed (GObject *object) gtk_widget_show (widget); } +static gboolean +mail_browser_key_press_event (GtkWidget *widget, + GdkEventKey *event) +{ + if (event->keyval == GDK_Escape) { + e_mail_browser_close (E_MAIL_BROWSER (widget)); + return TRUE; + } + + /* Chain up to parent's key_press_event() method. */ + return GTK_WIDGET_CLASS (parent_class)-> + key_press_event (widget, event); +} + static GtkActionGroup * mail_browser_get_action_group (EMailReader *reader) { @@ -419,9 +463,45 @@ mail_browser_get_window (EMailReader *reader) } static void +mail_browser_set_message (EMailReader *reader, + const gchar *uid, + gboolean mark_read) +{ + EMailReaderIface *iface; + MessageList *message_list; + CamelMessageInfo *info; + CamelFolder *folder; + + /* Chain up to parent's set_message() method. */ + iface = g_type_default_interface_peek (E_TYPE_MAIL_READER); + iface->set_message (reader, uid, mark_read); + + if (uid == NULL) { + e_mail_browser_close (E_MAIL_BROWSER (reader)); + return; + } + + message_list = e_mail_reader_get_message_list (reader); + + folder = message_list->folder; + info = camel_folder_get_message_info (folder, uid); + + if (info != NULL) { + gtk_window_set_title ( + GTK_WINDOW (reader), + camel_message_info_subject (info)); + camel_folder_free_message_info (folder, info); + } + + if (mark_read) + e_mail_reader_mark_as_read (reader, uid); +} + +static void mail_browser_class_init (EMailBrowserClass *class) { GObjectClass *object_class; + GtkWidgetClass *widget_class; parent_class = g_type_class_peek_parent (class); g_type_class_add_private (class, sizeof (EMailBrowserPrivate)); @@ -432,6 +512,9 @@ mail_browser_class_init (EMailBrowserClass *class) object_class->dispose = mail_browser_dispose; object_class->constructed = mail_browser_constructed; + widget_class = GTK_WIDGET_CLASS (class); + widget_class->key_press_event = mail_browser_key_press_event; + g_object_class_install_property ( object_class, PROP_SHELL_MODULE, @@ -453,6 +536,7 @@ mail_browser_iface_init (EMailReaderIface *iface) iface->get_message_list = mail_browser_get_message_list; iface->get_shell_module = mail_browser_get_shell_module; iface->get_window = mail_browser_get_window; + iface->set_message = mail_browser_set_message; } static void @@ -473,9 +557,15 @@ mail_browser_init (EMailBrowser *browser) browser->priv->message_list = message_list_new (); g_object_ref_sink (browser->priv->message_list); + g_signal_connect_swapped ( + browser->priv->message_list, "message-selected", + G_CALLBACK (mail_browser_message_selected_cb), browser); + bridge = gconf_bridge_get (); prefix = "/apps/evolution/mail/mail_browser"; gconf_bridge_bind_window_size (bridge, prefix, GTK_WINDOW (browser)); + + gtk_window_set_title (GTK_WINDOW (browser), _("Evolution")); } GType @@ -523,6 +613,14 @@ e_mail_browser_new (EShellModule *shell_module) "shell-module", shell_module, NULL); } +void +e_mail_browser_close (EMailBrowser *browser) +{ + g_return_if_fail (E_IS_MAIL_BROWSER (browser)); + + gtk_widget_destroy (GTK_WIDGET (browser)); +} + GtkUIManager * e_mail_browser_get_ui_manager (EMailBrowser *browser) { |