fix(shortcuts): modified count for accessibility and tiling

These weren't being set previously, so they never showed up.
Also updates remaining things here to use ListButton.
This commit is contained in:
Vukašin Vojinović 2026-04-17 13:03:32 +02:00 • committed by Michael Murphy
parent 48eae39858
commit 317de19eb3
6 changed files with 51 additions and 68 deletions

36
Cargo.lock generated
View file

@ -1199,7 +1199,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
dependencies = [ dependencies = [
"serde", "serde",
"termcolor", "termcolor",
"unicode-width 0.1.14", "unicode-width 0.2.2",
] ]
[[package]] [[package]]
@ -1391,7 +1391,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-config" name = "cosmic-config"
version = "1.0.0" version = "1.0.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"atomicwrites", "atomicwrites",
"cosmic-config-derive", "cosmic-config-derive",
@ -1412,7 +1412,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-config-derive" name = "cosmic-config-derive"
version = "1.0.0" version = "1.0.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.117", "syn 2.0.117",
@ -1827,7 +1827,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-theme" name = "cosmic-theme"
version = "1.0.0" version = "1.0.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"almost", "almost",
"configparser", "configparser",
@ -3250,7 +3250,7 @@ dependencies = [
[[package]] [[package]]
name = "iced" name = "iced"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"dnd", "dnd",
"iced_accessibility", "iced_accessibility",
@ -3271,7 +3271,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_accessibility" name = "iced_accessibility"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"accesskit", "accesskit",
"accesskit_winit", "accesskit_winit",
@ -3280,7 +3280,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_core" name = "iced_core"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"bitflags 2.11.1", "bitflags 2.11.1",
"bytes", "bytes",
@ -3305,7 +3305,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_debug" name = "iced_debug"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"iced_core", "iced_core",
"iced_futures", "iced_futures",
@ -3315,7 +3315,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_futures" name = "iced_futures"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"futures", "futures",
"iced_core", "iced_core",
@ -3329,7 +3329,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_graphics" name = "iced_graphics"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"bitflags 2.11.1", "bitflags 2.11.1",
"bytemuck", "bytemuck",
@ -3350,7 +3350,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_program" name = "iced_program"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"iced_graphics", "iced_graphics",
"iced_runtime", "iced_runtime",
@ -3359,7 +3359,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_renderer" name = "iced_renderer"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"iced_graphics", "iced_graphics",
"iced_tiny_skia", "iced_tiny_skia",
@ -3371,7 +3371,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_runtime" name = "iced_runtime"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"bytes", "bytes",
"cosmic-client-toolkit", "cosmic-client-toolkit",
@ -3387,7 +3387,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_tiny_skia" name = "iced_tiny_skia"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"cosmic-text", "cosmic-text",
@ -3404,7 +3404,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_wgpu" name = "iced_wgpu"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"as-raw-xcb-connection", "as-raw-xcb-connection",
"bitflags 2.11.1", "bitflags 2.11.1",
@ -3435,7 +3435,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_widget" name = "iced_widget"
version = "0.14.2" version = "0.14.2"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"cosmic-client-toolkit", "cosmic-client-toolkit",
"dnd", "dnd",
@ -3455,7 +3455,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_winit" name = "iced_winit"
version = "0.14.0" version = "0.14.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"cosmic-client-toolkit", "cosmic-client-toolkit",
"cursor-icon", "cursor-icon",
@ -4567,7 +4567,7 @@ checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
[[package]] [[package]]
name = "libcosmic" name = "libcosmic"
version = "1.0.0" version = "1.0.0"
source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" source = "git+https://github.com/pop-os/libcosmic#c423ad1bfc25057922406c687f2ddc75ead5ab67"
dependencies = [ dependencies = [
"apply", "apply",
"ashpd 0.12.3", "ashpd 0.12.3",

View file

@ -8,7 +8,7 @@ use cosmic::iced::keyboard::{Key, Location, Modifiers};
use cosmic::iced::platform_specific::shell::wayland::commands::keyboard_shortcuts_inhibit; use cosmic::iced::platform_specific::shell::wayland::commands::keyboard_shortcuts_inhibit;
use cosmic::iced::platform_specific::shell::wayland::keymap; use cosmic::iced::platform_specific::shell::wayland::keymap;
use cosmic::iced::{self, Alignment, Length}; use cosmic::iced::{self, Alignment, Length};
use cosmic::widget::{self, button, icon, settings, text}; use cosmic::widget::{self, button, icon, list, settings, text};
use cosmic::{Apply, Element, Task, theme}; use cosmic::{Apply, Element, Task, theme};
use cosmic_config::{ConfigGet, ConfigSet}; use cosmic_config::{ConfigGet, ConfigSet};
use cosmic_settings_config::shortcuts::{self, Action, Binding, Shortcuts}; use cosmic_settings_config::shortcuts::{self, Action, Binding, Shortcuts};
@ -865,13 +865,11 @@ fn context_drawer<'a>(
} }
/// Display a shortcut as a list item /// Display a shortcut as a list item
fn shortcut_item(custom: bool, id: usize, data: &ShortcutModel) -> Element<'_, ShortcutMessage> { fn shortcut_item(
#[derive(Copy, Clone, Debug)] custom: bool,
enum LocalMessage { id: usize,
Remove, data: &ShortcutModel,
Show, ) -> list::ListButton<'_, ShortcutMessage> {
}
let bindings = data let bindings = data
.bindings .bindings
.iter() .iter()
@ -880,7 +878,7 @@ fn shortcut_item(custom: bool, id: usize, data: &ShortcutModel) -> Element<'_, S
.map(|(_, shortcut)| text::body(shortcut.binding.to_string()).into()) .map(|(_, shortcut)| text::body(shortcut.binding.to_string()).into())
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let shortcuts: Element<LocalMessage> = if bindings.is_empty() { let shortcuts: Element<ShortcutMessage> = if bindings.is_empty() {
text::body(fl!("disabled")).into() text::body(fl!("disabled")).into()
} else { } else {
widget::column::with_children(bindings) widget::column::with_children(bindings)
@ -900,7 +898,7 @@ fn shortcut_item(custom: bool, id: usize, data: &ShortcutModel) -> Element<'_, S
.push(icon::from_name("go-next-symbolic").size(16)) .push(icon::from_name("go-next-symbolic").size(16))
.push_maybe(custom.then(|| { .push_maybe(custom.then(|| {
widget::button::icon(icon::from_name("edit-delete-symbolic")) widget::button::icon(icon::from_name("edit-delete-symbolic"))
.on_press(LocalMessage::Remove) .on_press(ShortcutMessage::DeleteShortcut(id))
})) }))
.align_y(Alignment::Center) .align_y(Alignment::Center)
.spacing(8); .spacing(8);
@ -909,14 +907,7 @@ fn shortcut_item(custom: bool, id: usize, data: &ShortcutModel) -> Element<'_, S
.flex_control(control) .flex_control(control)
.align_items(Alignment::Center) .align_items(Alignment::Center)
.spacing(16) .spacing(16)
.apply(widget::container) .width(Length::Shrink)
.class(theme::Container::List) .apply(list::button)
.apply(widget::button::custom) .on_press(ShortcutMessage::ShowShortcut(id, data.description.clone()))
.class(theme::Button::Transparent)
.on_press(LocalMessage::Show)
.apply(Element::from)
.map(move |message| match message {
LocalMessage::Show => ShortcutMessage::ShowShortcut(id, data.description.clone()),
LocalMessage::Remove => ShortcutMessage::DeleteShortcut(id),
})
} }

