[gnome-builder] libide/gui: add workspace addin save session API
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add workspace addin save session API
- Date: Thu, 15 Sep 2022 08:12:49 +0000 (UTC)
commit 693520546a2776103e5ddcb1fe5278acd7a61296
Author: Christian Hergert <chergert redhat com>
Date: Thu Sep 15 01:11:04 2022 -0700
libide/gui: add workspace addin save session API
This can be more convenient in some cases where you only have a workspace
addin and don't want to create the workbench addin. What would really help
though is to have the workspaces automatically created/restored so that
these can be used to restore items symmetrically.
src/libide/gui/ide-workbench.c | 7 +++++++
src/libide/gui/ide-workspace-addin.c | 11 +++++++++++
src/libide/gui/ide-workspace-addin.h | 6 ++++++
src/libide/gui/ide-workspace-private.h | 3 +++
src/libide/gui/ide-workspace.c | 31 +++++++++++++++++++++++++++++++
5 files changed, 58 insertions(+)
---
diff --git a/src/libide/gui/ide-workbench.c b/src/libide/gui/ide-workbench.c
index b58fb7669..e41b433ae 100644
--- a/src/libide/gui/ide-workbench.c
+++ b/src/libide/gui/ide-workbench.c
@@ -1714,6 +1714,13 @@ ide_workbench_unload_async (IdeWorkbench *self,
ide_workbench_addin_save_session (addin, session);
}
+ /* Now let the workspaces capture themselves as that is a
+ * more convenient session API for some addins.
+ */
+ ide_workbench_foreach_workspace (self,
+ (IdeWorkspaceCallback)_ide_workspace_save_session,
+ session);
+
/* Release the search engine early to help it cleanup */
ide_clear_and_destroy_object (&self->search_engine);
diff --git a/src/libide/gui/ide-workspace-addin.c b/src/libide/gui/ide-workspace-addin.c
index 50ca38e91..4abe70975 100644
--- a/src/libide/gui/ide-workspace-addin.c
+++ b/src/libide/gui/ide-workspace-addin.c
@@ -132,3 +132,14 @@ ide_workspace_addin_ref_action_group (IdeWorkspaceAddin *self)
return action_group;
}
+
+void
+ide_workspace_addin_save_session (IdeWorkspaceAddin *self,
+ IdeSession *session)
+{
+ g_return_if_fail (IDE_IS_WORKSPACE_ADDIN (self));
+ g_return_if_fail (IDE_IS_SESSION (session));
+
+ if (IDE_WORKSPACE_ADDIN_GET_IFACE (self)->save_session)
+ IDE_WORKSPACE_ADDIN_GET_IFACE (self)->save_session (self, session);
+}
diff --git a/src/libide/gui/ide-workspace-addin.h b/src/libide/gui/ide-workspace-addin.h
index d34a2bbfa..19db630fb 100644
--- a/src/libide/gui/ide-workspace-addin.h
+++ b/src/libide/gui/ide-workspace-addin.h
@@ -27,6 +27,7 @@
#include <libide-core.h>
#include "ide-page.h"
+#include "ide-session.h"
#include "ide-workspace.h"
G_BEGIN_DECLS
@@ -47,6 +48,8 @@ struct _IdeWorkspaceAddinInterface
void (*page_changed) (IdeWorkspaceAddin *self,
IdePage *page);
GActionGroup *(*ref_action_group) (IdeWorkspaceAddin *self);
+ void (*save_session) (IdeWorkspaceAddin *self,
+ IdeSession *session);
};
IDE_AVAILABLE_IN_ALL
@@ -59,6 +62,9 @@ IDE_AVAILABLE_IN_ALL
void ide_workspace_addin_page_changed (IdeWorkspaceAddin *self,
IdePage *page);
IDE_AVAILABLE_IN_ALL
+void ide_workspace_addin_save_session (IdeWorkspaceAddin *self,
+ IdeSession *session);
+IDE_AVAILABLE_IN_ALL
GActionGroup *ide_workspace_addin_ref_action_group (IdeWorkspaceAddin *self);
IDE_AVAILABLE_IN_ALL
IdeWorkspaceAddin *ide_workspace_addin_find_by_module_name (IdeWorkspace *workspace,
diff --git a/src/libide/gui/ide-workspace-private.h b/src/libide/gui/ide-workspace-private.h
index 6371a4295..5d75ebb6d 100644
--- a/src/libide/gui/ide-workspace-private.h
+++ b/src/libide/gui/ide-workspace-private.h
@@ -22,6 +22,7 @@
#include "ide-grid.h"
#include "ide-panel-position.h"
+#include "ide-session.h"
#include "ide-workspace.h"
G_BEGIN_DECLS
@@ -60,5 +61,7 @@ void _ide_workspace_agree_to_close_async (IdeWorkspace *self,
gboolean _ide_workspace_agree_to_close_finish (IdeWorkspace *self,
GAsyncResult *result,
GError **error);
+void _ide_workspace_save_session (IdeWorkspace *self,
+ IdeSession *session);
G_END_DECLS
diff --git a/src/libide/gui/ide-workspace.c b/src/libide/gui/ide-workspace.c
index 837250e94..d0c0f08f7 100644
--- a/src/libide/gui/ide-workspace.c
+++ b/src/libide/gui/ide-workspace.c
@@ -1674,3 +1674,34 @@ ide_workspace_uninhibit_logout (IdeWorkspace *self)
priv->inhibit_logout_count--;
}
+
+static void
+ide_workspace_addin_save_session_cb (IdeExtensionSetAdapter *adapter,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdeWorkspaceAddin *addin = (IdeWorkspaceAddin *)exten;
+ IdeSession *session = user_data;
+
+ g_assert (IDE_IS_EXTENSION_SET_ADAPTER (adapter));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_WORKSPACE_ADDIN (addin));
+ g_assert (IDE_IS_SESSION (session));
+
+ ide_workspace_addin_save_session (addin, session);
+}
+
+void
+_ide_workspace_save_session (IdeWorkspace *self,
+ IdeSession *session)
+{
+ IdeWorkspacePrivate *priv = ide_workspace_get_instance_private (self);
+
+ g_return_if_fail (IDE_IS_WORKSPACE (self));
+ g_return_if_fail (IDE_IS_SESSION (session));
+
+ ide_extension_set_adapter_foreach (priv->addins,
+ ide_workspace_addin_save_session_cb,
+ session);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]