Compare commits

...

11 commits

Author SHA1 Message Date
Votre Nom
52ce463a59 window-management: toggle for macOS-style window controls position
Adds a new toggler "Place buttons on the left (macOS style)" in
*Desktop → Window Management → Window controls*, next to the existing
show_maximize / show_minimize controls. When enabled, writes
`WindowControlsPosition::Start` into the `CosmicTk` config
(com.system76.CosmicTk); when disabled, writes `End` (default).

All libcosmic-based applications rebuilt against a libcosmic that
exposes `WindowControlsPosition` pick up the change live through the
existing cosmic-config subscription.

Includes:
- new Message variant WindowControlsPositionStart(bool) + handler
- `window-controls.position-start` fluent key added in en + fr locales
- Cargo.toml: activate local [patch] override to libcosmic (dev only,
  not suitable for upstream merge)

Requires: libcosmic >= 5c331935 (header_bar WindowControlsPosition).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 15:09:01 +02:00
Lysander Treumann
48eae39858 Incorporates format suggestions from 'cargo fmt --all --check',
Improves error messages when PageInner.size is unexpectedly None
2026-04-21 13:54:15 -06:00
Lysander Treumann
ba5fb65b44 Changes the PageInner.size field to have no explicit default. It is only initialized (not None) when PageInner.panel_config is initialized. This implementation fails faster and more verbose, when program is in an unintended state. 2026-04-21 13:54:15 -06:00
Lysander Treumann
95a82c0d69 Changes behavior of the panel/dock size slider
- from: new size is committed as soon as the slider position is changed (triggers panel/dock restart),
- to: new size is committed only when slider is released.
2026-04-21 13:54:15 -06:00
Oleksiy Buell
c06b184ecf
feat(workspaces): add workspace wrapping toggle 2026-04-20 15:14:37 +02:00
Daniel Fox Franke
d0fa882596
feat(keyboard): add "swap with control" for caps lock key 2026-04-20 15:12:52 +02:00
Vukašin Vojinović
2b7fd9b8e2 chore: update CI 2026-04-16 15:25:34 -06:00
Vukašin Vojinović
eb55cd020f chore: clippy 2026-04-16 15:25:34 -06:00
Vukašin Vojinović
96ce377ebf chore: update libcosmic 2026-04-16 15:25:34 -06:00
Jeremy Soller
09c4d04b49
i18n: translation update from Hosted Weblate (#1934) 2026-04-14 09:51:32 -06:00
Hosted Weblate
f4e8a920ff
i18n: translation updates from weblate
Co-authored-by: Aindriú Mac Giolla Eoin <aindriu80@gmail.com>
Co-authored-by: Amadɣas <massiin@proton.me>
Co-authored-by: Asier Saratsua Garmendia <asier.sarasua@gmail.com>
Co-authored-by: Because789 <hubiontheroad@yahoo.com>
Co-authored-by: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>
Co-authored-by: David Carvalho <david.snt.carvalho@gmail.com>
Co-authored-by: Deleted User <noreply+129037@weblate.org>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Geeson Wan <wang14240@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Hugo Carvalho <hugokarvalho@hotmail.com>
Co-authored-by: Julien Brouillard <julienbrouillard1@gmail.com>
Co-authored-by: Jun Hwi Ku <siguning@gmail.com>
Co-authored-by: Michael Murphy <michael@mmurphy.dev>
Co-authored-by: Thomas Worofsky <thomas.worofsky@gmail.com>
Co-authored-by: Urocissa Caerulea.Tw <urocissa.tw@proton.me>
Co-authored-by: Vilius Paliokas <viliuspaliokas@gmail.com>
Co-authored-by: Walter William Beckerleg Bruckman <spayk.99@protonmail.com>
Co-authored-by: defaultUser822 <defaultuser822@users.noreply.hosted.weblate.org>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: lorduskordus <lorduskordus@gmail.com>
Co-authored-by: taijuin Lee <taijuin@gmail.com>
Co-authored-by: therealmate <hellogaming91@gmail.com>
Co-authored-by: 麋麓 BigELK176 <BigELK176@gmail.com>
Co-authored-by: 김유빈 <k.sein1016@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/ar/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/cs/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/de/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/es_419/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/fr/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/ga/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/hu/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/kab/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/ko/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/lt/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/pt/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-settings/zh_Hant/
Translation: Pop OS/COSMIC Settings
2026-04-12 18:50:07 +02:00
46 changed files with 1712 additions and 1406 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@v3 - uses: actions/checkout@v6
- name: install toolchain - name: install toolchain
run: rustup toolchain install 1.80.1 --component rustfmt run: rustup toolchain install 1.90.0 --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@v3 - uses: actions/checkout@v6
- name: install toolchain - name: install toolchain
run: rustup toolchain install 1.80.1 --component clippy run: rustup toolchain install 1.90.0 --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@v3 - uses: actions/checkout@v6
- name: install toolchain - name: install toolchain
run: rustup show run: rustup show
- name: test - name: test
@ -51,8 +51,8 @@ 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@v3 - uses: actions/checkout@v6
- name: install toolchain - name: install toolchain
run: rustup show run: rustup show
- name: check features - name: check features
run: just check-features run: just 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@v4 uses: actions/checkout@v6
- 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,16 +70,18 @@ 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,19 +219,18 @@ pub fn magnifier(
.add( .add(
settings::item::builder(&descriptions[magnifier]) settings::item::builder(&descriptions[magnifier])
.description(&descriptions[controls]) .description(&descriptions[controls])
.control( .toggler(page.magnifier_state, Message::SetMagnifier),
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(
@ -247,10 +246,10 @@ pub fn magnifier(
}, },
), ),
)) ))
.add(settings::item( .add(
&descriptions[signin], settings::item::builder(&descriptions[signin])
widget::toggler(page.zoom_config.start_on_login).on_toggle(Message::SetSignin), .toggler(page.zoom_config.start_on_login, Message::SetSignin),
)) )
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::AccessibilityMagnifier) .map(crate::pages::Message::AccessibilityMagnifier)
}) })
@ -300,36 +299,21 @@ pub fn view_movement() -> section::Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(widget::settings::item_row(vec![ .add(settings::item::builder(&descriptions[continuous]).radio(
widget::radio( ZoomMovement::Continuously,
text::body(&descriptions[continuous]), Some(page.zoom_config.view_moves),
ZoomMovement::Continuously, Message::SetMovement,
Some(page.zoom_config.view_moves), ))
Message::SetMovement, .add(settings::item::builder(&descriptions[onedge]).radio(
) ZoomMovement::OnEdge,
.width(Length::Fill) Some(page.zoom_config.view_moves),
.into(), Message::SetMovement,
])) ))
.add(widget::settings::item_row(vec![ .add(settings::item::builder(&descriptions[centered]).radio(
widget::radio( ZoomMovement::Centered,
text::body(&descriptions[onedge]), Some(page.zoom_config.view_moves),
ZoomMovement::OnEdge, Message::SetMovement,
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::{
Task, Apply, Element, 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, toggler}, widget::{dropdown, settings, text},
}; };
pub use cosmic_comp_config::ZoomMovement; pub use cosmic_comp_config::ZoomMovement;
use cosmic_config::CosmicConfigEntry; use cosmic_config::CosmicConfigEntry;
@ -200,6 +200,22 @@ 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(
@ -210,31 +226,13 @@ pub fn vision() -> section::Section<crate::pages::Message> {
}, },
), ),
) )
.add({ .add(crate::widget::go_next_with_item(
let (magnifier_entity, _magnifier_info) = binder &descriptions[magnifier],
.info text::body(status_text).wrapping(Wrapping::Word),
.iter() page.wayland_available
.find(|(_, v)| v.id == "accessibility_magnifier") .is_some()
.expect("magnifier page not found"); .then_some(crate::pages::Message::Page(magnifier_entity)),
))
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| {
@ -242,21 +240,19 @@ pub fn vision() -> section::Section<crate::pages::Message> {
}), }),
) )
.add( .add(
settings::item::builder(&descriptions[invert_colors]).control( settings::item::builder(&descriptions[invert_colors]).toggler_maybe(
toggler(page.screen_inverted).on_toggle_maybe( page.screen_inverted,
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]).control( settings::item::builder(&descriptions[color_filters]).toggler_maybe(
toggler(page.screen_filter_active).on_toggle_maybe( page.screen_filter_active,
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({
@ -304,13 +300,11 @@ pub fn hearing() -> section::Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add( .add(
cosmic::Element::from( settings::item::builder(&descriptions[mono])
settings::item::builder(&descriptions[mono]) .toggler(page.daemon_config.mono_sound, Message::SetSoundMono),
.toggler(page.daemon_config.mono_sound, Message::SetSoundMono),
)
.map(crate::pages::Message::Accessibility),
) )
.into() .apply(Element::from)
.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::{Length, stream}, iced::stream,
surface, surface,
widget::{self, dropdown, text}, widget::{self, dropdown, settings, 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,61 +277,46 @@ 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 = widget::text::body(&section.title).font(cosmic::font::bold()); let title = text::body(&section.title).font(cosmic::font::bold());
let description = widget::text::body(&section.descriptions[desc]); let description = text::body(&section.descriptions[desc]);
let content = widget::settings::section::<'_, crate::pages::Message>() let content = settings::section::<'_, crate::pages::Message>()
.add(widget::settings::item_row(vec![ .add(settings::item::builder(&section.descriptions[none]).radio(
widget::radio( EavesdroppingKeyboardMode::None,
text::body(&section.descriptions[none]), Some(page.comp_config_xwayland_eavesdropping.keyboard),
EavesdroppingKeyboardMode::None, |t| Message::SetXwaylandKeyboardMode(t).into(),
Some(page.comp_config_xwayland_eavesdropping.keyboard), ))
|t| Message::SetXwaylandKeyboardMode(t).into(), .add(
) 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) )
.into(), .add(
])) 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) )
.into(), .add(settings::item::builder(&section.descriptions[all]).radio(
])) EavesdroppingKeyboardMode::All,
.add(widget::settings::item_row(vec![ Some(page.comp_config_xwayland_eavesdropping.keyboard),
widget::radio( |t| Message::SetXwaylandKeyboardMode(t).into(),
text::body(&section.descriptions[all]), ))
EavesdroppingKeyboardMode::All, .add(
Some(page.comp_config_xwayland_eavesdropping.keyboard), settings::item::builder(&section.descriptions[mouse])
|t| Message::SetXwaylandKeyboardMode(t).into(), .toggler(page.comp_config_xwayland_eavesdropping.pointer, |t| {
) 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::active().cosmic().spacing.space_xxs) .spacing(cosmic::theme::spacing().space_xxs)
.apply(cosmic::Element::from) .apply(cosmic::Element::from)
.map(Into::into) .map(Into::into)
}) })
@ -356,42 +341,33 @@ 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(widget::settings::item_row(vec![ .add(
widget::radio( widget::settings::item::builder(&descriptions[gaming])
widget::column::with_capacity(2) .description(&descriptions[gaming_desc])
.push(text::body(&descriptions[gaming])) .radio(
.push(text::caption(&descriptions[gaming_desc])), XwaylandDescaling::Fractional,
XwaylandDescaling::Fractional, Some(page.comp_config_descale_xwayland),
Some(page.comp_config_descale_xwayland), Message::SetXwaylandDescaling,
Message::SetXwaylandDescaling, ),
) )
.width(Length::Fill) .add(
.into(), widget::settings::item::builder(&descriptions[apps])
])) .description(&descriptions[apps_desc])
.add(widget::settings::item_row(vec![ .radio(
widget::radio( XwaylandDescaling::Enabled,
widget::column::with_capacity(2) Some(page.comp_config_descale_xwayland),
.push(text::body(&descriptions[apps])) Message::SetXwaylandDescaling,
.push(text::caption(&descriptions[apps_desc])), ),
XwaylandDescaling::Enabled, )
Some(page.comp_config_descale_xwayland), .add(
Message::SetXwaylandDescaling, widget::settings::item::builder(&descriptions[compat])
) .description(&descriptions[compat_desc])
.width(Length::Fill) .radio(
.into(), XwaylandDescaling::Disabled,
])) Some(page.comp_config_descale_xwayland),
.add(widget::settings::item_row(vec![ Message::SetXwaylandDescaling,
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,12 +772,10 @@ fn status() -> Section<crate::pages::Message> {
} }
widget::list_column() widget::list_column()
.add( .add(bluetooth_toggle.toggler(
bluetooth_toggle.control( matches!(status, Active::Enabling | Active::Enabled),
widget::toggler(matches!(status, Active::Enabling | Active::Enabled)) |active| Message::SetActive(active).into(),
.on_toggle(|active| Message::SetActive(active).into()), ))
),
)
.apply(Element::from) .apply(Element::from)
}) })
} }

View file

@ -1,18 +1,17 @@
// 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},
iced::core::text::Wrapping, widget,
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};
@ -177,10 +176,6 @@ 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)
@ -193,36 +188,17 @@ impl Model {
families = &self.font_filter; families = &self.font_filter;
} }
let list = families.iter().fold(widget::list_column(), |list, family| { let list = families.iter().fold(
let selected = &**family == current_font; widget::list_column::with_capacity(families.len()),
list.add( |list, family| {
settings::item_row(vec![ let selected = &**family == current_font;
widget::text::body(&**family) list.add(selection_context_item(
.class(if selected { family,
cosmic::theme::Text::Accent selected,
} else { callback(family.clone()),
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,8 +22,7 @@ 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, radio, row, settings, button, color_picker::ColorPickerUpdate, container, row, settings, space::horizontal, text,
space::horizontal as horizontal_space, text,
}; };
use cosmic::{Apply, Element, Task, widget}; use cosmic::{Apply, Element, Task, widget};
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
@ -790,36 +789,21 @@ pub fn interface_density() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item_row(vec![ .add(settings::item::builder(&descriptions[compact]).radio(
radio( Density::Compact,
text::body(&descriptions[compact]), Some(page.density),
Density::Compact, Message::Density,
Some(page.density), ))
Message::Density, .add(settings::item::builder(&descriptions[comfortable]).radio(
) Density::Standard,
.width(Length::Fill) Some(page.density),
.into(), Message::Density,
])) ))
.add(settings::item_row(vec![ .add(settings::item::builder(&descriptions[spacious]).radio(
radio( Density::Spacious,
text::body(&descriptions[comfortable]), Some(page.density),
Density::Standard, Message::Density,
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)
}) })
@ -933,7 +917,7 @@ pub fn reset_button() -> Section<crate::pages::Message> {
.on_press(Message::Reset) .on_press(Message::Reset)
.into() .into()
} else { } else {
horizontal_space().width(1.).apply(Element::from) horizontal().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, settings, text}; use cosmic::widget::{self, button, container, list, 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,105 +64,117 @@ 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>,
) -> impl Into<Element<'a, Message>> { ) -> list::ListButton<'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();
settings::item::builder(&descriptions[labels["container_bg"]]) list::button(
.description(&descriptions[labels["container_bg_desc"]]) settings::item::builder(&descriptions[labels["container_bg"]])
.control( .description(&descriptions[labels["container_bg_desc"]])
if page .control(
.drawer if page
.container_background .drawer
.get_applied_color() .container_background
.is_some() .get_applied_color()
{ .is_some()
Element::from( {
page.drawer Element::from(
.container_background page.drawer
.picker_button( .container_background
|_| Message::DrawerOpen(ContextView::ContainerBackground), .picker_button(
Some(24), |_| Message::DrawerOpen(ContextView::ContainerBackground),
) Some(24),
.width(Length::Fixed(48.0)) )
.height(Length::Fixed(24.0)), .width(Length::Fixed(48.0))
) .height(Length::Fixed(24.0)),
} else { )
container( } else {
button::text(&descriptions[labels["auto"]]) container(
.trailing_icon(go_next_icon.clone()) button::text(&descriptions[labels["auto"]])
.on_press(Message::DrawerOpen(ContextView::ContainerBackground)), .trailing_icon(go_next_icon.clone())
) .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>,
) -> impl Into<Element<'a, Message>> { ) -> list::ListButton<'a, Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::item::builder(&descriptions[labels["app_bg"]]).control( list::button(
page.drawer settings::item::builder(&descriptions[labels["app_bg"]]).control(
.application_background page.drawer
.picker_button( .application_background
|_| Message::DrawerOpen(ContextView::ApplicationBackground), .picker_button(
Some(24), |_| Message::DrawerOpen(ContextView::ApplicationBackground),
) Some(24),
.width(Length::Fixed(48.0)) )
.height(Length::Fixed(24.0)), .width(Length::Fixed(48.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>,
) -> impl Into<Element<'a, Message>> { ) -> list::ListButton<'a, Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::item::builder(&descriptions[labels["control_tint"]]) list::button(
.description(&descriptions[labels["control_tint_desc"]]) settings::item::builder(&descriptions[labels["control_tint"]])
.control( .description(&descriptions[labels["control_tint_desc"]])
page.drawer .control(
.control_component page.drawer
.picker_button( .control_component
|_| Message::DrawerOpen(ContextView::ControlComponent), .picker_button(
Some(24), |_| Message::DrawerOpen(ContextView::ControlComponent),
) Some(24),
.width(Length::Fixed(48.0)) )
.height(Length::Fixed(24.0)), .width(Length::Fixed(48.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>,
) -> impl Into<Element<'a, Message>> { ) -> list::ListButton<'a, Message> {
let descriptions = &section.descriptions; let descriptions = &section.descriptions;
settings::item::builder(&descriptions[labels["text_tint"]]) list::button(
.description(&descriptions[labels["text_tint_desc"]]) settings::item::builder(&descriptions[labels["text_tint"]])
.control( .description(&descriptions[labels["text_tint_desc"]])
page.drawer .control(
.interface_text page.drawer
.picker_button( .interface_text
|_| Message::DrawerOpen(ContextView::InterfaceText), .picker_button(
Some(24), |_| Message::DrawerOpen(ContextView::InterfaceText),
) Some(24),
.width(Length::Fixed(48.0)) )
.height(Length::Fixed(24.0)), .width(Length::Fixed(48.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>,
) -> impl Into<Element<'a, Message>> { ) -> list::ListButton<'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, toggler}, widget::{settings, text},
}; };
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,16 +170,15 @@ pub(crate) fn enable() -> Section<crate::pages::Message> {
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item( .add(
&descriptions[dock], settings::item::builder(&descriptions[dock]).toggler(
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,11 +4,8 @@ use cosmic::{
cosmic_config::{self, CosmicConfigEntry}, cosmic_config::{self, CosmicConfigEntry},
cosmic_theme::Density, cosmic_theme::Density,
iced::{Alignment, Length}, iced::{Alignment, Length},
surface, theme, surface,
widget::{ widget::{button, container, dropdown, row, settings, slider, space, text},
button, container, dropdown, icon, row, settings, slider,
space::horizontal as horizontal_space, text, toggler,
},
}; };
use cosmic::Apply; use cosmic::Apply;
@ -25,6 +22,7 @@ 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>,
@ -42,6 +40,7 @@ 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")],
@ -119,10 +118,10 @@ pub(crate) fn behavior_and_position<
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item( .add(
&descriptions[autohide_label], settings::item::builder(&descriptions[autohide_label])
toggler(panel_config.autohide.is_some()).on_toggle(Message::AutoHidePanel), .toggler(panel_config.autohide.is_some(), Message::AutoHidePanel),
)) )
.add(settings::item( .add(settings::item(
&descriptions[position], &descriptions[position],
dropdown::popup_dropdown( dropdown::popup_dropdown(
@ -180,14 +179,14 @@ pub(crate) fn style<
}; };
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item( .add(
&descriptions[gap_label], settings::item::builder(&descriptions[gap_label])
toggler(panel_config.anchor_gap).on_toggle(Message::AnchorGap), .toggler(panel_config.anchor_gap, Message::AnchorGap),
)) )
.add(settings::item( .add(
&descriptions[extend_label], settings::item::builder(&descriptions[extend_label])
toggler(panel_config.expand_to_edges).on_toggle(Message::ExtendToEdge), .toggler(panel_config.expand_to_edges, Message::ExtendToEdge),
)) )
.add(settings::item( .add(settings::item(
&descriptions[appearance], &descriptions[appearance],
dropdown::popup_dropdown( dropdown::popup_dropdown(
@ -210,7 +209,9 @@ pub(crate) fn style<
text::body(fl!("small")).into(), text::body(fl!("small")).into(),
slider( slider(
0..=4, 0..=4,
match panel_config.size { match inner.size.as_ref().expect(
"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,
@ -232,6 +233,7 @@ 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)
@ -292,24 +294,10 @@ 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())
{ {
let control = row::with_children(vec![ settings.add(crate::widget::go_next_item(
horizontal_space().into(), &descriptions[applets_label],
icon::from_name("go-next-symbolic").size(16).into(), crate::pages::Message::Page(panel_applets_entity),
]); ))
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
}; };
@ -358,7 +346,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(horizontal_space().width(1.)) Element::from(space())
} else { } else {
button::standard(&descriptions[reset_to_default]) button::standard(&descriptions[reset_to_default])
.on_press(Message::ResetPanel) .on_press(Message::ResetPanel)
@ -437,6 +425,7 @@ 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),
@ -517,6 +506,7 @@ 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 {
@ -615,7 +605,16 @@ 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) => {
_ = panel_config.set_size(helper, size); self.size = Some(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);
@ -678,6 +677,7 @@ 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,6 +79,7 @@ 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,
@ -98,6 +99,7 @@ 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, toggler, tab_bar, text,
}, },
}; };
use cosmic::{ use cosmic::{
@ -1275,18 +1275,17 @@ pub fn settings() -> Section<crate::pages::Message> {
children.push({ children.push({
let mut column = list_column() let mut column = list_column()
.add(settings::item( .add(settings::item::builder(&descriptions[same_label]).toggler(
&descriptions[same_label], page.wallpaper_service_config.same_on_all,
toggler(page.wallpaper_service_config.same_on_all) Message::SameWallpaper,
.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(settings::item( column = column.add(
&descriptions[slide_label], settings::item::builder(&descriptions[slide_label])
toggler(slideshow_enabled).on_toggle(Message::Slideshow), .toggler(slideshow_enabled, 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::{self, Background, Color, Degrees, Length, gradient::Linear}; use cosmic::iced::core::{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::{Alignment, Length}, iced::Length,
surface, surface,
widget::{self, settings, toggler}, widget::{self, settings},
}; };
use cosmic_comp_config::CosmicCompConfig; use cosmic_comp_config::CosmicCompConfig;
@ -27,6 +27,7 @@ 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),
} }
@ -177,6 +178,19 @@ 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) {
@ -259,13 +273,10 @@ pub fn window_management() -> Section<crate::pages::Message> {
), ),
)) ))
.add( .add(
settings::flex_item( settings::item::builder(&descriptions[edge_gravity])
&descriptions[edge_gravity], .toggler(page.edge_snap_threshold != 0, |is_enabled| {
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)
@ -277,6 +288,7 @@ 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()
@ -287,17 +299,24 @@ pub fn window_controls() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item( .add(
&descriptions[active_window_hint], settings::item::builder(&descriptions[active_window_hint])
toggler(page.show_active_hint).on_toggle(Message::ShowActiveWindowHint), .toggler(page.show_active_hint, Message::ShowActiveWindowHint),
)) )
.add(settings::item( .add(
&descriptions[maximize], settings::item::builder(&descriptions[maximize])
toggler(cosmic::config::show_maximize()).on_toggle(Message::ShowMaximizeButton), .toggler(cosmic::config::show_maximize(), Message::ShowMaximizeButton),
)) )
.add(settings::item( .add(
&descriptions[minimize], settings::item::builder(&descriptions[minimize])
toggler(cosmic::config::show_minimize()).on_toggle(Message::ShowMinimizeButton), .toggler(cosmic::config::show_minimize(), 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)
@ -319,10 +338,10 @@ pub fn focus_navigation() -> Section<crate::pages::Message> {
settings::section() settings::section()
.title(&section.title) .title(&section.title)
.add(settings::item( .add(
&descriptions[focus_follows_cursor], settings::item::builder(&descriptions[focus_follows_cursor])
toggler(page.focus_follows_cursor).on_toggle(Message::SetFocusFollowsCursor), .toggler(page.focus_follows_cursor, 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| {
@ -333,10 +352,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(settings::item( .add(
&descriptions[cursor_follows_focus], settings::item::builder(&descriptions[cursor_follows_focus])
toggler(page.cursor_follows_focus).on_toggle(Message::SetCursorFollowsFocus), .toggler(page.cursor_follows_focus, Message::SetCursorFollowsFocus),
)) )
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::WindowManagement) .map(crate::pages::Message::WindowManagement)
}) })

View file

@ -6,9 +6,8 @@
use cosmic::{ use cosmic::{
Apply, Element, Apply, Element,
cosmic_config::{self, ConfigGet, ConfigSet}, cosmic_config::{self, ConfigGet, ConfigSet},
iced::Length,
surface, surface,
widget::{self, radio, settings, text}, widget::{self, settings},
}; };
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;
@ -21,6 +20,7 @@ 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,6 +88,7 @@ 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()),
]) ])
} }
@ -126,6 +127,10 @@ 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) {
@ -209,26 +214,16 @@ 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_row(vec![ .add(settings::item::builder(&descriptions[span]).radio(
radio( WorkspaceMode::Global,
text::body(&descriptions[span]), Some(page.comp_workspace_config.workspace_mode),
WorkspaceMode::Global, Message::SetWorkspaceMode,
Some(page.comp_workspace_config.workspace_mode), ))
Message::SetWorkspaceMode, .add(settings::item::builder(&descriptions[separate]).radio(
) WorkspaceMode::OutputBound,
.width(Length::Fill) Some(page.comp_workspace_config.workspace_mode),
.into(), Message::SetWorkspaceMode,
])) ))
.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)
}) })
@ -247,26 +242,37 @@ 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_row(vec![ .add(settings::item::builder(&descriptions[vertical]).radio(
radio( WorkspaceLayout::Vertical,
text::body(&descriptions[vertical]), Some(page.comp_workspace_config.workspace_layout),
WorkspaceLayout::Vertical, Message::SetWorkspaceLayout,
Some(page.comp_workspace_config.workspace_layout), ))
Message::SetWorkspaceLayout, .add(settings::item::builder(&descriptions[horizontal]).radio(
) WorkspaceLayout::Horizontal,
.width(Length::Fill) Some(page.comp_workspace_config.workspace_layout),
.into(), Message::SetWorkspaceLayout,
])) ))
.add(settings::item_row(vec![ .apply(Element::from)
radio( .map(crate::pages::Message::DesktopWorkspaces)
text::body(&descriptions[horizontal]), })
WorkspaceLayout::Horizontal, }
Some(page.comp_workspace_config.workspace_layout),
Message::SetWorkspaceLayout, fn workspace_navigation() -> Section<crate::pages::Message> {
) crate::slab!(descriptions {
.width(Length::Fill) description = fl!("workspaces-navigation", "wraparound");
.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, toggler, self, column, container, dropdown, list_column, segmented_button, tab_bar, text,
}; };
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(widget::settings::item( .add(
&descriptions[enable_label], widget::settings::item::builder(&descriptions[enable_label])
toggler(active_output.enabled).on_toggle(Message::DisplayToggle), .toggler(active_output.enabled, 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, radio, row, settings}, widget::{self, ListColumn, button, container, icon, list, 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,6 +48,7 @@ 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)]
@ -151,11 +152,11 @@ impl SpecialKey {
} }
} }
pub fn prefix(self) -> &'static str { pub fn prefixes(self) -> &'static [&'static str] {
match self { match self {
Self::Compose => "compose:", Self::Compose => &["compose:"],
Self::AlternateCharacters => "lv3:", Self::AlternateCharacters => &["lv3:"],
Self::CapsLock => "caps:", Self::CapsLock => &["caps:", "ctrl:"],
} }
} }
} }
@ -243,15 +244,10 @@ 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>,
) -> cosmic::Element<'a, Message> { ) -> list::ListButton<'a, Message> {
settings::item_row(vec![ settings::item::builder(desc).radio(value, Some(current_value), |_| {
radio(desc, value, Some(current_value), |_| { Message::SpecialCharacterSelect(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 {
@ -513,10 +509,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 prefix = special_key.prefix(); let prefixes = special_key.prefixes();
let new_options = options let new_options = options
.split(',') .split(',')
.filter(|x| !x.starts_with(prefix)) .filter(|x| !prefixes.iter().any(|prefix| x.starts_with(prefix)))
.chain(id) .chain(id)
.join(","); .join(",");
@ -552,9 +548,11 @@ 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::item::builder(fl!("show-extended-input-sources")).toggler( let toggler = settings::section().add(
self.show_extended_input_sources, settings::item::builder(fl!("show-extended-input-sources")).toggler(
Message::SetShowExtendedInputSources, self.show_extended_input_sources,
Message::SetShowExtendedInputSources,
),
); );
let mut list = widget::list_column(); let mut list = widget::list_column();
@ -610,13 +608,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 prefix = special_key.prefix(); let prefixes = special_key.prefixes();
let current = self let current = self
.xkb .xkb
.options .options
.iter() .iter()
.flat_map(|x| x.split(',')) .flat_map(|x| x.split(','))
.find(|x| x.starts_with(prefix)); .find(|x| prefixes.iter().any(|prefix| x.starts_with(prefix)));
// TODO layout default // TODO layout default
@ -653,16 +651,11 @@ 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_row(vec![ list = list.add(settings::item::builder(desc).radio(
radio( Some(state),
cosmic::widget::text(desc), Some(Some(current)),
Some(state), |_| Message::SetNumlockState(state),
Some(Some(current)), ));
|_| Message::SetNumlockState(state),
)
.width(Length::Fill)
.into(),
]));
} }
list.into() list.into()

View file

@ -779,10 +779,7 @@ 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_xxs, space_xs, space_l, ..
space_xs,
space_l,
..
} = theme::spacing(); } = theme::spacing();
let model = &shortcuts[id]; let model = &shortcuts[id];
@ -798,7 +795,7 @@ fn context_drawer<'a>(
}); });
let bindings = model.bindings.iter().enumerate().fold( let bindings = model.bindings.iter().enumerate().fold(
widget::list_column().spacing(space_xxs), widget::list_column(),
|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().spacing(0), widget::list_column(),
|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).spacing(0); let controls = widget::list_column().add(input_fields).add(keys);
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,27 +166,17 @@ 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_row(vec![ .add(settings::item::builder(&descriptions[click_finger]).radio(
widget::radio( ClickMethod::Clickfinger,
text::body(&descriptions[click_finger]), page.input_touchpad.click_method,
ClickMethod::Clickfinger, |option| Message::SetSecondaryClickBehavior(Some(option), true),
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_row(vec![ .add(settings::item::builder(&descriptions[button_areas]).radio(
widget::radio( ClickMethod::ButtonAreas,
text::body(&descriptions[button_areas]), page.input_touchpad.click_method,
ClickMethod::ButtonAreas, |option| Message::SetSecondaryClickBehavior(Some(option), true),
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
@ -222,33 +212,27 @@ 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(settings::item_row(vec![ .add(
widget::radio( settings::item::builder(&descriptions[two_finger]).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(settings::item_row(vec![ .add(
widget::radio( settings::item::builder(&descriptions[edge]).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 as horizontal_space, text_input::focus}, widget::{self, column, icon, space::horizontal, 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 {
widget::Column::new() column::with_capacity(2)
.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])
.control(widget::toggler(state.wifi_enabled).on_toggle(Message::WiFiEnable)); .toggler(state.wifi_enabled, 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_space().into(), horizontal().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_space().into(), horizontal().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_space().into(), horizontal().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, radio, settings, space::horizontal as horizontal_space, text}; use cosmic::widget::{self, settings, 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,12 +508,8 @@ 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( device_row.next().unwrap_or(space::horizontal().into()),
horizontal_space().width(Length::Fill).into() device_row.next().unwrap_or(space::horizontal().into()),
),
device_row.next().unwrap_or(
horizontal_space().width(Length::Fill).into()
),
) )
.spacing(8), .spacing(8),
) )
@ -543,18 +539,9 @@ fn profiles() -> Section<crate::pages::Message> {
section = profiles section = profiles
.into_iter() .into_iter()
.map(|profile| { .map(|profile| {
settings::item_row(vec![ settings::item::builder(profile.title())
radio( .description(profile.description())
widget::column::with_capacity(2) .radio(profile, Some(current_profile), Message::PowerProfileChange)
.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,10 +320,9 @@ 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])
.control( .toggler(page.amplification_source, |t| {
widget::toggler(page.amplification_source) Message::ToggleOverAmplificationSource(t).into()
.on_toggle(|t| Message::ToggleOverAmplificationSource(t).into()), }),
),
); );
Element::from(controls) Element::from(controls)
@ -435,10 +434,9 @@ 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])
.control( .toggler(page.amplification_sink, |t| {
widget::toggler(page.amplification_sink) Message::ToggleOverAmplificationSink(t).into()
.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, row, settings, space::horizontal as horizontal_space, text}, widget::{self, column, icon, list, row, settings, space::horizontal, 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_space().width(5.)) .push(horizontal().width(5.))
.push(admin_toggler) .push(admin_toggler)
.align_y(Alignment::Center), .align_y(Alignment::Center),
), ),
@ -785,16 +785,13 @@ 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()
.flat_map(|(idx, user)| { .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);
@ -832,37 +829,6 @@ 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()
@ -884,8 +850,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 {
@ -896,28 +862,49 @@ fn user_list() -> Section<crate::pages::Message> {
.into(), .into(),
]); ]);
let account_details = Some( let mut user_list = widget::list_column().add(
widget::button::custom(account_details_content) list::button(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)
.apply(Element::from), .on_press(Message::SelectUser(idx)),
); );
vec![account_details, expanded_details] if expanded {
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::list_column() widget::column::with_capacity(page.users.len()),
.spacing(0) |col, user| col.push(user),
.padding([8, 0])
.divider_padding(0)
.list_item_padding(0),
widget::ListColumn::add,
) )
.apply(|list| Element::from(settings::section::with_column(list))); .spacing(space_xxs)
.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()))))
@ -928,7 +915,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_m) .spacing(space_xxs)
.apply(Element::from) .apply(Element::from)
.map(crate::pages::Message::User) .map(crate::pages::Message::User)
}) })

View file

@ -1,13 +1,14 @@
// 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, settings, space::horizontal as horizontal_space}, widget::{self, dropdown, list, settings},
}; };
use cosmic_settings_page::{self as page, Section, section}; use cosmic_settings_page::{self as page, Section, section};
use icu::{ use icu::{
@ -20,7 +21,6 @@ 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,7 +335,11 @@ 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(self.timezone_context_item(id, timezone)); list = list.add(selection_context_item(
timezone,
Some(id) == self.timezone,
Message::Timezone(id),
));
} }
} }
@ -343,40 +347,6 @@ 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());
@ -498,30 +468,19 @@ 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| {
let timezone_context_button = widget::row::with_capacity(2) settings::section()
.spacing(12) .title(&section.title)
.push( // Time zone select
.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,13 +2,12 @@
// 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, space::horizontal as horizontal_space}; use cosmic::widget::{self, button, list};
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;
@ -361,14 +360,9 @@ 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(); let mut list = widget::list_column::with_capacity(self.available_languages.len());
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
@ -381,37 +375,15 @@ 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));
let button = widget::settings::item_row(vec![ list = list.add(selection_context_item(
widget::text::body(&available_language.display_name) &available_language.display_name,
.class(if is_installed { is_installed,
cosmic::theme::Text::Accent
} else {
cosmic::theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(Length::Fill)
.into(),
if is_installed { if is_installed {
widget::icon::from_name("object-select-symbolic") Message::RemoveLanguage(id)
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else { } else {
horizontal_space().width(16.).into() Message::AddLanguage(id)
}, },
]) ))
.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)
} }
} }
@ -492,12 +464,7 @@ impl Page {
} }
fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> { fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> {
let svg_accent = Rc::new(|theme: &cosmic::Theme| { let mut list = widget::list_column::with_capacity(self.available_languages.len());
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();
@ -509,37 +476,15 @@ 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);
let button = widget::settings::item_row(vec![ list = list.add(selection_context_item(
widget::text::body(&locale.region_name) &locale.region_name,
.class(if is_selected { is_selected,
cosmic::theme::Text::Accent
} else {
cosmic::theme::Text::Default
})
.wrapping(Wrapping::Word)
.width(Length::Fill)
.into(),
if is_selected { if is_selected {
widget::icon::from_name("object-select-symbolic") None
.size(16)
.icon()
.class(cosmic::theme::Svg::Custom(svg_accent.clone()))
.into()
} else { } else {
horizontal_space().width(16.).into() Some(Message::SelectRegion(id))
}, },
]) ))
.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,14 +2,15 @@
// 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, row, settings, self, ColorPickerModel, button, column, container, divider, icon, list, row, settings,
space::{horizontal as horizontal_space, vertical as vertical_space}, space::{horizontal, vertical},
text, text,
}; };
use cosmic::{Apply, Element, theme}; use cosmic::{Apply, Element, theme};
@ -75,7 +76,7 @@ pub fn search_header<Message>(
.into(), .into(),
); );
column_children.push(vertical_space().height(Length::Fixed(8.)).into()); column_children.push(vertical().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()
@ -89,12 +90,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_space()) .push(horizontal())
.into() .into()
} }
#[must_use] #[must_use]
pub fn unimplemented_page<Message: 'static>() -> Element<'static, Message> { pub fn unimplemented_page<Message: Clone + '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()
@ -184,50 +185,69 @@ pub fn sub_page_header<'a, Message: 'static + Clone>(
.into() .into()
} }
pub fn go_next_item<Msg: Clone + 'static>( pub fn go_next_item<Msg: 'static>(
description: &str, description: &str,
msg_opt: impl Into<Option<Msg>>, msg_opt: impl Into<Option<Msg>>,
) -> cosmic::Element<'_, Msg> { ) -> list::ListButton<'_, Msg> {
settings::item_row(vec![ settings::item_row(vec![
text::body(description).wrapping(Wrapping::Word).into(), text::body(description)
horizontal_space().into(), .width(Length::Fill)
.wrapping(Wrapping::Word)
.into(),
icon::from_name("go-next-symbolic").size(16).icon().into(), icon::from_name("go-next-symbolic").size(16).icon().into(),
]) ])
.width(Length::Fill) .apply(list::button)
.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: Clone + 'static>( pub fn go_next_with_item<'a, Msg: '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>>,
) -> cosmic::Element<'a, Msg> { ) -> list::ListButton<'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_space().into(), horizontal().into(),
widget::row::with_capacity(2) row::with_capacity(2)
.push(item) .push(item)
.push(icon::from_name("go-next-symbolic").size(16).icon()) .push(icon::from_name("go-next-symbolic").size(16).icon())
.align_y(Alignment::Center) .align_y(Alignment::Center)
.spacing(cosmic::theme::spacing().space_s) .spacing(theme::spacing().space_s)
.into(), .into(),
]) ])
.width(Length::Fill) .apply(list::button)
.apply(widget::container) .on_press_maybe(msg_opt.into())
.class(cosmic::theme::Container::List) }
.width(Length::Fill)
.apply(button::custom) pub fn selection_context_item<'a, Msg: 'static>(
.padding(0) name: &'a str,
.width(Length::Fill) selected: bool,
.class(theme::Button::Transparent) msg_opt: impl Into<Option<Msg>>,
) -> 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 = Numlock keyboard-numlock-boot = Num Lock
.boot-state = Stav při spuštění systému .boot-state = Stav klávesy při spuštění systému
.last-boot = Poslední spuštění systému .last-boot = Poslední spuštění systému
.on = Zapnuto .on = Zapnutý
.off = Vypnuto .off = Vypnutý
.set = Nastavit stav numlock při spuštění systému .set = Num Lock 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 = Sehkraft .vision = Sehen
.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 = Gehör hearing = Hören
.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,7 +351,6 @@ 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
@ -413,8 +412,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
@ -462,7 +461,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
@ -494,6 +493,7 @@ 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 Tastenkombination hinzufügen add-another-keybinding = Weitere Tastenbelegung hinzufügen
cancel = Abbrechen cancel = Abbrechen
command = Befehl command = Befehl
custom = Benutzerdefiniert custom = Benutzerdefiniert
@ -605,6 +605,7 @@ 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
@ -618,7 +619,9 @@ 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
@ -650,7 +653,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
@ -692,7 +695,7 @@ time-format = Datums- & Uhrzeitformat
.monday = Montag .monday = Montag
time-region = Region & Sprache time-region = Region & Sprache
formatting = Formatierung formatting = Formatierung
.dates = Daten .dates = Datum
.time = Uhrzeit .time = Uhrzeit
.date-and-time = Datum & Uhrzeit .date-and-time = Datum & Uhrzeit
.numbers = Zahlen .numbers = Zahlen
@ -739,10 +742,14 @@ 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-by-system = Alle X11-Anwendungen skalieren .scaled-gaming = Für Spiele und Vollbild-Apps optimieren
.system-description = X11-Anwendungen werden auf HiDPI-Bildschirmen unscharf dargestellt. .gaming-description = X11-Anwendungen können im Vergleich zu Wayland-Anwendungen etwas größer/kleiner erscheinen
.scaled-natively = X11-Anwendungen in nativer Auflösung rendern .scaled-applications = Für Anwendungen optimieren
.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. .applications-description = Spiele und Vollbild-X11-Anwendungen passen möglicherweise nicht zu deiner Bildschirmauflösung
.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
@ -894,3 +901,14 @@ 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,6 +484,7 @@ 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
@ -521,6 +522,9 @@ 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,3 +802,6 @@ 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

0
i18n/eu/cosmic_settings.ftl vendored Normal file
View file

View file

@ -322,6 +322,7 @@ 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
@ -854,11 +855,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 les coins du système et appliquer des ombres .clip = Aligner avec les coins système et appliquer les ombres
shadows-tiling = Fenêtres ajustées shadows-tiling = Fenêtres agencées
.clip = Aligner les coins du système .clip = Aligner avec les coins système
.shadow = Appliquer des ombres .shadow = Appliquer les ombres
shadow-and-corners = Les ombres et coins des fenêtres shadow-and-corners = Ombres et arrondis 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
@ -899,6 +900,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;Ajustement;Super;Touche; xdg-entry-window-management-keywords = COSMIC;Fenêtre;Gestion;Agencement;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 = Clé panel-left = Ar chlé
panel-right = Deas panel-right = Ar dheis
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] clé [left] ar chlé
[right] deas [right] ar dheis
[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 =
Fuinneog fócais { $direction -> Fócas fuinneog { $direction ->
*[down] síos *[down] síos
[in] isteach [in] isteach
[left] clé [left] ar chlé
[out] amach [out] amach
[right] deas [right] ar dheis
[up] suas [up] suas
} }
.output = .output =
Athraigh chuig aschur { $direction -> Athraigh chuig aschur { $direction ->
*[down] síos *[down] síos
[left] clé [left] ar chlé
[right] deas [right] ar dheis
[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 Fuinneog { $direction -> Bog an fhuinneog { $direction ->
*[down] síos *[down] síos
[left] clé [left] ar chlé
[right] deas [right] ar dheis
[up] suas [up] suas
} }
.display = .display =
Bog fuinneog monatóir amháin { $direction -> Bog an fhuinneog monatóir amháin { $direction ->
*[down] síos *[down] síos
[left] clé [left] ar chlé
[right] deas [right] ar dheis
[up] suas [up] suas
} }
.workspace = .workspace =
Bog fuinneog spás oibre amháin { $direction -> Bog an fhuinneog spás oibre amháin { $direction ->
*[below] thíos *[below] thíos
[left] clé [left] ar chlé
[right] deas [right] ar dheis
[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,3 +910,4 @@ 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 = Csatlakozva connected = Csatlakoztatva
connecting = Csatlakozás… connecting = Csatlakozás…
disconnect = Leválasztás disconnect = Bontá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 = Csatlakozva .activated = Csatlakoztatva
.config = Csatlakozás… .config = Csatlakozás…
.deactivating = Leválasztás… .deactivating = Bontás…
.disconnected = Leválasztva .disconnected = Kapcsolat bontva
.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 = Azonosítás szükséges .need-auth = Hitelesí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 = Csatlakozva .connected = Csatlakoztatva
.connecting = Csatlakozás… .connecting = Csatlakozás…
.disconnecting = Leválasztás… .disconnecting = Bontás…
.connect = Csatlakozás .connect = Csatlakozás
.disconnect = Leválasztás .disconnect = Bontá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 = A rendszer sarkainak követése és árnyék alkalmazása .clip = Rendszersarkokhoz illeszkedés és árnyékok alkalmazása
shadows-tiling = Csempézett ablakok shadows-tiling = Csempézett ablakok
.clip = A rendszer sarkainak követése .clip = Rendszersarkokhoz illeszkedés
.shadow = Árnyék alkalmazása .shadow = Árnyékok 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;Indítási;Alkalmazás; xdg-entry-startup-apps-keywords = COSMIC;Automatikus;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,3 +316,320 @@ 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,7 +2,6 @@ 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 키 동작
@ -17,13 +16,11 @@ 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 = 저장
@ -74,7 +71,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 = 축소
@ -85,7 +82,6 @@ keyboard-typing-assist = 입력
.repeat-delay = 반복 지연 .repeat-delay = 반복 지연
edge-gravity = 플로팅 창이 인접한 가장자리에 붙음 edge-gravity = 플로팅 창이 인접한 가장자리에 붙음
bluetooth = 블루투스 bluetooth = 블루투스
.desc = 블루투스 장치 관리
.status = 블루투스 설정이 열려있는 동안 시스템이 { $aliases }(으)로 표시됩니다. .status = 블루투스 설정이 열려있는 동안 시스템이 { $aliases }(으)로 표시됩니다.
.connected = 연결됨 .connected = 연결됨
.connecting = 연결 중 .connecting = 연결 중
@ -96,7 +92,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 = 최근 색상
@ -124,7 +120,6 @@ accessibility = 접근성
.invert-colors = 색상 반전 .invert-colors = 색상 반전
.color-filters = 색상 필터 .color-filters = 색상 필터
firmware = 펌웨어 firmware = 펌웨어
.desc = 펌웨어 세부 정보
container-background = 컨테이너 배경 container-background = 컨테이너 배경
.desc-detail = 컨테이너 배경색은 탐색 사이드바, 사이드 드로어, 대화 상자 및 유사한 위젯에 사용됩니다. 기본적으로 컨테이너 배경색은 창 배경색에서 자동으로 파생됩니다. .desc-detail = 컨테이너 배경색은 탐색 사이드바, 사이드 드로어, 대화 상자 및 유사한 위젯에 사용됩니다. 기본적으로 컨테이너 배경색은 창 배경색에서 자동으로 파생됩니다.
.reset = 자동으로 재설정 .reset = 자동으로 재설정
@ -188,7 +183,6 @@ 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
@ -205,13 +199,10 @@ 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 = 위로 이동
@ -248,7 +239,6 @@ hearing = 청각
preferred-languages = 선호하는 언어 preferred-languages = 선호하는 언어
.desc = 언어 순서에 따라 사용자 인터페이스에 표시될 언어가 결정됩니다. 변경 사항은 다음 로그인 후에 적용됩니다. .desc = 언어 순서에 따라 사용자 인터페이스에 표시될 언어가 결정됩니다. 변경 사항은 다음 로그인 후에 적용됩니다.
display = 디스플레이 display = 디스플레이
.desc = 디스플레이 및 야간 조명 관리
.arrangement = 디스플레이 배치 .arrangement = 디스플레이 배치
.arrangement-desc = 디스플레이를 드래그하여 다시 배치하세요 .arrangement-desc = 디스플레이를 드래그하여 다시 배치하세요
.enable = 디스플레이 사용 .enable = 디스플레이 사용
@ -286,7 +276,6 @@ disconnect = 연결 해제
ok = 확인 ok = 확인
debug = 디버그 debug = 디버그
sound = 소리 sound = 소리
.desc = N/A
number = { $number } number = { $number }
shortcut-name = 단축키 이름 shortcut-name = 단축키 이름
style = 스타일 style = 스타일
@ -299,7 +288,6 @@ panel-applets = 구성
qr-code-unavailable = QR 코드를 사용할 수 없음 qr-code-unavailable = QR 코드를 사용할 수 없음
small = 작게 small = 작게
notifications = 알림 notifications = 알림
.desc = 방해 금지, 잠금 화면 알림 및 앱 별 설정
window-tiling = 창 타일링 window-tiling = 창 타일링
.horizontal = 가로 방향 설정 .horizontal = 가로 방향 설정
.vertical = 세로 방향 설정 .vertical = 세로 방향 설정
@ -315,7 +303,6 @@ 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 = 추가된 시작 앱이 없습니다
@ -335,9 +322,7 @@ night-light = 야간 조명
.auto = 자동 (일몰부터 일출까지) .auto = 자동 (일몰부터 일출까지)
.desc = 따뜻한 색을 사용하여 블루라이트를 줄입니다 .desc = 따뜻한 색을 사용하여 블루라이트를 줄입니다
about = 정보 about = 정보
.desc = 장치 이름, 하드웨어 정보, 운영체제 기본
input-devices = 입력 장치 input-devices = 입력 장치
.desc = 입력 장치
custom-shortcuts = 사용자 정의 단축키 custom-shortcuts = 사용자 정의 단축키
.add = 단축키 추가 .add = 단축키 추가
.context = 사용자 정의 단축키 추가 .context = 사용자 정의 단축키 추가
@ -346,7 +331,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 = 비어있는 작업 공간을 자동으로 제거합니다.
@ -355,10 +340,9 @@ 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 =
@ -423,7 +407,6 @@ slow = 느리게
network-name = 네트워크 이름 network-name = 네트워크 이름
large = 크게 large = 크게
panel = 패널 panel = 패널
.desc = 메뉴와 애플릿을 위한 기본 시스템 바
confirm = 확인 confirm = 확인
auth-dialog = 인증 필요 auth-dialog = 인증 필요
.vpn-description = VPN 서비스를 위해 사용자 이름과 암호를 입력하세요. .vpn-description = VPN 서비스를 위해 사용자 이름과 암호를 입력하세요.
@ -445,7 +428,6 @@ 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 = 프로필 이미지 선택
@ -474,7 +456,6 @@ 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 = 초 표시
@ -506,7 +487,6 @@ 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 = 키 없음
@ -531,7 +511,6 @@ add-network = 네트워크 추가
.profile = 프로필 추가 .profile = 프로필 추가
touchpad = 터치패드 touchpad = 터치패드
.acceleration = 터치패드 가속 활성화 .acceleration = 터치패드 가속 활성화
.desc = 터치패드 속도, 클릭 옵션, 제스처
.speed = 터치패드 속도 .speed = 터치패드 속도
command = 명령 command = 명령
gestures = 제스처 gestures = 제스처
@ -547,7 +526,6 @@ panel-bottom = 하단
share = 네트워크 공유 share = 네트워크 공유
add = 추가 add = 추가
time = 시간 & 언어 time = 시간 & 언어
.desc = N/A
fill = 채우기 fill = 채우기
custom = 사용자 정의 custom = 사용자 정의
bluetooth-paired = 이전에 연결된 장치 bluetooth-paired = 이전에 연결된 장치
@ -660,12 +638,11 @@ 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 = 배경화면 이미지 선택
@ -692,7 +669,6 @@ 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 = 메일 클라이언트
@ -703,6 +679,7 @@ 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 = 자동 절전 모드
@ -719,3 +696,71 @@ 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,3 +813,4 @@ 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, logins empresariais .desc = Adicionar contas, IMAP e SMTP, sessões corporativas
# 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 das áreas de trabalho .workspaces = Abrir a visão geral dos espaços 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 = Áreas de trabalho workspaces = Espaços de trabalho
workspaces-behavior = Comportamento das áreas de trabalho workspaces-behavior = Comportamento dos espaços de trabalho
.dynamic = Áreas de trabalho dinâmicas .dynamic = Espaços de trabalho dinâmicos
.dynamic-desc = Remove automaticamente áreas de trabalho vazias. .dynamic-desc = Remove automaticamente espaços de trabalho vazios.
.fixed = Número fixo de áreas de trabalho .fixed = Número fixo de espaços de trabalho
.fixed-desc = Adicionar ou remover áreas de trabalho na visão geral. .fixed-desc = Adiciona ou remove espaços 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 todas as telas .span = Espaços de trabalho se expandem a todas as telas
.separate = Telas têm áreas de trabalho separadas .separate = Telas têm espaços de trabalho separados
workspaces-overview-thumbnails = Miniaturas da visão geral das áreas de trabalho workspaces-overview-thumbnails = Miniaturas da visão geral dos espaços de trabalho
.show-number = Mostrar o número da área de trabalho .show-number = Mostrar o número do espaço de trabalho
.show-name = Mostrar o nome da área de trabalho .show-name = Mostrar o nome do espaço de trabalho
workspaces-orientation = Orientação das áreas de trabalho workspaces-orientation = Orientação dos espaços 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 as áreas de trabalho .top-left-corner = Habilitar o canto superior esquerdo para exibir os espaços 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 a área de trabalho para a saída anterior migrate-workspace-prev = Migrar o espaço de trabalho para a saída anterior
migrate-workspace-next = Migrar a área de trabalho para a próxima saída migrate-workspace-next = Migrar o espaço de trabalho para a próxima saída
migrate-workspace = migrate-workspace =
Migrar a área de trabalho para a saída { $direction -> Migrar o espaço 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 a última área de trabalho .last-workspace = Focar o último espaço de trabalho
.prev-workspace = Focar a área de trabalho anterior .prev-workspace = Focar o espaço de trabalho anterior
.next-workspace = Focar a próxima área de trabalho .next-workspace = Focar o próximo espaço 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 a área de trabalho { $num } .workspace = Alternar para o espaço 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 uma área de trabalho { $direction -> Mover janela um espaço de trabalho { $direction ->
*[below] abaixo *[below] abaixo
[left] à esquerda [left] à esquerda
[right] à direita [right] à direita
[above] acima [above] acima
} }
.workspace-num = Mover janela para a área de trabalho { $num } .workspace-num = Mover janela para o espaço de trabalho { $num }
.prev-workspace = Mover janela para a área de trabalho anterior .prev-workspace = Mover janela para o espaço de trabalho anterior
.next-workspace = Mover janela para a próxima área de trabalho .next-workspace = Mover janela para o próximo espaço de trabalho
.last-workspace = Mover janela para a última área de trabalho .last-workspace = Mover janela para o último espaço 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 a área de trabalho anterior .send-to-prev-workspace = Mover janela para o espaço de trabalho anterior
.send-to-next-workspace = Mover janela para a próxima área de trabalho .send-to-next-workspace = Mover janela para o próximo espaço 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 das áreas de trabalho .workspace-overview = Abrir a visão geral dos espaços 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 áreas de trabalho switch-workspaces = Alternar entre espaços 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 das áreas de trabalho open-workspaces-view = Abrir a visão geral dos espaços 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 login. .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.
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 fazer login no sistema .user = Aplicativos que serão iniciados ao iniciar sessão
.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 = QR code inválido qr-code-unavailable = Código QR não disponível
network-name = Nome da rede network-name = Nome da rede
share = Compartilhar rede share = Compartilhar rede
scan-to-connect-description = Escaneie o QR code para se conectar a esta rede. scan-to-connect-description = Leia o código QR 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 HD sound-hd-audio = Áudio de alta definição
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 das áreas de trabalho workspaces-overview = Visão geral dos espaços 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 na inicialização do sistema xdg-entry-startup-apps-comment = Configurar aplicativos que serão executados ao iniciar sessão
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 = Dispositivos de entrada, alternância, entrada de caracteres especiais, atalhos xdg-entry-keyboard-comment = Fontes 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 áreas de trabalho xdg-entry-desktop-comment = Plano de fundo, aparência, painel, dock, gerenciamento de janelas e configurações de espaços 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;Área;Espaço;Trabalho;Orientação;Visão;Geral;Monitor;Tela; xdg-entry-workspaces-keywords = COSMIC;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 a lado;Super;Key; xdg-entry-window-management-keywords = COSMIC;Janela;Gerenciamento;Tiling;Lado;Super;Tecla;
xdg-entry-workspaces-comment = Orientação da área de trabalho, visão geral e comportamento com monitores múltiplos xdg-entry-workspaces-comment = Orientação dos espaços 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 = Áreas de Trabalho xdg-entry-workspaces = Espaços 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 e comportamento da área de trabalho xdg-entry-workspaces-comment = Orientação das áreas de trabalho, visão geral e comportamento com vários monitores
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 = Tecla Super super-key = Ação da 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,23 +226,22 @@ window-controls = Controlos de janela
## Desktop: Workspaces ## Desktop: Workspaces
workspaces = Áreas de trabalho workspaces = Áreas de trabalho
.desc = Definir número, comportamento e posição da área de trabalho. workspaces-behavior = Comportamento das áreas 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 expandem os ecrãs .span = Áreas de trabalho se expandem a todos 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 da área de trabalho workspaces-overview-thumbnails = Miniaturas da visão geral das áreas de trabalho
.show-number = Mostrar número da área de trabalho .show-number = Mostrar o número da área de trabalho
.show-name = Mostrar nome da área de trabalho .show-name = Mostrar o 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 as áreas de trabalho .top-left-corner = Ativar o canto superior esquerdo para exibir as áreas de trabalho
## Desktop: Display ## Desktop: Display
@ -456,7 +455,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
@ -481,7 +480,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 a última área de trabalho .last-workspace = Mover janela para o ú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
@ -504,8 +503,9 @@ 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 painel tátil .touchpad-toggle = Ativar ou desativar o 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,3 +852,10 @@ 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: 'static> Default for Section<Message> { impl<Message: Clone + '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: 'static>( pub fn unimplemented<'a, Message: Clone + '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>,