Skip to content

Commit c0b5c5b

Browse files
committed
check signal presence up to the root generator
1 parent e6f6d44 commit c0b5c5b

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

compiler/js/component.py

+16-8
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,18 @@ def generate_animations(self, registry, parent):
244244
r.append("\t%s.setAnimation('%s', %s);\n" %(target_parent, target, var))
245245
return "\n".join(r)
246246

247+
def has_signal(self, registry, signal_name):
248+
gen = self
249+
while True:
250+
if signal_name in gen.signals:
251+
return True
252+
base_type = gen.get_base_type(registry, register_used = False)
253+
base_gen = registry.components[base_type] if base_type != 'core.CoreObject' else None
254+
if base_gen is None:
255+
break
256+
gen = base_gen
257+
return False
258+
247259
#no cross-component access here
248260
def pregenerate(self, registry):
249261
self.collect_id(registry.id_set)
@@ -257,8 +269,6 @@ def pregenerate(self, registry):
257269
self.signal_handlers = OrderedDict()
258270
self.key_handlers = OrderedDict()
259271
#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
262272

263273
for (path, name), (args, code, event, async_) in methods.items():
264274
oname = name
@@ -269,12 +279,10 @@ def pregenerate(self, registry):
269279
signal_name = name[2].lower() + name[3:] #check that there's no signal with that name
270280
is_pressed = is_on and name.endswith("Pressed") and len(name) > (2 + 7) #skipping onPressed
271281
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
278286

279287
if is_on:
280288
name = name[2].lower() + name[3:]

0 commit comments

Comments
 (0)