@@ -150,14 +150,21 @@ impl ListStore {
150
150
( * func) ( & a) . into_glib ( )
151
151
}
152
152
153
+ // GIO prior to 2.76 requires a non-NULL item to be passed in so we're constructing a fake item here.
154
+ // See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3284
155
+ #[ cfg( not( feature = "v2_76" ) ) ]
153
156
unsafe {
154
- // GIO requires a non-NULL item to be passed in so we're constructing a fake item here.
155
- // See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3284
157
+ let g_class: * mut glib:: gobject_ffi:: GTypeClass =
158
+ glib:: gobject_ffi:: g_type_class_peek ( self . item_type ( ) . into_glib ( ) ) as * mut _ ;
159
+
160
+ // g_class will be `NULL` when no instance of the `item-type` has been created yet.
161
+ // See https://github.com/gtk-rs/gtk-rs-core/issues/1767
162
+ if g_class. is_null ( ) {
163
+ return None ;
164
+ }
165
+
156
166
let item = glib:: gobject_ffi:: GObject {
157
- g_type_instance : glib:: gobject_ffi:: GTypeInstance {
158
- g_class : glib:: gobject_ffi:: g_type_class_peek ( self . item_type ( ) . into_glib ( ) )
159
- as * mut _ ,
160
- } ,
167
+ g_type_instance : glib:: gobject_ffi:: GTypeInstance { g_class } ,
161
168
ref_count : 1 ,
162
169
qdata : std:: ptr:: null_mut ( ) ,
163
170
} ;
@@ -178,6 +185,26 @@ impl ListStore {
178
185
179
186
found. then ( || position. assume_init ( ) )
180
187
}
188
+
189
+ #[ cfg( feature = "v2_76" ) ]
190
+ unsafe {
191
+ let mut func = equal_func;
192
+ let func_obj: & mut ( dyn FnMut ( & Object ) -> bool ) = & mut func;
193
+ let func_ptr =
194
+ & func_obj as * const & mut ( dyn FnMut ( & Object ) -> bool ) as glib:: ffi:: gpointer ;
195
+
196
+ let mut position = std:: mem:: MaybeUninit :: uninit ( ) ;
197
+
198
+ let found = bool:: from_glib ( ffi:: g_list_store_find_with_equal_func_full (
199
+ self . to_glib_none ( ) . 0 ,
200
+ std:: ptr:: null_mut ( ) ,
201
+ Some ( equal_func_trampoline) ,
202
+ func_ptr,
203
+ position. as_mut_ptr ( ) ,
204
+ ) ) ;
205
+
206
+ found. then ( || position. assume_init ( ) )
207
+ }
181
208
}
182
209
}
183
210
0 commit comments