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.
This commit is contained in:
@@ -119,7 +119,7 @@ color_picked (GObject *source,
|
|||||||
{
|
{
|
||||||
GtkColorPickerShell *picker = GTK_COLOR_PICKER_SHELL (data);
|
GtkColorPickerShell *picker = GTK_COLOR_PICKER_SHELL (data);
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GVariant *ret;
|
GVariant *ret, *dict;
|
||||||
|
|
||||||
ret = g_dbus_proxy_call_finish (picker->shell_proxy, res, &error);
|
ret = g_dbus_proxy_call_finish (picker->shell_proxy, res, &error);
|
||||||
|
|
||||||
@@ -131,12 +131,15 @@ color_picked (GObject *source,
|
|||||||
{
|
{
|
||||||
GdkRGBA c;
|
GdkRGBA c;
|
||||||
|
|
||||||
|
g_variant_get (ret, "(@a{sv})", &dict);
|
||||||
|
|
||||||
c.alpha = 1;
|
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");
|
g_task_return_new_error (picker->task, G_IO_ERROR, G_IO_ERROR_FAILED, "No color received");
|
||||||
else
|
else
|
||||||
g_task_return_pointer (picker->task, gdk_rgba_copy (&c), (GDestroyNotify)gdk_rgba_free);
|
g_task_return_pointer (picker->task, gdk_rgba_copy (&c), (GDestroyNotify)gdk_rgba_free);
|
||||||
|
|
||||||
|
g_variant_unref (dict);
|
||||||
g_variant_unref (ret);
|
g_variant_unref (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user