[gtk/prop-list: 23/179] gtk-demo: Make fishbowl info text use bindings
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/prop-list: 23/179] gtk-demo: Make fishbowl info text use bindings
- Date: Sun, 15 Dec 2019 17:27:34 +0000 (UTC)
commit 883a2d7db145ce672b030bb6deed73d48e1bac1c
Author: Benjamin Otte <otte redhat com>
Date: Mon Nov 25 07:28:19 2019 +0100
gtk-demo: Make fishbowl info text use bindings
It's a good demo for how bindings can format multiple properties into an
informative string with 1 line of code (and 5 lines of XML).
demos/gtk-demo/fishbowl.c | 8 ++++++++
demos/gtk-demo/fishbowl.ui | 22 ++++++----------------
demos/gtk-demo/gtkfishbowl.c | 17 -----------------
3 files changed, 14 insertions(+), 33 deletions(-)
---
diff --git a/demos/gtk-demo/fishbowl.c b/demos/gtk-demo/fishbowl.c
index 77c63d561e..326d272b90 100644
--- a/demos/gtk-demo/fishbowl.c
+++ b/demos/gtk-demo/fishbowl.c
@@ -265,6 +265,14 @@ fishbowl_changes_toggled_cb (GtkToggleButton *button,
gtk_button_set_icon_name (GTK_BUTTON (button), "changes-allow");
}
+char *
+format_header_cb (GObject *object,
+ guint count,
+ double fps)
+{
+ return g_strdup_printf ("%u Icons, %.2f fps", count, fps);
+}
+
GtkWidget *
do_fishbowl (GtkWidget *do_widget)
{
diff --git a/demos/gtk-demo/fishbowl.ui b/demos/gtk-demo/fishbowl.ui
index df065d48a4..0abda45124 100644
--- a/demos/gtk-demo/fishbowl.ui
+++ b/demos/gtk-demo/fishbowl.ui
@@ -28,22 +28,12 @@
</child>
<child type="end">
<object class="GtkLabel">
- <property name="label">fps</property>
- </object>
- </child>
- <child type="end">
- <object class="GtkLabel">
- <property name="label" bind-source="bowl" bind-property="framerate-string"/>
- </object>
- </child>
- <child type="end">
- <object class="GtkLabel">
- <property name="label">Icons, </property>
- </object>
- </child>
- <child type="end">
- <object class="GtkLabel">
- <property name="label" bind-source="bowl" bind-property="count"/>
+ <binding name="label">
+ <closure type="gchararray" function="format_header_cb">
+ <lookup name="count">bowl</lookup>
+ <lookup name="framerate">bowl</lookup>
+ </closure>
+ </binding>
</object>
</child>
<child type="end">
diff --git a/demos/gtk-demo/gtkfishbowl.c b/demos/gtk-demo/gtkfishbowl.c
index 0d9f85f124..58c2c5a182 100644
--- a/demos/gtk-demo/gtkfishbowl.c
+++ b/demos/gtk-demo/gtkfishbowl.c
@@ -53,7 +53,6 @@ enum {
PROP_BENCHMARK,
PROP_COUNT,
PROP_FRAMERATE,
- PROP_FRAMERATE_STRING,
PROP_UPDATE_DELAY,
NUM_PROPERTIES
};
@@ -289,14 +288,6 @@ gtk_fishbowl_get_property (GObject *object,
g_value_set_double (value, gtk_fishbowl_get_framerate (fishbowl));
break;
- case PROP_FRAMERATE_STRING:
- {
- char *s = g_strdup_printf ("%.2f", gtk_fishbowl_get_framerate (fishbowl));
- g_value_set_string (value, s);
- g_free (s);
- }
- break;
-
case PROP_UPDATE_DELAY:
g_value_set_int64 (value, gtk_fishbowl_get_update_delay (fishbowl));
break;
@@ -350,13 +341,6 @@ gtk_fishbowl_class_init (GtkFishbowlClass *klass)
0,
G_PARAM_READABLE);
- props[PROP_FRAMERATE_STRING] =
- g_param_spec_string ("framerate-string",
- "Framerate as string",
- "Framerate as string, with 2 decimals",
- NULL,
- G_PARAM_READABLE);
-
props[PROP_UPDATE_DELAY] =
g_param_spec_int64 ("update-delay",
"Update delay",
@@ -508,7 +492,6 @@ gtk_fishbowl_do_update (GtkFishbowl *fishbowl)
priv->framerate = ((int)(priv->framerate * 100))/100.0;
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE]);
- g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE_STRING]);
if (!priv->benchmark)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]