From 388b56b12cc8e7cc17b33efdcb108aa279be3b1b Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Mon, 16 Nov 2009 21:34:18 +0100 Subject: [PATCH] Fix keybindings. Previously, some scoping issue caused all bindings to execute the lastly bound callback. --- src/gui/gui.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gui/gui.py b/src/gui/gui.py index 50c6d31..16fa606 100644 --- a/src/gui/gui.py +++ b/src/gui/gui.py @@ -364,13 +364,19 @@ class WidgetBasedListView(ListView): # Determine the current menu based on the methods available on # the selected widget and on ourselves. menu_items = [] + def make_callback(f): + # This is rather complicated, but loops don't have their own + # scope, so putting do_callback inside the loop would not + # capture the value of function, but only a reference to the + # loop variable (always evaluating to the final value...) + def do_callback(): + f() + self.update() + return do_callback for function in applicable_functions(self.current_widget(),self.binding_map)+\ applicable_functions(self,self.binding_map): (key,description) = self.binding_map[function.__name__] - def do_callback(): - function() - self.update() - menu_items.append((description, do_callback, key)) + menu_items.append((description, make_callback(function), key)) menu_items += super(WidgetBasedListView, self).menu_items() return menu_items -- 2.30.2