Compare commits

..

16 commits

Author SHA1 Message Date
0df32b8143 fix: adapt to cosmic-theme background(transparent) accessor
Leyoda 2026 – GPLv3
2026-07-03 18:21:18 +02:00
5fcd257eae Refresh Cargo lockfile after upstream rebase 2026-07-03 18:21:18 +02:00
69c1151099 chore: resolve local graphics dependencies 2026-07-03 18:21:18 +02:00
d2379253de chore: use local glyphon lockfile 2026-07-03 18:21:18 +02:00
6ca9abf3d7 chore: refresh lockfile for libcosmic-yoda rebase
Bump cosmic-freedesktop-icons SHA (and other transitive deps) to satisfy
APIs introduced by upstream commits absorbed in libcosmic-yoda squash
rebase on 2026-05-25.

Leyoda 2026 – GPLv3
2026-07-03 18:21:18 +02:00
8ae7eae129 chore: use local cosmic-text checkout 2026-07-03 18:21:18 +02:00
9bb40d6ac7 yoda: use local dbus settings bindings 2026-07-03 18:21:18 +02:00
1fa52f6f27 yoda: use local COSMIC stack 2026-07-03 18:21:18 +02:00
Fred
953478f801
feat: use spinner widget from libcosmic for authentication 2026-06-24 19:12:46 +02:00
Daniel Fox Franke
b877ea6573
fix(justfile): bash syntax error if SOURCE_GIT_HASH was set 2026-06-24 17:03:08 +02:00
Michael Murphy
a57265f480
i18n: translation update from Hosted Weblate (#462)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for [Pop OS/COSMIC
Greeter](https://hosted.weblate.org/projects/pop-os/cosmic-greeter/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pop-os/cosmic-greeter/horizontal-auto.svg)
2026-06-23 17:12:31 +02:00
Hosted Weblate
4b2b044582
i18n: translation updates from weblate
Co-authored-by: CYAXXX <85353920+CYAXXX@users.noreply.github.com>
Co-authored-by: Fedorov Alexei <aleksejfedorov963@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-greeter/kmr/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-greeter/ru/
Translation: Pop OS/COSMIC Greeter
2026-06-23 09:01:23 +02:00
Jeremy Soller
7a0c083f01
Autofill SOURCE_DATE_EPOCH and SOURCE_GIT_HASH during vendoring (#464)
- [X] I have disclosed use of any AI generated code in my commit
messages.
- If you are using an LLM, and do not fully understand the changes it is
making to the code base, do not create a PR.
- In our experience, AI generated code often results in overly complex
code that lacks enough context for a proper fix or feature inclusion.
This results in considerably longer code reviews. Due to this, AI
authored or partially authored PRs may be closed without comment.
- [X] I understand these changes in full and will be able to respond to
review comments.
- [X] My change is accurately described in the commit message.
- [X] My contribution is tested and working as described.
- [X] I have read the [Developer Certificate of
Origin](https://developercertificate.org/) and certify my contribution
under its conditions.

This is a small fix to autofill correct defaults for SOURCE_DATE_EPOCH
and SOURCE_GIT_HASH when running `just vendor`. See
https://github.com/pop-os/cosmic-epoch/issues/3571 for further context.
2026-06-09 07:59:08 -06:00
Daniel Fox Franke
4d72264b89 Autofill SOURCE_DATE_EPOCH and SOURCE_GIT_HASH during vendoring 2026-06-01 15:12:07 -04:00
Jeremy Soller
178d5222ee
i18n: translation update from Hosted Weblate (#458)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for [Pop OS/COSMIC
Greeter](https://hosted.weblate.org/projects/pop-os/cosmic-greeter/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/pop-os/cosmic-greeter/horizontal-auto.svg)
2026-05-26 08:32:42 -06:00
Hosted Weblate
2a2ba9f68f
i18n: translation updates from weblate
Co-authored-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Isaac Subirana <isaacsubiranac@gmail.com>
Co-authored-by: Nara Díaz Viñolas <nara.diaz.vinolas@gmail.com>
Co-authored-by: therealmate <hellogaming91@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-greeter/ca/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-greeter/hu/
Translation: Pop OS/COSMIC Greeter
2026-05-25 13:12:33 +02:00
5 changed files with 51 additions and 123 deletions

View file

@ -0,0 +1,37 @@
cancel = Têk bibe
accessibility = Gihîştin
.screen-reader = Xwînera dîmenderê
.magnifier = Mezinker
.high-contrast = Dijberiya bilind
.invert-colors = Rengên berevajîkirî
authenticating = Tê rastandin...
type-username = Navê bikarhêner:
restart = Ji nû ve bide destpêkirin
user = Bikarhêner
caps-lock = Caps Lock çalak e.
enter-user = Navê bi destan têxîne...
keyboard-layout = Awayê kilîtdankê
restart-now = Niha ji nû ve bide destpêkirin?
restart-timeout =
Pergal wê xweber were jinûvedestpêkirin
{ $seconds ->
[0] niha
[1] di 1 çirke de
*[other] di { $seconds } çirke de.
}
session = Danaşîn
shutdown = Vemrîne
shutdown-now = Niha vemrîne?
shutdown-timeout =
Pergal wê xweber were vemirandin
{ $seconds ->
[0] niha.
[1] di 1 çirke de.
*[other] di { $seconds } çirke de.
}
suspend = Rawestîne
auth-error-default = Rastandinê têk çû. Tika ye dîsa hewl bide.
auth-error-credentials = Borînpeyv şaş e. Tika ye awayê kilîtdankê xwe kontrol bike û dîsa hewl bide.
auth-error-denied = Gihîştin hate astengkirin.
auth-error-maxtries = Gelek hewldanên rastandinê yên şaş.
auth-error-account = Jimarê bikarhêner tune ye yan jî neçalak e.

View file

@ -27,7 +27,7 @@ accessibility = Специальные возможности
.high-contrast = Высокая контрастность
.invert-colors = Инверсия цветов
caps-lock = Включён Caps Lock.
enter-user = Введите имя вручную...
enter-user = Ввести имя вручную...
type-username = Имя пользователя:
authenticating = Аутентификация…
auth-error-default = Сбой аутентификации. Повторите попытку.

View file

@ -92,15 +92,15 @@ vendor:
echo 'directory = "vendor"' >> .cargo/config.toml
echo >> .cargo/config.toml
echo '[env]' >> .cargo/config.toml
if [ -n "${SOURCE_DATE_EPOCH}" ]
then
source_date="$(date -d "@${SOURCE_DATE_EPOCH}" "+%Y-%m-%d")"
echo "VERGEN_GIT_COMMIT_DATE = \"${source_date}\"" >> .cargo/config.toml
if [ -z "${SOURCE_DATE_EPOCH}" ]; then
SOURCE_DATE_EPOCH=$(git log -1 --format='%ct')
fi
if [ -n "${SOURCE_GIT_HASH}" ]
then
echo "VERGEN_GIT_SHA = \"${SOURCE_GIT_HASH}\"" >> .cargo/config.toml
if [ -z "${SOURCE_GIT_HASH}" ]; then
SOURCE_GIT_HASH=$(git rev-parse HEAD)
fi
source_date="$(date -d "@${SOURCE_DATE_EPOCH}" "+%Y-%m-%d")"
echo "VERGEN_GIT_COMMIT_DATE = \"${source_date}\"" >> .cargo/config.toml
echo "VERGEN_GIT_SHA = \"${SOURCE_GIT_HASH}\"" >> .cargo/config.toml
tar pcf vendor.tar .cargo vendor
rm -rf .cargo vendor

View file

@ -390,7 +390,6 @@ pub enum Message {
HighContrast(bool),
InvertColors(bool),
WaylandUpdate(WaylandUpdate),
SpinnerTick,
}
impl From<common::Message> for Message {
@ -420,8 +419,6 @@ pub struct App {
accessibility: Accessibility,
authenticating: bool,
spinner_rotation: f32,
spinner_handle: Option<cosmic::iced::task::Handle>,
}
#[derive(Default)]
@ -902,14 +899,7 @@ impl App {
widget::row::with_capacity(2)
.spacing(8.0)
.align_y(Alignment::Center)
.push(
widget::icon::from_name("process-working-symbolic")
.size(16)
.icon()
.rotation(iced::Rotation::Floating(iced::Radians(
self.spinner_rotation.to_radians(),
))),
)
.push(widget::indeterminate_circular().size(16.0).bar_height(2.0))
.push(widget::text(fl!("authenticating"))),
)
.width(Length::Fill)
@ -1173,8 +1163,6 @@ impl cosmic::Application for App {
randr_list: None,
surface_id_pairs: Vec::new(),
authenticating: false,
spinner_rotation: 0.0,
spinner_handle: None,
};
(app, Task::batch(tasks))
}
@ -1482,39 +1470,12 @@ impl cosmic::Application for App {
self.common.error_opt = None;
self.authenticating = true;
self.send_request(Request::PostAuthMessageResponse { response });
// Start spinner animation if not already running
if self.spinner_handle.is_none() {
let (spinner_task, handle) =
cosmic::task::stream(cosmic::iced::stream::channel(
1,
|mut msg_tx: iced::futures::channel::mpsc::Sender<_>| async move {
let mut interval = time::interval(Duration::from_millis(16)); // ~60fps
loop {
msg_tx
.send(cosmic::Action::App(Message::SpinnerTick))
.await
.unwrap();
interval.tick().await;
}
},
))
.abortable();
self.spinner_handle = Some(handle);
return spinner_task;
}
}
Message::Login => {
self.common.prompt_opt = None;
self.common.error_opt = None;
self.authenticating = false;
// Stop spinner animation
if let Some(handle) = self.spinner_handle.take() {
handle.abort();
}
self.spinner_rotation = 0.0;
match self.flags.sessions.get(&self.selected_session).cloned() {
Some((cmd, env)) => {
self.send_request(Request::StartSession { cmd, env });
@ -1527,12 +1488,6 @@ impl cosmic::Application for App {
self.common.error_opt = Some(error);
self.authenticating = false;
// Stop spinner animation
if let Some(handle) = self.spinner_handle.take() {
handle.abort();
}
self.spinner_rotation = 0.0;
self.send_request(Request::CancelSession);
}
Message::Reconnect => {
@ -1863,10 +1818,6 @@ impl cosmic::Application for App {
};
return reposition_subsurface(*subsurface_id, loc.x as i32, loc.y as i32);
}
Message::SpinnerTick => {
// Update spinner rotation angle (360 degrees per second = 6 degrees per frame at 60fps)
self.spinner_rotation = (self.spinner_rotation + 6.0) % 360.0;
}
}
Task::none()
}

View file

@ -274,7 +274,6 @@ pub enum Message {
Error(String),
Lock,
Unlock,
SpinnerTick,
}
impl From<common::Message> for Message {
@ -312,8 +311,6 @@ pub struct App {
inhibit_opt: Option<Arc<OwnedFd>>,
value_tx_opt: Option<mpsc::Sender<String>>,
authenticating: bool,
spinner_rotation: f32,
spinner_handle: Option<cosmic::iced::task::Handle>,
}
impl App {
@ -566,14 +563,7 @@ impl App {
widget::row::with_capacity(2)
.spacing(8.0)
.align_y(Alignment::Center)
.push(
widget::icon::from_name("process-working-symbolic")
.size(16)
.icon()
.rotation(iced::Rotation::Floating(iced::Radians(
self.spinner_rotation.to_radians(),
))),
)
.push(widget::indeterminate_circular().size(16.0).bar_height(2.0))
.push(widget::text(fl!("authenticating"))),
)
.width(Length::Fill)
@ -675,8 +665,6 @@ impl cosmic::Application for App {
inhibit_opt: None,
value_tx_opt: None,
authenticating: false,
spinner_rotation: 0.0,
spinner_handle: None,
};
let task = if cfg!(feature = "logind") {
@ -1047,39 +1035,10 @@ impl cosmic::Application for App {
self.authenticating = true;
match self.value_tx_opt.take() {
Some(value_tx) => {
// Start spinner animation if not already running
if self.spinner_handle.is_none() {
let (spinner_task, handle) =
cosmic::task::stream(cosmic::iced::stream::channel(
1,
|mut msg_tx: futures::channel::mpsc::Sender<_>| async move {
let mut interval =
tokio::time::interval(Duration::from_millis(16)); // ~60fps
loop {
msg_tx
.send(cosmic::Action::App(Message::SpinnerTick))
.await
.unwrap();
interval.tick().await;
}
},
))
.abortable();
self.spinner_handle = Some(handle);
return Task::batch([
spinner_task,
cosmic::task::future(async move {
value_tx.send(value).await.unwrap();
Message::Channel(value_tx)
}),
]);
} else {
return cosmic::task::future(async move {
value_tx.send(value).await.unwrap();
Message::Channel(value_tx)
});
}
return cosmic::task::future(async move {
value_tx.send(value).await.unwrap();
Message::Channel(value_tx)
});
}
None => tracing::warn!("tried to submit when value_tx_opt not set"),
}
@ -1098,16 +1057,6 @@ impl cosmic::Application for App {
Message::Error(error) => {
self.common.error_opt = Some(error);
self.authenticating = false;
// Stop spinner animation
if let Some(handle) = self.spinner_handle.take() {
handle.abort();
}
self.spinner_rotation = 0.0;
}
Message::SpinnerTick => {
// Update spinner rotation angle (360 degrees per second = 6 degrees per frame at 60fps)
self.spinner_rotation = (self.spinner_rotation + 6.0) % 360.0;
}
Message::Lock => match self.state {
State::Unlocked => {
@ -1119,10 +1068,6 @@ impl cosmic::Application for App {
self.value_tx_opt = None;
// Reset authenticating state
self.authenticating = false;
if let Some(handle) = self.spinner_handle.take() {
handle.abort();
}
self.spinner_rotation = 0.0;
// Try to create lockfile when locking
if let Some(ref lockfile) = self.flags.lockfile_opt
&& let Err(err) = fs::File::create(lockfile)
@ -1151,11 +1096,6 @@ impl cosmic::Application for App {
// Stop authenticating
self.authenticating = false;
// Stop spinner animation
if let Some(handle) = self.spinner_handle.take() {
handle.abort();
}
self.spinner_rotation = 0.0;
// Try to delete lockfile when unlocking
if let Some(ref lockfile) = self.flags.lockfile_opt
&& let Err(err) = fs::remove_file(lockfile)