aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/e-attachment-handler.c114
-rw-r--r--widgets/misc/e-attachment-handler.h5
-rw-r--r--widgets/misc/e-attachment-icon-view.c7
-rw-r--r--widgets/misc/e-attachment-tree-view.c5
-rw-r--r--widgets/misc/e-attachment-view.c47
-rw-r--r--widgets/misc/e-attachment-view.h6
6 files changed, 61 insertions, 123 deletions
diff --git a/widgets/misc/e-attachment-handler.c b/widgets/misc/e-attachment-handler.c
index 947ae666d9..0b9c057b65 100644
--- a/widgets/misc/e-attachment-handler.c
+++ b/widgets/misc/e-attachment-handler.c
@@ -26,113 +26,53 @@
((obj), E_TYPE_ATTACHMENT_HANDLER, EAttachmentHandlerPrivate))
struct _EAttachmentHandlerPrivate {
- gpointer view; /* weak pointer */
-};
-
-enum {
- PROP_0,
- PROP_VIEW
+ gpointer placeholder;
};
G_DEFINE_TYPE (
EAttachmentHandler,
e_attachment_handler,
- G_TYPE_OBJECT)
-
-static void
-attachment_handler_set_view (EAttachmentHandler *handler,
- EAttachmentView *view)
-{
- g_return_if_fail (handler->priv->view == NULL);
-
- handler->priv->view = view;
-
- g_object_add_weak_pointer (
- G_OBJECT (view), &handler->priv->view);
-}
-
-static void
-attachment_handler_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_VIEW:
- attachment_handler_set_view (
- E_ATTACHMENT_HANDLER (object),
- g_value_get_object (value));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-attachment_handler_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_VIEW:
- g_value_set_object (
- value, e_attachment_handler_get_view (
- E_ATTACHMENT_HANDLER (object)));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
+ E_TYPE_EXTENSION)
static void
attachment_handler_constructed (GObject *object)
{
- /* This allows subclasses to chain up safely since GObject
- * does not implement this method, and we might want to do
- * something here in the future. */
-}
+ EAttachmentView *view;
+ EAttachmentHandler *handler;
+ GdkDragAction drag_actions;
+ GtkTargetList *target_list;
+ const GtkTargetEntry *targets;
+ guint n_targets;
-static void
-attachment_handler_dispose (GObject *object)
-{
- EAttachmentHandlerPrivate *priv;
+ handler = E_ATTACHMENT_HANDLER (object);
+ drag_actions = e_attachment_handler_get_drag_actions (handler);
+ targets = e_attachment_handler_get_target_table (handler, &n_targets);
+
+ view = e_attachment_handler_get_view (handler);
- priv = E_ATTACHMENT_HANDLER_GET_PRIVATE (object);
+ target_list = e_attachment_view_get_target_list (view);
+ gtk_target_list_add_table (target_list, targets, n_targets);
- if (priv->view != NULL) {
- g_object_remove_weak_pointer (
- G_OBJECT (priv->view), &priv->view);
- priv->view = NULL;
- }
+ e_attachment_view_add_drag_actions (view, drag_actions);
- /* Chain up to parent's dispose() method. */
- G_OBJECT_CLASS (e_attachment_handler_parent_class)->dispose (object);
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_attachment_handler_parent_class)->
+ constructed (object);
}
static void
e_attachment_handler_class_init (EAttachmentHandlerClass *class)
{
GObjectClass *object_class;
+ EExtensionClass *extension_class;
g_type_class_add_private (class, sizeof (EAttachmentHandlerPrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->set_property = attachment_handler_set_property;
- object_class->get_property = attachment_handler_get_property;
object_class->constructed = attachment_handler_constructed;
- object_class->dispose = attachment_handler_dispose;
-
- g_object_class_install_property (
- object_class,
- PROP_VIEW,
- g_param_spec_object (
- "view",
- "View",
- NULL,
- E_TYPE_ATTACHMENT_VIEW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+
+ extension_class = E_EXTENSION_CLASS (class);
+ extension_class->extensible_type = E_TYPE_ATTACHMENT_VIEW;
}
static void
@@ -144,9 +84,15 @@ e_attachment_handler_init (EAttachmentHandler *handler)
EAttachmentView *
e_attachment_handler_get_view (EAttachmentHandler *handler)
{
+ EExtensible *extensible;
+
+ /* This is purely a convenience function. */
+
g_return_val_if_fail (E_IS_ATTACHMENT_HANDLER (handler), NULL);
- return E_ATTACHMENT_VIEW (handler->priv->view);
+ extensible = e_extension_get_extensible (E_EXTENSION (handler));
+
+ return E_ATTACHMENT_VIEW (extensible);
}
GdkDragAction
diff --git a/widgets/misc/e-attachment-handler.h b/widgets/misc/e-attachment-handler.h
index e7e52c8c18..e85cd9b2ee 100644
--- a/widgets/misc/e-attachment-handler.h
+++ b/widgets/misc/e-attachment-handler.h
@@ -22,6 +22,7 @@
#ifndef E_ATTACHMENT_HANDLER_H
#define E_ATTACHMENT_HANDLER_H
+#include <e-util/e-extension.h>
#include <misc/e-attachment-view.h>
/* Standard GObject macros */
@@ -50,12 +51,12 @@ typedef struct _EAttachmentHandlerClass EAttachmentHandlerClass;
typedef struct _EAttachmentHandlerPrivate EAttachmentHandlerPrivate;
struct _EAttachmentHandler {
- GObject parent;
+ EExtension parent;
EAttachmentHandlerPrivate *priv;
};
struct _EAttachmentHandlerClass {
- GObjectClass parent_class;
+ EExtensionClass parent_class;
GdkDragAction (*get_drag_actions) (EAttachmentHandler *handler);
const GtkTargetEntry *
diff --git a/widgets/misc/e-attachment-icon-view.c b/widgets/misc/e-attachment-icon-view.c
index 5c874f8bca..9ec8fce83d 100644
--- a/widgets/misc/e-attachment-icon-view.c
+++ b/widgets/misc/e-attachment-icon-view.c
@@ -22,6 +22,7 @@
#include "e-attachment-icon-view.h"
#include <glib/gi18n.h>
+#include <e-util/e-extensible.h>
#include "e-attachment.h"
#include "e-attachment-store.h"
@@ -53,7 +54,9 @@ G_DEFINE_TYPE_WITH_CODE (
GTK_TYPE_ICON_VIEW,
G_IMPLEMENT_INTERFACE (
E_TYPE_ATTACHMENT_VIEW,
- e_attachment_icon_view_interface_init))
+ e_attachment_icon_view_interface_init)
+ G_IMPLEMENT_INTERFACE (
+ E_TYPE_EXTENSIBLE, NULL))
void
e_attachment_icon_view_set_default_icon_size (gint size)
@@ -522,6 +525,8 @@ e_attachment_icon_view_init (EAttachmentIconView *icon_view)
gtk_cell_layout_add_attribute (
cell_layout, renderer, "visible",
E_ATTACHMENT_STORE_COLUMN_SAVING);
+
+ e_extensible_load_extensions (E_EXTENSIBLE (icon_view));
}
static void
diff --git a/widgets/misc/e-attachment-tree-view.c b/widgets/misc/e-attachment-tree-view.c
index c404920d33..a2210db5a6 100644
--- a/widgets/misc/e-attachment-tree-view.c
+++ b/widgets/misc/e-attachment-tree-view.c
@@ -22,6 +22,7 @@
#include "e-attachment-tree-view.h"
#include <glib/gi18n.h>
+#include <e-util/e-extensible.h>
#include "e-attachment.h"
#include "e-attachment-store.h"
@@ -51,7 +52,9 @@ G_DEFINE_TYPE_WITH_CODE (
GTK_TYPE_TREE_VIEW,
G_IMPLEMENT_INTERFACE (
E_TYPE_ATTACHMENT_VIEW,
- e_attachment_tree_view_interface_init))
+ e_attachment_tree_view_interface_init)
+ G_IMPLEMENT_INTERFACE (
+ E_TYPE_EXTENSIBLE, NULL))
static void
attachment_tree_view_set_property (GObject *object,
diff --git a/widgets/misc/e-attachment-view.c b/widgets/misc/e-attachment-view.c
index 06ec2e5d2c..a80fe32ec0 100644
--- a/widgets/misc/e-attachment-view.c
+++ b/widgets/misc/e-attachment-view.c
@@ -778,27 +778,7 @@ attachment_view_update_actions (EAttachmentView *view)
}
static void
-attachment_view_add_handler (GType type,
- EAttachmentView *view)
-{
- EAttachmentViewPrivate *priv;
- EAttachmentHandler *handler;
- const GtkTargetEntry *targets;
- guint n_targets;
-
- priv = e_attachment_view_get_private (view);
-
- handler = g_object_new (type, "view", view, NULL);
-
- targets = e_attachment_handler_get_target_table (handler, &n_targets);
- gtk_target_list_add_table (priv->target_list, targets, n_targets);
- priv->drag_actions |= e_attachment_handler_get_drag_actions (handler);
-
- g_ptr_array_add (priv->handlers, handler);
-}
-
-static void
-attachment_view_init_handlers (EAttachmentView *view)
+attachment_view_init_drag_dest (EAttachmentView *view)
{
EAttachmentViewPrivate *priv;
GtkTargetList *target_list;
@@ -812,13 +792,8 @@ attachment_view_init_handlers (EAttachmentView *view)
e_target_list_add_calendar_targets (target_list, 0);
e_target_list_add_directory_targets (target_list, 0);
- priv->handlers = g_ptr_array_new ();
priv->target_list = target_list;
priv->drag_actions = GDK_ACTION_COPY;
-
- e_type_traverse (
- E_TYPE_ATTACHMENT_HANDLER, (ETypeFunc)
- attachment_view_add_handler, view);
}
static void
@@ -904,7 +879,7 @@ e_attachment_view_init (EAttachmentView *view)
if (error != NULL)
g_error ("%s", error->message);
- attachment_view_init_handlers (view);
+ attachment_view_init_drag_dest (view);
e_attachment_view_drag_source_set (view);
@@ -934,9 +909,6 @@ e_attachment_view_dispose (EAttachmentView *view)
priv = e_attachment_view_get_private (view);
- g_ptr_array_foreach (priv->handlers, (GFunc) g_object_unref, NULL);
- g_ptr_array_set_size (priv->handlers, 0);
-
if (priv->target_list != NULL) {
gtk_target_list_unref (priv->target_list);
priv->target_list = NULL;
@@ -955,8 +927,6 @@ e_attachment_view_finalize (EAttachmentView *view)
priv = e_attachment_view_get_private (view);
- g_ptr_array_free (priv->handlers, TRUE);
-
g_list_foreach (priv->event_list, (GFunc) gdk_event_free, NULL);
g_list_free (priv->event_list);
@@ -1073,6 +1043,19 @@ e_attachment_view_get_drag_actions (EAttachmentView *view)
return priv->drag_actions;
}
+void
+e_attachment_view_add_drag_actions (EAttachmentView *view,
+ GdkDragAction drag_actions)
+{
+ EAttachmentViewPrivate *priv;
+
+ g_return_if_fail (E_IS_ATTACHMENT_VIEW (view));
+
+ priv = e_attachment_view_get_private (view);
+
+ priv->drag_actions |= drag_actions;
+}
+
GList *
e_attachment_view_get_selected_attachments (EAttachmentView *view)
{
diff --git a/widgets/misc/e-attachment-view.h b/widgets/misc/e-attachment-view.h
index b95c84bb5b..164413221c 100644
--- a/widgets/misc/e-attachment-view.h
+++ b/widgets/misc/e-attachment-view.h
@@ -92,9 +92,6 @@ struct _EAttachmentViewInterface {
struct _EAttachmentViewPrivate {
- /* Attachment Handlers */
- GPtrArray *handlers;
-
/* Drag Destination */
GtkTargetList *target_list;
GdkDragAction drag_actions;
@@ -133,6 +130,9 @@ GtkTargetList * e_attachment_view_get_target_list
(EAttachmentView *view);
GdkDragAction e_attachment_view_get_drag_actions
(EAttachmentView *view);
+void e_attachment_view_add_drag_actions
+ (EAttachmentView *view,
+ GdkDragAction drag_actions);
GList * e_attachment_view_get_selected_attachments
(EAttachmentView *view);
void e_attachment_view_open_path (EAttachmentView *view,