╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────╮ │1536 rects: std.ArrayList(layout.IRect), │ │1537 // backs the per-item strings the text boxes borrow. │ │1538 arena: std.heap.ArenaAllocator, │ │1539 + // whether the owning view considers this flow selected; only then does the│ │1540 + // selected item show its border. │ │1541 + selected: bool, │ │1542 │ │1543 pub const Item = struct { text: []const u8, link: []const u8 = "" }; │ │1544 │ ╰─────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────╮ │1549 .text_boxes = .empty, │ │1550 .rects = .empty, │ │1551 .arena = std.heap.ArenaAllocator.init(allocator),│ │1552 + .selected = true, │ │1553 }; │ │1554 } │ │1555 │ ╰───────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1612 var row_height: usize = 0; │ │1613 var total_width: usize = 0; │ │1614 for (self.text_boxes.items) |*tb| { │ │1611 - tb.options.border_style = if (self.focus.child_id == tb.getFocus().id) .single else .hidden; │ │1615 + tb.options.border_style = if (self.selected and self.focus.child_id == tb.getFocus().id) .single else .hidden;│ │1616 try tb.build(allocator, .{ │ │1617 .min_size = .{ .width = null, .height = null }, │ │1618 .max_size = .{ .width = max_width, .height = null }, │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─────────────╮ │src/ui/Repo/Issues.zig│ ╰──────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────╮ │335 } │ │336 } │ │337 │ │338 - // the description shows a single border while selected (the focused │ │339 - // TextBox upgrades it to a double border itself). │ │338 + // the pane's selected child shows the selection border: the description│ │339 + // directly, the tags via the flow's selected item. │ │340 const inner = self.detailInner(); │ │341 for (inner.children.keys(), inner.children.values()) |id, *child| { │ │342 switch (child.widget) { │ ╰─────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────╮ │344 else => {}, │ │345 } │ │346 } │ │347 + if (self.tagFlow()) |tf| tf.selected = self.tagsFocused(); │ │348 │ │349 // cap the list at list_max_width only while the detail pane fits beside│ │350 // it. the box drops the detail when the width can't hold both minimums,│ ╰─────────────────────────────────────────────────────────────────────────────────────╯