diff --git a/structarray.patch b/structarray.patch new file mode 100644 index 0000000..04de13e --- /dev/null +++ b/structarray.patch @@ -0,0 +1,30 @@ +From 9454c01f2b1b82d43eea0f72fe9a28ef50065fc9 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Tue, 18 Dec 2012 21:47:09 +0000 +Subject: Fix marshalling of arrays of boxed struct values + +This fixes methods like gtk_selection_set_with_data(). In such cases +data is passed as an array of struct pointers, so it must be converted +to an array of structs. + +https://bugzilla.gnome.org/show_bug.cgi?id=656312 + +Co-Authored-By: Martin Pitt +--- +diff --git a/gi/pygi-marshal-from-py.c b/gi/pygi-marshal-from-py.c +index dc14ca5..e842227 100644 +--- a/gi/pygi-marshal-from-py.c ++++ b/gi/pygi-marshal-from-py.c +@@ -1009,6 +1009,12 @@ _pygi_marshal_from_py_array (PyGIInvokeState *state, + if (from_py_cleanup) + from_py_cleanup (state, item_arg_cache, item.v_pointer, TRUE); + } ++ } else if (is_boxed && !item_iface_cache->arg_cache.is_pointer) { ++ /* The array elements are not expected to be pointers, but the ++ * elements obtained are boxed pointers themselves, so insert ++ * the pointed to data. ++ */ ++ g_array_insert_vals (array_, i, item.v_pointer, 1); + } else { + g_array_insert_val (array_, i, item); + }