diff options
-rw-r--r-- | widgets/misc/e-attachment-handler.c | 114 | ||||
-rw-r--r-- | widgets/misc/e-attachment-handler.h | 5 | ||||
-rw-r--r-- | widgets/misc/e-attachment-icon-view.c | 7 | ||||
-rw-r--r-- | widgets/misc/e-attachment-tree-view.c | 5 | ||||
-rw-r--r-- | widgets/misc/e-attachment-view.c | 47 | ||||
-rw-r--r-- | widgets/misc/e-attachment-view.h | 6 |
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, |