G_DEFINE_TYPE (ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+static gboolean
+string_to_font_desc (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string (s);
+ g_value_take_boxed (value, desc);
+
+ return TRUE;
+}
+
+static GVariant *
+font_desc_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ PangoFontDescription *desc = g_value_get_boxed (value);
+ char *s = pango_font_description_to_string (desc);
+ return g_variant_new_take_string (s);
+}
+
+static gboolean
+transition_to_pos (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ if (strcmp (s, "none") == 0)
+ g_value_set_uint (value, 0);
+ else if (strcmp (s, "crossfade") == 0)
+ g_value_set_uint (value, 1);
+ else
+ g_value_set_uint (value, 2);
+
+ return TRUE;
+}
+
+static GVariant *
+pos_to_transition (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ switch (g_value_get_uint (value))
+ {
+ case 0: return g_variant_new_string ("none");
+ case 1: return g_variant_new_string ("crossfade");
+ case 2: return g_variant_new_string ("slide-left-right");
+ default: g_assert_not_reached ();
+ }
+}
+
static void
example_app_prefs_init (ExampleAppPrefs *prefs)
{
gtk_widget_init_template (GTK_WIDGET (prefs));
prefs->settings = g_settings_new ("org.gtk.exampleapp");
- g_settings_bind (prefs->settings, "font",
- prefs->font, "font",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (prefs->settings, "transition",
- prefs->transition, "active-id",
- G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind_with_mapping (prefs->settings, "font",
+ prefs->font, "font-desc",
+ G_SETTINGS_BIND_DEFAULT,
+ string_to_font_desc,
+ font_desc_to_string,
+ NULL, NULL);
+ g_settings_bind_with_mapping (prefs->settings, "transition",
+ prefs->transition, "selected",
+ G_SETTINGS_BIND_DEFAULT,
+ transition_to_pos,
+ pos_to_transition,
+ NULL, NULL);
}
static void
</object>
</child>
<child>
- <object class="GtkFontButton" id="font">
+ <object class="GtkFontDialogButton" id="font">
+ <property name="dialog">
+ <object class="GtkFontDialog"/>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</object>
</child>
<child>
- <object class="GtkComboBoxText" id="transition">
- <items>
- <item translatable="yes" id="none">None</item>
- <item translatable="yes" id="crossfade">Fade</item>
- <item translatable="yes" id="slide-left-right">Slide</item>
- </items>
+ <object class="GtkDropDown" id="transition">
+ <property name="model">
+ <object class="GtkStringList">
+ <items>
+ <item translatable="yes">None</item>
+ <item translatable="yes">Fade</item>
+ <item translatable="yes">Slide</item>
+ </items>
+ </object>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
G_DEFINE_TYPE (ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+static gboolean
+string_to_font_desc (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string (s);
+ g_value_take_boxed (value, desc);
+
+ return TRUE;
+}
+
+static GVariant *
+font_desc_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ PangoFontDescription *desc = g_value_get_boxed (value);
+ char *s = pango_font_description_to_string (desc);
+ return g_variant_new_take_string (s);
+}
+
+static gboolean
+transition_to_pos (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ if (strcmp (s, "none") == 0)
+ g_value_set_uint (value, 0);
+ else if (strcmp (s, "crossfade") == 0)
+ g_value_set_uint (value, 1);
+ else
+ g_value_set_uint (value, 2);
+
+ return TRUE;
+}
+
+static GVariant *
+pos_to_transition (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ switch (g_value_get_uint (value))
+ {
+ case 0: return g_variant_new_string ("none");
+ case 1: return g_variant_new_string ("crossfade");
+ case 2: return g_variant_new_string ("slide-left-right");
+ default: g_assert_not_reached ();
+ }
+}
+
static void
example_app_prefs_init (ExampleAppPrefs *prefs)
{
gtk_widget_init_template (GTK_WIDGET (prefs));
prefs->settings = g_settings_new ("org.gtk.exampleapp");
- g_settings_bind (prefs->settings, "font",
- prefs->font, "font",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (prefs->settings, "transition",
- prefs->transition, "active-id",
- G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind_with_mapping (prefs->settings, "font",
+ prefs->font, "font-desc",
+ G_SETTINGS_BIND_DEFAULT,
+ string_to_font_desc,
+ font_desc_to_string,
+ NULL, NULL);
+ g_settings_bind_with_mapping (prefs->settings, "transition",
+ prefs->transition, "selected",
+ G_SETTINGS_BIND_DEFAULT,
+ transition_to_pos,
+ pos_to_transition,
+ NULL, NULL);
}
static void
</object>
</child>
<child>
- <object class="GtkFontButton" id="font">
+ <object class="GtkFontDialogButton" id="font">
+ <property name="dialog">
+ <object class="GtkFontDialog"/>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</object>
</child>
<child>
- <object class="GtkComboBoxText" id="transition">
- <items>
- <item translatable="yes" id="none">None</item>
- <item translatable="yes" id="crossfade">Fade</item>
- <item translatable="yes" id="slide-left-right">Slide</item>
- </items>
+ <object class="GtkDropDown" id="transition">
+ <property name="model">
+ <object class="GtkStringList">
+ <items>
+ <item translatable="yes">None</item>
+ <item translatable="yes">Fade</item>
+ <item translatable="yes">Slide</item>
+ </items>
+ </object>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
G_DEFINE_TYPE (ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+static gboolean
+string_to_font_desc (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string (s);
+ g_value_take_boxed (value, desc);
+
+ return TRUE;
+}
+
+static GVariant *
+font_desc_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ PangoFontDescription *desc = g_value_get_boxed (value);
+ char *s = pango_font_description_to_string (desc);
+ return g_variant_new_take_string (s);
+}
+
+static gboolean
+transition_to_pos (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ if (strcmp (s, "none") == 0)
+ g_value_set_uint (value, 0);
+ else if (strcmp (s, "crossfade") == 0)
+ g_value_set_uint (value, 1);
+ else
+ g_value_set_uint (value, 2);
+
+ return TRUE;
+}
+
+static GVariant *
+pos_to_transition (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ switch (g_value_get_uint (value))
+ {
+ case 0: return g_variant_new_string ("none");
+ case 1: return g_variant_new_string ("crossfade");
+ case 2: return g_variant_new_string ("slide-left-right");
+ default: g_assert_not_reached ();
+ }
+}
+
static void
example_app_prefs_init (ExampleAppPrefs *prefs)
{
gtk_widget_init_template (GTK_WIDGET (prefs));
prefs->settings = g_settings_new ("org.gtk.exampleapp");
- g_settings_bind (prefs->settings, "font",
- prefs->font, "font",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (prefs->settings, "transition",
- prefs->transition, "active-id",
- G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind_with_mapping (prefs->settings, "font",
+ prefs->font, "font-desc",
+ G_SETTINGS_BIND_DEFAULT,
+ string_to_font_desc,
+ font_desc_to_string,
+ NULL, NULL);
+ g_settings_bind_with_mapping (prefs->settings, "transition",
+ prefs->transition, "selected",
+ G_SETTINGS_BIND_DEFAULT,
+ transition_to_pos,
+ pos_to_transition,
+ NULL, NULL);
}
static void
</object>
</child>
<child>
- <object class="GtkFontButton" id="font">
+ <object class="GtkFontDialogButton" id="font">
+ <property name="dialog">
+ <object class="GtkFontDialog"/>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</object>
</child>
<child>
- <object class="GtkComboBoxText" id="transition">
- <items>
- <item translatable="yes" id="none">None</item>
- <item translatable="yes" id="crossfade">Fade</item>
- <item translatable="yes" id="slide-left-right">Slide</item>
- </items>
+ <object class="GtkDropDown" id="transition">
+ <property name="model">
+ <object class="GtkStringList">
+ <items>
+ <item translatable="yes">None</item>
+ <item translatable="yes">Fade</item>
+ <item translatable="yes">Slide</item>
+ </items>
+ </object>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">1</property>
G_DEFINE_TYPE (ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+static gboolean
+string_to_font_desc (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ PangoFontDescription *desc;
+
+ desc = pango_font_description_from_string (s);
+ g_value_take_boxed (value, desc);
+
+ return TRUE;
+}
+
+static GVariant *
+font_desc_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ PangoFontDescription *desc = g_value_get_boxed (value);
+ char *s = pango_font_description_to_string (desc);
+ return g_variant_new_take_string (s);
+}
+
+static gboolean
+transition_to_pos (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *s = g_variant_get_string (variant, NULL);
+ if (strcmp (s, "none") == 0)
+ g_value_set_uint (value, 0);
+ else if (strcmp (s, "crossfade") == 0)
+ g_value_set_uint (value, 1);
+ else
+ g_value_set_uint (value, 2);
+
+ return TRUE;
+}
+
+static GVariant *
+pos_to_transition (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ switch (g_value_get_uint (value))
+ {
+ case 0: return g_variant_new_string ("none");
+ case 1: return g_variant_new_string ("crossfade");
+ case 2: return g_variant_new_string ("slide-left-right");
+ default: g_assert_not_reached ();
+ }
+}
+
static void
example_app_prefs_init (ExampleAppPrefs *prefs)
{
gtk_widget_init_template (GTK_WIDGET (prefs));
prefs->settings = g_settings_new ("org.gtk.exampleapp");
- g_settings_bind (prefs->settings, "font",
- prefs->font, "font",
- G_SETTINGS_BIND_DEFAULT);
- g_settings_bind (prefs->settings, "transition",
- prefs->transition, "active-id",
- G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind_with_mapping (prefs->settings, "font",
+ prefs->font, "font-desc",
+ G_SETTINGS_BIND_DEFAULT,
+ string_to_font_desc,
+ font_desc_to_string,
+ NULL, NULL);
+ g_settings_bind_with_mapping (prefs->settings, "transition",
+ prefs->transition, "selected",
+ G_SETTINGS_BIND_DEFAULT,
+ transition_to_pos,
+ pos_to_transition,
+ NULL, NULL);
}
static void
</object>
</child>
<child>
- <object class="GtkFontButton" id="font">
+ <object class="GtkFontDialogButton" id="font">
+ <property name="dialog">
+ <object class="GtkFontDialog"/>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">0</property>
</object>
</child>
<child>
- <object class="GtkComboBoxText" id="transition">
- <items>
- <item translatable="yes" id="none">None</item>
- <item translatable="yes" id="crossfade">Fade</item>
- <item translatable="yes" id="slide-left-right">Slide</item>
- </items>
+ <object class="GtkDropDown" id="transition">
+ <property name="model">
+ <object class="GtkStringList">
+ <items>
+ <item translatable="yes">None</item>
+ <item translatable="yes">Fade</item>
+ <item translatable="yes">Slide</item>
+ </items>
+ </object>
+ </property>
<layout>
<property name="column">1</property>
<property name="row">1</property>