[gtk/gtk-3-24] colorpickershell: Unpack the tuple returned from PickColor()



commit dce33fa83028559c513aade9c1d5cc7bfef3aec7
Author: Iain Lane <iainl gnome org>
Date:   Mon Aug 13 13:52:41 2018 +0100

    colorpickershell: Unpack the tuple returned from PickColor()
    
    When calling PickColor on org.gnome.Shell, we get back an "a{sv}", which
    GDBus provides to us as "(a{sv})".
    
    At the minute we're not unpacking this tuple, and so picking fails with
    messages like:
    
      GLib-CRITICAL **: 13:38:19.439: g_variant_lookup_value: assertion 'g_variant_is_of_type (dictionary, 
G_VARIANT_TYPE ("a{s*}")) || g_variant_is_of_type (dictionary, G_VARIANT_TYPE ("a{o*}"))' failed
    
      Gtk-WARNING **: 13:38:19.439: Picking color failed: No color received
    
    Let's unpack it.

 gtk/gtkcolorpickershell.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkcolorpickershell.c b/gtk/gtkcolorpickershell.c
index d465e0ab5e..6dfa299c50 100644
--- a/gtk/gtkcolorpickershell.c
+++ b/gtk/gtkcolorpickershell.c
@@ -119,7 +119,7 @@ color_picked (GObject      *source,
 {
   GtkColorPickerShell *picker = GTK_COLOR_PICKER_SHELL (data);
   GError *error = NULL;
-  GVariant *ret;
+  GVariant *ret, *dict;
 
   ret = g_dbus_proxy_call_finish (picker->shell_proxy, res, &error);
 
@@ -131,12 +131,15 @@ color_picked (GObject      *source,
     {
       GdkRGBA c;
 
+      g_variant_get (ret, "(@a{sv})", &dict);
+
       c.alpha = 1;
-      if (!g_variant_lookup (ret, "color", "(ddd)", &c.red, &c.green, &c.blue))
+      if (!g_variant_lookup (dict, "color", "(ddd)", &c.red, &c.green, &c.blue))
         g_task_return_new_error (picker->task, G_IO_ERROR, G_IO_ERROR_FAILED, "No color received");
       else
         g_task_return_pointer (picker->task, gdk_rgba_copy (&c), (GDestroyNotify)gdk_rgba_free);
 
+      g_variant_unref (dict);
       g_variant_unref (ret);
     }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]