diff --git a/sandbox/will/layer_order.py b/sandbox/will/layer_order.py new file mode 100644 index 000000000..d5a5a8fde --- /dev/null +++ b/sandbox/will/layer_order.py @@ -0,0 +1,39 @@ +from textual.app import App, ComposeResult +from textual.widgets import Static + + +class OrderApp(App): + + CSS = """ + Screen { + layout: center; + } + Static { + border: heavy white; + } + #one { + background: red; + width:20; + height: 30; + } + #two { + background: blue; + width:30; + height: 20; + } + #three { + background: green; + width:40; + height:10 + } + """ + + def compose(self) -> ComposeResult: + yield Static("One", id="one") + yield Static("Two", id="two") + yield Static("Three", id="three") + + +app = OrderApp() +if __name__ == "__main__": + app.run() diff --git a/src/textual/_compositor.py b/src/textual/_compositor.py index 75146670b..77f2a7649 100644 --- a/src/textual/_compositor.py +++ b/src/textual/_compositor.py @@ -462,9 +462,12 @@ class Compositor: @property def layers(self) -> list[tuple[Widget, MapGeometry]]: """Get widgets and geometry in layer order.""" + index_one = itemgetter(1) if self._layers is None: self._layers = sorted( - self.map.items(), key=lambda item: item[1].order, reverse=True + self.map.items(), + key=lambda item: index_one(index_one(item)), + reverse=True, ) return self._layers