Compare commits

..

No commits in common. "52ce463a592484e2e76aecd081df9e05b62ee976" and "3639bafcfa3b27fd6a8a9bca7e77589b903975e8" have entirely different histories.

46 changed files with 1406 additions and 1712 deletions

View file

@ -15,9 +15,9 @@ jobs:
name: Rustfmt name: Rustfmt
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v3
- name: install toolchain - name: install toolchain
run: rustup toolchain install 1.90.0 --component rustfmt run: rustup toolchain install 1.80.1 --component rustfmt
- name: fmt - name: fmt
run: cargo fmt --all --check run: cargo fmt --all --check
@ -27,9 +27,9 @@ jobs:
steps: steps:
- name: install system dependencies - name: install system dependencies
run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev
- uses: actions/checkout@v6 - uses: actions/checkout@v3
- name: install toolchain - name: install toolchain
run: rustup toolchain install 1.90.0 --component clippy run: rustup toolchain install 1.80.1 --component clippy
- name: clippy - name: clippy
run: cargo clippy --all-features run: cargo clippy --all-features
@ -39,7 +39,7 @@ jobs:
steps: steps:
- name: install system dependencies - name: install system dependencies
run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev
- uses: actions/checkout@v6 - uses: actions/checkout@v3
- name: install toolchain - name: install toolchain
run: rustup show run: rustup show
- name: test - name: test
@ -51,7 +51,7 @@ jobs:
steps: steps:
- name: install system dependencies - name: install system dependencies
run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev just run: sudo apt-get update && sudo apt-get install lld cmake libclang-dev libexpat1-dev libfontconfig-dev libfreetype-dev libpipewire-0.3-dev libpulse-dev pkg-config libxkbcommon-dev libudev-dev libinput-dev libwayland-dev just
- uses: actions/checkout@v6 - uses: actions/checkout@v3
- name: install toolchain - name: install toolchain
run: rustup show run: rustup show
- name: check features - name: check features

View file

@ -18,7 +18,7 @@ jobs:
image: ubuntu:25.10 image: ubuntu:25.10
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v6 uses: actions/checkout@v4
- name: Install desktop-file-utils - name: Install desktop-file-utils
run: | run: |

406
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -70,18 +70,16 @@ cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//",
# cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon//", branch = "input_nobuild" } # cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon//", branch = "input_nobuild" }
# For development and testing purposes # For development and testing purposes
[patch.'https://github.com/pop-os/libcosmic'] # [patch.'https://github.com/pop-os/libcosmic']
libcosmic = { path = "../libcosmic" } # libcosmic = { path = "../libcosmic" }
cosmic-config = { path = "../libcosmic/cosmic-config" } # cosmic-config = { path = "../libcosmic/cosmic-config" }
cosmic-theme = { path = "../libcosmic/cosmic-theme" } # cosmic-theme = { path = "../libcosmic/cosmic-theme" }
iced_futures = { path = "../libcosmic/iced/futures" } # iced_futures = { path = "../libcosmic/iced/futures" }
iced_winit = { path = "../libcosmic/iced/winit" } #
#iced_futures = { git = "https://github.com/pop-os/libcosmic//" }
# libcosmic = { git = "https://github.com/pop-os/libcosmic//" } #libcosmic = { git = "https://github.com/pop-os/libcosmic//" }
# cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } #cosmic-config = { git = "https://github.com/pop-os/libcosmic//" }
# cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" } #cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" }
# iced_futures = { git = "https://github.com/pop-os/libcosmic//" }
# iced_winit = { git = "https://github.com/pop-os/libcosmic//" }
# [patch.'https://github.com/pop-os/dbus-settings-bindings'] # [patch.'https://github.com/pop-os/dbus-settings-bindings']
# cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" }

View file

@ -219,18 +219,19 @@ pub fn magnifier(
.add( .add(
settings::item::builder(&descriptions[magnifier]) settings::item::builder(&descriptions[magnifier])
.description(&descriptions[controls]) .description(&descriptions[controls])
.toggler(page.magnifier_state, Message::SetMagnifier), .control(
) widget::toggler(page.magnifier_state).on_toggle(Message::SetMagnifier),
.add( ),
settings::item::builder(&descriptions[scroll_controls]).toggler(
page.zoom_config.enable_mouse_zoom_shortcuts,
Message::SetMouseShortcuts,
),
)
.add(
settings::item::builder(&descriptions[show_overlay])
.toggler(page.zoom_config.show_overlay, Message::SetOverlay),
) )
.add(settings::item(
&descriptions[scroll_controls],
widget::toggler(page.zoom_config.enable_mouse_zoom_shortcuts)
.on_toggle(Message::SetMouseShortcuts),
))
.add(settings::item(
&descriptions[show_overlay],
widget::toggler(page.zoom_config.show_overlay).on_toggle(Message::SetOverlay),
))
.add(settings::item( .add(settings::item(
&descriptions[increment], &descriptions[increment],
widget::dropdown::popup_dropdown( widget::dropdown::popup_dropdown(
@ -246,10 +247,10 @@ pub fn magnifier(
}, },
), ),
)) ))
.add( .add(settings::item(
settings::item::builder(&descriptions[signin]) &descriptions[signin],
.toggler(page.zoom_config.start_on_login, Message::SetSignin), widget::toggler(page.zoom_config.start_on_login).on_toggle(Message::SetSignin),
) ))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::AccessibilityMagnifier) .map(crate::pages::Message::AccessibilityMagnifier)
}) })
@ -299,21 +300,36 @@ pub fn view_movement() -> section::Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item::builder(&descriptions[continuous]).radio( .add(widget::settings::item_row(vec![
ZoomMovement::Continuously, widget::radio(
Some(page.zoom_config.view_moves), text::body(&descriptions[continuous]),
Message::SetMovement, ZoomMovement::Continuously,
)) Some(page.zoom_config.view_moves),
.add(settings::item::builder(&descriptions[onedge]).radio( Message::SetMovement,
ZoomMovement::OnEdge, )
Some(page.zoom_config.view_moves), .width(Length::Fill)
Message::SetMovement, .into(),
)) ]))
.add(settings::item::builder(&descriptions[centered]).radio( .add(widget::settings::item_row(vec![
ZoomMovement::Centered, widget::radio(
Some(page.zoom_config.view_moves), text::body(&descriptions[onedge]),
Message::SetMovement, ZoomMovement::OnEdge,
)) Some(page.zoom_config.view_moves),
Message::SetMovement,
)
.width(Length::Fill)
.into(),
]))
.add(widget::settings::item_row(vec![
widget::radio(
text::body(&descriptions[centered]),
ZoomMovement::Centered,
Some(page.zoom_config.view_moves),
Message::SetMovement,
)
.width(Length::Fill)
.into(),
]))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::AccessibilityMagnifier) .map(crate::pages::Message::AccessibilityMagnifier)
}) })

View file

@ -1,11 +1,11 @@
use cosmic::{ use cosmic::{
Apply, Element, Task, Task,
cosmic_theme::{CosmicPalette, ThemeBuilder}, cosmic_theme::{CosmicPalette, ThemeBuilder},
iced::core::text::Wrapping, iced::core::text::Wrapping,
iced::stream, iced::stream,
surface, surface,
theme::CosmicTheme, theme::CosmicTheme,
widget::{dropdown, settings, text}, widget::{dropdown, settings, text, toggler},
}; };
pub use cosmic_comp_config::ZoomMovement; pub use cosmic_comp_config::ZoomMovement;
use cosmic_config::CosmicConfigEntry; use cosmic_config::CosmicConfigEntry;
@ -200,22 +200,6 @@ pub fn vision() -> section::Section<crate::pages::Message> {
.view::<Page>(move |binder, page, section| { .view::<Page>(move |binder, page, section| {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
let (magnifier_entity, _magnifier_info) = binder
.info
.iter()
.find(|(_, v)| v.id == "accessibility_magnifier")
.expect("magnifier page not found");
let status_text = if page.wayland_available.is_some() {
if page.magnifier_state {
&descriptions[on]
} else {
&descriptions[off]
}
} else {
&descriptions[unavailable]
};
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(
@ -226,13 +210,31 @@ pub fn vision() -> section::Section<crate::pages::Message> {
}, },
), ),
) )
.add(crate::widget::go_next_with_item( .add({
&descriptions[magnifier], let (magnifier_entity, _magnifier_info) = binder
text::body(status_text).wrapping(Wrapping::Word), .info
page.wayland_available .iter()
.is_some() .find(|(_, v)| v.id == "accessibility_magnifier")
.then_some(crate::pages::Message::Page(magnifier_entity)), .expect("magnifier page not found");
))
let status_text = if page.wayland_available.is_some() {
if page.magnifier_state {
&descriptions[on]
} else {
&descriptions[off]
}
} else {
&descriptions[unavailable]
};
crate::widget::go_next_with_item(
&descriptions[magnifier],
text::body(status_text).wrapping(Wrapping::Word),
page.wayland_available
.is_some()
.then_some(crate::pages::Message::Page(magnifier_entity)),
)
})
.add( .add(
settings::item::builder(&descriptions[high_contrast]) settings::item::builder(&descriptions[high_contrast])
.toggler(page.theme.is_high_contrast, |enable| { .toggler(page.theme.is_high_contrast, |enable| {
@ -240,19 +242,21 @@ pub fn vision() -> section::Section<crate::pages::Message> {
}), }),
) )
.add( .add(
settings::item::builder(&descriptions[invert_colors]).toggler_maybe( settings::item::builder(&descriptions[invert_colors]).control(
page.screen_inverted, toggler(page.screen_inverted).on_toggle_maybe(
page.wayland_available page.wayland_available
.is_some_and(|ver| ver >= 2) .is_some_and(|ver| ver >= 2)
.then_some(|set| Message::SetScreenInverted(set).into()), .then_some(|set| Message::SetScreenInverted(set).into()),
),
), ),
) )
.add( .add(
settings::item::builder(&descriptions[color_filters]).toggler_maybe( settings::item::builder(&descriptions[color_filters]).control(
page.screen_filter_active, toggler(page.screen_filter_active).on_toggle_maybe(
page.wayland_available page.wayland_available
.is_some_and(|ver| ver >= 2) .is_some_and(|ver| ver >= 2)
.then_some(|set| Message::SetScreenFilterActive(set).into()), .then_some(|set| Message::SetScreenFilterActive(set).into()),
),
), ),
) )
.add({ .add({
@ -300,11 +304,13 @@ pub fn hearing() -> section::Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(
settings::item::builder(&descriptions[mono]) cosmic::Element::from(
.toggler(page.daemon_config.mono_sound, Message::SetSoundMono), settings::item::builder(&descriptions[mono])
.toggler(page.daemon_config.mono_sound, Message::SetSoundMono),
)
.map(crate::pages::Message::Accessibility),
) )
.apply(Element::from) .into()
.map(crate::pages::Message::Accessibility)
}) })
} }

View file

@ -12,9 +12,9 @@ use std::{
use cosmic::{ use cosmic::{
Apply, Element, Task, Apply, Element, Task,
cosmic_config::{self, ConfigGet, ConfigSet}, cosmic_config::{self, ConfigGet, ConfigSet},
iced::stream, iced::{Length, stream},
surface, surface,
widget::{self, dropdown, settings, text}, widget::{self, dropdown, text},
}; };
use cosmic_comp_config::{EavesdroppingKeyboardMode, XwaylandDescaling, XwaylandEavesdropping}; use cosmic_comp_config::{EavesdroppingKeyboardMode, XwaylandDescaling, XwaylandEavesdropping};
use cosmic_randr_shell::List; use cosmic_randr_shell::List;
@ -277,46 +277,61 @@ pub fn legacy_application_global_shortcuts() -> Section<crate::pages::Message> {
.title(fl!("legacy-app-global-shortcuts")) .title(fl!("legacy-app-global-shortcuts"))
.descriptions(descriptions) .descriptions(descriptions)
.view::<Page>(move |_binder, page, section| { .view::<Page>(move |_binder, page, section| {
let title = text::body(&section.title).font(cosmic::font::bold()); let title = widget::text::body(&section.title).font(cosmic::font::bold());
let description = text::body(&section.descriptions[desc]); let description = widget::text::body(&section.descriptions[desc]);
let content = settings::section::<'_, crate::pages::Message>() let content = widget::settings::section::<'_, crate::pages::Message>()
.add(settings::item::builder(&section.descriptions[none]).radio( .add(widget::settings::item_row(vec![
EavesdroppingKeyboardMode::None, widget::radio(
Some(page.comp_config_xwayland_eavesdropping.keyboard), text::body(&section.descriptions[none]),
|t| Message::SetXwaylandKeyboardMode(t).into(), EavesdroppingKeyboardMode::None,
)) Some(page.comp_config_xwayland_eavesdropping.keyboard),
.add( |t| Message::SetXwaylandKeyboardMode(t).into(),
settings::item::builder(&section.descriptions[modifiers]).radio( )
.width(Length::Fill)
.into(),
]))
.add(widget::settings::item_row(vec![
widget::radio(
text::body(&section.descriptions[modifiers]),
EavesdroppingKeyboardMode::Modifiers, EavesdroppingKeyboardMode::Modifiers,
Some(page.comp_config_xwayland_eavesdropping.keyboard), Some(page.comp_config_xwayland_eavesdropping.keyboard),
|t| Message::SetXwaylandKeyboardMode(t).into(), |t| Message::SetXwaylandKeyboardMode(t).into(),
), )
) .width(Length::Fill)
.add( .into(),
settings::item::builder(&section.descriptions[combination]).radio( ]))
.add(widget::settings::item_row(vec![
widget::radio(
text::body(&section.descriptions[combination]),
EavesdroppingKeyboardMode::Combinations, EavesdroppingKeyboardMode::Combinations,
Some(page.comp_config_xwayland_eavesdropping.keyboard), Some(page.comp_config_xwayland_eavesdropping.keyboard),
|t| Message::SetXwaylandKeyboardMode(t).into(), |t| Message::SetXwaylandKeyboardMode(t).into(),
), )
) .width(Length::Fill)
.add(settings::item::builder(&section.descriptions[all]).radio( .into(),
EavesdroppingKeyboardMode::All, ]))
Some(page.comp_config_xwayland_eavesdropping.keyboard), .add(widget::settings::item_row(vec![
|t| Message::SetXwaylandKeyboardMode(t).into(), widget::radio(
)) text::body(&section.descriptions[all]),
.add( EavesdroppingKeyboardMode::All,
settings::item::builder(&section.descriptions[mouse]) Some(page.comp_config_xwayland_eavesdropping.keyboard),
.toggler(page.comp_config_xwayland_eavesdropping.pointer, |t| { |t| Message::SetXwaylandKeyboardMode(t).into(),
Message::SetXwaylandMouseButtonMode(t).into() )
}), .width(Length::Fill)
); .into(),
]))
.add(widget::settings::item(
&section.descriptions[mouse],
widget::toggler(page.comp_config_xwayland_eavesdropping.pointer)
.on_toggle(|t| Message::SetXwaylandMouseButtonMode(t).into()),
));
widget::column::with_capacity(3) widget::column::with_capacity(3)
.push(title) .push(title)
.push(description) .push(description)
.push(content) .push(content)
.spacing(cosmic::theme::spacing().space_xxs) .spacing(cosmic::theme::active().cosmic().spacing.space_xxs)
.apply(cosmic::Element::from) .apply(cosmic::Element::from)
.map(Into::into) .map(Into::into)
}) })
@ -341,33 +356,42 @@ pub fn legacy_application_scaling() -> Section<crate::pages::Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
widget::settings::section() widget::settings::section()
.title(&section.title) .title(&section.title)
.add( .add(widget::settings::item_row(vec![
widget::settings::item::builder(&descriptions[gaming]) widget::radio(
.description(&descriptions[gaming_desc]) widget::column::with_capacity(2)
.radio( .push(text::body(&descriptions[gaming]))
XwaylandDescaling::Fractional, .push(text::caption(&descriptions[gaming_desc])),
Some(page.comp_config_descale_xwayland), XwaylandDescaling::Fractional,
Message::SetXwaylandDescaling, Some(page.comp_config_descale_xwayland),
), Message::SetXwaylandDescaling,
) )
.add( .width(Length::Fill)
widget::settings::item::builder(&descriptions[apps]) .into(),
.description(&descriptions[apps_desc]) ]))
.radio( .add(widget::settings::item_row(vec![
XwaylandDescaling::Enabled, widget::radio(
Some(page.comp_config_descale_xwayland), widget::column::with_capacity(2)
Message::SetXwaylandDescaling, .push(text::body(&descriptions[apps]))
), .push(text::caption(&descriptions[apps_desc])),
) XwaylandDescaling::Enabled,
.add( Some(page.comp_config_descale_xwayland),
widget::settings::item::builder(&descriptions[compat]) Message::SetXwaylandDescaling,
.description(&descriptions[compat_desc]) )
.radio( .width(Length::Fill)
XwaylandDescaling::Disabled, .into(),
Some(page.comp_config_descale_xwayland), ]))
Message::SetXwaylandDescaling, .add(widget::settings::item_row(vec![
), widget::radio(
) widget::column::with_capacity(2)
.push(text::body(&descriptions[compat]))
.push(text::caption(&descriptions[compat_desc])),
XwaylandDescaling::Disabled,
Some(page.comp_config_descale_xwayland),
Message::SetXwaylandDescaling,
)
.width(Length::Fill)
.into(),
]))
.add(widget::settings::item( .add(widget::settings::item(
&descriptions[preferred_display], &descriptions[preferred_display],
dropdown::popup_dropdown( dropdown::popup_dropdown(

View file

@ -772,10 +772,12 @@ fn status() -> Section<crate::pages::Message> {
} }
widget::list_column() widget::list_column()
.add(bluetooth_toggle.toggler( .add(
matches!(status, Active::Enabling | Active::Enabled), bluetooth_toggle.control(
|active| Message::SetActive(active).into(), widget::toggler(matches!(status, Active::Enabling | Active::Enabled))
)) .on_toggle(|active| Message::SetActive(active).into()),
),
)
.apply(Element::from) .apply(Element::from)
}) })
} }

View file

@ -1,17 +1,18 @@
// Copyright 2024 System76 <info@system76.com> // Copyright 2024 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use std::rc::Rc;
use std::sync::Arc; use std::sync::Arc;
use cosmic::{ use cosmic::{
Apply, Element, Task, Apply, Element, Task,
config::{CosmicTk, FontConfig}, config::{CosmicTk, FontConfig},
widget, iced::core::text::Wrapping,
widget::{self, settings, space::horizontal as horizontal_space, svg},
}; };
use cosmic_config::ConfigSet; use cosmic_config::ConfigSet;
use crate::app; use crate::app;
use crate::widget::selection_context_item;
use super::{ContextView, Message, drawer}; use super::{ContextView, Message, drawer};
@ -176,6 +177,10 @@ impl Model {
context_view: &ContextView, context_view: &ContextView,
callback: impl Fn(Arc<str>) -> super::Message, callback: impl Fn(Arc<str>) -> super::Message,
) -> Element<'_, super::Message> { ) -> Element<'_, super::Message> {
let svg_accent = Rc::new(|theme: &cosmic::Theme| svg::Style {
color: Some(theme.cosmic().accent_text_color().into()),
});
let (mut families, current_font) = match *context_view { let (mut families, current_font) = match *context_view {
ContextView::MonospaceFont => { ContextView::MonospaceFont => {
(&self.monospace_font_families, &self.monospace_font.family) (&self.monospace_font_families, &self.monospace_font.family)
@ -188,17 +193,36 @@ impl Model {
families = &self.font_filter; families = &self.font_filter;
} }
let list = families.iter().fold( let list = families.iter().fold(widget::list_column(), |list, family| {
widget::list_column::with_capacity(families.len()), let selected = &**family == current_font;
|list, family| { list.add(
let selected = &**family == current_font; settings::item_row(vec![
list.add(selection_context_item( widget::text::body(&**family)
family, .class(if selected {
selected, cosmic::theme::Text::Accent
callback(family.clone()), } else {
)) cosmic::theme::Text::Default
}, })
); .wrapping(Wrapping::Word)
.width(cosmic::iced::Length::Fill)
.into(),
if selected {
widget::icon::from_name("object-select-symbolic")
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else {
horizontal_space().width(16.).into()
},
])
.apply(widget::container)
.class(cosmic::theme::Container::List)
.apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent)
.on_press(callback(family.clone())),
)
});
list.into() list.into()
} }

View file

@ -22,7 +22,8 @@ use cosmic::dialog::file_chooser::{self, FileFilter};
use cosmic::iced::Subscription; use cosmic::iced::Subscription;
use cosmic::iced::core::{Alignment, Length}; use cosmic::iced::core::{Alignment, Length};
use cosmic::widget::{ use cosmic::widget::{
button, color_picker::ColorPickerUpdate, container, row, settings, space::horizontal, text, button, color_picker::ColorPickerUpdate, container, radio, row, settings,
space::horizontal as horizontal_space, text,
}; };
use cosmic::{Apply, Element, Task, widget}; use cosmic::{Apply, Element, Task, widget};
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
@ -789,21 +790,36 @@ pub fn interface_density() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item::builder(&descriptions[compact]).radio( .add(settings::item_row(vec![
Density::Compact, radio(
Some(page.density), text::body(&descriptions[compact]),
Message::Density, Density::Compact,
)) Some(page.density),
.add(settings::item::builder(&descriptions[comfortable]).radio( Message::Density,
Density::Standard, )
Some(page.density), .width(Length::Fill)
Message::Density, .into(),
)) ]))
.add(settings::item::builder(&descriptions[spacious]).radio( .add(settings::item_row(vec![
Density::Spacious, radio(
Some(page.density), text::body(&descriptions[comfortable]),
Message::Density, Density::Standard,
)) Some(page.density),
Message::Density,
)
.width(Length::Fill)
.into(),
]))
.add(settings::item_row(vec![
radio(
text::body(&descriptions[spacious]),
Density::Spacious,
Some(page.density),
Message::Density,
)
.width(Length::Fill)
.into(),
]))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::Appearance) .map(crate::pages::Message::Appearance)
}) })
@ -917,7 +933,7 @@ pub fn reset_button() -> Section<crate::pages::Message> {
.on_press(Message::Reset) .on_press(Message::Reset)
.into() .into()
} else { } else {
horizontal().width(1.).apply(Element::from) horizontal_space().width(1.).apply(Element::from)
} }
.map(crate::pages::Message::Appearance) .map(crate::pages::Message::Appearance)
}) })

View file

