From c9b58583d24dbbe31e1952a459cacedf26c25304 Mon Sep 17 00:00:00 2001 From: Aleksei Stepanov Date: Mon, 26 Feb 2024 20:49:45 +0100 Subject: [PATCH] Fix urwid > 2.4.2 compatibility 1. `Columns` widget use FIXED pack method for items if they declare sizing as fixed. 2. `Columns` are implicitly declared as FIXED if all contents sizes are known or can be calculated without external size information. 3. `Text` is explicitly FIXED and FLOW widget (widget knows its size from contents). Fix: explicit declare that widgets are FLOW-only Change-Id: Ic0de5957ed47fadf2f0f02b235178eb03ecd1b04 --- gertty/mywid.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gertty/mywid.py b/gertty/mywid.py index 0cf1963..74fedad 100644 --- a/gertty/mywid.py +++ b/gertty/mywid.py @@ -62,6 +62,10 @@ class FixedRadioButton(urwid.RadioButton): return (len(self.get_label())+4, 1) class TableColumn(urwid.Pile): + def sizing(self): + """Explicit declare flow sizing due to the custom pack method.""" + return frozenset((urwid.FLOW,)) + def pack(self, size, focus=False): maxcol = size[0] mx = max([i[0].pack((maxcol,), focus)[0] for i in self.contents]) @@ -104,7 +108,6 @@ class MyEdit(urwid.Edit): super(MyEdit, self).__init__(*args, **kw) def keypress(self, size, key): - (maxcol,) = size if self._command_map[key] == keymap.YANK: text = self.ring.yank() if text: @@ -349,6 +352,13 @@ class Searchable(object): class HyperText(urwid.Text): _selectable = True + def sizing(self): + """Explicit declare flow sizing due to the custom pack method. + + Normal Text can be rendered as FIXED. + """ + return frozenset((urwid.FLOW,)) + def __init__(self, markup, align=urwid.LEFT, wrap=urwid.SPACE, layout=None): self._mouse_press_item = None self.selectable_items = []