gplugin/gplugin

Add a settings backend property to view and plugin page

16 months ago, Elliott Sales de Andrade
63c86ee51e6a
Parents 19766118a98d
Children bc5f36d168a5
Add a settings backend property to view and plugin page

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/2128/
--- a/gplugin-gtk4/gplugin-gtk-plugin-page.c Thu Nov 24 00:21:09 2022 -0600
+++ b/gplugin-gtk4/gplugin-gtk-plugin-page.c Tue Dec 13 00:44:10 2022 -0600
@@ -22,6 +22,9 @@
#include <gplugin-gtk-plugin-closures.h>
#include <gplugin-gtk-plugin-page.h>
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
/**
* GPluginGtkPluginPage:
*
@@ -38,6 +41,7 @@
GtkBox parent;
GPluginPlugin *plugin;
+ GSettingsBackend *backend;
};
/******************************************************************************
@@ -46,6 +50,7 @@
enum {
PROP_ZERO,
PROP_PLUGIN,
+ PROP_SETTINGS_BACKEND,
N_PROPERTIES,
};
static GParamSpec *properties[N_PROPERTIES] = {
@@ -159,6 +164,11 @@
case PROP_PLUGIN:
gplugin_gtk_plugin_page_set_plugin(page, g_value_get_object(value));
break;
+ case PROP_SETTINGS_BACKEND:
+ gplugin_gtk_plugin_page_set_settings_backend(
+ page,
+ g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
@@ -178,6 +188,11 @@
case PROP_PLUGIN:
g_value_set_object(value, gplugin_gtk_plugin_page_get_plugin(page));
break;
+ case PROP_SETTINGS_BACKEND:
+ g_value_set_object(
+ value,
+ gplugin_gtk_plugin_page_get_settings_backend(page));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
@@ -226,6 +241,20 @@
G_TYPE_OBJECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+ /**
+ * GPluginGtkPluginPage:settings-backend:
+ *
+ * The [class@Gio.SettingsBackend] to use when viewing plugin settings.
+ *
+ * Since: 0.40.0
+ */
+ properties[PROP_SETTINGS_BACKEND] = g_param_spec_object(
+ "settings-backend",
+ "settings-backend",
+ "The settings backend to use when viewing plugin settings",
+ G_TYPE_SETTINGS_BACKEND,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
/* signals */
@@ -346,3 +375,55 @@
return page->plugin;
}
+
+/**
+ * gplugin_gtk_plugin_page_set_settings_backend:
+ * @page: The plugin page instance.
+ * @backend: (transfer none) (nullable): The settings backend to use. If %NULL,
+ * the default GSettings backend will be used.
+ *
+ * Sets the settings backend to use when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function takes a `gpointer` instead of a
+ * `GSettingsBackend *` but the type will be checked internally.
+ *
+ * Since: 0.40.0
+ */
+void
+gplugin_gtk_plugin_page_set_settings_backend(
+ GPluginGtkPluginPage *page,
+ gpointer backend)
+{
+ g_return_if_fail(GPLUGIN_GTK_IS_PLUGIN_PAGE(page));
+ g_return_if_fail(G_IS_SETTINGS_BACKEND(backend) || backend == NULL);
+
+ if(g_set_object(&page->backend, backend)) {
+ g_object_notify_by_pspec(
+ G_OBJECT(page),
+ properties[PROP_SETTINGS_BACKEND]);
+ }
+}
+
+/**
+ * gplugin_gtk_plugin_page_get_settings_backend:
+ * @page: The plugin page instance.
+ *
+ * Gets the settings backend used when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function returns a `gpointer`, and you should cast to
+ * `GSettingsBackend *` after setting `G_SETTINGS_ENABLE_BACKEND` for the files
+ * where you need it.
+ *
+ * Returns: (transfer none): The settings backend in use.
+ *
+ * Since: 0.40.0
+ */
+gpointer
+gplugin_gtk_plugin_page_get_settings_backend(GPluginGtkPluginPage *page)
+{
+ g_return_val_if_fail(GPLUGIN_GTK_IS_PLUGIN_PAGE(page), NULL);
+
+ return page->backend;
+}
--- a/gplugin-gtk4/gplugin-gtk-plugin-page.h Thu Nov 24 00:21:09 2022 -0600
+++ b/gplugin-gtk4/gplugin-gtk-plugin-page.h Tue Dec 13 00:44:10 2022 -0600
@@ -47,6 +47,12 @@
GPluginPlugin *plugin);
GPluginPlugin *gplugin_gtk_plugin_page_get_plugin(GPluginGtkPluginPage *page);
+void gplugin_gtk_plugin_page_set_settings_backend(
+ GPluginGtkPluginPage *page,
+ gpointer backend);
+gpointer gplugin_gtk_plugin_page_get_settings_backend(
+ GPluginGtkPluginPage *page);
+
G_END_DECLS
#endif /* GPLUGIN_GTK_PLUGIN_PAGE_H */
--- a/gplugin-gtk4/gplugin-gtk-view.c Thu Nov 24 00:21:09 2022 -0600
+++ b/gplugin-gtk4/gplugin-gtk-view.c Tue Dec 13 00:44:10 2022 -0600
@@ -21,6 +21,9 @@
#include <gplugin-gtk-plugin-row.h>
#include <gplugin-gtk-view.h>
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
/**
* GPluginGtkView:
*
@@ -35,6 +38,7 @@
GtkBox parent;
GPluginManager *manager;
+ GSettingsBackend *backend;
gboolean show_internal;
GtkWidget *stack;
@@ -54,6 +58,7 @@
PROP_ZERO,
PROP_MANAGER,
PROP_SHOW_INTERNAL,
+ PROP_SETTINGS_BACKEND,
N_PROPERTIES,
};
static GParamSpec *properties[N_PROPERTIES] = {
@@ -214,6 +219,11 @@
view,
g_value_get_boolean(value));
break;
+ case PROP_SETTINGS_BACKEND:
+ gplugin_gtk_view_set_settings_backend(
+ view,
+ g_value_get_object(value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
@@ -238,6 +248,11 @@
value,
gplugin_gtk_view_get_show_internal(view));
break;
+ case PROP_SETTINGS_BACKEND:
+ g_value_set_object(
+ value,
+ gplugin_gtk_view_get_settings_backend(view));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
@@ -327,6 +342,18 @@
FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ /**
+ * GPluginGtkView:settings-backend:
+ *
+ * The [class@Gio.SettingsBackend] to use when viewing plugin settings.
+ */
+ properties[PROP_SETTINGS_BACKEND] = g_param_spec_object(
+ "settings-backend",
+ "settings-backend",
+ "The settings backend to use when viewing plugin settings",
+ G_TYPE_SETTINGS_BACKEND,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
}
@@ -451,6 +478,59 @@
}
/**
+ * gplugin_gtk_view_set_settings_backend:
+ * @view: The GTK view instance.
+ * @backend: (transfer none) (nullable): The settings backend to use. If %NULL,
+ * the default GSettings backend will be used.
+ *
+ * Sets the settings backend to use when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function takes a `gpointer` instead of a
+ * `GSettingsBackend *` but the type will be checked internally.
+ *
+ * Since: 0.40.0
+ */
+void
+gplugin_gtk_view_set_settings_backend(GPluginGtkView *view, gpointer backend)
+{
+ g_return_if_fail(GPLUGIN_GTK_IS_VIEW(view));
+ g_return_if_fail(G_IS_SETTINGS_BACKEND(backend) || backend == NULL);
+
+ if(g_set_object(&view->backend, backend)) {
+ gplugin_gtk_plugin_page_set_settings_backend(
+ GPLUGIN_GTK_PLUGIN_PAGE(view->plugin_page),
+ view->backend);
+ g_object_notify_by_pspec(
+ G_OBJECT(view),
+ properties[PROP_SETTINGS_BACKEND]);
+ }
+}
+
+/**
+ * gplugin_gtk_view_get_settings_backend:
+ * @view: The GTK view instance.
+ *
+ * Gets the settings backend used when displaying plugin settings.
+ *
+ * Note, because we do not want to leak `G_SETTINGS_ENABLE_BACKEND` into
+ * GPlugin users, this function returns a `gpointer`, and you should cast to
+ * `GSettingsBackend *` after setting `G_SETTINGS_ENABLE_BACKEND` for the files
+ * where you need it.
+ *
+ * Returns: (transfer none): The settings backend.
+ *
+ * Since: 0.40.0
+ */
+gpointer
+gplugin_gtk_view_get_settings_backend(GPluginGtkView *view)
+{
+ g_return_val_if_fail(GPLUGIN_GTK_IS_VIEW(view), NULL);
+
+ return view->backend;
+}
+
+/**
* gplugin_gtk_view_show_overview:
* @view: The GTK view instance.
*
--- a/gplugin-gtk4/gplugin-gtk-view.h Thu Nov 24 00:21:09 2022 -0600
+++ b/gplugin-gtk4/gplugin-gtk-view.h Tue Dec 13 00:44:10 2022 -0600
@@ -52,6 +52,11 @@
gboolean show_internal);
gboolean gplugin_gtk_view_get_show_internal(GPluginGtkView *view);
+void gplugin_gtk_view_set_settings_backend(
+ GPluginGtkView *view,
+ gpointer backend);
+gpointer gplugin_gtk_view_get_settings_backend(GPluginGtkView *view);
+
void gplugin_gtk_view_show_overview(GPluginGtkView *view);
void gplugin_gtk_view_show_plugin(GPluginGtkView *view, GPluginPlugin *plugin);