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.
This commit is contained in:
Pavel Baksy 2025-12-18 12:22:47 +01:00
parent 3acceb0912
commit 357204b81c

View File

@ -86,20 +86,18 @@ class RosterWindow(Adw.ApplicationWindow):
def _setup_request_tabs(self): def _setup_request_tabs(self):
"""Create request tabs programmatically.""" """Create request tabs programmatically."""
# Create tab view # Create stack for switching between pages
self.request_tab_view = Adw.TabView() self.request_stack = Gtk.Stack()
self.request_stack.set_vexpand(True)
# Prevent tabs from being closed # Create stack switcher for the tabs
self.request_tab_view.connect("close-page", lambda view, page: True) request_switcher = Gtk.StackSwitcher()
request_switcher.set_stack(self.request_stack)
request_switcher.set_halign(Gtk.Align.CENTER)
# Create tab bar to show tabs # Add switcher and stack to container
request_tab_bar = Adw.TabBar() self.request_tabs_container.append(request_switcher)
request_tab_bar.set_view(self.request_tab_view) self.request_tabs_container.append(self.request_stack)
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)
# Headers tab # Headers tab
headers_scroll = Gtk.ScrolledWindow() headers_scroll = Gtk.ScrolledWindow()
@ -119,8 +117,7 @@ class RosterWindow(Adw.ApplicationWindow):
self.add_header_button.connect("clicked", self.on_add_header_clicked) self.add_header_button.connect("clicked", self.on_add_header_clicked)
headers_box.append(self.add_header_button) headers_box.append(self.add_header_button)
headers_page = self.request_tab_view.append(headers_box) self.request_stack.add_titled(headers_box, "headers", "Headers")
headers_page.set_title("Headers")
# Body tab # Body tab
body_scroll = Gtk.ScrolledWindow() body_scroll = Gtk.ScrolledWindow()
@ -133,25 +130,22 @@ class RosterWindow(Adw.ApplicationWindow):
self.body_textview.set_bottom_margin(12) self.body_textview.set_bottom_margin(12)
body_scroll.set_child(self.body_textview) body_scroll.set_child(self.body_textview)
body_page = self.request_tab_view.append(body_scroll) self.request_stack.add_titled(body_scroll, "body", "Body")
body_page.set_title("Body")
def _setup_response_tabs(self): def _setup_response_tabs(self):
"""Create response tabs programmatically.""" """Create response tabs programmatically."""
# Create tab view # Create stack for switching between pages
self.response_tab_view = Adw.TabView() self.response_stack = Gtk.Stack()
self.response_stack.set_vexpand(True)
# Prevent tabs from being closed # Create stack switcher for the tabs
self.response_tab_view.connect("close-page", lambda view, page: True) response_switcher = Gtk.StackSwitcher()
response_switcher.set_stack(self.response_stack)
response_switcher.set_halign(Gtk.Align.CENTER)
# Create tab bar to show tabs # Add switcher and stack to container
response_tab_bar = Adw.TabBar() self.response_tabs_container.append(response_switcher)
response_tab_bar.set_view(self.response_tab_view) self.response_tabs_container.append(self.response_stack)
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)
# Response Headers tab # Response Headers tab
headers_scroll = Gtk.ScrolledWindow() headers_scroll = Gtk.ScrolledWindow()
@ -165,8 +159,7 @@ class RosterWindow(Adw.ApplicationWindow):
self.response_headers_textview.set_bottom_margin(12) self.response_headers_textview.set_bottom_margin(12)
headers_scroll.set_child(self.response_headers_textview) headers_scroll.set_child(self.response_headers_textview)
headers_page = self.response_tab_view.append(headers_scroll) self.response_stack.add_titled(headers_scroll, "headers", "Headers")
headers_page.set_title("Headers")
# Response Body tab # Response Body tab
body_scroll = Gtk.ScrolledWindow() body_scroll = Gtk.ScrolledWindow()
@ -180,8 +173,7 @@ class RosterWindow(Adw.ApplicationWindow):
self.response_body_textview.set_bottom_margin(12) self.response_body_textview.set_bottom_margin(12)
body_scroll.set_child(self.response_body_textview) body_scroll.set_child(self.response_body_textview)
body_page = self.response_tab_view.append(body_scroll) self.response_stack.add_titled(body_scroll, "body", "Body")
body_page.set_title("Body")
@Gtk.Template.Callback() @Gtk.Template.Callback()
def on_send_clicked(self, button): def on_send_clicked(self, button):
@ -383,7 +375,7 @@ class RosterWindow(Adw.ApplicationWindow):
buffer.set_text(request.body) buffer.set_text(request.body)
# Switch to headers tab # 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") self._show_toast("Request loaded from history")