View file

@ -15,8 +15,8 @@ pub mod tiling;
use cosmic::app::ContextDrawer; use cosmic::app::ContextDrawer;
use cosmic::iced::Length; use cosmic::iced::Length;
use cosmic::widget::{self, icon, settings, text}; use cosmic::widget::{self, list::ListButton, settings, text};
use cosmic::{Apply, Element, Task, theme}; use cosmic::{Apply, Element, Task};
use cosmic_config::ConfigGet; use cosmic_config::ConfigGet;
use cosmic_settings_config::Binding; use cosmic_settings_config::Binding;
use cosmic_settings_config::shortcuts::action::{ use cosmic_settings_config::shortcuts::action::{
@ -222,11 +222,13 @@ impl Page {
self.search.localized = SecondaryMap::new(); self.search.localized = SecondaryMap::new();
self.search.input = String::new(); self.search.input = String::new();
self.search_model.on_clear(); self.search_model.on_clear();
self.modified.custom = 0; self.modified.accessibility = 0;
self.modified.manage_windows = 0; self.modified.manage_windows = 0;
self.modified.move_windows = 0; self.modified.move_windows = 0;
self.modified.nav = 0; self.modified.nav = 0;
self.modified.system = 0; self.modified.system = 0;
self.modified.window_tiling = 0;
self.modified.custom = 0;
} }
fn reload_search(&mut self) { fn reload_search(&mut self) {
@ -497,32 +499,18 @@ fn shortcuts() -> Section<crate::pages::Message> {
} }
/// Display a category as a list item /// Display a category as a list item
fn category_item(category: Category, name: &str, modified: u16) -> Element<'_, Message> { fn category_item(category: Category, name: &str, modified: u16) -> ListButton<'_, Message> {
let icon = icon::from_name("go-next-symbolic").size(16); crate::widget::go_next_with_item(
name,
let control = if modified == 0 { (modified > 0).then(|| text::body(fl!("modified", count = modified)).apply(Element::from)),
Element::from(icon) Message::Category(category),
} else { )
widget::row::with_capacity(2)
.push(text::body(fl!("modified", count = modified)))
.push(icon)
.into()
};
settings::item::builder(name)
.control(control)
.spacing(16)
.apply(widget::container)
.class(theme::Container::List)
.apply(widget::button::custom)
.class(theme::Button::Transparent)
.width(Length::Fill)
.on_press(Message::Category(category))
.into()
} }
fn action_category(action: &Action) -> Option<Category> { fn action_category(action: &Action) -> Option<Category> {
Some(if manage_windows::actions().contains(action) { Some(if accessibility::actions().contains(action) {
Category::Accessibility
} else if manage_windows::actions().contains(action) {
Category::ManageWindow Category::ManageWindow
} else if move_window::actions().contains(action) { } else if move_window::actions().contains(action) {
Category::MoveWindow Category::MoveWindow
@ -530,6 +518,8 @@ fn action_category(action: &Action) -> Option<Category> {
Category::Nav Category::Nav
} else if system::actions().contains(action) { } else if system::actions().contains(action) {
Category::System Category::System
} else if tiling::actions().contains(action) {
Category::WindowTiling
} else { } else {
return None; return None;
}) })

View file

@ -8,7 +8,7 @@ use cosmic::{
cosmic_config::{self, ConfigGet, ConfigSet}, cosmic_config::{self, ConfigGet, ConfigSet},
iced::core::text::Wrapping, iced::core::text::Wrapping,
surface, surface,
widget::{self, dropdown, list, settings}, widget::{self, dropdown, settings},
}; };
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
use icu::{ use icu::{

View file

@ -7,7 +7,7 @@ use std::sync::Arc;
use crate::widget::selection_context_item; use crate::widget::selection_context_item;
use cosmic::app::{ContextDrawer, context_drawer}; use cosmic::app::{ContextDrawer, context_drawer};
use cosmic::iced::{Alignment, Length}; use cosmic::iced::{Alignment, Length};
use cosmic::widget::{self, button, list}; use cosmic::widget::{self, button};
use cosmic::{Apply, Element}; use cosmic::{Apply, Element};
use cosmic_config::{ConfigGet, ConfigSet}; use cosmic_config::{ConfigGet, ConfigSet};
use cosmic_settings_page::Section; use cosmic_settings_page::Section;

View file

@ -206,8 +206,10 @@ pub fn go_next_with_item<'a, Msg: 'static>(
msg_opt: impl Into<Option<Msg>>, msg_opt: impl Into<Option<Msg>>,
) -> list::ListButton<'a, Msg> { ) -> list::ListButton<'a, Msg> {
settings::item_row(vec![ settings::item_row(vec![
text::body(description).wrapping(Wrapping::Word).into(), text::body(description)
horizontal().into(), .width(Length::Fill)
.wrapping(Wrapping::Word)
.into(),
row::with_capacity(2) row::with_capacity(2)
.push(item) .push(item)
.push(icon::from_name("go-next-symbolic").size(16).icon()) .push(icon::from_name("go-next-symbolic").size(16).icon())