aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib
diff options
context:
space:
mode:
authorAurélien Gâteau <aurelien.gateau@canonical.com>2012-01-23 14:38:36 +0100
committerAurélien Gâteau <aurelien.gateau@canonical.com>2012-01-23 14:38:36 +0100
commit9a01ce5b74bd5d2012a59e9d55a49531da1c4d14 (patch)
tree28b8c527405819911020bc463caeb2e76e62203e /libdbusmenu-glib
parent57befc99feb45329551f956beeb594df3b541835 (diff)
downloadlibdbusmenu-9a01ce5b74bd5d2012a59e9d55a49531da1c4d14.tar.gz
libdbusmenu-9a01ce5b74bd5d2012a59e9d55a49531da1c4d14.tar.bz2
libdbusmenu-9a01ce5b74bd5d2012a59e9d55a49531da1c4d14.zip
Change icon-data to contains raw png bytes, without base64 encoding
Reasons: - base64 encoding is not necessary because dbusmenu properties can use any dbus-supported types. - faster: no need to base64 decode/encode images - more efficient: base64-encoded data is 1/3 bigger than raw data
Diffstat (limited to 'libdbusmenu-glib')
-rw-r--r--libdbusmenu-glib/menuitem.c51
-rw-r--r--libdbusmenu-glib/menuitem.h2
2 files changed, 53 insertions, 0 deletions
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c
index c9c7736..30ae277 100644
--- a/libdbusmenu-glib/menuitem.c
+++ b/libdbusmenu-glib/menuitem.c
@@ -1127,6 +1127,32 @@ dbusmenu_menuitem_property_set_int (DbusmenuMenuitem * mi, const gchar * propert
}
/**
+ * dbusmenu_menuitem_property_set_byte_array:
+ * @mi: The #DbusmenuMenuitem to set the property on.
+ * @property: Name of the property to set.
+ * @value: The byte array.
+ * @nelements: The number of elements in the byte array.
+ *
+ * Takes a byte array @value and sets it on @property as a
+ * property on @mi. If a property already exists by that name,
+ * then the value is set to the new value. If not, the property
+ * is added. If the value is changed or the property was previously
+ * unset then the signal #DbusmenuMenuitem::prop-changed will be
+ * emitted by this function.
+ *
+ * Return value: A boolean representing if the property value was set.
+ */
+gboolean
+dbusmenu_menuitem_property_set_byte_array (DbusmenuMenuitem * mi, const gchar * property, const guchar * value, gsize nelements)
+{
+ GVariant * variant = NULL;
+ if (value != NULL) {
+ variant = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, value, nelements, sizeof(guchar));
+ }
+ return dbusmenu_menuitem_property_set_variant(mi, property, variant);
+}
+
+/**
* dbusmenu_menuitem_property_set_variant:
* @mi: The #DbusmenuMenuitem to set the property on.
* @property: Name of the property to set.
@@ -1360,6 +1386,31 @@ dbusmenu_menuitem_property_get_int (DbusmenuMenuitem * mi, const gchar * propert
return 0;
}
+/**
+ * dbusmenu_menuitem_property_get_byte_array:
+ * @mi: The #DbusmenuMenuitem to look for the property on.
+ * @property: The property to grab.
+ * @nelements: A pointer to the location to store the number of items (out)
+ *
+ * Look up a property on @mi and return the value of it if
+ * it exits. #NULL will be returned if the property doesn't
+ * exist.
+ *
+ * Return value: (array length=nelements)(element-type guint8)(transfer none): A byte array with the
+ * value of the property that shouldn't be free'd. Or #NULL if the property
+ * is not set or is not a byte array.
+ */
+const guchar *
+dbusmenu_menuitem_property_get_byte_array (DbusmenuMenuitem * mi, const gchar * property, gsize * nelements)
+{
+ GVariant * variant = dbusmenu_menuitem_property_get_variant(mi, property);
+ if (variant == NULL) {
+ *nelements = 0;
+ return NULL;
+ }
+ if (!g_variant_type_equal(g_variant_get_type(variant), G_VARIANT_TYPE("ay"))) return NULL;
+ return g_variant_get_fixed_array(variant, nelements, sizeof(guchar));
+}
/**
* dbusmenu_menuitem_property_exist:
diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h
index 985e1a3..64dc87c 100644
--- a/libdbusmenu-glib/menuitem.h
+++ b/libdbusmenu-glib/menuitem.h
@@ -485,10 +485,12 @@ gboolean dbusmenu_menuitem_property_set (DbusmenuMenuitem * mi, const gchar * pr
gboolean dbusmenu_menuitem_property_set_variant (DbusmenuMenuitem * mi, const gchar * property, GVariant * value);
gboolean dbusmenu_menuitem_property_set_bool (DbusmenuMenuitem * mi, const gchar * property, const gboolean value);
gboolean dbusmenu_menuitem_property_set_int (DbusmenuMenuitem * mi, const gchar * property, const gint value);
+gboolean dbusmenu_menuitem_property_set_byte_array (DbusmenuMenuitem * mi, const gchar * property, const guchar * value, gsize nelements);
const gchar * dbusmenu_menuitem_property_get (DbusmenuMenuitem * mi, const gchar * property);
GVariant * dbusmenu_menuitem_property_get_variant (DbusmenuMenuitem * mi, const gchar * property);
gboolean dbusmenu_menuitem_property_get_bool (DbusmenuMenuitem * mi, const gchar * property);
gint dbusmenu_menuitem_property_get_int (DbusmenuMenuitem * mi, const gchar * property);
+const guchar * dbusmenu_menuitem_property_get_byte_array (DbusmenuMenuitem * mi, const gchar * property, gsize * nelements);
gboolean dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property);
GList * dbusmenu_menuitem_properties_list (DbusmenuMenuitem * mi) G_GNUC_WARN_UNUSED_RESULT;
GHashTable * dbusmenu_menuitem_properties_copy (DbusmenuMenuitem * mi);