merge: upstream/libcosmic a l'etat pinne par epoch-1.10.0 (7f715bc5d)

Cible : pin le plus recent des Cargo.lock amont d'epoch-1.10.0 (cosmic-osk,
cosmic-viewer), pas master. Apporte la politique de selection du GPU
(src/desktop/gpu.rs) et le correctif de double peinture des items de menu.
Sous-module iced : merge de a31e6c6f8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lionel DARNIS 2026-10-11 06:58:13 +02:00
commit 85e9321971
7 changed files with 97 additions and 18 deletions

View file

@ -1,8 +1,10 @@
- [ ] I have disclosed use of any AI generated code in my commit messages. Replace this text with a description of your changes, and why these changes are important. Read and acknowledge the list below. PRs without a completed checkbox will be closed.
- 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.
- [ ] I understand these changes in full and will be able to respond to review comments.
- [ ] My change is accurately described in the commit message.
- [ ] My contribution is tested and working as described.
- [ ] I have read the [Developer Certificate of Origin](https://developercertificate.org/) and certify my contribution under its conditions.
---
- I have not included any LLM (also known as AI) generated content in this PR, including code, comments, and descriptions.
- I understand these changes in full and will be able to respond to review comments.
- My change is accurately described in the commit message.
- My contribution is tested and working as described.
- I have read the [Developer Certificate of Origin](https://developercertificate.org/) and certify my contribution under its conditions.
- [ ] I have read and followed all of the above requirements. For more information, see our [contributor guide](https://github.com/pop-os/pop/blob/master/CONTRIBUTING.md).

14
.github/workflows/require-checklist.yml vendored Normal file
View file

@ -0,0 +1,14 @@
# From https://github.com/mheap/require-checklist-action, license MIT
name: Require Checklist
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
job1:
runs-on: ubuntu-latest
steps:
- uses: mheap/require-checklist-action@v2
with:
requireChecklist: true

View file

@ -12,13 +12,13 @@ thursday = 星期四
friday = 星期五 friday = 星期五
saturday = 星期六 saturday = 星期六
sunday = 星期日 sunday = 星期日
mon = 週一 mon = 星期一
tue = 週二 tue = 星期二
wed = 週三 wed = 星期三
thu = 週四 thu = 星期四
fri = 週五 fri = 星期五
sat = 週六 sat = 星期六
sun = 週日 sun = 星期日
license = 授權 license = 授權
links = 連結 links = 連結
february = { $year } 年 2 月 february = { $year } 年 2 月

2
iced

@ -1 +1 @@
Subproject commit 24da1dc0e4e5c1b7f803bf8584d10939fe5acdec Subproject commit f8ac890b9c0d52842a6434f4674e603ed7e67687

View file

@ -1,6 +1,8 @@
#[cfg(not(windows))] #[cfg(not(windows))]
pub use freedesktop_desktop_entry as fde; pub use freedesktop_desktop_entry as fde;
#[cfg(not(windows))] #[cfg(not(windows))]
pub mod gpu;
#[cfg(not(windows))]
pub use mime::Mime; pub use mime::Mime;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
#[cfg(not(windows))] #[cfg(not(windows))]

56
src/desktop/gpu.rs Normal file
View file

@ -0,0 +1,56 @@
// Copyright 2026 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use std::collections::HashMap;
/// An available GPU that can be selected by a launcher.
#[derive(Debug, Clone)]
pub struct Descriptor {
pub name: String,
pub environment: HashMap<String, String>,
pub default: bool,
pub discrete: bool,
}
/// A preference to use when choosing a GPU to launch with.
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum Preference {
#[default]
Default,
NonDefault,
}
impl Preference {
/// Find the preferred default GPU for this preference.
pub fn preferred(self, gpus: &[Descriptor]) -> Option<usize> {
let default_idx = gpus.iter().position(|gpu| gpu.default);
if matches!(self, Preference::Default) {
return default_idx;
}
let default_discrete = gpus.iter().position(|gpu| gpu.default && gpu.discrete);
if default_discrete.is_some() {
return default_discrete;
}
let non_default_discrete = gpus.iter().position(|gpu| gpu.discrete);
let non_default = || gpus.iter().position(|gpu| !gpu.default);
non_default_discrete.or_else(non_default).or(default_idx)
}
/// Select the GPU override to launch with.
pub fn select(self, gpus: &[Descriptor]) -> Option<usize> {
if matches!(self, Preference::Default) {
return None;
}
let default_discrete = gpus.iter().position(|gpu| gpu.default && gpu.discrete);
if default_discrete.is_some() {
return None;
}
let non_default_discrete = gpus.iter().position(|gpu| gpu.discrete);
let non_default = || gpus.iter().position(|gpu| !gpu.default);
non_default_discrete.or_else(non_default)
}
}

View file

@ -38,6 +38,10 @@ pub enum Button {
Transparent, Transparent,
} }
fn menu_item_background(component: &Component, background: Color) -> Option<Background> {
(background != Color::from(component.base)).then_some(Background::Color(background))
}
pub fn appearance( pub fn appearance(
theme: &crate::Theme, theme: &crate::Theme,
focused: bool, focused: bool,
@ -149,7 +153,7 @@ pub fn appearance(
// Menu folders cannot be disabled, ignore customized icon and text color // Menu folders cannot be disabled, ignore customized icon and text color
let component = &cosmic.background(theme.transparent).component; let component = &cosmic.background(theme.transparent).component;
let (background, _, _) = color(component); let (background, _, _) = color(component);
appearance.background = Some(Background::Color(background)); appearance.background = menu_item_background(component, background);
appearance.icon_color = Some(component.on.into()); appearance.icon_color = Some(component.on.into());
appearance.text_color = Some(component.on.into()); appearance.text_color = Some(component.on.into());
corner_radii = &cosmic.corner_radii.radius_s; corner_radii = &cosmic.corner_radii.radius_s;
@ -171,8 +175,9 @@ pub fn appearance(
} }
} }
Button::MenuItem => { Button::MenuItem => {
let (background, text, icon) = color(&cosmic.background(theme.transparent).component); let component = &cosmic.background(theme.transparent).component;
appearance.background = Some(Background::Color(background)); let (background, text, icon) = color(component);
appearance.background = menu_item_background(component, background);
appearance.icon_color = icon; appearance.icon_color = icon;
appearance.text_color = text; appearance.text_color = text;
corner_radii = &cosmic.corner_radii.radius_s; corner_radii = &cosmic.corner_radii.radius_s;