kwin colour picker fails due to mismatched GVariant types
Steps to repro:
Operate the colour dialogue's colour picker while running under KWin (X11 here, haven't tested wayland). This was tested on gtk3, but the gtkcolorpickerkwin.c
code is the same on gtk3 and gtk4.
Actual result: The picked colour isn't shown; instead the dialogue shows a different colour (which varies from run to run of the application), and emits these critical warnings on console:
(gnome-terminal-preferences:88918): GLib-CRITICAL **: 18:36:30.043: the GVariant format string '(u)' has a type of '(u)' but the given value has a type of '((u))'
(gnome-terminal-preferences:88918): GLib-CRITICAL **: 18:36:30.043: g_variant_get: assertion 'valid_format_string (format_string, TRUE, value)' failed
which are emited from here:
(gdb) where
0 g_log (log_domain=0x7ffff7bd9edd "GLib", log_level=G_LOG_LEVEL_CRITICAL,
format=0x7ffff7bdb270 "the GVariant format string '%s' has a type of '%s' but the given value has a type of '%s'") at ../glib/gmessages.c:1314
1 0x00007ffff7b5815c in valid_format_string (format_string=0x7ffff766a74f "(u)", single=1,
value=0x7fffdc0035b0) at ../glib/gvariant.c:4673
2 0x00007ffff7b59d87 in g_variant_get (value=0x7fffdc0035b0, format_string=0x7ffff766a74f "(u)")
at ../glib/gvariant.c:5521
3 0x00007ffff730c4bf in color_picked (source=<optimized out>, res=<optimized out>,
data=<optimized out>) at ../gtk/gtkcolorpickerkwin.c:135
Analysis:
The code uses an incorrect GVariant format string to unpack the dbus response from kwin, using type (u)
where the variant to unpack has type ((u))
.