From 17df668186ea887f0004ffeb7a72e7126026b36b Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Wed, 24 Apr 2013 12:05:22 -0400 Subject: [PATCH] remoteSearch: support serialized GIcons Since [1], GIO supports generic serialization and deserialization of a GIcon into a GVariant. This is also implemented by GdkPixbuf and could be used instead of our homegrown code for it. This commit adds support to another 'icon' key in the metas dictionary returned by applications for it. The previous 'gicon' and 'icon-data' keys are still parsed and supported as before, but are now deprecated. [1] https://git.gnome.org/browse/glib/commit/?id=c16f914b40c749b938490a4e10a3c54ec1855c42 https://bugzilla.gnome.org/show_bug.cgi?id=698761 --- configure.ac | 2 +- data/org.gnome.ShellSearchProvider2.xml | 2 +- js/ui/remoteSearch.js | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 1e390bb1c..21ba3025f 100644 --- a/configure.ac +++ b/configure.ac @@ -65,7 +65,7 @@ GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GJS_MIN_VERSION=1.35.4 MUTTER_MIN_VERSION=3.8.1 GTK_MIN_VERSION=3.7.9 -GIO_MIN_VERSION=2.35.0 +GIO_MIN_VERSION=2.37.0 LIBECAL_MIN_VERSION=3.5.3 LIBEDATASERVER_MIN_VERSION=3.5.3 TELEPATHY_GLIB_MIN_VERSION=0.17.5 diff --git a/data/org.gnome.ShellSearchProvider2.xml b/data/org.gnome.ShellSearchProvider2.xml index 7947d0346..9502340e4 100644 --- a/data/org.gnome.ShellSearchProvider2.xml +++ b/data/org.gnome.ShellSearchProvider2.xml @@ -46,7 +46,7 @@ diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js index e7cd6fea1..3d0c759b8 100644 --- a/js/ui/remoteSearch.js +++ b/js/ui/remoteSearch.js @@ -187,7 +187,9 @@ const RemoteSearchProvider = new Lang.Class({ createIcon: function(size, meta) { let gicon; - if (meta['gicon']) { + if (meta['icon']) { + gicon = Gio.icon_deserialize(meta['icon']); + } else if (meta['gicon']) { gicon = Gio.icon_new_for_string(meta['gicon']); } else if (meta['icon-data']) { let [width, height, rowStride, hasAlpha, @@ -240,8 +242,12 @@ const RemoteSearchProvider = new Lang.Class({ let metas = results[0]; let resultMetas = []; for (let i = 0; i < metas.length; i++) { - for (let prop in metas[i]) - metas[i][prop] = metas[i][prop].deep_unpack(); + for (let prop in metas[i]) { + // we can use the serialized icon variant directly + if (prop != 'icon') + metas[i][prop] = metas[i][prop].deep_unpack(); + } + resultMetas.push({ id: metas[i]['id'], name: metas[i]['name'], description: metas[i]['description'],