@ -4,7 +4,7 @@ use cosmic::cosmic_theme::palette::Srgba;
use cosmic::iced::ContentFit; use cosmic::iced::ContentFit;
use cosmic::iced::core::{Alignment, Length}; use cosmic::iced::core::{Alignment, Length};
use cosmic::widget::icon::{from_name, icon}; use cosmic::widget::icon::{from_name, icon};
use cosmic::widget::{self, button, container, list, settings, text}; use cosmic::widget::{self, button, container, settings, text};
use cosmic::{Apply, Element}; use cosmic::{Apply, Element};
use cosmic_settings_page::Section; use cosmic_settings_page::Section;
use cosmic_settings_wallpaper as wallpaper; use cosmic_settings_wallpaper as wallpaper;
@ -64,117 +64,105 @@ fn container_background<'a>(
page: &Page, page: &Page,
section: &'a Section<crate::pages::Message>, section: &'a Section<crate::pages::Message>,
labels: &HashMap<String, usize>, labels: &HashMap<String, usize>,
) -> list::ListButton<'a, Message> { ) -> impl Into<Element<'a, Message>> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
let go_next_icon = from_name("go-next-symbolic").handle(); let go_next_icon = from_name("go-next-symbolic").handle();
list::button( settings::item::builder(&descriptions[labels["container_bg"]])
settings::item::builder(&descriptions[labels["container_bg"]]) .description(&descriptions[labels["container_bg_desc"]])
.description(&descriptions[labels["container_bg_desc"]]) .control(
.control( if page
if page .drawer
.drawer .container_background
.container_background .get_applied_color()
.get_applied_color() .is_some()
.is_some() {
{ Element::from(
Element::from( page.drawer
page.drawer .container_background
.container_background .picker_button(
.picker_button( |_| Message::DrawerOpen(ContextView::ContainerBackground),
|_| Message::DrawerOpen(ContextView::ContainerBackground), Some(24),
Some(24), )
) .width(Length::Fixed(48.0))
.width(Length::Fixed(48.0)) .height(Length::Fixed(24.0)),
.height(Length::Fixed(24.0)), )
) } else {
} else { container(
container( button::text(&descriptions[labels["auto"]])
button::text(&descriptions[labels["auto"]]) .trailing_icon(go_next_icon.clone())
.trailing_icon(go_next_icon.clone()) .on_press(Message::DrawerOpen(ContextView::ContainerBackground)),
.on_press(Message::DrawerOpen(ContextView::ContainerBackground)), )
) .into()
.into() },
}, )
),
)
.on_press(Message::DrawerOpen(ContextView::ContainerBackground))
} }
fn application_background<'a>( fn application_background<'a>(
page: &Page, page: &Page,
section: &'a Section<crate::pages::Message>, section: &'a Section<crate::pages::Message>,
labels: &HashMap<String, usize>, labels: &HashMap<String, usize>,
) -> list::ListButton<'a, Message> { ) -> impl Into<Element<'a, Message>> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
list::button( settings::item::builder(&descriptions[labels["app_bg"]]).control(
settings::item::builder(&descriptions[labels["app_bg"]]).control( page.drawer
page.drawer .application_background
.application_background .picker_button(
.picker_button( |_| Message::DrawerOpen(ContextView::ApplicationBackground),
|_| Message::DrawerOpen(ContextView::ApplicationBackground), Some(24),
Some(24), )
) .width(Length::Fixed(48.0))
.width(Length::Fixed(48.0)) .height(Length::Fixed(24.0)),
.height(Length::Fixed(24.0)),
),
) )
.on_press(Message::DrawerOpen(ContextView::ApplicationBackground))
} }
fn control_tint<'a>( fn control_tint<'a>(
page: &Page, page: &Page,
section: &'a Section<crate::pages::Message>, section: &'a Section<crate::pages::Message>,
labels: &HashMap<String, usize>, labels: &HashMap<String, usize>,
) -> list::ListButton<'a, Message> { ) -> impl Into<Element<'a, Message>> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
list::button( settings::item::builder(&descriptions[labels["control_tint"]])
settings::item::builder(&descriptions[labels["control_tint"]]) .description(&descriptions[labels["control_tint_desc"]])
.description(&descriptions[labels["control_tint_desc"]]) .control(
.control( page.drawer
page.drawer .control_component
.control_component .picker_button(
.picker_button( |_| Message::DrawerOpen(ContextView::ControlComponent),
|_| Message::DrawerOpen(ContextView::ControlComponent), Some(24),
Some(24), )
) .width(Length::Fixed(48.0))
.width(Length::Fixed(48.0)) .height(Length::Fixed(24.0)),
.height(Length::Fixed(24.0)), )
),
)
.on_press(Message::DrawerOpen(ContextView::ControlComponent))
} }
fn interface_text<'a>( fn interface_text<'a>(
page: &Page, page: &Page,
section: &'a Section<crate::pages::Message>, section: &'a Section<crate::pages::Message>,
labels: &HashMap<String, usize>, labels: &HashMap<String, usize>,
) -> list::ListButton<'a, Message> { ) -> impl Into<Element<'a, Message>> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
list::button( settings::item::builder(&descriptions[labels["text_tint"]])
settings::item::builder(&descriptions[labels["text_tint"]]) .description(&descriptions[labels["text_tint_desc"]])
.description(&descriptions[labels["text_tint_desc"]]) .control(
.control( page.drawer
page.drawer .interface_text
.interface_text .picker_button(
.picker_button( |_| Message::DrawerOpen(ContextView::InterfaceText),
|_| Message::DrawerOpen(ContextView::InterfaceText), Some(24),
Some(24), )
) .width(Length::Fixed(48.0))
.width(Length::Fixed(48.0)) .height(Length::Fixed(24.0)),
.height(Length::Fixed(24.0)), )
),
)
.on_press(Message::DrawerOpen(ContextView::InterfaceText))
} }
fn auto_switch<'a>( fn auto_switch<'a>(
page: &Page, page: &Page,
section: &'a Section<crate::pages::Message>, section: &'a Section<crate::pages::Message>,
labels: &HashMap<String, usize>, labels: &HashMap<String, usize>,
) -> list::ListButton<'a, Message> { ) -> impl Into<Element<'a, Message>> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::item::builder(&descriptions[labels["auto_switch"]]) settings::item::builder(&descriptions[labels["auto_switch"]])

View file

@ -4,7 +4,7 @@ use cosmic::Apply;
use cosmic::{ use cosmic::{
Element, Task, Element, Task,
cosmic_config::{ConfigSet, CosmicConfigEntry}, cosmic_config::{ConfigSet, CosmicConfigEntry},
widget::{settings, text}, widget::{settings, text, toggler},
}; };
use cosmic_panel_config::{CosmicPanelConfig, CosmicPanelContainerConfig}; use cosmic_panel_config::{CosmicPanelConfig, CosmicPanelContainerConfig};
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
@ -170,15 +170,16 @@ pub(crate) fn enable() -> Section<crate::pages::Message> {
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(settings::item(
settings::item::builder(&descriptions[dock]).toggler( &descriptions[dock],
toggler(
container_config container_config
.config_list .config_list
.iter() .iter()
.any(|e| e.name.as_str() == "Dock"), .any(|e| e.name.as_str() == "Dock"),
Message::EnableDock, )
), .on_toggle(Message::EnableDock),
) ))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::Dock) .map(crate::pages::Message::Dock)
}) })

View file

@ -4,8 +4,11 @@ use cosmic::{
cosmic_config::{self, CosmicConfigEntry}, cosmic_config::{self, CosmicConfigEntry},
cosmic_theme::Density, cosmic_theme::Density,
iced::{Alignment, Length}, iced::{Alignment, Length},
surface, surface, theme,
widget::{button, container, dropdown, row, settings, slider, space, text}, widget::{
button, container, dropdown, icon, row, settings, slider,
space::horizontal as horizontal_space, text, toggler,
},
}; };
use cosmic::Apply; use cosmic::Apply;
@ -22,7 +25,6 @@ use crate::pages::desktop::appearance::Roundness;
pub struct PageInner { pub struct PageInner {
pub(crate) config_helper: Option<cosmic_config::Config>, pub(crate) config_helper: Option<cosmic_config::Config>,
pub(crate) panel_config: Option<CosmicPanelConfig>, pub(crate) panel_config: Option<CosmicPanelConfig>,
pub size: Option<PanelSize>,
pub opacity: f32, pub opacity: f32,
pub opacity_changing: bool, pub opacity_changing: bool,
pub outputs: Vec<String>, pub outputs: Vec<String>,
@ -40,7 +42,6 @@ impl Default for PageInner {
Self { Self {
config_helper: Option::default(), config_helper: Option::default(),
panel_config: Option::default(), panel_config: Option::default(),
size: Option::default(),
opacity: 0.0, opacity: 0.0,
opacity_changing: false, opacity_changing: false,
outputs: vec![fl!("all-displays")], outputs: vec![fl!("all-displays")],
@ -118,10 +119,10 @@ pub(crate) fn behavior_and_position<
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(settings::item(
settings::item::builder(&descriptions[autohide_label]) &descriptions[autohide_label],
.toggler(panel_config.autohide.is_some(), Message::AutoHidePanel), toggler(panel_config.autohide.is_some()).on_toggle(Message::AutoHidePanel),
) ))
.add(settings::item( .add(settings::item(
&descriptions[position], &descriptions[position],
dropdown::popup_dropdown( dropdown::popup_dropdown(
@ -179,14 +180,14 @@ pub(crate) fn style<
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(settings::item(
settings::item::builder(&descriptions[gap_label]) &descriptions[gap_label],
.toggler(panel_config.anchor_gap, Message::AnchorGap), toggler(panel_config.anchor_gap).on_toggle(Message::AnchorGap),
) ))
.add( .add(settings::item(
settings::item::builder(&descriptions[extend_label]) &descriptions[extend_label],
.toggler(panel_config.expand_to_edges, Message::ExtendToEdge), toggler(panel_config.expand_to_edges).on_toggle(Message::ExtendToEdge),
) ))
.add(settings::item( .add(settings::item(
&descriptions[appearance], &descriptions[appearance],
dropdown::popup_dropdown( dropdown::popup_dropdown(
@ -209,9 +210,7 @@ pub(crate) fn style<
text::body(fl!("small")).into(), text::body(fl!("small")).into(),
slider( slider(
0..=4, 0..=4,
match inner.size.as_ref().expect( match panel_config.size {
"PageInner.size is None even though PageInner.panel_config is Some",
) {
PanelSize::XS => 0, PanelSize::XS => 0,
PanelSize::S => 1, PanelSize::S => 1,
PanelSize::M => 2, PanelSize::M => 2,
@ -233,7 +232,6 @@ pub(crate) fn style<
} }
}, },
) )
.on_release(Message::PanelSizeCommit)
.width(Length::Fill) .width(Length::Fill)
.apply(cosmic::widget::container) .apply(cosmic::widget::container)
.max_width(250) .max_width(250)
@ -294,10 +292,24 @@ pub(crate) fn configuration<P: page::Page<crate::pages::Message> + PanelPage>(
.iter() .iter()
.find(|(_, v)| v.id == page.applets_page_id()) .find(|(_, v)| v.id == page.applets_page_id())
{ {
settings.add(crate::widget::go_next_item( let control = row::with_children(vec![
&descriptions[applets_label], horizontal_space().into(),
crate::pages::Message::Page(panel_applets_entity), icon::from_name("go-next-symbolic").size(16).into(),
)) ]);
settings.add(
settings::item::builder(&*descriptions[applets_label])
.control(control)
.spacing(16)
.width(Length::Fill)
.apply(container)
.class(theme::Container::List)
.apply(button::custom)
.width(Length::Fill)
.class(theme::Button::Transparent)
.width(Length::Fill)
.on_press(crate::pages::Message::Page(panel_applets_entity)),
)
} else { } else {
settings settings
}; };
@ -346,7 +358,7 @@ pub fn reset_button<
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
let inner = page.inner(); let inner = page.inner();
if inner.system_default == inner.panel_config { if inner.system_default == inner.panel_config {
Element::from(space()) Element::from(horizontal_space().width(1.))
} else { } else {
button::standard(&descriptions[reset_to_default]) button::standard(&descriptions[reset_to_default])
.on_press(Message::ResetPanel) .on_press(Message::ResetPanel)
@ -425,7 +437,6 @@ pub enum Message {
Output(usize), Output(usize),
AnchorGap(bool), AnchorGap(bool),
PanelSize(PanelSize), PanelSize(PanelSize),
PanelSizeCommit,
Appearance(usize), Appearance(usize),
ExtendToEdge(bool), ExtendToEdge(bool),
OpacityRequest(f32), OpacityRequest(f32),
@ -506,7 +517,6 @@ impl PageInner {
if let Err(err) = default.write_entry(config) { if let Err(err) = default.write_entry(config) {
tracing::error!(?err, "Error resetting panel config."); tracing::error!(?err, "Error resetting panel config.");
} }
self.size = Some(default.size.clone());
self.system_default = Some(default.clone()); self.system_default = Some(default.clone());
self.panel_config.clone_from(&self.system_default); self.panel_config.clone_from(&self.system_default);
} else { } else {
@ -605,16 +615,7 @@ impl PageInner {
_ = panel_config.set_border_radius(helper, new_radius).unwrap(); _ = panel_config.set_border_radius(helper, new_radius).unwrap();
} }
Message::PanelSize(size) => { Message::PanelSize(size) => {
self.size = Some(size); _ = panel_config.set_size(helper, size);
}
Message::PanelSizeCommit => {
_ = panel_config.set_size(
helper,
self.size
.as_ref()
.expect("PageInner.size is None even though it should be Some, since PageInner.panel_config is Some")
.clone()
);
// Reset any size overrides the user might have set // Reset any size overrides the user might have set
_ = panel_config.set_size_center(helper, None); _ = panel_config.set_size_center(helper, None);
_ = panel_config.set_size_wings(helper, None); _ = panel_config.set_size_wings(helper, None);
@ -677,7 +678,6 @@ impl PageInner {
} }
} }
Message::PanelConfig(c) => { Message::PanelConfig(c) => {
self.size = Some(c.size.clone());
self.panel_config = Some(*c); self.panel_config = Some(*c);
return Task::none(); return Task::none();
} }

View file

@ -79,7 +79,6 @@ impl Default for Page {
// If the config is not present, it will be created with the default values and the name will not match // If the config is not present, it will be created with the default values and the name will not match
(panel_config.name == "Panel").then_some(panel_config) (panel_config.name == "Panel").then_some(panel_config)
}); });
let size = panel_config.as_ref().map(|c| c.size.clone());
let system_default = cosmic::cosmic_config::Config::system( let system_default = cosmic::cosmic_config::Config::system(
&format!("{}.Panel", cosmic_panel_config::NAME), &format!("{}.Panel", cosmic_panel_config::NAME),
CosmicPanelConfig::VERSION, CosmicPanelConfig::VERSION,
@ -99,7 +98,6 @@ impl Default for Page {
inner: PageInner { inner: PageInner {
config_helper, config_helper,
panel_config, panel_config,
size,
container_config, container_config,
outputs_map: HashMap::new(), outputs_map: HashMap::new(),
system_default, system_default,

View file

@ -28,7 +28,7 @@ use cosmic::{
segmented_button::{self, SingleSelectModel}, segmented_button::{self, SingleSelectModel},
settings, settings,
space::horizontal as horizontal_space, space::horizontal as horizontal_space,
tab_bar, text, tab_bar, text, toggler,
}, },
}; };
use cosmic::{ use cosmic::{
@ -1275,17 +1275,18 @@ pub fn settings() -> Section<crate::pages::Message> {
children.push({ children.push({
let mut column = list_column() let mut column = list_column()
.add(settings::item::builder(&descriptions[same_label]).toggler( .add(settings::item(
page.wallpaper_service_config.same_on_all, &descriptions[same_label],
Message::SameWallpaper, toggler(page.wallpaper_service_config.same_on_all)
.on_toggle(Message::SameWallpaper),
)) ))
.add(settings::item(&descriptions[fit_label], wallpaper_fit)); .add(settings::item(&descriptions[fit_label], wallpaper_fit));
if show_slideshow_toggle { if show_slideshow_toggle {
column = column.add( column = column.add(settings::item(
settings::item::builder(&descriptions[slide_label]) &descriptions[slide_label],
.toggler(slideshow_enabled, Message::Slideshow), toggler(slideshow_enabled).on_toggle(Message::Slideshow),
); ));
} }
// The rotation frequency dropdown should only be shown when the slideshow is enabled. // The rotation frequency dropdown should only be shown when the slideshow is enabled.

View file

@ -4,7 +4,7 @@
use super::Message; use super::Message;
use cosmic::iced::Radius; use cosmic::iced::Radius;
use cosmic::iced::core::Border; use cosmic::iced::core::Border;
use cosmic::iced::core::{Background, Color, Degrees, Length, gradient::Linear}; use cosmic::iced::core::{self, Background, Color, Degrees, Length, gradient::Linear};
use cosmic::iced::runtime::core::image::Handle as ImageHandle; use cosmic::iced::runtime::core::image::Handle as ImageHandle;
use cosmic::prelude::*; use cosmic::prelude::*;
use cosmic::widget::{Space, button, container}; use cosmic::widget::{Space, button, container};

View file

@ -3,9 +3,9 @@
use cosmic::{ use cosmic::{
Apply, Element, Apply, Element,
iced::Length, iced::{Alignment, Length},
surface, surface,
widget::{self, settings}, widget::{self, settings, toggler},
}; };
use cosmic_comp_config::CosmicCompConfig; use cosmic_comp_config::CosmicCompConfig;
@ -27,7 +27,6 @@ pub enum Message {
ShowActiveWindowHint(bool), ShowActiveWindowHint(bool),
ShowMaximizeButton(bool), ShowMaximizeButton(bool),
ShowMinimizeButton(bool), ShowMinimizeButton(bool),
WindowControlsPositionStart(bool),
SetEdgeSnapThreshold(u32), SetEdgeSnapThreshold(u32),
Surface(surface::Action), Surface(surface::Action),
} }
@ -178,19 +177,6 @@ impl Page {
.set_show_minimize(&config, value); .set_show_minimize(&config, value);
} }
} }
Message::WindowControlsPositionStart(left) => {
if let Ok(config) = cosmic::config::CosmicTk::config() {
let position = if left {
cosmic::widget::WindowControlsPosition::Start
} else {
cosmic::widget::WindowControlsPosition::End
};
let _res = cosmic::config::COSMIC_TK
.write()
.unwrap()
.set_window_controls_position(&config, position);
}
}
Message::ShowActiveWindowHint(value) => { Message::ShowActiveWindowHint(value) => {
self.show_active_hint = value; self.show_active_hint = value;
if let Err(err) = self.comp_config.set("active_hint", value) { if let Err(err) = self.comp_config.set("active_hint", value) {
@ -273,10 +259,13 @@ pub fn window_management() -> Section<crate::pages::Message> {
), ),
)) ))
.add( .add(
settings::item::builder(&descriptions[edge_gravity]) settings::flex_item(
.toggler(page.edge_snap_threshold != 0, |is_enabled| { &descriptions[edge_gravity],
toggler(page.edge_snap_threshold != 0).on_toggle(|is_enabled| {
Message::SetEdgeSnapThreshold(if is_enabled { 10 } else { 0 }) Message::SetEdgeSnapThreshold(if is_enabled { 10 } else { 0 })
}), }),
)
.align_items(Alignment::Center),
) )
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::WindowManagement) .map(crate::pages::Message::WindowManagement)
@ -288,7 +277,6 @@ pub fn window_controls() -> Section<crate::pages::Message> {
maximize = fl!("window-controls", "maximize"); maximize = fl!("window-controls", "maximize");
minimize = fl!("window-controls", "minimize"); minimize = fl!("window-controls", "minimize");
active_window_hint = fl!("window-controls", "active-window-hint"); active_window_hint = fl!("window-controls", "active-window-hint");
position_start = fl!("window-controls", "position-start");
}); });
Section::default() Section::default()
@ -299,24 +287,17 @@ pub fn window_controls() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(settings::item(
settings::item::builder(&descriptions[active_window_hint]) &descriptions[active_window_hint],
.toggler(page.show_active_hint, Message::ShowActiveWindowHint), toggler(page.show_active_hint).on_toggle(Message::ShowActiveWindowHint),
) ))
.add( .add(settings::item(
settings::item::builder(&descriptions[maximize]) &descriptions[maximize],
.toggler(cosmic::config::show_maximize(), Message::ShowMaximizeButton), toggler(cosmic::config::show_maximize()).on_toggle(Message::ShowMaximizeButton),
) ))
.add( .add(settings::item(
settings::item::builder(&descriptions[minimize]) &descriptions[minimize],
.toggler(cosmic::config::show_minimize(), Message::ShowMinimizeButton), toggler(cosmic::config::show_minimize()).on_toggle(Message::ShowMinimizeButton),
)
.add(settings::item::builder(&descriptions[position_start]).toggler(
matches!(
cosmic::config::window_controls_position(),
cosmic::widget::WindowControlsPosition::Start
),
Message::WindowControlsPositionStart,
)) ))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::WindowManagement) .map(crate::pages::Message::WindowManagement)
@ -338,10 +319,10 @@ pub fn focus_navigation() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(settings::item(
settings::item::builder(&descriptions[focus_follows_cursor]) &descriptions[focus_follows_cursor],
.toggler(page.focus_follows_cursor, Message::SetFocusFollowsCursor), toggler(page.focus_follows_cursor).on_toggle(Message::SetFocusFollowsCursor),
) ))
.add(settings::item( .add(settings::item(
&descriptions[focus_follows_cursor_delay], &descriptions[focus_follows_cursor_delay],
widget::editable_input("", &page.focus_delay_text, false, |editing| { widget::editable_input("", &page.focus_delay_text, false, |editing| {
@ -352,10 +333,10 @@ pub fn focus_navigation() -> Section<crate::pages::Message> {
.on_submit(|_| Message::SaveFocusFollowsCursorDelay(true)) .on_submit(|_| Message::SaveFocusFollowsCursorDelay(true))
.width(Length::Fixed(80.0)), .width(Length::Fixed(80.0)),
)) ))
.add( .add(settings::item(
settings::item::builder(&descriptions[cursor_follows_focus]) &descriptions[cursor_follows_focus],
.toggler(page.cursor_follows_focus, Message::SetCursorFollowsFocus), toggler(page.cursor_follows_focus).on_toggle(Message::SetCursorFollowsFocus),
) ))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::WindowManagement) .map(crate::pages::Message::WindowManagement)
}) })

View file

@ -6,8 +6,9 @@
use cosmic::{ use cosmic::{
Apply, Element, Apply, Element,
cosmic_config::{self, ConfigGet, ConfigSet}, cosmic_config::{self, ConfigGet, ConfigSet},
iced::Length,
surface, surface,
widget::{self, settings}, widget::{self, radio, settings, text},
}; };
use cosmic_comp_config::workspace::{Action, WorkspaceConfig, WorkspaceLayout, WorkspaceMode}; use cosmic_comp_config::workspace::{Action, WorkspaceConfig, WorkspaceLayout, WorkspaceMode};
use cosmic_settings_page::Section; use cosmic_settings_page::Section;
@ -20,7 +21,6 @@ pub enum Message {
SetActionOnTyping(usize), SetActionOnTyping(usize),
SetWorkspaceMode(WorkspaceMode), SetWorkspaceMode(WorkspaceMode),
SetWorkspaceLayout(WorkspaceLayout), SetWorkspaceLayout(WorkspaceLayout),
SetWorkspaceWraparound(bool),
SetShowName(bool), SetShowName(bool),
SetShowNumber(bool), SetShowNumber(bool),
Surface(surface::Action), Surface(surface::Action),
@ -88,7 +88,6 @@ impl page::Page<crate::pages::Message> for Page {
sections.insert(action_on_typing()), sections.insert(action_on_typing()),
sections.insert(multi_behavior()), sections.insert(multi_behavior()),
sections.insert(workspace_orientation()), sections.insert(workspace_orientation()),
sections.insert(workspace_navigation()),
]) ])
} }
@ -127,10 +126,6 @@ impl Page {
into_active_selection(&self.comp_workspace_config.action_on_typing); into_active_selection(&self.comp_workspace_config.action_on_typing);
self.save_comp_config(); self.save_comp_config();
} }
Message::SetWorkspaceWraparound(value) => {
self.comp_workspace_config.workspace_wraparound = value;
self.save_comp_config();
}
Message::SetShowName(value) => { Message::SetShowName(value) => {
self.show_workspace_name = value; self.show_workspace_name = value;
if let Err(err) = self.config.set("show_workspace_name", value) { if let Err(err) = self.config.set("show_workspace_name", value) {
@ -214,16 +209,26 @@ fn multi_behavior() -> Section<crate::pages::Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item::builder(&descriptions[span]).radio( .add(settings::item_row(vec![
WorkspaceMode::Global, radio(
Some(page.comp_workspace_config.workspace_mode), text::body(&descriptions[span]),
Message::SetWorkspaceMode, WorkspaceMode::Global,
)) Some(page.comp_workspace_config.workspace_mode),
.add(settings::item::builder(&descriptions[separate]).radio( Message::SetWorkspaceMode,
WorkspaceMode::OutputBound, )
Some(page.comp_workspace_config.workspace_mode), .width(Length::Fill)
Message::SetWorkspaceMode, .into(),
)) ]))
.add(settings::item_row(vec![
radio(
text::body(&descriptions[separate]),
WorkspaceMode::OutputBound,
Some(page.comp_workspace_config.workspace_mode),
Message::SetWorkspaceMode,
)
.width(Length::Fill)
.into(),
]))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::DesktopWorkspaces) .map(crate::pages::Message::DesktopWorkspaces)
}) })
@ -242,37 +247,26 @@ fn workspace_orientation() -> Section<crate::pages::Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item::builder(&descriptions[vertical]).radio( .add(settings::item_row(vec![
WorkspaceLayout::Vertical, radio(
Some(page.comp_workspace_config.workspace_layout), text::body(&descriptions[vertical]),
Message::SetWorkspaceLayout, WorkspaceLayout::Vertical,
)) Some(page.comp_workspace_config.workspace_layout),
.add(settings::item::builder(&descriptions[horizontal]).radio( Message::SetWorkspaceLayout,
WorkspaceLayout::Horizontal, )
Some(page.comp_workspace_config.workspace_layout), .width(Length::Fill)
Message::SetWorkspaceLayout, .into(),
)) ]))
.apply(Element::from) .add(settings::item_row(vec![
.map(crate::pages::Message::DesktopWorkspaces) radio(
}) text::body(&descriptions[horizontal]),
} WorkspaceLayout::Horizontal,
Some(page.comp_workspace_config.workspace_layout),
fn workspace_navigation() -> Section<crate::pages::Message> { Message::SetWorkspaceLayout,
crate::slab!(descriptions { )
description = fl!("workspaces-navigation", "wraparound"); .width(Length::Fill)
}); .into(),
]))
Section::default()
.title(fl!("workspaces-navigation"))
.descriptions(descriptions)
.view::<Page>(move |_binder, page, section| {
let descriptions = &section.descriptions;
settings::section()
.title(&section.title)
.add(settings::item::builder(&descriptions[description]).toggler(
page.comp_workspace_config.workspace_wraparound,
Message::SetWorkspaceWraparound,
))
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::DesktopWorkspaces) .map(crate::pages::Message::DesktopWorkspaces)
}) })

