@@ -244,6 +244,18 @@ def generate_animations(self, registry, parent):
244
244
r .append ("\t %s.setAnimation('%s', %s);\n " % (target_parent , target , var ))
245
245
return "\n " .join (r )
246
246
247
+ def has_signal (self , registry , signal_name ):
248
+ gen = self
249
+ while True :
250
+ base_type = gen .get_base_type (registry , register_used = False )
251
+ base_gen = registry .components [base_type ] if base_type != 'core.CoreObject' else None
252
+ if base_gen is None :
253
+ break
254
+ if signal_name in base_gen .signals :
255
+ return True
256
+ gen = base_gen
257
+ return False
258
+
247
259
#no cross-component access here
248
260
def pregenerate (self , registry ):
249
261
self .collect_id (registry .id_set )
@@ -257,8 +269,6 @@ def pregenerate(self, registry):
257
269
self .signal_handlers = OrderedDict ()
258
270
self .key_handlers = OrderedDict ()
259
271
#print 'pregenerate', self.name
260
- base_type = self .get_base_type (registry , register_used = False )
261
- base_gen = registry .components [base_type ] if base_type != 'core.CoreObject' else None
262
272
263
273
for (path , name ), (args , code , event , async_ ) in methods .items ():
264
274
oname = name
@@ -269,12 +279,10 @@ def pregenerate(self, registry):
269
279
signal_name = name [2 ].lower () + name [3 :] #check that there's no signal with that name
270
280
is_pressed = is_on and name .endswith ("Pressed" ) and len (name ) > (2 + 7 ) #skipping onPressed
271
281
is_changed = is_on and name .endswith ("Changed" )
272
- if is_changed :
273
- if signal_name in base_gen .signals :
274
- is_changed = False
275
- if is_pressed :
276
- if signal_name in base_gen .signals :
277
- is_pressed = False
282
+ if is_changed and self .has_signal (registry , signal_name ):
283
+ is_changed = False
284
+ if is_pressed and self .has_signal (registry , signal_name ):
285
+ is_pressed = False
278
286
279
287
if is_on :
280
288
name = name [2 ].lower () + name [3 :]
0 commit comments