mirror of
https://github.com/outbackdingo/hyprcosmic-comp.git
synced 2026-08-25 07:10:25 +00:00
Fork of pop-os/cosmic-comp @ upstream
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
- [ ] I have disclosed use of any AI generated code in my commit messages.
|
||||
- If you are using an LLM, and do not fully understand the changes it is making to the code base, do not create a PR.
|
||||
- In our experience, AI generated code often results in overly complex code that lacks enough context for a proper fix or feature inclusion. This results in considerably longer code reviews. Due to this, AI authored or partially authored PRs may be closed without comment.
|
||||
- [ ] I understand these changes in full and will be able to respond to review comments.
|
||||
- [ ] My change is accurately described in the commit message.
|
||||
- [ ] My contribution is tested and working as described.
|
||||
- [ ] I have read the [Developer Certificate of Origin](https://developercertificate.org/) and certify my contribution under its conditions.
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
name: Continuous Integration
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
format:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: rustfmt
|
||||
- name: Cargo cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
|
||||
- name: Format
|
||||
run: cargo +stable fmt --all -- --check
|
||||
|
||||
clippy-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: clippy
|
||||
- name: Cargo cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
|
||||
- name: System dependencies
|
||||
run: sudo apt-get update; sudo apt-get install libudev-dev libgbm-dev libxkbcommon-dev libegl1-mesa-dev libwayland-dev libinput-dev libdbus-1-dev libsystemd-dev libseat-dev libdisplay-info-dev
|
||||
- name: Clippy
|
||||
run: cargo +stable clippy --all-features -- -D warnings
|
||||
|
||||
check-features:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: Cargo cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
|
||||
- name: System dependencies
|
||||
run: sudo apt-get update; sudo apt-get install libudev-dev libgbm-dev libxkbcommon-dev libegl1-mesa-dev libwayland-dev libinput-dev libdbus-1-dev libsystemd-dev libseat-dev libdisplay-info-dev
|
||||
- run: cargo +stable check --no-default-features
|
||||
- run: cargo +stable check --features debug
|
||||
- run: cargo +stable check --features profile-with-tracy
|
||||
- run: cargo +stable check --features profile-with-tracy-gpu
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v6
|
||||
- name: Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
- name: Cargo cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.cargo/registry
|
||||
~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
|
||||
- name: System dependencies
|
||||
run: sudo apt-get update; sudo apt-get install libudev-dev libgbm-dev libxkbcommon-dev libegl1-mesa-dev libwayland-dev libinput-dev libdbus-1-dev libsystemd-dev libdisplay-info-dev libpixman-1-dev meson ninja-build
|
||||
- name: Build cache
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: target
|
||||
key: ${{ runner.os }}-build-${{ hashFiles('**/Cargo.toml') }}
|
||||
- name: Build and install Libseat
|
||||
run: |
|
||||
wget https://git.sr.ht/~kennylevinsen/seatd/archive/0.9.1.tar.gz -O libseat-source.tar.gz
|
||||
tar xf libseat-source.tar.gz
|
||||
cd seatd-0.9.1
|
||||
meson setup -Dlibseat-builtin=enabled -Dserver=disabled -Dexamples=disabled -Dman-pages=disabled build .
|
||||
ninja -C build
|
||||
sudo meson install -C build
|
||||
sudo ldconfig
|
||||
- name: Test features
|
||||
env:
|
||||
RUST_BACKTRACE: full
|
||||
run: cargo test --all-features
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
debian/*
|
||||
!debian/cfs-tweak.service
|
||||
!debian/changelog
|
||||
!debian/control
|
||||
!debian/copyright
|
||||
!debian/cosmic-comp.install
|
||||
!debian/postinst
|
||||
!debian/rules
|
||||
!debian/source
|
||||
.cargo
|
||||
target
|
||||
vendor
|
||||
vendor.tar
|
||||
.vscode
|
||||
*.log
|
||||
/result
|
||||
Generated
+7219
File diff suppressed because it is too large
Load Diff
+147
@@ -0,0 +1,147 @@
|
||||
[package]
|
||||
authors = ["Victoria Brekenfeld"]
|
||||
edition = "2024"
|
||||
license = "GPL-3.0-only"
|
||||
name = "cosmic-comp"
|
||||
version = "1.0.0"
|
||||
rust-version = "1.93"
|
||||
|
||||
[workspace]
|
||||
members = ["cosmic-comp-config"]
|
||||
|
||||
[dependencies]
|
||||
anyhow = { version = "1.0.102", features = ["backtrace"] }
|
||||
bitflags = "2.11.0"
|
||||
calloop = { version = "0.14.4", features = ["executor", "stream"] }
|
||||
cosmic-comp-config = { path = "cosmic-comp-config", features = [
|
||||
"libdisplay-info",
|
||||
"output",
|
||||
] }
|
||||
cosmic-config = { git = "https://github.com/pop-os/libcosmic", features = [
|
||||
"calloop",
|
||||
"macro",
|
||||
] }
|
||||
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", rev = "160b086", default-features = false, features = [
|
||||
"server",
|
||||
] }
|
||||
cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon" }
|
||||
cosmic-settings-daemon-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", features = [
|
||||
"greeter",
|
||||
] }
|
||||
cosmic-text = { version = "0.19", features = [
|
||||
"shape-run-cache",
|
||||
] }
|
||||
libdisplay-info = "0.3.0"
|
||||
egui = { version = "0.31.1", optional = true }
|
||||
egui_plot = { version = "0.31.0", optional = true }
|
||||
i18n-embed = { version = "0.16", features = [
|
||||
"fluent-system",
|
||||
"desktop-requester",
|
||||
] }
|
||||
i18n-embed-fl = "0.10"
|
||||
iced_tiny_skia = { git = "https://github.com/pop-os/libcosmic" }
|
||||
iced_graphics = { git = "https://github.com/pop-os/libcosmic/", features = ["geometry"] }
|
||||
indexmap = "2.13"
|
||||
keyframe = "1.1.1"
|
||||
libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false }
|
||||
libsystemd = { version = "0.7", optional = true }
|
||||
log-panics = { version = "2", features = ["with-backtrace"] }
|
||||
ordered-float = "5.1"
|
||||
png = "0.18"
|
||||
regex = "1"
|
||||
ron = "0.12"
|
||||
rust-embed = { version = "8.11", features = ["debug-embed"] }
|
||||
sanitize-filename = "0.6.0"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
thiserror = "2.0.18"
|
||||
jiff = "0.2"
|
||||
tiny-skia = "0.11"
|
||||
tracing = { version = "0.1.44", features = [
|
||||
"max_level_debug",
|
||||
"release_max_level_info",
|
||||
] }
|
||||
tracing-journald = "0.3.2"
|
||||
tracing-subscriber = { version = "0.3.22", features = [
|
||||
"env-filter",
|
||||
"tracing-log",
|
||||
] }
|
||||
tracy-client = { version = "0.18.4", default-features = false }
|
||||
wayland-backend = "0.3.12"
|
||||
wayland-scanner = "0.31.8"
|
||||
xcursor = "0.3.10"
|
||||
xdg = "^3.0"
|
||||
xdg-user = "0.2.1"
|
||||
xkbcommon = "0.9"
|
||||
zbus = "5.14.0"
|
||||
profiling = { version = "1.0" }
|
||||
rustix = { version = "1.1.4", features = ["process"] }
|
||||
rand = "0.10"
|
||||
# CLI arguments
|
||||
clap_lex = "1.0"
|
||||
parking_lot = "0.12.5"
|
||||
logind-zbus = { version = "5.3.2", optional = true }
|
||||
futures-executor = { version = "0.3.32" }
|
||||
futures-util = "0.3.32"
|
||||
glam = { version = "0.33", default-features = false, features = ["std"] }
|
||||
smallvec = "1.15.2"
|
||||
|
||||
[dependencies.id_tree]
|
||||
branch = "feature/copy_clone"
|
||||
git = "https://github.com/Drakulix/id-tree.git"
|
||||
|
||||
[dependencies.smithay]
|
||||
version = "0.7.0"
|
||||
default-features = false
|
||||
features = [
|
||||
"backend_drm",
|
||||
"backend_gbm",
|
||||
"backend_egl",
|
||||
"backend_libinput",
|
||||
"backend_session_libseat",
|
||||
"backend_udev",
|
||||
"backend_winit",
|
||||
"backend_vulkan",
|
||||
"backend_x11",
|
||||
"desktop",
|
||||
"renderer_glow",
|
||||
"renderer_multi",
|
||||
"renderer_pixman",
|
||||
"wayland_frontend",
|
||||
"xwayland",
|
||||
]
|
||||
|
||||
[dependencies.smithay-egui]
|
||||
version = "0.2.0"
|
||||
features = ["svg"]
|
||||
optional = true
|
||||
|
||||
[features]
|
||||
debug = ["egui", "egui_plot", "smithay-egui", "anyhow/backtrace"]
|
||||
default = ["systemd"]
|
||||
logind = ["logind-zbus"]
|
||||
systemd = ["libsystemd", "logind"]
|
||||
profile-with-tracy = ["profiling/profile-with-tracy", "tracy-client/default"]
|
||||
profile-with-tracy-gpu = ["profile-with-tracy", "smithay/tracy_gpu_profiling"]
|
||||
|
||||
[profile.dev.package.tiny-skia]
|
||||
opt-level = 2
|
||||
|
||||
[profile.dev.package.rustybuzz]
|
||||
opt-level = 2
|
||||
|
||||
[profile.dev.package.ttf-parser]
|
||||
opt-level = 2
|
||||
|
||||
[profile.fastdebug]
|
||||
debug = true
|
||||
inherits = "release"
|
||||
|
||||
[profile.release]
|
||||
lto = "fat"
|
||||
|
||||
[patch."https://github.com/pop-os/cosmic-protocols"]
|
||||
cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" }
|
||||
|
||||
[patch.crates-io]
|
||||
smithay = { git = "https://github.com/smithay/smithay.git", rev = "1ed69cb" }
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -0,0 +1,67 @@
|
||||
export prefix ?= /usr
|
||||
sysconfdir ?= /etc
|
||||
bindir = $(prefix)/bin
|
||||
libdir = $(prefix)/lib
|
||||
sharedir = $(prefix)/share
|
||||
|
||||
BINARY = cosmic-comp
|
||||
CARGO_TARGET_DIR ?= target
|
||||
TARGET = debug
|
||||
DEBUG ?= 0
|
||||
|
||||
.PHONY = all clean install uninstall vendor
|
||||
|
||||
ifeq ($(DEBUG),0)
|
||||
TARGET = release
|
||||
ARGS += --release
|
||||
endif
|
||||
|
||||
VENDOR ?= 0
|
||||
ifneq ($(VENDOR),0)
|
||||
ARGS += --offline --locked
|
||||
endif
|
||||
|
||||
TARGET_BIN="$(DESTDIR)$(bindir)/$(BINARY)"
|
||||
|
||||
KEYBINDINGS_CONF="$(DESTDIR)$(sharedir)/cosmic/com.system76.CosmicSettings.Shortcuts/v1/defaults"
|
||||
TILING_EXCEPTIONS_CONF="$(DESTDIR)$(sharedir)/cosmic/com.system76.CosmicSettings.WindowRules/v1/tiling_exception_defaults"
|
||||
|
||||
all: extract-vendor
|
||||
cargo build $(ARGS)
|
||||
|
||||
clean:
|
||||
cargo clean
|
||||
|
||||
distclean:
|
||||
rm -rf .cargo vendor vendor.tar target
|
||||
|
||||
vendor:
|
||||
mkdir -p .cargo
|
||||
cargo vendor | head -n -1 > .cargo/config
|
||||
echo 'directory = "vendor"' >> .cargo/config
|
||||
[ -n "$(SOURCE_GIT_HASH)" ] && printf '\n[env]\nGIT_HASH = "%s"\n' "$(SOURCE_GIT_HASH)" >> .cargo/config || true
|
||||
tar pcf vendor.tar vendor
|
||||
rm -rf vendor
|
||||
|
||||
extract-vendor:
|
||||
ifeq ($(VENDOR),1)
|
||||
rm -rf vendor; tar pxf vendor.tar
|
||||
endif
|
||||
|
||||
install:
|
||||
install -Dm0755 "$(CARGO_TARGET_DIR)/$(TARGET)/$(BINARY)" "$(TARGET_BIN)"
|
||||
install -Dm0644 "data/keybindings.ron" "$(KEYBINDINGS_CONF)"
|
||||
install -Dm0644 "data/tiling-exceptions.ron" "$(TILING_EXCEPTIONS_CONF)"
|
||||
|
||||
install-bare-session: install
|
||||
install -Dm0644 "data/cosmic.desktop" "$(DESTDIR)$(sharedir)/wayland-sessions/cosmic.desktop"
|
||||
install -Dm0644 "data/cosmic-session.target" "$(DESTDIR)$(libdir)/systemd/user/cosmic-session.target"
|
||||
install -Dm0644 "data/cosmic-session-pre.target" "$(DESTDIR)$(libdir)/systemd/user/cosmic-session-pre.target"
|
||||
install -Dm0644 "data/cosmic-comp.service" "$(DESTDIR)$(libdir)/systemd/user/cosmic-comp.service"
|
||||
install -Dm0755 "data/cosmic-service" "$(DESTDIR)/$(bindir)/cosmic-service"
|
||||
|
||||
uninstall:
|
||||
rm "$(TARGET_BIN)" "$(KEYBINDINGS_CONF)"
|
||||
|
||||
uninstall-bare-session:
|
||||
rm "$(DESTDIR)$(sharedir)/wayland-sessions/cosmic.desktop"
|
||||
@@ -0,0 +1,9 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
use std::process::Command;
|
||||
|
||||
fn main() {
|
||||
if let Ok(output) = Command::new("git").args(["rev-parse", "HEAD"]).output() {
|
||||
let git_hash = String::from_utf8(output.stdout).unwrap();
|
||||
println!("cargo:rustc-env=GIT_HASH={}", git_hash);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
[package]
|
||||
name = "cosmic-comp-config"
|
||||
version = "1.0.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
cosmic-config = { git = "https://github.com/pop-os/libcosmic/" }
|
||||
cosmic-randr-shell = { git = "https://github.com/pop-os/cosmic-randr/", optional = true }
|
||||
input = "0.10.0"
|
||||
libdisplay-info = { version = "0.3.0", optional = true }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
ron = { version = "0.12", optional = true }
|
||||
tracing = { version = "0.1.44", features = [
|
||||
"max_level_debug",
|
||||
"release_max_level_info",
|
||||
], optional = true }
|
||||
|
||||
[features]
|
||||
default = []
|
||||
output = ["ron", "tracing"]
|
||||
randr = ["cosmic-randr-shell", "output"]
|
||||
@@ -0,0 +1,216 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
pub use input::{AccelProfile, ClickMethod, ScrollMethod, TapButtonMap};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
// Note: For the following values, None is used to represent the system default
|
||||
// Configuration for input devices
|
||||
#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
pub struct InputConfig {
|
||||
pub state: DeviceState,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub acceleration: Option<AccelConfig>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub calibration: Option<[f32; 6]>,
|
||||
#[serde(with = "ClickMethodDef")]
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub click_method: Option<ClickMethod>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub disable_while_typing: Option<bool>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub left_handed: Option<bool>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub middle_button_emulation: Option<bool>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub rotation_angle: Option<u32>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub scroll_config: Option<ScrollConfig>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub tap_config: Option<TapConfig>,
|
||||
#[serde(skip_serializing_if = "Option::is_none", default)]
|
||||
pub map_to_output: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
pub struct AccelConfig {
|
||||
#[serde(with = "AccelProfileDef")]
|
||||
pub profile: Option<AccelProfile>,
|
||||
pub speed: f64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
pub struct ScrollConfig {
|
||||
#[serde(with = "ScrollMethodDef")]
|
||||
pub method: Option<ScrollMethod>,
|
||||
pub natural_scroll: Option<bool>,
|
||||
pub scroll_button: Option<u32>,
|
||||
pub scroll_factor: Option<f64>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
|
||||
pub enum DeviceState {
|
||||
#[default]
|
||||
Enabled,
|
||||
Disabled,
|
||||
DisabledOnExternalMouse,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum TouchpadOverride {
|
||||
#[default]
|
||||
None,
|
||||
ForceDisable,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub struct TapConfig {
|
||||
pub enabled: bool,
|
||||
#[serde(with = "TapButtonMapDef")]
|
||||
pub button_map: Option<TapButtonMap>,
|
||||
pub drag: bool,
|
||||
pub drag_lock: bool,
|
||||
}
|
||||
|
||||
mod ClickMethodDef {
|
||||
use input::ClickMethod as ClickMethodOrig;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum ClickMethod {
|
||||
ButtonAreas,
|
||||
Clickfinger,
|
||||
}
|
||||
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<ClickMethodOrig>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let o = Option::deserialize(deserializer)?;
|
||||
Ok(o.map(|x| match x {
|
||||
ClickMethod::ButtonAreas => ClickMethodOrig::ButtonAreas,
|
||||
ClickMethod::Clickfinger => ClickMethodOrig::Clickfinger,
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn serialize<S>(arg: &Option<ClickMethodOrig>, ser: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let arg = match arg {
|
||||
Some(ClickMethodOrig::ButtonAreas) => Some(ClickMethod::ButtonAreas),
|
||||
Some(ClickMethodOrig::Clickfinger) => Some(ClickMethod::Clickfinger),
|
||||
Some(_) | None => None,
|
||||
};
|
||||
Option::serialize(&arg, ser)
|
||||
}
|
||||
}
|
||||
|
||||
mod AccelProfileDef {
|
||||
use input::AccelProfile as AccelProfileOrig;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
enum AccelProfile {
|
||||
Flat,
|
||||
Adaptive,
|
||||
}
|
||||
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<AccelProfileOrig>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let o = Option::deserialize(deserializer)?;
|
||||
Ok(o.map(|x| match x {
|
||||
AccelProfile::Flat => AccelProfileOrig::Flat,
|
||||
AccelProfile::Adaptive => AccelProfileOrig::Adaptive,
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn serialize<S>(arg: &Option<AccelProfileOrig>, ser: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let arg = match arg {
|
||||
Some(AccelProfileOrig::Flat) => Some(AccelProfile::Flat),
|
||||
Some(AccelProfileOrig::Adaptive) => Some(AccelProfile::Adaptive),
|
||||
Some(_) | None => None,
|
||||
};
|
||||
Option::serialize(&arg, ser)
|
||||
}
|
||||
}
|
||||
|
||||
mod ScrollMethodDef {
|
||||
use input::ScrollMethod as ScrollMethodOrig;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum ScrollMethod {
|
||||
NoScroll,
|
||||
TwoFinger,
|
||||
Edge,
|
||||
OnButtonDown,
|
||||
}
|
||||
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<ScrollMethodOrig>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let o = Option::deserialize(deserializer)?;
|
||||
Ok(o.map(|x| match x {
|
||||
ScrollMethod::NoScroll => ScrollMethodOrig::NoScroll,
|
||||
ScrollMethod::TwoFinger => ScrollMethodOrig::TwoFinger,
|
||||
ScrollMethod::Edge => ScrollMethodOrig::Edge,
|
||||
ScrollMethod::OnButtonDown => ScrollMethodOrig::OnButtonDown,
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn serialize<S>(arg: &Option<ScrollMethodOrig>, ser: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let arg = match arg {
|
||||
Some(ScrollMethodOrig::NoScroll) => Some(ScrollMethod::NoScroll),
|
||||
Some(ScrollMethodOrig::TwoFinger) => Some(ScrollMethod::TwoFinger),
|
||||
Some(ScrollMethodOrig::Edge) => Some(ScrollMethod::Edge),
|
||||
Some(ScrollMethodOrig::OnButtonDown) => Some(ScrollMethod::OnButtonDown),
|
||||
Some(_) | None => None,
|
||||
};
|
||||
Option::serialize(&arg, ser)
|
||||
}
|
||||
}
|
||||
|
||||
mod TapButtonMapDef {
|
||||
use input::TapButtonMap as TapButtonMapOrig;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub enum TapButtonMap {
|
||||
LeftRightMiddle,
|
||||
LeftMiddleRight,
|
||||
}
|
||||
|
||||
pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<TapButtonMapOrig>, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
let o = Option::deserialize(deserializer)?;
|
||||
Ok(o.map(|x| match x {
|
||||
TapButtonMap::LeftRightMiddle => TapButtonMapOrig::LeftRightMiddle,
|
||||
TapButtonMap::LeftMiddleRight => TapButtonMapOrig::LeftMiddleRight,
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn serialize<S>(arg: &Option<TapButtonMapOrig>, ser: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let arg = match arg {
|
||||
Some(TapButtonMapOrig::LeftRightMiddle) => Some(TapButtonMap::LeftRightMiddle),
|
||||
Some(TapButtonMapOrig::LeftMiddleRight) => Some(TapButtonMap::LeftMiddleRight),
|
||||
Some(_) | None => None,
|
||||
};
|
||||
Option::serialize(&arg, ser)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,249 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use cosmic_config::{CosmicConfigEntry, cosmic_config_derive::CosmicConfigEntry};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::input::TouchpadOverride;
|
||||
|
||||
pub mod input;
|
||||
#[cfg(feature = "output")]
|
||||
pub mod output;
|
||||
pub mod workspace;
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
pub struct EdidProduct {
|
||||
pub manufacturer: [char; 3],
|
||||
pub product: u16,
|
||||
pub serial: Option<u32>,
|
||||
pub manufacture_week: i32,
|
||||
pub manufacture_year: i32,
|
||||
pub model_year: Option<i32>,
|
||||
}
|
||||
|
||||
#[cfg(feature = "libdisplay-info")]
|
||||
impl From<libdisplay_info::edid::VendorProduct> for EdidProduct {
|
||||
fn from(vp: libdisplay_info::edid::VendorProduct) -> Self {
|
||||
Self {
|
||||
manufacturer: vp.manufacturer,
|
||||
product: vp.product,
|
||||
serial: vp.serial,
|
||||
manufacture_week: vp.manufacture_week,
|
||||
manufacture_year: vp.manufacture_year,
|
||||
model_year: vp.model_year,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
|
||||
pub struct KeyboardConfig {
|
||||
/// Boot state for numlock
|
||||
pub numlock_state: NumlockState,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum NumlockState {
|
||||
BootOn,
|
||||
#[default]
|
||||
BootOff,
|
||||
LastBoot,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub struct AppearanceConfig {
|
||||
pub clip_floating_windows: bool,
|
||||
pub clip_tiled_windows: bool,
|
||||
pub shadow_tiled_windows: bool,
|
||||
}
|
||||
|
||||
impl Default for AppearanceConfig {
|
||||
fn default() -> Self {
|
||||
AppearanceConfig {
|
||||
clip_floating_windows: true,
|
||||
clip_tiled_windows: true,
|
||||
shadow_tiled_windows: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, CosmicConfigEntry)]
|
||||
#[version = 1]
|
||||
pub struct CosmicCompConfig {
|
||||
pub workspaces: workspace::WorkspaceConfig,
|
||||
pub pinned_workspaces: Vec<workspace::PinnedWorkspace>,
|
||||
pub input_default: input::InputConfig,
|
||||
pub input_touchpad: input::InputConfig,
|
||||
pub input_touchpad_override: TouchpadOverride,
|
||||
pub input_devices: HashMap<String, input::InputConfig>,
|
||||
pub xkb_config: XkbConfig,
|
||||
pub keyboard_config: KeyboardConfig,
|
||||
/// Autotiling enabled
|
||||
pub autotile: bool,
|
||||
/// Determines the behavior of the autotile variable
|
||||
/// If set to Global, autotile applies to all windows in all workspaces
|
||||
/// If set to PerWorkspace, autotile only applies to new windows, and new workspaces
|
||||
pub autotile_behavior: TileBehavior,
|
||||
/// Active hint enabled
|
||||
pub active_hint: bool,
|
||||
/// Enables changing keyboard focus to windows when the cursor passes into them
|
||||
pub focus_follows_cursor: bool,
|
||||
/// Enables warping the cursor to the focused window when focus changes due to keyboard input
|
||||
pub cursor_follows_focus: bool,
|
||||
/// The delay in milliseconds before focus follows mouse (if enabled)
|
||||
pub focus_follows_cursor_delay: u64,
|
||||
/// Let X11 applications scale themselves
|
||||
pub descale_xwayland: XwaylandDescaling,
|
||||
/// Let X11 applications snoop on certain key-presses to allow for global shortcuts
|
||||
pub xwayland_eavesdropping: XwaylandEavesdropping,
|
||||
/// The threshold before windows snap themselves to output edges
|
||||
pub edge_snap_threshold: u32,
|
||||
pub accessibility_zoom: ZoomConfig,
|
||||
pub appearance_settings: AppearanceConfig,
|
||||
/// Hide the cursor after this many seconds of pointer inactivity (None disables)
|
||||
pub cursor_hide_timeout: Option<u32>,
|
||||
pub activation_policy: ActivationPolicy,
|
||||
}
|
||||
|
||||
impl Default for CosmicCompConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
workspaces: Default::default(),
|
||||
pinned_workspaces: Vec::new(),
|
||||
input_default: Default::default(),
|
||||
// By default, enable tap-to-click and disable-while-typing.
|
||||
input_touchpad: input::InputConfig {
|
||||
state: input::DeviceState::Enabled,
|
||||
click_method: Some(input::ClickMethod::Clickfinger),
|
||||
disable_while_typing: Some(true),
|
||||
tap_config: Some(input::TapConfig {
|
||||
enabled: true,
|
||||
button_map: Some(input::TapButtonMap::LeftRightMiddle),
|
||||
drag: true,
|
||||
drag_lock: false,
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
input_touchpad_override: Default::default(),
|
||||
input_devices: Default::default(),
|
||||
xkb_config: Default::default(),
|
||||
keyboard_config: Default::default(),
|
||||
autotile: Default::default(),
|
||||
autotile_behavior: Default::default(),
|
||||
active_hint: true,
|
||||
focus_follows_cursor: false,
|
||||
cursor_follows_focus: false,
|
||||
focus_follows_cursor_delay: 250,
|
||||
descale_xwayland: XwaylandDescaling::Fractional,
|
||||
xwayland_eavesdropping: XwaylandEavesdropping::default(),
|
||||
edge_snap_threshold: 0,
|
||||
accessibility_zoom: ZoomConfig::default(),
|
||||
appearance_settings: AppearanceConfig::default(),
|
||||
cursor_hide_timeout: None,
|
||||
activation_policy: ActivationPolicy::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Copy, Clone, PartialEq, Deserialize, Serialize)]
|
||||
pub enum TileBehavior {
|
||||
#[default]
|
||||
Global,
|
||||
PerWorkspace,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
|
||||
pub struct XkbConfig {
|
||||
pub rules: String,
|
||||
pub model: String,
|
||||
pub layout: String,
|
||||
pub variant: String,
|
||||
pub options: Option<String>,
|
||||
#[serde(default = "default_repeat_delay")]
|
||||
pub repeat_delay: u32,
|
||||
#[serde(default = "default_repeat_rate")]
|
||||
pub repeat_rate: u32,
|
||||
}
|
||||
|
||||
impl Default for XkbConfig {
|
||||
fn default() -> XkbConfig {
|
||||
XkbConfig {
|
||||
rules: String::new(),
|
||||
model: String::new(),
|
||||
layout: String::new(),
|
||||
variant: String::new(),
|
||||
options: None,
|
||||
repeat_delay: default_repeat_delay(),
|
||||
repeat_rate: default_repeat_rate(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn default_repeat_rate() -> u32 {
|
||||
25
|
||||
}
|
||||
|
||||
fn default_repeat_delay() -> u32 {
|
||||
600
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
|
||||
pub struct ZoomConfig {
|
||||
pub start_on_login: bool,
|
||||
pub show_overlay: bool,
|
||||
pub increment: u32,
|
||||
pub view_moves: ZoomMovement,
|
||||
pub enable_mouse_zoom_shortcuts: bool,
|
||||
}
|
||||
|
||||
impl Default for ZoomConfig {
|
||||
fn default() -> Self {
|
||||
ZoomConfig {
|
||||
start_on_login: false,
|
||||
show_overlay: true,
|
||||
increment: 50,
|
||||
view_moves: ZoomMovement::Continuously,
|
||||
enable_mouse_zoom_shortcuts: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
|
||||
pub enum ZoomMovement {
|
||||
OnEdge,
|
||||
Centered,
|
||||
Continuously,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
|
||||
pub struct XwaylandEavesdropping {
|
||||
pub keyboard: EavesdroppingKeyboardMode,
|
||||
pub pointer: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
|
||||
pub enum EavesdroppingKeyboardMode {
|
||||
#[default]
|
||||
None,
|
||||
Modifiers,
|
||||
Combinations,
|
||||
All,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialEq, Eq)]
|
||||
pub enum ActivationPolicy {
|
||||
#[default]
|
||||
Focus,
|
||||
FocusIfActiveWorkspace,
|
||||
Urgent,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialEq, Eq)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum XwaylandDescaling {
|
||||
#[serde(rename = "true")]
|
||||
Enabled,
|
||||
#[serde(rename = "false")]
|
||||
Disabled,
|
||||
#[default]
|
||||
Fractional,
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{collections::HashMap, fs::OpenOptions, path::Path};
|
||||
use tracing::{error, warn};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum OutputState {
|
||||
#[serde(rename = "true")]
|
||||
Enabled,
|
||||
#[serde(rename = "false")]
|
||||
Disabled,
|
||||
Mirroring(String),
|
||||
}
|
||||
|
||||
fn default_state() -> OutputState {
|
||||
OutputState::Enabled
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
pub enum AdaptiveSync {
|
||||
#[serde(rename = "true")]
|
||||
Enabled,
|
||||
#[serde(rename = "false")]
|
||||
Disabled,
|
||||
Force,
|
||||
}
|
||||
|
||||
fn default_sync() -> AdaptiveSync {
|
||||
AdaptiveSync::Enabled
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||
pub struct OutputsConfig {
|
||||
pub config: HashMap<Vec<OutputInfo>, Vec<OutputConfig>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||
pub struct OutputConfig {
|
||||
pub mode: ((i32, i32), Option<u32>),
|
||||
#[serde(default = "default_sync")]
|
||||
pub vrr: AdaptiveSync,
|
||||
pub scale: f64,
|
||||
pub transform: TransformDef,
|
||||
pub position: (u32, u32),
|
||||
#[serde(default = "default_state")]
|
||||
pub enabled: OutputState,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
pub max_bpc: Option<u32>,
|
||||
#[serde(default)]
|
||||
pub xwayland_primary: bool,
|
||||
}
|
||||
|
||||
impl Default for OutputConfig {
|
||||
fn default() -> OutputConfig {
|
||||
OutputConfig {
|
||||
mode: ((0, 0), None),
|
||||
vrr: AdaptiveSync::Enabled,
|
||||
scale: 1.0,
|
||||
transform: TransformDef::Normal,
|
||||
position: (0, 0),
|
||||
enabled: OutputState::Enabled,
|
||||
max_bpc: None,
|
||||
xwayland_primary: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
pub struct OutputInfo {
|
||||
pub connector: String,
|
||||
pub make: String,
|
||||
pub model: String,
|
||||
}
|
||||
|
||||
pub fn load_outputs(path: Option<impl AsRef<Path>>) -> OutputsConfig {
|
||||
if let Some(path) = path.as_ref() {
|
||||
let path: &Path = path.as_ref();
|
||||
if path.exists() {
|
||||
match ron::de::from_reader::<_, OutputsConfig>(
|
||||
OpenOptions::new().read(true).open(path).unwrap(),
|
||||
) {
|
||||
Ok(mut config) => {
|
||||
for (info, config) in config.config.iter_mut() {
|
||||
let config_clone = config.clone();
|
||||
for conf in config.iter_mut() {
|
||||
if let OutputState::Mirroring(conn) = &conf.enabled {
|
||||
if let Some((j, _)) = info
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find(|(_, info)| &info.connector == conn)
|
||||
{
|
||||
if config_clone[j].enabled != OutputState::Enabled {
|
||||
warn!(
|
||||
"Invalid Mirroring tag, overriding with `Enabled` instead"
|
||||
);
|
||||
conf.enabled = OutputState::Enabled;
|
||||
}
|
||||
} else {
|
||||
warn!(
|
||||
"Invalid Mirroring tag, overriding with `Enabled` instead"
|
||||
);
|
||||
conf.enabled = OutputState::Enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}
|
||||
Err(err) => {
|
||||
warn!(?err, "Failed to read output_config, resetting..");
|
||||
if let Err(err) = std::fs::remove_file(path) {
|
||||
error!(?err, "Failed to remove output_config.");
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
OutputsConfig {
|
||||
config: HashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum TransformDef {
|
||||
Normal,
|
||||
_90,
|
||||
_180,
|
||||
_270,
|
||||
Flipped,
|
||||
Flipped90,
|
||||
Flipped180,
|
||||
Flipped270,
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
/// Internal output configurations used by cosmic-comp
|
||||
pub mod comp;
|
||||
|
||||
#[cfg(feature = "randr")]
|
||||
/// cosmic-randr style output configurations
|
||||
pub mod randr;
|
||||
@@ -0,0 +1,95 @@
|
||||
use std::path::Path;
|
||||
|
||||
use cosmic_randr_shell::{AdaptiveSyncState, List};
|
||||
|
||||
use crate::output::comp::OutputState;
|
||||
|
||||
pub struct CompList {
|
||||
infos: Vec<super::comp::OutputInfo>,
|
||||
outputs: Vec<super::comp::OutputConfig>,
|
||||
}
|
||||
|
||||
impl From<CompList> for cosmic_randr_shell::List {
|
||||
fn from(CompList { infos, outputs }: CompList) -> cosmic_randr_shell::List {
|
||||
let mut list = cosmic_randr_shell::List::default();
|
||||
for (info, output) in infos.into_iter().zip(outputs.into_iter()) {
|
||||
let current = list.modes.insert(cosmic_randr_shell::Mode {
|
||||
size: (output.mode.0.0 as u32, output.mode.0.1 as u32),
|
||||
refresh_rate: output.mode.1.unwrap_or_default(),
|
||||
// XXX not in config as far as i can tell
|
||||
preferred: false,
|
||||
});
|
||||
let modes = vec![current];
|
||||
|
||||
// for mode in output. {}
|
||||
list.outputs.insert(cosmic_randr_shell::Output {
|
||||
name: info.connector,
|
||||
enabled: !matches!(output.enabled, OutputState::Disabled),
|
||||
mirroring: match output.enabled {
|
||||
OutputState::Mirroring(m) => Some(m),
|
||||
_ => None,
|
||||
},
|
||||
make: Some(info.make).filter(|make| make != "Unknown"),
|
||||
model: if info.model.as_str() == "Unknown" {
|
||||
String::new()
|
||||
} else {
|
||||
info.model
|
||||
},
|
||||
position: (output.position.0 as i32, output.position.1 as i32),
|
||||
scale: output.scale,
|
||||
transform: Some(match output.transform {
|
||||
crate::output::comp::TransformDef::Normal => {
|
||||
cosmic_randr_shell::Transform::Normal
|
||||
}
|
||||
crate::output::comp::TransformDef::_90 => {
|
||||
cosmic_randr_shell::Transform::Rotate90
|
||||
}
|
||||
crate::output::comp::TransformDef::_180 => {
|
||||
cosmic_randr_shell::Transform::Rotate180
|
||||
}
|
||||
crate::output::comp::TransformDef::_270 => {
|
||||
cosmic_randr_shell::Transform::Rotate270
|
||||
}
|
||||
crate::output::comp::TransformDef::Flipped => {
|
||||
cosmic_randr_shell::Transform::Flipped
|
||||
}
|
||||
crate::output::comp::TransformDef::Flipped90 => {
|
||||
cosmic_randr_shell::Transform::Flipped90
|
||||
}
|
||||
crate::output::comp::TransformDef::Flipped180 => {
|
||||
cosmic_randr_shell::Transform::Flipped180
|
||||
}
|
||||
crate::output::comp::TransformDef::Flipped270 => {
|
||||
cosmic_randr_shell::Transform::Flipped270
|
||||
}
|
||||
}),
|
||||
modes,
|
||||
current: Some(current),
|
||||
adaptive_sync: Some(match output.vrr {
|
||||
crate::output::comp::AdaptiveSync::Enabled => AdaptiveSyncState::Auto,
|
||||
crate::output::comp::AdaptiveSync::Disabled => AdaptiveSyncState::Disabled,
|
||||
crate::output::comp::AdaptiveSync::Force => AdaptiveSyncState::Always,
|
||||
}),
|
||||
xwayland_primary: Some(output.xwayland_primary),
|
||||
// XXX no physical output size in the config
|
||||
physical: (0, 0),
|
||||
adaptive_sync_availability: None,
|
||||
serial_number: String::new(),
|
||||
});
|
||||
}
|
||||
|
||||
list
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_outputs(path: Option<impl AsRef<Path>>) -> Vec<List> {
|
||||
let output_config = crate::output::comp::load_outputs(path);
|
||||
output_config
|
||||
.config
|
||||
.into_iter()
|
||||
.map(|(infos, outputs)| {
|
||||
let comp_config = CompList { infos, outputs };
|
||||
List::from(comp_config)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::EdidProduct;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct WorkspaceConfig {
|
||||
pub workspace_mode: WorkspaceMode,
|
||||
#[serde(default)]
|
||||
pub workspace_layout: WorkspaceLayout,
|
||||
#[serde(default)]
|
||||
pub action_on_typing: Action,
|
||||
#[serde(default = "default_wraparound")]
|
||||
pub workspace_wraparound: bool,
|
||||
}
|
||||
|
||||
fn default_wraparound() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
impl Default for WorkspaceConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
workspace_mode: WorkspaceMode::default(),
|
||||
workspace_layout: WorkspaceLayout::default(),
|
||||
action_on_typing: Action::default(),
|
||||
workspace_wraparound: default_wraparound(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum WorkspaceMode {
|
||||
#[default]
|
||||
OutputBound,
|
||||
Global,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum WorkspaceLayout {
|
||||
#[default]
|
||||
Vertical,
|
||||
Horizontal,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum Action {
|
||||
#[default]
|
||||
None,
|
||||
OpenLauncher,
|
||||
OpenApplications,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct OutputMatch {
|
||||
pub name: String,
|
||||
pub edid: Option<EdidProduct>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct PinnedWorkspace {
|
||||
pub output: OutputMatch,
|
||||
pub tiling_enabled: bool,
|
||||
pub id: Option<String>,
|
||||
pub name: Option<String>,
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
[Unit]
|
||||
Description=Cosmic wayland compositor
|
||||
BindsTo=cosmic-session.target
|
||||
Wants=cosmic-session-pre.target
|
||||
After=cosmic-session-pre.target
|
||||
Before=cosmic-session.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/usr/bin/cosmic-comp
|
||||
Restart=never
|
||||
ExecStopPost=/usr/bin/systemctl --user unset-environment DISPLAY WAYLAND_DISPLAY
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# From: https://people.debian.org/~mpitt/systemd.conf-2016-graphical-session.pdf
|
||||
|
||||
# robustness: if the previous graphical session left some failed units,
|
||||
# reset them so that they don't break this startup
|
||||
for unit in $(systemctl --user --no-legend --state=failed --plain list-units | cut -f1 -d' '); do
|
||||
partof="$(systemctl --user show -p PartOf --value "$unit")"
|
||||
for target in cosmic-session.target graphical-session.target; do
|
||||
if [ "$partof" = "$target" ]; then
|
||||
systemctl --user reset-failed "$unit"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# /etc/profile contains a lot of important environment variables
|
||||
source /etc/profile
|
||||
|
||||
export XDG_CURRENT_DESKTOP=cosmic
|
||||
|
||||
# save environment variables that will be added to systemd
|
||||
new_env=$(systemctl --user show-environment | cut -d'=' -f 1 | sort | comm -13 - <(env | cut -d'=' -f 1 | sort))
|
||||
|
||||
# import environment variables from the login manager
|
||||
systemctl --user import-environment
|
||||
|
||||
# then start the service
|
||||
systemctl --wait --user start cosmic-comp.service
|
||||
|
||||
# cleanup environment
|
||||
systemctl --user unset-environment $new_env
|
||||
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=Cosmic session early services
|
||||
Documentation=man:systemd.special(7)
|
||||
RefuseManualStart=yes
|
||||
StopWhenUnneeded=yes
|
||||
BindsTo=graphical-session-pre.target
|
||||
Before=graphical-session-pre.target
|
||||
Before=cosmic-session.target
|
||||
@@ -0,0 +1,7 @@
|
||||
[Unit]
|
||||
Description=Cosmic session
|
||||
Documentation=man:systemd.special(7)
|
||||
RefuseManualStart=yes
|
||||
StopWhenUnneeded=yes
|
||||
BindsTo=graphical-session.target
|
||||
Before=graphical-session.target
|
||||
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Name=Cosmic
|
||||
Commment=This session logs you into Cosmic
|
||||
Commment[sv]=Denna session loggar in dig till Cosmic
|
||||
Exec=/usr/bin/cosmic-service
|
||||
Type=Application
|
||||
DesktopNames=pop:COSMIC
|
||||
X-GDM-SessionRegisters=false
|
||||
@@ -0,0 +1,128 @@
|
||||
{
|
||||
(modifiers: [Super, Alt], key: "Escape"): Terminate,
|
||||
(modifiers: [Super, Shift], key: "Escape"): System(LogOut),
|
||||
(modifiers: [Super, Ctrl], key: "Escape"): Debug,
|
||||
(modifiers: [Super], key: "Escape"): System(LockScreen),
|
||||
(modifiers: [Super], key: "q"): Close,
|
||||
(modifiers: [Alt], key: "F4"): Close,
|
||||
|
||||
(modifiers: [Super], key: "Left"): Focus(Left),
|
||||
(modifiers: [Super], key: "Right"): Focus(Right),
|
||||
(modifiers: [Super], key: "Up"): Focus(Up),
|
||||
(modifiers: [Super], key: "Down"): Focus(Down),
|
||||
(modifiers: [Super], key: "h"): Focus(Left),
|
||||
(modifiers: [Super], key: "j"): Focus(Down),
|
||||
(modifiers: [Super], key: "k"): Focus(Up),
|
||||
(modifiers: [Super], key: "l"): Focus(Right),
|
||||
(modifiers: [Super], key: "u"): Focus(Out),
|
||||
(modifiers: [Super], key: "i"): Focus(In),
|
||||
(modifiers: [Super, Shift], key: "Left"): Move(Left),
|
||||
(modifiers: [Super, Shift], key: "Right"): Move(Right),
|
||||
(modifiers: [Super, Shift], key: "Up"): Move(Up),
|
||||
(modifiers: [Super, Shift], key: "Down"): Move(Down),
|
||||
(modifiers: [Super, Shift], key: "h"): Move(Left),
|
||||
(modifiers: [Super, Shift], key: "j"): Move(Down),
|
||||
(modifiers: [Super, Shift], key: "k"): Move(Up),
|
||||
(modifiers: [Super, Shift], key: "l"): Move(Right),
|
||||
|
||||
(modifiers: [Super], key: "1"): Workspace(1),
|
||||
(modifiers: [Super], key: "2"): Workspace(2),
|
||||
(modifiers: [Super], key: "3"): Workspace(3),
|
||||
(modifiers: [Super], key: "4"): Workspace(4),
|
||||
(modifiers: [Super], key: "5"): Workspace(5),
|
||||
(modifiers: [Super], key: "6"): Workspace(6),
|
||||
(modifiers: [Super], key: "7"): Workspace(7),
|
||||
(modifiers: [Super], key: "8"): Workspace(8),
|
||||
(modifiers: [Super], key: "9"): Workspace(9),
|
||||
(modifiers: [Super], key: "0"): LastWorkspace,
|
||||
(modifiers: [Super, Shift], key: "1"): MoveToWorkspace(1),
|
||||
(modifiers: [Super, Shift], key: "2"): MoveToWorkspace(2),
|
||||
(modifiers: [Super, Shift], key: "3"): MoveToWorkspace(3),
|
||||
(modifiers: [Super, Shift], key: "4"): MoveToWorkspace(4),
|
||||
(modifiers: [Super, Shift], key: "5"): MoveToWorkspace(5),
|
||||
(modifiers: [Super, Shift], key: "6"): MoveToWorkspace(6),
|
||||
(modifiers: [Super, Shift], key: "7"): MoveToWorkspace(7),
|
||||
(modifiers: [Super, Shift], key: "8"): MoveToWorkspace(8),
|
||||
(modifiers: [Super, Shift], key: "9"): MoveToWorkspace(9),
|
||||
(modifiers: [Super, Shift], key: "0"): MoveToLastWorkspace,
|
||||
|
||||
(modifiers: [Super, Ctrl], key: "Left"): PreviousWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "Down"): NextWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "Up"): PreviousWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "Right"): NextWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "h"): PreviousWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "j"): NextWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "k"): PreviousWorkspace,
|
||||
(modifiers: [Super, Ctrl], key: "l"): NextWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "Left"): MoveToPreviousWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "Down"): MoveToNextWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "Up"): MoveToPreviousWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "Right"): MoveToNextWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "h"): MoveToPreviousWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "j"): MoveToNextWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "k"): MoveToPreviousWorkspace,
|
||||
(modifiers: [Super, Shift, Ctrl], key: "l"): MoveToNextWorkspace,
|
||||
|
||||
(modifiers: [Super, Alt], key: "Left"): SwitchOutput(Left),
|
||||
(modifiers: [Super, Alt], key: "Down"): SwitchOutput(Down),
|
||||
(modifiers: [Super, Alt], key: "Up"): SwitchOutput(Up),
|
||||
(modifiers: [Super, Alt], key: "Right"): SwitchOutput(Right),
|
||||
(modifiers: [Super, Alt], key: "h"): SwitchOutput(Left),
|
||||
(modifiers: [Super, Alt], key: "k"): SwitchOutput(Up),
|
||||
(modifiers: [Super, Alt], key: "j"): SwitchOutput(Down),
|
||||
(modifiers: [Super, Alt], key: "l"): SwitchOutput(Right),
|
||||
(modifiers: [Super, Shift, Alt], key: "Left"): MoveToOutput(Left),
|
||||
(modifiers: [Super, Shift, Alt], key: "Down"): MoveToOutput(Down),
|
||||
(modifiers: [Super, Shift, Alt], key: "Up"): MoveToOutput(Up),
|
||||
(modifiers: [Super, Shift, Alt], key: "Right"): MoveToOutput(Right),
|
||||
(modifiers: [Super, Shift, Alt], key: "h"): MoveToOutput(Left),
|
||||
(modifiers: [Super, Shift, Alt], key: "k"): MoveToOutput(Up),
|
||||
(modifiers: [Super, Shift, Alt], key: "j"): MoveToOutput(Down),
|
||||
(modifiers: [Super, Shift, Alt], key: "l"): MoveToOutput(Right),
|
||||
|
||||
(modifiers: [Super], key: "o"): ToggleOrientation,
|
||||
(modifiers: [Super], key: "s"): ToggleStacking,
|
||||
(modifiers: [Super], key: "y"): ToggleTiling,
|
||||
(modifiers: [Super], key: "g"): ToggleWindowFloating,
|
||||
(modifiers: [Super], key: "x"): SwapWindow,
|
||||
|
||||
(modifiers: [Super], key: "m"): Maximize,
|
||||
(modifiers: [Super], key: "F11"): Fullscreen,
|
||||
(modifiers: [Super], key: "r"): Resizing(Outwards),
|
||||
(modifiers: [Super, Shift], key: "r"): Resizing(Inwards),
|
||||
|
||||
(modifiers: [Super, Alt], key: "s"): System(ScreenReader),
|
||||
(modifiers: [Super], key: "equal"): ZoomIn,
|
||||
(modifiers: [Super], key: "minus"): ZoomOut,
|
||||
(modifiers: [Super], key: "period"): ZoomIn,
|
||||
(modifiers: [Super], key: "comma"): ZoomOut,
|
||||
|
||||
(modifiers: [Super], key: "b"): System(WebBrowser),
|
||||
(modifiers: [Super], key: "f"): System(HomeFolder),
|
||||
(modifiers: [Super], key: "space"): System(InputSourceSwitch),
|
||||
(modifiers: [Super], key: "t"): System(Terminal),
|
||||
|
||||
(modifiers: [Super], key: "a"): System(AppLibrary),
|
||||
(modifiers: [Super], key: "w"): System(WorkspaceOverview),
|
||||
(modifiers: [Super], key: "slash"): System(Launcher),
|
||||
(modifiers: [Super]): System(Launcher),
|
||||
(modifiers: [Alt], key: "Tab"): System(WindowSwitcher),
|
||||
(modifiers: [Alt, Shift], key: "Tab"): System(WindowSwitcherPrevious),
|
||||
(modifiers: [Super], key: "Tab"): System(WindowSwitcher),
|
||||
(modifiers: [Super, Shift], key: "Tab"): System(WindowSwitcherPrevious),
|
||||
|
||||
(modifiers: [], key: "Print"): System(Screenshot),
|
||||
(modifiers: [], key: "XF86AudioRaiseVolume"): System(VolumeRaise),
|
||||
(modifiers: [], key: "XF86AudioLowerVolume"): System(VolumeLower),
|
||||
(modifiers: [], key: "XF86AudioMute"): System(Mute),
|
||||
(modifiers: [], key: "XF86AudioMicMute"): System(MuteMic),
|
||||
(modifiers: [], key: "XF86MonBrightnessUp"): System(BrightnessUp),
|
||||
(modifiers: [], key: "XF86MonBrightnessDown"): System(BrightnessDown),
|
||||
(modifiers: [], key: "XF86AudioPlay"): System(PlayPause),
|
||||
(modifiers: [], key: "XF86AudioPrev"): System(PlayPrev),
|
||||
(modifiers: [], key: "XF86AudioNext"): System(PlayNext),
|
||||
(modifiers: [], key: "XF86PowerOff"): System(PowerOff),
|
||||
(modifiers: [], key: "XF86TouchpadToggle"): System(TouchpadToggle),
|
||||
(modifiers: [Super, Ctrl], key: "XF86TouchpadToggle"): System(TouchpadToggle),
|
||||
(modifiers: [], key: "XF86LaunchA"): System(WorkspaceOverview),
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
[
|
||||
// Any appid title only matching
|
||||
(
|
||||
appid: ".*",
|
||||
titles: [
|
||||
"Discord Updater",
|
||||
]
|
||||
),
|
||||
// Empty appid title only matches
|
||||
(
|
||||
appid: "",
|
||||
titles: [
|
||||
"Steam",
|
||||
"wl-clipboard",
|
||||
]
|
||||
),
|
||||
|
||||
|
||||
// Appid matches
|
||||
(appid: "Authy Desktop", titles: [".*"]),
|
||||
(appid: "Com.github.amezin.ddterm", titles: [".*"]),
|
||||
(appid: "Com.github.donadigo.eddy", titles: [".*"]),
|
||||
(appid: "com.system76.CosmicFilesDialog", titles: [".*"]),
|
||||
(appid: "com.system76.CosmicStoreDialog", titles: [".*"]),
|
||||
(appid: "Enpass", titles: ["Enpass Assistant"]),
|
||||
(appid: "Gjs", titles: ["Settings"]),
|
||||
(appid: "Gnome-initial-setup", titles: [".*"]),
|
||||
(appid: "Gnome-terminal", titles: ["Preferences - General"]),
|
||||
(appid: "Guake", titles: [".*"]),
|
||||
(appid: "Io.elementary.sideload", titles: [".*"]),
|
||||
(appid: "KotatogramDesktop", titles: ["Media viewer"]),
|
||||
(appid: "Mozilla VPN", titles: [".*"]),
|
||||
(appid: "update-manager", titles: ["Software Updater"]),
|
||||
(appid: "Solaar", titles: [".*"]),
|
||||
(appid: "Steam", titles: ["^.*?(Guard|Login).*"]),
|
||||
(appid: "TelegramDesktop", titles: ["Media viewer"]),
|
||||
(appid: "Zotero", titles: ["Quick Format Citation"]),
|
||||
(appid: "gjs", titles: [".*"]),
|
||||
(appid: "gnome-screenshot", titles: [".*"]),
|
||||
(appid: "ibus-.*", titles: [".*"]),
|
||||
(appid: "jetbrains-toolbox", titles: [".*"]),
|
||||
(appid: "jetbrains-webstorm", titles: ["Customize WebStorm", "License Activation", "Welcome to WebStorm"]),
|
||||
(appid: "krunner", titles: [".*"]),
|
||||
(appid: "pritunl", titles: [".*"]),
|
||||
(appid: "re.sonny.Junction", titles: [".*"]),
|
||||
(appid: "system76-driver", titles: [".*"]),
|
||||
(appid: "tilda", titles: [".*"]),
|
||||
(appid: "zoom", titles: [".*"]),
|
||||
(appid: "Tor Browser", titles: [".*"]),
|
||||
(appid: "^.*?action=join.*$", titles: [".*"]),
|
||||
(appid: "^(slack|com.slack.Slack)", titles: ["^.*?(Huddle Preview).*"]),
|
||||
(appid: "^(thunderbird|org.mozilla.thunderbird)(-esr|_esr)*", titles: ["^(Write:).*"]),
|
||||
]
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
cosmic-comp (0.1) jammy; urgency=medium
|
||||
|
||||
* Initial pre-release.
|
||||
|
||||
-- Victoria Brekenfeld <[email protected]> Wed, 09 Feb 2022 14:20:23 +0100
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
Source: cosmic-comp
|
||||
Section: x11
|
||||
Priority: optional
|
||||
Maintainer: Victoria Brekenfeld <[email protected]>
|
||||
Build-Depends:
|
||||
cargo,
|
||||
cmake,
|
||||
debhelper-compat (=10),
|
||||
libegl1-mesa-dev,
|
||||
libfontconfig-dev,
|
||||
libgbm-dev,
|
||||
libinput-dev,
|
||||
libpixman-1-dev,
|
||||
libseat-dev,
|
||||
libsystemd-dev,
|
||||
libudev-dev,
|
||||
libwayland-dev,
|
||||
libxcb1-dev,
|
||||
libxkbcommon-dev,
|
||||
libdisplay-info-dev,
|
||||
rustc (>=1.57),
|
||||
Standards-Version: 4.1.1
|
||||
Homepage: https://github.com/pop-os/cosmic-comp
|
||||
|
||||
Package: cosmic-comp
|
||||
Architecture: amd64 arm64
|
||||
Depends:
|
||||
${misc:Depends},
|
||||
${shlibs:Depends},
|
||||
libegl1,
|
||||
libwayland-server0,
|
||||
Recommends:
|
||||
cosmic-session,
|
||||
libgl1-mesa-dri
|
||||
Description: Wayland compositor of pop-os cosmic shell
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: cosmic-comp
|
||||
Upstream-Contact: Victoria Brekenfeld <[email protected]>
|
||||
Source: https://github.com/pop-os/cosmic-comp
|
||||
Files: *
|
||||
Copyright: System76 <[email protected]>
|
||||
License: GPL-3.0-only
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
set -x
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
export sysconfdir = "/usr/share"
|
||||
export VENDOR ?= 1
|
||||
CLEAN ?= 1
|
||||
|
||||
%:
|
||||
dh $@ --with=systemd
|
||||
|
||||
override_dh_auto_clean:
|
||||
ifeq ($(CLEAN),1)
|
||||
ischroot && make clean || make distclean
|
||||
endif
|
||||
ifeq ($(VENDOR),1)
|
||||
ischroot || make vendor
|
||||
endif
|
||||
|
||||
override_dh_installinit:
|
||||
dh_installinit -r
|
||||
|
||||
override_dh_systemd_start:
|
||||
dh_systemd_start -r
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
3.0 (native)
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
tar-ignore=target
|
||||
tar-ignore=vendor
|
||||
@@ -0,0 +1,79 @@
|
||||
use cosmic::iced::{Color, Rectangle, Size};
|
||||
use cosmic::widget;
|
||||
use cosmic::widget::canvas;
|
||||
use cosmic_comp::hooks::{Decorations, Hooks};
|
||||
use cosmic_comp::shell::element::stack::{
|
||||
DefaultDecorations as DefaultStackDecorations, TAB_HEIGHT,
|
||||
};
|
||||
use cosmic_comp::shell::element::window::{
|
||||
DefaultDecorations as DefaultWindowDecorations, SSD_HEIGHT,
|
||||
};
|
||||
use std::sync::Arc;
|
||||
|
||||
/// The struct implementing Decorations hook
|
||||
#[derive(Debug)]
|
||||
struct AddIndicator<Lower> {
|
||||
lower: Lower,
|
||||
height: i32,
|
||||
}
|
||||
|
||||
/// An iced program drawing a circle, which we'll add to the window decorations
|
||||
struct Circle {
|
||||
radius: f32,
|
||||
color: Color,
|
||||
}
|
||||
|
||||
impl<Message, Theme, Renderer: iced_graphics::geometry::Renderer>
|
||||
canvas::Program<Message, Theme, Renderer> for Circle
|
||||
{
|
||||
type State = ();
|
||||
|
||||
fn draw(
|
||||
&self,
|
||||
_state: &(),
|
||||
renderer: &Renderer,
|
||||
_theme: &Theme,
|
||||
bounds: Rectangle,
|
||||
_cursor: cosmic::iced::mouse::Cursor,
|
||||
) -> Vec<Renderer::Geometry> {
|
||||
let bounds = bounds.size();
|
||||
let min = bounds.height.min(bounds.width);
|
||||
let mut frame = canvas::Frame::new(renderer, Size::new(min, min));
|
||||
let circle = canvas::Path::circle(frame.center(), self.radius);
|
||||
frame.fill(&circle, self.color);
|
||||
vec![frame.into_geometry()]
|
||||
}
|
||||
}
|
||||
|
||||
impl<Internal, Message: std::clone::Clone + 'static, Lower: Decorations<Internal, Message>>
|
||||
Decorations<Internal, Message> for AddIndicator<Lower>
|
||||
{
|
||||
fn view(&self, window: &Internal) -> cosmic::Element<'_, Message> {
|
||||
let orig = self.lower.view(window);
|
||||
widget::row([
|
||||
widget::column([canvas(Circle {
|
||||
radius: (self.height as f32 / 2.) * 0.8,
|
||||
color: Color::from_rgba(1.0, 0.0, 0.0, 1.0),
|
||||
})
|
||||
.into()])
|
||||
.width(self.height as f32)
|
||||
.into(),
|
||||
orig,
|
||||
])
|
||||
.into()
|
||||
}
|
||||
}
|
||||
|
||||
/// The customized cosmic-comp entrypoint
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
cosmic_comp::run(Hooks {
|
||||
window_decorations: Some(Arc::new(AddIndicator {
|
||||
height: SSD_HEIGHT,
|
||||
lower: DefaultWindowDecorations,
|
||||
})),
|
||||
stack_decorations: Some(Arc::new(AddIndicator {
|
||||
height: TAB_HEIGHT,
|
||||
lower: DefaultStackDecorations,
|
||||
})),
|
||||
})
|
||||
}
|
||||
Generated
+101
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"nodes": {
|
||||
"crane": {
|
||||
"locked": {
|
||||
"lastModified": 1724974107,
|
||||
"narHash": "sha256-69+1W0Ao5K9su569YUfUPANeN/Ea7aKu7xIZP1MSl9o=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "63396562b8e08efda3b3c66e32661b8a513055de",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-filter": {
|
||||
"locked": {
|
||||
"lastModified": 1710156097,
|
||||
"narHash": "sha256-1Wvk8UP7PXdf8bCCaEoMnOT1qe5/Duqgj+rL8sRQsSM=",
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"rev": "3342559a24e85fc164b295c3444e8a139924675b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "nix-filter",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1725067332,
|
||||
"narHash": "sha256-bMi5zhDwR6jdmN5mBHEu9gQQf9CibIEasA/6mc34Iek=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "192e7407cc66e2eccc3a6c5ad3834dd62fae3800",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1725024810,
|
||||
"narHash": "sha256-ODYRm8zHfLTH3soTFWE452ydPYz2iTvr9T8ftDMUQ3E=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "af510d4a62d071ea13925ce41c95e3dec816c01d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"crane": "crane",
|
||||
"nix-filter": "nix-filter",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"parts": "parts",
|
||||
"rust": "rust"
|
||||
}
|
||||
},
|
||||
"rust": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1724984647,
|
||||
"narHash": "sha256-BC6MUq0CTdmAu/cueVcdWTI+S95s0mJcn19SoEgd7gU=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "87b6cffc276795b46ef544d7ed8d7fed6ad9c8e4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
description = "Compositor for the COSMIC desktop environment";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
|
||||
parts.url = "github:hercules-ci/flake-parts";
|
||||
parts.inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
|
||||
crane.url = "github:ipetkov/crane";
|
||||
|
||||
rust.url = "github:oxalica/rust-overlay";
|
||||
rust.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
nix-filter.url = "github:numtide/nix-filter";
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
self,
|
||||
nixpkgs,
|
||||
parts,
|
||||
crane,
|
||||
rust,
|
||||
nix-filter,
|
||||
...
|
||||
}:
|
||||
parts.lib.mkFlake { inherit inputs; } {
|
||||
systems = [
|
||||
"aarch64-linux"
|
||||
"x86_64-linux"
|
||||
];
|
||||
|
||||
perSystem =
|
||||
{
|
||||
self',
|
||||
lib,
|
||||
system,
|
||||
...
|
||||
}:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system}.extend rust.overlays.default;
|
||||
rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
|
||||
craneLib = (crane.mkLib pkgs).overrideToolchain rust-toolchain;
|
||||
craneArgs = {
|
||||
pname = "cosmic-comp";
|
||||
version = self.rev or "dirty";
|
||||
|
||||
src = nix-filter.lib.filter {
|
||||
root = ./.;
|
||||
include = [
|
||||
./src
|
||||
./i18n.toml
|
||||
./Cargo.toml
|
||||
./Cargo.lock
|
||||
./resources
|
||||
./cosmic-comp-config
|
||||
];
|
||||
};
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
pkg-config
|
||||
autoPatchelfHook
|
||||
cmake
|
||||
];
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
wayland
|
||||
systemd # For libudev
|
||||
seatd # For libseat
|
||||
libxkbcommon
|
||||
libinput
|
||||
mesa # For libgbm
|
||||
fontconfig
|
||||
stdenv.cc.cc.lib
|
||||
pixman
|
||||
libdisplay-info
|
||||
];
|
||||
|
||||
runtimeDependencies = with pkgs; [
|
||||
libglvnd # For libEGL
|
||||
wayland # winit->wayland-sys wants to dlopen libwayland-egl.so
|
||||
# for running in X11
|
||||
xorg.libX11
|
||||
xorg.libXcursor
|
||||
xorg.libxcb
|
||||
xorg.libXi
|
||||
libxkbcommon
|
||||
# for vulkan backend
|
||||
vulkan-loader
|
||||
];
|
||||
};
|
||||
|
||||
cargoArtifacts = craneLib.buildDepsOnly craneArgs;
|
||||
cosmic-comp = craneLib.buildPackage (craneArgs // { inherit cargoArtifacts; });
|
||||
in
|
||||
{
|
||||
apps.cosmic-comp = {
|
||||
type = "app";
|
||||
program = lib.getExe self'.packages.default;
|
||||
};
|
||||
|
||||
checks.cosmic-comp = cosmic-comp;
|
||||
packages.default = cosmic-comp;
|
||||
|
||||
devShells.default = craneLib.devShell {
|
||||
LD_LIBRARY_PATH = lib.makeLibraryPath (
|
||||
__concatMap (d: d.runtimeDependencies) (__attrValues self'.checks)
|
||||
);
|
||||
|
||||
# include build inputs
|
||||
inputsFrom = [ cosmic-comp ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
fallback_language = "en"
|
||||
|
||||
[fluent]
|
||||
assets_dir = "resources/i18n"
|
||||
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = يتحرك العرض بإستمرار مع المؤشر
|
||||
a11y-zoom-move-onedge = يتحرك العرض عندما يصل المؤشر إلي الحافة
|
||||
a11y-zoom-move-centered = يتحرك العرض لإبقاء المؤشر في مركز الشاشة
|
||||
a11y-zoom-settings = إعدادات المكبر...
|
||||
grow-window = وَسِّع
|
||||
shrink-window = قلِّص
|
||||
swap-windows = بدِّل النافذتين
|
||||
stack-windows = كدِّس النوافذ
|
||||
unknown-keybinding = <غير محدد>
|
||||
window-menu-minimize = صغِّر
|
||||
window-menu-maximize = كبِّر
|
||||
window-menu-fullscreen = ملء الشاشة
|
||||
window-menu-tiled = نافذة عائمة
|
||||
window-menu-screenshot = التقط لقطة شاشة
|
||||
window-menu-move = حرِّك
|
||||
window-menu-resize = تغيير الحجم
|
||||
window-menu-move-prev-workspace = حرِّك إلى مساحة العمل السابقة
|
||||
window-menu-move-next-workspace = حرِّك إلى مساحة العمل التالية
|
||||
window-menu-stack = أنشئ كدسة نوافذ
|
||||
window-menu-unstack-all = ألغِ تكديس النوافذ
|
||||
window-menu-unstack = ألغِ تكديس النافذة
|
||||
window-menu-sticky = نافذة ثابتة
|
||||
window-menu-close = أغلِق
|
||||
window-menu-close-all = أغلِق جميع النوافذ
|
||||
window-menu-resize-edge-top = الأعلى
|
||||
window-menu-resize-edge-left = الشمال
|
||||
window-menu-resize-edge-right = اليمين
|
||||
window-menu-resize-edge-bottom = الأسفل
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Прагляд рухаецца бесперапынна за указальнікам
|
||||
a11y-zoom-move-onedge = Прагляд рухаецца, калі указальнік дасягае краю
|
||||
a11y-zoom-move-centered = Прагляд рухаецца, каб утрымліваць указальнік у цэнтры
|
||||
a11y-zoom-settings = Налады лупы...
|
||||
grow-window = Павялічыць
|
||||
shrink-window = Паменшыць
|
||||
swap-windows = Памяняць вокны месцамі
|
||||
stack-windows = Згрупаваць вокны
|
||||
unknown-keybinding = <не зададзена>
|
||||
window-menu-minimize = Згарнуць
|
||||
window-menu-maximize = Разгарнуць
|
||||
window-menu-fullscreen = На ўвесь экран
|
||||
window-menu-tiled = Плавае акно
|
||||
window-menu-screenshot = Зрабіць скрыншот
|
||||
window-menu-move = Перамясціць
|
||||
window-menu-resize = Змяніць памер
|
||||
window-menu-move-prev-workspace = Перамясціць на папярэднюю працоўную прастору
|
||||
window-menu-move-next-workspace = Перамясціць на наступную працоўную прастору
|
||||
window-menu-stack = Стварыць групу вокнаў
|
||||
window-menu-unstack-all = Разгрупаваць вокны
|
||||
window-menu-unstack = Разгрупаваць акно
|
||||
window-menu-sticky = Ліпкае акно
|
||||
window-menu-close = Закрыць
|
||||
window-menu-close-all = Закрыць усе вокны
|
||||
window-menu-resize-edge-top = Уверх
|
||||
window-menu-resize-edge-left = Улева
|
||||
window-menu-resize-edge-right = Управа
|
||||
window-menu-resize-edge-bottom = Уніз
|
||||
@@ -0,0 +1,28 @@
|
||||
window-menu-close = Затваряне
|
||||
window-menu-close-all = Затваряне на всички прозорци
|
||||
window-menu-resize = Преоразмеряване
|
||||
window-menu-move = Преместване
|
||||
window-menu-fullscreen = На цял екран
|
||||
window-menu-maximize = Максимизиране
|
||||
window-menu-minimize = Минимизиране
|
||||
a11y-zoom-settings = Настройки на лупата...
|
||||
swap-windows = Разменяне на прозорци
|
||||
window-menu-move-prev-workspace = Преместване в предишното работно пространство
|
||||
window-menu-move-next-workspace = Преместване в следващото работно пространство
|
||||
window-menu-resize-edge-top = Горе
|
||||
window-menu-resize-edge-left = Ляво
|
||||
window-menu-resize-edge-right = Дясно
|
||||
window-menu-resize-edge-bottom = Долу
|
||||
window-menu-screenshot = Снимане на екрана
|
||||
a11y-zoom-move-continuously = Изгледът се движи непрекъснато с показалеца
|
||||
a11y-zoom-move-onedge = Изгледът се движи, когато показалецът достигне края
|
||||
a11y-zoom-move-centered = Изгледът се премества да запази показалеца центриран
|
||||
grow-window = Уголемяване
|
||||
shrink-window = Свиване
|
||||
stack-windows = Подреждане на прозорците на куп
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-tiled = Плаващ прозорец
|
||||
window-menu-stack = Създаване на куп от прозорци
|
||||
window-menu-unstack-all = Разделяне на прозорците от купа
|
||||
window-menu-unstack = Разделяне на прозореца от купа
|
||||
window-menu-sticky = Лепкав прозорец
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Zobrazení se pohybuje plynule s ukazatelem
|
||||
a11y-zoom-move-onedge = Zobrazení se pohybuje, když ukazatel dosáhne okraje
|
||||
a11y-zoom-move-centered = Zobrazení se pohybuje tak, aby ukazatel zůstal uprostřed
|
||||
a11y-zoom-settings = Nastavení lupy...
|
||||
grow-window = Zvětšit
|
||||
shrink-window = Zmenšit
|
||||
swap-windows = Prohodit okna
|
||||
stack-windows = Seskupit okna
|
||||
unknown-keybinding = <nenastaveno>
|
||||
window-menu-minimize = Minimalizovat
|
||||
window-menu-maximize = Maximalizovat
|
||||
window-menu-tiled = Plovoucí okno
|
||||
window-menu-screenshot = Pořídit snímek obrazovky
|
||||
window-menu-move = Přesunout
|
||||
window-menu-resize = Změnit velikost
|
||||
window-menu-move-prev-workspace = Přesunout na předchozí pracovní plochu
|
||||
window-menu-move-next-workspace = Přesunout na další pracovní plochu
|
||||
window-menu-stack = Vytvořit zásobník oken
|
||||
window-menu-unstack-all = Oddělit okna
|
||||
window-menu-unstack = Oddělit okno
|
||||
window-menu-sticky = Ponechat okno vždy nahoře
|
||||
window-menu-close = Zavřít
|
||||
window-menu-close-all = Zavřít všechna okna
|
||||
window-menu-resize-edge-top = Nahoře
|
||||
window-menu-resize-edge-left = Vlevo
|
||||
window-menu-resize-edge-right = Vpravo
|
||||
window-menu-resize-edge-bottom = Dole
|
||||
window-menu-fullscreen = Režim celé obrazovky
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Ansicht bewegt sich kontinuierlich mit dem Cursor
|
||||
a11y-zoom-move-onedge = Ansicht bewegt sich, sobald der Cursor den Rand erreicht
|
||||
a11y-zoom-move-centered = Ansicht bewegt sich, um den Cursor zentiert zu halten
|
||||
a11y-zoom-settings = Vergrößerungsglas-Einstellungen ...
|
||||
grow-window = Vergrößern
|
||||
shrink-window = Verkleinern
|
||||
swap-windows = Fenster tauschen
|
||||
stack-windows = Fenster stapeln
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimieren
|
||||
window-menu-maximize = Maximieren
|
||||
window-menu-tiled = Fenster schweben lassen
|
||||
window-menu-screenshot = Bildschirmfoto machen
|
||||
window-menu-move = Verschieben
|
||||
window-menu-resize = Größe anpassen
|
||||
window-menu-move-prev-workspace = Zur vorherigen Arbeitsfläche verschieben
|
||||
window-menu-move-next-workspace = Zur nächsten Arbeitsfläche verschieben
|
||||
window-menu-stack = Fensterstapel erstellen
|
||||
window-menu-unstack-all = Fensterstapel auflösen
|
||||
window-menu-unstack = Fenster aus Stapel lösen
|
||||
window-menu-sticky = Klebendes Fenster
|
||||
window-menu-close = Schließen
|
||||
window-menu-close-all = Alle Fenster schließen
|
||||
window-menu-resize-edge-top = Oben
|
||||
window-menu-resize-edge-left = Links
|
||||
window-menu-resize-edge-right = Rechts
|
||||
window-menu-resize-edge-bottom = Unten
|
||||
window-menu-fullscreen = Vollbild
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Η προβολή μετακινείται συνεχώς με τον κέρσορα
|
||||
window-menu-minimize = Ελαχιστοποίηση
|
||||
window-menu-maximize = Μεγιστοποίηση
|
||||
window-menu-fullscreen = Πλήρης οθόνη
|
||||
window-menu-screenshot = Λήψη στιγμιότυπου οθόνης
|
||||
window-menu-move = Μετακίνηση
|
||||
window-menu-resize = Αλλαγή μεγέθους
|
||||
window-menu-move-prev-workspace = Μετακίνηση στον προηγούμενο χώρο εργασίας
|
||||
window-menu-move-next-workspace = Μετακίνηση στον επόμενο χώρο εργασίας
|
||||
window-menu-stack = Δημιουργία στοίβας παραθύρων
|
||||
window-menu-unstack-all = Κατάργηση στοίβας παραθύρων
|
||||
window-menu-close = Κλείσιμο
|
||||
window-menu-close-all = Κλείσιμο όλων των παραθύρων
|
||||
window-menu-resize-edge-top = Πάνω
|
||||
window-menu-resize-edge-left = Αριστερά
|
||||
window-menu-resize-edge-right = Δεξιά
|
||||
window-menu-resize-edge-bottom = Κάτω
|
||||
shrink-window = Συρρίκνωση
|
||||
swap-windows = Εναλλαγή παραθύρων
|
||||
a11y-zoom-settings = Ρυθμίσεις μεγεθυντικού φακού...
|
||||
a11y-zoom-move-onedge = Η προβολή μετακινείται όταν ο κέρσορας φτάνει στην άκρη
|
||||
a11y-zoom-move-centered = Η προβολή μετακινείται για να διατηρεί τον κέρσορα στο κέντρο
|
||||
grow-window = Ανάπτυξη
|
||||
stack-windows = Στοίβαξη παραθύρων
|
||||
window-menu-sticky = Καρφιτσωμένο παράθυρο
|
||||
unknown-keybinding = <δεν έχει οριστεί>
|
||||
window-menu-unstack = Κατάργηση στοίβας παραθύρου
|
||||
window-menu-tiled = Αιώρηση παραθύρου
|
||||
@@ -0,0 +1,20 @@
|
||||
a11y-zoom-move-continuously = View moves continuously with pointer
|
||||
a11y-zoom-move-onedge = View moves when pointer reaches edge
|
||||
a11y-zoom-move-centered = View moves to keep pointer centred
|
||||
a11y-zoom-settings = Magnifier settings...
|
||||
grow-window = Grow
|
||||
shrink-window = Shrink
|
||||
swap-windows = Swap Windows
|
||||
stack-windows = Stack Windows
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimise
|
||||
window-menu-maximize = Maximise
|
||||
window-menu-fullscreen = Fullscreen
|
||||
window-menu-tiled = Float window
|
||||
window-menu-screenshot = Take screenshot
|
||||
window-menu-move = Move
|
||||
window-menu-resize = Resize
|
||||
window-menu-move-prev-workspace = Move to previous workspace
|
||||
window-menu-move-next-workspace = Move to next workspace
|
||||
window-menu-stack = Create window stack
|
||||
window-menu-unstack-all = Unstack windows
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = View moves continuously with pointer
|
||||
a11y-zoom-move-onedge = View moves when pointer reaches edge
|
||||
a11y-zoom-move-centered = View moves to keep pointer centered
|
||||
a11y-zoom-settings = Magnifier settings...
|
||||
grow-window = Grow
|
||||
shrink-window = Shrink
|
||||
swap-windows = Swap Windows
|
||||
stack-windows = Stack Windows
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimize
|
||||
window-menu-maximize = Maximize
|
||||
window-menu-fullscreen = Fullscreen
|
||||
window-menu-tiled = Float window
|
||||
window-menu-screenshot = Take screenshot
|
||||
window-menu-move = Move
|
||||
window-menu-resize = Resize
|
||||
window-menu-move-prev-workspace = Move to previous workspace
|
||||
window-menu-move-next-workspace = Move to next workspace
|
||||
window-menu-stack = Create window stack
|
||||
window-menu-unstack-all = Unstack windows
|
||||
window-menu-unstack = Unstack window
|
||||
window-menu-sticky = Sticky window
|
||||
window-menu-close = Close
|
||||
window-menu-close-all = Close all windows
|
||||
window-menu-resize-edge-top = Top
|
||||
window-menu-resize-edge-left = Left
|
||||
window-menu-resize-edge-right = Right
|
||||
window-menu-resize-edge-bottom = Bottom
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = Expandir
|
||||
shrink-window = Disminuir
|
||||
swap-windows = Intercambiar ventanas
|
||||
stack-windows = Apilar ventanas
|
||||
unknown-keybinding = <sin asignar>
|
||||
window-menu-minimize = Minimizar
|
||||
window-menu-maximize = Maximizar
|
||||
window-menu-tiled = Ventana flotante
|
||||
window-menu-screenshot = Tomar captura de pantalla
|
||||
window-menu-move = Mover
|
||||
window-menu-resize = Redimensionar
|
||||
window-menu-move-prev-workspace = Mover al espacio de trabajo anterior
|
||||
window-menu-move-next-workspace = Mover al espacio de trabajo siguiente
|
||||
window-menu-stack = Crear pila de ventanas
|
||||
window-menu-unstack-all = Desapilar ventanas
|
||||
window-menu-unstack = Desapilar ventana
|
||||
window-menu-sticky = Ventana siempre visible
|
||||
window-menu-close = Cerrar
|
||||
window-menu-close-all = Cerrar todas las ventanas
|
||||
window-menu-resize-edge-top = Arriba
|
||||
window-menu-resize-edge-left = Izquierda
|
||||
window-menu-resize-edge-right = Derecha
|
||||
window-menu-resize-edge-bottom = Abajo
|
||||
a11y-zoom-move-continuously = La vista se mueve continuamente con el puntero
|
||||
a11y-zoom-move-onedge = La vista se mueve cuando el puntero alcanza el borde
|
||||
a11y-zoom-move-centered = La vista se mueve para mantener el puntero centrado
|
||||
a11y-zoom-settings = Configuración de la ampliación de pantalla...
|
||||
window-menu-fullscreen = Pantalla completa
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = La vista se mueve siguiendo el movimiento del puntero
|
||||
a11y-zoom-move-onedge = La vista se mueve cuando el puntero alcanza un borde
|
||||
a11y-zoom-move-centered = La vista se mueve manteniendo el puntero centrado
|
||||
a11y-zoom-settings = Configuración de la Lupa...
|
||||
grow-window = Agrandar
|
||||
shrink-window = Disminuir
|
||||
swap-windows = Intercambiar ventanas
|
||||
stack-windows = Apilar ventanas
|
||||
unknown-keybinding = <ninguno>
|
||||
window-menu-minimize = Minimizar
|
||||
window-menu-maximize = Maximizar
|
||||
window-menu-tiled = Ventana flotante
|
||||
window-menu-screenshot = Tomar captura de pantalla
|
||||
window-menu-move = Mover
|
||||
window-menu-resize = Redimensionar
|
||||
window-menu-move-prev-workspace = Mover al espacio de trabajo anterior
|
||||
window-menu-move-next-workspace = Mover al espacio de trabajo siguiente
|
||||
window-menu-stack = Crear pila de ventanas
|
||||
window-menu-unstack-all = Dispersar ventanas
|
||||
window-menu-unstack = Dispersar ventana
|
||||
window-menu-sticky = Ventana siempre visible
|
||||
window-menu-close = Cerrar
|
||||
window-menu-close-all = Cerrar todas las ventanas
|
||||
window-menu-resize-edge-top = Arriba
|
||||
window-menu-resize-edge-left = Izquierda
|
||||
window-menu-resize-edge-right = Derecha
|
||||
window-menu-resize-edge-bottom = Abajo
|
||||
window-menu-fullscreen = Pantalla completa
|
||||
@@ -0,0 +1,11 @@
|
||||
window-menu-sticky = Kleepuv aken
|
||||
window-menu-close = Sulge
|
||||
window-menu-close-all = Sulge kõik aknad
|
||||
window-menu-screenshot = Tee ekraanitõmmis
|
||||
window-menu-move = Liiguta
|
||||
window-menu-resize = Muuda suurust
|
||||
window-menu-move-prev-workspace = Tõsta eelmisele tööalale
|
||||
window-menu-move-next-workspace = Tõsta järgmisele tööalale
|
||||
window-menu-minimize = Minimeeri
|
||||
window-menu-maximize = Maksimeeri
|
||||
window-menu-fullscreen = Täisekraanivaade
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = نمای بزرگنمایی به طور مداوم با نشانگر حرکت میکند
|
||||
a11y-zoom-move-onedge = نمای بزرگنمایی با رسیدن نشانگر به لبه حرکت میکند
|
||||
a11y-zoom-move-centered = نمای بزرگنمایی برای نگه داشتن نشانگر در مرکز حرکت میکند
|
||||
a11y-zoom-settings = تنظیمات ذرهبین...
|
||||
grow-window = بزرگ کردن
|
||||
shrink-window = کوچک کردن
|
||||
swap-windows = جابجایی پنجرهها
|
||||
stack-windows = روی هم چیدن پنجرهها
|
||||
unknown-keybinding = <تنظیمنشده>
|
||||
window-menu-minimize = کوچکسازی
|
||||
window-menu-maximize = بزرگسازی
|
||||
window-menu-fullscreen = تمامصفحه
|
||||
window-menu-tiled = شناور کردن پنجره
|
||||
window-menu-screenshot = گرفتن اسکرینشات
|
||||
window-menu-move = جابجایی
|
||||
window-menu-resize = تغییر اندازه
|
||||
window-menu-move-prev-workspace = انتقال به محیط کاری قبلی
|
||||
window-menu-move-next-workspace = انتقال به محیط کاری بعدی
|
||||
window-menu-stack = ایجاد چینش پنجرهها
|
||||
window-menu-unstack-all = برچیدن پنجرهها
|
||||
window-menu-unstack = برچیدن پنجره
|
||||
window-menu-sticky = پنجره چسبان
|
||||
window-menu-close = بستن
|
||||
window-menu-close-all = بستن همه پنجرهها
|
||||
window-menu-resize-edge-top = بالا
|
||||
window-menu-resize-edge-left = چپ
|
||||
window-menu-resize-edge-right = راست
|
||||
window-menu-resize-edge-bottom = پایین
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Näkymä seuraa osoitinta
|
||||
a11y-zoom-move-onedge = Näkymä liikkuu osoittimen osuessa reunaan
|
||||
a11y-zoom-move-centered = Näkymä liikkuu pitäen osoittimen keskellä
|
||||
a11y-zoom-settings = Suurennuslasin asetukset...
|
||||
window-menu-minimize = Pienennä
|
||||
window-menu-maximize = Suurenna
|
||||
window-menu-fullscreen = Koko näyttö
|
||||
window-menu-screenshot = Ota kuvakaappaus
|
||||
window-menu-move = Siirrä
|
||||
window-menu-resize = Muuta kokoa
|
||||
window-menu-move-prev-workspace = Siirrä edelliseen työtilaan
|
||||
window-menu-move-next-workspace = Siirrä seuraavaan työtilaan
|
||||
window-menu-stack = Luo ikkunapino
|
||||
window-menu-unstack-all = Poista ikkunat pinosta
|
||||
window-menu-unstack = Poista ikkuna pinosta
|
||||
window-menu-close = Sulje
|
||||
window-menu-close-all = Sulje kaikki ikkunat
|
||||
swap-windows = Vaihda ikkunoita
|
||||
unknown-keybinding = <ei asetettu>
|
||||
window-menu-tiled = Leijuva ikkuna
|
||||
window-menu-sticky = Tahmea ikkuna
|
||||
grow-window = Kasvata
|
||||
shrink-window = Kutista
|
||||
stack-windows = Pinoa ikkunat
|
||||
window-menu-resize-edge-top = Ylös
|
||||
window-menu-resize-edge-left = Vasemmalle
|
||||
window-menu-resize-edge-right = Oikealle
|
||||
window-menu-resize-edge-bottom = Alas
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = Agrandir
|
||||
shrink-window = Réduire
|
||||
swap-windows = Basculer les fenêtres
|
||||
stack-windows = Regrouper les fenêtres
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimiser
|
||||
window-menu-maximize = Maximiser
|
||||
window-menu-tiled = Fenêtre flottante
|
||||
window-menu-screenshot = Prendre une capture d'écran
|
||||
window-menu-move = Déplacer
|
||||
window-menu-resize = Redimensionner
|
||||
window-menu-move-prev-workspace = Déplacer vers l'espace de travail précédent
|
||||
window-menu-move-next-workspace = Déplacer vers l'espace de travail suivant
|
||||
window-menu-stack = Créer un regroupement de fenêtres
|
||||
window-menu-unstack-all = Dégrouper toutes les fenêtres
|
||||
window-menu-unstack = Dégrouper la fenêtre
|
||||
window-menu-sticky = Fenêtre épinglée
|
||||
window-menu-close = Fermer
|
||||
window-menu-close-all = Fermer toutes les fenêtres
|
||||
window-menu-resize-edge-top = Haut
|
||||
window-menu-resize-edge-left = Gauche
|
||||
window-menu-resize-edge-right = Droite
|
||||
window-menu-resize-edge-bottom = Bas
|
||||
window-menu-fullscreen = Plein écran
|
||||
a11y-zoom-move-onedge = La vue se déplace lorsque le curseur atteint le bord
|
||||
a11y-zoom-move-centered = La vue se déplace pour maintenir le curseur centré
|
||||
a11y-zoom-settings = Paramètres de la loupe...
|
||||
a11y-zoom-move-continuously = La vue se déplace continuellement avec le curseur
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Bogann an radharc go leanúnach leis an pointeoir
|
||||
a11y-zoom-move-onedge = Bogann an radharc nuair a shroicheann an pointeoir an imeall
|
||||
a11y-zoom-move-centered = Féach ar ghluaiseachtaí chun an pointeoir a choinneáil i lár an aonaigh
|
||||
a11y-zoom-settings = Socruithe formhéadaitheora...
|
||||
grow-window = Fás
|
||||
shrink-window = Laghdaigh
|
||||
swap-windows = Malartaigh fuinneoga
|
||||
stack-windows = Fuinneoga Cruachta
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Íoslaghdaigh
|
||||
window-menu-maximize = Uasmhéadaigh
|
||||
window-menu-fullscreen = Lánscáileán
|
||||
window-menu-tiled = Fuinneog snámhach
|
||||
window-menu-screenshot = Tóg seat scáileán
|
||||
window-menu-move = Bog
|
||||
window-menu-resize = Athraigh méid
|
||||
window-menu-move-prev-workspace = Bog go dtí an spás oibre roimhe seo
|
||||
window-menu-move-next-workspace = Bog go dtí an chéad spás oibre eile
|
||||
window-menu-stack = Cruigh cruach fuinneoige
|
||||
window-menu-unstack-all = Díchruachadh fuinneoga
|
||||
window-menu-unstack = Fuinneog a dhíchruachadh
|
||||
window-menu-sticky = Fuinneog ghreamaitheach
|
||||
window-menu-close = Dún
|
||||
window-menu-close-all = Dún na fuinneoga go léir
|
||||
window-menu-resize-edge-top = Barr
|
||||
window-menu-resize-edge-left = Ar chlé
|
||||
window-menu-resize-edge-right = Ar dheis
|
||||
window-menu-resize-edge-bottom = Bun
|
||||
@@ -0,0 +1,23 @@
|
||||
grow-window = Fàs
|
||||
shrink-window = Seac
|
||||
swap-windows = Mùth uinneagan
|
||||
stack-windows = Stac uinneagan
|
||||
unknown-keybinding = <falamh>
|
||||
window-menu-minimize = Fìor-lùghdaich
|
||||
window-menu-maximize = Làn-mheudaich
|
||||
window-menu-tiled = Uinneag fleòdraidh
|
||||
window-menu-screenshot = Gabh dealbh-sgrìn
|
||||
window-menu-move = Gluais
|
||||
window-menu-resize = Ath-mheudachadh
|
||||
window-menu-move-prev-workspace = Gluais gu àite-obrach roimhe
|
||||
window-menu-move-next-workspace = Gluais chun ath àite-obrach
|
||||
window-menu-stack = Cruthaich stac uinneig
|
||||
window-menu-unstack-all = Thoir air falbh na h-uinneagan
|
||||
window-menu-unstack = Thoir air falbh an uinneag
|
||||
window-menu-sticky = Uinneag steigeach
|
||||
window-menu-close = Dùin
|
||||
window-menu-close-all = Dùin a h-uile uinneag
|
||||
window-menu-resize-edge-top = Bàrr
|
||||
window-menu-resize-edge-left = Clì
|
||||
window-menu-resize-edge-right = Deas
|
||||
window-menu-resize-edge-bottom = Bun
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = A nézet folyamatosan követi a mutatót
|
||||
a11y-zoom-move-onedge = A nézet csak akkor mozog, ha a mutató eléri a szélét
|
||||
a11y-zoom-move-centered = A nézet úgy mozog, hogy a mutató középen maradjon
|
||||
a11y-zoom-settings = Nagyító beállításai…
|
||||
grow-window = Növelés
|
||||
shrink-window = Zsugorítás
|
||||
swap-windows = Ablakok felcserélése
|
||||
stack-windows = Ablakok egymásra helyezése
|
||||
unknown-keybinding = <nincs beállítva>
|
||||
window-menu-minimize = Minimalizálás
|
||||
window-menu-maximize = Maximalizálás
|
||||
window-menu-fullscreen = Teljes képernyő
|
||||
window-menu-tiled = Ablak lebegtetése
|
||||
window-menu-screenshot = Képernyőkép készítése
|
||||
window-menu-move = Mozgatás
|
||||
window-menu-resize = Átméretezés
|
||||
window-menu-move-prev-workspace = Áthelyezés az előző munkaterületre
|
||||
window-menu-move-next-workspace = Áthelyezés a következő munkaterületre
|
||||
window-menu-stack = Ablakhalom létrehozása
|
||||
window-menu-unstack-all = Ablakok szétválasztása
|
||||
window-menu-unstack = Ablak szétválasztása
|
||||
window-menu-sticky = Ragadós ablak
|
||||
window-menu-close = Bezárás
|
||||
window-menu-close-all = Összes ablak bezárása
|
||||
window-menu-resize-edge-top = Felső
|
||||
window-menu-resize-edge-left = Bal
|
||||
window-menu-resize-edge-right = Jobb
|
||||
window-menu-resize-edge-bottom = Alsó
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Tampilan bergerak terus menerus dengan penunjuk
|
||||
a11y-zoom-move-onedge = Tampilan bergerak saat penunjuk mencapai tepi
|
||||
a11y-zoom-move-centered = Tampilan bergerak untuk menjaga penunjuk tetap di tengah
|
||||
a11y-zoom-settings = Pengaturan kaca pembesar...
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-resize-edge-top = Atas
|
||||
window-menu-resize-edge-left = Kiri
|
||||
window-menu-resize-edge-right = Kanan
|
||||
window-menu-resize-edge-bottom = Bawah
|
||||
window-menu-close = Tutup
|
||||
window-menu-close-all = Tutup semua jendela
|
||||
grow-window = Perbesar
|
||||
shrink-window = Perkecil
|
||||
swap-windows = Tukarkan Jendela
|
||||
stack-windows = Tumpukkan Jendela
|
||||
window-menu-screenshot = Ambil tangkapan layar
|
||||
window-menu-move = Pindahkan
|
||||
window-menu-resize = Ukur ulang
|
||||
window-menu-minimize = Perkecil
|
||||
window-menu-maximize = Perbesar
|
||||
window-menu-fullscreen = Layar penuh
|
||||
window-menu-tiled = Jendela apung
|
||||
window-menu-move-prev-workspace = Pindahkan ke ruang kerja sebelumnya
|
||||
window-menu-move-next-workspace = Pindahkan ke ruang kerja selanjutnya
|
||||
window-menu-stack = Buat tumpukan jendela
|
||||
window-menu-sticky = Jendela lengket
|
||||
window-menu-unstack-all = Bongkar tumpukan jendela
|
||||
window-menu-unstack = Bongkar tumpukan jendela
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Skjásýn færist stöðugt með bendli
|
||||
a11y-zoom-move-onedge = Skjásýn færist þegar bendill kemur að brún
|
||||
a11y-zoom-move-centered = Skjásýn færist til að halda bendli í miðju
|
||||
a11y-zoom-settings = Stillingar stækkunarglers...
|
||||
stack-windows = Stafla gluggum
|
||||
window-menu-minimize = Fela
|
||||
window-menu-maximize = Fullstækka
|
||||
window-menu-fullscreen = Fylla skjá
|
||||
window-menu-tiled = Fleyta glugga
|
||||
window-menu-screenshot = Taka skjámynd
|
||||
window-menu-move = Færa
|
||||
window-menu-resize = Breyta stærð
|
||||
window-menu-move-prev-workspace = Færa á fyrra vinnusvæði
|
||||
window-menu-move-next-workspace = Færa á næsta vinnusvæði
|
||||
window-menu-stack = Búa til gluggastafla
|
||||
window-menu-unstack-all = Afstafla gluggum
|
||||
window-menu-unstack = Afstafla glugga
|
||||
window-menu-close = Loka
|
||||
window-menu-close-all = Loka öllum gluggum
|
||||
window-menu-resize-edge-top = Efst
|
||||
window-menu-resize-edge-left = Vinstri
|
||||
window-menu-resize-edge-right = Hægri
|
||||
window-menu-resize-edge-bottom = Neðst
|
||||
swap-windows = Skipta út gluggum
|
||||
grow-window = Víkka út
|
||||
shrink-window = Draga saman
|
||||
window-menu-sticky = Klístraður gluggi
|
||||
unknown-keybinding = <afvelja>
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = Crescere
|
||||
shrink-window = Riduci
|
||||
swap-windows = Scambia le finestre
|
||||
stack-windows = Sovrapponi le finestre
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimizza
|
||||
window-menu-maximize = Massimizza
|
||||
window-menu-tiled = Finestra flottante
|
||||
window-menu-screenshot = Scatta uno screenshot
|
||||
window-menu-move = Sposta
|
||||
window-menu-resize = Ridimensiona
|
||||
window-menu-move-prev-workspace = Sposta all'area di lavoro precedente
|
||||
window-menu-move-next-workspace = Sposta all'area di lavoro successiva
|
||||
window-menu-stack = Crea una pila di finestre
|
||||
window-menu-unstack-all = Disimpila le finestre
|
||||
window-menu-unstack = Disimpila la finestra
|
||||
window-menu-sticky = Finestra fissa
|
||||
window-menu-close = Chiudi
|
||||
window-menu-close-all = Chiudi tutte le finestre
|
||||
window-menu-resize-edge-top = In alto
|
||||
window-menu-resize-edge-left = Sinistra
|
||||
window-menu-resize-edge-right = Destra
|
||||
window-menu-resize-edge-bottom = In basso
|
||||
window-menu-fullscreen = Schermo intero
|
||||
a11y-zoom-settings = Impostazioni lente d'ingrandimento...
|
||||
a11y-zoom-move-continuously = Segue sempre il cursorse
|
||||
a11y-zoom-move-centered = Mantiene il cursore centrato
|
||||
a11y-zoom-move-onedge = Segue il cursore ai bordi
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = 伸びさせる
|
||||
shrink-window = 縮ませる
|
||||
swap-windows = ウィンドウを取り替える
|
||||
stack-windows = ウィンドウを積む
|
||||
unknown-keybinding = <設定されていない>
|
||||
window-menu-minimize = 最小化
|
||||
window-menu-maximize = 最大化
|
||||
window-menu-tiled = フローティングにする
|
||||
window-menu-screenshot = スクリーンショットを撮る
|
||||
window-menu-move = 動かす
|
||||
window-menu-resize = サイズ変更
|
||||
window-menu-move-prev-workspace = 前のワークスペースに切り替える
|
||||
window-menu-move-next-workspace = 次のワークスペースに切り替える
|
||||
window-menu-stack = ウィンドウ積み重ねを作成
|
||||
window-menu-unstack-all = すべてのウィンドウを下ろす
|
||||
window-menu-unstack = ウィンドウを下ろす
|
||||
window-menu-sticky = スティッキーウィンドウ
|
||||
window-menu-close = 閉じる
|
||||
window-menu-close-all = ウィンドウをすべて閉じる
|
||||
window-menu-resize-edge-top = 上
|
||||
window-menu-resize-edge-left = 左
|
||||
window-menu-resize-edge-right = 右
|
||||
window-menu-resize-edge-bottom = 下
|
||||
a11y-zoom-move-continuously = ポインターに合わせてビューを継続的に移動
|
||||
a11y-zoom-move-onedge = ポインターが端に達するとビューを移動
|
||||
a11y-zoom-move-centered = ポインターを中央に維持するようにビューを移動
|
||||
a11y-zoom-settings = 拡大鏡の設定...
|
||||
window-menu-fullscreen = フルスクリーン
|
||||
@@ -0,0 +1,27 @@
|
||||
window-menu-fullscreen = Agdil aččuran
|
||||
window-menu-close = Mdel
|
||||
window-menu-resize-edge-top = D asawen
|
||||
window-menu-resize-edge-left = Zelmaḍ
|
||||
window-menu-resize-edge-right = Yeffus
|
||||
window-menu-resize-edge-bottom = Ddaw
|
||||
window-menu-screenshot = Ṭṭef tuṭṭfa n ugdil
|
||||
a11y-zoom-settings = Iɣewwaṛen n usemɣeṛ…
|
||||
grow-window = Semɣer
|
||||
shrink-window = Semẓi
|
||||
stack-windows = Settef isfuyla
|
||||
window-menu-minimize = Senɣes
|
||||
window-menu-maximize = Afellay
|
||||
window-menu-tiled = Asfaylu yettifliwen
|
||||
window-menu-move = Smutti
|
||||
window-menu-move-prev-workspace = Smutti ɣer tallunt n umahil tuzwirt
|
||||
window-menu-move-next-workspace = Smutti ɣer tallunt n umahil tuḍfirt
|
||||
window-menu-stack = Rnu asettef n isfuyla
|
||||
window-menu-unstack-all = Kkes asettef n isfuyla
|
||||
window-menu-unstack = Kkes asettef n usfaylu
|
||||
window-menu-sticky = Asfaylu amsenṭaḍ
|
||||
window-menu-close-all = Mdel akk isfuyla
|
||||
a11y-zoom-move-continuously = Timeẓri tezga dima tetteddu s usewwaṛ
|
||||
a11y-zoom-move-onedge = Timeẓri tetteddu mi ara yaweḍ usewwaṛ ɣer yiri
|
||||
a11y-zoom-move-centered = Timeẓri tetteddu iwakken ad tḥerzeḍ asewwaṛ d alemmas
|
||||
swap-windows = Senfel isfuyla
|
||||
window-menu-resize = Beddel tiddi
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Көрініс курсормен бірге үздіксіз қозғалады
|
||||
a11y-zoom-move-onedge = Көрініс курсор жиекке жеткенде қозғалады
|
||||
a11y-zoom-move-centered = Көрініс курсорды ортада сақтау үшін қозғалады
|
||||
a11y-zoom-settings = Үлкейткіш баптаулары...
|
||||
grow-window = Үлкейту
|
||||
shrink-window = Кішірейту
|
||||
swap-windows = Терезелерді алмастыру
|
||||
stack-windows = Терезелерді жинақтау
|
||||
unknown-keybinding = <орнатылмаған>
|
||||
window-menu-minimize = Қайыру
|
||||
window-menu-maximize = Жазық қылу
|
||||
window-menu-fullscreen = Толық экран
|
||||
window-menu-tiled = Қалқымалы терезе
|
||||
window-menu-screenshot = Скриншот түсіру
|
||||
window-menu-move = Жылжыту
|
||||
window-menu-resize = Өлшемін өзгерту
|
||||
window-menu-move-prev-workspace = Алдыңғы жұмыс орнына жылжыту
|
||||
window-menu-move-next-workspace = Келесі жұмыс орнына жылжыту
|
||||
window-menu-stack = Терезелер жинағын жасау
|
||||
window-menu-unstack-all = Терезелерді жинақтан шығару
|
||||
window-menu-unstack = Терезені жинақтан шығару
|
||||
window-menu-sticky = Жабысқақ терезе
|
||||
window-menu-close = Жабу
|
||||
window-menu-close-all = Барлық терезелерді жабу
|
||||
window-menu-resize-edge-top = Жоғарғы
|
||||
window-menu-resize-edge-left = Сол жақ
|
||||
window-menu-resize-edge-right = Оң жақ
|
||||
window-menu-resize-edge-bottom = Төменгі
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = Mezin bike
|
||||
shrink-window = Biçûk bike
|
||||
window-menu-move = Bilivîne
|
||||
window-menu-close = Bigire
|
||||
window-menu-resize-edge-top = Jor
|
||||
window-menu-resize-edge-left = Çep
|
||||
window-menu-resize-edge-right = Rast
|
||||
window-menu-resize-edge-bottom = Jêr
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Biçûk bike
|
||||
window-menu-maximize = Mezin bike
|
||||
window-menu-fullscreen = Dîmendera tije
|
||||
window-menu-tiled = Çarçoveya herikbar
|
||||
window-menu-screenshot = Wêneya dîmenderê bigire
|
||||
window-menu-resize = Mezinahiyê ji nû ve saz bike
|
||||
window-menu-move-prev-workspace = Bilivîne bo qada xebatê ya paş
|
||||
window-menu-move-next-workspace = Bilivîne bo qada xebatê ya pêş
|
||||
window-menu-stack = Komkirina çarçoveyê biafrîne
|
||||
window-menu-unstack-all = Çarçoveyan kom neke
|
||||
window-menu-unstack = Çarçoveyê kom neke
|
||||
window-menu-sticky = Çarçoveya daliqandî
|
||||
window-menu-close-all = Hemû çarçoveyan bigire
|
||||
a11y-zoom-move-continuously = Dîtin bi nîşanker re bi awayekî domdar dilive
|
||||
a11y-zoom-move-onedge = Dîtin dema nîşanker dikeve qeraxê dilive
|
||||
a11y-zoom-move-centered = Dîtin dilive da ku nîşanker navîn bimîne
|
||||
a11y-zoom-settings = Sazkariyên mezinkerê...
|
||||
swap-windows = Çarçoveyan biguhêrîne
|
||||
stack-windows = Çarçoveyan dalqîne
|
||||
@@ -0,0 +1,28 @@
|
||||
window-menu-resize-edge-top = 상단
|
||||
window-menu-resize-edge-left = 좌측
|
||||
window-menu-resize-edge-right = 우측
|
||||
window-menu-resize-edge-bottom = 하단
|
||||
window-menu-move = 이동
|
||||
window-menu-minimize = 최소화
|
||||
window-menu-maximize = 최대화
|
||||
window-menu-fullscreen = 전체 화면
|
||||
window-menu-move-prev-workspace = 이전 작업 공간으로 이동
|
||||
window-menu-move-next-workspace = 다음 작업 공간으로 이동
|
||||
a11y-zoom-settings = 돋보기 설정...
|
||||
grow-window = 확대
|
||||
shrink-window = 축소
|
||||
swap-windows = 창 바꾸기
|
||||
stack-windows = 창 스택
|
||||
window-menu-tiled = 플로팅 창으로 전환
|
||||
window-menu-screenshot = 스크린샷 찍기
|
||||
window-menu-resize = 크기 조정
|
||||
window-menu-stack = 창 스택 생성
|
||||
window-menu-unstack-all = 모든 창 스택 해제
|
||||
window-menu-unstack = 창 스택 해제
|
||||
a11y-zoom-move-continuously = 포인터를 따라 화면이 계속 이동
|
||||
a11y-zoom-move-onedge = 포인터가 가장자리에 도달할 때 화면 이동
|
||||
a11y-zoom-move-centered = 포인터를 화면 중앙에 유지하며 이동
|
||||
window-menu-close = 닫기
|
||||
window-menu-close-all = 모든 창 닫기
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-sticky = 고정된 창
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Vaizdo nuolatinis žymeklio sekimas
|
||||
a11y-zoom-move-onedge = Vaizdo sekimas, kol žymeklis pasieks kraštą
|
||||
a11y-zoom-move-centered = Rodyti vaizdą taip, kad žymeklis būtų centre
|
||||
a11y-zoom-settings = Didinamojo stiklo nustatymai...
|
||||
grow-window = Didinti
|
||||
shrink-window = Mažinti
|
||||
swap-windows = Apkeisti Langus Vietomis
|
||||
stack-windows = Kaupti Langus
|
||||
unknown-keybinding = <nenustatytas>
|
||||
window-menu-minimize = Sumažinti
|
||||
window-menu-maximize = Padidinti
|
||||
window-menu-fullscreen = Visas ekranas
|
||||
window-menu-tiled = Slankus langas
|
||||
window-menu-screenshot = Padaryti ekrano kopiją
|
||||
window-menu-move = Perkelti
|
||||
window-menu-resize = Keisti dydį
|
||||
window-menu-move-prev-workspace = Perkelti į ankstesnę darbo sritį
|
||||
window-menu-move-next-workspace = Perkelti į sekančią darbo sritį
|
||||
window-menu-stack = Sukurti langų krūvą
|
||||
window-menu-unstack-all = Išskaidyti langus iš krūvos
|
||||
window-menu-unstack = Atskirti langą nuo krūvos
|
||||
window-menu-sticky = Lipnus langas
|
||||
window-menu-close = Užverti
|
||||
window-menu-close-all = Užverti visus langus
|
||||
window-menu-resize-edge-top = Viršus
|
||||
window-menu-resize-edge-left = Kairė
|
||||
window-menu-resize-edge-right = Dešinė
|
||||
window-menu-resize-edge-bottom = Apačia
|
||||
@@ -0,0 +1,28 @@
|
||||
window-menu-tiled = Flytende vindu
|
||||
a11y-zoom-settings = Forstørrelsesglass-innstillinger...
|
||||
grow-window = Voks
|
||||
shrink-window = Krymp
|
||||
swap-windows = Bytt Vinduer
|
||||
stack-windows = Stable Vinduer
|
||||
unknown-keybinding = <usatt>
|
||||
window-menu-minimize = Minimer
|
||||
window-menu-maximize = Maksimer
|
||||
window-menu-fullscreen = Fullskjerm
|
||||
window-menu-screenshot = Ta skjermbilde
|
||||
window-menu-move = Flytt
|
||||
window-menu-resize = Endre størrelse
|
||||
window-menu-move-prev-workspace = Flytt til forrige arbeidsområde
|
||||
window-menu-move-next-workspace = Flytt til neste arbeidsområde
|
||||
window-menu-stack = Lag vindustabel
|
||||
window-menu-unstack-all = Løsne vinduer
|
||||
window-menu-unstack = Løsne vindu
|
||||
window-menu-sticky = Festet vindu
|
||||
window-menu-close = Lukk
|
||||
window-menu-resize-edge-right = Høyre
|
||||
window-menu-resize-edge-bottom = Nederst
|
||||
window-menu-close-all = Lukk alle vinduer
|
||||
window-menu-resize-edge-left = Venstre
|
||||
window-menu-resize-edge-top = Øverst
|
||||
a11y-zoom-move-centered = Visningen flytter seg for å holde pekeren sentrert
|
||||
a11y-zoom-move-onedge = Visningen flytter seg når pekeren når kanten
|
||||
a11y-zoom-move-continuously = Visningen flytter seg kontinuerlig med pekeren
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Aanzicht met de cursor mee laten bewegen
|
||||
a11y-zoom-move-onedge = Aanzicht verplaatst zich pas als de cursor een schermrand raakt
|
||||
a11y-zoom-move-centered = Aanzicht houdt de cursor gecentreerd
|
||||
a11y-zoom-settings = Vergrootglasinstellingen…
|
||||
grow-window = Vergroten
|
||||
shrink-window = Verkleinen
|
||||
swap-windows = Vensters omwisselen
|
||||
stack-windows = Vensters stapelen
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimaliseren
|
||||
window-menu-maximize = Maximaliseren
|
||||
window-menu-tiled = Venster laten zweven
|
||||
window-menu-screenshot = Schermafdruk maken
|
||||
window-menu-move = Verplaatsen
|
||||
window-menu-resize = Grootte aanpassen
|
||||
window-menu-move-prev-workspace = Naar vorig werkblad verplaatsen
|
||||
window-menu-move-next-workspace = Naar volgend werkblad verplaatsen
|
||||
window-menu-stack = Vensterstapel beginnen
|
||||
window-menu-unstack-all = Vensterstapel opheffen
|
||||
window-menu-unstack = Venster uit stapel halen
|
||||
window-menu-sticky = Venster vastzetten
|
||||
window-menu-close = Sluiten
|
||||
window-menu-close-all = Alle vensters sluiten
|
||||
window-menu-resize-edge-top = Boven
|
||||
window-menu-resize-edge-left = Links
|
||||
window-menu-resize-edge-right = Rechts
|
||||
window-menu-resize-edge-bottom = Onder
|
||||
window-menu-fullscreen = Volledig scherm
|
||||
@@ -0,0 +1 @@
|
||||
a11y-zoom-move-continuously = Visninga flyttar seg kontinuerleg med peikaren
|
||||
@@ -0,0 +1,21 @@
|
||||
grow-window = ਵਧਾਓ
|
||||
a11y-zoom-settings = ਵੱਡਦਰਸ਼ੀ ਸੈਟਿੰਗਾਂ...
|
||||
shrink-window = ਸੰਘੁੜੋ
|
||||
swap-windows = ਵਿੰਡੋਆਂ ਨੂੰ ਆਪਸ 'ਚ ਬਦਲੋ
|
||||
stack-windows = ਵਿੰਡੋਆਂ ਦਾ ਢੇਰ ਲਾਓ
|
||||
window-menu-minimize = ਘੱਟੋ-ਘੱਟ
|
||||
window-menu-maximize = ਵੱਧ ਤੋਂ ਵੱਧ
|
||||
window-menu-fullscreen = ਪੂਰੀ ਸਕਰੀਨ
|
||||
window-menu-tiled = ਤਰਦੀ ਵਿੰਡੋ
|
||||
window-menu-screenshot = ਸਕਰੀਨਸ਼ਾਟ ਲਵੋ
|
||||
window-menu-move = ਭੇਜੋ
|
||||
window-menu-resize = ਆਕਾਰ ਬਦਲੋ
|
||||
window-menu-move-prev-workspace = ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਭੇਜੋ
|
||||
window-menu-move-next-workspace = ਅਗਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਭੇਜੋ
|
||||
window-menu-stack = ਵਿੰਡੋ ਢੇਰੀ ਬਣਾਓ
|
||||
window-menu-close = ਬੰਦ ਕਰੋ
|
||||
window-menu-close-all = ਸਾਰੀਆਂ ਵਿੰਡੋਆਂ ਨੂੰ ਬੰਦ ਕਰੋ
|
||||
window-menu-resize-edge-top = ਉੱਤੇ
|
||||
window-menu-resize-edge-left = ਖੱਬੇ
|
||||
window-menu-resize-edge-right = ਸੱਜੇ
|
||||
window-menu-resize-edge-bottom = ਹੇਠਾਂ
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Widok podąża za wskaźnikiem
|
||||
a11y-zoom-move-onedge = Widok przesuwa się gdy wskaźnik osiąga krawędź
|
||||
a11y-zoom-move-centered = Widok przesuwa się tak, aby wskaźnik znajdował się w środku
|
||||
a11y-zoom-settings = Ustawienia lupy…
|
||||
grow-window = Powiększ
|
||||
shrink-window = Zmniejsz
|
||||
swap-windows = Zamień Okna Miejscami
|
||||
stack-windows = Okna w Kartach
|
||||
unknown-keybinding = <unset>
|
||||
window-menu-minimize = Minimalizuj
|
||||
window-menu-maximize = Maksymalizuj
|
||||
window-menu-tiled = Pływające Okno
|
||||
window-menu-screenshot = Zrób zrzut ekranu
|
||||
window-menu-move = Przesuń
|
||||
window-menu-resize = Zmień rozmiar
|
||||
window-menu-move-prev-workspace = Przenieś do poprzedniego obszaru roboczego
|
||||
window-menu-move-next-workspace = Przenieś do następnego obszaru roboczego
|
||||
window-menu-stack = Zgrupuj okna w karty
|
||||
window-menu-unstack-all = Rozdziel grupę okien
|
||||
window-menu-unstack = Wydziel okno z grupy
|
||||
window-menu-sticky = Zakrywające okno
|
||||
window-menu-close = Zamknij
|
||||
window-menu-close-all = Zamknij wszystkie okna
|
||||
window-menu-resize-edge-top = Górnej
|
||||
window-menu-resize-edge-left = Lewej
|
||||
window-menu-resize-edge-right = Prawej
|
||||
window-menu-resize-edge-bottom = Dolnej
|
||||
window-menu-fullscreen = Tryb Pełnoekranowy
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = A visualização se move continuamente com o ponteiro
|
||||
a11y-zoom-move-onedge = A visualização se move quando o ponteiro atinge a borda
|
||||
a11y-zoom-move-centered = A visualização se move para manter o ponteiro centralizado
|
||||
a11y-zoom-settings = Configurações do ampliador de tela...
|
||||
grow-window = Aumentar
|
||||
shrink-window = Diminuir
|
||||
swap-windows = Trocar janelas
|
||||
stack-windows = Empilhar janelas
|
||||
unknown-keybinding = <não configurado>
|
||||
window-menu-minimize = Minimizar
|
||||
window-menu-maximize = Maximizar
|
||||
window-menu-fullscreen = Tela cheia
|
||||
window-menu-tiled = Janela flutuante
|
||||
window-menu-screenshot = Fazer captura de tela
|
||||
window-menu-move = Mover
|
||||
window-menu-resize = Redimensionar
|
||||
window-menu-move-prev-workspace = Mover para o espaço de trabalho anterior
|
||||
window-menu-move-next-workspace = Mover para o próximo espaço de trabalho
|
||||
window-menu-stack = Empilhar janelas
|
||||
window-menu-unstack-all = Desempilhar janelas
|
||||
window-menu-unstack = Desempilhar janela
|
||||
window-menu-sticky = Manter a janela sempre na frente
|
||||
window-menu-close = Fechar
|
||||
window-menu-close-all = Fechar todas as janelas
|
||||
window-menu-resize-edge-top = Para cima
|
||||
window-menu-resize-edge-left = Para a esquerda
|
||||
window-menu-resize-edge-right = Para a direita
|
||||
window-menu-resize-edge-bottom = Para baixo
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = A visualização move-se continuamente com o cursor
|
||||
a11y-zoom-move-onedge = A vista move-se quando o ponteiro atinge a extremidade
|
||||
a11y-zoom-move-centered = A vista move-se para manter o ponteiro centrado
|
||||
a11y-zoom-settings = Definições do ampliador...
|
||||
grow-window = Aumentar
|
||||
shrink-window = Diminuir
|
||||
swap-windows = Trocar Janelas
|
||||
stack-windows = Empilhar Janelas
|
||||
unknown-keybinding = <não definido>
|
||||
window-menu-minimize = Minimizar
|
||||
window-menu-maximize = Maximizar
|
||||
window-menu-tiled = Janela flutuante
|
||||
window-menu-screenshot = Tirar uma captura de ecrã
|
||||
window-menu-move = Mover
|
||||
window-menu-resize = Redimensionar
|
||||
window-menu-move-prev-workspace = Mover para a área de trabalho anterior
|
||||
window-menu-move-next-workspace = Mover para a área de trabalho seguinte
|
||||
window-menu-stack = Criar pilha de janelas
|
||||
window-menu-unstack-all = Desempilhar janelas
|
||||
window-menu-unstack = Desempilhar janela
|
||||
window-menu-sticky = Janela fixa
|
||||
window-menu-close = Fechar
|
||||
window-menu-close-all = Fechar todas as janelas
|
||||
window-menu-resize-edge-top = Cima
|
||||
window-menu-resize-edge-left = Esquerda
|
||||
window-menu-resize-edge-right = Direita
|
||||
window-menu-resize-edge-bottom = Baixo
|
||||
window-menu-fullscreen = Ecrã inteiro
|
||||
@@ -0,0 +1,23 @@
|
||||
grow-window = Mărește
|
||||
shrink-window = Micșorează
|
||||
swap-windows = Schimbă ferestrele
|
||||
stack-windows = Suprapune ferestrele
|
||||
unknown-keybinding = <neatribuit>
|
||||
window-menu-minimize = Minimizează
|
||||
window-menu-maximize = Maximizează
|
||||
window-menu-tiled = Fereastră plutitoare
|
||||
window-menu-screenshot = Capturează ecranul
|
||||
window-menu-move = Mută
|
||||
window-menu-resize = Redimensionează
|
||||
window-menu-move-prev-workspace = Mută la spațiul de lucru anterior
|
||||
window-menu-move-next-workspace = Mută la spațiul de lucru următor
|
||||
window-menu-stack = Creează o stivă de ferestre
|
||||
window-menu-unstack-all = Scoate toate ferestrele din stivă
|
||||
window-menu-unstack = Scoate fereastra din stivă
|
||||
window-menu-sticky = Fereastră vizibilă permanent
|
||||
window-menu-close = Închide
|
||||
window-menu-close-all = Închide toate ferestrele
|
||||
window-menu-resize-edge-top = Sus
|
||||
window-menu-resize-edge-left = Stânga
|
||||
window-menu-resize-edge-right = Dreapta
|
||||
window-menu-resize-edge-bottom = Jos
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Лупа двигается за курсором
|
||||
a11y-zoom-move-onedge = Лупа двигается когда курсор достигает края
|
||||
a11y-zoom-move-centered = Лупа двигается с курсором в центре
|
||||
a11y-zoom-settings = Параметры лупы...
|
||||
grow-window = Увеличить
|
||||
shrink-window = Уменьшить
|
||||
swap-windows = Сменить окна
|
||||
stack-windows = Стопка
|
||||
unknown-keybinding = <не задано>
|
||||
window-menu-minimize = Свернуть
|
||||
window-menu-maximize = Развернуть
|
||||
window-menu-fullscreen = Во весь экран
|
||||
window-menu-tiled = Плавающее окно
|
||||
window-menu-screenshot = Сделать снимок окна
|
||||
window-menu-move = Переместить
|
||||
window-menu-resize = Изменить размер
|
||||
window-menu-move-prev-workspace = На пред. рабочий стол
|
||||
window-menu-move-next-workspace = На след. рабочий стол
|
||||
window-menu-stack = Создать стопку окон
|
||||
window-menu-unstack-all = Распустить стопку окон
|
||||
window-menu-unstack = Убрать из стопки
|
||||
window-menu-sticky = Закрепить окно поверх других
|
||||
window-menu-close = Закрыть
|
||||
window-menu-close-all = Закрыть все окна
|
||||
window-menu-resize-edge-top = Наверх
|
||||
window-menu-resize-edge-left = Влево
|
||||
window-menu-resize-edge-right = Вправо
|
||||
window-menu-resize-edge-bottom = Вниз
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Zobrazenie sa pohybuje nepretržite s kurzorom
|
||||
a11y-zoom-move-onedge = Zobrazenie sa pohybuje, keď kurzor dosiahne okraj
|
||||
a11y-zoom-move-centered = Zobrazenie sa pohybuje, aby kurzor zostal v strede
|
||||
a11y-zoom-settings = Nastavenia lupy...
|
||||
grow-window = Zväčšiť
|
||||
shrink-window = Zmenšiť
|
||||
swap-windows = Vymeniť okná
|
||||
stack-windows = Zoskupiť okná
|
||||
unknown-keybinding = <nenastavené>
|
||||
window-menu-minimize = Minimalizovať
|
||||
window-menu-maximize = Maximalizovať
|
||||
window-menu-fullscreen = Celá obrazovka
|
||||
window-menu-tiled = Plávajúce okno
|
||||
window-menu-screenshot = Urobiť snímku obrazovky
|
||||
window-menu-move = Presunúť
|
||||
window-menu-resize = Zmeniť veľkosť
|
||||
window-menu-move-prev-workspace = Presunúť na predchádzajúcu pracovnú plochu
|
||||
window-menu-move-next-workspace = Presunúť na nasledujúcu pracovnú plochu
|
||||
window-menu-stack = Vytvoriť skupinu okien
|
||||
window-menu-unstack-all = Oddeliť všetky okná
|
||||
window-menu-unstack = Oddeliť okno
|
||||
window-menu-sticky = Prilepiť okno
|
||||
window-menu-close = Zavrieť
|
||||
window-menu-close-all = Zavrieť všetky okná
|
||||
window-menu-resize-edge-top = Hore
|
||||
window-menu-resize-edge-left = Vľavo
|
||||
window-menu-resize-edge-right = Vpravo
|
||||
window-menu-resize-edge-bottom = Dole
|
||||
@@ -0,0 +1,28 @@
|
||||
grow-window = Повећај
|
||||
shrink-window = Смањи
|
||||
swap-windows = Замени прозоре
|
||||
stack-windows = Групиши прозоре
|
||||
unknown-keybinding = <није подешено>
|
||||
window-menu-minimize = Умањи
|
||||
window-menu-maximize = Увећај
|
||||
window-menu-tiled = Плутајући прозор
|
||||
window-menu-screenshot = Направи снимак апликације
|
||||
window-menu-move = Помери
|
||||
window-menu-resize = Промени величину
|
||||
window-menu-move-prev-workspace = Помери на претходни радни простор
|
||||
window-menu-move-next-workspace = Помери на следећи радни простор
|
||||
window-menu-stack = Направи групу прозора
|
||||
window-menu-unstack-all = Уклони све прозоре из групе
|
||||
window-menu-unstack = Уклони прозор из групе
|
||||
window-menu-sticky = Лепљиви прозор
|
||||
window-menu-close = Затвори
|
||||
window-menu-close-all = Затвори све прозоре
|
||||
window-menu-resize-edge-top = Горе
|
||||
window-menu-resize-edge-left = Лево
|
||||
window-menu-resize-edge-right = Десно
|
||||
window-menu-resize-edge-bottom = Доле
|
||||
a11y-zoom-move-continuously = Види покрете непрекидно помоћу показивача
|
||||
a11y-zoom-move-onedge = Покажи покрете када показивач достигне ивицу
|
||||
a11y-zoom-move-centered = Покажи покрете зарад центрирања показивача
|
||||
a11y-zoom-settings = Подешавања лупе...
|
||||
window-menu-fullscreen = Цео екран
|
||||
@@ -0,0 +1,23 @@
|
||||
grow-window = Povećaj
|
||||
shrink-window = Smanji
|
||||
swap-windows = Zameni prozore
|
||||
stack-windows = Grupiši prozore
|
||||
unknown-keybinding = <nije podešeno>
|
||||
window-menu-minimize = Umanji
|
||||
window-menu-maximize = Uvećaj
|
||||
window-menu-tiled = Plutajući prozor
|
||||
window-menu-screenshot = Napravi snimak aplikacije
|
||||
window-menu-move = Pomeri
|
||||
window-menu-resize = Promeni veličinu
|
||||
window-menu-move-prev-workspace = Pomeri na prethodni radni prostor
|
||||
window-menu-move-next-workspace = Pomeri na sledeći radni prostor
|
||||
window-menu-stack = Napravi grupu prozora
|
||||
window-menu-unstack-all = Ukloni sve prozore iz grupe
|
||||
window-menu-unstack = Ukloni prozor iz grupe
|
||||
window-menu-sticky = Lepljivi prozor
|
||||
window-menu-close = Zatvori
|
||||
window-menu-close-all = Zatvori sve prozore
|
||||
window-menu-resize-edge-top = Gore
|
||||
window-menu-resize-edge-left = Levo
|
||||
window-menu-resize-edge-right = Desno
|
||||
window-menu-resize-edge-bottom = Dole
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Преглед се непрекидно помера показивачем
|
||||
a11y-zoom-move-onedge = Преглед се помера када показивач достигне ивицу
|
||||
a11y-zoom-move-centered = Преглед се помера како би се показивач задржао на средини
|
||||
a11y-zoom-settings = Подешавања лупе...
|
||||
grow-window = Увећај
|
||||
shrink-window = Смањи
|
||||
swap-windows = Замени прозоре
|
||||
stack-windows = Наслагај прозоре
|
||||
unknown-keybinding = <непостављено>
|
||||
window-menu-minimize = Умањи
|
||||
window-menu-maximize = Увећај
|
||||
window-menu-fullscreen = Цео екран
|
||||
window-menu-tiled = Плутајући прозор
|
||||
window-menu-screenshot = Направи снимак екрана
|
||||
window-menu-move = Помери
|
||||
window-menu-resize = Промени величину
|
||||
window-menu-move-prev-workspace = Помери на претходни радни простор
|
||||
window-menu-move-next-workspace = Помери на следећи радни простор
|
||||
window-menu-stack = Направи стек прозора
|
||||
window-menu-unstack-all = Раздвоји прозоре
|
||||
window-menu-unstack = Одвоји прозор
|
||||
window-menu-sticky = Лепљив прозор
|
||||
window-menu-close = Затвори
|
||||
window-menu-close-all = Затвори све прозоре
|
||||
window-menu-resize-edge-top = Горе
|
||||
window-menu-resize-edge-left = Лево
|
||||
window-menu-resize-edge-right = Десно
|
||||
window-menu-resize-edge-bottom = Доле
|
||||
@@ -0,0 +1,28 @@
|
||||
a11y-zoom-move-continuously = Vyn flyttar sig kontinuerligt med pekaren
|
||||
a11y-zoom-move-onedge = Vyn flyttar på sig när pekaren når kanten
|
||||
a11y-zoom-move-centered = Vyn flyttar på sig för att behålla pekaren centrerad
|
||||
a11y-zoom-settings = Inställningar för förstoringsglas...
|
||||
grow-window = Väx
|
||||
shrink-window = Krymp
|
||||
swap-windows = Byt fönster
|
||||
stack-windows = Stapla fönstren
|
||||
unknown-keybinding = <inaktiverad>
|
||||
window-menu-minimize = Minimera
|
||||
window-menu-maximize = Maximera
|
||||
window-menu-tiled = Flytande fönster
|
||||
window-menu-screenshot = Ta skärmbild
|
||||
window-menu-move = Flytta
|
||||
window-menu-resize = Ändra storlek
|
||||
window-menu-move-prev-workspace = Flytta till föregående arbetsyta
|
||||
window-menu-move-next-workspace = Flytta till nästa arbetsyta
|
||||
window-menu-stack = Skapa fönsterstapel
|
||||
window-menu-unstack-all = Avstapla fönster
|
||||
window-menu-unstack = Avstapla fönster
|
||||
window-menu-sticky = Klistrigt fönster
|
||||
window-menu-close = Stäng
|
||||
window-menu-close-all = Stäng alla fönster
|
||||
window-menu-resize-edge-top = Högst upp
|
||||
window-menu-resize-edge-left = Vänster
|
||||
window-menu-resize-edge-right = Höger
|
||||
window-menu-resize-edge-bottom = Längst ned
|
||||
window-menu-fullscreen = Helskärm
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user