View file

@ -10,7 +10,7 @@ use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit};
use cosmic::iced::widget::scrollable::RelativeOffset; use cosmic::iced::widget::scrollable::RelativeOffset;
use cosmic::iced::{Alignment, Length, stream, time}; use cosmic::iced::{Alignment, Length, stream, time};
use cosmic::widget::{ use cosmic::widget::{
self, column, container, dropdown, list_column, segmented_button, tab_bar, text, self, column, container, dropdown, list_column, segmented_button, tab_bar, text, toggler,
}; };
use cosmic::{Apply, Element, Task, surface}; use cosmic::{Apply, Element, Task, surface};
use cosmic_randr_shell::{ use cosmic_randr_shell::{
@ -1370,10 +1370,10 @@ pub fn display_configuration() -> Section<crate::pages::Message> {
|| !active_output.enabled || !active_output.enabled
{ {
list_column() list_column()
.add( .add(widget::settings::item(
widget::settings::item::builder(&descriptions[enable_label]) &descriptions[enable_label],
.toggler(active_output.enabled, Message::DisplayToggle), toggler(active_output.enabled).on_toggle(Message::DisplayToggle),
) ))
.add(widget::settings::item( .add(widget::settings::item(
&descriptions[mirroring_label], &descriptions[mirroring_label],
widget::dropdown::multi::dropdown( widget::dropdown::multi::dropdown(

View file

@ -11,7 +11,7 @@ use cosmic::{
cosmic_config::{self, ConfigSet}, cosmic_config::{self, ConfigSet},
iced::{Alignment, Length}, iced::{Alignment, Length},
theme, theme,
widget::{self, ListColumn, button, container, icon, list, row, settings}, widget::{self, ListColumn, button, container, icon, radio, row, settings},
}; };
use cosmic_comp_config::{KeyboardConfig, NumlockState, XkbConfig}; use cosmic_comp_config::{KeyboardConfig, NumlockState, XkbConfig};
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
@ -48,7 +48,6 @@ static CAPS_LOCK_OPTIONS: &[(&str, &str)] = &[
("Backspace", "caps:backspace"), ("Backspace", "caps:backspace"),
("Super", "caps:super"), ("Super", "caps:super"),
("Control", "caps:ctrl_modifier"), ("Control", "caps:ctrl_modifier"),
("Swap with Control", "ctrl:swapcaps"),
]; ];
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -152,11 +151,11 @@ impl SpecialKey {
} }
} }
pub fn prefixes(self) -> &'static [&'static str] { pub fn prefix(self) -> &'static str {
match self { match self {
Self::Compose => &["compose:"], Self::Compose => "compose:",
Self::AlternateCharacters => &["lv3:"], Self::AlternateCharacters => "lv3:",
Self::CapsLock => &["caps:", "ctrl:"], Self::CapsLock => "caps:",
} }
} }
} }
@ -244,10 +243,15 @@ fn special_char_radio_row<'a>(
desc: &'a str, desc: &'a str,
value: Option<&'static str>, value: Option<&'static str>,
current_value: Option<&'a str>, current_value: Option<&'a str>,
) -> list::ListButton<'a, Message> { ) -> cosmic::Element<'a, Message> {
settings::item::builder(desc).radio(value, Some(current_value), |_| { settings::item_row(vec![
Message::SpecialCharacterSelect(value) radio(desc, value, Some(current_value), |_| {
}) Message::SpecialCharacterSelect(value)
})
.width(Length::Fill)
.into(),
])
.into()
} }
impl page::Page<crate::pages::Message> for Page { impl page::Page<crate::pages::Message> for Page {
@ -509,10 +513,10 @@ impl Page {
Message::SpecialCharacterSelect(id) => { Message::SpecialCharacterSelect(id) => {
if let Some(Context::SpecialCharacter(special_key)) = self.context { if let Some(Context::SpecialCharacter(special_key)) = self.context {
let options = self.xkb.options.as_deref().unwrap_or_default(); let options = self.xkb.options.as_deref().unwrap_or_default();
let prefixes = special_key.prefixes(); let prefix = special_key.prefix();
let new_options = options let new_options = options
.split(',') .split(',')
.filter(|x| !prefixes.iter().any(|prefix| x.starts_with(prefix))) .filter(|x| !x.starts_with(prefix))
.chain(id) .chain(id)
.join(","); .join(",");
@ -548,11 +552,9 @@ impl Page {
pub fn add_input_source_view(&self) -> Element<'_, crate::pages::Message> { pub fn add_input_source_view(&self) -> Element<'_, crate::pages::Message> {
let space_l = theme::spacing().space_l; let space_l = theme::spacing().space_l;
let toggler = settings::section().add( let toggler = settings::item::builder(fl!("show-extended-input-sources")).toggler(
settings::item::builder(fl!("show-extended-input-sources")).toggler( self.show_extended_input_sources,
self.show_extended_input_sources, Message::SetShowExtendedInputSources,
Message::SetShowExtendedInputSources,
),
); );
let mut list = widget::list_column(); let mut list = widget::list_column();
@ -608,13 +610,13 @@ impl Page {
SpecialKey::AlternateCharacters => (ALTERNATE_CHARACTER_OPTIONS, None), SpecialKey::AlternateCharacters => (ALTERNATE_CHARACTER_OPTIONS, None),
SpecialKey::CapsLock => (CAPS_LOCK_OPTIONS, None), SpecialKey::CapsLock => (CAPS_LOCK_OPTIONS, None),
}; };
let prefixes = special_key.prefixes(); let prefix = special_key.prefix();
let current = self let current = self
.xkb .xkb
.options .options
.iter() .iter()
.flat_map(|x| x.split(',')) .flat_map(|x| x.split(','))
.find(|x| prefixes.iter().any(|prefix| x.starts_with(prefix))); .find(|x| x.starts_with(prefix));
// TODO layout default // TODO layout default
@ -651,11 +653,16 @@ impl Page {
let mut list = cosmic::widget::list_column(); let mut list = cosmic::widget::list_column();
for (desc, state) in options { for (desc, state) in options {
list = list.add(settings::item::builder(desc).radio( list = list.add(settings::item_row(vec![
Some(state), radio(
Some(Some(current)), cosmic::widget::text(desc),
|_| Message::SetNumlockState(state), Some(state),
)); Some(Some(current)),
|_| Message::SetNumlockState(state),
)
.width(Length::Fill)
.into(),
]));
} }
list.into() list.into()

View file

@ -779,7 +779,10 @@ fn context_drawer<'a>(
show_action: bool, show_action: bool,
) -> Element<'a, ShortcutMessage> { ) -> Element<'a, ShortcutMessage> {
let cosmic::cosmic_theme::Spacing { let cosmic::cosmic_theme::Spacing {
space_xs, space_l, .. space_xxs,
space_xs,
space_l,
..
} = theme::spacing(); } = theme::spacing();
let model = &shortcuts[id]; let model = &shortcuts[id];
@ -795,7 +798,7 @@ fn context_drawer<'a>(
}); });
let bindings = model.bindings.iter().enumerate().fold( let bindings = model.bindings.iter().enumerate().fold(
widget::list_column(), widget::list_column().spacing(space_xxs),
|section, (_, (bind_id, shortcut))| { |section, (_, (bind_id, shortcut))| {
let editing = editing == Some(bind_id); let editing = editing == Some(bind_id);
let text: Cow<'_, str> = if !editing && shortcut.binding.is_set() { let text: Cow<'_, str> = if !editing && shortcut.binding.is_set() {

View file

@ -452,7 +452,7 @@ impl Page {
.padding([16, 24]); .padding([16, 24]);
let keys = self.add_shortcut.keys.iter().fold( let keys = self.add_shortcut.keys.iter().fold(
widget::list_column(), widget::list_column().spacing(0),
|column, (id, (text, widget_id))| { |column, (id, (text, widget_id))| {
let key_combination = widget::editable_input( let key_combination = widget::editable_input(
fl!("type-key-combination"), fl!("type-key-combination"),
@ -474,7 +474,7 @@ impl Page {
}, },
); );
let controls = widget::list_column().add(input_fields).add(keys); let controls = widget::list_column().add(input_fields).add(keys).spacing(0);
let add_keybinding_button = widget::button::standard(fl!("add-another-keybinding")) let add_keybinding_button = widget::button::standard(fl!("add-another-keybinding"))
.on_press(Message::AddShortcut) .on_press(Message::AddShortcut)

View file

@ -166,17 +166,27 @@ fn click_behavior() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&*section.title) .title(&*section.title)
// Secondary click via two fingers, and middle-click via three fingers // Secondary click via two fingers, and middle-click via three fingers
.add(settings::item::builder(&descriptions[click_finger]).radio( .add(settings::item_row(vec![
ClickMethod::Clickfinger, widget::radio(
page.input_touchpad.click_method, text::body(&descriptions[click_finger]),
|option| Message::SetSecondaryClickBehavior(Some(option), true), ClickMethod::Clickfinger,
)) page.input_touchpad.click_method,
|option| Message::SetSecondaryClickBehavior(Some(option), true),
)
.width(Length::Fill)
.into(),
]))
// Secondary and middle-click via button areas. // Secondary and middle-click via button areas.
.add(settings::item::builder(&descriptions[button_areas]).radio( .add(settings::item_row(vec![
ClickMethod::ButtonAreas, widget::radio(
page.input_touchpad.click_method, text::body(&descriptions[button_areas]),
|option| Message::SetSecondaryClickBehavior(Some(option), true), ClickMethod::ButtonAreas,
)) page.input_touchpad.click_method,
|option| Message::SetSecondaryClickBehavior(Some(option), true),
)
.width(Length::Fill)
.into(),
]))
.add( .add(
settings::item::builder(&descriptions[tap_to_click]).toggler( settings::item::builder(&descriptions[tap_to_click]).toggler(
page.input_touchpad page.input_touchpad
@ -212,27 +222,33 @@ fn scrolling() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
// Two-finger scrolling toggle // Two-finger scrolling toggle
.add( .add(settings::item_row(vec![
settings::item::builder(&descriptions[two_finger]).radio( widget::radio(
text::body(&descriptions[two_finger]),
ScrollMethod::TwoFinger, ScrollMethod::TwoFinger,
page.input_touchpad page.input_touchpad
.scroll_config .scroll_config
.as_ref() .as_ref()
.and_then(|x| x.method), .and_then(|x| x.method),
|option| Message::SetScrollMethod(Some(option), true), |option| Message::SetScrollMethod(Some(option), true),
), )
) .width(Length::Fill)
.into(),
]))
// Edge scrolling toggle // Edge scrolling toggle
.add( .add(settings::item_row(vec![
settings::item::builder(&descriptions[edge]).radio( widget::radio(
text::body(&descriptions[edge]),
ScrollMethod::Edge, ScrollMethod::Edge,
page.input_touchpad page.input_touchpad
.scroll_config .scroll_config
.as_ref() .as_ref()
.and_then(|x| x.method), .and_then(|x| x.method),
|option| Message::SetScrollMethod(Some(option), true), |option| Message::SetScrollMethod(Some(option), true),
), )
) .width(Length::Fill)
.into(),
]))
// Scroll speed slider // Scroll speed slider
.add(settings::item(&descriptions[scroll_speed], { .add(settings::item(&descriptions[scroll_speed], {
let value = page let value = page

View file

@ -13,7 +13,7 @@ use cosmic::{
iced::core::text::Wrapping, iced::core::text::Wrapping,
iced::{Alignment, Length, widget::operation::focus_next}, iced::{Alignment, Length, widget::operation::focus_next},
task, task,
widget::{self, column, icon, space::horizontal, text_input::focus}, widget::{self, column, icon, space::horizontal as horizontal_space, text_input::focus},
}; };
use cosmic_settings_network_manager_subscription::{ use cosmic_settings_network_manager_subscription::{
self as network_manager, NetworkManagerState, self as network_manager, NetworkManagerState,
@ -195,7 +195,7 @@ impl page::Page<crate::pages::Message> for Page {
widget::button::standard(fl!("cancel")).on_press(Message::CancelDialog); widget::button::standard(fl!("cancel")).on_press(Message::CancelDialog);
let control: Element<_> = if let Some(identity) = identity { let control: Element<_> = if let Some(identity) = identity {
column::with_capacity(2) widget::Column::new()
.spacing(8) .spacing(8)
.push( .push(
widget::text_input::text_input(fl!("identity"), identity) widget::text_input::text_input(fl!("identity"), identity)
@ -883,7 +883,7 @@ fn devices_view() -> Section<crate::pages::Message> {
let spacing = cosmic::theme::spacing(); let spacing = cosmic::theme::spacing();
let wifi_enable = widget::settings::item::builder(&section.descriptions[wifi_txt]) let wifi_enable = widget::settings::item::builder(&section.descriptions[wifi_txt])
.toggler(state.wifi_enabled, Message::WiFiEnable); .control(widget::toggler(state.wifi_enabled).on_toggle(Message::WiFiEnable));
let mut view = widget::column::with_capacity(4) let mut view = widget::column::with_capacity(4)
.push(widget::list_column().add(wifi_enable)) .push(widget::list_column().add(wifi_enable))
@ -1019,7 +1019,7 @@ fn devices_view() -> Section<crate::pages::Message> {
let item = widget::settings::item_row(vec![ let item = widget::settings::item_row(vec![
identifier.into(), identifier.into(),
horizontal().into(), horizontal_space().into(),
controls.into(), controls.into(),
]); ]);
@ -1124,7 +1124,7 @@ fn devices_view() -> Section<crate::pages::Message> {
let item = widget::settings::item_row(vec![ let item = widget::settings::item_row(vec![
identifier.into(), identifier.into(),
horizontal().into(), horizontal_space().into(),
controls.into(), controls.into(),
]); ]);
@ -1234,7 +1234,7 @@ fn devices_view() -> Section<crate::pages::Message> {
let item = widget::settings::item_row(vec![ let item = widget::settings::item_row(vec![
identifier.into(), identifier.into(),
horizontal().into(), horizontal_space().into(),
connect, connect,
]); ]);

View file

@ -7,7 +7,7 @@ use cosmic::Task;
use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit}; use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit};
use cosmic::iced::widget::{column, row}; use cosmic::iced::widget::{column, row};
use cosmic::iced::{self, Alignment, Length, stream}; use cosmic::iced::{self, Alignment, Length, stream};
use cosmic::widget::{self, settings, space, text}; use cosmic::widget::{self, radio, settings, space::horizontal as horizontal_space, text};
use cosmic::{Apply, surface}; use cosmic::{Apply, surface};
use cosmic_config::{Config, CosmicConfigEntry}; use cosmic_config::{Config, CosmicConfigEntry};
use cosmic_idle_config::CosmicIdleConfig; use cosmic_idle_config::CosmicIdleConfig;
@ -508,8 +508,12 @@ fn connected_devices() -> Section<crate::pages::Message> {
.map(|mut device_row| { .map(|mut device_row| {
cosmic::Element::from( cosmic::Element::from(
row!( row!(
device_row.next().unwrap_or(space::horizontal().into()), device_row.next().unwrap_or(
device_row.next().unwrap_or(space::horizontal().into()), horizontal_space().width(Length::Fill).into()
),
device_row.next().unwrap_or(
horizontal_space().width(Length::Fill).into()
),
) )
.spacing(8), .spacing(8),
) )
@ -539,9 +543,18 @@ fn profiles() -> Section<crate::pages::Message> {
section = profiles section = profiles
.into_iter() .into_iter()
.map(|profile| { .map(|profile| {
settings::item::builder(profile.title()) settings::item_row(vec![
.description(profile.description()) radio(
.radio(profile, Some(current_profile), Message::PowerProfileChange) widget::column::with_capacity(2)
.push(text::body(profile.title()))
.push(text::caption(profile.description())),
profile,
Some(current_profile),
Message::PowerProfileChange,
)
.width(Length::Fill)
.into(),
])
}) })
.fold(section, settings::Section::add); .fold(section, settings::Section::add);
} }

View file

@ -320,9 +320,10 @@ fn input() -> Section<crate::pages::Message> {
controls = controls.add( controls = controls.add(
settings::item::builder(&*section.descriptions[amplification]) settings::item::builder(&*section.descriptions[amplification])
.description(&*section.descriptions[amplification_desc]) .description(&*section.descriptions[amplification_desc])
.toggler(page.amplification_source, |t| { .control(
Message::ToggleOverAmplificationSource(t).into() widget::toggler(page.amplification_source)
}), .on_toggle(|t| Message::ToggleOverAmplificationSource(t).into()),
),
); );
Element::from(controls) Element::from(controls)
@ -434,9 +435,10 @@ fn output() -> Section<crate::pages::Message> {
controls = controls.add( controls = controls.add(
settings::item::builder(&*section.descriptions[amplification]) settings::item::builder(&*section.descriptions[amplification])
.description(&*section.descriptions[amplification_desc]) .description(&*section.descriptions[amplification_desc])
.toggler(page.amplification_sink, |t| { .control(
Message::ToggleOverAmplificationSink(t).into() widget::toggler(page.amplification_sink)
}), .on_toggle(|t| Message::ToggleOverAmplificationSink(t).into()),
),
); );
Element::from(controls) Element::from(controls)

View file

@ -8,7 +8,7 @@ use cosmic::{
Apply, Element, Apply, Element,
dialog::file_chooser, dialog::file_chooser,
iced::{Alignment, Length}, iced::{Alignment, Length},
widget::{self, column, icon, list, row, settings, space::horizontal, text}, widget::{self, column, icon, row, settings, space::horizontal as horizontal_space, text},
}; };
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
use image::GenericImageView; use image::GenericImageView;
@ -322,7 +322,7 @@ impl page::Page<crate::pages::Message> for Page {
))) )))
.width(Length::Fill), .width(Length::Fill),
) )
.push(horizontal().width(5.)) .push(horizontal_space().width(5.))
.push(admin_toggler) .push(admin_toggler)
.align_y(Alignment::Center), .align_y(Alignment::Center),
), ),
@ -785,13 +785,16 @@ fn user_list() -> Section<crate::pages::Message> {
.descriptions(descriptions) .descriptions(descriptions)
.view::<Page>(move |_binder, page, section| { .view::<Page>(move |_binder, page, section| {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
let space_xxs = cosmic::theme::spacing().space_xxs;
let cosmic::cosmic_theme::Spacing {
space_xxs, space_m, ..
} = cosmic::theme::active().cosmic().spacing;
let users_list = page let users_list = page
.users .users
.iter() .iter()
.enumerate() .enumerate()
.map(|(idx, user)| { .flat_map(|(idx, user)| {
let expanded = let expanded =
matches!(page.selected_user_idx, Some(user_idx) if user_idx == idx); matches!(page.selected_user_idx, Some(user_idx) if user_idx == idx);
@ -829,6 +832,37 @@ fn user_list() -> Section<crate::pages::Message> {
&descriptions[user_type_standard] &descriptions[user_type_standard]
}); });
let expanded_details = expanded.then(|| {
let mut details_list = widget::list_column()
.add(settings::item(&page.fullname_label, fullname))
.add(settings::item(&page.username_label, username))
.add(settings::item(&page.password_label, password))
.add(settings::item_row(vec![
column::with_capacity(2)
.push(text::body(crate::fl!("administrator")))
.push(text::caption(crate::fl!("administrator", "desc")))
.width(Length::Fill)
.into(),
horizontal_space().width(5.).into(),
widget::toggler(user.is_admin)
.on_toggle(|enabled| {
Message::SelectedUserSetAdmin(user.id, enabled)
})
.into(),
]));
if page.users.len() > 1 {
details_list = details_list.add(settings::item_row(vec![
horizontal_space().width(Length::Fill).into(),
widget::button::destructive(crate::fl!("remove-user"))
.on_press(Message::SelectedUserDelete(user.id))
.into(),
]));
}
details_list.apply(Element::from)
});
let profile_icon_handle = user let profile_icon_handle = user
.profile_icon .profile_icon
.clone() .clone()
@ -850,8 +884,8 @@ fn user_list() -> Section<crate::pages::Message> {
) )
.align_y(Alignment::Center) .align_y(Alignment::Center)
.spacing(space_xxs) .spacing(space_xxs)
.width(Length::Fill)
.into(), .into(),
horizontal_space().width(Length::Fill).into(),
icon::from_name(if expanded { icon::from_name(if expanded {
"go-up-symbolic" "go-up-symbolic"
} else { } else {
@ -862,49 +896,28 @@ fn user_list() -> Section<crate::pages::Message> {
.into(), .into(),
]); ]);
let mut user_list = widget::list_column().add( let account_details = Some(
list::button(account_details_content) widget::button::custom(account_details_content)
.padding([space_xxs, space_m])
.on_press(Message::SelectUser(idx))
.class(cosmic::theme::Button::ListItem)
.width(Length::Fill)
.selected(expanded) .selected(expanded)
.on_press(Message::SelectUser(idx)), .apply(Element::from),
); );
if expanded { vec![account_details, expanded_details]
user_list = user_list
.add(settings::item(&page.fullname_label, fullname))
.add(settings::item(&page.username_label, username))
.add(settings::item(&page.password_label, password))
.add(settings::item_row(vec![
column::with_capacity(2)
.push(text::body(crate::fl!("administrator")))
.push(text::caption(crate::fl!("administrator", "desc")))
.width(Length::Fill)
.into(),
horizontal().width(5.).into(),
widget::toggler(user.is_admin)
.on_toggle(|enabled| {
Message::SelectedUserSetAdmin(user.id, enabled)
})
.into(),
]));
if page.users.len() > 1 {
user_list = user_list.add(settings::item_row(vec![
horizontal().width(Length::Fill).into(),
widget::button::destructive(crate::fl!("remove-user"))
.on_press(Message::SelectedUserDelete(user.id))
.into(),
]));
}
}
Element::from(user_list)
}) })
.flatten()
.fold( .fold(
widget::column::with_capacity(page.users.len()), widget::list_column()
|col, user| col.push(user), .spacing(0)
.padding([8, 0])
.divider_padding(0)
.list_item_padding(0),
widget::ListColumn::add,
) )
.spacing(space_xxs) .apply(|list| Element::from(settings::section::with_column(list)));
.width(Length::Fill);
let add_user = widget::button::standard(crate::fl!("add-user")) let add_user = widget::button::standard(crate::fl!("add-user"))
.on_press(Message::Dialog(Some(Dialog::AddNewUser(User::default())))) .on_press(Message::Dialog(Some(Dialog::AddNewUser(User::default()))))
@ -915,7 +928,7 @@ fn user_list() -> Section<crate::pages::Message> {
widget::column::with_capacity(2) widget::column::with_capacity(2)
.push(users_list) .push(users_list)
.push(add_user) .push(add_user)
.spacing(space_xxs) .spacing(space_m)
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::User) .map(crate::pages::Message::User)
}) })

View file

@ -1,14 +1,13 @@
// Copyright 2023 System76 <info@system76.com> // Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use crate::widget::selection_context_item;
use cosmic::{ use cosmic::{
Apply, Element, Task, Apply, Element, Task,
app::ContextDrawer, app::ContextDrawer,
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, space::horizontal as horizontal_space},
}; };
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
use icu::{ use icu::{
@ -21,6 +20,7 @@ use icu::{
locale::{Locale, preferences::extensions::unicode::keywords::HourCycle}, locale::{Locale, preferences::extensions::unicode::keywords::HourCycle},
}; };
use slotmap::{Key, SlotMap}; use slotmap::{Key, SlotMap};
use std::rc::Rc;
pub use timedate_zbus::TimeDateProxy; pub use timedate_zbus::TimeDateProxy;
use tracing::error; use tracing::error;
@ -335,11 +335,7 @@ impl Page {
for (id, timezone) in self.timezone_list.iter().enumerate() { for (id, timezone) in self.timezone_list.iter().enumerate() {
if search_input.is_empty() || timezone.to_lowercase().contains(search_input) { if search_input.is_empty() || timezone.to_lowercase().contains(search_input) {
list = list.add(selection_context_item( list = list.add(self.timezone_context_item(id, timezone));
timezone,
Some(id) == self.timezone,
Message::Timezone(id),
));
} }
} }
@ -347,6 +343,40 @@ impl Page {
.map(crate::pages::Message::DateAndTime) .map(crate::pages::Message::DateAndTime)
} }
fn timezone_context_item<'a>(&self, id: usize, timezone: &'a str) -> Element<'a, Message> {
let svg_accent = Rc::new(|theme: &cosmic::Theme| cosmic::widget::svg::Style {
color: Some(theme.cosmic().accent_text_color().into()),
});
let selected = Some(id) == self.timezone;
widget::settings::item_row(vec![
widget::text::body(timezone)
.class(if selected {
cosmic::theme::Text::Accent
} else {
cosmic::theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(cosmic::iced::Length::Fill)
.into(),
if selected {
widget::icon::from_name("object-select-symbolic")
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else {
horizontal_space().width(16.).into()
},
])
.apply(widget::container)
.class(cosmic::theme::Container::List)
.apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent)
.on_press(Message::Timezone(id))
.into()
}
fn update_local_time(&mut self) { fn update_local_time(&mut self) {
self.local_time = Some(update_local_time()); self.local_time = Some(update_local_time());
@ -468,19 +498,30 @@ fn timezone() -> Section<crate::pages::Message> {
.title(fl!("time-zone")) .title(fl!("time-zone"))
.descriptions(descriptions) .descriptions(descriptions)
.view::<Page>(move |_binder, page, section| { .view::<Page>(move |_binder, page, section| {
settings::section() let timezone_context_button = widget::row::with_capacity(2)
.title(&section.title) .spacing(12)
// Time zone select .push(
.add(crate::widget::go_next_with_item(
&section.descriptions[time_zone],
widget::text::body( widget::text::body(
page.timezone page.timezone
.map(|id| &*page.timezone_list[id]) .map(|id| &*page.timezone_list[id])
.unwrap_or_default(), .unwrap_or_default(),
) )
.wrapping(Wrapping::Word), .wrapping(Wrapping::Word),
Message::TimezoneContext, )
)) .push(widget::icon::from_name("go-next-symbolic").size(16).icon())
.apply(widget::container)
.class(cosmic::theme::Container::List)
.apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent)
.on_press(Message::TimezoneContext);
settings::section()
.title(&section.title)
// Time zone select
.add(
settings::item::builder(&*section.descriptions[time_zone])
.control(timezone_context_button),
)
.apply(cosmic::Element::from) .apply(cosmic::Element::from)
.map(crate::pages::Message::DateAndTime) .map(crate::pages::Message::DateAndTime)
}) })

View file

@ -2,12 +2,13 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use std::collections::{BTreeMap, BTreeSet}; use std::collections::{BTreeMap, BTreeSet};
use std::rc::Rc;
use std::sync::Arc; use std::sync::Arc;
use crate::widget::selection_context_item;
use cosmic::app::{ContextDrawer, context_drawer}; use cosmic::app::{ContextDrawer, context_drawer};
use cosmic::iced::core::text::Wrapping;
use cosmic::iced::{Alignment, Length}; use cosmic::iced::{Alignment, Length};
use cosmic::widget::{self, button, list}; use cosmic::widget::{self, button, space::horizontal as horizontal_space};
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;
@ -360,9 +361,14 @@ impl Page {
} }
fn add_language_view(&self) -> cosmic::Element<'_, crate::pages::Message> { fn add_language_view(&self) -> cosmic::Element<'_, crate::pages::Message> {
let mut list = widget::list_column::with_capacity(self.available_languages.len()); let mut list = widget::list_column();
let search_input = &self.add_language_search.trim().to_lowercase(); let search_input = &self.add_language_search.trim().to_lowercase();
let svg_accent = Rc::new(|theme: &cosmic::Theme| cosmic::widget::svg::Style {
color: Some(theme.cosmic().accent_text_color().into()),
});
for (id, available_language) in &self.available_languages { for (id, available_language) in &self.available_languages {
if search_input.is_empty() if search_input.is_empty()
|| available_language || available_language
@ -375,15 +381,37 @@ impl Page {
.as_ref() .as_ref()
.is_some_and(|(_, locales)| locales.contains(&available_language.lang_code)); .is_some_and(|(_, locales)| locales.contains(&available_language.lang_code));
list = list.add(selection_context_item( let button = widget::settings::item_row(vec![
&available_language.display_name, widget::text::body(&available_language.display_name)
is_installed, .class(if is_installed {
cosmic::theme::Text::Accent
} else {
cosmic::theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(Length::Fill)
.into(),
if is_installed { if is_installed {
Message::RemoveLanguage(id) widget::icon::from_name("object-select-symbolic")
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else { } else {
Message::AddLanguage(id) horizontal_space().width(16.).into()
}, },
)) ])
.apply(widget::container)
.class(cosmic::theme::Container::List)
.apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent)
.on_press(if is_installed {
Message::RemoveLanguage(id)
} else {
Message::AddLanguage(id)
});
list = list.add(button)
} }
} }
@ -464,7 +492,12 @@ impl Page {
} }
fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> { fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> {
let mut list = widget::list_column::with_capacity(self.available_languages.len()); let svg_accent = Rc::new(|theme: &cosmic::Theme| {
let color = theme.cosmic().accent_text_color().into();
cosmic::widget::svg::Style { color: Some(color) }
});
let mut list = widget::list_column();
let search_input = &self.add_language_search.trim().to_lowercase(); let search_input = &self.add_language_search.trim().to_lowercase();
@ -476,15 +509,37 @@ impl Page {
.as_ref() .as_ref()
.is_some_and(|l| l.lang_code == locale.lang_code); .is_some_and(|l| l.lang_code == locale.lang_code);
list = list.add(selection_context_item( let button = widget::settings::item_row(vec![
&locale.region_name, widget::text::body(&locale.region_name)
is_selected, .class(if is_selected {
cosmic::theme::Text::Accent
} else {
cosmic::theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(Length::Fill)
.into(),
if is_selected { if is_selected {
None widget::icon::from_name("object-select-symbolic")
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else { } else {
Some(Message::SelectRegion(id)) horizontal_space().width(16.).into()
}, },
)) ])
.apply(widget::container)
.class(cosmic::theme::Container::List)
.apply(widget::button::custom)
.class(cosmic::theme::Button::Transparent)
.on_press_maybe(if is_selected {
None
} else {
Some(Message::SelectRegion(id))
});
list = list.add(button)
} }
} }

View file

@ -2,15 +2,14 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use std::borrow::Cow; use std::borrow::Cow;
use std::rc::Rc;
use cosmic::cosmic_theme::Spacing; use cosmic::cosmic_theme::Spacing;
use cosmic::iced::core::text::Wrapping; use cosmic::iced::core::text::Wrapping;
use cosmic::iced::{Alignment, Length}; use cosmic::iced::{Alignment, Length};
use cosmic::widget::color_picker::ColorPickerUpdate; use cosmic::widget::color_picker::ColorPickerUpdate;
use cosmic::widget::{ use cosmic::widget::{
self, ColorPickerModel, button, column, container, divider, icon, list, row, settings, self, ColorPickerModel, button, column, container, divider, icon, row, settings,
space::{horizontal, vertical}, space::{horizontal as horizontal_space, vertical as vertical_space},
text, text,
}; };
use cosmic::{Apply, Element, theme}; use cosmic::{Apply, Element, theme};
@ -76,7 +75,7 @@ pub fn search_header<Message>(
.into(), .into(),
); );
column_children.push(vertical().height(Length::Fixed(8.)).into()); column_children.push(vertical_space().height(Length::Fixed(8.)).into());
column_children.push(divider::horizontal::heavy().into()); column_children.push(divider::horizontal::heavy().into());
column::with_children(column_children).into() column::with_children(column_children).into()
@ -90,12 +89,12 @@ pub fn search_page_link<Message: 'static>(title: &str) -> button::TextButton<'_,
pub fn page_title<Message: 'static>(page: &page::Info) -> Element<'_, Message> { pub fn page_title<Message: 'static>(page: &page::Info) -> Element<'_, Message> {
row::with_capacity(2) row::with_capacity(2)
.push(text::title3(page.title.as_str())) .push(text::title3(page.title.as_str()))
.push(horizontal()) .push(horizontal_space())
.into() .into()
} }
#[must_use] #[must_use]
pub fn unimplemented_page<Message: Clone + 'static>() -> Element<'static, Message> { pub fn unimplemented_page<Message: 'static>() -> Element<'static, Message> {
settings::section().title("") settings::section().title("")
.add(text::body("We haven't created that panel yet, and/or it is using a similar idea as current Pop! designs.")) .add(text::body("We haven't created that panel yet, and/or it is using a similar idea as current Pop! designs."))
.into() .into()
@ -185,69 +184,50 @@ pub fn sub_page_header<'a, Message: 'static + Clone>(
.into() .into()
} }
pub fn go_next_item<Msg: 'static>( pub fn go_next_item<Msg: Clone + 'static>(
description: &str, description: &str,
msg_opt: impl Into<Option<Msg>>, msg_opt: impl Into<Option<Msg>>,
) -> list::ListButton<'_, Msg> { ) -> cosmic::Element<'_, Msg> {
settings::item_row(vec![ settings::item_row(vec![
text::body(description) text::body(description).wrapping(Wrapping::Word).into(),
.width(Length::Fill) horizontal_space().into(),
.wrapping(Wrapping::Word)
.into(),
icon::from_name("go-next-symbolic").size(16).icon().into(), icon::from_name("go-next-symbolic").size(16).icon().into(),
]) ])
.apply(list::button) .width(Length::Fill)
.apply(widget::container)
.class(cosmic::theme::Container::List)
.width(Length::Fill)
.apply(button::custom)
.width(Length::Fill)
.padding(0)
.class(theme::Button::Transparent)
.on_press_maybe(msg_opt.into()) .on_press_maybe(msg_opt.into())
.into()
} }
pub fn go_next_with_item<'a, Msg: 'static>( pub fn go_next_with_item<'a, Msg: Clone + 'static>(
description: &'a str, description: &'a str,
item: impl Into<cosmic::Element<'a, Msg>>, item: impl Into<cosmic::Element<'a, Msg>>,
msg_opt: impl Into<Option<Msg>>, msg_opt: impl Into<Option<Msg>>,
) -> list::ListButton<'a, Msg> { ) -> cosmic::Element<'a, Msg> {
settings::item_row(vec![ settings::item_row(vec![
text::body(description).wrapping(Wrapping::Word).into(), text::body(description).wrapping(Wrapping::Word).into(),
horizontal().into(), horizontal_space().into(),
row::with_capacity(2) widget::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())
.align_y(Alignment::Center) .align_y(Alignment::Center)
.spacing(theme::spacing().space_s) .spacing(cosmic::theme::spacing().space_s)
.into(), .into(),
]) ])
.apply(list::button) .width(Length::Fill)
.on_press_maybe(msg_opt.into()) .apply(widget::container)
} .class(cosmic::theme::Container::List)
.width(Length::Fill)
pub fn selection_context_item<'a, Msg: 'static>( .apply(button::custom)
name: &'a str, .padding(0)
selected: bool, .width(Length::Fill)
msg_opt: impl Into<Option<Msg>>, .class(theme::Button::Transparent)
) -> list::ListButton<'a, Msg> {
let svg_accent = Rc::new(|theme: &cosmic::Theme| widget::svg::Style {
color: Some(theme.cosmic().accent_text_color().into()),
});
settings::item_row(vec![
text::body(name)
.class(if selected {
theme::Text::Accent
} else {
theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(Length::Fill)
.into(),
if selected {
icon::from_name("object-select-symbolic")
.size(16)
.icon()
.class(theme::Svg::Custom(svg_accent.clone()))
.into()
} else {
horizontal().width(16.).into()
},
])
.apply(list::button)
.on_press_maybe(msg_opt.into()) .on_press_maybe(msg_opt.into())
.into()
} }

View file

@ -20,7 +20,7 @@ xdg-entry-desktop-comment = إعدادات خلفية الشاشة والمظه
xdg-entry-displays = شاشات العرض xdg-entry-displays = شاشات العرض
xdg-entry-displays-comment = أدِر إعدادات تضبيط العرض xdg-entry-displays-comment = أدِر إعدادات تضبيط العرض
xdg-entry-dock = الإرساء xdg-entry-dock = الإرساء
xdg-entry-dock-comment = شريط إختياري للتطبيقات والبُريمجات xdg-entry-dock-comment = شريط اختياري للتطبيقات والبريمجات
xdg-entry-input = أجهزة الإدخال xdg-entry-input = أجهزة الإدخال
xdg-entry-input-comment = لوحة المفاتيح، المؤشر، إلخ xdg-entry-input-comment = لوحة المفاتيح، المؤشر، إلخ
xdg-entry-keyboard = لوحة المفاتيح xdg-entry-keyboard = لوحة المفاتيح
@ -208,7 +208,7 @@ desktop = سطح المكتب
## Desktop: Wallpaper ## Desktop: Wallpaper
wallpaper = الخلفية wallpaper = خلفية
.change = غيِّر الصورة كل .change = غيِّر الصورة كل
.fit = ملاءمة الخلفية .fit = ملاءمة الخلفية
.folder-dialog = اختر مجلد الخلفية .folder-dialog = اختر مجلد الخلفية

View file

@ -634,12 +634,12 @@ long = Dlouhé
keyboard-typing-assist = Psaní keyboard-typing-assist = Psaní
.repeat-rate = Frekvence opakování .repeat-rate = Frekvence opakování
.repeat-delay = Zpoždění opakování .repeat-delay = Zpoždění opakování
keyboard-numlock-boot = Num Lock keyboard-numlock-boot = Numlock
.boot-state = Stav klávesy při spuštění systému .boot-state = Stav při spuštění systému
.last-boot = Poslední spuštění systému .last-boot = Poslední spuštění systému
.on = Zapnutý .on = Zapnuto
.off = Vypnutý .off = Vypnuto
.set = Num Lock při spuštění systému .set = Nastavit stav numlock při spuštění systému
added = Přidáno added = Přidáno
type-to-search = Pište pro vyhledávání... type-to-search = Pište pro vyhledávání...
show-extended-input-sources = Zobrazit rozšířené vstupní zdroje show-extended-input-sources = Zobrazit rozšířené vstupní zdroje

View file

@ -1,4 +1,4 @@
app = COSMIC-Einstellungen app = COSMIC Einstellungen
dbus-connection-error = Verbindung zum DBus ist fehlgeschlagen dbus-connection-error = Verbindung zum DBus ist fehlgeschlagen
ok = OK ok = OK
unknown = Unbekannt unknown = Unbekannt
@ -114,7 +114,7 @@ bluetooth-adapters = Bluetooth-Adapter
## Accessibility ## Accessibility
accessibility = Barrierefreiheit accessibility = Barrierefreiheit
.vision = Sehen .vision = Sehkraft
.on = Ein .on = Ein
.off = Aus .off = Aus
.unavailable = Nicht verfügbar .unavailable = Nicht verfügbar
@ -122,7 +122,7 @@ accessibility = Barrierefreiheit
.high-contrast = Modus für hohen Kontrast .high-contrast = Modus für hohen Kontrast
.invert-colors = Farben invertieren .invert-colors = Farben invertieren
.color-filters = Farbfilter .color-filters = Farbfilter
hearing = Hören hearing = Gehör
.mono = Stereo-Audio als Mono abspielen .mono = Stereo-Audio als Mono abspielen
default = Standard default = Standard
magnifier = Vergrößerungsglas magnifier = Vergrößerungsglas
@ -221,7 +221,7 @@ container-background = Container-Hintergrund
.reset = Auf automatisch zurücksetzen .reset = Auf automatisch zurücksetzen
.desc = Wird für die Navigationsseitenleiste, Seitenschublade, Dialoge und ähnliche Widgets verwendet .desc = Wird für die Navigationsseitenleiste, Seitenschublade, Dialoge und ähnliche Widgets verwendet
control-tint = Komponententönung steuern control-tint = Komponententönung steuern
.desc = Wird für Hintergründe von Standardschaltflächen, Sucheingaben, Texteingaben und ähnlichen Komponenten verwendet .desc = Wird für Hintergründe von Standardschaltflächen, Sucheingaben, Texteingaben und ähnlichen Komponenten verwendet.
frosted = Milchglaseffekt bei der Systemoberfläche frosted = Milchglaseffekt bei der Systemoberfläche
.desc = Wendet Hintergrundunschärfe auf Panel, Dock, Applets, Starter und Anwendungsbibliothek an .desc = Wendet Hintergrundunschärfe auf Panel, Dock, Applets, Starter und Anwendungsbibliothek an
enable-export = Aktuelles Thema auf GNOME-Apps anwenden enable-export = Aktuelles Thema auf GNOME-Apps anwenden
@ -351,6 +351,7 @@ color = Farbe
.sidebar = Farbprofile .sidebar = Farbprofile
.temperature = Farbtemperatur .temperature = Farbtemperatur
display = Bildschirme display = Bildschirme
.desc = Bildschirme, Grafikumschaltung und Nachtlicht verwalten
.arrangement = Bildschirmanordnung .arrangement = Bildschirmanordnung
.arrangement-desc = Bildschirme ziehen, um sie neu anzuordnen. .arrangement-desc = Bildschirme ziehen, um sie neu anzuordnen.
.enable = Bildschirm aktivieren .enable = Bildschirm aktivieren
@ -412,8 +413,8 @@ sound-input = Eingang
.device = Eingabegerät .device = Eingabegerät
.level = Eingangspegel .level = Eingangspegel
sound-alerts = Alarmsignale sound-alerts = Alarmsignale
.volume = Lautstärke von Alarmsignalen .volume = Lautstärke von Alarmsignalen.
.sound = Alarmsignalklang .sound = Alarmsignalklang.
sound-applications = Anwendungen sound-applications = Anwendungen
.desc = Lautstärken und Einstellungen von Anwendungen .desc = Lautstärken und Einstellungen von Anwendungen
@ -461,7 +462,7 @@ power-saving = Energiesparoptionen
## Input ## Input
acceleration-desc = Passt die Tracking-Empfindlichkeit automatisch an die Geschwindigkeit an acceleration-desc = Passt die Tracking-Empfindlichkeit automatisch an die Geschwindigkeit an.
disable-while-typing = Während dem Tippen deaktivieren disable-while-typing = Während dem Tippen deaktivieren
input-devices = Eingabegeräte input-devices = Eingabegeräte
primary-button = Primäre Taste primary-button = Primäre Taste
@ -493,7 +494,6 @@ keyboard-sources = Eingabequellen
keyboard-special-char = Eingabe von Sonderzeichen keyboard-special-char = Eingabe von Sonderzeichen
.alternate = Taste für alternative Zeichen .alternate = Taste für alternative Zeichen
.compose = Compose-Taste .compose = Compose-Taste
.compose-desc = Mit der Compose-Taste kannst du viele verschiedene Zeichen eingeben. Drück einfach die Compose-Taste und dann die Zeichen, die du brauchst. Wenn du zum Beispiel die Compose-Taste und dann C und o drückst, kommt ©, und wenn du die Compose-Taste und dann a und ' drückst, kommt á.
.caps = Feststelltaste .caps = Feststelltaste
keyboard-typing-assist = Tippen keyboard-typing-assist = Tippen
.repeat-rate = Wiederholungsrate .repeat-rate = Wiederholungsrate
@ -512,7 +512,7 @@ show-extended-input-sources = Erweiterte Eingabequellen anzeigen
keyboard-shortcuts = Tastenkombinationen keyboard-shortcuts = Tastenkombinationen
.desc = Tastenkombinationen anzeigen und anpassen .desc = Tastenkombinationen anzeigen und anpassen
add-another-keybinding = Weitere Tastenbelegung hinzufügen add-another-keybinding = Weitere Tastenkombination hinzufügen
cancel = Abbrechen cancel = Abbrechen
command = Befehl command = Befehl
custom = Benutzerdefiniert custom = Benutzerdefiniert
@ -605,7 +605,6 @@ system-shortcut = System
.app-library = App-Bibliothek öffnen .app-library = App-Bibliothek öffnen
.brightness-down = Bildschirmhelligkeit verringern .brightness-down = Bildschirmhelligkeit verringern
.brightness-up = Bildschirmhelligkeit erhöhen .brightness-up = Bildschirmhelligkeit erhöhen
.display-toggle = Internen Bildschirm umschalten
.home-folder = Persönlichen Ordner öffnen .home-folder = Persönlichen Ordner öffnen
.keyboard-brightness-down = Tastaturhelligkeit verringern .keyboard-brightness-down = Tastaturhelligkeit verringern
.keyboard-brightness-up = Tastaturhelligkeit erhöhen .keyboard-brightness-up = Tastaturhelligkeit erhöhen
@ -619,9 +618,7 @@ system-shortcut = System
.play-prev = Vorheriger Titel .play-prev = Vorheriger Titel
.poweroff = System ausschalten .poweroff = System ausschalten
.screenshot = Bildschirmfoto machen .screenshot = Bildschirmfoto machen
.suspend = Bereitschaft
.terminal = Terminal öffnen .terminal = Terminal öffnen
.touchpad-toggle = Touchpad umschalten
.volume-lower = Lautstärke der Audioausgabe verringern .volume-lower = Lautstärke der Audioausgabe verringern
.volume-raise = Lautstärke der Audioausgabe erhöhen .volume-raise = Lautstärke der Audioausgabe erhöhen
.web-browser = Webbrowser öffnen .web-browser = Webbrowser öffnen
@ -653,7 +650,7 @@ click-behavior = Klickverhalten
.click-finger = Sekundärklick mit zwei Fingern und Mittelklick mit drei Fingern .click-finger = Sekundärklick mit zwei Fingern und Mittelklick mit drei Fingern
.button-areas = Sekundärklick in der unteren rechten Ecke und Mittelklick in der unteren Mitte .button-areas = Sekundärklick in der unteren rechten Ecke und Mittelklick in der unteren Mitte
pinch-to-zoom = Zwei-Finger-Zoom pinch-to-zoom = Zwei-Finger-Zoom
.desc = Mit zwei Fingern in den Inhalt zoomen, wenn die Anwendung den Zoom unterstützt .desc = Mit zwei Fingern in den Inhalt zoomen, wenn die Anwendung den Zoom unterstützt.
tap-to-click = Tippen zum Klicken tap-to-click = Tippen zum Klicken
.desc = Ermöglicht das Tippen mit einem Finger für den Primärklick, das Tippen mit zwei Fingern für den Sekundärklick und das Tippen mit drei Fingern für den Mittelklick .desc = Ermöglicht das Tippen mit einem Finger für den Primärklick, das Tippen mit zwei Fingern für den Sekundärklick und das Tippen mit drei Fingern für den Mittelklick
touchpad = Touchpad touchpad = Touchpad
@ -695,7 +692,7 @@ time-format = Datums- & Uhrzeitformat
.monday = Montag .monday = Montag
time-region = Region & Sprache time-region = Region & Sprache
formatting = Formatierung formatting = Formatierung
.dates = Datum .dates = Daten
.time = Uhrzeit .time = Uhrzeit
.date-and-time = Datum & Uhrzeit .date-and-time = Datum & Uhrzeit
.numbers = Zahlen .numbers = Zahlen
@ -742,14 +739,10 @@ startup-apps = Startanwendungen
legacy-applications = Kompatibilität mit X11-Anwendungen legacy-applications = Kompatibilität mit X11-Anwendungen
# This is still work in progress, as I didn't have enough time. Therefore, I left this here temporarily. # This is still work in progress, as I didn't have enough time. Therefore, I left this here temporarily.
legacy-app-scaling = Anwendungsskalierung des X11-Fenstersystems legacy-app-scaling = Anwendungsskalierung des X11-Fenstersystems
.scaled-gaming = Für Spiele und Vollbild-Apps optimieren .scaled-by-system = Alle X11-Anwendungen skalieren
.gaming-description = X11-Anwendungen können im Vergleich zu Wayland-Anwendungen etwas größer/kleiner erscheinen .system-description = X11-Anwendungen werden auf HiDPI-Bildschirmen unscharf dargestellt.
.scaled-applications = Für Anwendungen optimieren .scaled-natively = X11-Anwendungen in nativer Auflösung rendern
.applications-description = Spiele und Vollbild-X11-Anwendungen passen möglicherweise nicht zu deiner Bildschirmauflösung .native-description = X11-Anwendungen, die keine Skalierung unterstützen, werden klein dargestellt, wenn HiDPI-Bildschirme verwendet werden. Für Spiele aktivieren, um die volle Monitorauflösung auszunutzen.
.scaled-compatibility = Modus für maximale Kompatibilität
.compatibility-description = X11-Anwendungen können auf HiDPI-Bildschirmen unscharf erscheinen
.preferred-display = Bevorzugte Anzeige für Spiele und Vollbild-X11-Anwendungen
.no-display = Keine
## System ## System
@ -901,14 +894,3 @@ invalid-username = Ungültiger Benutzername
change-password = Passwort ändern change-password = Passwort ändern
xdg-entry-about-comment = Gerätename, Hardware-Informationen, Betriebssystem-Standardeinstellungen xdg-entry-about-comment = Gerätename, Hardware-Informationen, Betriebssystem-Standardeinstellungen
no-search-results = Es wurden keine Netzwerke gefunden, die deiner Suche entsprechen. no-search-results = Es wurden keine Netzwerke gefunden, die deiner Suche entsprechen.
legacy-app-global-shortcuts = Globale Tastenkombinationen in X11-Anwendungen
.desc = Globale Tastenkombinationen ermöglichen es, dass in Anwendungen ausgeführte Tastenanschläge und Mausklicks von anderen Anwendungen für Funktionen wie Push-to-Talk oder Push-to-Mute erkannt werden. Standardmäßig sind globale Tastenkombinationen in X11-Anwendungen deaktiviert, um sicherzustellen, dass andere Anwendungen keine Tastatur- und Mausereignisse überwachen können, die sensible Informationen enthalten.
.none = Keine Tasten
.modifiers = Modifikatortasten (Super, Umschalt, Steuerung, Alt)
.combination = Alle Tasten, während die Modifikatortasten Super, Steuerung oder Alt gedrückt werden
.all = Alle Tasten
.mouse = Maustasten-Ereignisse in X11-Anwendungen
xdg-entry-desktop-keywords = COSMIC;Desktop;
xdg-entry-desktop = Desktop
xdg-entry-a11y-keywords = COSMIC;Barrierefreiheit;A11y;Bildschirm;Leser;Vergrößerungsglas;Kontrast;Farbe;
xdg-entry-a11y-comment = Bildschirmleser, Vergrößerungsglas, hoher Kontrast und Farbfilter

View file

@ -484,7 +484,6 @@ window-controls = Window controls
.maximize = Show maximize button .maximize = Show maximize button
.minimize = Show minimize button .minimize = Show minimize button
.active-window-hint = Show active window hint .active-window-hint = Show active window hint
.position-start = Place buttons on the left (macOS style)
focus-navigation = Focus navigation focus-navigation = Focus navigation
.focus-follows-cursor = Focus follows cursor .focus-follows-cursor = Focus follows cursor
@ -522,9 +521,6 @@ workspaces-orientation = Workspaces orientation
hot-corner = Hot Corner hot-corner = Hot Corner
.top-left-corner = Enable top-left hot corner for Workspaces .top-left-corner = Enable top-left hot corner for Workspaces
workspaces-navigation = Navigation
.wraparound = Move between first and last workspace using keyboard shortcuts and gestures
## Displays ## Displays
-requires-restart = Requires restart -requires-restart = Requires restart

View file

@ -802,6 +802,3 @@ full-name = Nombre completo
invalid-username = Nombre de usuario inválido. invalid-username = Nombre de usuario inválido.
password-mismatch = Las contraseñas no coinciden. password-mismatch = Las contraseñas no coinciden.
save = Guardar save = Guardar
xdg-entry-applications = Aplicaciones
xdg-entry-appearance = Apariencia
xdg-entry-a11y = Accesibilidad

View file

View file

@ -322,7 +322,6 @@ window-controls = Contrôles des fenêtres
.maximize = Afficher le bouton maximiser .maximize = Afficher le bouton maximiser
.minimize = Afficher le bouton minimiser .minimize = Afficher le bouton minimiser
.active-window-hint = Afficher l'indice de la fenêtre active .active-window-hint = Afficher l'indice de la fenêtre active
.position-start = Placer les boutons à gauche (style macOS)
focus-navigation = Navigation par le focus focus-navigation = Navigation par le focus
.focus-follows-cursor = Le focus suit le curseur .focus-follows-cursor = Le focus suit le curseur
.focus-follows-cursor-delay = Délai de suivi du focus en ms .focus-follows-cursor-delay = Délai de suivi du focus en ms
@ -855,11 +854,11 @@ sound-hd-audio = Audio HD
sound-usb-audio = Audio USB sound-usb-audio = Audio USB
sound-device-profiles = Profils des périphériques sound-device-profiles = Profils des périphériques
shadows-floating = Fenêtres flottantes shadows-floating = Fenêtres flottantes
.clip = Aligner avec les coins système et appliquer les ombres .clip = Aligner les coins du système et appliquer des ombres
shadows-tiling = Fenêtres agencées shadows-tiling = Fenêtres ajustées
.clip = Aligner avec les coins système .clip = Aligner les coins du système
.shadow = Appliquer les ombres .shadow = Appliquer des ombres
shadow-and-corners = Ombres et arrondis des fenêtres shadow-and-corners = Les ombres et coins des fenêtres
workspaces-overview = Aperçu des espaces de travail workspaces-overview = Aperçu des espaces de travail
.action-on-typing = Action lors de la saisie .action-on-typing = Action lors de la saisie
.none = Aucun .none = Aucun
@ -900,6 +899,6 @@ xdg-entry-keywords = COSMIC;Paramètres;
xdg-entry-region-language-keywords = COSMIC;Région;Langue;Date;Format;Heure;Paramètres régionaux;Localisation; xdg-entry-region-language-keywords = COSMIC;Région;Langue;Date;Format;Heure;Paramètres régionaux;Localisation;
xdg-entry-applications-keywords = COSMIC;Défaut;Application;Démarrage;X11;Compatibilité xdg-entry-applications-keywords = COSMIC;Défaut;Application;Démarrage;X11;Compatibilité
xdg-entry-keyboard-keywords = COSMIC;Clavier;Saisie;Source;Raccourcis; xdg-entry-keyboard-keywords = COSMIC;Clavier;Saisie;Source;Raccourcis;
xdg-entry-window-management-keywords = COSMIC;Fenêtre;Gestion;Agencement;Super;Touche; xdg-entry-window-management-keywords = COSMIC;Fenêtre;Gestion;Ajustement;Super;Touche;
xdg-entry-displays-keywords = COSMIC;Écran; xdg-entry-displays-keywords = COSMIC;Écran;
no-search-results = Aucun réseau ne correspond à votre recherche. no-search-results = Aucun réseau ne correspond à votre recherche.

View file

@ -265,8 +265,8 @@ end-segment = Deighleog deireadh
large = Mór large = Mór
no-applets-found = Níor aimsíodh feidhmchláiríní... no-applets-found = Níor aimsíodh feidhmchláiríní...
panel-bottom = Bun panel-bottom = Bun
panel-left = Ar chlé panel-left = Clé
panel-right = Ar dheis panel-right = Deas
panel-top = Barr panel-top = Barr
search-applets = Cuardach feidhmchláiríní... search-applets = Cuardach feidhmchláiríní...
small = Beag small = Beag
@ -518,8 +518,8 @@ migrate-workspace-next = Aistrigh spás oibre go dtí an chéad aschur eile
migrate-workspace = migrate-workspace =
Imirce spás oibre chuig aschur { $direction -> Imirce spás oibre chuig aschur { $direction ->
*[down] síos *[down] síos
[left] ar chlé [left] clé
[right] ar dheis [right] deas
[up] suas [up] suas
} }
navigate = Nascleanúint navigate = Nascleanúint
@ -541,19 +541,19 @@ nav-shortcuts = Nascleanúint
.prev-workspace = Fócas ar spás oibre roimhe seo .prev-workspace = Fócas ar spás oibre roimhe seo
.next-workspace = Fócas ar an gcéad spás oibre eile .next-workspace = Fócas ar an gcéad spás oibre eile
.focus = .focus =
Fócas fuinneog { $direction -> Fuinneog fócais { $direction ->
*[down] síos *[down] síos
[in] isteach [in] isteach
[left] ar chlé [left] clé
[out] amach [out] amach
[right] ar dheis [right] deas
[up] suas [up] suas
} }
.output = .output =
Athraigh chuig aschur { $direction -> Athraigh chuig aschur { $direction ->
*[down] síos *[down] síos
[left] ar chlé [left] clé
[right] ar dheis [right] deas
[up] suas [up] suas
} }
.workspace = Athraigh go spás oibre { $num } .workspace = Athraigh go spás oibre { $num }
@ -567,24 +567,24 @@ manage-windows = Bainistigh fuinneoga
.toggle-sticky = Scoránaigh an fhuinneog greamaitheach .toggle-sticky = Scoránaigh an fhuinneog greamaitheach
move-windows = Bog fuinneoga move-windows = Bog fuinneoga
.direction = .direction =
Bog an fhuinneog { $direction -> Bog Fuinneog { $direction ->
*[down] síos *[down] síos
[left] ar chlé [left] clé
[right] ar dheis [right] deas
[up] suas [up] suas
} }
.display = .display =
Bog an fhuinneog monatóir amháin { $direction -> Bog fuinneog monatóir amháin { $direction ->
*[down] síos *[down] síos
[left] ar chlé [left] clé
[right] ar dheis [right] deas
[up] suas [up] suas
} }
.workspace = .workspace =
Bog an fhuinneog spás oibre amháin { $direction -> Bog fuinneog spás oibre amháin { $direction ->
*[below] thíos *[below] thíos
[left] ar chlé [left] clé
[right] ar dheis [right] deas
[above] thuas [above] thuas
} }
.workspace-num = Bog an fhuinneog go spás oibre { $num } .workspace-num = Bog an fhuinneog go spás oibre { $num }
@ -910,4 +910,3 @@ xdg-entry-date-time-comment = Crios ama, socruithe uathoibríocha cloig, agus fo
xdg-entry-x11-applications = Comhoiriúnacht Feidhmchláir X11 xdg-entry-x11-applications = Comhoiriúnacht Feidhmchláir X11
xdg-entry-window-management-comment = Gníomh na sár-eochrach, roghanna rialaithe fuinneoige, agus roghanna breise tíleála fuinneoige xdg-entry-window-management-comment = Gníomh na sár-eochrach, roghanna rialaithe fuinneoige, agus roghanna breise tíleála fuinneoige
xdg-entry-wired-comment = Naisc sreangaithe agus próifílí nasc xdg-entry-wired-comment = Naisc sreangaithe agus próifílí nasc
no-search-results = Níl aon líonra ag teacht leis an gcuardach seo.

View file

@ -70,9 +70,9 @@ add-vpn = VPN hozzáadása
airplane-on = A repülőgép üzemmód be van kapcsolva airplane-on = A repülőgép üzemmód be van kapcsolva
cable-unplugged = Kábel kihúzva cable-unplugged = Kábel kihúzva
connect = Csatlakozás connect = Csatlakozás
connected = Csatlakoztatva connected = Csatlakozva
connecting = Csatlakozás… connecting = Csatlakozás…
disconnect = Bontás disconnect = Leválasztás
forget = Elfelejtés forget = Elfelejtés
known-networks = Ismert hálózatok known-networks = Ismert hálózatok
network-and-wireless = Hálózat és Wi-Fi network-and-wireless = Hálózat és Wi-Fi
@ -91,14 +91,14 @@ auth-dialog = Azonosítás szükséges
forget-dialog = El akarod felejteni ezt a Wi-Fi hálózatot? forget-dialog = El akarod felejteni ezt a Wi-Fi hálózatot?
.description = A jelszót ismét meg kell adnod, ha újra csatlakozni szeretnél. .description = A jelszót ismét meg kell adnod, ha újra csatlakozni szeretnél.
network-device-state = network-device-state =
.activated = Csatlakoztatva .activated = Csatlakozva
.config = Csatlakozás… .config = Csatlakozás…
.deactivating = Bontás… .deactivating = Leválasztás…
.disconnected = Kapcsolat bontva .disconnected = Leválasztva
.failed = Csatlakozás sikertelen .failed = Csatlakozás sikertelen
.ip-check = Kapcsolat ellenőrzése .ip-check = Kapcsolat ellenőrzése
.ip-config = IP és router információk lekérése .ip-config = IP és router információk lekérése
.need-auth = Hitelesítés szükséges .need-auth = Azonosítás szükséges
.prepare = Felkészülés a kapcsolódáshoz .prepare = Felkészülés a kapcsolódáshoz
.secondaries = Várakozás másodlagos kapcsolatra .secondaries = Várakozás másodlagos kapcsolatra
.unavailable = Nem elérhető .unavailable = Nem elérhető
@ -151,11 +151,11 @@ confirm = Megerősítés
enable = Engedélyezés enable = Engedélyezés
bluetooth = Bluetooth bluetooth = Bluetooth
.status = Ez a rendszer { $aliases } néven látható, amíg a Bluetooth beállítások vannak megnyitva. .status = Ez a rendszer { $aliases } néven látható, amíg a Bluetooth beállítások vannak megnyitva.
.connected = Csatlakoztatva .connected = Csatlakozva
.connecting = Csatlakozás… .connecting = Csatlakozás…
.disconnecting = Bontás… .disconnecting = Leválasztás…
.connect = Csatlakozás .connect = Csatlakozás
.disconnect = Bontás .disconnect = Leválasztás
.forget = Elfelejtés .forget = Elfelejtés
.dbus-error = Hiba történt a DBus-szal való kommunikáció során: { $why } .dbus-error = Hiba történt a DBus-szal való kommunikáció során: { $why }
.disabled = A Bluetooth szolgáltatás le van tiltva .disabled = A Bluetooth szolgáltatás le van tiltva
@ -865,10 +865,10 @@ sound-hd-audio = HD-hang
sound-usb-audio = USB-hang sound-usb-audio = USB-hang
sound-device-profiles = Eszközprofilok sound-device-profiles = Eszközprofilok
shadows-floating = Lebegő ablakok shadows-floating = Lebegő ablakok
.clip = Rendszersarkokhoz illeszkedés és árnyékok alkalmazása .clip = A rendszer sarkainak követése és árnyék alkalmazása
shadows-tiling = Csempézett ablakok shadows-tiling = Csempézett ablakok
.clip = Rendszersarkokhoz illeszkedés .clip = A rendszer sarkainak követése
.shadow = Árnyékok alkalmazása .shadow = Árnyék alkalmazása
shadow-and-corners = Ablakok árnyéka és sarkai shadow-and-corners = Ablakok árnyéka és sarkai
workspaces-overview = Munkaterületek áttekintése workspaces-overview = Munkaterületek áttekintése
.action-on-typing = Művelet gépeléskor .action-on-typing = Művelet gépeléskor
@ -877,7 +877,7 @@ workspaces-overview = Munkaterületek áttekintése
.applications = Alkalmazások megnyitása .applications = Alkalmazások megnyitása
xdg-entry-mouse-keywords = COSMIC;Egér;Gyorsítás;Görgetés; xdg-entry-mouse-keywords = COSMIC;Egér;Gyorsítás;Görgetés;
xdg-entry-notifications-keywords = COSMIC;Értesítés;Zárolás;Ne zavarjanak; xdg-entry-notifications-keywords = COSMIC;Értesítés;Zárolás;Ne zavarjanak;
xdg-entry-startup-apps-keywords = COSMIC;Automatikus;Indítási alkalmazás; xdg-entry-startup-apps-keywords = COSMIC;Indítási;Alkalmazás;
xdg-entry-appearance-keywords = COSMIC;Kiemelő;Szín;Ikon;Betűkészlet;Téma; xdg-entry-appearance-keywords = COSMIC;Kiemelő;Szín;Ikon;Betűkészlet;Téma;
xdg-entry-dock-keywords = COSMIC;Dokk;Panel;Kisalkalmazás; xdg-entry-dock-keywords = COSMIC;Dokk;Panel;Kisalkalmazás;
xdg-entry-panel-keywords = COSMIC;Panel;Kisalkalmazás; xdg-entry-panel-keywords = COSMIC;Panel;Kisalkalmazás;

View file

@ -316,320 +316,3 @@ number = { $number }
unknown = Arussin unknown = Arussin
ok = IH ok = IH
dbus-connection-error = Ur izmir ara ad yeqqen ɣer DBus dbus-connection-error = Ur izmir ara ad yeqqen ɣer DBus
zoom-out = Simẓi
zoom-in = Semɣeṛ
replace-shortcut-dialog = Semselsi anegzum?
.desc = { $shortcut } yettwaseqdec sɣur { $name }. Ma tsemselsiḍ-t, { $name } ad yettwsens.
window-tiling = Afser n yisfuyla
.horizontal = Sbadu taɣda taglawant
.vertical = Sbadu taɣda tubdidt
.swap-window = Asfaylu n usemmeskel
.toggle-tiling = Qluqel afsar n usfaylu
.toggle-stacking = Qluqel asettef n usfaylu
.toggle-floating = Qluqel asfaylu yettifliwen
.toggle-orientation = Qluqel taɣda
manage-windows = Sefrek isfuyla
.close = Mdel asfaylu
.maximize = Semɣer asfaylu
.fullscreen = Asfaylu n ugdil aččuran
.minimize = Semẓi asfaylu
.resize-inwards = Ales tiddi n usfaylu ɣer daxel
.resize-outwards = Ales tiddit n usfaylu ɣer berra
.toggle-sticky = Rmed/Sens asfaylu usbiḍ
modified = { $count } ttwasniflen
custom-shortcuts = Inegzumen yugnen
.add = Rnu anegzum
.context = Rnu anegzum yugnen
.none = Ulac inegzumen yugnen
type-key-combination = Aru asuddes n tsarut
toggle-stacking = Rmed/Sens asettef n isfuyla
terminate = Egg tagara
system-controls = Isenqaden n unagraw
shortcut-name = Isem n unegzum
navigate = Inig
migrate-workspace =
Inig tallunt n umahil ɣer tuffɣa { $direction ->
*[down] ukessar
[left] uzelmaḍ
[right] uyeffus
[up] usawen
}
migrate-workspace-next = Inig tallunt n umahil ɣer tuffɣa tuḍfirt
migrate-workspace-prev = Inig tallunt n umahil ɣer tuffɣa tuzwirt
input-source-switch = Beddel tutlayt n usekcem n unasiw
disabled = Insa
debug = Seɣti
custom = Yugnen
command = Taladna
add-another-keybinding = Rnu yiwen n unegzum n unasiw nniḍen
keyboard-shortcuts = Inegzumen n unasiw
.desc = Wali sakin sagen inegzumen
show-extended-input-sources = Sken tiɣbula n unekcum leqqayen
type-to-search = Aru iwakken ad tnadiḍ…
added = Yettwarna
keyboard-sources = Iɣbula n unekcum
.desc = Iɣbula n unekcum zemren ad ttwasneflen s useqdec n usuddes n tsarut Super+Space. Ayagi yezmer ad yettuwennez deg yiɣewwaṛen n unegzum n unasiw..
.move-up = Ddu d asawen
.move-down = Ddu d akessar
.settings = Iɣewwaṛen
.view-layout = Wali taneɣruft n unasiw
.remove = Kkes
.add = Rnu aɣbalu n unekcum
keyboard = Anasiw
long = Aɣezfan
short = Awezlan
fast = Arurad
slow = Ẓẓay
scrolling = Adrurem
.two-finger = Drurem s sin iḍudan
.edge = Drurem arma d iri s yiwen uḍad
.speed = Arured n udrurem
.natural = Adrurem agaman
.natural-desc = Drurem agbur, deg wadeg n tmeẓri
primary-button = Taqeffalt tagejdant
.desc = Ad yesbadu amizzwer n tqeffalin tifekkanin
.left = Azelmaḍ
.right = Ayeffus
input-devices = ibenkan n unekcum
disable-while-typing = Sens ticki tettaruḍ
acceleration-desc = Seggem s wudem awurman aḥulfu n uneḍfar ilmend n urured
power-saving = Tinefrunin n uḥraz n tnezmart
.turn-off-screen-after = Sexsi agdil seld
.auto-suspend = Aseḥbes deg leɛḍil s wudem awurman
.auto-suspend-ac = Aseḥbes deg leɛḍil s wudem awurman mi ara yeqqen
.auto-suspend-battery = Aseḥbes deg leɛḍil s wudem awurman ɣef tezmer n uẓru
power-mode = Askar n tezmart
.battery = Asiɣzef n tudert n uẓru
.battery-desc = Aḥraz n tezmart d tmellit tasusamt
.balanced = Awliwal
.balanced-desc = Timellit tasussamt akked useqdec alemmas n tezmert
.performance = Timellit tafellayt
.performance-desc = Taqacuct useqdec n tmellit d tezmert
.no-backend = Ameẓlu n deffir ur yettwaf ara. Sbedd system76-power neɣ power-profiles-daemon.
connected-devices = Ibenkan yeqqnen
.unknown = Ibenk arussin
battery = Aẓru
.minute =
{ $value } { $value ->
[one] tasdat
*[other] n tesdatin
}
.hour =
{ $value } { $value ->
[one] asrag
*[other] n yisragen
}
.day =
{ $value } { $value ->
[one] wass
*[other] n wussan
}
.less-than-minute = Ur tettaweḍ ara tesdat
.and = akked
.remaining-time =
{ $time } alamma { $action ->
[full] yeččur
*[other] ifuk
}
power = Tazmert d uẓru
sound-device-profiles = Imuɣna n yibenk
sound-usb-audio = Imesli USB
sound-hd-audio = Imesli HD
amplification = Asedfu
.desc = Ad yesireg ableɣ alama d 150%
sound-input = Anekcam
.volume = Ableɣ n unekcum
.device = Ibenk n unekcum
.level = Aswir n unekcum
sound-output = Tuffɣa
.volume = Ableɣ n tuffɣa
.device = Ibenk n tuffɣa
.level = Aswir n tuffɣa
.config = Twila
.balance = Awliwel
.left = Azelmaḍ
.right = Ayeffus
sound = Imesli
dialog = Tanaka n udiwenni
.title = Eǧǧ iɣewwaren-agi n ubeqqeḍ?
.keep-changes = Eǧǧ ibeddilen
.change-prompt = Isenfal n yiɣewwaṛen ad ttwasfesxen s wudem awurman deg { $time } n tsinin.
.revert-settings = Err-d iɣewwaṛen
scheduling = Asɣiwes
.manual = Asɣiwes s ufus
vrr = Atug n usismeḍ n umutti
.enabled = Yettwarmed
.force = Yal tikelt
.auto = S wudem awarman
.disabled = Ittwarermed
orientation = Taɣda
.standard = Tizeɣt
.rotate-90 = Zzi s 90°
.rotate-180 = Zzi s 180°
.rotate-270 = Zzi s 270°
night-light = Tafat n yiḍ
.auto = Awurman (seg uɣelluy ɣer walluy)
.desc = Senqes tafat tazegzawt s yiniten yeḥman
-requires-restart = Yesra asenker tikelt-nniḍen
workspaces-multi-behavior = Tiddin n uget n yigdilen
.span = Tallunin n umahil tteddunt ɣef ddeqs n yigdilen
.separate = Igdilen sɛan tallunin n umahil i yiman-nsent
workspaces-behavior = Tiddin n tallunt n umahil
.dynamic = Tallunin n umahil s wudem asmussaw
.dynamic-desc = Kkes s wudem awurman tallunin n umahil tilmawin
.fixed = Amḍan usbiḍ n tallunin n umahil
.fixed-desc = Rnu neɣ kkes tallunin n umahil deg teskant.
workspaces-overview = Taskant n tallunin n umahil
.action-on-typing = Tigawt deg tira
.none = Ula yiwen
.launcher = Ldi Amsekkar
.applications = Ldi Isnasen
workspaces = Tallunin n umahil
focus-navigation = Asaḍas n yinig
.focus-follows-cursor = Asaḍas i uḍfar n teḥnaccaḍt
.focus-follows-cursor-delay = Asaḍas i uḍfar n teḥnaccaḍt s usmezger s mili-tasint
.cursor-follows-focus = Taḥnaccaṭ teḍfer asaḍas
window-controls = Isenqaden n usfaylu
.maximize = Sken taqeffalt n usemɣer
.minimize = Sken taqeffalt n usemẓi
.active-window-hint = Sken amatar n usfaylu urmid
edge-gravity = Ajbad n yisfuyla yettifliwen ɣer yiran iqerben
super-key = Tigawt n tsarut Super
.launcher = Ldi amsekkar
.workspaces = Ldi tallunin n umahil
.applications = Ldi isnasen
.disable = Sens
window-management = Amsefrak n yisfuyla
panel-missing = Tawila n ugalis ulac-itt
.desc = Afaylu n twila n ugalis ulac-it ɣef sebba n useqdec n twila yugnen neɣ yexṣer.
.fix = Ales awennez ɣer umezwer
panel-applets = Tawila
.dock-desc = Swel tiplaḍin n udekkan
.desc = Swel tiplaḍin n ugalis
panel-style = Aɣanib
.anchor-gap = Ilem gar ugalis d yiran n ugdil
.dock-anchor-gap = Ilem gar udekkan d yiran n ugdil
.extend = Seɣzef agalis ɣer yiran n ugdil
.dock-extend = Seɣzef adekkan ɣer yiran n ugdil
.appearance = Timeẓriwt
.size = Teɣzi
.background-opacity = Tiḍullest n ugilal
panel-behavior-and-position = Tiddin akked wadigen
.autohide = Ffer s wudem awurman agalis
.dock-autohide = Ffer s wudem awurman adekkan
.position = Ideg deg ugdil
.display = Sken deg ubeqqeḍ
panel-appearance = Timeẓriwt
.match = Amṣada d tnarit
.light = Aceɛlal
.dark = Aɣmayan
start-segment = Aḥric n tazwara
small = Ameẓyan
search-applets = Nadi tiplaḍin…
panel-top = Uksawen
panel-right = Ayeffus
panel-left = Azelmaḍ
panel-bottom = Ukessar
no-applets-found = Ulac tiplaḍin yettwafen...
large = Meqqer
end-segment = Aḥric n taggara
place-here = Sers tiplaḍin dagi
center-segment = Aḥric alemmas
no-search-results = Ulac ifuyla inmeɣran akked unadi-ik·im.
password-mismatch = Awal uffir akked usentem ilaq ad mṣadan
invalid-username = Isem n useqdac d armeɣtu
full-name = Isem ummid
remove-user = Kkes aseqdac
change-password = Asnifel n wawal uffir
add-user = Rnu aseqdac
administrator = Anedbal
.desc = Inedbalen zemren ad beddlen iɣewwaṛen i yiseqdacen meṛṛa, ad rnun neɣ ad kksen iseqdacen-nniḍen
users = Iseqdacen
.admin = Anedbal
.standard = Tizeɣt
.profile-add = Fren tugna n umaɣnu
firmware = Afreɣẓan
about-related = Iɣewwaṛen icudden
.support = Awi-d tallelt
about-os = Anagraw n wammud
.os = Anagraw n wammud
.os-architecture = Tasegda n unagraw n wammud
.kernel = Lqem n yiɣes
.desktop-environment = Twennaḍt n tnarit
.windowing-system = Anagraw n yisfuyla
about-hardware = Arrum
.model = Tamudemt n warrum
.memory = Takatut
.processor = Asekkar
.graphics = Udlifen
.disk-capacity = Akettur n uḍebsi
about-device = Isem n yibenk
.desc = Isem-agi yettban-d deg ibenkan-nniḍen n uẓeṭṭa neɣ n Bluetooth
about = Ɣef
system = Anagraw akked imiḍanen
legacy-applications = Amṣada n yisnasen X11
startup-apps = Isnasen n usekker
.add = Rnu asnas
.user = Isnasen ttwasnekren mi ara tkecmeḍ
.none = Ulac isnasen n usekker yettwarnan
.remove-dialog-title = Kkes { $name }?
.remove-dialog-description = Kkes asnas-agi n usekker?
.add-startup-app = Rnu asnas n usekker
default-apps = Isnasen imezwar
.web-browser = Iminig n web
.file-manager = Amsefrak n ifuyla
.mail-client = Amsaɣ n yimayl
.music = Aẓawan
.video = Tavidyut
.photos = Tiwlafin
.calendar = Awitay
.terminal = Ixef
.other-associations = Tidukliwin-nniḍen
.text-editor = Amaẓrag n uḍris
.not-installed = Ur yettusbedd ara
applications = Isnasen
region = Tamnaḍt
install-additional-languages = Sbedd tutlayin nniḍen
add-language = Rnu tutlayt
.context = Rnu tutlayt
preferred-languages = Tutlayin timenyafin
.desc = Amizzwer n tutlayin yemmal-d anta tutlayt i yettwasqedcen i ugrudem n useqdac. Isenfal ad ddun deg tuqqna tuḍfirt.
formatting = Amsal
.dates = Izemzen
.time = Akud
.date-and-time = Azemz & akud
.numbers = Uṭṭunen
.measurement = Akat
.paper = Lkaɣeḍ
time-region = Tamnaḍt akked tutlayt
time-format = Amasal n uzemz akked usrag
.twenty-four = akud n 24 n yisragen
.show-seconds = Sken tasinin
.first = Ass amezwaru n dduṛt
.show-date = Sken azemz deg tappleṭ n wakud
.friday = Sem
.saturday = Sed
.sunday = Acer
.monday = Arim
time-zone = Tamnaḍt n wakud
.auto = Tamnaḍt n wakud tawurmant
.auto-info = Yesra imeẓla n wadig akked unekcum ɣer internet
time-date = Azemz akked wakud
.auto = Sbadu s wudem awurman
.auto-ntp = Azemz akked wakud ad ttwaleqqmen s wudem awurman ticki ara tesbaduḍ tamnaḍt n wakud
time = Akkud akked tutlayt
open-workspaces-view = Taskant n tallunin n umahil yeldin
open-application-library = Ldi tamkarḍit n yisnasen
switch-between-windows = Senfel gar isfuyla
switch-workspaces = Senfel tallunin n umahil
.horizontal = Aḍummu n kuẓ n yiḍudan ɣer zelmaḍ/yefus
.vertical = Aḍummu n kuẓ n yiḍudan ɣer usawen/ukessar
touchpad = Talwiḥt n unnal
.acceleration = Rmed tasɣiwelt n telwiḥt n unnal
.speed = Arurad n telwiḥt n unnal
click-behavior = Tiddin n usiti
.click-finger = Asiti wis sin s sin iḍudan akked d usiti alemmas s kraḍ n yiḍudan
.button-areas = Asiti wis sin deg teɣmert tayeffust n wadda akked usiti alemmas di tlemmast n wadda
mouse = Taɣerdayt
.speed = Arured n tɣerdayt
.acceleration = Rmed asɣiwel n tɣerdayt

View file

@ -2,6 +2,7 @@ app = COSMIC 설정
desktop = 데스크톱 desktop = 데스크톱
dbus-connection-error = DBus 연결에 실패했습니다 dbus-connection-error = DBus 연결에 실패했습니다
time-region = 지역 & 언어 time-region = 지역 & 언어
.desc = 사용자 지역 기반 날짜 형식, 시간, 숫자
panel-left = 좌측 panel-left = 좌측
connect = 연결 connect = 연결
super-key = Super 키 동작 super-key = Super 키 동작
@ -16,11 +17,13 @@ vrr = 가변 주사율
.auto = 자동 .auto = 자동
.disabled = 비활성화 .disabled = 비활성화
window-hint-accent = 활성 창 강조 색상 window-hint-accent = 활성 창 강조 색상
power = 전원 & 배터리 power = 전원 및 배터리
.desc = 전원 설정 관리
fit-to-screen = 화면 채우기 fit-to-screen = 화면 채우기
control-tint = 컨트롤 컴포넌트 색조 control-tint = 컨트롤 컴포넌트 색조
.desc = 표준 버튼, 검색 입력란, 텍스트 입력란 및 유사한 컴포넌트의 배경에 사용됩니다 .desc = 표준 버튼, 검색 입력란, 텍스트 입력란 및 유사한 컴포넌트의 배경에 사용됩니다
time-date = 날짜 및 시간 time-date = 날짜 및 시간
.desc = 시간대, 자동 시계 설정 및 시간 형식
.auto = 자동으로 설정 .auto = 자동으로 설정
.auto-ntp = 시간대가 설정되면 날짜 및 시간이 자동으로 업데이트됩니다 .auto-ntp = 시간대가 설정되면 날짜 및 시간이 자동으로 업데이트됩니다
save = 저장 save = 저장
@ -71,7 +74,7 @@ cable-unplugged = 케이블 분리됨
color-picker = 색상 추출기 color-picker = 색상 추출기
interface-font = 시스템 글꼴 interface-font = 시스템 글꼴
forget-dialog = 이 Wi-Fi 네트워크를 지우시겠습니까? forget-dialog = 이 Wi-Fi 네트워크를 지우시겠습니까?
.description = 나중에 이 Wi-Fi 네트워크를 다시 사용하려면 암호를 다시 입력해야 합니다. .description = 나중에 이 Wi-Fi 네트워크를 다시 사용하려면 비밀번호를 다시 입력해야 합니다.
remove = 제거 remove = 제거
default = 기본 default = 기본
zoom-out = 축소 zoom-out = 축소
@ -82,6 +85,7 @@ keyboard-typing-assist = 입력
.repeat-delay = 반복 지연 .repeat-delay = 반복 지연
edge-gravity = 플로팅 창이 인접한 가장자리에 붙음 edge-gravity = 플로팅 창이 인접한 가장자리에 붙음
bluetooth = 블루투스 bluetooth = 블루투스
.desc = 블루투스 장치 관리
.status = 블루투스 설정이 열려있는 동안 시스템이 { $aliases }(으)로 표시됩니다. .status = 블루투스 설정이 열려있는 동안 시스템이 { $aliases }(으)로 표시됩니다.
.connected = 연결됨 .connected = 연결됨
.connecting = 연결 중 .connecting = 연결 중
@ -92,7 +96,7 @@ bluetooth = 블루투스
.dbus-error = D-Bus 통신 중 오류가 발생했습니다: { $why } .dbus-error = D-Bus 통신 중 오류가 발생했습니다: { $why }
.disabled = 블루투스 서비스가 비활성화 되었습니다. .disabled = 블루투스 서비스가 비활성화 되었습니다.
.inactive = 블루투스 서비스가 시작되지 않았습니다. .inactive = 블루투스 서비스가 시작되지 않았습니다.
.unknown = 블루투스 서비스를 시작할 수 없습니다. BlueZ가 설치됐나요? .unknown = 블루투스 서비스를 시작할 수 없습니다. BlueZ가 설치됐는지 확인하세요.
amplification = 증폭 amplification = 증폭
.desc = 음량을 150%까지 올릴 수 있게 합니다. .desc = 음량을 150%까지 올릴 수 있게 합니다.
recent-colors = 최근 색상 recent-colors = 최근 색상
@ -120,6 +124,7 @@ accessibility = 접근성
.invert-colors = 색상 반전 .invert-colors = 색상 반전
.color-filters = 색상 필터 .color-filters = 색상 필터
firmware = 펌웨어 firmware = 펌웨어
.desc = 펌웨어 세부 정보
container-background = 컨테이너 배경 container-background = 컨테이너 배경
.desc-detail = 컨테이너 배경색은 탐색 사이드바, 사이드 드로어, 대화 상자 및 유사한 위젯에 사용됩니다. 기본적으로 컨테이너 배경색은 창 배경색에서 자동으로 파생됩니다. .desc-detail = 컨테이너 배경색은 탐색 사이드바, 사이드 드로어, 대화 상자 및 유사한 위젯에 사용됩니다. 기본적으로 컨테이너 배경색은 창 배경색에서 자동으로 파생됩니다.
.reset = 자동으로 재설정 .reset = 자동으로 재설정
@ -183,6 +188,7 @@ battery = 배터리
search-applets = 애플릿 검색... search-applets = 애플릿 검색...
export = 내보내기 export = 내보내기
window-management = 창 관리 window-management = 창 관리
.desc = Super 키 동작, 창 제어 및 추가적인 창 타일링 옵션
pinch-to-zoom = 핀치하여 확대/축소 pinch-to-zoom = 핀치하여 확대/축소
.desc = 확대/축소를 지원하는 앱에서 두 손가락을 사용하여 콘텐츠를 확대하거나 축소합니다 .desc = 확대/축소를 지원하는 앱에서 두 손가락을 사용하여 콘텐츠를 확대하거나 축소합니다
wifi = Wi-Fi wifi = Wi-Fi
@ -199,10 +205,13 @@ full-name = 성명
app-background = 창 배경 app-background = 창 배경
panel-right = 우측 panel-right = 우측
appearance = 외관 appearance = 외관
.desc = 강조 색상 및 꾸미기
mouse = 마우스 mouse = 마우스
.desc = 마우스 속도, 가속, 자연스러운 스크롤
.speed = 마우스 속도 .speed = 마우스 속도
.acceleration = 마우스 가속 활성화 .acceleration = 마우스 가속 활성화
dock = 독 dock = 독
.desc = 앱과 애플릿을 위한 추가적인 바
keyboard-sources = 입력 소스 keyboard-sources = 입력 소스
.desc = Super+Space 키 조합을 사용하여 입력 소스를 전환할 수 있습니다. 이는 키보드 단축키 설정에서 사용자 지정할 수 있습니다. .desc = Super+Space 키 조합을 사용하여 입력 소스를 전환할 수 있습니다. 이는 키보드 단축키 설정에서 사용자 지정할 수 있습니다.
.move-up = 위로 이동 .move-up = 위로 이동
@ -239,6 +248,7 @@ hearing = 청각
preferred-languages = 선호하는 언어 preferred-languages = 선호하는 언어
.desc = 언어 순서에 따라 사용자 인터페이스에 표시될 언어가 결정됩니다. 변경 사항은 다음 로그인 후에 적용됩니다. .desc = 언어 순서에 따라 사용자 인터페이스에 표시될 언어가 결정됩니다. 변경 사항은 다음 로그인 후에 적용됩니다.
display = 디스플레이 display = 디스플레이
.desc = 디스플레이 및 야간 조명 관리
.arrangement = 디스플레이 배치 .arrangement = 디스플레이 배치
.arrangement-desc = 디스플레이를 드래그하여 다시 배치하세요 .arrangement-desc = 디스플레이를 드래그하여 다시 배치하세요
.enable = 디스플레이 사용 .enable = 디스플레이 사용
@ -276,6 +286,7 @@ disconnect = 연결 해제
ok = 확인 ok = 확인
debug = 디버그 debug = 디버그
sound = 소리 sound = 소리
.desc = N/A
number = { $number } number = { $number }
shortcut-name = 단축키 이름 shortcut-name = 단축키 이름
style = 스타일 style = 스타일
@ -288,6 +299,7 @@ panel-applets = 구성
qr-code-unavailable = QR 코드를 사용할 수 없음 qr-code-unavailable = QR 코드를 사용할 수 없음
small = 작게 small = 작게
notifications = 알림 notifications = 알림
.desc = 방해 금지, 잠금 화면 알림 및 앱 별 설정
window-tiling = 창 타일링 window-tiling = 창 타일링
.horizontal = 가로 방향 설정 .horizontal = 가로 방향 설정
.vertical = 세로 방향 설정 .vertical = 세로 방향 설정
@ -303,6 +315,7 @@ copied-to-clipboard = 클립보드로 복사됨
bluetooth-confirm-pin = 블루투스 PIN 확인 bluetooth-confirm-pin = 블루투스 PIN 확인
.description = { $device }에 표시된 PIN 번호가 다음과 일치하는지 확인하세요 .description = { $device }에 표시된 PIN 번호가 다음과 일치하는지 확인하세요
startup-apps = 시작 앱 startup-apps = 시작 앱
.desc = 로그인 시 실행되는 앱을 설정합니다
.add = 앱 추가 .add = 앱 추가
.user = 로그인 시 실행되는 앱 .user = 로그인 시 실행되는 앱
.none = 추가된 시작 앱이 없습니다 .none = 추가된 시작 앱이 없습니다
@ -322,7 +335,9 @@ night-light = 야간 조명
.auto = 자동 (일몰부터 일출까지) .auto = 자동 (일몰부터 일출까지)
.desc = 따뜻한 색을 사용하여 블루라이트를 줄입니다 .desc = 따뜻한 색을 사용하여 블루라이트를 줄입니다
about = 정보 about = 정보
.desc = 장치 이름, 하드웨어 정보, 운영체제 기본
input-devices = 입력 장치 input-devices = 입력 장치
.desc = 입력 장치
custom-shortcuts = 사용자 정의 단축키 custom-shortcuts = 사용자 정의 단축키
.add = 단축키 추가 .add = 단축키 추가
.context = 사용자 정의 단축키 추가 .context = 사용자 정의 단축키 추가
@ -331,7 +346,7 @@ visible-networks = 사용 가능한 네트워크
applets = 애플릿 applets = 애플릿
terminate = 종료 terminate = 종료
window-hint-accent-toggle = 활성 창 강조에 테마 강조 색상 사용 window-hint-accent-toggle = 활성 창 강조에 테마 강조 색상 사용
type-to-search = 입력하여 검색… type-to-search = 입력하여 검색...
workspaces-behavior = 작업 공간 동작 workspaces-behavior = 작업 공간 동작
.dynamic = 동적 작업 공간 .dynamic = 동적 작업 공간
.dynamic-desc = 비어있는 작업 공간을 자동으로 제거합니다. .dynamic-desc = 비어있는 작업 공간을 자동으로 제거합니다.
@ -340,9 +355,10 @@ workspaces-behavior = 작업 공간 동작
wireguard-dialog = WireGuard 장치 추가 wireguard-dialog = WireGuard 장치 추가
.description = WireGuard 설정을 위해 사용할 장치 이름을 지정하세요. .description = WireGuard 설정을 위해 사용할 장치 이름을 지정하세요.
remove-connection-dialog = 연결 프로필을 제거할까요? remove-connection-dialog = 연결 프로필을 제거할까요?
.vpn-description = 나중에 이 네트워크를 다시 사용하려면 암호를 다시 입력해야 합니다. .vpn-description = 나중에 이 네트워크를 다시 사용하려면 비밀번호를 다시 입력해야 합니다.
.wired-description = 나중에 다시 사용하려면 프로필을 다시 생성해야 합니다. .wired-description = 나중에 다시 사용하려면 프로필을 다시 생성해야 합니다.
workspaces = 작업 공간 workspaces = 작업 공간
.desc = 작업 공간 방향 및 동작
password-confirm = 암호 확인 password-confirm = 암호 확인
move-windows = 창 이동 move-windows = 창 이동
.direction = .direction =
@ -407,6 +423,7 @@ slow = 느리게
network-name = 네트워크 이름 network-name = 네트워크 이름
large = 크게 large = 크게
panel = 패널 panel = 패널
.desc = 메뉴와 애플릿을 위한 기본 시스템 바
confirm = 확인 confirm = 확인
auth-dialog = 인증 필요 auth-dialog = 인증 필요
.vpn-description = VPN 서비스를 위해 사용자 이름과 암호를 입력하세요. .vpn-description = VPN 서비스를 위해 사용자 이름과 암호를 입력하세요.
@ -428,6 +445,7 @@ add-applet = 애플릿 추가
show-extended-input-sources = 확장 입력 소스 표시 show-extended-input-sources = 확장 입력 소스 표시
mode-and-colors = 모드 및 색상 mode-and-colors = 모드 및 색상
users = 사용자 users = 사용자
.desc = 인증 및 사용자 계정
.admin = 관리자 .admin = 관리자
.standard = 기본 .standard = 기본
.profile-add = 프로필 이미지 선택 .profile-add = 프로필 이미지 선택
@ -456,6 +474,7 @@ auto = 자동
end-segment = 끝 영역 end-segment = 끝 영역
bluetooth-adapters = 블루투스 어댑터 bluetooth-adapters = 블루투스 어댑터
legacy-applications = X11 앱 호환성 legacy-applications = X11 앱 호환성
.desc = X11 창 시스템 앱 스케일링 및 전역 단축키
time-format = 날짜 & 시간 형식 time-format = 날짜 & 시간 형식
.twenty-four = 24시간 형식 .twenty-four = 24시간 형식
.show-seconds = 초 표시 .show-seconds = 초 표시
@ -487,6 +506,7 @@ window-management-appearance = 창 관리
.gaps = 타일링된 창 간 간격 .gaps = 타일링된 창 간 간격
migrate-workspace-prev = 작업 공간을 이전 디스플레이로 이동 migrate-workspace-prev = 작업 공간을 이전 디스플레이로 이동
keyboard = 키보드 keyboard = 키보드
.desc = 입력 소스, 전환, 특수 문자 입력 및 단축키 설정
legacy-app-global-shortcuts = X11 앱의 전역 단축키 legacy-app-global-shortcuts = X11 앱의 전역 단축키
.desc = 전역 단축키를 사용하면 눌러서 말하기 또는 눌러서 음소거와 같은 기능을 위해, 특정 앱에서 수행된 키 입력 및 마우스 버튼 이벤트를 다른 앱이 인식할 수 있습니다. 기본적으로 X11 앱에서는 다른 앱이 민감한 정보가 포함된 키보드 및 마우스 이벤트를 감시하지 못하도록 전역 단축키 기능이 비활성화되어 있습니다. .desc = 전역 단축키를 사용하면 눌러서 말하기 또는 눌러서 음소거와 같은 기능을 위해, 특정 앱에서 수행된 키 입력 및 마우스 버튼 이벤트를 다른 앱이 인식할 수 있습니다. 기본적으로 X11 앱에서는 다른 앱이 민감한 정보가 포함된 키보드 및 마우스 이벤트를 감시하지 못하도록 전역 단축키 기능이 비활성화되어 있습니다.
.none = 키 없음 .none = 키 없음
@ -511,6 +531,7 @@ add-network = 네트워크 추가
.profile = 프로필 추가 .profile = 프로필 추가
touchpad = 터치패드 touchpad = 터치패드
.acceleration = 터치패드 가속 활성화 .acceleration = 터치패드 가속 활성화
.desc = 터치패드 속도, 클릭 옵션, 제스처
.speed = 터치패드 속도 .speed = 터치패드 속도
command = 명령 command = 명령
gestures = 제스처 gestures = 제스처
@ -526,6 +547,7 @@ panel-bottom = 하단
share = 네트워크 공유 share = 네트워크 공유
add = 추가 add = 추가
time = 시간 & 언어 time = 시간 & 언어
.desc = N/A
fill = 채우기 fill = 채우기
custom = 사용자 정의 custom = 사용자 정의
bluetooth-paired = 이전에 연결된 장치 bluetooth-paired = 이전에 연결된 장치
@ -638,11 +660,12 @@ vpn-error = VPN 에러
.with-password = .with-password =
nmcli를 통한 VPN { $field -> nmcli를 통한 VPN { $field ->
*[username] 사용자 이름 *[username] 사용자 이름
[password] 암호 [password] 비밀번호
[password-flags] 암호 플래그 [password-flags] 비밀번호 플래그
} 설정 실패 } 설정 실패
wallpaper = 배경화면 wallpaper = 배경화면
.change = 이미지 변경 주기 .change = 이미지 변경 주기
.desc = 배경화면 이미지, 색상 및 슬라이드쇼 옵션
.fit = 배경화면 맞춤 방식 .fit = 배경화면 맞춤 방식
.folder-dialog = 배경화면 폴더 선택 .folder-dialog = 배경화면 폴더 선택
.image-dialog = 배경화면 이미지 선택 .image-dialog = 배경화면 이미지 선택
@ -669,6 +692,7 @@ click-behavior = 클릭 동작
.click-finger = 두 손가락으로 보조 클릭, 세 손가락으로 중앙 클릭 .click-finger = 두 손가락으로 보조 클릭, 세 손가락으로 중앙 클릭
.button-areas = 오른쪽 아래 모서리에서 보조 클릭, 하단 중앙에서 중앙 클릭 .button-areas = 오른쪽 아래 모서리에서 보조 클릭, 하단 중앙에서 중앙 클릭
default-apps = 기본 앱 default-apps = 기본 앱
.desc = 기본 웹 브라우저, 메일 클라이언트, 파일 관리자 및 기타 앱을 설정합니다.
.web-browser = 웹 브라우저 .web-browser = 웹 브라우저
.file-manager = 파일 관리자 .file-manager = 파일 관리자
.mail-client = 메일 클라이언트 .mail-client = 메일 클라이언트
@ -679,7 +703,6 @@ default-apps = 기본 앱
.terminal = 터미널 .terminal = 터미널
.other-associations = 기타 연결 프로그램 .other-associations = 기타 연결 프로그램
.text-editor = 텍스트 편집기 .text-editor = 텍스트 편집기
.not-installed = 설치되지 않음
power-saving = 절전 옵션 power-saving = 절전 옵션
.turn-off-screen-after = 다음 시간 후 화면 끄기 .turn-off-screen-after = 다음 시간 후 화면 끄기
.auto-suspend = 자동 절전 모드 .auto-suspend = 자동 절전 모드
@ -696,71 +719,3 @@ keyboard-special-char = 특수 문자 입력
.compose = 조합 키 .compose = 조합 키
.compose-desc = 조합 키를 사용하면 매우 다양한 특수 문자를 입력할 수 있습니다. 조합 키를 먼저 누른 다음, 정해진 순서대로 문자들을 입력하세요. 예를 들어, 조합 키를 누른 후 C와 o를 차례로 누르면 ©가 입력되고, a와 '를 누르면 á가 입력됩니다. .compose-desc = 조합 키를 사용하면 매우 다양한 특수 문자를 입력할 수 있습니다. 조합 키를 먼저 누른 다음, 정해진 순서대로 문자들을 입력하세요. 예를 들어, 조합 키를 누른 후 C와 o를 차례로 누르면 ©가 입력되고, a와 '를 누르면 á가 입력됩니다.
.caps = Caps Lock 키 .caps = Caps Lock 키
xdg-entry-wired = 유선
xdg-entry-mouse-keywords = COSMIC;마우스;가속;스크롤;
xdg-entry-bluetooth-comment = 블루투스 장치 관리
xdg-entry-notifications-keywords = COSMIC;알림;잠금;
xdg-entry-default-apps-comment = 기본 웹 브라우저와 메일 클라이언트, 파일 탐색기 및 다른 앱
xdg-entry-keyboard-comment = 입력 소스, 전환, 특수 문자 모음, 단축키
xdg-entry-wired-keywords = COSMIC;유선;LAN;네트워크;연결;
xdg-entry-power = 전원 & 배터리
xdg-entry-appearance-keywords = COSMIC;강조;색상;아이콘;글꼴;테마
xdg-entry-mouse = 마우스
xdg-entry-dock-keywords = COSMIC;독;패널;애플릿
xdg-entry-mouse-comment = 마우스 속도와 가속 및 자연스러운 스크롤
xdg-entry-panel-keywords = COSMIC;패널;애플릿
xdg-entry-window-management = 창 관리
xdg-entry-a11y = 접근성
xdg-entry-desktop-keywords = COSMIC;데스크톱;
xdg-entry-x11-applications-keywords = COSMIC;X11;앱;게임;호환성;
xdg-entry-displays-comment = 표시 구성 관리 설정
xdg-entry-default-apps = 기본 앱
xdg-entry-wireless-keywords = COSMIC;WiFi;Wi-Fi;네트워크;연결;
xdg-entry-applications-comment = 기본 앱과 시작 앱 및 X11 앱 호환성 설정
xdg-entry-about-keywords = COSMIC;정보
xdg-entry-panel = 패널
xdg-entry-notifications = 알림
xdg-entry-a11y-keywords = COSMIC;접근성;접근성;스크린;리더;돋보기;대비;색상;
xdg-entry-wireless-comment = Wi-Fi 연결 및 연결 프로필
xdg-entry-desktop = 데스크톱
xdg-entry-date-time-keywords = COSMIC;시간;대;
xdg-entry-desktop-comment = 바탕화면과 외관, 패널, 독, 창 관리 및 작업 공간 설정
xdg-entry-wallpaper = 배경화면
xdg-entry-keyboard = 키보드
xdg-entry-a11y-comment = 스크린 리더, 돋보기, 고대비, 색상 필터
xdg-entry-displays = 표시
xdg-entry-network = 네트워크 & 무선
xdg-entry-date-time = 날짜 & 시간
xdg-entry-input-comment = 키보드와 마우스 설정
xdg-entry-bluetooth-keywords = COSMIC;블루투스;
xdg-entry-dock-comment = 앱과 애플릿을 위한 선택적 바
xdg-entry-network-keywords = COSMIC;네트워크;무선;WiFi;VPN;
xdg-entry-dock = 독
xdg-entry-wireless = Wi-Fi
xdg-entry-workspaces-keywords = COSMIC;작업 공간;방향;개요;모니터;
xdg-entry-users-keywords = COSMIC;사용자;계정;
xdg-entry-about-comment = 장치 이름, 하드웨어 정보, 운영체제 기본값
xdg-entry-vpn-keywords = COSMIC;VPN;네트워크;연결;OpenVPN;OpenConnect;
xdg-entry-appearance-comment = 강조 색상과 테마
xdg-entry-input-keywords = COSMIC;입력;키보드;마우스;마우스;
xdg-entry-comment = COSMIC 데스크톱을 위한 설정 앱
xdg-entry-notifications-comment = 방해 금지와 잠금 화면 알림 및 애플리케이션별 설정
xdg-entry-applications = 앱
xdg-entry-power-keywords = COSMIC;전원;배터리
xdg-entry-default-apps-keywords = COSMIC;기본;앱
xdg-entry-keywords = COSMIC;설정;
xdg-entry-about = 정보
xdg-entry-input = 입력 장치
xdg-entry-applications-keywords = COSMIC;기본;앱;시작;X11;호환성
xdg-entry-keyboard-keywords = COSMIC;키보드;입력;소스;단축키;
xdg-entry-vpn-comment = VPN 연결 및 연결 프로필
xdg-entry-appearance = 외관
xdg-entry-window-management-keywords = COSMIC;창;관리;타일링;Super;키;
xdg-entry-workspaces-comment = 작업 공간 방향과 개요 및 다중 모니터 동작
xdg-entry-network-comment = 네트워크 연결 관리
xdg-entry-power-comment = 전원 모드 및 절전 옵션
xdg-entry-displays-keywords = COSMIC;표시;
xdg-entry-workspaces = 작업 공간
xdg-entry-date-time-comment = 시간대와 자동 시계 설정 및 시간 형식
xdg-entry-x11-applications = X11 앱 호환성
xdg-entry-wired-comment = 유선 연결 및 연결 프로필

View file

@ -813,4 +813,3 @@ xdg-entry-workspaces = Darbo sritys
xdg-entry-date-time-comment = Laiko juosta, automatiniai laikrodžio nustatymai ir laiko formatavimas xdg-entry-date-time-comment = Laiko juosta, automatiniai laikrodžio nustatymai ir laiko formatavimas
xdg-entry-x11-applications = X11 Aplikacijų Suderinamumas xdg-entry-x11-applications = X11 Aplikacijų Suderinamumas
xdg-entry-wired-comment = Laidiniai ryšiai ir ryšių profiliai xdg-entry-wired-comment = Laidiniai ryšiai ir ryšių profiliai
no-search-results = Joks tinklas neatitinka jūsų paieškos.

View file

@ -70,7 +70,7 @@ vpn-error = Erro de VPN
[password] a senha [password] a senha
[password-flags] os sinalizadores da senha [password-flags] os sinalizadores da senha
} da VPN com nmcli } da VPN com nmcli
wired = Rede cabeada wired = Rede Cabeada
.adapter = Adaptador de rede cabeada { $id } .adapter = Adaptador de rede cabeada { $id }
.connections = Conexões de rede cabeada .connections = Conexões de rede cabeada
.devices = Dispositivos de rede cabeada .devices = Dispositivos de rede cabeada
@ -83,8 +83,8 @@ wireguard-dialog = Adicionar Dispositivo WireGuard
## Networking: Online Accounts ## Networking: Online Accounts
online-accounts = Contas online online-accounts = Contas Online
.desc = Adicionar contas, IMAP e SMTP, sessões corporativas .desc = Adicionar contas, IMAP e SMTP, logins empresariais
# Bluetooth # Bluetooth
@ -304,7 +304,7 @@ dock = Dock
window-management = Gerenciamento de janelas window-management = Gerenciamento de janelas
super-key = Ação da tecla Super (Windows) super-key = Ação da tecla Super (Windows)
.launcher = Abrir o lançador .launcher = Abrir o lançador
.workspaces = Abrir a visão geral dos espaços de trabalho .workspaces = Abrir a visão geral das áreas de trabalho
.applications = Abrir o menu de aplicativos .applications = Abrir o menu de aplicativos
.disable = Desabilitar .disable = Desabilitar
edge-gravity = Janelas flutuantes gravitam em direção às bordas próximas edge-gravity = Janelas flutuantes gravitam em direção às bordas próximas
@ -319,23 +319,23 @@ focus-navigation = Navegação de foco
## Desktop: Workspaces ## Desktop: Workspaces
workspaces = Espaços de trabalho workspaces = Áreas de trabalho
workspaces-behavior = Comportamento dos espaços de trabalho workspaces-behavior = Comportamento das áreas de trabalho
.dynamic = Espaços de trabalho dinâmicos .dynamic = Áreas de trabalho dinâmicas
.dynamic-desc = Remove automaticamente espaços de trabalho vazios. .dynamic-desc = Remove automaticamente áreas de trabalho vazias.
.fixed = Número fixo de espaços de trabalho .fixed = Número fixo de áreas de trabalho
.fixed-desc = Adiciona ou remove espaços de trabalho na visão geral. .fixed-desc = Adicionar ou remover áreas de trabalho na visão geral.
workspaces-multi-behavior = Comportamento de vários monitores workspaces-multi-behavior = Comportamento de vários monitores
.span = Espaços de trabalho se expandem a todas as telas .span = Áreas de trabalho se expandem a todas as telas
.separate = Telas têm espaços de trabalho separados .separate = Telas têm áreas de trabalho separadas
workspaces-overview-thumbnails = Miniaturas da visão geral dos espaços de trabalho workspaces-overview-thumbnails = Miniaturas da visão geral das áreas de trabalho
.show-number = Mostrar o número do espaço de trabalho .show-number = Mostrar o número da área de trabalho
.show-name = Mostrar o nome do espaço de trabalho .show-name = Mostrar o nome da área de trabalho
workspaces-orientation = Orientação dos espaços de trabalho workspaces-orientation = Orientação das áreas de trabalho
.vertical = Vertical .vertical = Vertical
.horizontal = Horizontal .horizontal = Horizontal
hot-corner = Canto ativo hot-corner = Canto ativo
.top-left-corner = Habilitar o canto superior esquerdo para exibir os espaços de trabalho .top-left-corner = Habilitar o canto superior esquerdo para exibir as áreas de trabalho
## Displays ## Displays
@ -479,7 +479,7 @@ fast = Rápido
short = Curto short = Curto
long = Longo long = Longo
keyboard = Teclado keyboard = Teclado
keyboard-sources = Fontes de entrada keyboard-sources = Fontes de Entrada
.desc = As fontes de entrada podem ser alternadas usando a combinação de teclas Super+Espaço. Isso pode ser personalizado nas configurações de atalho de teclado. .desc = As fontes de entrada podem ser alternadas usando a combinação de teclas Super+Espaço. Isso pode ser personalizado nas configurações de atalho de teclado.
.move-up = Mover para cima .move-up = Mover para cima
.move-down = Mover para baixo .move-down = Mover para baixo
@ -515,10 +515,10 @@ custom = Personalizado
debug = Debug debug = Debug
disabled = Desativado disabled = Desativado
input-source-switch = Alterar fonte de entrada de idioma do teclado input-source-switch = Alterar fonte de entrada de idioma do teclado
migrate-workspace-prev = Migrar o espaço de trabalho para a saída anterior migrate-workspace-prev = Migrar a área de trabalho para a saída anterior
migrate-workspace-next = Migrar o espaço de trabalho para a próxima saída migrate-workspace-next = Migrar a área de trabalho para a próxima saída
migrate-workspace = migrate-workspace =
Migrar o espaço de trabalho para a saída { $direction -> Migrar a área de trabalho para a saída { $direction ->
*[down] abaixo *[down] abaixo
[left] à esquerda [left] à esquerda
[right] à direita [right] à direita
@ -539,9 +539,9 @@ modified = { $count } modificado(s)
nav-shortcuts = Navegação nav-shortcuts = Navegação
.prev-output = Focar a saída anterior .prev-output = Focar a saída anterior
.next-output = Focar a próxima saída .next-output = Focar a próxima saída
.last-workspace = Focar o último espaço de trabalho .last-workspace = Focar a última área de trabalho
.prev-workspace = Focar o espaço de trabalho anterior .prev-workspace = Focar a área de trabalho anterior
.next-workspace = Focar o próximo espaço de trabalho .next-workspace = Focar a próxima área de trabalho
.focus = .focus =
Focar a janela { $direction -> Focar a janela { $direction ->
*[down] abaixo *[down] abaixo
@ -558,7 +558,7 @@ nav-shortcuts = Navegação
[right] à direita [right] à direita
[up] acima [up] acima
} }
.workspace = Alternar para o espaço de trabalho { $num } .workspace = Alternar para a área de trabalho { $num }
manage-windows = Gerenciamento de Janelas manage-windows = Gerenciamento de Janelas
.close = Fechar janela .close = Fechar janela
.maximize = Maximizar janela .maximize = Maximizar janela
@ -583,20 +583,20 @@ move-windows = Mover janelas
[up] acima [up] acima
} }
.workspace = .workspace =
Mover janela um espaço de trabalho { $direction -> Mover janela uma área de trabalho { $direction ->
*[below] abaixo *[below] abaixo
[left] à esquerda [left] à esquerda
[right] à direita [right] à direita
[above] acima [above] acima
} }
.workspace-num = Mover janela para o espaço de trabalho { $num } .workspace-num = Mover janela para a área de trabalho { $num }
.prev-workspace = Mover janela para o espaço de trabalho anterior .prev-workspace = Mover janela para a área de trabalho anterior
.next-workspace = Mover janela para o próximo espaço de trabalho .next-workspace = Mover janela para a próxima área de trabalho
.last-workspace = Mover janela para o último espaço de trabalho .last-workspace = Mover janela para a última área de trabalho
.next-display = Mover janela para a próxima tela .next-display = Mover janela para a próxima tela
.prev-display = Mover janela para a tela anterior .prev-display = Mover janela para a tela anterior
.send-to-prev-workspace = Mover janela para o espaço de trabalho anterior .send-to-prev-workspace = Mover janela para a área de trabalho anterior
.send-to-next-workspace = Mover janela para o próximo espaço de trabalho .send-to-next-workspace = Mover janela para a próxima área de trabalho
system-shortcut = Sistema system-shortcut = Sistema
.app-library = Abrir a biblioteca de aplicativos .app-library = Abrir a biblioteca de aplicativos
.brightness-down = Reduzir o brilho da tela .brightness-down = Reduzir o brilho da tela
@ -623,7 +623,7 @@ system-shortcut = Sistema
.web-browser = Abrir um navegador web .web-browser = Abrir um navegador web
.window-switcher = Alternar entre as janelas abertas .window-switcher = Alternar entre as janelas abertas
.window-switcher-previous = Alternar entre as janelas abertas na ordem inversa .window-switcher-previous = Alternar entre as janelas abertas na ordem inversa
.workspace-overview = Abrir a visão geral dos espaços de trabalho .workspace-overview = Abrir a visão geral das áreas de trabalho
window-tiling = Janelas lado a lado window-tiling = Janelas lado a lado
.horizontal = Definir orientação horizontal .horizontal = Definir orientação horizontal
.vertical = Definir orientação vertical .vertical = Definir orientação vertical
@ -664,12 +664,12 @@ gestures = Gestos
.four-finger-right = Deslizar quatro dedos para a direita .four-finger-right = Deslizar quatro dedos para a direita
.four-finger-up = Deslizar quatro dedos para cima .four-finger-up = Deslizar quatro dedos para cima
.three-finger-any = Deslizar três dedos para qualquer direção .three-finger-any = Deslizar três dedos para qualquer direção
switch-workspaces = Alternar entre espaços de trabalho switch-workspaces = Alternar entre áreas de trabalho
.horizontal = Deslizar quatro dedos para a direita ou esquerda .horizontal = Deslizar quatro dedos para a direita ou esquerda
.vertical = Deslizar quatro dedos para cima ou para baixo .vertical = Deslizar quatro dedos para cima ou para baixo
switch-between-windows = Alternar entre janelas switch-between-windows = Alternar entre janelas
open-application-library = Abrir o menu de aplicativos open-application-library = Abrir o menu de aplicativos
open-workspaces-view = Abrir a visão geral dos espaços de trabalho open-workspaces-view = Abrir a visão geral das áreas de trabalho
## Time & Language ## Time & Language
@ -697,8 +697,8 @@ formatting = Formatação
.numbers = Números .numbers = Números
.measurement = Medidas .measurement = Medidas
.paper = Papel .paper = Papel
preferred-languages = Idiomas preferidos preferred-languages = Idiomas Preferidos
.desc = A ordem dos idiomas determina qual idioma será usado para a tradução do desktop. As alterações entram em vigor no próximo início de sessão. .desc = A ordem dos idiomas determina qual idioma será usado para a tradução do desktop. As alterações entram em vigor no próximo login.
add-language = Adicionar idioma add-language = Adicionar idioma
.context = Adicionar Idioma .context = Adicionar Idioma
install-additional-languages = Instalar idiomas adicionais install-additional-languages = Instalar idiomas adicionais
@ -727,7 +727,7 @@ default-apps = Aplicativos Padrão
startup-apps = Aplicativos de inicialização startup-apps = Aplicativos de inicialização
.add = Adicionar aplicativo .add = Adicionar aplicativo
.user = Aplicativos que serão iniciados ao iniciar sessão .user = Aplicativos que serão iniciados ao fazer login no sistema
.none = Não há aplicativos de inicialização adicionados .none = Não há aplicativos de inicialização adicionados
.remove-dialog-title = Remover { $name }? .remove-dialog-title = Remover { $name }?
.remove-dialog-description = Remover esse aplicativo de inicialização? .remove-dialog-description = Remover esse aplicativo de inicialização?
@ -797,13 +797,13 @@ invalid-username = Nome de usuário inválido
password-mismatch = A senha e a confirmação devem ser iguais password-mismatch = A senha e a confirmação devem ser iguais
save = Salvar save = Salvar
add-another-keybinding = Adicionar outra tecla de atalho add-another-keybinding = Adicionar outra tecla de atalho
qr-code-unavailable = Código QR não disponível qr-code-unavailable = QR code inválido
network-name = Nome da rede network-name = Nome da rede
share = Compartilhar rede share = Compartilhar rede
scan-to-connect-description = Leia o código QR para se conectar a esta rede. scan-to-connect-description = Escaneie o QR code para se conectar a esta rede.
place-here = Colocar miniaplicativos aqui place-here = Colocar miniaplicativos aqui
sound-device-port-unplugged = Desplugado sound-device-port-unplugged = Desplugado
sound-hd-audio = Áudio de alta definição sound-hd-audio = Áudio HD
sound-usb-audio = Áudio USB sound-usb-audio = Áudio USB
sound-device-profiles = Perfis de dispositivo sound-device-profiles = Perfis de dispositivo
shadows-floating = Janelas flutuantes shadows-floating = Janelas flutuantes
@ -812,21 +812,21 @@ shadows-tiling = Janelas lado a lado
.clip = Corresponder com os cantos do sistema .clip = Corresponder com os cantos do sistema
.shadow = Aplicar sombras .shadow = Aplicar sombras
shadow-and-corners = Cantos e sombras de janelas shadow-and-corners = Cantos e sombras de janelas
workspaces-overview = Visão geral dos espaços de trabalho workspaces-overview = Visão geral das áreas de trabalho
.action-on-typing = Ação ao digitar .action-on-typing = Ação ao digitar
.none = Nenhuma .none = Nenhuma
.launcher = Abrir lançador .launcher = Abrir lançador
.applications = Abrir aplicativos .applications = Abrir aplicativos
xdg-entry-touchpad = Touchpad xdg-entry-touchpad = Touchpad
xdg-entry-wired = Rede cabeada xdg-entry-wired = Rede Cabeada
xdg-entry-startup-apps-comment = Configurar aplicativos que serão executados ao iniciar sessão xdg-entry-startup-apps-comment = Configurar aplicativos que serão executados na inicialização do sistema
xdg-entry-region-language = Região e Idioma xdg-entry-region-language = Região e Idioma
xdg-entry-mouse-keywords = COSMIC;Mouse;Aceleração;Rolagem; xdg-entry-mouse-keywords = COSMIC;Mouse;Aceleração;Rolagem;
xdg-entry-bluetooth-comment = Gerenciar dispositivos Bluetooth xdg-entry-bluetooth-comment = Gerenciar dispositivos Bluetooth
xdg-entry-notifications-keywords = COSMIC;Notificação;Bloqueio; xdg-entry-notifications-keywords = COSMIC;Notificação;Bloqueio;
xdg-entry-startup-apps-keywords = COSMIC;Iniciar;Inicialização;Aplicativo; xdg-entry-startup-apps-keywords = COSMIC;Iniciar;Inicialização;Aplicativo;
xdg-entry-default-apps-comment = Navegador padrão, cliente de email, navegador de arquivos e outros aplicativos xdg-entry-default-apps-comment = Navegador padrão, cliente de email, navegador de arquivos e outros aplicativos
xdg-entry-keyboard-comment = Fontes de entrada, alternância, entrada de caracteres especiais, atalhos xdg-entry-keyboard-comment = Dispositivos de entrada, alternância, entrada de caracteres especiais, atalhos
xdg-entry-wired-keywords = COSMIC;Wired;Cabeada;LAN;Rede;Conexão; xdg-entry-wired-keywords = COSMIC;Wired;Cabeada;LAN;Rede;Conexão;
xdg-entry-power = Energia e bateria xdg-entry-power = Energia e bateria
xdg-entry-appearance-keywords = COSMIC;Destaque;Accent;Cor;Ícone;Fonte;Tema xdg-entry-appearance-keywords = COSMIC;Destaque;Accent;Cor;Ícone;Fonte;Tema
@ -855,7 +855,7 @@ xdg-entry-a11y-keywords = COSMIC;Acessibilidade;A11y;Tela;Leitor;Lupa;Ampliador;
xdg-entry-wireless-comment = Conexões Wi-Fi e perfis de conexão xdg-entry-wireless-comment = Conexões Wi-Fi e perfis de conexão
xdg-entry-desktop = Área de trabalho xdg-entry-desktop = Área de trabalho
xdg-entry-date-time-keywords = COSMIC;Hora;Fuso; xdg-entry-date-time-keywords = COSMIC;Hora;Fuso;
xdg-entry-desktop-comment = Plano de fundo, aparência, painel, dock, gerenciamento de janelas e configurações de espaços de trabalho xdg-entry-desktop-comment = Plano de fundo, aparência, painel, dock, gerenciamento de janelas e configurações de áreas de trabalho
xdg-entry-wallpaper = Plano de fundo xdg-entry-wallpaper = Plano de fundo
xdg-entry-keyboard = Teclado xdg-entry-keyboard = Teclado
xdg-entry-a11y-comment = Leitor de tela, ampliador de tela, alto contraste e filtros de cor xdg-entry-a11y-comment = Leitor de tela, ampliador de tela, alto contraste e filtros de cor
@ -871,7 +871,7 @@ xdg-entry-wallpaper-comment = Imagens do plano de fundo, cores e opções de tra
xdg-entry-dock = Dock xdg-entry-dock = Dock
xdg-entry-startup-apps = Aplicativos de Inicialização xdg-entry-startup-apps = Aplicativos de Inicialização
xdg-entry-wireless = Wi-Fi xdg-entry-wireless = Wi-Fi
xdg-entry-workspaces-keywords = COSMIC;Espaço;Trabalho;Orientação;Visão;Geral;Monitor;Tela; xdg-entry-workspaces-keywords = COSMIC;Área;Espaço;Trabalho;Orientação;Visão;Geral;Monitor;Tela;
xdg-entry-system-comment = Informações do sistema, contas e atualizações de firmware xdg-entry-system-comment = Informações do sistema, contas e atualizações de firmware
xdg-entry-x11-applications-comment = Escalonamento de aplicativos com sistema de janelas X11, tela primária e atalhos globais xdg-entry-x11-applications-comment = Escalonamento de aplicativos com sistema de janelas X11, tela primária e atalhos globais
xdg-entry-region-language-comment = Formatação de datas, horas e números baseados em sua região xdg-entry-region-language-comment = Formatação de datas, horas e números baseados em sua região
@ -898,14 +898,14 @@ xdg-entry-touchpad-comment = Velocidade do touchpad, opções do clique e gestos
xdg-entry-keyboard-keywords = COSMIC;Teclado;Entrada;Dispositivos;Atalhos; xdg-entry-keyboard-keywords = COSMIC;Teclado;Entrada;Dispositivos;Atalhos;
xdg-entry-vpn-comment = Conexões VPN e perfis de conexão xdg-entry-vpn-comment = Conexões VPN e perfis de conexão
xdg-entry-appearance = Aparência xdg-entry-appearance = Aparência
xdg-entry-window-management-keywords = COSMIC;Janela;Gerenciamento;Tiling;Lado;Super;Tecla; xdg-entry-window-management-keywords = COSMIC;Janela;Gerenciamento;Tiling;Lado a lado;Super;Key;
xdg-entry-workspaces-comment = Orientação dos espaços de trabalho, visão geral e comportamento com monitores múltiplos xdg-entry-workspaces-comment = Orientação da área de trabalho, visão geral e comportamento com monitores múltiplos
xdg-entry-network-comment = Gerenciar conexões de rede xdg-entry-network-comment = Gerenciar conexões de rede
xdg-entry-panel-comment = Barra de sistema primária para menus e miniaplicativos xdg-entry-panel-comment = Barra de sistema primária para menus e miniaplicativos
xdg-entry-sound = Som xdg-entry-sound = Som
xdg-entry-power-comment = Modos de energia e opções de economia de energia xdg-entry-power-comment = Modos de energia e opções de economia de energia
xdg-entry-displays-keywords = COSMIC;Tela;Monitor; xdg-entry-displays-keywords = COSMIC;Tela;Monitor;
xdg-entry-workspaces = Espaços de trabalho xdg-entry-workspaces = Áreas de Trabalho
xdg-entry-date-time-comment = Fuso horário, configurações de relógio e formatação de hora xdg-entry-date-time-comment = Fuso horário, configurações de relógio e formatação de hora
xdg-entry-x11-applications = Compatibilidade com aplicativos X11 xdg-entry-x11-applications = Compatibilidade com aplicativos X11
xdg-entry-window-management-comment = Ação da tecla Super, opções de controle de janela e opções de janelas lado a lado (tiling) xdg-entry-window-management-comment = Ação da tecla Super, opções de controle de janela e opções de janelas lado a lado (tiling)

View file

@ -54,7 +54,7 @@ xdg-entry-wired = Rede Cabeada
xdg-entry-wired-comment = Conexões de rede cabeada e perfis de conexão xdg-entry-wired-comment = Conexões de rede cabeada e perfis de conexão
xdg-entry-wireless-comment = Conexões de rede sem fio e perfis de conexão xdg-entry-wireless-comment = Conexões de rede sem fio e perfis de conexão
xdg-entry-workspaces = Áreas de Trabalho xdg-entry-workspaces = Áreas de Trabalho
xdg-entry-workspaces-comment = Orientação das áreas de trabalho, visão geral e comportamento com vários monitores xdg-entry-workspaces-comment = Orientação e comportamento da área de trabalho
xdg-entry-x11-applications = Compatibilidade com aplicativos X11. xdg-entry-x11-applications = Compatibilidade com aplicativos X11.
xdg-entry-x11-applications-comment = Dimensionamento de aplicativos com sistema de janelas X11 e atalhos globais xdg-entry-x11-applications-comment = Dimensionamento de aplicativos com sistema de janelas X11 e atalhos globais
@ -213,10 +213,10 @@ dock = Doca
window-management = Gestão de Janelas window-management = Gestão de Janelas
.desc = Ação da tecla Super, opções de controlo de janelas, e opções adicionais de alinhamento de janelas. .desc = Ação da tecla Super, opções de controlo de janelas, e opções adicionais de alinhamento de janelas.
super-key = Ação da tecla Super super-key = Tecla Super
.launcher = Abrir lançador .launcher = Abrir Lançador
.workspaces = Abrir áreas de trabalho .workspaces = Abrir Áreas de trabalho
.applications = Abrir aplicações .applications = Abrir Aplicações
.disable = Desativar .disable = Desativar
window-controls = Controlos de janela window-controls = Controlos de janela
.maximize = Mostrar o botão de maximizar .maximize = Mostrar o botão de maximizar
@ -226,22 +226,23 @@ window-controls = Controlos de janela
## Desktop: Workspaces ## Desktop: Workspaces
workspaces = Áreas de trabalho workspaces = Áreas de trabalho
workspaces-behavior = Comportamento das áreas de trabalho .desc = Definir número, comportamento e posição da área de trabalho.
workspaces-behavior = Comportamento da área de trabalho
.dynamic = Áreas de trabalho dinâmicas .dynamic = Áreas de trabalho dinâmicas
.dynamic-desc = Remove automaticamente áreas de trabalho vazias. .dynamic-desc = Remove automaticamente áreas de trabalho vazias.
.fixed = Número fixo de áreas de trabalho .fixed = Número fixo de áreas de trabalho
.fixed-desc = Adiciona ou remove áreas de trabalho na visão geral. .fixed-desc = Adiciona ou remove áreas de trabalho na visão geral.
workspaces-multi-behavior = Comportamento de vários monitores workspaces-multi-behavior = Comportamento de vários monitores
.span = Áreas de trabalho se expandem a todos os ecrãs .span = Áreas de trabalho expandem os ecrãs
.separate = Ecrãs têm áreas de trabalho separadas .separate = Ecrãs têm áreas de trabalho separadas
workspaces-overview-thumbnails = Miniaturas da visão geral das áreas de trabalho workspaces-overview-thumbnails = Miniaturas da visão geral da área de trabalho
.show-number = Mostrar o número da área de trabalho .show-number = Mostrar número da área de trabalho
.show-name = Mostrar o nome da área de trabalho .show-name = Mostrar nome da área de trabalho
workspaces-orientation = Orientação das áreas de trabalho workspaces-orientation = Orientação das áreas de trabalho
.vertical = Vertical .vertical = Vertical
.horizontal = Horizontal .horizontal = Horizontal
hot-corner = Canto ativo hot-corner = Canto ativo
.top-left-corner = Ativar o canto superior esquerdo para exibir as áreas de trabalho .top-left-corner = Ativar o canto superior esquerdo para as áreas de trabalho
## Desktop: Display ## Desktop: Display
@ -455,7 +456,7 @@ manage-windows = Gerir janelas
.resize-inwards = Redimensionar janela para dentro .resize-inwards = Redimensionar janela para dentro
.resize-outwards = Redimensionar janela para fora .resize-outwards = Redimensionar janela para fora
.toggle-sticky = Tornar janela fixa .toggle-sticky = Tornar janela fixa
move-windows = Mover janelas move-windows = Mover Janelas
.direction = .direction =
Mover janela { $direction -> Mover janela { $direction ->
*[down] para baixo *[down] para baixo
@ -480,7 +481,7 @@ move-windows = Mover janelas
.workspace-num = Mover janela para a área de trabalho { $num } .workspace-num = Mover janela para a área de trabalho { $num }
.prev-workspace = Mover janela para a área de trabalho anterior .prev-workspace = Mover janela para a área de trabalho anterior
.next-workspace = Mover janela para a área de trabalho seguinte .next-workspace = Mover janela para a área de trabalho seguinte
.last-workspace = Mover janela para o última área de trabalho .last-workspace = Mover janela para a última área de trabalho
.next-display = Mover janela para o ecrã seguinte .next-display = Mover janela para o ecrã seguinte
.prev-display = Mover janela para o ecrã anterior .prev-display = Mover janela para o ecrã anterior
.send-to-prev-workspace = Mover janela para a área de trabalho anterior .send-to-prev-workspace = Mover janela para a área de trabalho anterior
@ -503,9 +504,8 @@ system-shortcut = Sistema
.play-prev = Faixa anterior .play-prev = Faixa anterior
.poweroff = Desligar .poweroff = Desligar
.screenshot = Tirar uma captura de ecrã .screenshot = Tirar uma captura de ecrã
.suspend = Suspender
.terminal = Abrir o terminal .terminal = Abrir o terminal
.touchpad-toggle = Ativar ou desativar o painel tátil .touchpad-toggle = Ativar painel tátil
.volume-lower = Diminuir o volume da saída do áudio .volume-lower = Diminuir o volume da saída do áudio
.volume-raise = Aumentar o volume da saída do áudio .volume-raise = Aumentar o volume da saída do áudio
.web-browser = Abrir um navegador de Internet .web-browser = Abrir um navegador de Internet
@ -852,10 +852,3 @@ full-name = Nome completo
invalid-username = Nome de utilizador inválido. invalid-username = Nome de utilizador inválido.
password-mismatch = A palavra-passe e a confirmação devem ser iguais. password-mismatch = A palavra-passe e a confirmação devem ser iguais.
save = Guardar save = Guardar
xdg-entry-desktop-comment = Papel de parede, aparência, painel, doca, gestão de janelas e definições de áreas de trabalho
xdg-entry-workspaces-keywords = COSMIC;Área;Trabalho;Orientação;Visão;Geral;Monitor;Ecrã;
workspaces-overview = Visão geral das áreas de trabalho
.action-on-typing = Ação ao digitar
.none = Nenhuma
.launcher = Abrir lançador
.applications = Abrir aplicações

File diff suppressed because it is too large Load diff

View file

@ -40,7 +40,7 @@ pub struct Section<Message> {
pub search_ignore: bool, pub search_ignore: bool,
} }
impl<Message: Clone + 'static> Default for Section<Message> { impl<Message: 'static> Default for Section<Message> {
fn default() -> Self { fn default() -> Self {
Self { Self {
title: String::new(), title: String::new(),
@ -120,7 +120,7 @@ impl<Message: Clone + 'static> Section<Message> {
#[must_use] #[must_use]
#[inline] #[inline]
pub fn unimplemented<'a, Message: Clone + 'static>( pub fn unimplemented<'a, Message: 'static>(
_binder: &'a Binder<Message>, _binder: &'a Binder<Message>,
_page: &'a dyn Page<Message>, _page: &'a dyn Page<Message>,
_section: &'a Section<Message>, _section: &'a Section<Message>,