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
This commit is contained in:
Aleksei Stepanov 2024-02-26 20:49:45 +01:00
parent 346804a832
commit 43af55ec11
1 changed files with 11 additions and 1 deletions

View File

@ -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(("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(("flow",))
def __init__(self, markup, align=urwid.LEFT, wrap=urwid.SPACE, layout=None):
self._mouse_press_item = None
self.selectable_items = []