[gtk: 27/31] GtkIconPaintable: Add properties for file, icon-name and is-symbolic
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 27/31] GtkIconPaintable: Add properties for file, icon-name and is-symbolic
- Date: Mon, 10 Feb 2020 12:49:02 +0000 (UTC)
commit 8f1253ad26d72eea366456d9def91eda25b0af47
Author: Alexander Larsson <alexl redhat com>
Date: Mon Feb 10 12:51:27 2020 +0100
GtkIconPaintable: Add properties for file, icon-name and is-symbolic
gtk/gtkicontheme.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 118 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 02ac30a197..b589fe2d51 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -3204,6 +3204,13 @@ theme_subdir_load (GtkIconTheme *self,
static void icon_paintable_init (GdkPaintableInterface *iface);
+enum
+{
+ PROP_0,
+ PROP_FILE,
+ PROP_ICON_NAME,
+ PROP_IS_SYMBOLIC,
+};
G_DEFINE_TYPE_WITH_CODE (GtkIconPaintable, gtk_icon_paintable, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
@@ -3222,9 +3229,10 @@ icon_paintable_new (const char *icon_name,
{
GtkIconPaintable *icon;
- icon = g_object_new (GTK_TYPE_ICON_PAINTABLE, NULL);
+ icon = g_object_new (GTK_TYPE_ICON_PAINTABLE,
+ "icon-name", icon_name,
+ NULL);
- icon->icon_name = g_strdup (icon_name);
icon->desired_size = desired_size;
icon->desired_scale = desired_scale;
@@ -3254,12 +3262,120 @@ gtk_icon_paintable_finalize (GObject *object)
G_OBJECT_CLASS (gtk_icon_paintable_parent_class)->finalize (object);
}
+static void
+gtk_icon_paintable_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GtkIconPaintable *icon = GTK_ICON_PAINTABLE (object);
+
+ switch (prop_id)
+ {
+ case PROP_FILE:
+ g_value_take_object (value, gtk_icon_paintable_get_file (icon));
+ break;
+
+ case PROP_ICON_NAME:
+ g_value_set_string (value, icon->icon_name);
+ break;
+
+ case PROP_IS_SYMBOLIC:
+ g_value_set_boolean (value, icon->is_symbolic);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gtk_icon_paintable_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkIconPaintable *icon = GTK_ICON_PAINTABLE (object);
+ GFile *file;
+
+ switch (prop_id)
+ {
+ case PROP_FILE:
+ icon->is_resource = FALSE;
+ g_clear_pointer (&icon->filename, g_free);
+
+ file = G_FILE (g_value_get_object (value));
+ if (file)
+ {
+ icon->is_resource = g_file_has_uri_scheme (file, "resource");
+ if (icon->is_resource)
+ {
+ char *uri = g_file_get_uri (file);
+ icon->filename = g_strdup (uri + 11); /* resource:// */
+ g_free (uri);
+ }
+ else
+ icon->filename = g_file_get_path (file);
+ }
+ break;
+
+ case PROP_ICON_NAME:
+ g_free (icon->icon_name);
+ icon->icon_name = g_value_dup_string (value);
+ break;
+
+ case PROP_IS_SYMBOLIC:
+ icon->is_symbolic = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+
static void
gtk_icon_paintable_class_init (GtkIconPaintableClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->get_property = gtk_icon_paintable_get_property;
+ gobject_class->set_property = gtk_icon_paintable_set_property;
gobject_class->finalize = gtk_icon_paintable_finalize;
+
+ /**
+ * GtkIconPaintable:file:
+ *
+ * The file representing the icon, if any.
+ */
+ g_object_class_install_property (gobject_class, PROP_FILE,
+ g_param_spec_object ("file",
+ P_("file"),
+ P_("The file representing the icon"),
+ G_TYPE_FILE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+ /**
+ * GtkIconPaintable:icon-name:
+ *
+ * The icon name that was chosen during lookup.
+ */
+ g_object_class_install_property (gobject_class, PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ P_("Icon name"),
+ P_("The icon name choosen during lookup"),
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
+ /**
+ * GtkIconPaintable:is-symbolic:
+ *
+ * Whether the icon is symbolic or not.
+ */
+ g_object_class_install_property (gobject_class, PROP_ICON_NAME,
+ g_param_spec_boolean ("is-symbolic",
+ P_("Is symbolic"),
+ P_("If the icon is symbolic"),
+ FALSE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_STATIC_NICK));
}
static GFile *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]