Give the sidebar its 320 and the compose field the rest of the bar
Two panes both marked :fill-height split the row's spare width between them, because filling the height is taken to mean taking a share of the slack as well. So the list ignored its 320 and came out half the window, with its cards clipped at the fold and the conversation squeezed into what was left. :expand :cross on the list is the vertical axis alone — the height without the share — and the conversation keeps :fill-height, so the slack goes where the note there already said it goes. The compose field asked for :hexpand only in a terminal, which is the case that needs it least: a window is where 260 points is a third of the bar, and the field sat stranded in the middle of it with Send far off to the right. Always now; 260 stays as the minimum it always was. Measured headless at 1365x729: the sidebar's widest child ends at 316, and the field runs 396 to 1273 with Send against the margin. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
140ff99 parent: 264b6da modified
src/frq/app.clj +16 -2 | @@ -1461,7 +1461,12 @@ | ||
| 1461 | 1461 | ;; into three rows rather than scrolling one line sideways. |
| 1462 | 1462 | [:entry {:text @s/draft |
| 1463 | 1463 | :width-request 260 |
| 1464 | - :hexpand @terminal? | |
| 1464 | + ;; Always, not only in a terminal. A window is the case that | |
| 1465 | + ;; needs it more: 260 points is most of a phone's row and a | |
| 1466 | + ;; third of a pane's, and the field sat stranded in the middle | |
| 1467 | + ;; of the bar with the rest of it empty. The number stays as | |
| 1468 | + ;; the minimum it always was. | |
| 1469 | + :hexpand true | |
| 1465 | 1470 | :rows (if @terminal? 3 1) |
| 1466 | 1471 | :placeholder "Message" |
| 1467 | 1472 | :on-change #(reset! s/draft %) |
| @@ -1505,7 +1510,16 @@ | ||
| 1505 | 1510 | ;; contents. Marking the children alone is not enough — what they fill is |
| 1506 | 1511 | ;; whatever the row got. |
| 1507 | 1512 | [:hbox {:spacing 0 :wrap false :fill-height true} |
| 1508 | - [:vbox {:key :list :width-request sidebar-width :fill-height true} | |
| 1513 | + ;; :expand :cross so the width-request is the width. Both panes fill the | |
| 1514 | + ;; height, and a pane that fills the height is also told to take a share | |
| 1515 | + ;; of the row's spare WIDTH — which two panes split between them, so the | |
| 1516 | + ;; list came out half the window with its cards clipped at the fold and | |
| 1517 | + ;; the conversation squeezed beside it. Down a row, :cross is the vertical | |
| 1518 | + ;; axis alone: the height without the share. The conversation keeps | |
| 1519 | + ;; :fill-height and so keeps the slack, which is what the note above says | |
| 1520 | + ;; it takes. | |
| 1521 | + [:vbox {:key :list :width-request sidebar-width :fill-height true | |
| 1522 | + :expand :cross} | |
| 1509 | 1523 | [chats-screen]] |
| 1510 | 1524 | [:vbox {:key :chat :fill-height true} |
| 1511 | 1525 | (if @s/current |
| @@ -1461,7 +1461,12 @@ | |||
| 1461 | ;; into three rows rather than scrolling one line sideways. | 1461 | ;; into three rows rather than scrolling one line sideways. |
| 1462 | [:entry {:text @s/draft | 1462 | [:entry {:text @s/draft |
| 1463 | :width-request 260 | 1463 | :width-request 260 |
| 1464 | - :hexpand @terminal? | 1464 | + ;; Always, not only in a terminal. A window is the case that |
| 1465 | + ;; needs it more: 260 points is most of a phone's row and a | ||
| 1466 | + ;; third of a pane's, and the field sat stranded in the middle | ||
| 1467 | + ;; of the bar with the rest of it empty. The number stays as | ||
| 1468 | + ;; the minimum it always was. | ||
| 1469 | + :hexpand true | ||
| 1465 | :rows (if @terminal? 3 1) | 1470 | :rows (if @terminal? 3 1) |
| 1466 | :placeholder "Message" | 1471 | :placeholder "Message" |
| 1467 | :on-change #(reset! s/draft %) | 1472 | :on-change #(reset! s/draft %) |
| @@ -1505,7 +1510,16 @@ | |||
| 1505 | ;; contents. Marking the children alone is not enough — what they fill is | 1510 | ;; contents. Marking the children alone is not enough — what they fill is |
| 1506 | ;; whatever the row got. | 1511 | ;; whatever the row got. |
| 1507 | [:hbox {:spacing 0 :wrap false :fill-height true} | 1512 | [:hbox {:spacing 0 :wrap false :fill-height true} |
| 1508 | - [:vbox {:key :list :width-request sidebar-width :fill-height true} | 1513 | + ;; :expand :cross so the width-request is the width. Both panes fill the |
| 1514 | + ;; height, and a pane that fills the height is also told to take a share | ||
| 1515 | + ;; of the row's spare WIDTH — which two panes split between them, so the | ||
| 1516 | + ;; list came out half the window with its cards clipped at the fold and | ||
| 1517 | + ;; the conversation squeezed beside it. Down a row, :cross is the vertical | ||
| 1518 | + ;; axis alone: the height without the share. The conversation keeps | ||
| 1519 | + ;; :fill-height and so keeps the slack, which is what the note above says | ||
| 1520 | + ;; it takes. | ||
| 1521 | + [:vbox {:key :list :width-request sidebar-width :fill-height true | ||
| 1522 | + :expand :cross} | ||
| 1509 | [chats-screen]] | 1523 | [chats-screen]] |
| 1510 | [:vbox {:key :chat :fill-height true} | 1524 | [:vbox {:key :chat :fill-height true} |
| 1511 | (if @s/current | 1525 | (if @s/current |