|
41 | 41 | _make_path_object_relative, |
42 | 42 | ) |
43 | 43 | from textual._types import CallbackType |
44 | | -from textual._unique import unique_ordered |
45 | 44 | from textual.await_complete import AwaitComplete |
46 | 45 | from textual.binding import ActiveBinding, Binding, BindingsMap |
47 | 46 | from textual.css.match import match |
@@ -441,14 +440,34 @@ def _arrange(self, size: Size) -> DockArrangeResult: |
441 | 440 | if self.ALLOW_IN_MAXIMIZED_VIEW is None |
442 | 441 | else self.ALLOW_IN_MAXIMIZED_VIEW |
443 | 442 | ) |
| 443 | + |
| 444 | + def get_maximize_widgets(maximized: Widget) -> list[Widget]: |
| 445 | + """Get widgets to display in maximized view. |
| 446 | +
|
| 447 | + Returns: |
| 448 | + A list of widgets. |
| 449 | +
|
| 450 | + """ |
| 451 | + # De-duplicate with a set |
| 452 | + widgets = { |
| 453 | + *self.query_children(allow_in_maximized_view), |
| 454 | + *self.query_children(".-textual-system"), |
| 455 | + } |
| 456 | + # Restore order of widgets. |
| 457 | + maximize_widgets = [ |
| 458 | + widget |
| 459 | + for widget in self.children |
| 460 | + if widget in widgets or widget is maximized |
| 461 | + ] |
| 462 | + # Add the maximized widget, if its not already included |
| 463 | + if maximized not in maximize_widgets: |
| 464 | + maximize_widgets.insert(0, maximized) |
| 465 | + return maximize_widgets |
| 466 | + |
444 | 467 | arrangement = self._arrangement_cache[cache_key] = arrange( |
445 | 468 | self, |
446 | 469 | ( |
447 | | - unique_ordered( |
448 | | - self.query_children(allow_in_maximized_view), |
449 | | - self.query_children(".-textual-system"), |
450 | | - [self.maximized], |
451 | | - ) |
| 470 | + get_maximize_widgets(self.maximized) |
452 | 471 | if self.maximized is not None |
453 | 472 | else self._nodes |
454 | 473 | ), |
|
0 commit comments