EMFolderTree: Add an EAlertSink property.
Now EMFolderTree has access to both an EShellBackend and an EAlertSink; everything it needs to build and submit EActivity instances.
This commit is contained in:
@ -473,12 +473,16 @@ e_mail_sidebar_get_type (void)
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
e_mail_sidebar_new (EMailBackend *backend)
|
||||
e_mail_sidebar_new (EMailBackend *backend,
|
||||
EAlertSink *alert_sink)
|
||||
{
|
||||
g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL);
|
||||
g_return_val_if_fail (E_IS_ALERT_SINK (alert_sink), NULL);
|
||||
|
||||
return g_object_new (
|
||||
E_TYPE_MAIL_SIDEBAR, "backend", backend, NULL);
|
||||
E_TYPE_MAIL_SIDEBAR,
|
||||
"alert-sink", alert_sink,
|
||||
"backend", backend, NULL);
|
||||
}
|
||||
|
||||
GKeyFile *
|
||||
|
||||
@ -76,7 +76,8 @@ struct _EMailSidebarClass {
|
||||
};
|
||||
|
||||
GType e_mail_sidebar_get_type (void);
|
||||
GtkWidget * e_mail_sidebar_new (EMailBackend *backend);
|
||||
GtkWidget * e_mail_sidebar_new (EMailBackend *backend,
|
||||
EAlertSink *alert_sink);
|
||||
GKeyFile * e_mail_sidebar_get_key_file (EMailSidebar *sidebar);
|
||||
void e_mail_sidebar_set_key_file (EMailSidebar *sidebar,
|
||||
GKeyFile *key_file);
|
||||
|
||||
@ -47,10 +47,14 @@ enum {
|
||||
PROP_BACKEND
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (
|
||||
/* XXX EMFolderSelector is an EAlertSink, but it just uses the default
|
||||
* message dialog implementation. We should do something nicer. */
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (
|
||||
EMFolderSelector,
|
||||
em_folder_selector,
|
||||
GTK_TYPE_DIALOG)
|
||||
GTK_TYPE_DIALOG,
|
||||
G_IMPLEMENT_INTERFACE (E_TYPE_ALERT_SINK, NULL))
|
||||
|
||||
static void
|
||||
folder_selector_set_backend (EMFolderSelector *emfs,
|
||||
@ -286,7 +290,7 @@ folder_selector_construct (EMFolderSelector *emfs,
|
||||
|
||||
container = widget;
|
||||
|
||||
widget = em_folder_tree_new (backend);
|
||||
widget = em_folder_tree_new (backend, E_ALERT_SINK (emfs));
|
||||
emu_restore_folder_tree_state (EM_FOLDER_TREE (widget));
|
||||
gtk_container_add (GTK_CONTAINER (widget), widget);
|
||||
emfs->priv->folder_tree = EM_FOLDER_TREE (widget);
|
||||
|
||||
@ -78,6 +78,7 @@ struct _selected_uri {
|
||||
|
||||
struct _EMFolderTreePrivate {
|
||||
EMailBackend *backend;
|
||||
EAlertSink *alert_sink;
|
||||
|
||||
/* selected_uri structures of each path pending selection. */
|
||||
GSList *select_uris;
|
||||
@ -119,6 +120,7 @@ struct _EMFolderTreePrivate {
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_ALERT_SINK,
|
||||
PROP_BACKEND,
|
||||
PROP_COPY_TARGET_LIST,
|
||||
PROP_ELLIPSIZE,
|
||||
@ -718,6 +720,16 @@ exit:
|
||||
g_list_free (list);
|
||||
}
|
||||
|
||||
static void
|
||||
folder_tree_set_alert_sink (EMFolderTree *folder_tree,
|
||||
EAlertSink *alert_sink)
|
||||
{
|
||||
g_return_if_fail (E_IS_ALERT_SINK (alert_sink));
|
||||
g_return_if_fail (folder_tree->priv->alert_sink == NULL);
|
||||
|
||||
folder_tree->priv->alert_sink = g_object_ref (alert_sink);
|
||||
}
|
||||
|
||||
static void
|
||||
folder_tree_set_backend (EMFolderTree *folder_tree,
|
||||
EMailBackend *backend)
|
||||
@ -765,6 +777,12 @@ folder_tree_set_property (GObject *object,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id) {
|
||||
case PROP_ALERT_SINK:
|
||||
folder_tree_set_alert_sink (
|
||||
EM_FOLDER_TREE (object),
|
||||
g_value_get_object (value));
|
||||
return;
|
||||
|
||||
case PROP_BACKEND:
|
||||
folder_tree_set_backend (
|
||||
EM_FOLDER_TREE (object),
|
||||
@ -788,6 +806,13 @@ folder_tree_get_property (GObject *object,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
switch (property_id) {
|
||||
case PROP_ALERT_SINK:
|
||||
g_value_set_object (
|
||||
value,
|
||||
em_folder_tree_get_alert_sink (
|
||||
EM_FOLDER_TREE (object)));
|
||||
return;
|
||||
|
||||
case PROP_BACKEND:
|
||||
g_value_set_object (
|
||||
value,
|
||||
@ -847,6 +872,11 @@ folder_tree_dispose (GObject *object)
|
||||
priv->autoexpand_id = 0;
|
||||
}
|
||||
|
||||
if (priv->alert_sink != NULL) {
|
||||
g_object_unref (priv->alert_sink);
|
||||
priv->alert_sink = NULL;
|
||||
}
|
||||
|
||||
if (priv->backend != NULL) {
|
||||
g_object_unref (priv->backend);
|
||||
priv->backend = NULL;
|
||||
@ -1105,6 +1135,18 @@ folder_tree_class_init (EMFolderTreeClass *class)
|
||||
tree_view_class->test_collapse_row = folder_tree_test_collapse_row;
|
||||
tree_view_class->row_expanded = folder_tree_row_expanded;
|
||||
|
||||
g_object_class_install_property (
|
||||
object_class,
|
||||
PROP_ALERT_SINK,
|
||||
g_param_spec_object (
|
||||
"alert-sink",
|
||||
NULL,
|
||||
NULL,
|
||||
E_TYPE_ALERT_SINK,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_property (
|
||||
object_class,
|
||||
PROP_BACKEND,
|
||||
@ -1114,7 +1156,8 @@ folder_tree_class_init (EMFolderTreeClass *class)
|
||||
NULL,
|
||||
E_TYPE_MAIL_BACKEND,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/* Inherited from ESelectableInterface */
|
||||
g_object_class_override_property (
|
||||
@ -1704,12 +1747,14 @@ em_folder_tree_get_type (void)
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
em_folder_tree_new (EMailBackend *backend)
|
||||
em_folder_tree_new (EMailBackend *backend,
|
||||
EAlertSink *alert_sink)
|
||||
{
|
||||
EMailSession *session;
|
||||
const gchar *data_dir;
|
||||
|
||||
g_return_val_if_fail (E_IS_MAIL_BACKEND (backend), NULL);
|
||||
g_return_val_if_fail (E_IS_ALERT_SINK (alert_sink), NULL);
|
||||
|
||||
session = e_mail_backend_get_session (backend);
|
||||
data_dir = e_shell_backend_get_data_dir (E_SHELL_BACKEND (backend));
|
||||
@ -1717,7 +1762,9 @@ em_folder_tree_new (EMailBackend *backend)
|
||||
e_mail_store_init (session, data_dir);
|
||||
|
||||
return g_object_new (
|
||||
EM_TYPE_FOLDER_TREE, "backend", backend, NULL);
|
||||
EM_TYPE_FOLDER_TREE,
|
||||
"alert-sink", alert_sink,
|
||||
"backend", backend, NULL);
|
||||
}
|
||||
|
||||
PangoEllipsizeMode
|
||||
@ -1742,6 +1789,14 @@ em_folder_tree_set_ellipsize (EMFolderTree *folder_tree,
|
||||
g_object_notify (G_OBJECT (folder_tree), "ellipsize");
|
||||
}
|
||||
|
||||
EAlertSink *
|
||||
em_folder_tree_get_alert_sink (EMFolderTree *folder_tree)
|
||||
{
|
||||
g_return_val_if_fail (EM_IS_FOLDER_TREE (folder_tree), NULL);
|
||||
|
||||
return folder_tree->priv->alert_sink;
|
||||
}
|
||||
|
||||
EMailBackend *
|
||||
em_folder_tree_get_backend (EMFolderTree *folder_tree)
|
||||
{
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#define EM_FOLDER_TREE_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <e-util/e-alert-sink.h>
|
||||
#include <mail/e-mail-backend.h>
|
||||
#include <mail/em-folder-tree-model.h>
|
||||
|
||||
@ -89,11 +90,13 @@ struct _EMFolderTreeClass {
|
||||
};
|
||||
|
||||
GType em_folder_tree_get_type (void);
|
||||
GtkWidget * em_folder_tree_new (EMailBackend *backend);
|
||||
GtkWidget * em_folder_tree_new (EMailBackend *backend,
|
||||
EAlertSink *alert_sink);
|
||||
PangoEllipsizeMode
|
||||
em_folder_tree_get_ellipsize (EMFolderTree *folder_tree);
|
||||
void em_folder_tree_set_ellipsize (EMFolderTree *folder_tree,
|
||||
PangoEllipsizeMode ellipsize);
|
||||
EAlertSink * em_folder_tree_get_alert_sink (EMFolderTree *folder_tree);
|
||||
EMailBackend * em_folder_tree_get_backend (EMFolderTree *folder_tree);
|
||||
void em_folder_tree_enable_drag_and_drop
|
||||
(EMFolderTree *folder_tree);
|
||||
|
||||
@ -149,7 +149,9 @@ mail_shell_sidebar_constructed (GObject *object)
|
||||
|
||||
container = widget;
|
||||
|
||||
widget = e_mail_sidebar_new (E_MAIL_BACKEND (shell_backend));
|
||||
widget = e_mail_sidebar_new (
|
||||
E_MAIL_BACKEND (shell_backend),
|
||||
E_ALERT_SINK (shell_sidebar));
|
||||
gtk_container_add (GTK_CONTAINER (container), widget);
|
||||
mail_shell_sidebar->priv->folder_tree = g_object_ref (widget);
|
||||
gtk_widget_show (widget);
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
|
||||
#include "e-shell-sidebar.h"
|
||||
|
||||
#include <e-util/e-alert-sink.h>
|
||||
#include <e-util/e-extensible.h>
|
||||
#include <e-util/e-unicode.h>
|
||||
#include <shell/e-shell-view.h>
|
||||
@ -50,10 +51,16 @@ enum {
|
||||
PROP_SHELL_VIEW
|
||||
};
|
||||
|
||||
/* Forward Declarations */
|
||||
static void e_shell_sidebar_alert_sink_init
|
||||
(EAlertSinkInterface *interface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (
|
||||
EShellSidebar,
|
||||
e_shell_sidebar,
|
||||
GTK_TYPE_BIN,
|
||||
G_IMPLEMENT_INTERFACE (
|
||||
E_TYPE_ALERT_SINK, e_shell_sidebar_alert_sink_init)
|
||||
G_IMPLEMENT_INTERFACE (
|
||||
E_TYPE_EXTENSIBLE, NULL))
|
||||
|
||||
@ -299,6 +306,25 @@ shell_sidebar_forall (GtkContainer *container,
|
||||
container, include_internals, callback, callback_data);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_sidebar_submit_alert (EAlertSink *alert_sink,
|
||||
EAlert *alert)
|
||||
{
|
||||
EShellView *shell_view;
|
||||
EShellContent *shell_content;
|
||||
EShellSidebar *shell_sidebar;
|
||||
|
||||
/* EShellSidebar is a proxy alert sink. Forward the alert
|
||||
* to the EShellContent widget for display to the user. */
|
||||
|
||||
shell_sidebar = E_SHELL_SIDEBAR (alert_sink);
|
||||
shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
|
||||
shell_content = e_shell_view_get_shell_content (shell_view);
|
||||
|
||||
alert_sink = E_ALERT_SINK (shell_content);
|
||||
e_alert_sink_submit_alert (alert_sink, alert);
|
||||
}
|
||||
|
||||
static void
|
||||
e_shell_sidebar_class_init (EShellSidebarClass *class)
|
||||
{
|
||||
@ -386,6 +412,12 @@ e_shell_sidebar_class_init (EShellSidebarClass *class)
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
}
|
||||
|
||||
static void
|
||||
e_shell_sidebar_alert_sink_init (EAlertSinkInterface *interface)
|
||||
{
|
||||
interface->submit_alert = shell_sidebar_submit_alert;
|
||||
}
|
||||
|
||||
static void
|
||||
e_shell_sidebar_init (EShellSidebar *shell_sidebar)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user