[evolution] EMailBrowser: Implement EAlertSink.



commit a1dd1897d50f11ab891b2052313d4b17e0d99b5a
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Oct 31 21:19:21 2010 -0400

    EMailBrowser: Implement EAlertSink.

 mail/e-mail-browser.c |  102 ++++++++++++++++++++++++++++++------------------
 1 files changed, 64 insertions(+), 38 deletions(-)
---
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index ed4d4c4..5c8dba2 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -26,9 +26,11 @@
 
 #include "e-util/e-util.h"
 #include "e-util/e-plugin-ui.h"
+#include "e-util/e-alert-dialog.h"
 #include "e-util/gconf-bridge.h"
 #include "shell/e-shell.h"
 #include "shell/e-shell-utils.h"
+#include "widgets/misc/e-alert-bar.h"
 #include "widgets/misc/e-popup-action.h"
 #include "widgets/misc/e-preview-pane.h"
 
@@ -57,6 +59,7 @@ struct _EMailBrowserPrivate {
 	GtkWidget *main_menu;
 	GtkWidget *main_toolbar;
 	GtkWidget *message_list;
+	GtkWidget *alert_bar;
 	GtkWidget *search_bar;
 	GtkWidget *statusbar;
 
@@ -99,6 +102,20 @@ static const gchar *ui =
 "  </menubar>"
 "</ui>";
 
+static void	e_mail_browser_alert_sink_init
+					(EAlertSinkInterface *interface);
+static void	e_mail_browser_reader_init
+					(EMailReaderInterface *interface);
+
+G_DEFINE_TYPE_WITH_CODE (
+	EMailBrowser,
+	e_mail_browser,
+	GTK_TYPE_WINDOW,
+	G_IMPLEMENT_INTERFACE (
+		E_TYPE_ALERT_SINK, e_mail_browser_alert_sink_init)
+	G_IMPLEMENT_INTERFACE (
+		E_TYPE_MAIL_READER, e_mail_browser_reader_init))
+
 static void
 action_close_cb (GtkAction *action,
                  EMailBrowser *browser)
@@ -492,6 +509,11 @@ mail_browser_dispose (GObject *object)
 		priv->message_list = NULL;
 	}
 
+	if (priv->alert_bar != NULL) {
+		g_object_unref (priv->alert_bar);
+		priv->alert_bar = NULL;
+	}
+
 	if (priv->search_bar != NULL) {
 		g_object_unref (priv->search_bar);
 		priv->search_bar = NULL;
@@ -639,6 +661,11 @@ mail_browser_constructed (GObject *object)
 	priv->main_toolbar = g_object_ref (widget);
 	gtk_widget_show (widget);
 
+	widget = e_alert_bar_new ();
+	gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+	priv->alert_bar = g_object_ref (widget);
+	/* EAlertBar controls its own visibility. */
+
 	gtk_widget_show (GTK_WIDGET (web_view));
 
 	widget = e_preview_pane_new (web_view);
@@ -681,6 +708,34 @@ mail_browser_key_press_event (GtkWidget *widget,
 		key_press_event (widget, event);
 }
 
+static void
+mail_browser_submit_alert (EAlertSink *alert_sink,
+                           EAlert *alert)
+{
+	EMailBrowserPrivate *priv;
+	EAlertBar *alert_bar;
+	GtkWidget *dialog;
+	GtkWindow *parent;
+
+	priv = E_MAIL_BROWSER_GET_PRIVATE (alert_sink);
+
+	switch (e_alert_get_message_type (alert)) {
+		case GTK_MESSAGE_INFO:
+		case GTK_MESSAGE_WARNING:
+		case GTK_MESSAGE_ERROR:
+			alert_bar = E_ALERT_BAR (priv->alert_bar);
+			e_alert_bar_add_alert (alert_bar, alert);
+			break;
+
+		default:
+			parent = GTK_WINDOW (alert_sink);
+			dialog = e_alert_dialog_new (parent, alert);
+			gtk_dialog_run (GTK_DIALOG (dialog));
+			gtk_widget_destroy (dialog);
+			break;
+	}
+}
+
 static GtkActionGroup *
 mail_browser_get_action_group (EMailReader *reader)
 {
@@ -790,7 +845,7 @@ mail_browser_show_search_bar (EMailReader *reader)
 }
 
 static void
-mail_browser_class_init (EMailBrowserClass *class)
+e_mail_browser_class_init (EMailBrowserClass *class)
 {
 	GObjectClass *object_class;
 	GtkWidgetClass *widget_class;
@@ -858,7 +913,13 @@ mail_browser_class_init (EMailBrowserClass *class)
 }
 
 static void
-mail_browser_interface_init (EMailReaderInterface *interface)
+e_mail_browser_alert_sink_init (EAlertSinkInterface *interface)
+{
+	interface->submit_alert = mail_browser_submit_alert;
+}
+
+static void
+e_mail_browser_reader_init (EMailReaderInterface *interface)
 {
 	interface->get_action_group = mail_browser_get_action_group;
 	interface->get_backend = mail_browser_get_backend;
@@ -872,7 +933,7 @@ mail_browser_interface_init (EMailReaderInterface *interface)
 }
 
 static void
-mail_browser_init (EMailBrowser *browser)
+e_mail_browser_init (EMailBrowser *browser)
 {
 	GConfBridge *bridge;
 	const gchar *prefix;
@@ -889,41 +950,6 @@ mail_browser_init (EMailBrowser *browser)
 	gtk_window_set_title (GTK_WINDOW (browser), _("Evolution"));
 }
 
-GType
-e_mail_browser_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0)) {
-		static const GTypeInfo type_info = {
-			sizeof (EMailBrowserClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) mail_browser_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,  /* class_data */
-			sizeof (EMailBrowser),
-			0,     /* n_preallocs */
-			(GInstanceInitFunc) mail_browser_init,
-			NULL   /* value_table */
-		};
-
-		static const GInterfaceInfo interface_info = {
-			(GInterfaceInitFunc) mail_browser_interface_init,
-			(GInterfaceFinalizeFunc) NULL,
-			NULL   /* interface_data */
-		};
-
-		type = g_type_register_static (
-			GTK_TYPE_WINDOW, "EMailBrowser", &type_info, 0);
-
-		g_type_add_interface_static (
-			type, E_TYPE_MAIL_READER, &interface_info);
-	}
-
-	return type;
-}
-
 GtkWidget *
 e_mail_browser_new (EMailBackend *backend)
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]