We previously had the problem that overriding keypress() skipped
the proper calculation of the top widget's size, leading to broken
scrolling behavior in the flowlist. We now always use urwid.Frame's
keypress method, but we make sure that urwid.Pile and urwid.Columns
delegate to the currently focused component.
This commit is contained in:
Maximilian Hils 2017-12-14 14:38:32 +01:00
parent 62561ed428
commit 079507e4b6

View File

@ -156,12 +156,14 @@ class Window(urwid.Frame):
w = urwid.Pile( w = urwid.Pile(
[ [
wrapped(i) for i, s in enumerate(self.stacks) wrapped(i) for i, s in enumerate(self.stacks)
] ],
focus_item=self.pane
) )
else: else:
w = urwid.Columns( w = urwid.Columns(
[wrapped(i) for i, s in enumerate(self.stacks)], [wrapped(i) for i, s in enumerate(self.stacks)],
dividechars=1 dividechars=1,
focus_column=self.pane
) )
self.body = urwid.AttrWrap(w, "background") self.body = urwid.AttrWrap(w, "background")
@ -270,13 +272,12 @@ class Window(urwid.Frame):
return True return True
def keypress(self, size, k): def keypress(self, size, k):
if self.focus_part == "footer": k = super().keypress(size, k)
return super().keypress(size, k) if k:
else: return self.master.keymap.handle(
fs = self.focus_stack().top_widget() self.focus_stack().top_widget().keyctx,
k = fs.keypress(size, k) k
if k: )
return self.master.keymap.handle(fs.keyctx, k)
class Screen(urwid.raw_display.Screen): class Screen(urwid.raw_display.Screen):