[gnome-builder] libide/gui: add scaffolding for addins to restore state
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add scaffolding for addins to restore state
- Date: Thu, 15 Sep 2022 08:53:55 +0000 (UTC)
commit ace4283d0d128651fa40b88128870857256ce7bf
Author: Christian Hergert <chergert redhat com>
Date: Thu Sep 15 01:51:00 2022 -0700
libide/gui: add scaffolding for addins to restore state
src/libide/gui/ide-workbench-private.h | 2 ++
src/libide/gui/ide-workbench.c | 39 ++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+)
---
diff --git a/src/libide/gui/ide-workbench-private.h b/src/libide/gui/ide-workbench-private.h
index f01e9fad8..d3fd8992c 100644
--- a/src/libide/gui/ide-workbench-private.h
+++ b/src/libide/gui/ide-workbench-private.h
@@ -28,5 +28,7 @@ G_BEGIN_DECLS
gboolean _ide_workbench_is_last_workspace (IdeWorkbench *self,
IdeWorkspace *workspace);
IdeWorkspace *_ide_workbench_create_secondary (IdeWorkbench *self);
+void _ide_workbench_set_session (IdeWorkbench *self,
+ IdeSession *session);
G_END_DECLS
diff --git a/src/libide/gui/ide-workbench.c b/src/libide/gui/ide-workbench.c
index e41b433ae..d8fc032de 100644
--- a/src/libide/gui/ide-workbench.c
+++ b/src/libide/gui/ide-workbench.c
@@ -78,6 +78,7 @@ struct _IdeWorkbench
IdeVcs *vcs;
IdeVcsMonitor *vcs_monitor;
IdeSearchEngine *search_engine;
+ IdeSession *session;
/* Various flags */
guint unloaded : 1;
@@ -435,6 +436,7 @@ ide_workbench_finalize (GObject *object)
g_clear_object (&self->project_info);
g_clear_object (&self->cancellable);
g_clear_object (&self->context);
+ g_clear_object (&self->session);
G_OBJECT_CLASS (ide_workbench_parent_class)->finalize (object);
}
@@ -956,6 +958,23 @@ ide_workbench_project_loaded_foreach_cb (PeasExtensionSet *set,
ide_workbench_addin_project_loaded (addin, self->project_info);
}
+static void
+ide_workbench_addin_restore_session_cb (PeasExtensionSet *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdeWorkbenchAddin *addin = (IdeWorkbenchAddin *)exten;
+ IdeSession *session = user_data;
+
+ g_assert (IDE_IS_MAIN_THREAD ());
+ g_assert (PEAS_IS_EXTENSION_SET (set));
+ g_assert (IDE_IS_WORKBENCH_ADDIN (addin));
+ g_assert (IDE_IS_SESSION (session));
+
+ ide_workbench_addin_restore_session (addin, session);
+}
+
static void
ide_workbench_load_project_completed (IdeWorkbench *self,
IdeTask *task)
@@ -988,6 +1007,17 @@ ide_workbench_load_project_completed (IdeWorkbench *self,
self->search_engine = ide_object_ensure_child_typed (IDE_OBJECT (self->context),
IDE_TYPE_SEARCH_ENGINE);
+ /* Allow addins to restore session, which might bypass the need to create
+ * a workspace manually below.
+ */
+ if (self->session != NULL)
+ {
+ peas_extension_set_foreach (self->addins,
+ ide_workbench_addin_restore_session_cb,
+ self->session);
+ g_clear_object (&self->session);
+ }
+
if (lp->workspace_type != G_TYPE_INVALID)
{
IdeWorkspace *workspace;
@@ -2795,3 +2825,12 @@ _ide_workbench_create_secondary (IdeWorkbench *self)
return workspace;
}
+
+void
+_ide_workbench_set_session (IdeWorkbench *self,
+ IdeSession *session)
+{
+ g_return_if_fail (IDE_IS_WORKBENCH (self));
+
+ g_set_object (&self->session, session);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]