From 4ac89a44f258dba7a2109df244a9eca76d611c91 Mon Sep 17 00:00:00 2001 From: LynithDev <61880709+LynithDev@users.noreply.github.com> Date: Fri, 10 Jul 2026 21:24:30 +0200 Subject: [PATCH] fix(ui): Onboarding navbar window titlebar buttons finally work --- packages/oneclient_app/src/components/mod.rs | 2 +- .../src/components/navbar/mod.rs | 2 + .../components/navbar/onboarding_navbar.rs | 43 +++++++++++++++++++ .../src/layout/onboarding_shell.rs | 29 ++----------- 4 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 packages/oneclient_app/src/components/navbar/onboarding_navbar.rs diff --git a/packages/oneclient_app/src/components/mod.rs b/packages/oneclient_app/src/components/mod.rs index 510c016b..42c9d806 100644 --- a/packages/oneclient_app/src/components/mod.rs +++ b/packages/oneclient_app/src/components/mod.rs @@ -41,7 +41,7 @@ pub use link_confirm::ConfirmLinkOverlay; pub use local_image::LocalImage; pub use log_viewer::LogViewer; pub use major_version_card::MajorVersionCard; -pub use navbar::AppNavbar; +pub use navbar::{AppNavbar, OnboardingNavbar}; pub(crate) use navbar::window_controls; pub use notifications::NotificationCenter; pub use overlay_popup::OverlayPopup; diff --git a/packages/oneclient_app/src/components/navbar/mod.rs b/packages/oneclient_app/src/components/navbar/mod.rs index 075aa93d..3138fa63 100644 --- a/packages/oneclient_app/src/components/navbar/mod.rs +++ b/packages/oneclient_app/src/components/navbar/mod.rs @@ -1,6 +1,8 @@ mod app_navbar; +mod onboarding_navbar; pub use app_navbar::Navbar as AppNavbar; +pub use onboarding_navbar::OnboardingNavbar; use freya::prelude::*; diff --git a/packages/oneclient_app/src/components/navbar/onboarding_navbar.rs b/packages/oneclient_app/src/components/navbar/onboarding_navbar.rs new file mode 100644 index 00000000..7118d727 --- /dev/null +++ b/packages/oneclient_app/src/components/navbar/onboarding_navbar.rs @@ -0,0 +1,43 @@ +use freya::prelude::*; + +use crate::components::window_controls; +use crate::theme::{self, colors}; + +#[derive(PartialEq)] +pub struct OnboardingNavbar; + +impl Component for OnboardingNavbar { + fn render(&self) -> impl IntoElement { + rect() + .width(Size::fill()) + .height(Size::px(theme::NAVBAR_HEIGHT_PX)) + .child( + rect() + .horizontal() + .width(Size::fill()) + .height(Size::fill()) + .content(Content::Flex) + .cross_align(Alignment::Center) + .padding(Gaps::new_symmetric(0., 24.)) + .child(logo()) + .child(rect().width(Size::flex(1.0)).height(Size::fill())) + .child(window_controls()), + ) + .child( + rect() + .window_drag() + .width(Size::window_percent(100.)) + .height(Size::px(theme::NAVBAR_HEIGHT_PX)) + .position(Position::new_absolute().top(0.).left(0.).right(0.)), + ) + } +} + +fn logo() -> impl IntoElement { + let bytes = use_memo(|| crate::AppAssets::get_bytes("logo.svg").unwrap_or_default()); + + svg(bytes.read().cloned()) + .height(Size::px(36.)) + .width(Size::px(170.)) + .color(colors::fg_primary()) +} diff --git a/packages/oneclient_app/src/layout/onboarding_shell.rs b/packages/oneclient_app/src/layout/onboarding_shell.rs index 4d50ff02..4fb33e7d 100644 --- a/packages/oneclient_app/src/layout/onboarding_shell.rs +++ b/packages/oneclient_app/src/layout/onboarding_shell.rs @@ -4,12 +4,12 @@ use freya::prelude::*; use freya::router::{Outlet, use_route}; use crate::Route; -use crate::components::window_controls; +use crate::components::OnboardingNavbar; use crate::hooks::{ OnboardingSelectionState, has_migration_data, onboarding_bundles_items, use_migration, use_onboarding_bundles, use_provide_onboarding_selection, }; -use crate::theme::{self, colors}; +use crate::theme::colors; use crate::view::onboarding::{LoadingBackdrop, onboarding_step_index, onboarding_total}; #[derive(PartialEq)] @@ -71,7 +71,7 @@ impl Component for OnboardingShell { step_index, onboarding_total(detected_migration), )) - .child(header()) + .child(OnboardingNavbar) .child( rect() .width(Size::fill()) @@ -99,29 +99,6 @@ fn progress_bar(step_index: usize, total: usize) -> impl IntoElement { ) } -fn header() -> impl IntoElement { - rect() - .horizontal() - .width(Size::fill()) - .height(Size::px(theme::NAVBAR_HEIGHT_PX)) - .content(Content::Flex) - .cross_align(Alignment::Center) - .padding(Gaps::new_symmetric(0., 24.)) - .window_drag() - .child(logo()) - .child(rect().width(Size::flex(1.0)).height(Size::fill())) - .child(window_controls()) -} - -fn logo() -> impl IntoElement { - let bytes = use_memo(|| crate::AppAssets::get_bytes("logo.svg").unwrap_or_default()); - - svg(bytes.read().cloned()) - .height(Size::px(36.)) - .width(Size::px(170.)) - .color(colors::fg_primary()) -} - fn copyright() -> impl IntoElement { rect() .position(Position::new_absolute().bottom(16.).left(24.))