From 357204b81c6ef2a45996e63ff6008463ed58cd63 Mon Sep 17 00:00:00 2001 From: Pavel Baksy Date: Thu, 18 Dec 2025 12:22:47 +0100 Subject: [PATCH] Replace tab bars with stack switchers for simpler navigation Replaces AdwTabView/AdwTabBar with GtkStack/GtkStackSwitcher in both request and response sections to prevent tab reordering and provide a more compact UI without close buttons. --- src/window.py | 58 ++++++++++++++++++++++----------------------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/src/window.py b/src/window.py index d07c6ae..ccd59d0 100644 --- a/src/window.py +++ b/src/window.py @@ -86,20 +86,18 @@ class RosterWindow(Adw.ApplicationWindow): def _setup_request_tabs(self): """Create request tabs programmatically.""" - # Create tab view - self.request_tab_view = Adw.TabView() + # Create stack for switching between pages + self.request_stack = Gtk.Stack() + self.request_stack.set_vexpand(True) - # Prevent tabs from being closed - self.request_tab_view.connect("close-page", lambda view, page: True) + # Create stack switcher for the tabs + request_switcher = Gtk.StackSwitcher() + request_switcher.set_stack(self.request_stack) + request_switcher.set_halign(Gtk.Align.CENTER) - # Create tab bar to show tabs - request_tab_bar = Adw.TabBar() - request_tab_bar.set_view(self.request_tab_view) - request_tab_bar.set_autohide(False) - - # Add tab bar and view to container - self.request_tabs_container.append(request_tab_bar) - self.request_tabs_container.append(self.request_tab_view) + # Add switcher and stack to container + self.request_tabs_container.append(request_switcher) + self.request_tabs_container.append(self.request_stack) # Headers tab headers_scroll = Gtk.ScrolledWindow() @@ -119,8 +117,7 @@ class RosterWindow(Adw.ApplicationWindow): self.add_header_button.connect("clicked", self.on_add_header_clicked) headers_box.append(self.add_header_button) - headers_page = self.request_tab_view.append(headers_box) - headers_page.set_title("Headers") + self.request_stack.add_titled(headers_box, "headers", "Headers") # Body tab body_scroll = Gtk.ScrolledWindow() @@ -133,25 +130,22 @@ class RosterWindow(Adw.ApplicationWindow): self.body_textview.set_bottom_margin(12) body_scroll.set_child(self.body_textview) - body_page = self.request_tab_view.append(body_scroll) - body_page.set_title("Body") + self.request_stack.add_titled(body_scroll, "body", "Body") def _setup_response_tabs(self): """Create response tabs programmatically.""" - # Create tab view - self.response_tab_view = Adw.TabView() + # Create stack for switching between pages + self.response_stack = Gtk.Stack() + self.response_stack.set_vexpand(True) - # Prevent tabs from being closed - self.response_tab_view.connect("close-page", lambda view, page: True) + # Create stack switcher for the tabs + response_switcher = Gtk.StackSwitcher() + response_switcher.set_stack(self.response_stack) + response_switcher.set_halign(Gtk.Align.CENTER) - # Create tab bar to show tabs - response_tab_bar = Adw.TabBar() - response_tab_bar.set_view(self.response_tab_view) - response_tab_bar.set_autohide(False) - - # Add tab bar and view to container - self.response_tabs_container.append(response_tab_bar) - self.response_tabs_container.append(self.response_tab_view) + # Add switcher and stack to container + self.response_tabs_container.append(response_switcher) + self.response_tabs_container.append(self.response_stack) # Response Headers tab headers_scroll = Gtk.ScrolledWindow() @@ -165,8 +159,7 @@ class RosterWindow(Adw.ApplicationWindow): self.response_headers_textview.set_bottom_margin(12) headers_scroll.set_child(self.response_headers_textview) - headers_page = self.response_tab_view.append(headers_scroll) - headers_page.set_title("Headers") + self.response_stack.add_titled(headers_scroll, "headers", "Headers") # Response Body tab body_scroll = Gtk.ScrolledWindow() @@ -180,8 +173,7 @@ class RosterWindow(Adw.ApplicationWindow): self.response_body_textview.set_bottom_margin(12) body_scroll.set_child(self.response_body_textview) - body_page = self.response_tab_view.append(body_scroll) - body_page.set_title("Body") + self.response_stack.add_titled(body_scroll, "body", "Body") @Gtk.Template.Callback() def on_send_clicked(self, button): @@ -383,7 +375,7 @@ class RosterWindow(Adw.ApplicationWindow): buffer.set_text(request.body) # Switch to headers tab - self.request_tab_view.set_selected_page(self.request_tab_view.get_nth_page(0)) + self.request_stack.set_visible_child_name("headers") self._show_toast("Request loaded from history")