[gnome-builder/wip/chergert/perspective] libide: use IdeWorkbenchAddin instead of IdeLoader
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/perspective] libide: use IdeWorkbenchAddin instead of IdeLoader
- Date: Sun, 15 Nov 2015 00:32:14 +0000 (UTC)
commit fcead9faadb955d48ed059ca3fb9bd2edbe395f2
Author: Christian Hergert <christian hergert me>
Date: Sat Nov 14 14:48:39 2015 -0800
libide: use IdeWorkbenchAddin instead of IdeLoader
This reduces the number of interfaces we have, which could get out of
hand pretty easily.
libide/Makefile.am | 2 -
libide/ide-loader.c | 89 ------------------------------------------
libide/ide-loader.h | 57 ---------------------------
libide/ide-workbench-addin.c | 80 +++++++++++++++++++++++++++++++++++++
libide/ide-workbench-addin.h | 44 +++++++++++++++++----
libide/ide-workbench.h | 5 --
6 files changed, 116 insertions(+), 161 deletions(-)
---
diff --git a/libide/Makefile.am b/libide/Makefile.am
index 020bbbd..e1e830a 100644
--- a/libide/Makefile.am
+++ b/libide/Makefile.am
@@ -105,8 +105,6 @@ libide_1_0_la_public_sources = \
ide-layout-stack-private.h \
ide-layout-view.c \
ide-layout-view.h \
- ide-loader.c \
- ide-loader.h \
ide-log.c \
ide-log.h \
ide-macros.h \
diff --git a/libide/ide-workbench-addin.c b/libide/ide-workbench-addin.c
index 1cf1d61..8dfd408 100644
--- a/libide/ide-workbench-addin.c
+++ b/libide/ide-workbench-addin.c
@@ -34,11 +34,22 @@ ide_workbench_addin_real_unload (IdeWorkbenchAddin *self,
{
}
+static gboolean
+ide_workbench_addin_real_can_open (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ gint *priority)
+{
+ *priority = 0;
+ return FALSE;
+}
+
static void
ide_workbench_addin_default_init (IdeWorkbenchAddinInterface *iface)
{
iface->load = ide_workbench_addin_real_load;
iface->unload = ide_workbench_addin_real_unload;
+ iface->can_open = ide_workbench_addin_real_can_open;
}
/**
@@ -81,3 +92,72 @@ ide_workbench_addin_unload (IdeWorkbenchAddin *self,
IDE_WORKBENCH_ADDIN_GET_IFACE (self)->unload (self, workbench);
}
+
+/**
+ * ide_workbench_addin_can_open:
+ * @self: An #IdeWorkbenchAddin.
+ * @uri: An #IdeUri.
+ * @content_type: (nullable): A content-type or %NULL.
+ * @priority: (out): the priority at which this loader should be used.
+ *
+ * This interface method indicates if the workbench addin can load the content
+ * found at @uri. If so, @priority should be set to an integer priority
+ * indicating how important it is for this addin to load @uri.
+ *
+ * The lowest integer value wins. However, a load fails, the next addin which
+ * returned %TRUE from this method will be consulted.
+ *
+ * Returns: %TRUE if @self and open @uri.
+ */
+gboolean
+ide_workbench_addin_can_open (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ gint *priority)
+{
+ g_return_val_if_fail (IDE_IS_WORKBENCH_ADDIN (self), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_val_if_fail (priority != NULL, FALSE);
+
+ return IDE_WORKBENCH_ADDIN_GET_IFACE (self)->can_open (self, uri, content_type, priority);
+}
+
+void
+ide_workbench_addin_open_async (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_return_if_fail (IDE_IS_WORKBENCH_ADDIN (self));
+ g_return_if_fail (uri != NULL);
+ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ if ((IDE_WORKBENCH_ADDIN_GET_IFACE (self)->open_async == NULL) ||
+ (IDE_WORKBENCH_ADDIN_GET_IFACE (self)->open_finish == NULL))
+ g_return_if_reached ();
+
+ IDE_WORKBENCH_ADDIN_GET_IFACE (self)->open_async (self, uri, content_type, cancellable, callback,
user_data);
+}
+
+gboolean
+ide_workbench_addin_open_finish (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ g_return_val_if_fail (IDE_IS_WORKBENCH_ADDIN (self), FALSE);
+ g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
+
+ if (IDE_WORKBENCH_ADDIN_GET_IFACE (self)->open_finish == NULL)
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVAL,
+ "%s does not contain open_finish",
+ G_OBJECT_TYPE_NAME (self));
+ return FALSE;
+ }
+
+ return IDE_WORKBENCH_ADDIN_GET_IFACE (self)->open_finish (self, result, error);
+}
diff --git a/libide/ide-workbench-addin.h b/libide/ide-workbench-addin.h
index 9897d2b..95471c2 100644
--- a/libide/ide-workbench-addin.h
+++ b/libide/ide-workbench-addin.h
@@ -19,6 +19,7 @@
#ifndef IDE_WORKBENCH_ADDIN_H
#define IDE_WORKBENCH_ADDIN_H
+#include "ide-uri.h"
#include "ide-workbench.h"
G_BEGIN_DECLS
@@ -31,16 +32,43 @@ struct _IdeWorkbenchAddinInterface
{
GTypeInterface parent;
- void (*load) (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
- void (*unload) (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
+ void (*load) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+ void (*unload) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+ gboolean (*can_open) (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ gint *priority);
+ void (*open_async) (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ gboolean (*open_finish) (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error);
+
};
-void ide_workbench_addin_load (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
-void ide_workbench_addin_unload (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
+void ide_workbench_addin_load (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+void ide_workbench_addin_unload (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+gboolean ide_workbench_addin_can_open (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ gint *priority);
+void ide_workbench_addin_open_async (IdeWorkbenchAddin *self,
+ IdeUri *uri,
+ const gchar *content_type,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_workbench_addin_open_finish (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error);
G_END_DECLS
diff --git a/libide/ide-workbench.h b/libide/ide-workbench.h
index 164d5c8..007afe6 100644
--- a/libide/ide-workbench.h
+++ b/libide/ide-workbench.h
@@ -22,7 +22,6 @@
#include <gtk/gtk.h>
#include "ide-context.h"
-#include "ide-loader.h"
#include "ide-perspective.h"
G_BEGIN_DECLS
@@ -51,10 +50,6 @@ void ide_workbench_focus (IdeWorkbench
GtkWidget *widget);
void ide_workbench_close (IdeWorkbench *self);
IdeContext *ide_workbench_get_context (IdeWorkbench *self);
-void ide_workbench_add_loader (IdeWorkbench *self,
- IdeLoader *loader);
-void ide_workbench_remove_loader (IdeWorkbench *self,
- IdeLoader *loader);
void ide_workbench_add_perspective (IdeWorkbench *self,
IdePerspective *perspective);
void ide_workbench_remove_perspective (IdeWorkbench *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]