[gnome-builder] libide/tweaks: add API to register callbacks
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/tweaks: add API to register callbacks
- Date: Thu, 11 Aug 2022 00:02:41 +0000 (UTC)
commit d6b6e7ae202d892162f2914c6ab450a7a75be532
Author: Christian Hergert <chergert redhat com>
Date: Wed Aug 10 16:15:16 2022 -0700
libide/tweaks: add API to register callbacks
This is helpful so that addins can register their callbacks before their
UI files are merged into the IdeTweaks template.
src/libide/tweaks/ide-tweaks.c | 39 ++++++++++++++++++++++++++++++++-------
src/libide/tweaks/ide-tweaks.h | 4 ++++
2 files changed, 36 insertions(+), 7 deletions(-)
---
diff --git a/src/libide/tweaks/ide-tweaks.c b/src/libide/tweaks/ide-tweaks.c
index f199ea7b4..0c37e9333 100644
--- a/src/libide/tweaks/ide-tweaks.c
+++ b/src/libide/tweaks/ide-tweaks.c
@@ -29,9 +29,10 @@
struct _IdeTweaks
{
- IdeTweaksItem parent_instance;
- GtkBuilder *builder;
- char *project_id;
+ IdeTweaksItem parent_instance;
+ GtkBuilder *builder;
+ GtkBuilderScope *scope;
+ char *project_id;
};
G_DEFINE_FINAL_TYPE (IdeTweaks, ide_tweaks, IDE_TYPE_TWEAKS_ITEM)
@@ -78,6 +79,7 @@ ide_tweaks_dispose (GObject *object)
IdeTweaks *self = (IdeTweaks *)object;
g_clear_object (&self->builder);
+ g_clear_object (&self->scope);
g_clear_pointer (&self->project_id, g_free);
G_OBJECT_CLASS (ide_tweaks_parent_class)->dispose (object);
@@ -144,13 +146,14 @@ ide_tweaks_class_init (IdeTweaksClass *klass)
static void
ide_tweaks_init (IdeTweaks *self)
{
- g_autoptr(GtkBuilderCScope) scope = (GtkBuilderCScope *)gtk_builder_cscope_new ();
-
+ self->scope = g_object_new (GTK_TYPE_BUILDER_CSCOPE, NULL);
self->builder = gtk_builder_new ();
gtk_builder_set_current_object (self->builder, G_OBJECT (self));
+ gtk_builder_set_scope (self->builder, self->scope);
- gtk_builder_cscope_add_callback_symbol (scope, "format", (gpointer)ide_tweaks_format);
- gtk_builder_set_scope (self->builder, GTK_BUILDER_SCOPE (scope));
+ gtk_builder_cscope_add_callback_symbol (GTK_BUILDER_CSCOPE (self->scope),
+ "format",
+ G_CALLBACK (ide_tweaks_format));
}
IdeTweaks *
@@ -193,6 +196,28 @@ ide_tweaks_expose_object (IdeTweaks *self,
gtk_builder_expose_object (self->builder, name, object);
}
+/**
+ * ide_tweaks_add_callback:
+ * @self: a #IdeTweaks
+ * @name: the name of the callback
+ * @callback: (scope forever): the callback represented by @name
+ *
+ * Adds @callback to the scope used when expanding future templates
+ * from @self.
+ */
+void
+ide_tweaks_add_callback (IdeTweaks *self,
+ const char *name,
+ GCallback callback)
+{
+ g_return_if_fail (IDE_IS_TWEAKS (self));
+ g_return_if_fail (GTK_IS_BUILDER_CSCOPE (self->scope));
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (callback != NULL);
+
+ gtk_builder_cscope_add_callback_symbol (GTK_BUILDER_CSCOPE (self->scope), name, callback);
+}
+
const char *
ide_tweaks_get_project_id (IdeTweaks *self)
{
diff --git a/src/libide/tweaks/ide-tweaks.h b/src/libide/tweaks/ide-tweaks.h
index 52d7cfa02..ae99a2020 100644
--- a/src/libide/tweaks/ide-tweaks.h
+++ b/src/libide/tweaks/ide-tweaks.h
@@ -45,6 +45,10 @@ void ide_tweaks_expose_object (IdeTweaks *self,
const char *name,
GObject *object);
IDE_AVAILABLE_IN_ALL
+void ide_tweaks_add_callback (IdeTweaks *self,
+ const char *name,
+ GCallback callback);
+IDE_AVAILABLE_IN_ALL
gboolean ide_tweaks_load_from_file (IdeTweaks *self,
GFile *file,
GCancellable *cancellable,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]