diff --git a/build.zig b/build.zig index bb7a2e6..3e76c00 100644 --- a/build.zig +++ b/build.zig @@ -8,7 +8,7 @@ pub fn build(b: *std.Build) void { const exe = b.addExecutable(.{ .name = "Zivro", - .use_llvm = true, + .use_llvm = optimize == .Debug, .root_module = b.createModule(.{ .root_source_file = b.path("src/main.zig"), .target = target, diff --git a/src/ui/left_panel.zig b/src/ui/left_panel.zig index ef9cf42..27881b8 100644 --- a/src/ui/left_panel.zig +++ b/src/ui/left_panel.zig @@ -31,25 +31,32 @@ fn objectTreeRow(open_doc: *WindowContext.OpenDocument, obj: *Object, depth: u32 const focus_color = dvui.themeGet().focus; - // Визуально строка — это box с подсветкой по hover/selected, а не кнопка. var row = dvui.box( @src(), .{ .dir = .horizontal }, .{ .id_extra = row_id, .expand = .horizontal, - // Постоянной рамки нет; лёгкая заливка по hover и более яркая по selected. - // .color_fill = if (is_selected) focus_color.opacity(0.35) else null, - .color_fill_hover = focus_color.opacity(0.18), }, ); { var hovered: bool = false; const row_data = row.data(); - if (dvui.clicked(row_data, .{ - .hovered = &hovered, - })) { - object_callback.* = .{ .select = obj }; + var select_row: bool = false; + + // Ручная обработка hover/click по строке без пометки события как handled, + // чтобы кнопка удаления могла нормально получать свои события. + for (dvui.events()) |*e| { + switch (e.evt) { + .mouse => |*mouse| { + if (!dvui.eventMatchSimple(e, row_data)) continue; + hovered = true; + if (mouse.action == .press and mouse.button == .left) { + select_row = true; + } + }, + else => {}, + } } const background = is_selected or hovered; @@ -81,6 +88,10 @@ fn objectTreeRow(open_doc: *WindowContext.OpenDocument, obj: *Object, depth: u32 } } content.deinit(); + + if (select_row) { + object_callback.* = .{ .select = obj }; + } } row.deinit(); for (obj.children.items) |*child| {