Skip to content
Snippets Groups Projects
Commit 9fe3fe36 authored by Taddeüs Kroes's avatar Taddeüs Kroes
Browse files

Code cleanup.

parent a2f08297
No related branches found
No related tags found
No related merge requests found
......@@ -17,8 +17,8 @@ class Widget(Positionable, Logger):
def __init__(self, x=None, y=None):
Positionable.__init__(self, x, y)
# Map of gesture types to gesture trackers
self.trackers = {}
# List of all active trackers
self.trackers = []
# Map of gesture types to a list of handlers for that type
self.handlers = {}
......@@ -109,17 +109,27 @@ class Widget(Positionable, Logger):
# Remove handler list
del self.handlers[gesture_type][:]
tracker = self.find_tracker(gesture_type)
# Check if any other handlers need the tracker
for gtype in self.trackers[gesture_type].gesture_types:
for gtype in tracker.gesture_types:
if gtype in self.handlers:
return
# No more handlers are bound, remove unused tracker and handlers
del self.trackers[gesture_type]
self.trackers.remove(gesture_type)
for gtype in self.trackers[gesture_type].gesture_types:
for gtype in tracker.gesture_types:
del self.handlers[gtype]
def find_tracker(self, gesture_type):
"""
Find a tracker that is tracking some gesture type.
"""
for tracker in self.trackers:
if gesture_type in tracker.gesture_types:
return tracker
def bind(self, gesture_type, handler, remove_existing=False, **kwargs):
"""
Bind a handler to the specified type of gesture. Create a tracker for
......@@ -130,7 +140,7 @@ class Widget(Positionable, Logger):
if gesture_type not in self.handlers:
tracker = create_tracker(gesture_type, self)
tracker.configure(**kwargs)
self.trackers[gesture_type] = tracker
self.trackers.append(tracker)
self.handlers[gesture_type] = []
# Create empty tracker lists for all supported gestures
......@@ -163,14 +173,14 @@ class Widget(Positionable, Logger):
def delegate_event(self, event):
"""
Delegate a triggered event to child widgets. If a child stops
propagation
Delegate a triggered event to all child widgets. If a child stops
propagation, return so that its siblings and the parent widget will not
delegate the event to their trackers.
"""
if not self.children:
self.propagate_event(event)
else:
child_found = False
if self.children:
event.set_offset(self.get_offset())
child_found = False
# Delegate to children in reverse order because widgets that are
# added later, should be placed over previously added siblings
......@@ -180,13 +190,13 @@ class Widget(Positionable, Logger):
child.delegate_event(event)
if event.is_propagation_stopped():
break
return
if not child_found:
self.propagate_event(event)
if not child_found:
self.propagate_event(event)
def propagate_event(self, event):
for tracker in set(self.trackers.itervalues()):
for tracker in self.trackers:
tracker.handle_event(event)
if event.is_immediate_propagation_stopped():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment