summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-04-11 04:46:40 +0200
committerBenjamin Otte <otte@redhat.com>2023-05-09 17:01:20 +0200
commit435a405c553941e54a5b0ccf3556ab96a900fdfb (patch)
tree5d86f9daeb0ff5993652e54cadc5463d0b293192 /demos
parente1ed9f10c6b37badc3d99fd349d75f4c43e53d37 (diff)
downloadgtk+-435a405c553941e54a5b0ccf3556ab96a900fdfb.tar.gz
gtk-demo: Split out code from the settings demo
I want to add another demo using settings and share relevant code.
Diffstat (limited to 'demos')
-rw-r--r--demos/gtk-demo/listview_settings.c143
-rw-r--r--demos/gtk-demo/meson.build1
-rw-r--r--demos/gtk-demo/settings-key.c165
-rw-r--r--demos/gtk-demo/settings-key.h17
4 files changed, 190 insertions, 136 deletions
diff --git a/demos/gtk-demo/listview_settings.c b/demos/gtk-demo/listview_settings.c
index 4e8e69bfbf..6a7779ba12 100644
--- a/demos/gtk-demo/listview_settings.c
+++ b/demos/gtk-demo/listview_settings.c
@@ -14,138 +14,7 @@
#include <gtk/gtk.h>
-#include <stdlib.h>
-
-/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
-typedef struct _SettingsKey SettingsKey;
-struct _SettingsKey
-{
- GObject parent_instance;
-
- GSettings *settings;
- GSettingsSchemaKey *key;
-};
-
-enum {
- PROP_0,
- PROP_NAME,
- PROP_SUMMARY,
- PROP_DESCRIPTION,
- PROP_VALUE,
- PROP_TYPE,
- PROP_DEFAULT_VALUE,
-
- N_PROPS
-};
-
-#define SETTINGS_TYPE_KEY (settings_key_get_type ())
-G_DECLARE_FINAL_TYPE (SettingsKey, settings_key, SETTINGS, KEY, GObject);
-
-G_DEFINE_TYPE (SettingsKey, settings_key, G_TYPE_OBJECT);
-static GParamSpec *properties[N_PROPS] = { NULL, };
-
-static void
-settings_key_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- SettingsKey *self = SETTINGS_KEY (object);
-
- switch (property_id)
- {
- case PROP_DESCRIPTION:
- g_value_set_string (value, g_settings_schema_key_get_description (self->key));
- break;
-
- case PROP_NAME:
- g_value_set_string (value, g_settings_schema_key_get_name (self->key));
- break;
-
- case PROP_SUMMARY:
- g_value_set_string (value, g_settings_schema_key_get_summary (self->key));
- break;
-
- case PROP_VALUE:
- {
- GVariant *variant = g_settings_get_value (self->settings, g_settings_schema_key_get_name (self->key));
- g_value_take_string (value, g_variant_print (variant, FALSE));
- g_variant_unref (variant);
- }
- break;
-
- case PROP_TYPE:
- {
- const GVariantType *type = g_settings_schema_key_get_value_type (self->key);
- g_value_set_string (value, g_variant_type_peek_string (type));
- }
- break;
-
- case PROP_DEFAULT_VALUE:
- {
- GVariant *variant = g_settings_schema_key_get_default_value (self->key);
- g_value_take_string (value, g_variant_print (variant, FALSE));
- g_variant_unref (variant);
- }
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-settings_key_finalize (GObject *object)
-{
- SettingsKey *self = SETTINGS_KEY (object);
-
- g_object_unref (self->settings);
- g_settings_schema_key_unref (self->key);
-
- G_OBJECT_CLASS (settings_key_parent_class)->finalize (object);
-}
-
-static void
-settings_key_class_init (SettingsKeyClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = settings_key_finalize;
- gobject_class->get_property = settings_key_get_property;
-
- properties[PROP_DESCRIPTION] =
- g_param_spec_string ("description", NULL, NULL, NULL, G_PARAM_READABLE);
- properties[PROP_NAME] =
- g_param_spec_string ("name", NULL, NULL, NULL, G_PARAM_READABLE);
- properties[PROP_SUMMARY] =
- g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE);
- properties[PROP_VALUE] =
- g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE);
- properties[PROP_TYPE] =
- g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE);
- properties[PROP_DEFAULT_VALUE] =
- g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE);
-
- g_object_class_install_properties (gobject_class, N_PROPS, properties);
-}
-
-static void
-settings_key_init (SettingsKey *self)
-{
-}
-
-static SettingsKey *
-settings_key_new (GSettings *settings,
- GSettingsSchemaKey *key)
-{
- SettingsKey *result = g_object_new (SETTINGS_TYPE_KEY, NULL);
-
- result->settings = g_object_ref (settings);
- result->key = g_settings_schema_key_ref (key);
-
- return result;
-}
+#include "settings-key.h"
static void
item_value_changed (GtkEditableLabel *label,
@@ -153,6 +22,7 @@ item_value_changed (GtkEditableLabel *label,
GtkColumnViewCell *cell)
{
SettingsKey *self;
+ GSettingsSchemaKey *key;
const char *text;
const GVariantType *type;
GVariant *variant;
@@ -163,9 +33,10 @@ item_value_changed (GtkEditableLabel *label,
text = gtk_editable_get_text (GTK_EDITABLE (label));
self = gtk_column_view_cell_get_item (cell);
+ key = settings_key_get_key (self);
- type = g_settings_schema_key_get_value_type (self->key);
- name = g_settings_schema_key_get_name (self->key);
+ type = g_settings_schema_key_get_value_type (key);
+ name = g_settings_schema_key_get_name (key);
variant = g_variant_parse (type, text, NULL, NULL, &error);
if (!variant)
@@ -175,13 +46,13 @@ item_value_changed (GtkEditableLabel *label,
goto revert;
}
- if (!g_settings_schema_key_range_check (self->key, variant))
+ if (!g_settings_schema_key_range_check (key, variant))
{
g_warning ("Not a valid value for %s", name);
goto revert;
}
- g_settings_set_value (self->settings, name, variant);
+ g_settings_set_value (settings_key_get_settings (self), name, variant);
g_variant_unref (variant);
return;
diff --git a/demos/gtk-demo/meson.build b/demos/gtk-demo/meson.build
index c03beb3940..f1ce4ffc6b 100644
--- a/demos/gtk-demo/meson.build
+++ b/demos/gtk-demo/meson.build
@@ -131,6 +131,7 @@ extra_demo_sources = files([
'demo4widget.c',
'pixbufpaintable.c',
'script-names.c',
+ 'settings-key.c',
'unicode-names.c',
'suggestionentry.c',
'language-names.c',
diff --git a/demos/gtk-demo/settings-key.c b/demos/gtk-demo/settings-key.c
new file mode 100644
index 0000000000..13c0a5d559
--- /dev/null
+++ b/demos/gtk-demo/settings-key.c
@@ -0,0 +1,165 @@
+#include "settings-key.h"
+
+/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
+struct _SettingsKey
+{
+ GObject parent_instance;
+
+ GSettings *settings;
+ GSettingsSchemaKey *key;
+};
+
+enum {
+ PROP_0,
+ PROP_NAME,
+ PROP_SETTINGS,
+ PROP_SUMMARY,
+ PROP_DESCRIPTION,
+ PROP_VALUE,
+ PROP_TYPE,
+ PROP_DEFAULT_VALUE,
+
+ N_PROPS
+};
+
+G_DEFINE_TYPE (SettingsKey, settings_key, G_TYPE_OBJECT);
+static GParamSpec *properties[N_PROPS] = { NULL, };
+
+static void
+settings_key_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ SettingsKey *self = SETTINGS_KEY (object);
+
+ switch (property_id)
+ {
+ case PROP_DESCRIPTION:
+ g_value_set_string (value, g_settings_schema_key_get_description (self->key));
+ break;
+
+ case PROP_NAME:
+ g_value_set_string (value, g_settings_schema_key_get_name (self->key));
+ break;
+
+ case PROP_SUMMARY:
+ g_value_set_string (value, g_settings_schema_key_get_summary (self->key));
+ break;
+
+ case PROP_VALUE:
+ {
+ GVariant *variant = g_settings_get_value (self->settings, g_settings_schema_key_get_name (self->key));
+ g_value_take_string (value, g_variant_print (variant, FALSE));
+ g_variant_unref (variant);
+ }
+ break;
+
+ case PROP_TYPE:
+ {
+ const GVariantType *type = g_settings_schema_key_get_value_type (self->key);
+ g_value_set_string (value, g_variant_type_peek_string (type));
+ }
+ break;
+
+ case PROP_DEFAULT_VALUE:
+ {
+ GVariant *variant = g_settings_schema_key_get_default_value (self->key);
+ g_value_take_string (value, g_variant_print (variant, FALSE));
+ g_variant_unref (variant);
+ }
+ break;
+
+ case PROP_SETTINGS:
+ g_value_set_object (value, self->settings);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+settings_key_finalize (GObject *object)
+{
+ SettingsKey *self = SETTINGS_KEY (object);
+
+ g_object_unref (self->settings);
+ g_settings_schema_key_unref (self->key);
+
+ G_OBJECT_CLASS (settings_key_parent_class)->finalize (object);
+}
+
+static void
+settings_key_class_init (SettingsKeyClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = settings_key_finalize;
+ gobject_class->get_property = settings_key_get_property;
+
+ properties[PROP_DESCRIPTION] =
+ g_param_spec_string ("description", NULL, NULL, NULL, G_PARAM_READABLE);
+ properties[PROP_NAME] =
+ g_param_spec_string ("name", NULL, NULL, NULL, G_PARAM_READABLE);
+ properties[PROP_SETTINGS] =
+ g_param_spec_object ("settings", NULL, NULL, G_TYPE_SETTINGS, G_PARAM_READABLE);
+ properties[PROP_SUMMARY] =
+ g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE);
+ properties[PROP_VALUE] =
+ g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE);
+ properties[PROP_TYPE] =
+ g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE);
+ properties[PROP_DEFAULT_VALUE] =
+ g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE);
+
+ g_object_class_install_properties (gobject_class, N_PROPS, properties);
+}
+
+static void
+settings_key_init (SettingsKey *self)
+{
+}
+
+SettingsKey *
+settings_key_new (GSettings *settings,
+ GSettingsSchemaKey *key)
+{
+ SettingsKey *result = g_object_new (SETTINGS_TYPE_KEY, NULL);
+
+ result->settings = g_object_ref (settings);
+ result->key = g_settings_schema_key_ref (key);
+
+ return result;
+}
+
+GSettingsSchemaKey *
+settings_key_get_key (SettingsKey *self)
+{
+ return self->key;
+}
+
+GSettings *
+settings_key_get_settings (SettingsKey *self)
+{
+ return self->settings;
+}
+
+char *
+settings_key_get_search_string (SettingsKey *self)
+{
+ char *schema, *result;
+
+ g_object_get (self->settings, "schema-id", &schema, NULL);
+
+ result = g_strconcat (g_settings_schema_key_get_name (self->key), " ",
+ g_settings_schema_key_get_summary (self->key), " ",
+ schema,
+ NULL);
+
+ g_free (schema);
+
+ return result;
+}
+
diff --git a/demos/gtk-demo/settings-key.h b/demos/gtk-demo/settings-key.h
new file mode 100644
index 0000000000..5260a84516
--- /dev/null
+++ b/demos/gtk-demo/settings-key.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <gtk/gtk.h>
+
+#include <stdlib.h>
+
+/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
+typedef struct _SettingsKey SettingsKey;
+#define SETTINGS_TYPE_KEY (settings_key_get_type ())
+G_DECLARE_FINAL_TYPE (SettingsKey, settings_key, SETTINGS, KEY, GObject);
+
+SettingsKey * settings_key_new (GSettings *settings,
+ GSettingsSchemaKey *key);
+
+GSettingsSchemaKey * settings_key_get_key (SettingsKey *self);
+GSettings * settings_key_get_settings (SettingsKey *self);
+char * settings_key_get_search_string (SettingsKey *self);