window: rework poppable pages tracking

This commit is contained in:
Peter Eisenmann
2024-06-05 15:45:59 +02:00
parent b52005acef
commit 41c9f32724

View File

@@ -74,8 +74,6 @@ class OsInstallerWindow(Adw.ApplicationWindow):
current_page = None
navigation_lock = Lock()
pages = []
# stack of previous pages when changing pages by name
previous_pages = []
def __init__(self, **kwargs):
super().__init__(**kwargs)
@@ -87,6 +85,8 @@ class OsInstallerWindow(Adw.ApplicationWindow):
global_state.reload_title_image = self._reload_title_image
global_state.installation_failed = self.show_failed_page
self.previous_pages = []
# determine available pages
self._determine_available_pages()
@@ -139,10 +139,8 @@ class OsInstallerWindow(Adw.ApplicationWindow):
global_state.set_config('fixed_language', '')
return True
def _initialize_page(self, page_name, by_name: bool = False):
# only add permanent pages to page list
if not by_name:
self.pages.append(page_name)
def _initialize_page(self, page_name):
self.pages.append(page_name)
wrapper = PageWrapper(page_name_to_type[page_name]())
self.main_stack.add_named(wrapper, page_name)
return wrapper
@@ -195,10 +193,7 @@ class OsInstallerWindow(Adw.ApplicationWindow):
def _load_page_by_name(self, page_name: str) -> None:
self.current_page.unload()
if page := self.main_stack.get_child_by_name(page_name):
self.current_page = page
else:
self.current_page = self._initialize_page(page_name, True)
self.current_page = self._initialize_page(page_name)
self.current_page.load()
self.main_stack.set_visible_child(self.current_page)
@@ -208,13 +203,14 @@ class OsInstallerWindow(Adw.ApplicationWindow):
self.reload_revealer.set_reveal_child(self.current_page.can_reload())
def _load_previous_page(self):
assert len(self.previous_pages) > 0, 'Logic Error: No previous pages to go to!'
assert self.previous_pages, 'Logic Error: No previous pages to go to!'
self.current_page.unload()
popped_page = self.current_page
self.pages.pop()
page_name = self.previous_pages.pop()
self.current_page = self.main_stack.get_child_by_name(page_name)
previous_page_name = self.previous_pages.pop()
self.current_page = self.main_stack.get_child_by_name(previous_page_name)
self.current_page.load()
self.main_stack.set_visible_child(self.current_page)