From a7f8a62807c65c4646a8653ba3bebf36fddc78fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vuka=C5=A1in=20Vojinovi=C4=87?= <150025636+git-f0x@users.noreply.github.com> Date: Mon, 27 Oct 2025 12:43:49 +0100 Subject: [PATCH] improv: don't resize column for caps lock and error text This prevents the other column items from jumping around depending on if Caps Lock is toggled or if an error is shown. Now only the error text moves depending on if Caps Lock is toggled. --- src/greeter.rs | 36 ++++++++++++++++++++++++------------ src/locker.rs | 29 +++++++++++++++++++---------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/greeter.rs b/src/greeter.rs index 7c245b1..1266d0a 100644 --- a/src/greeter.rs +++ b/src/greeter.rs @@ -17,7 +17,7 @@ use cosmic::{ cosmic_config::{self, ConfigSet}, executor, iced::{ - self, Background, Border, Length, Subscription, alignment, + self, Alignment, Background, Border, Length, Subscription, event::wayland::OutputEvent, futures::SinkExt, platform_specific::{ @@ -510,7 +510,10 @@ impl App { .unwrap_or_default(); let date_time_column = self.common.time.date_time_widget(military_time); - let mut status_row = widget::row::with_capacity(2).padding(16.0).spacing(12.0); + let mut status_row = widget::row::with_capacity(2) + .padding(16.0) + .spacing(12.0) + .align_y(Alignment::Center); if let Some(network_icon) = self.common.network_icon_opt.as_ref() { status_row = status_row.push(network_icon.clone()); @@ -748,11 +751,11 @@ impl App { widget::divider::horizontal::default().width(Length::Fixed(menu_width / 2. - 16.)), button_row, ]) - .align_x(alignment::Horizontal::Left) + .align_x(Alignment::Start) }; let right_element = { - let mut column = widget::column::with_capacity(2) + let mut column = widget::column::with_capacity(5) .spacing(12.0) .max_width(280.0); @@ -778,7 +781,7 @@ impl App { .height(Length::Fixed(78.0)), ) .width(Length::Fill) - .align_x(alignment::Horizontal::Center), + .align_x(Alignment::Center), ) } None => {} @@ -786,7 +789,7 @@ impl App { column = column.push( widget::container(widget::text::title4(&user_data.full_name)) .width(Length::Fill) - .align_x(alignment::Horizontal::Center), + .align_x(Alignment::Center), ); } } @@ -848,6 +851,8 @@ impl App { if self.common.caps_lock { column = column.push(widget::text(fl!("caps-lock"))); + } else if self.common.error_opt.is_none() { + column = column.push(widget::text("")); } } None => { @@ -871,17 +876,24 @@ impl App { } if let Some(error) = &self.common.error_opt { - column = column.push(widget::text(error)); + column = column.push( + widget::text(error) + .class(theme::Text::Color(iced::Color::from_rgb(1.0, 0.0, 0.0))), + ); + if !self.common.caps_lock { + column = column.push(widget::text("")); + } + } else { + column = column.push(widget::text("")); } widget::container(column) - .align_x(alignment::Horizontal::Center) + .align_x(Alignment::Center) .width(Length::Fill) }; let menu = widget::container( widget::layer_container( - iced::widget::row![left_element, right_element] - .align_y(alignment::Alignment::Center), + iced::widget::row![left_element, right_element].align_y(Alignment::Center), ) .layer(cosmic::cosmic_theme::Layer::Background) .padding(16) @@ -902,8 +914,8 @@ impl App { .padding([32.0, 0.0, 0.0, 0.0]) .width(Length::Fill) .height(Length::Shrink) - .align_x(alignment::Horizontal::Center) - .align_y(alignment::Vertical::Top); + .align_x(Alignment::Center) + .align_y(Alignment::Start); let popover = widget::popover(menu).modal(true); match self.dialog_page_opt { diff --git a/src/locker.rs b/src/locker.rs index e3432c7..9c6da9e 100644 --- a/src/locker.rs +++ b/src/locker.rs @@ -10,7 +10,7 @@ use cosmic::surface; use cosmic::{ Element, executor, iced::{ - self, Background, Border, Length, Subscription, alignment, + self, Alignment, Background, Border, Length, Subscription, event::wayland::{OutputEvent, SessionLockEvent}, futures::{self, SinkExt}, platform_specific::shell::wayland::commands::session_lock::{ @@ -414,7 +414,7 @@ impl App { widget::divider::horizontal::default().width(Length::Fixed(menu_width / 2. - 16.)), button_row, ]) - .align_x(alignment::Horizontal::Left) + .align_x(Alignment::Start) }; let right_element = { @@ -431,7 +431,7 @@ impl App { .height(Length::Fixed(78.0)), ) .width(Length::Fill) - .align_x(alignment::Horizontal::Center), + .align_x(Alignment::Center), ) } None => {} @@ -440,7 +440,7 @@ impl App { column = column.push( widget::container(widget::text::title4(&self.flags.user_data.full_name)) .width(Length::Fill) - .align_x(alignment::Horizontal::Center), + .align_x(Alignment::Center), ); match &self.common.prompt_opt { @@ -481,6 +481,8 @@ impl App { if self.common.caps_lock { column = column.push(widget::text(fl!("caps-lock"))); + } else if self.common.error_opt.is_none() { + column = column.push(widget::text("")); } } None => { @@ -491,18 +493,25 @@ impl App { } if let Some(error) = &self.common.error_opt { - column = column.push(widget::text(error)); + column = column.push( + widget::text(error) + .class(theme::Text::Color(iced::Color::from_rgb(1.0, 0.0, 0.0))), + ); + if !self.common.caps_lock { + column = column.push(widget::text("")); + } + } else { + column = column.push(widget::text("")); } widget::container(column) - .align_x(alignment::Horizontal::Center) + .align_x(Alignment::Center) .width(Length::Fill) }; widget::container( widget::layer_container( - iced::widget::row![left_element, right_element] - .align_y(alignment::Alignment::Center), + iced::widget::row![left_element, right_element].align_y(Alignment::Center), ) .layer(cosmic::cosmic_theme::Layer::Background) .padding(16) @@ -523,8 +532,8 @@ impl App { .padding([32.0, 0.0, 0.0, 0.0]) .width(Length::Fill) .height(Length::Fill) - .align_x(alignment::Horizontal::Center) - .align_y(alignment::Vertical::Top) + .align_x(Alignment::Center) + .align_y(Alignment::Start) .class(cosmic::theme::Container::Transparent) .into() }