X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Fgui%2Fgui.py;h=16fa606231e83a71551335f45b6546c3933a2ea3;hb=388b56b12cc8e7cc17b33efdcb108aa279be3b1b;hp=5c4d0b8ee7e221ad26b087909f27ff64091dd20e;hpb=b7578d4c2fa84be732ae5afeaa7d365c54e096e0;p=matthijs%2Fupstream%2Fmobilegtd.git diff --git a/src/gui/gui.py b/src/gui/gui.py index 5c4d0b8..16fa606 100644 --- a/src/gui/gui.py +++ b/src/gui/gui.py @@ -207,8 +207,8 @@ class ListView(View): def __init__(self): super(ListView, self).__init__() self.current_index = None - self.items_cache = [] - self.set_view(appuifw.Listbox([], self.entry_selected)) + self.items_cache = self.items() + self.set_view(appuifw.Listbox(self.items_cache, self.entry_selected)) self.view.bind(EKeyUpArrow,lambda: self.arrow_key_pressed(-1)) self.view.bind(EKeyDownArrow,lambda: self.arrow_key_pressed(1)) @@ -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