From be836bc777fd76724e6ed204fe6bda8b5175fdd3 Mon Sep 17 00:00:00 2001 From: Thorsten Ball Date: Tue, 24 Oct 2023 06:45:06 +0200 Subject: [PATCH] gtk: allow closing split panes that have been split --- src/apprt/gtk/Window.zig | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/apprt/gtk/Window.zig b/src/apprt/gtk/Window.zig index 30f037593..1c97fb774 100644 --- a/src/apprt/gtk/Window.zig +++ b/src/apprt/gtk/Window.zig @@ -302,10 +302,27 @@ pub fn closeSurface(self: *Window, surface: *Surface) void { tab.removeChild(); tab.setChild(.{ .surface = sibling_surface }); }, - .paned => |paned_paned| { - log.info("paned is nested, parent is paned. position={}", .{paned_paned[1]}); + .paned => |parent_paned_tuple| { + const parent_paned = parent_paned_tuple[0]; + const parent_paned_position = parent_paned_tuple[1]; + + // Keep position of divider + const parent_paned_position_before = c.gtk_paned_get_position(parent_paned.paned); + + parent_paned.removeChildInPosition(parent_paned_position); + + switch (parent_paned_position) { + .start => parent_paned.addChild1Surface(sibling_surface), + .end => parent_paned.addChild2Surface(sibling_surface), + } + + // Restore position + c.gtk_paned_set_position(parent_paned.paned, parent_paned_position_before); }, } + + const widget = @as(*c.GtkWidget, @ptrCast(sibling_widget)); + _ = c.gtk_widget_grab_focus(widget); }, } }