├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── Makefile ├── README.md ├── build.rs ├── data ├── extend.png ├── extension.png ├── gestures.png ├── launcher-animated.png ├── launcher.png ├── no-dock.png ├── no-extend.png └── resources.gresource.xml ├── debian ├── changelog ├── compat ├── control ├── copyright ├── libpop-desktop-widget-dev.install ├── libpop-desktop-widget.install ├── libpop-desktop-widget.shlibs ├── libpop-desktop-widget.trigger ├── rules └── source │ ├── format │ └── options ├── ffi ├── Cargo.toml ├── build.rs ├── pop_desktop_widget.h ├── pop_desktop_widget.pc.in └── src │ └── lib.rs ├── i18n.toml ├── i18n ├── cs │ └── pop_desktop_widget.ftl ├── da │ └── pop_desktop_widget.ftl ├── de │ └── pop_desktop_widget.ftl ├── en │ └── pop_desktop_widget.ftl ├── es │ └── pop_desktop_widget.ftl ├── fr │ └── pop_desktop_widget.ftl ├── it │ └── pop_desktop_widget.ftl ├── nl │ └── pop_desktop_widget.ftl ├── pl │ └── pop_desktop_widget.ftl ├── pt-BR │ └── pop_desktop_widget.ftl ├── pt │ └── pop_desktop_widget.ftl ├── ru │ └── pop_desktop_widget.ftl ├── sr │ └── pop_desktop_widget.ftl ├── sv │ └── pop_desktop_widget.ftl ├── tr │ └── pop_desktop_widget.ftl └── zh-CN │ └── pop_desktop_widget.ftl ├── rust-toolchain ├── rustfmt.toml ├── src ├── gis │ ├── dock.rs │ ├── extensions.rs │ ├── gestures.rs │ ├── launcher.rs │ ├── mod.rs │ └── panel.rs ├── gresource.rs ├── gst_video.rs ├── lib.rs ├── localize.rs └── main.rs └── tools ├── Cargo.toml └── src └── pkgconfig.rs /.gitignore: -------------------------------------------------------------------------------- 1 | debian/* 2 | !debian/source 3 | !debian/changelog 4 | !debian/compat 5 | !debian/control 6 | !debian/copyright 7 | !debian/*.install 8 | !debian/rules 9 | vendor.tar 10 | target/ 11 | vendor/ 12 | .cargo/ 13 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | Contributors to this repo agree to be bound by the [Pop! Code of Conduct](https://github.com/pop-os/code-of-conduct). 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributor Guidelines 2 | 3 | The three rules that contributors MUST follow: 4 | 5 | - Discuss a feature before implementing it 6 | - `cargo +nightly fmt` should always be run on code before creating a commit 7 | - Commits should follow the [Conventional Commit] guidelines 8 | - A small change in one commit is exempt from this rule 9 | 10 | Things that contributors SHOULD NOT be worried about: 11 | 12 | - Code style: `cargo fmt` renders this a nonissue 13 | - Code acceptance: in most circumstances, safe Rust code will be accepted on the spot 14 | - Commit messages: maintainers can revise them before or after merging 15 | 16 | Things that contributors SHOULD be aware of: 17 | 18 | - `rustup` should be the preferred tool for Rust developers 19 | - `cargo clippy` can point out the majority common mistakes in Rust code 20 | - `sbuild` can be used to verified that debian packages build correctly 21 | - `unsafe` is explicitly disallowed, unless otherwise permitted by a maintainer 22 | 23 | [conventional commit]: https://www.conventionalcommits.org/en/v1.0.0-beta.4/ 24 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "0.7.18" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "anyhow" 16 | version = "1.0.56" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" 19 | 20 | [[package]] 21 | name = "atk" 22 | version = "0.14.0" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba" 25 | dependencies = [ 26 | "atk-sys", 27 | "bitflags", 28 | "glib", 29 | "libc", 30 | ] 31 | 32 | [[package]] 33 | name = "atk-sys" 34 | version = "0.14.0" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea" 37 | dependencies = [ 38 | "glib-sys", 39 | "gobject-sys", 40 | "libc", 41 | "system-deps", 42 | ] 43 | 44 | [[package]] 45 | name = "autocfg" 46 | version = "1.1.0" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 49 | 50 | [[package]] 51 | name = "bitflags" 52 | version = "1.3.2" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 55 | 56 | [[package]] 57 | name = "block" 58 | version = "0.1.6" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 61 | 62 | [[package]] 63 | name = "cairo-rs" 64 | version = "0.14.9" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482" 67 | dependencies = [ 68 | "bitflags", 69 | "cairo-sys-rs", 70 | "glib", 71 | "libc", 72 | "thiserror", 73 | ] 74 | 75 | [[package]] 76 | name = "cairo-sys-rs" 77 | version = "0.14.9" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570" 80 | dependencies = [ 81 | "glib-sys", 82 | "libc", 83 | "system-deps", 84 | ] 85 | 86 | [[package]] 87 | name = "cascade" 88 | version = "1.0.0" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "f18c6a921baae2d947e4cf96f6ef1b5774b3056ae8edbdf5c5cfce4f33260921" 91 | 92 | [[package]] 93 | name = "cdylib-link-lines" 94 | version = "0.1.4" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "a317db7ea5b455731e51d7f632762716fa5c0b1098dcaa6221e55e2386d170f2" 97 | dependencies = [ 98 | "serde", 99 | "serde_derive", 100 | "toml", 101 | ] 102 | 103 | [[package]] 104 | name = "cfg-expr" 105 | version = "0.8.1" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e" 108 | dependencies = [ 109 | "smallvec", 110 | ] 111 | 112 | [[package]] 113 | name = "cfg-if" 114 | version = "1.0.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 117 | 118 | [[package]] 119 | name = "convert_case" 120 | version = "0.4.0" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 123 | 124 | [[package]] 125 | name = "dashmap" 126 | version = "4.0.2" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" 129 | dependencies = [ 130 | "cfg-if", 131 | "num_cpus", 132 | ] 133 | 134 | [[package]] 135 | name = "derive_more" 136 | version = "0.99.17" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 139 | dependencies = [ 140 | "convert_case", 141 | "proc-macro2", 142 | "quote", 143 | "rustc_version 0.4.0", 144 | "syn", 145 | ] 146 | 147 | [[package]] 148 | name = "either" 149 | version = "1.6.1" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 152 | 153 | [[package]] 154 | name = "ffi" 155 | version = "0.1.2" 156 | dependencies = [ 157 | "cdylib-link-lines", 158 | "glib", 159 | "gtk", 160 | "gtk-sys", 161 | "libc", 162 | "pop-desktop-widget", 163 | ] 164 | 165 | [[package]] 166 | name = "field-offset" 167 | version = "0.3.4" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" 170 | dependencies = [ 171 | "memoffset", 172 | "rustc_version 0.3.3", 173 | ] 174 | 175 | [[package]] 176 | name = "find-crate" 177 | version = "0.6.3" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" 180 | dependencies = [ 181 | "toml", 182 | ] 183 | 184 | [[package]] 185 | name = "fluent" 186 | version = "0.15.0" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "bc4d7142005e2066e4844caf9f271b93fc79836ee96ec85057b8c109687e629a" 189 | dependencies = [ 190 | "fluent-bundle", 191 | "unic-langid", 192 | ] 193 | 194 | [[package]] 195 | name = "fluent-bundle" 196 | version = "0.15.2" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd" 199 | dependencies = [ 200 | "fluent-langneg", 201 | "fluent-syntax", 202 | "intl-memoizer", 203 | "intl_pluralrules", 204 | "rustc-hash", 205 | "self_cell", 206 | "smallvec", 207 | "unic-langid", 208 | ] 209 | 210 | [[package]] 211 | name = "fluent-langneg" 212 | version = "0.13.0" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" 215 | dependencies = [ 216 | "unic-langid", 217 | ] 218 | 219 | [[package]] 220 | name = "fluent-syntax" 221 | version = "0.11.0" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78" 224 | dependencies = [ 225 | "thiserror", 226 | ] 227 | 228 | [[package]] 229 | name = "fomat-macros" 230 | version = "0.3.1" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "fe56556a8c9f9f556150eb6b390bc1a8b3715fd2ddbb4585f36b6a5672c6a833" 233 | 234 | [[package]] 235 | name = "futures-channel" 236 | version = "0.3.21" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 239 | dependencies = [ 240 | "futures-core", 241 | ] 242 | 243 | [[package]] 244 | name = "futures-core" 245 | version = "0.3.21" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 248 | 249 | [[package]] 250 | name = "futures-executor" 251 | version = "0.3.21" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 254 | dependencies = [ 255 | "futures-core", 256 | "futures-task", 257 | "futures-util", 258 | ] 259 | 260 | [[package]] 261 | name = "futures-io" 262 | version = "0.3.21" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 265 | 266 | [[package]] 267 | name = "futures-task" 268 | version = "0.3.21" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 271 | 272 | [[package]] 273 | name = "futures-util" 274 | version = "0.3.21" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 277 | dependencies = [ 278 | "futures-core", 279 | "futures-task", 280 | "pin-project-lite", 281 | "pin-utils", 282 | "slab", 283 | ] 284 | 285 | [[package]] 286 | name = "gdk" 287 | version = "0.14.3" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "b9d749dcfc00d8de0d7c3a289e04a04293eb5ba3d8a4e64d64911d481fa9933b" 290 | dependencies = [ 291 | "bitflags", 292 | "cairo-rs", 293 | "gdk-pixbuf", 294 | "gdk-sys", 295 | "gio", 296 | "glib", 297 | "libc", 298 | "pango", 299 | ] 300 | 301 | [[package]] 302 | name = "gdk-pixbuf" 303 | version = "0.14.0" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f" 306 | dependencies = [ 307 | "gdk-pixbuf-sys", 308 | "gio", 309 | "glib", 310 | "libc", 311 | ] 312 | 313 | [[package]] 314 | name = "gdk-pixbuf-sys" 315 | version = "0.14.0" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590" 318 | dependencies = [ 319 | "gio-sys", 320 | "glib-sys", 321 | "gobject-sys", 322 | "libc", 323 | "system-deps", 324 | ] 325 | 326 | [[package]] 327 | name = "gdk-sys" 328 | version = "0.14.0" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e" 331 | dependencies = [ 332 | "cairo-sys-rs", 333 | "gdk-pixbuf-sys", 334 | "gio-sys", 335 | "glib-sys", 336 | "gobject-sys", 337 | "libc", 338 | "pango-sys", 339 | "pkg-config", 340 | "system-deps", 341 | ] 342 | 343 | [[package]] 344 | name = "gio" 345 | version = "0.14.8" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "711c3632b3ebd095578a9c091418d10fed492da9443f58ebc8f45efbeb215cb0" 348 | dependencies = [ 349 | "bitflags", 350 | "futures-channel", 351 | "futures-core", 352 | "futures-io", 353 | "gio-sys", 354 | "glib", 355 | "libc", 356 | "once_cell", 357 | "thiserror", 358 | ] 359 | 360 | [[package]] 361 | name = "gio-sys" 362 | version = "0.14.0" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa" 365 | dependencies = [ 366 | "glib-sys", 367 | "gobject-sys", 368 | "libc", 369 | "system-deps", 370 | "winapi", 371 | ] 372 | 373 | [[package]] 374 | name = "glib" 375 | version = "0.14.8" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "7c515f1e62bf151ef6635f528d05b02c11506de986e43b34a5c920ef0b3796a4" 378 | dependencies = [ 379 | "bitflags", 380 | "futures-channel", 381 | "futures-core", 382 | "futures-executor", 383 | "futures-task", 384 | "glib-macros", 385 | "glib-sys", 386 | "gobject-sys", 387 | "libc", 388 | "once_cell", 389 | "smallvec", 390 | ] 391 | 392 | [[package]] 393 | name = "glib-macros" 394 | version = "0.14.1" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518" 397 | dependencies = [ 398 | "anyhow", 399 | "heck", 400 | "proc-macro-crate", 401 | "proc-macro-error", 402 | "proc-macro2", 403 | "quote", 404 | "syn", 405 | ] 406 | 407 | [[package]] 408 | name = "glib-sys" 409 | version = "0.14.0" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae" 412 | dependencies = [ 413 | "libc", 414 | "system-deps", 415 | ] 416 | 417 | [[package]] 418 | name = "gobject-sys" 419 | version = "0.14.0" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5" 422 | dependencies = [ 423 | "glib-sys", 424 | "libc", 425 | "system-deps", 426 | ] 427 | 428 | [[package]] 429 | name = "gstreamer" 430 | version = "0.17.4" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "c6a255f142048ba2c4a4dce39106db1965abe355d23f4b5335edea43a553faa4" 433 | dependencies = [ 434 | "bitflags", 435 | "cfg-if", 436 | "futures-channel", 437 | "futures-core", 438 | "futures-util", 439 | "glib", 440 | "gstreamer-sys", 441 | "libc", 442 | "muldiv", 443 | "num-integer", 444 | "num-rational", 445 | "once_cell", 446 | "paste", 447 | "pretty-hex", 448 | "thiserror", 449 | ] 450 | 451 | [[package]] 452 | name = "gstreamer-sys" 453 | version = "0.17.3" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "a81704feeb3e8599913bdd1e738455c2991a01ff4a1780cb62200993e454cc3e" 456 | dependencies = [ 457 | "glib-sys", 458 | "gobject-sys", 459 | "libc", 460 | "system-deps", 461 | ] 462 | 463 | [[package]] 464 | name = "gtk" 465 | version = "0.14.3" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c" 468 | dependencies = [ 469 | "atk", 470 | "bitflags", 471 | "cairo-rs", 472 | "field-offset", 473 | "futures-channel", 474 | "gdk", 475 | "gdk-pixbuf", 476 | "gio", 477 | "glib", 478 | "gtk-sys", 479 | "gtk3-macros", 480 | "libc", 481 | "once_cell", 482 | "pango", 483 | "pkg-config", 484 | ] 485 | 486 | [[package]] 487 | name = "gtk-extras" 488 | version = "0.3.1" 489 | source = "git+https://github.com/pop-os/gtk-extras#8dae9fee5f6d79a9e3c225308a9a8c54709dc8c3" 490 | dependencies = [ 491 | "cairo-rs", 492 | "cascade", 493 | "derive_more", 494 | "gdk", 495 | "gio", 496 | "glib", 497 | "gtk", 498 | "itertools 0.9.0", 499 | "log", 500 | "uuid", 501 | ] 502 | 503 | [[package]] 504 | name = "gtk-sys" 505 | version = "0.14.0" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e" 508 | dependencies = [ 509 | "atk-sys", 510 | "cairo-sys-rs", 511 | "gdk-pixbuf-sys", 512 | "gdk-sys", 513 | "gio-sys", 514 | "glib-sys", 515 | "gobject-sys", 516 | "libc", 517 | "pango-sys", 518 | "system-deps", 519 | ] 520 | 521 | [[package]] 522 | name = "gtk3-macros" 523 | version = "0.14.0" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79" 526 | dependencies = [ 527 | "anyhow", 528 | "heck", 529 | "proc-macro-crate", 530 | "proc-macro-error", 531 | "proc-macro2", 532 | "quote", 533 | "syn", 534 | ] 535 | 536 | [[package]] 537 | name = "heck" 538 | version = "0.3.3" 539 | source = "registry+https://github.com/rust-lang/crates.io-index" 540 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 541 | dependencies = [ 542 | "unicode-segmentation", 543 | ] 544 | 545 | [[package]] 546 | name = "hermit-abi" 547 | version = "0.1.19" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 550 | dependencies = [ 551 | "libc", 552 | ] 553 | 554 | [[package]] 555 | name = "i18n-config" 556 | version = "0.4.2" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "b62affcd43abfb51f3cbd8736f9407908dc5b44fc558a9be07460bbfd104d983" 559 | dependencies = [ 560 | "log", 561 | "serde", 562 | "serde_derive", 563 | "thiserror", 564 | "toml", 565 | "unic-langid", 566 | ] 567 | 568 | [[package]] 569 | name = "i18n-embed" 570 | version = "0.12.1" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | checksum = "3794c3d7fea43e076281c9213cfaaa7a53c3f18b1613f12514b9f575a2908457" 573 | dependencies = [ 574 | "fluent", 575 | "fluent-langneg", 576 | "fluent-syntax", 577 | "i18n-embed-impl", 578 | "intl-memoizer", 579 | "lazy_static", 580 | "locale_config", 581 | "log", 582 | "parking_lot", 583 | "rust-embed", 584 | "thiserror", 585 | "unic-langid", 586 | "walkdir", 587 | ] 588 | 589 | [[package]] 590 | name = "i18n-embed-fl" 591 | version = "0.5.0" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "4d91f4951bd0bc19624a06781bf8cd05bdd59057622e5d4240823b42a5f102d2" 594 | dependencies = [ 595 | "dashmap", 596 | "find-crate", 597 | "fluent", 598 | "fluent-syntax", 599 | "i18n-config", 600 | "i18n-embed", 601 | "lazy_static", 602 | "proc-macro-error", 603 | "proc-macro2", 604 | "quote", 605 | "strsim", 606 | "syn", 607 | "unic-langid", 608 | ] 609 | 610 | [[package]] 611 | name = "i18n-embed-impl" 612 | version = "0.7.0" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "2757ae6d1dd47fba009e86795350186fc4740a6e53a1b4f336a8a6725d20eb53" 615 | dependencies = [ 616 | "find-crate", 617 | "i18n-config", 618 | "proc-macro2", 619 | "quote", 620 | "syn", 621 | ] 622 | 623 | [[package]] 624 | name = "instant" 625 | version = "0.1.12" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 628 | dependencies = [ 629 | "cfg-if", 630 | ] 631 | 632 | [[package]] 633 | name = "intl-memoizer" 634 | version = "0.5.1" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f" 637 | dependencies = [ 638 | "type-map", 639 | "unic-langid", 640 | ] 641 | 642 | [[package]] 643 | name = "intl_pluralrules" 644 | version = "7.0.1" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "b18f988384267d7066cc2be425e6faf352900652c046b6971d2e228d3b1c5ecf" 647 | dependencies = [ 648 | "tinystr", 649 | "unic-langid", 650 | ] 651 | 652 | [[package]] 653 | name = "itertools" 654 | version = "0.9.0" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" 657 | dependencies = [ 658 | "either", 659 | ] 660 | 661 | [[package]] 662 | name = "itertools" 663 | version = "0.10.3" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 666 | dependencies = [ 667 | "either", 668 | ] 669 | 670 | [[package]] 671 | name = "lazy_static" 672 | version = "1.4.0" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 675 | 676 | [[package]] 677 | name = "libc" 678 | version = "0.2.121" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" 681 | 682 | [[package]] 683 | name = "libhandy" 684 | version = "0.8.0" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "5bcf9c79ec810a62f442ffd568d2de233983dc91c160abee4949b67a647024ed" 687 | dependencies = [ 688 | "bitflags", 689 | "gdk", 690 | "gdk-pixbuf", 691 | "gio", 692 | "glib", 693 | "gtk", 694 | "lazy_static", 695 | "libc", 696 | "libhandy-sys", 697 | "pango", 698 | ] 699 | 700 | [[package]] 701 | name = "libhandy-sys" 702 | version = "0.8.0" 703 | source = "registry+https://github.com/rust-lang/crates.io-index" 704 | checksum = "1938b93a8f29417992c452b7f43e7eff8a9f8d25b7f0bc923ae9d75b50a9cde3" 705 | dependencies = [ 706 | "gdk-pixbuf-sys", 707 | "gdk-sys", 708 | "gio-sys", 709 | "glib-sys", 710 | "gobject-sys", 711 | "gtk-sys", 712 | "libc", 713 | "pango-sys", 714 | "pkg-config", 715 | "system-deps", 716 | ] 717 | 718 | [[package]] 719 | name = "locale_config" 720 | version = "0.3.0" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" 723 | dependencies = [ 724 | "lazy_static", 725 | "objc", 726 | "objc-foundation", 727 | "regex", 728 | "winapi", 729 | ] 730 | 731 | [[package]] 732 | name = "lock_api" 733 | version = "0.4.7" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 736 | dependencies = [ 737 | "autocfg", 738 | "scopeguard", 739 | ] 740 | 741 | [[package]] 742 | name = "log" 743 | version = "0.4.16" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" 746 | dependencies = [ 747 | "cfg-if", 748 | ] 749 | 750 | [[package]] 751 | name = "malloc_buf" 752 | version = "0.0.6" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 755 | dependencies = [ 756 | "libc", 757 | ] 758 | 759 | [[package]] 760 | name = "memchr" 761 | version = "2.4.1" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 764 | 765 | [[package]] 766 | name = "memoffset" 767 | version = "0.6.5" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 770 | dependencies = [ 771 | "autocfg", 772 | ] 773 | 774 | [[package]] 775 | name = "muldiv" 776 | version = "1.0.0" 777 | source = "registry+https://github.com/rust-lang/crates.io-index" 778 | checksum = "b5136edda114182728ccdedb9f5eda882781f35fa6e80cc360af12a8932507f3" 779 | 780 | [[package]] 781 | name = "num-integer" 782 | version = "0.1.44" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" 785 | dependencies = [ 786 | "autocfg", 787 | "num-traits", 788 | ] 789 | 790 | [[package]] 791 | name = "num-rational" 792 | version = "0.4.0" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" 795 | dependencies = [ 796 | "autocfg", 797 | "num-integer", 798 | "num-traits", 799 | ] 800 | 801 | [[package]] 802 | name = "num-traits" 803 | version = "0.2.14" 804 | source = "registry+https://github.com/rust-lang/crates.io-index" 805 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 806 | dependencies = [ 807 | "autocfg", 808 | ] 809 | 810 | [[package]] 811 | name = "num_cpus" 812 | version = "1.13.1" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 815 | dependencies = [ 816 | "hermit-abi", 817 | "libc", 818 | ] 819 | 820 | [[package]] 821 | name = "objc" 822 | version = "0.2.7" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 825 | dependencies = [ 826 | "malloc_buf", 827 | ] 828 | 829 | [[package]] 830 | name = "objc-foundation" 831 | version = "0.1.1" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 834 | dependencies = [ 835 | "block", 836 | "objc", 837 | "objc_id", 838 | ] 839 | 840 | [[package]] 841 | name = "objc_id" 842 | version = "0.1.1" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 845 | dependencies = [ 846 | "objc", 847 | ] 848 | 849 | [[package]] 850 | name = "once_cell" 851 | version = "1.10.0" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" 854 | 855 | [[package]] 856 | name = "pango" 857 | version = "0.14.8" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581" 860 | dependencies = [ 861 | "bitflags", 862 | "glib", 863 | "libc", 864 | "once_cell", 865 | "pango-sys", 866 | ] 867 | 868 | [[package]] 869 | name = "pango-sys" 870 | version = "0.14.0" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe" 873 | dependencies = [ 874 | "glib-sys", 875 | "gobject-sys", 876 | "libc", 877 | "system-deps", 878 | ] 879 | 880 | [[package]] 881 | name = "parking_lot" 882 | version = "0.11.2" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 885 | dependencies = [ 886 | "instant", 887 | "lock_api", 888 | "parking_lot_core", 889 | ] 890 | 891 | [[package]] 892 | name = "parking_lot_core" 893 | version = "0.8.5" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 896 | dependencies = [ 897 | "cfg-if", 898 | "instant", 899 | "libc", 900 | "redox_syscall", 901 | "smallvec", 902 | "winapi", 903 | ] 904 | 905 | [[package]] 906 | name = "paste" 907 | version = "1.0.7" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" 910 | 911 | [[package]] 912 | name = "pest" 913 | version = "2.1.3" 914 | source = "registry+https://github.com/rust-lang/crates.io-index" 915 | checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" 916 | dependencies = [ 917 | "ucd-trie", 918 | ] 919 | 920 | [[package]] 921 | name = "pin-project-lite" 922 | version = "0.2.8" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" 925 | 926 | [[package]] 927 | name = "pin-utils" 928 | version = "0.1.0" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 931 | 932 | [[package]] 933 | name = "pkg-config" 934 | version = "0.3.25" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" 937 | 938 | [[package]] 939 | name = "pop-desktop-widget" 940 | version = "0.2.0" 941 | dependencies = [ 942 | "cascade", 943 | "fomat-macros", 944 | "gdk", 945 | "gdk-pixbuf", 946 | "gio", 947 | "glib", 948 | "gstreamer", 949 | "gtk", 950 | "gtk-extras", 951 | "i18n-embed", 952 | "i18n-embed-fl", 953 | "libhandy", 954 | "once_cell", 955 | "pop-theme-switcher", 956 | "rust-embed", 957 | ] 958 | 959 | [[package]] 960 | name = "pop-theme-switcher" 961 | version = "0.1.1" 962 | source = "git+https://github.com/pop-os/theme-switcher?branch=master#1622cc01a9d162763fc440bde2a5fe48320879bf" 963 | dependencies = [ 964 | "gio", 965 | "glib", 966 | "gtk", 967 | "gtk-extras", 968 | ] 969 | 970 | [[package]] 971 | name = "pretty-hex" 972 | version = "0.2.1" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "bc5c99d529f0d30937f6f4b8a86d988047327bb88d04d2c4afc356de74722131" 975 | 976 | [[package]] 977 | name = "proc-macro-crate" 978 | version = "1.1.3" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" 981 | dependencies = [ 982 | "thiserror", 983 | "toml", 984 | ] 985 | 986 | [[package]] 987 | name = "proc-macro-error" 988 | version = "1.0.4" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 991 | dependencies = [ 992 | "proc-macro-error-attr", 993 | "proc-macro2", 994 | "quote", 995 | "syn", 996 | "version_check", 997 | ] 998 | 999 | [[package]] 1000 | name = "proc-macro-error-attr" 1001 | version = "1.0.4" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1004 | dependencies = [ 1005 | "proc-macro2", 1006 | "quote", 1007 | "version_check", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "proc-macro2" 1012 | version = "1.0.36" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 1015 | dependencies = [ 1016 | "unicode-xid", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "quote" 1021 | version = "1.0.17" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" 1024 | dependencies = [ 1025 | "proc-macro2", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "redox_syscall" 1030 | version = "0.2.13" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 1033 | dependencies = [ 1034 | "bitflags", 1035 | ] 1036 | 1037 | [[package]] 1038 | name = "regex" 1039 | version = "1.5.5" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" 1042 | dependencies = [ 1043 | "aho-corasick", 1044 | "memchr", 1045 | "regex-syntax", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "regex-syntax" 1050 | version = "0.6.25" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" 1053 | 1054 | [[package]] 1055 | name = "rust-embed" 1056 | version = "5.9.0" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "2fe1fe6aac5d6bb9e1ffd81002340363272a7648234ec7bdfac5ee202cb65523" 1059 | dependencies = [ 1060 | "rust-embed-impl", 1061 | "rust-embed-utils", 1062 | "walkdir", 1063 | ] 1064 | 1065 | [[package]] 1066 | name = "rust-embed-impl" 1067 | version = "5.9.0" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "3ed91c41c42ef7bf687384439c312e75e0da9c149b0390889b94de3c7d9d9e66" 1070 | dependencies = [ 1071 | "proc-macro2", 1072 | "quote", 1073 | "rust-embed-utils", 1074 | "syn", 1075 | "walkdir", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "rust-embed-utils" 1080 | version = "5.1.0" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "2a512219132473ab0a77b52077059f1c47ce4af7fbdc94503e9862a34422876d" 1083 | dependencies = [ 1084 | "walkdir", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "rustc-hash" 1089 | version = "1.1.0" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1092 | 1093 | [[package]] 1094 | name = "rustc_version" 1095 | version = "0.3.3" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" 1098 | dependencies = [ 1099 | "semver 0.11.0", 1100 | ] 1101 | 1102 | [[package]] 1103 | name = "rustc_version" 1104 | version = "0.4.0" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1107 | dependencies = [ 1108 | "semver 1.0.7", 1109 | ] 1110 | 1111 | [[package]] 1112 | name = "same-file" 1113 | version = "1.0.6" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1116 | dependencies = [ 1117 | "winapi-util", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "scopeguard" 1122 | version = "1.1.0" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1125 | 1126 | [[package]] 1127 | name = "self_cell" 1128 | version = "0.10.2" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" 1131 | 1132 | [[package]] 1133 | name = "semver" 1134 | version = "0.11.0" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" 1137 | dependencies = [ 1138 | "semver-parser", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "semver" 1143 | version = "1.0.7" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" 1146 | 1147 | [[package]] 1148 | name = "semver-parser" 1149 | version = "0.10.2" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" 1152 | dependencies = [ 1153 | "pest", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "serde" 1158 | version = "1.0.136" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 1161 | dependencies = [ 1162 | "serde_derive", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "serde_derive" 1167 | version = "1.0.136" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" 1170 | dependencies = [ 1171 | "proc-macro2", 1172 | "quote", 1173 | "syn", 1174 | ] 1175 | 1176 | [[package]] 1177 | name = "slab" 1178 | version = "0.4.6" 1179 | source = "registry+https://github.com/rust-lang/crates.io-index" 1180 | checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" 1181 | 1182 | [[package]] 1183 | name = "smallvec" 1184 | version = "1.8.0" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 1187 | 1188 | [[package]] 1189 | name = "strsim" 1190 | version = "0.10.0" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1193 | 1194 | [[package]] 1195 | name = "strum" 1196 | version = "0.21.0" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" 1199 | 1200 | [[package]] 1201 | name = "strum_macros" 1202 | version = "0.21.1" 1203 | source = "registry+https://github.com/rust-lang/crates.io-index" 1204 | checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" 1205 | dependencies = [ 1206 | "heck", 1207 | "proc-macro2", 1208 | "quote", 1209 | "syn", 1210 | ] 1211 | 1212 | [[package]] 1213 | name = "syn" 1214 | version = "1.0.90" 1215 | source = "registry+https://github.com/rust-lang/crates.io-index" 1216 | checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f" 1217 | dependencies = [ 1218 | "proc-macro2", 1219 | "quote", 1220 | "unicode-xid", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "system-deps" 1225 | version = "3.2.0" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6" 1228 | dependencies = [ 1229 | "anyhow", 1230 | "cfg-expr", 1231 | "heck", 1232 | "itertools 0.10.3", 1233 | "pkg-config", 1234 | "strum", 1235 | "strum_macros", 1236 | "thiserror", 1237 | "toml", 1238 | "version-compare", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "thiserror" 1243 | version = "1.0.30" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" 1246 | dependencies = [ 1247 | "thiserror-impl", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "thiserror-impl" 1252 | version = "1.0.30" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" 1255 | dependencies = [ 1256 | "proc-macro2", 1257 | "quote", 1258 | "syn", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "tinystr" 1263 | version = "0.3.4" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1" 1266 | 1267 | [[package]] 1268 | name = "toml" 1269 | version = "0.5.8" 1270 | source = "registry+https://github.com/rust-lang/crates.io-index" 1271 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1272 | dependencies = [ 1273 | "serde", 1274 | ] 1275 | 1276 | [[package]] 1277 | name = "tools" 1278 | version = "0.1.0" 1279 | 1280 | [[package]] 1281 | name = "type-map" 1282 | version = "0.4.0" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46" 1285 | dependencies = [ 1286 | "rustc-hash", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "ucd-trie" 1291 | version = "0.1.3" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" 1294 | 1295 | [[package]] 1296 | name = "unic-langid" 1297 | version = "0.9.0" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "73328fcd730a030bdb19ddf23e192187a6b01cd98be6d3140622a89129459ce5" 1300 | dependencies = [ 1301 | "unic-langid-impl", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "unic-langid-impl" 1306 | version = "0.9.0" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "1a4a8eeaf0494862c1404c95ec2f4c33a2acff5076f64314b465e3ddae1b934d" 1309 | dependencies = [ 1310 | "serde", 1311 | "tinystr", 1312 | ] 1313 | 1314 | [[package]] 1315 | name = "unicode-segmentation" 1316 | version = "1.9.0" 1317 | source = "registry+https://github.com/rust-lang/crates.io-index" 1318 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 1319 | 1320 | [[package]] 1321 | name = "unicode-xid" 1322 | version = "0.2.2" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1325 | 1326 | [[package]] 1327 | name = "uuid" 1328 | version = "0.8.2" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" 1331 | 1332 | [[package]] 1333 | name = "version-compare" 1334 | version = "0.0.11" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" 1337 | 1338 | [[package]] 1339 | name = "version_check" 1340 | version = "0.9.4" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1343 | 1344 | [[package]] 1345 | name = "walkdir" 1346 | version = "2.3.2" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 1349 | dependencies = [ 1350 | "same-file", 1351 | "winapi", 1352 | "winapi-util", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "winapi" 1357 | version = "0.3.9" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1360 | dependencies = [ 1361 | "winapi-i686-pc-windows-gnu", 1362 | "winapi-x86_64-pc-windows-gnu", 1363 | ] 1364 | 1365 | [[package]] 1366 | name = "winapi-i686-pc-windows-gnu" 1367 | version = "0.4.0" 1368 | source = "registry+https://github.com/rust-lang/crates.io-index" 1369 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1370 | 1371 | [[package]] 1372 | name = "winapi-util" 1373 | version = "0.1.5" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1376 | dependencies = [ 1377 | "winapi", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "winapi-x86_64-pc-windows-gnu" 1382 | version = "0.4.0" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1385 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "pop-desktop-widget" 3 | version = "0.2.0" 4 | authors = ["Michael Aaron Murphy "] 5 | description = "GTK desktop settings widget for Pop!_OS" 6 | edition = "2018" 7 | license = "LGPLv3" 8 | readme = "README.md" 9 | 10 | [workspace] 11 | members = [ "ffi", "tools" ] 12 | 13 | [dependencies] 14 | cascade = "1.0.0" 15 | fomat-macros = "0.3.1" 16 | gdk = "0.14" 17 | glib = "0.14" 18 | gtk = "0.14" 19 | gtk-extras = { git = "https://github.com/pop-os/gtk-extras" } 20 | gio = "0.14" 21 | libhandy = "0.8" 22 | pop-theme-switcher = { git = "https://github.com/pop-os/theme-switcher", branch = "master" } 23 | gdk-pixbuf = "0.14" 24 | gstreamer = "0.17" 25 | i18n-embed = { version = "0.12", features = ["fluent-system", "desktop-requester"] } 26 | i18n-embed-fl = "0.5" 27 | rust-embed = { version = "5.9", features = ["debug-embed"] } 28 | once_cell = "1.8" 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. 166 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | prefix ?= /usr/local 2 | libdir = $(prefix)/lib 3 | includedir = $(prefix)/include 4 | 5 | TARGET = debug 6 | DEBUG ?= 0 7 | ifeq ($(DEBUG),0) 8 | TARGET = release 9 | ARGS += --release 10 | endif 11 | 12 | VENDOR ?= 0 13 | ifneq ($(VENDOR),0) 14 | ARGS += --frozen 15 | endif 16 | 17 | PACKAGE = pop_desktop_widget 18 | PKGCONFIG = target/$(PACKAGE).pc 19 | FFI = target/$(TARGET)/lib$(PACKAGE).so 20 | BIN = target/$(TARGET)/pop-desktop-widget 21 | 22 | all: $(BIN) $(PKGCONFIG) 23 | 24 | clean: 25 | rm -rf target 26 | 27 | distclean: clean 28 | rm -rf .cargo vendor vendor.tar 29 | 30 | $(BIN): Cargo.toml Cargo.lock src/lib.rs vendor-check 31 | cargo build $(ARGS) 32 | 33 | $(FFI): Cargo.toml Cargo.lock ffi/src/lib.rs vendor-check 34 | cargo build $(ARGS) --manifest-path ffi/Cargo.toml 35 | 36 | install: 37 | install -Dm0644 target/$(TARGET)/lib$(PACKAGE).so "$(DESTDIR)$(libdir)/lib$(PACKAGE).so" 38 | install -Dm0644 $(PKGCONFIG) "$(DESTDIR)$(libdir)/pkgconfig/$(PACKAGE).pc" 39 | install -Dm0644 ffi/$(PACKAGE).h "$(DESTDIR)$(includedir)/$(PACKAGE).h" 40 | mkdir -p "$(DESTDIR)$(prefix)/share/applications/" 41 | 42 | $(PKGCONFIG): $(FFI) tools/src/pkgconfig.rs 43 | cargo run -p tools --bin pkgconfig $(DESKTOP_ARGS) -- \ 44 | $(PACKAGE) $(libdir) $(includedir) 45 | 46 | ## Cargo Vendoring 47 | 48 | vendor: 49 | rm .cargo -rf 50 | mkdir -p .cargo 51 | cargo vendor --sync ffi/Cargo.toml --sync tools/Cargo.toml | head -n -1 > .cargo/config 52 | echo 'directory = "vendor"' >> .cargo/config 53 | tar cf vendor.tar vendor 54 | rm -rf vendor 55 | 56 | vendor-check: 57 | ifeq ($(VENDOR),1) 58 | rm vendor -rf && tar xf vendor.tar 59 | endif 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pop Desktop Settings Widget 2 | 3 | A GTK widget for Pop!\_OS shared between GNOME Initial Setup and GNOME Settings. 4 | -------------------------------------------------------------------------------- /build.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | env, 3 | fs, 4 | process, 5 | }; 6 | 7 | fn main() { 8 | println!("cargo:rerun-if-changed=data"); 9 | for entry_res in fs::read_dir("data").expect("Failed to read data dir") { 10 | let entry = entry_res.expect("Failed to read data entry"); 11 | println!("cargo:rerun-if-changed={}", entry.path().display()); 12 | } 13 | 14 | let out_dir = env::var("OUT_DIR").unwrap(); 15 | let status = process::Command::new("glib-compile-resources") 16 | .arg("--sourcedir=data") 17 | .arg(format!("--target={}/compiled.gresource", out_dir)) 18 | .arg("data/resources.gresource.xml") 19 | .status() 20 | .expect("Failed to run glib-compile-resources"); 21 | if ! status.success() { 22 | panic!("glib-compile-resources exited with status {}", status); 23 | } 24 | } -------------------------------------------------------------------------------- /data/extend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/extend.png -------------------------------------------------------------------------------- /data/extension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/extension.png -------------------------------------------------------------------------------- /data/gestures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/gestures.png -------------------------------------------------------------------------------- /data/launcher-animated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/launcher-animated.png -------------------------------------------------------------------------------- /data/launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/launcher.png -------------------------------------------------------------------------------- /data/no-dock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/no-dock.png -------------------------------------------------------------------------------- /data/no-extend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pop-os/desktop-widget/85ff0db59155896ea47e53613789d7ad0e369498/data/no-extend.png -------------------------------------------------------------------------------- /data/resources.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | extend.png 5 | extension.png 6 | gestures.png 7 | launcher.png 8 | no-dock.png 9 | no-extend.png 10 | 11 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | pop-desktop-widget (0.2.0) impish; urgency=medium 2 | 3 | * Provide API to create each settings panel separately 4 | 5 | -- Ian Douglas Scott Mon, 28 Feb 2022 14:34:07 -0800 6 | 7 | pop-desktop-widget (0.1.0) groovy; urgency=medium 8 | 9 | * Initial release 10 | 11 | -- Jeremy Soller Tue, 12 Jan 2021 09:49:32 -0700 12 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: pop-desktop-widget 2 | Section: admin 3 | Priority: optional 4 | Maintainer: System76 5 | Build-Depends: 6 | debhelper (>=9), 7 | cargo, 8 | rustc (>=1.36.0), 9 | libgstreamer1.0-dev, 10 | libgtk-3-dev, 11 | libhandy-1-dev, 12 | pkg-config, 13 | Standards-Version: 4.3.0 14 | Homepage: https://github.com/pop-os/desktop-widget 15 | 16 | Package: libpop-desktop-widget 17 | Architecture: linux-any 18 | Depends: 19 | ${misc:Depends}, 20 | ${shlibs:Depends} 21 | Description: Pop desktop settings widget library 22 | Shared library for C which provides the Pop!_OS desktop settings widget as a GTK widget. 23 | 24 | Package: libpop-desktop-widget-dev 25 | Architecture: all 26 | Depends: 27 | libpop-desktop-widget (= ${binary:Version}), 28 | ${misc:Depends} 29 | Description: Pop desktop settings widget library header 30 | The C header required to link to the Pop!_OS desktop settings widget library. 31 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: pop-desktop-widget 3 | Source: https://github.com/pop-os/desktop-widget 4 | 5 | Files: * 6 | Copyright: Copyright 2021 System76 7 | License: LGPL-3 8 | -------------------------------------------------------------------------------- /debian/libpop-desktop-widget-dev.install: -------------------------------------------------------------------------------- 1 | usr/include 2 | -------------------------------------------------------------------------------- /debian/libpop-desktop-widget.install: -------------------------------------------------------------------------------- 1 | usr/lib/libpop_desktop_widget.so 2 | usr/lib/pkgconfig/pop_desktop_widget.pc 3 | usr/share/applications -------------------------------------------------------------------------------- /debian/libpop-desktop-widget.shlibs: -------------------------------------------------------------------------------- 1 | libpop_desktop_widget 0 libpop-desktop-widget (>= 0.1.0~) 2 | -------------------------------------------------------------------------------- /debian/libpop-desktop-widget.trigger: -------------------------------------------------------------------------------- 1 | ldconfig -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | CLEAN ?= 1 4 | VENDOR ?= 1 5 | 6 | %: 7 | dh $@ 8 | 9 | override_dh_auto_clean: 10 | ifeq ($(CLEAN),1) 11 | make clean 12 | endif 13 | ifeq ($(VENDOR),1) 14 | if ! ischroot; then \ 15 | make vendor; \ 16 | fi 17 | endif 18 | 19 | override_dh_auto_build: 20 | env CARGO_HOME="$$(pwd)/target/cargo" \ 21 | make all VENDOR=$(VENDOR) prefix=/usr 22 | 23 | override_dh_auto_install: 24 | dh_auto_install -- prefix=/usr 25 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /debian/source/options: -------------------------------------------------------------------------------- 1 | tar-ignore = ".git" 2 | tar-ignore = "target" 3 | tar-ignore = "vendor" 4 | -------------------------------------------------------------------------------- /ffi/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "ffi" 3 | version = "0.1.2" 4 | authors = ["Michael Aaron Murphy "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [build-dependencies] 10 | cdylib-link-lines = "0.1" 11 | 12 | [lib] 13 | name = "pop_desktop_widget" 14 | crate-type = [ "cdylib" ] 15 | 16 | [dependencies] 17 | glib = "0.14" 18 | gtk = "0.14" 19 | gtk-sys = "0.14" 20 | pop-desktop-widget = { path = "../" } 21 | libc = "0.2.97" 22 | -------------------------------------------------------------------------------- /ffi/build.rs: -------------------------------------------------------------------------------- 1 | use std::{env, fs::File, io::Write, path::PathBuf}; 2 | 3 | fn main() { 4 | cdylib_link_lines::metabuild(); 5 | 6 | let target_dir = PathBuf::from("../target"); 7 | 8 | let pkg_config = format!( 9 | include_str!("pop_desktop_widget.pc.in"), 10 | name = "pop_desktop_widget", 11 | description = env::var("CARGO_PKG_DESCRIPTION").unwrap(), 12 | version = env::var("CARGO_PKG_VERSION").unwrap() 13 | ); 14 | 15 | File::create(target_dir.join("pop_desktop_widget.pc.stub")) 16 | .expect("failed to create pc.stub") 17 | .write_all(&pkg_config.as_bytes()) 18 | .expect("failed to write pc.stub"); 19 | } 20 | -------------------------------------------------------------------------------- /ffi/pop_desktop_widget.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | typedef struct { } PopDesktopWidget; 4 | 5 | PopDesktopWidget *pop_desktop_widget_new (GtkStack *stack); 6 | 7 | void pop_desktop_widget_free (PopDesktopWidget *self); 8 | 9 | /** Creates the GTK widget for this page */ 10 | GtkWidget *pop_desktop_widget_gis_dock_page (GtkWidget *header); 11 | 12 | /** Localized title for this page */ 13 | char *pop_desktop_widget_gis_dock_title (); 14 | 15 | /** Creates the GTK widget for this page */ 16 | GtkWidget *pop_desktop_widget_gis_extensions_page (GtkWidget *header); 17 | 18 | /** Localized title for this page */ 19 | char *pop_desktop_widget_gis_extensions_title (); 20 | 21 | /** Creates the GTK widget for this page */ 22 | GtkWidget *pop_desktop_widget_gis_gestures_page (GtkWidget *header); 23 | 24 | /** Localized title for this page */ 25 | char *pop_desktop_widget_gis_gestures_title (); 26 | 27 | /** Creates the GTK widget for this page */ 28 | GtkWidget *pop_desktop_widget_gis_launcher_page (GtkWidget *header); 29 | 30 | /** Localized title for this page */ 31 | char *pop_desktop_widget_gis_launcher_title (); 32 | 33 | /** Creates the GTK widget for this page */ 34 | GtkWidget *pop_desktop_widget_gis_panel_page (GtkWidget *header); 35 | 36 | /** Localized title for this page */ 37 | char *pop_desktop_widget_gis_panel_title (); 38 | 39 | /** Initializes this library's gresources */ 40 | void pop_desktop_widget_gresource_init (); 41 | 42 | /** Initializes or reloads the localizer */ 43 | void pop_desktop_widget_localize (); 44 | 45 | /** Frees strings created by this library */ 46 | void pop_desktop_widget_string_free (char *string); 47 | 48 | GtkWidget* pop_desktop_widget_gcc_main_page (void); 49 | 50 | GtkWidget* pop_desktop_widget_gcc_appearance_page (void); 51 | 52 | GtkWidget* pop_desktop_widget_gcc_dock_page (void); 53 | 54 | GtkWidget* pop_desktop_widget_gcc_workspaces_page (void); 55 | -------------------------------------------------------------------------------- /ffi/pop_desktop_widget.pc.in: -------------------------------------------------------------------------------- 1 | Name: {name} 2 | Description: {description} 3 | Version: {version} 4 | Cflags: -I${{includedir}} 5 | Libs: -L${{libdir}} -l{name} 6 | -------------------------------------------------------------------------------- /ffi/src/lib.rs: -------------------------------------------------------------------------------- 1 | use glib::{ 2 | translate::{FromGlibPtrNone, ToGlibPtr}, 3 | Cast, 4 | }; 5 | use gtk::prelude::*; 6 | use gtk_sys::GtkWidget; 7 | use pop_desktop_widget::{localize, PopDesktopWidget as RustWidget}; 8 | use std::ffi::CString; 9 | 10 | pub struct PopDesktopWidget; 11 | 12 | #[no_mangle] 13 | pub extern "C" fn pop_desktop_widget_new(stack: *mut gtk_sys::GtkStack) -> *mut PopDesktopWidget { 14 | initialize(); 15 | 16 | Box::into_raw(Box::new(RustWidget::new(unsafe { >k::Stack::from_glib_none(stack) }))) 17 | as *mut PopDesktopWidget 18 | } 19 | 20 | #[no_mangle] 21 | pub extern "C" fn pop_desktop_widget_free(widget: *mut PopDesktopWidget) { 22 | unsafe { Box::from_raw(widget as *mut RustWidget) }; 23 | } 24 | 25 | #[no_mangle] 26 | pub extern "C" fn pop_desktop_widget_gis_dock_page(header: *mut GtkWidget) -> *mut GtkWidget { 27 | initialize(); 28 | 29 | let header = unsafe { gtk::Widget::from_glib_none(header) }; 30 | pop_desktop_widget::gis::dock::page(&header).to_glib_full() 31 | } 32 | 33 | #[no_mangle] 34 | pub extern "C" fn pop_desktop_widget_gis_dock_title() -> *mut libc::c_char { 35 | string_create(pop_desktop_widget::gis::dock::title()) 36 | } 37 | 38 | #[no_mangle] 39 | pub extern "C" fn pop_desktop_widget_gis_extensions_page(header: *mut GtkWidget) -> *mut GtkWidget { 40 | initialize(); 41 | 42 | let header = unsafe { gtk::Widget::from_glib_none(header) }; 43 | pop_desktop_widget::gis::extensions::page(&header).to_glib_full() 44 | } 45 | 46 | #[no_mangle] 47 | pub extern "C" fn pop_desktop_widget_gis_extensions_title() -> *mut libc::c_char { 48 | string_create(pop_desktop_widget::gis::extensions::title()) 49 | } 50 | 51 | #[no_mangle] 52 | pub extern "C" fn pop_desktop_widget_gis_gestures_page(header: *mut GtkWidget) -> *mut GtkWidget { 53 | initialize(); 54 | 55 | let header = unsafe { gtk::Widget::from_glib_none(header) }; 56 | pop_desktop_widget::gis::gestures::page(&header).to_glib_full() 57 | } 58 | 59 | #[no_mangle] 60 | pub extern "C" fn pop_desktop_widget_gis_gestures_title() -> *mut libc::c_char { 61 | string_create(pop_desktop_widget::gis::gestures::title()) 62 | } 63 | 64 | #[no_mangle] 65 | pub extern "C" fn pop_desktop_widget_gis_launcher_page(header: *mut GtkWidget) -> *mut GtkWidget { 66 | initialize(); 67 | 68 | let header = unsafe { gtk::Widget::from_glib_none(header) }; 69 | pop_desktop_widget::gis::launcher::page(&header).to_glib_full() 70 | } 71 | 72 | #[no_mangle] 73 | pub extern "C" fn pop_desktop_widget_gis_launcher_title() -> *mut libc::c_char { 74 | string_create(pop_desktop_widget::gis::launcher::title()) 75 | } 76 | 77 | #[no_mangle] 78 | pub extern "C" fn pop_desktop_widget_gis_panel_page(header: *mut GtkWidget) -> *mut GtkWidget { 79 | initialize(); 80 | 81 | let header = unsafe { gtk::Widget::from_glib_none(header) }; 82 | pop_desktop_widget::gis::panel::page(&header).to_glib_full() 83 | } 84 | 85 | #[no_mangle] 86 | pub extern "C" fn pop_desktop_widget_gis_panel_title() -> *mut libc::c_char { 87 | string_create(pop_desktop_widget::gis::panel::title()) 88 | } 89 | 90 | #[no_mangle] 91 | pub extern "C" fn pop_desktop_widget_gresource_init() { 92 | pop_desktop_widget::gresource::init().expect("failed to load gresource for pop-desktop-widget"); 93 | } 94 | 95 | #[no_mangle] 96 | pub extern "C" fn pop_desktop_widget_localize() { pop_desktop_widget::localize(); } 97 | 98 | #[no_mangle] 99 | pub extern "C" fn pop_desktop_widget_string_free(string: *mut libc::c_char) { string_free(string) } 100 | 101 | fn string_create(string: String) -> *mut libc::c_char { 102 | CString::new(string).expect("Rust string contained null").into_raw() 103 | } 104 | 105 | fn string_free(string: *mut libc::c_char) { 106 | if !string.is_null() { 107 | unsafe { 108 | CString::from_raw(string); 109 | } 110 | } 111 | } 112 | 113 | #[no_mangle] 114 | pub extern "C" fn pop_desktop_widget_gcc_main_page() -> *mut GtkWidget { 115 | initialize(); 116 | let widget = pop_desktop_widget::main_page(); 117 | widget.show_all(); 118 | widget.upcast::().to_glib_full() 119 | } 120 | 121 | #[no_mangle] 122 | pub extern "C" fn pop_desktop_widget_gcc_appearance_page() -> *mut GtkWidget { 123 | initialize(); 124 | let widget = pop_desktop_widget::appearance_page(); 125 | widget.show_all(); 126 | widget.upcast::().to_glib_full() 127 | } 128 | 129 | #[no_mangle] 130 | pub extern "C" fn pop_desktop_widget_gcc_dock_page() -> *mut GtkWidget { 131 | initialize(); 132 | let widget = pop_desktop_widget::dock_page(); 133 | widget.show_all(); 134 | widget.upcast::().to_glib_full() 135 | } 136 | 137 | #[no_mangle] 138 | pub extern "C" fn pop_desktop_widget_gcc_workspaces_page() -> *mut GtkWidget { 139 | initialize(); 140 | let widget = pop_desktop_widget::workspaces_page(); 141 | widget.show_all(); 142 | widget.upcast::().to_glib_full() 143 | } 144 | 145 | fn initialize() { 146 | unsafe { 147 | gtk::set_initialized(); 148 | } 149 | 150 | localize(); 151 | } 152 | -------------------------------------------------------------------------------- /i18n.toml: -------------------------------------------------------------------------------- 1 | fallback_language = "en" 2 | 3 | [fluent] 4 | assets_dir = "i18n" 5 | -------------------------------------------------------------------------------- /i18n/cs/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Aplikace 2 | action-applications-description = Zmáčknutí Super klávesy otevře přehled aplikací 3 | action-launcher = Spouštěč 4 | action-launcher-description = Zmáčknutí Super klávesy otevře spouštěč 5 | action-workspaces = Pracovní plochy 6 | action-workspaces-description = Zmáčknutí Super klávesy otevře přehled oken a pracovních ploch 7 | 8 | click-action-cycle = Otevřít nebo přecházet mezi okny 9 | click-action-minimize = Otevřít nebo minimalizovat okna 10 | click-action-minimize-or-previews = Otevřít, minimalizovat nebo nahlédnout do okna 11 | 12 | date-combo = Pozice datumu, času a oznámení 13 | date-combo-center = Střed 14 | date-combo-left = Vlevo 15 | date-combo-right = Vpravo 16 | 17 | display-all = Všechny monitory 18 | display-primary = Hlavní monitor 19 | 20 | dock-always-hide = Vždy schovat 21 | dock-always-hide-description = Dok se vždy schová, pokud není odhalen myší 22 | dock-always-visible = Vždy viditelný 23 | dock-applications = Ukazovat ikonu pro seznam aplikací v doku 24 | dock-click-action = Akce při kliknutí na ikonu 25 | dock-disable = Žádný dok 26 | dock-dynamic = Dok se neroztáhne k okrajím 27 | dock-enable = Povolit dok 28 | dock-extend = Roztáhnout dok k okrajím obrazovky 29 | dock-extends = Dok se roztáhne k okrajím 30 | dock-intelligently-hide = Inteligentně schovat 31 | dock-intelligently-hide-description = Dok se schová, pokud jakékoliv okno překryje plochu doku 32 | dock-launcher = Zobrazovat ikonu spouštěče v doku 33 | dock-mounted-drives = Zobrazovat připojené jednotky 34 | dock-options = Nastavení doku 35 | dock-position = Pozice doku na ploše 36 | dock-alignment = Zarovnání doku a ikon na obrazovce 37 | dock-show-on-display = Ukazovat dok na monitoru 38 | dock-size = Velikost doku 39 | dock-visibility = Viditelnost doku 40 | dock-workspaces = Ukazovat ikonu pracovních ploch v doku 41 | 42 | gis-dock-description = Vzhled doku, jeho velikost a pozice lze kdykoliv změnit v nastavení. 43 | gis-dock-header = Pokračujte v nastavení plochy výběrem preferovaného rozložení. 44 | gis-dock-title = Vítejte v Pop!_OS 45 | 46 | gis-extensions-label1 = Manuálně installované GNOME Shell rozšiření jsou vypnuty, aby byla zaručena spolehlivost aktualizací. Tyto rozšiření většinou nejsou manuálně testovány součástím Pop!_OS a můžou způsobit problémy. Můžete je obnovit jednu po jedném, aby jste zaručili compatibilitu každého rozšiření. Aby jste je znova spustili, instalujte je znova od {$url}, nebo je obnovte ze záložního adresáře. 47 | 48 | Vaše GNOME Shell rozšiření byly přesunuty z: 49 | gis-extensions-label2 = Do této záložní složky: 50 | gis-extensions-title = Update GNOME Shell rozšiření 51 | 52 | gis-gestures-description = Přetáhněte čtyřmi prsty najednou doleva pro otevření shrnutí pracovních ploch a oken, čtyřmi prsty vpravo pro aplikace, a nahoru a dolů pro přepínání mezi pracovními plochami. Přetáhněte třemi prsty pro přepínání mezi okny. 53 | gis-gestures-title = Použítí gest pro lehčí navigaci 54 | 55 | gis-launcher-description = Zmáčkněte Super klávesu nebo ikonu v doku pro zobrazení vyhledávače v spouštěči. Použijte šipky pro rychlé přepínání mezi okny nebo napište jméno aplikace pro její spuštění. Spouštěč dělá navigování plochy počítače rychlejší a plynulejší. 56 | gis-launcher-notice = Nastavení Super klávesy lze změnit kdykoliv v nastavení 57 | gis-launcher-title = Otevři a přepínej mezi aplikacemi pomocí spouštěče 58 | 59 | gis-panel-notice = Konfigurace horního panelu lze kdykoliv změnit v nastavení 60 | gis-panel-title = Nastavit horní panel 61 | 62 | hot-corner = Hot Corner 63 | hot-corner-description = Povolit hot corner pro pracovní plochy v horním levém rohu 64 | 65 | multi-monitor-behavior = Více-monitorové chování 66 | 67 | page-appearance = Vzhled 68 | page-dock = Dok 69 | page-main = Obecné 70 | page-workspaces = Pracovní plochy 71 | 72 | position-bottom = Spodek obrazovky 73 | position-left = Po levé straně 74 | position-right = Po pravé straně 75 | 76 | alignment-center = Uprostřed 77 | alignment-start = Začátek 78 | alignment-end = Konec 79 | 80 | show-applications-button = Zobrazovat tlačítko pro seznam aplikací 81 | show-maximize-button = Zobrazovat tlačítko pro maximalizaci 82 | show-minimize-button = Zobrazovat tlačítko pro minimalizaci 83 | show-workspaces-button = Zobrazovat tlačítko pro pracovní plochy 84 | 85 | size-custom = Vlastní velikost 86 | size-large = Velká 87 | size-medium = Střední 88 | size-small = Malá 89 | 90 | super-key-action = Činnost Super klávesy 91 | 92 | top-bar = Horní panel 93 | 94 | window-controls = Ovládání oken 95 | 96 | workspace-picker-position = Pozice tlačítka pro přechod mezi pracovními plochami 97 | 98 | workspaces-amount = Počet pracovních ploch 99 | workspaces-dynamic = Dynamické množství pracovních ploch 100 | workspaces-dynamic-description = Automaticky smaže prázdné pracovní plochy 101 | workspaces-fixed = Statické množství pracovních ploch 102 | workspaces-fixed-description = Urči množství pracovních ploch 103 | workspaces-primary = Pracovní plochy pouze pro hlavní monitor 104 | workspaces-span-displays = Pracovní plochy přesahují všechny monitory 105 | 106 | -------------------------------------------------------------------------------- /i18n/da/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Programmer 2 | action-applications-description = Et tryk på Super tasten åbner Program Oversigten 3 | action-launcher = Launcher 4 | action-launcher-description = Et tryk på Super tasten åbner Launcheren 5 | action-workspaces = Arbejdsområder 6 | action-workspaces-description = Et tryk på Super tasten åbner Vindue- og Arbejdsområde Oversigten 7 | 8 | click-action-cycle = Åben eller Skift Mellem Vinduer 9 | click-action-minimize = Åben eller Minimer Vinduer 10 | click-action-minimize-or-previews = Åben, Minimer, eller Forhåndsvis Vinduer 11 | 12 | date-combo = Dato & Tid og Notifikations Position 13 | date-combo-center = Midte 14 | date-combo-left = Venstre 15 | date-combo-right = Højre 16 | 17 | display-all = Alle Skærme 18 | display-primary = Primær Skærm 19 | 20 | dock-always-hide = Skjul altid 21 | dock-always-hide-description = Dock er altid skjult medmindre den bliver aktiveret af musen 22 | dock-always-visible = Vis altid 23 | dock-applications = Vis Programmer Ikon i Dock 24 | dock-click-action = Ikon Klik Handling 25 | dock-disable = Ingen dock 26 | dock-dynamic = Dock forlænger ikke til kanterne 27 | dock-enable = Slå Dock til 28 | dock-extend = Forlæng dock til kanterne af skærmen 29 | dock-extends = Dock forlænger til kanterne 30 | dock-intelligently-hide = Skjul intelligent 31 | dock-intelligently-hide-description = Dock skjules når vinduer dækker dock området 32 | dock-launcher = Vis Launcher Ikon i Dock 33 | dock-mounted-drives = Vis Monterede Drev 34 | dock-options = Dock Indstillinger 35 | dock-position = Position på Skrivebordet 36 | dock-alignment = Dock og Ikon Tilpasning på Skærmen 37 | dock-show-on-display = Vis Dock på Skærm 38 | dock-size = Dock Størrelse 39 | dock-visibility = Dock Synlighed 40 | dock-workspaces = Vis Arbejdsområder Ikon i Dock 41 | 42 | gis-dock-description = Dockens udseende, størrelse, og position kan ændres når som helst fra Indstillinger programmet. 43 | gis-dock-header = Fortsæt skrivebords opsætningen ved at vælge dit foretrukne layout. 44 | gis-dock-title = Velkommen til Pop!_OS 45 | 46 | gis-extensions-label1 = Manuelt installerede GNOME Shell udvidelser er slået fra for at sikre at opdateringer er pålidelige. Udvidelserne er oftest ikke testet som en del af Pop!_OS og kan skabe problemer. Du kan manuelt aktivere dem igen, en ad gangen, for at sikre kompatibilitet med hver udvidelse. For at aktivere, skal du installere dem igen fra {$url}, eller gendanne dem fra backup mappen. 47 | 48 | Dine GNOME Shell udvidelser er blevet flyttet fra: 49 | gis-extensions-label2 = Til denne backup mappe: 50 | gis-extensions-title = GNOME Shell Udvidelser Opdatering 51 | 52 | gis-gestures-description = Swipe til venstre med fire fingre for at åbne Arbejdsområder- og vindue oversigt, swipe til højre med fire fingre for at åbne Programmer, og swipe op eller ned med fire fingre for at skifte mellem arbejdsområder. Swipe med tre fingre for at skifte mellem vinduer. 53 | gis-gestures-title = Brug fingerbevægelser for lettere navigation 54 | 55 | gis-launcher-description = Tryk på Super Tasten eller brug et ikon i docken for at åbne Launcher søgefeltet. Brug piletasterne til hurtigt at skifte mellem åbne vinduer eller skriv navnet på programmet for at åbne det. Launcheren gør det hurtigere og mere flydende at navigere skrivebordet. 56 | gis-launcher-notice = Super tast handlingen kan ændres når som helst fra Indstillinger programmet. 57 | gis-launcher-title = Åben og Skift Programmer fra Launcheren 58 | 59 | gis-panel-notice = Indstillingerne for top bjælken kan ændres når som helst fra Indstillinger programmet. 60 | gis-panel-title = Indstil Top Bjælken 61 | 62 | hot-corner = Varmt Hjørne 63 | hot-corner-description = Aktiver varmt hjørne for Arbejdsområder øverst til venstre 64 | 65 | multi-monitor-behavior = Multi-skærms Opførsel 66 | 67 | page-appearance = Udseende 68 | page-dock = Dock 69 | page-main = Generelt 70 | page-workspaces = Arbejdsområder 71 | 72 | position-bottom = Bunden af skærmen 73 | position-left = Langs den venstre side 74 | position-right = Langs den højre side 75 | 76 | alignment-center = Midte 77 | alignment-start = Begyndelse 78 | alignment-end = Ende 79 | 80 | show-applications-button = Vis Programmer Knap 81 | show-maximize-button = Vis Maksimer Knap 82 | show-minimize-button = Vis Minimer Knap 83 | show-workspaces-button = Vis Arbejdsområder Knap 84 | 85 | size-custom = Brugerdefineret Størrelse 86 | size-large = Stor 87 | size-medium = Mellem 88 | size-small = Lille 89 | 90 | super-key-action = Super Tast Handling 91 | 92 | top-bar = Top Bjælke 93 | 94 | window-controls = Vindue Kontrolelementer 95 | 96 | workspace-picker-position = Placering af Arbejdsområde Vælgeren 97 | 98 | workspaces-amount = Antal Arbejdsområder 99 | workspaces-dynamic = Dynamiske Arbejdsområder 100 | workspaces-dynamic-description = Fjerner automatisk tomme arbejdsområder. 101 | workspaces-fixed = Fast Antal Arbejdsområder 102 | workspaces-fixed-description = Angiv et antal arbejdsområder 103 | workspaces-primary = Arbejdsområder Kun på den Primære Skærm 104 | workspaces-span-displays = Arbejdsområder Dækker Alle Skærme 105 | 106 | -------------------------------------------------------------------------------- /i18n/de/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Anwendungen 2 | action-applications-description = Super-Taste öffnet die Anwendungs-Übersicht 3 | action-launcher = Launcher 4 | action-launcher-description = Super-Taste öffnet den Launcher 5 | action-workspaces = Workspaces 6 | action-workspaces-description = Super-Taste zeigt die Fenster und Workspaces-Übersicht 7 | 8 | click-action-cycle = Fenster starten oder durchwechseln 9 | click-action-minimize = Fenster starten oder minimieren 10 | click-action-minimize-or-previews = Fenster starten, minimieren oder Vorschau starten 11 | 12 | date-combo = Datum & Zeit und Benachrichtigungs-Position 13 | date-combo-center = Mittig 14 | date-combo-left = Links 15 | date-combo-right = Rechts 16 | 17 | display-all = Alle Bildschirme 18 | display-primary = Primärer Bildschirm 19 | 20 | dock-always-hide = Immer verstecken 21 | dock-always-hide-description = Dock wird immer ausgeblendet, wenn es nicht aktiv mit der Maus hervorgerufen wird 22 | dock-always-visible = Immer sichtbar 23 | dock-applications = Zeige Anwendungs-Icon im Dock 24 | dock-click-action = Icon-Klick Aktion 25 | dock-disable = Kein Dock 26 | dock-dynamic = Dock nicht bis zum Rand erweitern 27 | dock-enable = Dock aktivieren 28 | dock-extend = Dock bis zum Rand erweitern 29 | dock-extends = Dock bis zu den Rändern erweitern 30 | dock-intelligently-hide = Intelligentes Verstecken 31 | dock-intelligently-hide-description = Dock verschwindet, wenn ein Fenster es überlappt 32 | dock-launcher = Zeige Launcher-Icon im Dock 33 | dock-mounted-drives = Zeige gemountete Datenträger 34 | dock-options = Dock-Optionen 35 | dock-position = Position am Desktop 36 | dock-show-on-display = Zeige Dock am Display 37 | dock-visibility = Dock-Sichtbarkeit 38 | dock-workspaces = Zeige Workspaces-Icon am Dock 39 | 40 | gis-dock-description = Aussehen, Größe und Position des Docks kann jederzeit in den Einstellungen geändert werden 41 | gis-dock-header = Fahren Sie mit der Einrichtung des Desktops fort, indem Sie Ihr bevorzugtes Layout auswählen. 42 | gis-dock-title = Willkommen bei Pop!_OS 43 | 44 | gis-extensions-label1 = Manuell installierte GNOME-Shell-Erweiterungen sind deaktiviert, um sicherzustellen, dass Upgrades zuverlässig sind. Die Erweiterungen werden normalerweise nicht als Teil von Pop!_OS getestet und können Probleme verursachen. Sie können sie manuell einzeln wieder aktivieren, um die Kompatibilität der einzelnen Erweiterungen sicherzustellen. Um sie wieder zu aktivieren, installieren Sie sie erneut von {$url} aus, oder stellen Sie sie aus dem Sicherungsverzeichnis wieder her. 45 | 46 | Ihre GNOME-Shell-Erweiterungen wurden verschoben von: 47 | gis-extensions-label2 = Zu diesem Backup-Ordner: 48 | gis-extensions-title = GNOME-Shell-Erweiterungen - Update 49 | 50 | gis-gestures-description = Streichen Sie mit vier Fingern nach links, um die Workspaces und die Fensterübersicht zu öffnen, streichen Sie mit vier Fingern nach rechts, um die Anwendungen zu öffnen, und streichen Sie mit vier Fingern nach oben oder unten, um zwischen den Workspaces zu wechseln. Streichen Sie mit drei Fingern, um zwischen Fenstern zu wechseln. 51 | gis-gestures-title = Nutze Gesten zur einfacheren Navigation 52 | 53 | gis-launcher-description = Drücken Sie die Supertaste oder verwenden Sie ein Symbol im Dock, um das Suchfeld des Launchers anzuzeigen. Verwenden Sie die Pfeiltasten, um schnell zwischen offenen Fenstern zu wechseln, oder geben Sie den Namen der Anwendung ein, um sie zu starten. Der Launcher macht das Navigieren auf dem Desktop schneller und flüssiger. 54 | gis-launcher-notice = Die Konfiguration des Super-Key kann jederzeit in den Einstellungen geändert werden. 55 | gis-launcher-title = Anwendungen vom Launcher aus öffnen und wechseln 56 | 57 | gis-panel-notice = Die Konfiguration der oberen Leiste kann jederzeit über die Anwendung Einstellungen geändert werden. 58 | gis-panel-title = Obere Leiste konfigurieren 59 | 60 | hot-corner = Hot Corner 61 | hot-corner-description = Aktivieren der Hot Corner oben links für Workspaces 62 | 63 | multi-monitor-behavior = Multi-Monitor-Verhalten 64 | 65 | page-appearance = Erscheinungsbild 66 | page-dock = Dock 67 | page-main = Allgemein 68 | page-workspaces = Workspaces 69 | 70 | position-bottom = Unterer Teil des Bildschirms 71 | position-left = Entlang der linken Seite 72 | position-right = Entlang der rechten Seite 73 | 74 | show-applications-button = Zeige Anwendungs-Taste 75 | show-maximize-button = Zeige Maximieren-Taste 76 | show-minimize-button = Zeige Minimieren-Taste 77 | show-workspaces-button = Zeige Workspace-Taste 78 | 79 | size-custom = Benutzerdefinierte Größe 80 | size-large = Groß 81 | size-medium = Mittel 82 | size-small = Klein 83 | 84 | super-key-action = Super-Taste Aktion 85 | 86 | top-bar = Obere Leiste 87 | 88 | window-controls = Fenstersteuerungen 89 | 90 | workspace-picker-position = Platzierung des Workspace-Picker 91 | 92 | workspaces-amount = Anzahl der Workspaces 93 | workspaces-dynamic = Dynamische Workspaces 94 | workspaces-dynamic-description = Entfernt automatisch leere Workspaces. 95 | workspaces-fixed = Feste Anzahl von Workspaces 96 | workspaces-fixed-description = Lege eine Anzahl von Workspaces fest 97 | workspaces-primary = Workspaces nur am Primären Bildschirm 98 | workspaces-span-displays = Bildschirmübergreifende Workspaces 99 | 100 | -------------------------------------------------------------------------------- /i18n/en/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Applications 2 | action-applications-description = Pressing the Super key opens the Applications Overview 3 | action-launcher = Launcher 4 | action-launcher-description = Pressing the Super key opens the Launcher 5 | action-workspaces = Workspaces 6 | action-workspaces-description = Pressing the Super key opens the Window and Workspaces Overview 7 | 8 | click-action-cycle = Launch or Cycle Windows 9 | click-action-minimize = Launch or Minimize Windows 10 | click-action-minimize-or-previews = Launch, Minimize, or Preview Windows 11 | 12 | date-combo = Date & Time and Notifications Position 13 | date-combo-center = Center 14 | date-combo-left = Left 15 | date-combo-right = Right 16 | 17 | display-all = All Displays 18 | display-primary = Primary Display 19 | 20 | dock-always-hide = Always hide 21 | dock-always-hide-description = Dock always hides unless actively being revealed by the mouse 22 | dock-always-visible = Always visible 23 | dock-applications = Show Applications Icon in Dock 24 | dock-click-action = Icon Click Action 25 | dock-disable = No dock 26 | dock-dynamic = Dock doesn't extend to edges 27 | dock-enable = Enable Dock 28 | dock-extend = Extend dock to the edges of the screen 29 | dock-extends = Dock extends to edges 30 | dock-intelligently-hide = Intelligently hide 31 | dock-intelligently-hide-description = Dock hides when any window overlaps the dock area 32 | dock-launcher = Show Launcher Icon in Dock 33 | dock-mounted-drives = Show Mounted Drives 34 | dock-options = Dock Options 35 | dock-position = Position on the Desktop 36 | dock-alignment = Dock and Icon Alignment on the Screen 37 | dock-show-on-display = Show Dock on Display 38 | dock-size = Dock Size 39 | dock-visibility = Dock Visibility 40 | dock-workspaces = Show Workspaces Icon in Dock 41 | 42 | gis-dock-description = Dock appearance, its size, and position can be changed at any time from the Settings application. 43 | gis-dock-header = Continue the desktop setup by choosing your preferred layout. 44 | gis-dock-title = Welcome to Pop!_OS 45 | 46 | gis-extensions-label1 = Manually installed GNOME Shell extensions are disabled to ensure upgrades are reliable. The extensions are not usually tested as part of Pop!_OS and can cause issues. You can manually re-enable them one at a time to ensure compatibility of each extension. To re-enable, install them again from {$url}, or restore them from the backup directory. 47 | 48 | Your GNOME Shell extensions have been moved from: 49 | gis-extensions-label2 = To this backup folder: 50 | gis-extensions-title = GNOME Shell Extensions Update 51 | 52 | gis-gestures-description = Use four finger swipe left to open Workspaces and windows overview, four fingers swipe right to open Applications, and four fingers swipe up or down to switch between workspaces. Swipe with three fingers to switch between windows. 53 | gis-gestures-title = Use Gestures for Easier Navigation 54 | 55 | gis-launcher-description = Press Super key or use an icon in the dock to display the Launcher search field. Use arrow keys to quickly switch between open windows or type the name of the application to launch it. The Launcher makes navigating the desktop faster and more fluid. 56 | gis-launcher-notice = Super key configuration can be changed at any time from the Settings application. 57 | gis-launcher-title = Open and Switch Applications from Launcher 58 | 59 | gis-panel-notice = Top bar configuration can be changed at any time from the Settings application. 60 | gis-panel-title = Configure the Top Bar 61 | 62 | hot-corner = Hot Corner 63 | hot-corner-description = Enable top-left hot corner for Workspaces 64 | 65 | multi-monitor-behavior = Multi-monitor Behavior 66 | 67 | page-appearance = Appearance 68 | page-dock = Dock 69 | page-main = General 70 | page-workspaces = Workspaces 71 | 72 | position-bottom = Bottom of the screen 73 | position-left = Along the left side 74 | position-right = Along the right side 75 | 76 | alignment-center = Center 77 | alignment-start = Start 78 | alignment-end = End 79 | 80 | show-applications-button = Show Applications Button 81 | show-maximize-button = Show Maximize Button 82 | show-minimize-button = Show Minimize Button 83 | show-workspaces-button = Show Workspaces Button 84 | 85 | size-custom = Custom Size 86 | size-large = Large 87 | size-medium = Medium 88 | size-small = Small 89 | 90 | super-key-action = Super Key Action 91 | 92 | top-bar = Top Bar 93 | 94 | window-controls = Window Controls 95 | 96 | workspace-picker-position = Placement of the Workspace Picker 97 | 98 | workspaces-amount = Number of Workspaces 99 | workspaces-dynamic = Dynamic Workspaces 100 | workspaces-dynamic-description = Automatically removes empty workspaces. 101 | workspaces-fixed = Fixed Number of Workspaces 102 | workspaces-fixed-description = Specify a number of workspaces 103 | workspaces-primary = Workspaces on Primary Display Only 104 | workspaces-span-displays = Workspaces Span Displays 105 | 106 | -------------------------------------------------------------------------------- /i18n/es/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Aplicaciones 2 | action-applications-description = Pulsar la tecla Super abre la vista de aplicaciones 3 | action-launcher = Lanzador 4 | action-launcher-description = Pulsar la tecla Super abre el Lanzador 5 | action-workspaces = Áreas de trabajo 6 | action-workspaces-description = Pulsar la tecla Super abre la vista de ventanas y áreas de trabajo 7 | click-action-cycle = Lanzar o cambiar entre ventanas 8 | click-action-minimize = Abrir o minimizar ventanas 9 | click-action-minimize-or-previews = Lanzar, minimizar o previsualizar ventanas 10 | 11 | date-combo = Posición de la fecha, hora y notificaciones 12 | date-combo-center = Centro 13 | date-combo-left = Izquierda 14 | date-combo-right = Derecha 15 | 16 | display-all = Todas las pantallas 17 | display-primary = Pantalla principal 18 | 19 | dock-always-hide = Ocultar siempre 20 | dock-always-hide-description = El dock siempre se oculta a menos que el mouse lo revele activamente 21 | dock-always-visible = Siempre visible 22 | dock-applications = Mostrar el icono Aplicaciones en el dock 23 | dock-click-action = Acción de clic en el icono 24 | dock-disable = Desactivar dock 25 | dock-dynamic = El dock no se extiende hasta los bordes 26 | dock-enable = Activar dock 27 | dock-extend = Extiende el dock hasta los bordes de la pantalla 28 | dock-extends = El dock se extiende hasta los bordes 29 | dock-intelligently-hide = Ocultamiento inteligente 30 | dock-intelligently-hide-description = El dock se ocultará cuando cualquier ventana lo solape 31 | dock-launcher = Mostrar el icono del Lanzador en el dock 32 | dock-mounted-drives = Mostrar volúmenes montados 33 | dock-options = Opciones del dock 34 | dock-position = Posición en el escritorio 35 | dock-show-on-display = Mostrar dock en pantalla 36 | dock-size = Tamaño del dock 37 | dock-visibility = Visibilidad del dock 38 | dock-workspaces = Mostrar el icono de Áreas de trabajo en el dock 39 | 40 | gis-dock-description = La apariencia del dock, su tamaño y posición se pueden cambiar en cualquier momento desde la aplicación Configuración. 41 | gis-dock-header = Continúe con la configuración del escritorio eligiendo su diseño preferido. 42 | gis-dock-title = Bienvenido a Pop!_OS 43 | 44 | gis-extensions-label1 = Las extensiones de GNOME Shell instaladas manualmente están deshabilitadas para garantizar que las actualizaciones sean confiables. Las extensiones generalmente no se prueban como parte de Pop!_OS y pueden causar problemas. Puede volver a habilitarlos manualmente uno a la vez para garantizar la compatibilidad de cada extensión. Para volver a habilitarlos, instálelos nuevamente desde {$url} o restáurelos desde el directorio de respaldo. 45 | 46 | Tus extensiones de GNOME Shell se han movido desde: 47 | gis-extensions-label2 = A este directorio de respaldo: 48 | gis-extensions-title = Actualización de las extensiones de GNOME Shell 49 | 50 | gis-gestures-description = Deslice cuatro dedos hacia la izquierda para abrir las áreas de trabajo y la descripción general de las ventanas, deslice cuatro dedos hacia la derecha para abrir las aplicaciones y deslice cuatro dedos hacia arriba o hacia abajo para cambiar entre las áreas de trabajo. Desliza con tres dedos para cambiar entre ventanas. 51 | gis-gestures-title = Use gestos para una navegación más sencilla 52 | 53 | gis-launcher-description = Presione la tecla Super o use un icono en el dock para mostrar el campo de búsqueda del Lanzador. Use las teclas de flecha para cambiar rápidamente entre las ventanas abiertas o escriba el nombre de la aplicación para iniciarla. El Lanzador hace que la navegación por el escritorio sea más rápida y fluida. 54 | gis-launcher-notice = La configuración de la tecla Super se puede cambiar en cualquier momento desde la aplicación Configuración. 55 | gis-launcher-title = Abrir y cambiar aplicaciones desde el Lanzador 56 | 57 | gis-panel-notice = La configuración de la barra superior se puede cambiar en cualquier momento desde la aplicación Configuración. 58 | gis-panel-title = Configurar la barra superior 59 | 60 | hot-corner = Esquinas activas 61 | hot-corner-description = Habilitar esquina activa superior izquierda para áreas de trabajo 62 | 63 | multi-monitor-behavior = Comportamiento multimonitor 64 | 65 | page-appearance = Apariencia 66 | page-dock = Dock 67 | page-main = General 68 | page-workspaces = Áreas de trabajo 69 | 70 | position-bottom = Parte inferior de la pantalla 71 | position-left = En el lado izquierdo 72 | position-right = En el lado derecho 73 | 74 | show-applications-button = Mostrar el botón Aplicaciones 75 | show-maximize-button = Mostrar el botón maximizar 76 | show-minimize-button = Mostrar el botón minimizar 77 | show-workspaces-button = Mostrar el botón de áreas de trabajo 78 | 79 | size-custom = Tamaño personalizado 80 | size-large = Grande 81 | size-medium = Mediano 82 | size-small = Pequeño 83 | 84 | super-key-action = Acción de la tecla Super 85 | 86 | top-bar = Barra superior 87 | 88 | window-controls = Controles de ventana 89 | 90 | workspace-picker-position = Ubicación del selector de áreas de trabajo 91 | 92 | workspaces-amount = Número de áreas de trabajo 93 | workspaces-dynamic = Áreas de trabajo dinámicas 94 | workspaces-dynamic-description = Elimina automáticamente las áreas de trabajo vacías 95 | workspaces-fixed = Número fijo de áreas de trabajo 96 | workspaces-fixed-description = Especificar el número de áreas de trabajo 97 | workspaces-primary = Áreas de trabajo sólo en la pantalla principal 98 | workspaces-span-displays = Áreas de trabajo en todas las pantallas 99 | 100 | -------------------------------------------------------------------------------- /i18n/fr/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Applications 2 | action-applications-description = Pressez la touche Super pour ouvrir l'aperçu des Applications 3 | action-launcher = Lanceur 4 | action-launcher-description = Pressez la touche Super pour ouvrir le Lanceur 5 | action-workspaces = Espaces de travail 6 | action-workspaces-description = Pressez la touche Super pour ouvrir la Fenêtre et l'aperçu des espaces de travail. 7 | 8 | click-action-cycle = Lancer ou naviguer entre les fenêtres 9 | click-action-minimize = Lancer ou réduire les fenêtres 10 | click-action-minimize-or-previews = Lancer, Réduire ou Prévisualiser les fenêtres 11 | 12 | date-combo = Date & Heure et position des Notifications 13 | date-combo-center = Au Centre 14 | date-combo-left = À Gauche 15 | date-combo-right = À Droite 16 | 17 | display-all = Tous les écrans 18 | display-primary = Écran principal 19 | 20 | dock-always-hide = Toujours masquer 21 | dock-always-hide-description = Masquer le Dock sauf s'il est survolé par la souris 22 | dock-always-visible = Toujours visible 23 | dock-applications = Afficher l'icône des applications dans le Dock 24 | dock-click-action = Action en cliquant sur l'icône 25 | dock-disable = Pas de Dock 26 | dock-dynamic = Ne pas étendre le Dock jusqu'aux bords 27 | dock-enable = Activer le Dock 28 | dock-extend = Étendre le dock jusqu'aux bords de l'écran 29 | dock-extends = Le Dock s'étend jusqu'aux bords 30 | dock-intelligently-hide = Masquer de manière intelligente 31 | dock-intelligently-hide-description = Le Dock est masqué lorsqu'une fenêtre recouvre sa zone 32 | dock-launcher = Afficher l'icône du Lanceur dans le Dock 33 | dock-mounted-drives = Afficher les disques montés 34 | dock-options = Options du Dock 35 | dock-position = Position sur le bureau 36 | dock-alignment = Alignement du Dock et des icônes 37 | dock-show-on-display = Afficher le Dock à l'écran 38 | dock-size = Taille du Dock 39 | dock-visibility = Visibilité du Dock 40 | dock-workspaces = Afficher les Espaces de travail dans le Dock 41 | 42 | gis-dock-description = L'apparence du Dock, sa taille et sa position peuvent être modifiées à tout moment depuis les Paramètres 43 | gis-dock-header = Continuez la configuration du bureau en choisissant votre disposition préférée. 44 | gis-dock-title = Bienvenue sur Pop!_OS 45 | 46 | gis-extensions-label1 = Les extensions GNOME Shell installées manuellement sont désactivées pour garantir la fiabilité des mises à jour. Les extensions ne sont généralement pas testées dans le cadre de Pop!_OS et peuvent causer des problèmes. Vous pouvez les réactiver manuellement, une par une, pour assurer la compatibilité de chaque extension. Pour les réactiver, merci de les installer à nouveau à partir de {$url}, ou restaurez-les à partir du répertoire de sauvegarde. 47 | 48 | 49 | Vos extensions GNOME Shell ont été déplacées de: 50 | gis-extensions-label2 = Vers le dossier de sauvegarde suivant: 51 | gis-extensions-title = Mise à jour des extensions GNOME Shell 52 | 53 | gis-gestures-description = Faites glisser quatre doigts vers la gauche pour ouvrir les espaces de travail et l'aperçu des fenêtres, quatre doigts vers la droite pour ouvrir les applications, et quatre doigts vers le haut ou le bas pour passer d'un espace de travail à l'autre. Faites glisser avec trois doigts pour passer d'une fenêtre à l'autre. 54 | gis-gestures-title = Utilisez les gestes pour faciliter la navigation 55 | 56 | gis-launcher-description = Pressez la touche Super ou utilisez une icône dans le dock pour afficher le champ de recherche du Lanceur. Utilisez les touches fléchées pour basculer rapidement d'une fenêtre ouverte à une autre ou tapez le nom de l'application pour la lancer. Le Lanceur rend la navigation sur le bureau plus rapide et plus fluide 57 | gis-launcher-notice = La configuration de la touche Super peut être modifiée à tout moment depuis les Paramètres. 58 | gis-launcher-title = Ouvrir et changer d'application depuis le Lanceur 59 | 60 | gis-panel-notice = La configuration de la barre supérieure peut être modifiée à tout moment depuis les Paramètres 61 | gis-panel-title = Configurer la barre supérieure 62 | 63 | hot-corner = Coin actif 64 | hot-corner-description = Activer le coin actif en haut à gauche pour les espaces de travail 65 | 66 | multi-monitor-behavior = Comportement multi-écrans 67 | 68 | page-appearance = Apparence 69 | page-dock = Dock 70 | page-main = Généralités 71 | page-workspaces = Espaces de travail 72 | 73 | position-bottom = Bas de l'écran 74 | position-left = Le long du côté gauche 75 | position-right = Le long du côté droit 76 | 77 | alignment-center = Au Centre 78 | alignment-start = Au Début 79 | alignment-end = À la fin 80 | 81 | show-applications-button = Afficher le bouton des applications 82 | show-maximize-button = Afficher le bouton Maximiser 83 | show-minimize-button = Afficher le bouton Minimiser 84 | show-workspaces-button = Afficher le bouton des Espaces de travail 85 | 86 | size-custom = Taille personnalisée 87 | size-large = Grand 88 | size-medium = Moyen 89 | size-small = Petit 90 | 91 | super-key-action = Action de la touche Super 92 | 93 | top-bar = Barre supérieure 94 | 95 | window-controls = Options de fenêtre 96 | 97 | workspace-picker-position = Placement du sélecteur d'espace de travail 98 | 99 | workspaces-amount = Nombre d'espaces de travail 100 | workspaces-dynamic = Espaces de travail dynamiques 101 | workspaces-dynamic-description = Supprime automatiquement les espaces de travail vides 102 | workspaces-fixed = Nombre fixe d'espaces de travail 103 | workspaces-fixed-description = Spécifier un nombre d'espaces de travail 104 | workspaces-primary = Espaces de travail uniquement sur l'écran principal 105 | workspaces-span-displays = Espaces de travail inter-écrans 106 | 107 | -------------------------------------------------------------------------------- /i18n/it/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Applicazioni 2 | action-applications-description = Il tasto Super apre la panoramica delle applicazioni 3 | action-launcher = Launcher 4 | action-launcher-description = Il tasto Super apre il launcher 5 | action-workspaces = Spazi di lavoro 6 | action-workspaces-description = Il tasto Super apre la panoramica delle finestre e degli spazi di lavoro 7 | 8 | click-action-cycle = Apre o ripete le finestre 9 | click-action-minimize = Apre o minimizza le finestre 10 | click-action-minimize-or-previews = Apre, minimizza o mostra l'anteprima delle finestre 11 | 12 | date-combo = Posizione data & ora e notifiche 13 | date-combo-center = Centro 14 | date-combo-left = Sinistra 15 | date-combo-right = Destra 16 | 17 | display-all = Tutti gli schermi 18 | display-primary = Schermo principale 19 | 20 | dock-always-hide = Nascondi sempre 21 | dock-always-hide-description = Il dock viene sempre nascosto a meno di non essere attivamente mostrato dal mouse 22 | dock-always-visible = Sempre visibile 23 | dock-applications = Mostra l'icona delle applicazioni nel dock 24 | dock-click-action = Azione al click dell'icona 25 | dock-disable = Nessun dock 26 | dock-dynamic = Il dock non si estende fino ai bordi 27 | dock-enable = Attiva il dock 28 | dock-extend = Estendi il dock fino ai bordi dello schermo 29 | dock-extends = Estende il dock fino ai bordi 30 | dock-intelligently-hide = Nascondi intelligentemente 31 | dock-intelligently-hide-description = Il dock viene nascosto quando una finestra occupa la sua area 32 | dock-launcher = Mostra l'icona del launcher nel dock 33 | dock-mounted-drives = Mostra dischi montati 34 | dock-options = Opzioni dock 35 | dock-position = Posizione sullo schermo 36 | dock-show-on-display = Mostra il dock sullo schermo 37 | dock-visibility = Visibilità dock 38 | dock-workspaces = Mostra l'icona degli spazi di lavoro nel dock 39 | 40 | gis-dock-description = L'aspetto, la dimensione e la posizione del dock possono essere cambiati in ogni momento dalle impostazioni. 41 | gis-dock-header = Continua la configurazione scegliendo il tuo layout preferito. 42 | gis-dock-title = Benvenuto in Pop!_OS 43 | 44 | gis-extensions-label1 = Le estensioni della shell GNOME installate manualmente sono disabilitate per assicurare degli aggiornamenti affidabili. Le estensioni non sono normalmente testate come parte di Pop!_OS e possono causare problemi. Si possono riattivare manualmente una alla volta per assicurarsi della compatibilità di ogni estensione. Per riattivarle, si possono installare nuovamente da {$url}, oppure ripristinare dalla cartella di backup. 45 | 46 | Le tue estensioni della shell GNOME sono state spostate da: 47 | gis-extensions-label2 = A questa cartella di backup: 48 | gis-extensions-title = Aggiornamento estensioni della shell GNOME 49 | 50 | gis-gestures-description = Scorri con quattro dita a sinistra per aprire la panoramica delle finestre e degli spazi di lavoro, a destra per aprire le applicazioni, in su e in giù per cambiare spazio di lavoro. Scorri con tre dita per cambiare finestre. 51 | gis-gestures-title = Usa i gesti per una navigazione più semplice 52 | 53 | gis-launcher-description = Premi il tasto Super o usa l'icona nella barra delle applicazioni per mostrare il campo di ricerca del launcher. Usa le frecce per cambiare velocemente finestra aperta o scrivi il nome dell'applicazione per aprirla. Il launcher rende la navigazione più fluida e veloce. 54 | gis-launcher-notice = La configurazine del tasto Super può essere cambiata in ogni momento dalle impostazioni. 55 | gis-launcher-title = Apri e cambia applicazioni dal launcher 56 | 57 | gis-panel-notice = La configurazione della barra superiore può essere cambiata in ogni momento dalle impostazioni. 58 | gis-panel-title = Configura la barra superiore 59 | 60 | hot-corner = Angolo attivo 61 | hot-corner-description = Abilita l'angolo attivo in alto a sinistra per gli spazi di lavoro 62 | 63 | multi-monitor-behavior = Comportamento su più schermi 64 | 65 | page-appearance = Aspetto 66 | page-dock = Dock 67 | page-main = Generale 68 | page-workspaces = Spazi di lavoro 69 | 70 | position-bottom = In basso 71 | position-left = Sul lato sinistro 72 | position-right = Sul lato destro 73 | 74 | show-applications-button = Mostra pulsante applicazioni 75 | show-maximize-button = Mostra pulsante massimizza 76 | show-minimize-button = Mostra pulsante minimizza 77 | show-workspaces-button = Mostra pulsante spazi di lavoro 78 | 79 | size-custom = Dimensione personalizzata 80 | size-large = Grande 81 | size-medium = Medio 82 | size-small = Piccolo 83 | 84 | super-key-action = Azione tasto Super 85 | 86 | top-bar = Barra superiore 87 | 88 | window-controls = Controlli finestra 89 | 90 | workspace-picker-position = Posizione del selezionatore degli spazi di lavoro 91 | 92 | workspaces-amount = Numero degli spazi di lavoro 93 | workspaces-dynamic = Spazi di lavoro dinamici 94 | workspaces-dynamic-description = Rimuovi automaticamente gli spazi di lavoro vuoti 95 | workspaces-fixed = Numero fisso di spazi di lavoro 96 | workspaces-fixed-description = Specifica un numero di spazi di lavoro 97 | workspaces-primary = Spazi di lavoro solo sullo schermo principale 98 | workspaces-span-displays = Gli spazi di lavoro attraversano gli schermi 99 | 100 | -------------------------------------------------------------------------------- /i18n/nl/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Toepassingen 2 | action-applications-description = Met de supertoets het toepassingsoverzicht openen 3 | action-launcher = Snelstarter 4 | action-launcher-description = Met de supertoets de snelstarter openen 5 | action-workspaces = Werkbladen 6 | action-workspaces-description = Met de supertoets het werkbladoverzicht openen 7 | 8 | click-action-cycle = Start of wissel tussen vensters 9 | click-action-minimize = Start of minimaliseer vensters 10 | click-action-minimize-or-previews = Start apps, minimaliseer vensters of toon vensterminiaturen 11 | 12 | date-combo = Positie van het 'Datum, tijd en meldingen'-applet 13 | date-combo-center = Midden 14 | date-combo-left = Links 15 | date-combo-right = Rechts 16 | 17 | display-all = Alle schermen 18 | display-primary = Primaire scherm 19 | 20 | dock-always-hide = Altijd verbergen 21 | dock-always-hide-description = De dock automatisch verbergen tenzij u er met de muis overheen gaat 22 | dock-always-visible = Altijd zichtbaar 23 | dock-applications = Pictogram 'Toepassingen' in de dock tonen 24 | dock-click-action = Actie na het klikken op het pictogram 25 | dock-disable = Dock uitschakelen 26 | dock-dynamic = Dock reikt niet tot de randen 27 | dock-enable = Dock inschakelen 28 | dock-extend = Dock reikt tot de randen van het scherm 29 | dock-extends = Dock reikt tot de randen 30 | dock-intelligently-hide = Slim verbergen 31 | dock-intelligently-hide-description = De dock verbergt zich automatisch als er een venster in de buurt komt 32 | dock-launcher = Pictogram 'Snelstarter' in de dock tonen 33 | dock-mounted-drives = Aangekoppelde schijven tonen 34 | dock-options = Opties voor de dock 35 | dock-position = Positie op het scherm 36 | dock-alignment = Uitlijning van de dock en pictogrammen op het scherm 37 | dock-show-on-display = De dock op dit scherm tonen 38 | dock-size = Grootte van de dock 39 | dock-visibility = Zichtbaarheid van de dock 40 | dock-workspaces = Pictogram 'Werkbladen' in de dock tonen 41 | 42 | gis-dock-description = Het uiterlijk, de grootte en de positie van de dock kunnen altijd gewijzigd worden in de COSMIC-instellingen. 43 | gis-dock-header = Configureer de werkomgeving verder door uw favoriete lay-out te kiezen. 44 | gis-dock-title = Welkom bij Pop!_OS 45 | 46 | gis-extensions-label1 = Handmatig geïnstalleerde GNOME Shell-extensies zijn uitgeschakeld zodat de upgrades betrouwbaar zijn. De extensies worden normaal gesproken niet getest als onderdeel van Pop!_OS en kunnen problemen veroorzaken. U kunt ze één voor één handmatig opnieuw inschakelen om de compatibiliteit van elke extensie te garanderen. Om ze opnieuw in te schakelen, installeert u ze opnieuw vanaf {$url}, of herstelt u ze vanuit de back-up map. 47 | 48 | Uw GNOME Shell-extensies zijn verplaatst van: 49 | gis-extensions-label2 = Naar deze back-up map: 50 | gis-extensions-title = GNOME Shell-extensies updaten 51 | 52 | gis-gestures-description = Veeg vier vingers naar links voor het werkblad- en vensteroverzicht, veeg vier vingers naar rechts om het toepassingsoverzicht te openen, veeg vier vingers naar boven of onder om te wisselen tussen werkbladen. Veeg met drie vinger om tussen vensters te wisselen. 53 | gis-gestures-title = Gebruik veeggebaren om efficiënt te navigeren 54 | 55 | gis-launcher-description = Druk op de supertoets of gebruik een pictogram in de dock om het zoekveld van de snelstarter te tonen. Gebruik pijltjestoetsen om snel te wisselen tussen open vensters of typ de naam van de app die u wilt starten. Met behulp van de snelstarter maakt u uw werkwijze sneller en vloeiender. 56 | gis-launcher-notice = De configuratie van de supertoets kan altijd worden aangepast in de COSMIC-instellingen. 57 | gis-launcher-title = Start en schakel tussen toepassingen met de snelstarter 58 | 59 | gis-panel-notice = De configuratie van het paneel kan altijd worden aangepast in COSMIC-instellingen. 60 | gis-panel-title = Paneel configureren 61 | 62 | hot-corner = Slimme hoek 63 | hot-corner-description = Activeer de slimme hoek linksboven om het werkbladoverzicht te openen 64 | 65 | multi-monitor-behavior = Werking over meerdere beeldschermen 66 | 67 | page-appearance = Uiterlijk 68 | page-dock = Dock 69 | page-main = Algemeen 70 | page-workspaces = Werkbladen 71 | 72 | position-bottom = Aan de onderkant van het scherm 73 | position-left = Langs links 74 | position-right = Langs rechts 75 | 76 | alignment-center = Middenstuk 77 | alignment-start = Beginstuk 78 | alignment-end = Eindstuk 79 | 80 | show-applications-button = Knop 'Toepassingen' tonen 81 | show-maximize-button = Maximaliseerknop tonen 82 | show-minimize-button = Minimaliseerknop tonen 83 | show-workspaces-button = Knop 'Werkbaden' tonen 84 | 85 | size-custom = Aangepaste grootte 86 | size-large = Groot 87 | size-medium = Gemiddeld 88 | size-small = Klein 89 | 90 | super-key-action = Actie van de supertoets 91 | 92 | top-bar = Bovenbalk 93 | 94 | window-controls = Vensterknoppen 95 | 96 | workspace-picker-position = Plaatsing van de Werkbladwisselaar 97 | 98 | workspaces-amount = Aantal werkbladen 99 | workspaces-dynamic = Dynamische werkbladen 100 | workspaces-dynamic-description = Lege werkbladen automatisch verwijderen. 101 | workspaces-fixed = Vast aantal werkbladen 102 | workspaces-fixed-description = Kies een vast aantal werkbladen 103 | workspaces-primary = Werkruimtes alleen op het primaire scherm 104 | workspaces-span-displays = Schermoverkoepelende werkbladen 105 | -------------------------------------------------------------------------------- /i18n/pl/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Programy 2 | action-applications-description = Wciśnięcie guzika Super otwiera przegląd programów 3 | action-launcher = Panel startowy 4 | action-launcher-description = Wciśnięcie guzika Super otwiera panel startowy 5 | action-workspaces = Obszary robocze 6 | action-workspaces-description = Wciśnięcie guzika Super otwiera przegląd okien i obszarów roboczych 7 | click-action-cycle = Uruchom lub przełączaj okna 8 | click-action-minimize = Uruchom lub zminimalizuj okna 9 | click-action-minimize-or-previews = Uruchom, zminimalizuj lub podejrzyj okna 10 | disabled-super-warning = 11 | Nadpisywanie zachowania guzika Super zostało wyłączone w zaawansowanych ustawieniach. 12 | • Guzik Super otworzy obszary robocze chyba, że zachowanie zostało określone przez inne rozszerzenia. 13 | • Wybranie jakieś opcji poniżej ponownie włączy nadpisywanie. 14 | 15 | date-combo = Pozycja daty, godziny i powiadomień 16 | date-combo-center = Środek 17 | date-combo-left = Lewa 18 | date-combo-right = Prawa 19 | 20 | display-all = Wszystkie ekrany 21 | display-primary = Ekran główny 22 | 23 | dock-always-hide = Zawsze ukrywaj 24 | dock-always-hide-description = Dok zawsze jest ukrywany chyba, że zostanie odkryty przez kursor myszy 25 | dock-always-visible = Zawsze widoczny 26 | dock-applications = Pokaż ikonę Programy w doku 27 | dock-click-action = Czynność po wciśnięciu ikony 28 | dock-disable = Bez doka 29 | dock-dynamic = Dok nie rozszerza się do krawędzi 30 | dock-enable = Włącz dok 31 | dock-extend = Rozszerz dok do krawędzi ekranu 32 | dock-extends = Dok rozszerza się do krawędzi 33 | dock-intelligently-hide = Inteligentnie ukrywaj 34 | dock-intelligently-hide-description = Dok jest ukrywany gdy dowolne okno nakłada się z powierzchnią doka 35 | dock-launcher = Pokaż ikonę panelu startowego w doku 36 | dock-mounted-drives = Pokaż zamontowane napędy 37 | dock-options = Ustawienia doka 38 | dock-size = Rozmiar doka 39 | dock-position = Pozycja na pulpicie 40 | dock-show-on-display = Pokaż dok na ekranie 41 | dock-visibility = Widoczność doka 42 | dock-workspaces = Pokaż ikonę Obszary robocze w doku 43 | 44 | gis-dock-description = Wygląd doka, jego rozmiar i pozycja może być zmieniona w dowolnym czasie ustawienia. 45 | gis-dock-header = Kontynuuj konfiguracje pulpitu przez wybranie preferowanego układu. 46 | gis-dock-title = Witaj w Pop!_OS 47 | 48 | gis-extensions-label1 = Ręcznie zainstalowane rozszerzenia powłoki GNOME są wyłączone by zapewnić rzetelne aktualizacje. Rozszerzenia zazwyczaj nie są testowane jako część Pop!_OS i mogą powodować problemy. Możesz je pojedynczo włączyć ponownie by zapewnić kompatybilność każdego z nich. By to zrobić, zainstaluj je ponownie z {$url}, lub przywróć je z katalogu kopii zapasowej. 49 | 50 | Twoje rozszerzenia powłoki GNOME zostały przeniesione z: 51 | gis-extensions-label2 = Do tego folderu kopii zapasowej: 52 | gis-extensions-title = Aktualizacja rozszerzeń powłoki GNOME 53 | 54 | gis-gestures-description = Przesuń czterema palcami w lewo by otworzyć obszary robocze i przegląd okien, czterema palcami w prawo by otworzyć programy i czterema palcami w górę lub w dół by przełączać się między obszarami roboczymi. Przesuń trzema palcami by przełączać się między oknami. 55 | gis-gestures-title = Używaj gestów do łatwiejszej nawigacji 56 | 57 | gis-launcher-description = Wciśnij guzik Super lub użyj ikony w doku by wyświetlić pole wyszukiwania w panelu startowym. Użyj klawiszy strzałek by szybko przełączać się między oknami lub wpisać nazwę programu do uruchomienia. Panel startowy sprawia, że nawigacja jest szybsza i płynniejsza. 58 | gis-launcher-notice = Konfiguracja guzika Super może być zmieniona w dowolnym czasie w ustawieniach. 59 | gis-launcher-title = Otwieraj i przełączaj programy z panelu startowego 60 | 61 | gis-panel-notice = Konfiguracja górnego paska może być zmieniona w dowolnym czasie w ustawieniach. 62 | gis-panel-title = Konfiguracja górnego paska 63 | 64 | hot-corner = Aktywny róg 65 | hot-corner-description = Włącz lewy-górny aktywny róg dla obszarów roboczych 66 | 67 | multi-monitor-behavior = Zachowanie wielu monitorów 68 | 69 | page-appearance = Wygląd 70 | page-dock = Dok 71 | page-main = Ogólne 72 | page-workspaces = Obszary robocze 73 | 74 | position-bottom = Na dole ekranu 75 | position-left = Po lewej stronie 76 | position-right = Po prawej stronie 77 | 78 | show-applications-button = Pokaż guzik Programy 79 | show-maximize-button = Pokaż guzik maksymalizuj 80 | show-minimize-button = Pokaż guzik minimalizuj 81 | show-workspaces-button = Pokaż guzik Obszary robocze 82 | 83 | size-custom = Własny rozmiar 84 | size-large = Duży 85 | size-medium = Średni 86 | size-small = Mały 87 | 88 | super-key-action = Czynność guzika Super 89 | 90 | top-bar = Górny pasek 91 | 92 | window-controls = Przyciski na pasku tytułu 93 | 94 | workspace-picker-position = Umiejscowienie panelu wyboru obszarów roboczych 95 | 96 | workspaces-amount = Liczba obszarów roboczych 97 | workspaces-dynamic = Dynamiczne obszary robocze 98 | workspaces-dynamic-description = Automatycznie usuwa puste obszary robocze. 99 | workspaces-fixed = Stała liczba obszarów roboczych 100 | workspaces-fixed-description = Podaj liczbę obszarów roboczych 101 | workspaces-primary = Obszary robocze tylko na głównym ekranie 102 | workspaces-span-displays = Obszary robocze na wszystkich ekranach 103 | -------------------------------------------------------------------------------- /i18n/pt-BR/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Aplicativos 2 | action-applications-description = Pressionar a tecla Super abre o Menu de Aplicativos 3 | action-launcher = Launcher 4 | action-launcher-description = Pressionar a tecla Super abre o Launcher 5 | action-workspaces = Áreas de Trabalho 6 | action-workspaces-description = Pressionar a tecla Super abre um resumo das Áreas de Trabalho 7 | 8 | click-action-cycle = Abrir ou Trocar Janelas 9 | click-action-minimize = Abrir ou Minimizar Janelas 10 | click-action-minimize-or-previews = Abrir, Minimizar ou Visualizar Janelas 11 | 12 | date-combo = Posição da Data & Hora e Notificações 13 | date-combo-center = Centro 14 | date-combo-left = Esquerda 15 | date-combo-right = Direita 16 | 17 | display-all = Todos os monitores 18 | display-primary = Monitor primário 19 | 20 | dock-always-hide = Sempre oculta 21 | dock-always-hide-description = A dock sempre estará oculta até que o ponteiro se sobressaia 22 | dock-always-visible = Sempre visível 23 | dock-applications = Exibir o Ícone de Aplicativos na Dock 24 | dock-click-action = Ação de Ícones na Dock 25 | dock-disable = Sem Dock 26 | dock-dynamic = A Dock não se estende aos cantos da tela 27 | dock-enable = Habilitar a Dock 28 | dock-extend = Estender a Dock aos cantos da tela 29 | dock-extends = A Dock se estende 30 | dock-intelligently-hide = Ocultar e exibir a Dock automaticamente 31 | dock-intelligently-hide-description = A Dock é ocultada quando uma janela se sobressai 32 | dock-launcher = Exibir Ícone do Launcher na Dock 33 | dock-mounted-drives = Exibir Unidades Montadas na Dock 34 | dock-options = Opções da Dock 35 | dock-position = Posição na Área de Trabalho 36 | dock-alignment = Alinhamento da Dock e Ícones 37 | dock-show-on-display = Exibir a Dock no monitor 38 | dock-size = Tamanho da Dock 39 | dock-visibility = Visibilidade da Dock 40 | dock-workspaces = Exibir Ícone das Áreas de Trabalho na Dock 41 | 42 | gis-dock-description = Aparência, tamanho e posição da Dock podem ser alterados a qualquer momento nas Configurações. 43 | gis-dock-header = Para continuar, escolha um layout. 44 | gis-dock-title = Bem vindo ao Pop!_OS 45 | 46 | gis-extensions-label1 = Extensões do GNOME Shell instaladas manualmente estão desabilitadas para garantir que as atualizações sejam executadas com êxito. As extensões não são testadas por parte do Pop!_OS e podem causar problemas. Você pode habilitá-las novamente quando verificar a compatibilidade de cada extensão. Para habilitadas novamente, instale-as novamente de {$url}, ou restaure-as do diretório de backup. 47 | 48 | Suas extensões do GNOME Shell foram movidas de: 49 | gis-extensions-label2 = Para esta pasta de Backup: 50 | gis-extensions-title = Atualizações das extensões do GNOME Shell 51 | 52 | gis-gestures-description = Role a esquerda com quatro dedos para abrir um resumo das Janelas e Áreas de Trabalho, a direita para abrir o Menu de Aplicativos, para cima ou para baixo para alternar entre Áreas de Trabalho. Role com três dedos para alternar entre Janelas. 53 | gis-gestures-title = Use gestos para melhor navegação 54 | 55 | gis-launcher-description = Pressione a tecla Super ou use o Ícone na Dock para mostrar a barra de pesquisa. Use as setas para navegar rapidamente entre janelas ou digite o nome da aplicação. O Launcher faz com que a navegação na Área de Trabalho seja rápida e fluída. 56 | gis-launcher-notice = As configurações da tecla Super podem ser alteradas a qualquer momento nas Configurações. 57 | gis-launcher-title = Abrir e Alternar Aplicativos do Launcher 58 | 59 | gis-panel-notice = As configurações da barra superior podem ser modificadas a qualquer momento nas Configurações. 60 | gis-panel-title = Configure a barra superior 61 | 62 | hot-corner = Ação Rápida 63 | hot-corner-description = Habilitar canto superior esquerdo para as Áreas de Trabalho 64 | 65 | multi-monitor-behavior = Comportamento com múltiplos monitores 66 | 67 | page-appearance = Aparência 68 | page-dock = Dock 69 | page-main = Geral 70 | page-workspaces = Áreas de Trabalho 71 | 72 | position-bottom = Parte de baixo da tela 73 | position-left = Esquerda 74 | position-right = Direita 75 | 76 | alignment-center = Centro 77 | alignment-start = Inicio 78 | alignment-end = Final 79 | 80 | show-applications-button = Exibir Aplicativos 81 | show-maximize-button = Exibir Maximizar 82 | show-minimize-button = Exibir Minimizar 83 | show-workspaces-button = Exibir Áreas de Trabalho 84 | 85 | size-custom = Personalizada 86 | size-large = Grande 87 | size-medium = Média 88 | size-small = Pequena 89 | 90 | super-key-action = Ação da tecla Super 91 | 92 | top-bar = Barra superior 93 | 94 | window-controls = Controle das Janelas 95 | 96 | workspace-picker-position = Posicionamento da seleção de Áreas de Trabalho 97 | 98 | workspaces-amount = Número de Áreas de Trabalho 99 | workspaces-dynamic = Áreas de Trabalho Dinâmicas 100 | workspaces-dynamic-description = Remove Áreas de Trabalho vazias automaticamente. 101 | workspaces-fixed = Número fixo de Áreas de Trabalho 102 | workspaces-fixed-description = Especifica o número de Áreas de Trabalho 103 | workspaces-primary = Áreas de Trabalho Apenas no Monitor Primário 104 | workspaces-span-displays = Áreas de Trabalho em Todos os Monitores 105 | 106 | -------------------------------------------------------------------------------- /i18n/pt/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Aplicações 2 | action-applications-description = Premir a tecla Super abre a vista geral de aplicações 3 | action-launcher = Iniciador 4 | action-launcher-description = Premir a tecla Super abre o iniciador 5 | action-workspaces = Áreas de trabalho 6 | action-workspaces-description = Premir a tecla Super abre a vista de janelas e das áreas de trabalho. 7 | 8 | click-action-cycle = Abrir ou percorrer entre janelas 9 | click-action-minimize = Abrir ou minimizar janelas 10 | click-action-minimize-or-previews = Abrir, minimizar ou pré-visualizar janelas 11 | 12 | date-combo = Posição da data e hora e notificações 13 | date-combo-center = Centro 14 | date-combo-left = Esquerda 15 | date-combo-right = Direita 16 | 17 | display-all = Todos os ecrãs 18 | display-primary = Ecrã principal 19 | 20 | dock-always-hide = Ocultar sempre 21 | dock-always-hide-description = A doca é sempre ocultada, a menos que seja ativamente revelada pelo rato 22 | dock-always-visible = Sempre visível 23 | dock-applications = Mostrar o ícone de aplicações na doca 24 | dock-click-action = Ação de clicar no ícone 25 | dock-disable = Desativar doca 26 | dock-dynamic = A doca não se estende às margens 27 | dock-enable = Ativar doca 28 | dock-extend = Estender a doca às margens do ecrã 29 | dock-extends = A doca estende-se às margens 30 | dock-intelligently-hide = Ocultar inteligentemente 31 | dock-intelligently-hide-description = A doca é ocultada quando qualquer janela se sobrepõe à área da doca 32 | dock-launcher = Mostrar o ícone do iniciador na doca 33 | dock-mounted-drives = Mostrar unidades montadas 34 | dock-options = Opções da doca 35 | dock-position = Posição no ambiente de trabalho 36 | dock-alignment = Alinhamento da doca e ícones no ecrã 37 | dock-show-on-display = Mostrar a doca no ecrã 38 | dock-size = Tamanho da doca 39 | dock-visibility = Visibilidade da doca 40 | dock-workspaces = Mostrar o ícone de áreas de trabalho na doca 41 | 42 | gis-dock-description = Aparência, tamanho e posição da doca podem ser alterados a qualquer momento nas Definições. 43 | gis-dock-header = Continuar a configuração do ambiente de trabalho escolhendo o seu esquema preferido. 44 | gis-dock-title = Bem vindo/a ao Pop!_OS 45 | 46 | gis-extensions-label1 = As extensões do GNOME Shell instaladas manualmente estão desativadas para garantir que as atualizações sejam executadas com êxito. As extensões não são testadas por parte do Pop!_OS e podem causar problemas. Pode voltar a reactivá-las manualmente uma de cada vez para assegurar a compatibilidade de cada extensão. Para reativá-las, instale-as novamente a partir de {$url}, ou restaure-as do diretório de backup. 47 | 48 | As suas extensões do GNOME Shell foram movidas de: 49 | gis-extensions-label2 = Para esta pasta de backup: 50 | gis-extensions-title = Atualizações das extensões do GNOME Shell 51 | 52 | gis-gestures-description = Deslizar para esquerda com quatro dedos para abrir uma vista geral das janelas e áreas de trabalho, para direita para abrir o menu de aplicações, para cima ou para baixo para alternar entre áreas de trabalho. Deslizar com três dedos para alternar entre janelas. 53 | gis-gestures-title = Utilizar gestos para facilitar a navegação 54 | 55 | gis-launcher-description = Prima a tecla Super ou use o ícone na doca para mostrar a barra de pesquisa. Utilize as setas para navegar rapidamente entre janelas ou escreva o nome da aplicação. O Iniciador faz com que a navegação no ambiente de trabalho seja rápida e fluída. 56 | gis-launcher-notice = As definições da tecla Super podem ser alteradas a qualquer momento nas Definições. 57 | gis-launcher-title = Abrir e alternar entre aplicações a partir do iniciador 58 | 59 | gis-panel-notice = As definições da barra superior podem ser alteradas a qualquer momento nas Definições. 60 | gis-panel-title = Configurar a barra superior 61 | 62 | hot-corner = Canto ativo 63 | hot-corner-description = Ativar canto superior esquerdo ativo para áreas de trabalho 64 | 65 | multi-monitor-behavior = Comportamento multi-monitor 66 | 67 | page-appearance = Aparência 68 | page-dock = Doca 69 | page-main = Geral 70 | page-workspaces = Áreas de trabalho 71 | 72 | position-bottom = Parte inferior do ecrã 73 | position-left = No lado esquerdo 74 | position-right = No lado direito 75 | 76 | alignment-center = Centro 77 | alignment-start = Início 78 | alignment-end = Final 79 | 80 | show-applications-button = Mostrar o botão de aplicações 81 | show-maximize-button = Mostrar o botão de maximizar 82 | show-minimize-button = Mostrar o botão de minimizar 83 | show-workspaces-button = Mostrar o botão de áreas de trabalho 84 | 85 | size-custom = Personalizada 86 | size-large = Grande 87 | size-medium = Média 88 | size-small = Pequena 89 | 90 | super-key-action = Ação da tecla Super 91 | 92 | top-bar = Barra superior 93 | 94 | window-controls = Controlos da janela 95 | 96 | workspace-picker-position = Posicionamento da seleção de áreas de trabalho 97 | 98 | workspaces-amount = Número de áreas de trabalho 99 | workspaces-dynamic = Áreas de trabalho dinâmicas 100 | workspaces-dynamic-description = Remove automaticamente as áreas de trabalho vazias. 101 | workspaces-fixed = Número fixo de áreas de trabalho 102 | workspaces-fixed-description = Especificar o número de áreas de trabalho 103 | workspaces-primary = Áreas de trabalho apenas no ecrã principal 104 | workspaces-span-displays = Áreas de trabalho em todos os ecrãs 105 | 106 | -------------------------------------------------------------------------------- /i18n/ru/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Приложения 2 | action-applications-description = Нажатие клавиши Super открывает список приложений 3 | action-launcher = Панель запуска 4 | action-launcher-description = Нажатие клавиши Super открывает панель запуска 5 | action-workspaces = Рабочие места 6 | action-workspaces-description = Нажатие клавиши Super открывает обзор рабочих мест 7 | 8 | click-action-cycle = Открывать и переключать окна 9 | click-action-minimize = Открывать и сворачивать окна 10 | click-action-minimize-or-previews = Открывать, сворачивать или предпросматривать окна 11 | 12 | date-combo = Расположение даты, времени и уведомлений 13 | date-combo-center = По центру 14 | date-combo-left = Слева 15 | date-combo-right = Справа 16 | 17 | display-all = Все экраны 18 | display-primary = Основной экран 19 | 20 | dock-always-hide = Всегда скрывать 21 | dock-always-hide-description = Док всегда скрыт, пока не раскрывается с помощью мыши 22 | dock-always-visible = Всегда отображать 23 | dock-applications = Отображать значок «Приложения» в доке 24 | dock-click-action = Действие значка по нажатию 25 | dock-disable = Отключить док 26 | dock-dynamic = Не расширять док до краёв экрана 27 | dock-enable = Включить док 28 | dock-extend = Расширить док до краёв экрана 29 | dock-extends = Расширить док до краёв экрана 30 | dock-intelligently-hide = Интеллектуальное скрытие 31 | dock-intelligently-hide-description = Скрывать док, когда какое-либо окно перекрывает его 32 | dock-launcher = Отображать значок «Панель запуска» в доке 33 | dock-mounted-drives = Отображать подключённые диски в доке 34 | dock-options = Настройки дока 35 | dock-position = Расположение на рабочем столе 36 | dock-alignment = Выравнивание дока и значков на экране 37 | dock-show-on-display = Отображение дока на экранах 38 | dock-size = Размер дока 39 | dock-visibility = Видимость дока 40 | dock-workspaces = Отображать значок «Рабочие места» в доке 41 | 42 | gis-dock-description = Внешний вид дока, его размер и расположение можно изменить в любой момент в приложении «Настройки». 43 | gis-dock-header = Продолжите настройку рабочего стола, выбрав желаемую раскладку. 44 | gis-dock-title = Добро пожаловать в Pop!_OS 45 | 46 | gis-extensions-label1 = Установленные вручную расширения GNOME Shell отключены для обеспечения надёжности обновлений. Расширения обычно не проверяются как часть Pop!_OS и могут вызывать проблемы. Чтобы убедиться в их совместимости, вы можете вручную включить их по одному. Для повторного включения установите их заново из {$url}, либо восстановите их из директории резервных копий. 47 | 48 | Ваши расширения GNOME Shell были перенесены из: 49 | gis-extensions-label2 = В директорию резервных копий: 50 | gis-extensions-title = Обновление расширений GNOME Shell 51 | 52 | gis-gestures-description = Проведите четырьмя пальцами влево для открытия рабочих мест и обзора окон, четырьмя пальцами вправо — для открытия списка приложений, а четырьмя пальцами вверх или вниз — для переключения между рабочими пространствами. Для переключения между окнами проведите тремя пальцами. 53 | gis-gestures-title = Использовать жесты для более удобной навигации 54 | 55 | gis-launcher-description = Нажмите клавишу Super или используйте значок в доке, чтобы открыть поле поиска панели запуска. Используйте клавиши-стрелки для быстрого переключения между открытыми окнами или введите название приложения для его запуска. Панель запуска сделает навигацию по рабочему столу более быстрой и удобной. 56 | gis-launcher-notice = Конфигурацию клавиши Super можно изменить в любой момент в приложения «Настройки». 57 | gis-launcher-title = Открывайте и переключайтесь между приложениями из панели запуска 58 | 59 | gis-panel-notice = Настройки верхней панели можно изменить в любой момент в приложении «Настройки». 60 | gis-panel-title = Настройте верхнюю панель 61 | 62 | hot-corner = Активные углы 63 | hot-corner-description = Открывать рабочие места при наведении в левый верхний угол 64 | 65 | multi-monitor-behavior = Поведение для нескольких мониторов 66 | 67 | page-appearance = Внешний вид 68 | page-dock = Док 69 | page-main = Основное 70 | page-workspaces = Рабочие места 71 | 72 | position-bottom = В нижней части экрана 73 | position-left = Вдоль левой стороны экрана 74 | position-right = Вдоль правой стороны экрана 75 | 76 | alignment-center = По центру 77 | alignment-start = В начале 78 | alignment-end = В конце 79 | 80 | show-applications-button = Отображать кнопку «Приложения» 81 | show-maximize-button = Отображать кнопку «Развернуть» 82 | show-minimize-button = Отображать кнопку «Свернуть» 83 | show-workspaces-button = Отображать кнопку «Рабочие места» 84 | 85 | size-custom = Другой размер 86 | size-large = Большой 87 | size-medium = Средний 88 | size-small = Маленький 89 | 90 | super-key-action = Действие кнопки Super 91 | 92 | top-bar = Верхняя панель 93 | 94 | window-controls = Кнопки управления окнами 95 | 96 | workspace-picker-position = Расположение панели выбора рабочего места 97 | 98 | workspaces-amount = Число рабочих мест 99 | workspaces-dynamic = Динамические рабочие места 100 | workspaces-dynamic-description = Автоматически удалять пустые рабочие места. 101 | workspaces-fixed = Фиксированное число рабочих мест 102 | workspaces-fixed-description = Укажите число рабочих мест 103 | workspaces-primary = Рабочие места только на основном экране 104 | workspaces-span-displays = Рабочие места охватывают все экраны 105 | 106 | -------------------------------------------------------------------------------- /i18n/sr/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Aplikacije 2 | action-applications-description = Pritiskanje Super dugmeta otvara Pregled aplikacija 3 | action-launcher = Pokretač aplikacija 4 | action-launcher-description = Pritiskanje Super dugmeta otvara Pokretač aplikacija 5 | action-workspaces = Radne površine 6 | action-workspaces-description = Pritiskanje Super dugmeta otvara Pregled prozora i radnih površina 7 | 8 | date-combo = Pozicija notifikacije za datum i vreme 9 | date-combo-center = Centar 10 | date-combo-left = Levo 11 | date-combo-right = Desno 12 | 13 | display-all = Svi displeji 14 | display-primary = Primarni displej 15 | 16 | dock-always-hide = Uvek sakrivena 17 | dock-always-hide-description = Traka aplikacija je uvek sakrivena osim ako se aktivno ne otkrije mišem 18 | dock-always-visible = Uvek vidljiva 19 | dock-applications = Pokaži ikone aplikacija na Traci aplikacija 20 | dock-disable = Bez Trake aplikacija 21 | dock-dynamic = Traka aplikacija bez proširenja do ivica ekrana 22 | dock-enable = Aktiviraj Traku aplikacija 23 | dock-extend = Proširi Traku aplikacija do ivica ekrana 24 | dock-extends = Traka aplikacija je proširena do ivica ekrana 25 | dock-intelligently-hide = Inteligentno sakrij 26 | dock-intelligently-hide-description = Traka aplikacija se sakriva kad god je neki prozor preklapa 27 | dock-launcher = Pokaži ikonicu Pokretača aplikacija na Traci aplikacija 28 | dock-mounted-drives = Pokaži prikačene uređaje na Traci aplikacija 29 | dock-options = Opcije Trake aplikacija 30 | dock-position = Pozicija na radnoj površini 31 | dock-show-on-display = Prikaži Traku aplikacija na displeju 32 | dock-visibility = Vidljivost Trake aplikacija 33 | dock-workspaces = Prikaži ikonicu Pregled radnih površina na Traci aplikacija 34 | 35 | gis-dock-description = Izgled Trake aplikacija, njena veličina i pozicija može biti promenjena u Podešavanjima. 36 | gis-dock-header = Nastavite podešavanje računara izborom Vašeg preferiranog rasporeda. 37 | gis-dock-title = Dobrodošli u Pop!_OS 38 | 39 | gis-extensions-label1 = Ručno instalirane GNOME Shell ekstenzije su isključene radi obezbeđivanja pouzdanih nadogradnja. Ekstenzije nisu testirane od strane od Pop!_OS tima i mogu da stvore probleme. Možete ih ponovo uključiti jednu po jednu radi obezbeđivanja kompatibilnosti svake od njih. Za ponovno uključivanje, instalirajte ih opet sa {$url}, ili ih povratite iz direktorijuma rezervne kopije. 40 | 41 | Vaše GNOME Shell ekstenzije su prebačene iz: 42 | gis-extensions-label2 = U ovaj direktorijum rezervne kopije: 43 | gis-extensions-title = Ažuriranje GNOME Shell ekstenzije 44 | 45 | gis-gestures-description = Koristite prevlačenje levo sa četiri prsta da otvorite Pregled prozora i radnih površina, prevlačenje desno sa četiri prsta da otvorite Aplikacije i prevlačenje gore i dole za promenu trenutne Radne površine. Prevlačenje sa tri prsta menja trenutni aktivni prozor. 46 | gis-gestures-title = Koristite prevlačenja za lakšu navigaciju 47 | 48 | gis-launcher-description = Pritisnite Super dugme ili koristite ikonicu na Traci aplikacija za prikaz Pokretača aplikacija. Koristite strelice na tastaturi za brzo prebacivanje na drugi otvoreni prozor ili unesite ime aplikacije za pokretanje. Pokretač aplikacija čini navigaciju radnom površinom bržom i fludnijom. 49 | gis-launcher-notice = Funkcija Super dugmeta može biti promenjena u Podešavanjima. 50 | gis-launcher-title = Otvori i menjaj aplikacije pomoću Pokretača aplikacija 51 | 52 | gis-panel-notice = Konfiguracija Gornje trake može bit promenjena u Podešavanjima. 53 | gis-panel-title = Konfiguriši Gornju traku 54 | 55 | hot-corner = Aktivni ugao 56 | hot-corner-description = Omogući aktivan gornji levi ugao za Radne površine 57 | 58 | multi-monitor-behavior = Ponašanje sa više monitora 59 | 60 | page-appearance = Izgled 61 | page-dock = Traka aplikacija 62 | page-main = Opšte 63 | page-workspaces = Radne površine 64 | 65 | position-bottom = Dno ekrana 66 | position-left = Leva strana ekrana 67 | position-right = Desna strana ekrana 68 | 69 | show-applications-button = Prikaži dugme Aplikacija 70 | show-maximize-button = Prikaži dugme uvećanja prozora 71 | show-minimize-button = Prikaži dugme umanjenja prozora 72 | show-workspaces-button = Prikaži dugme Radnih površina 73 | 74 | size-custom = Druga veličina 75 | size-large = Veliko 76 | size-medium = Srednje 77 | size-small = Malo 78 | 79 | super-key-action = Funkcija Super dugmeta 80 | 81 | top-bar = Gornja traka 82 | 83 | window-controls = Kontrole prozora 84 | 85 | workspace-picker-position = Pozicija trake izbora Radnih površina 86 | 87 | workspaces-amount = Broj Radnih površina 88 | workspaces-dynamic = Dinamične Radne površine 89 | workspaces-dynamic-description = Automatski ukloni prazne Radne površine. 90 | workspaces-fixed = Fiksiran broj Radnih površina 91 | workspaces-fixed-description = Unesite broj Radnih površina 92 | workspaces-primary = Radne površine samo na primarnom displeju 93 | workspaces-span-displays = Radne površine na svim displejima 94 | 95 | -------------------------------------------------------------------------------- /i18n/sv/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Program 2 | action-applications-description = Genom att trycka på Super-tangenten öppnas programöversikten 3 | action-launcher = Programstartare 4 | action-launcher-description =Genom att trycka på Super-tangenten öppnas programstartaren 5 | action-workspaces = Arbetsytor 6 | action-workspaces-description = Genom att trycka på Super-tangenten öppnas översikten över fönster och arbetsytor 7 | 8 | click-action-cycle = Starta eller Cykla fönster 9 | click-action-minimize = Starta eller minimera fönster 10 | click-action-minimize-or-previews = Starta, minimera eller förhandsgranska fönster 11 | 12 | date-combo = Datum och tid och meddelandeposition 13 | date-combo-center = Mitten 14 | date-combo-left = Vänster 15 | date-combo-right = Höger 16 | 17 | display-all = Alla skärmar 18 | display-primary = Primär skärm 19 | 20 | dock-always-hide = Göm alltid 21 | dock-always-hide-description = Dock gömmer sig alltid såvida den inte aktivt avslöjas av musen 22 | dock-always-visible = Alltid synlig 23 | dock-applications = Visa programikonen i Dock 24 | dock-click-action = Ikon Klicka på Åtgärd 25 | dock-disable = Ingen dock 26 | dock-dynamic = Dock sträcker sig inte till kanterna 27 | dock-enable = Aktivera Dock 28 | dock-extend = Förläng dock till kanterna på skärmen 29 | dock-extends = Dock sträcker sig till kanterna 30 | dock-intelligently-hide = Göm intelligent 31 | dock-intelligently-hide-description = Dock gömmer sig när något fönster överlappar dockningsområdet 32 | dock-launcher = Visa Programstartarikon i Dock 33 | dock-mounted-drives = Visa monterade enheter 34 | dock-options = Dock alternativ 35 | dock-position = Position på skrivbordet 36 | dock-alignment = Dock och ikonjustering på skärmen 37 | dock-show-on-display = Visa Dock på skärmen 38 | dock-size = Dock storlek 39 | dock-visibility = Dock Synlighet 40 | dock-workspaces = Visa arbetsytor-ikonen i Dock 41 | 42 | gis-dock-description = Dockans utseende, dess storlek och position kan ändras när som helst från programmet Inställningar. 43 | gis-dock-header = Fortsätt med skrivbordsinstallationen genom att välja önskad layout. 44 | gis-dock-title = Välkommen till Pop!_OS 45 | 46 | gis-extensions-label1 = Manuellt installerade GNOME Shell-tillägg är inaktiverade för att säkerställa att uppgraderingar är tillförlitliga. Tilläggen testas vanligtvis inte som en del av Pop!_OS och kan orsaka problem. Du kan manuellt återaktivera dem en i taget för att säkerställa kompatibilitet för varje tillägg. För att återaktivera, installera dem igen från {$url} eller återställ dem från säkerhetskopieringskatalogen. 47 | 48 | Dina GNOME Shell-tillägg har flyttats från: 49 | gis-extensions-label2 = Till denna säkerhetskoperingskatalog: 50 | gis-extensions-title = Uppdatering av GNOME Shell tillägg 51 | 52 | gis-gestures-description = Svep åt vänster med fyra fingrar för att öppna översikten över arbetsytor och fönster, svep med fyra fingrar åt höger för att öppna program och svep uppåt eller nedåt med fyra fingrar för att växla mellan arbetsytor. Svep med tre fingrar för att växla mellan fönster. 53 | gis-gestures-title = Använd gester för enklare navigering 54 | 55 | gis-launcher-description = Tryck på Super-tangenten eller använd en ikon i dockan för att visa programstare-sökfältet. Använd piltangenterna för att snabbt växla mellan öppna fönster eller skriv namnet på programmet för att starta det. Programstaren gör navigeringen på skrivbordet snabbare och smidigare. 56 | gis-launcher-notice = Supertangent konfigurationen kan ändras när som helst från programmet Inställningar. 57 | gis-launcher-title = Öppna och byt program från programstaren 58 | 59 | gis-panel-notice = Konfigurationen av den övre raden kan ändras när som helst från programmet Inställningar. 60 | gis-panel-title = Konfigurera toppfältet 61 | 62 | hot-corner = Heta hörn 63 | hot-corner-description = Aktivera det övre vänstra heta hörnet för arbetsytor 64 | 65 | multi-monitor-behavior = Beteende för flera skärmar 66 | 67 | page-appearance = Utseende 68 | page-dock = Dock 69 | page-main = Allmänt 70 | page-workspaces = Arbetsytor 71 | 72 | position-bottom = Mitten av skärmen 73 | position-left = Längs vänster sida 74 | position-right = Längs höger sida 75 | 76 | alignment-center = Mitten 77 | alignment-start = Start 78 | alignment-end = Slut 79 | 80 | show-applications-button = Visa program knapp 81 | show-maximize-button = Visa maximera knapp 82 | show-minimize-button = Visa minimera knapp 83 | show-workspaces-button = Visa arbetsytor knapp 84 | 85 | size-custom = Anpassad storlek 86 | size-large = Stor 87 | size-medium = Mellan 88 | size-small = Liten 89 | 90 | super-key-action = Superknapp åtgärd 91 | 92 | top-bar = Översta raden 93 | 94 | window-controls = Fönsterkontroller 95 | 96 | workspace-picker-position = Placering av arbetsyta väljaren 97 | 98 | workspaces-amount = Antal arbetsytor 99 | workspaces-dynamic = Dynamiska arbetsytor 100 | workspaces-dynamic-description = Tar automatiskt bort tomma arbetsytor. 101 | workspaces-fixed = Fast antal arbetsytor 102 | workspaces-fixed-description = Ange ett antal arbetsytor 103 | workspaces-primary = Arbetsytor endast på den primära skärmen 104 | workspaces-span-displays = Arbetsytor sträcker sig till alla skärmar 105 | -------------------------------------------------------------------------------- /i18n/tr/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = Uygulamalar 2 | action-applications-description = Başlat tuşu Uygulamalar Görünümünü açar 3 | action-launcher = Uygulama Başlatıcı 4 | action-launcher-description = Başlat tuşu Uygulama Başlatıcısını açar 5 | action-workspaces = Çalışma Alanları 6 | action-workspaces-description = Başlat Tuşu Pencere ve Çalışma Alanları Görünümünü açar 7 | 8 | click-action-cycle = Başlat veya Pencelereler Arasında Dolaş 9 | click-action-minimize = Başlat veya Pencereleri Küçült 10 | click-action-minimize-or-previews = Başlat ya da Pencereleri Küçült veya Önizle 11 | 12 | date-combo = Tarih & Saat ve Bildirimlerin Konumu 13 | date-combo-center = Merkez 14 | date-combo-left = Sol 15 | date-combo-right = Sağ 16 | 17 | display-all = Bütün Ekranlar 18 | display-primary = Ana Ekran 19 | 20 | dock-always-hide = Daima gizle 21 | dock-always-hide-description = Rıhtım, fareyle açıkça ortaya çıkarılmadıkça daima gizlenir 22 | dock-always-visible = Daima görünür 23 | dock-applications = Uygulamalar Simgesini Rıhtımda Göster 24 | dock-click-action = Simgeye Tıklama Eylemi 25 | dock-disable = Rıhtımı Devre Dışı Bırak 26 | dock-dynamic = Rıhtım ekranın kenarlarına genişlemez 27 | dock-enable = Rıhtımı Etkinleştir 28 | dock-extend = Rıhtımı ekranın kenarlarına genişlet 29 | dock-extends = Rıhtım ekranın kenarlarına genişler 30 | dock-intelligently-hide = Akıllı gizleme 31 | dock-intelligently-hide-description = Rıhtım, herhangi bir pencere rıhtım alanının üstüne geldiğinde gizlenir 32 | dock-launcher = Uygulama Başlatıcı Simgesini Rıhtımda Göster 33 | dock-mounted-drives = Bağlanmış Aygıtları Göster 34 | dock-options = Rıhtım Ayarları 35 | dock-position = Masaüstü Konumu 36 | dock-alignment = Rıhtımı ve Simgeleri Ekranda Hizala 37 | dock-show-on-display = Rıhtımı Ekranda Göster 38 | dock-size = Rıhtım Boyutu 39 | dock-visibility = Rıhtım Görünürlüğü 40 | dock-workspaces = Çalışma Alanları Simgesini Rıhtımda Göster 41 | 42 | gis-dock-description = Rıhtımın görünüşü, boyutu ve konumu, istendiği an Ayarlar uygulamasından değiştirilebilir. 43 | gis-dock-header = Tercih edilen yerleşimi seçerek masaüstü kurulumuna devam et 44 | gis-dock-title = Pop!_OS'e Hoş Geldiniz! 45 | 46 | gis-extensions-label1 = Elle kurulmış Gnome Kabuk uzantıları, yükseltmelerin sağlamlığından emin olmak üzere devre dışı bırakılır. Uzantılar, genellikle Pop!_OS'in parçası olarak test edilmezler ve sorunlara yol açabilirler. Her bir uzantının uyumluluğundan emin olmak adına onları tek tek elle yeniden etkinleştirebilirsiniz. Yeniden etkinleştirmek için, onları tekrar {$url} adresinden kurun veya yedek dizininden geri yükleyin. 47 | 48 | GNOME Kabuk uzantılarınız buradan: 49 | gis-extensions-label2 = Bu yedek dizinine taşınmıştır: 50 | gis-extensions-title = GNOME Kabuk Uzantıları Güncelleme 51 | 52 | gis-gestures-description = Çalışma alanları ve pencereler görünümünü açmak için solda dört parmak kaydırmayı, Uygulamaları açmak için sağda dört parmak kaydırmayı ve çalışma alanları arasında geçiş yapmak için yukarı ve aşağı doğru dört parmak kaydırmayı kullanın. Pencereler arasında geçiş yapmak için üç parmakla kaydırın. 53 | gis-gestures-title = Daha Kolay Gezinmek İçin Jestleri Kullanın 54 | 55 | gis-launcher-description = Uygulama Başlatıcısı arama alanını görüntülemek için Başlat tuşuna basın veya rıhtımdaki simgeyi kullanın. Açık pencereler arasında geçiş yapmak için yön tuşlarını kullanın veya başlatmak üzere uygulamanın ismini yazın. Uygulama Başlatıcısı masaüstünde gezinmeyi daha hızlı ve daha akıcı kılar. 56 | gis-launcher-notice = Başlat tuşu düzenlemesi istendiği an Ayarlar uygulamasından değiştirilebilir. 57 | gis-launcher-title = Uygulamaları Uygulama Başlatıcısından Aç veya Aralarında Geçiş Yap 58 | 59 | gis-panel-notice = Üst çubuk düzenlemesi istendiği an Ayarlar uygulamasından değiştirilebilir. 60 | gis-panel-title = Üst Çubuğu Düzenle 61 | 62 | hot-corner = Etkin Köşe 63 | hot-corner-description = Çalışma Alanları için sol üst etkin köşeyi etkinleştir 64 | 65 | multi-monitor-behavior = Çoklu Ekran Davranışı 66 | 67 | page-appearance = Görünüm 68 | page-dock = Rıhtım 69 | page-main = Genel 70 | page-workspaces = Çalışma Alanları 71 | 72 | position-bottom = Ekranın altına 73 | position-left = Sol tarafa 74 | position-right = Sağ tarafa 75 | 76 | alignment-center = Merkezde 77 | alignment-start = Başlangıçta 78 | alignment-end = Sonda 79 | 80 | show-applications-button = Uygulamalar Düğmesini Göster 81 | show-maximize-button = Ekranı Kapla Düğmesini Göster 82 | show-minimize-button = Simge Durumuna Küçült Düğmesini Göster 83 | show-workspaces-button = Çalışma Alanları Düğmesini Göster 84 | 85 | size-custom = Özel Boyut 86 | size-large = Büyük 87 | size-medium = Orta 88 | size-small = Küçük 89 | 90 | super-key-action = Başlat Tuşu Eylemi 91 | 92 | top-bar = Üst Çubuk 93 | 94 | window-controls = Pencere Kontrolleri 95 | 96 | workspace-picker-position = Çalışma Alanı Seçici Yerleşimi 97 | 98 | workspaces-amount = Çalışma Alanları Sayısı 99 | workspaces-dynamic = Dinamik Çalışma Alanları 100 | workspaces-dynamic-description = Boş çalışma alanlarını kendiliğinden kaldır. 101 | workspaces-fixed = Sabit Sayıda Çalışma Alanı 102 | workspaces-fixed-description = Çalışma Alanı sayısı belirle 103 | workspaces-primary = Çalışma Alanları Yalnızca Ana Ekranda 104 | workspaces-span-displays = Çalışma Alanları Ekranlara Yayılır 105 | -------------------------------------------------------------------------------- /i18n/zh-CN/pop_desktop_widget.ftl: -------------------------------------------------------------------------------- 1 | action-applications = 应用程序 2 | action-applications-description = 按下 Super(徽标)键打开应用程序 3 | action-launcher = 启动器 4 | action-launcher-description = 按下 Super(徽标)键打开启动器 5 | action-workspaces = 工作区 6 | action-workspaces-description = 按下 Super(徽标)键打开窗口和工作区的概览 7 | 8 | click-action-cycle = 启动或在窗口间循环 9 | click-action-minimize = 启动或最小化窗口 10 | click-action-minimize-or-previews = 启动,最小化或显示概览 11 | 12 | date-combo = 时间日期与通知的位置 13 | date-combo-center = 居中 14 | date-combo-left = 靠左 15 | date-combo-right = 靠右 16 | 17 | display-all = 全部显示器 18 | display-primary = 主显示器 19 | 20 | dock-always-hide = 总是隐藏 21 | dock-always-hide-description = 总是隐藏 Dock,除非鼠标刻意尝试触发 22 | dock-always-visible = 总是可见 23 | dock-applications = 在 Dock 中显示应用程序图标 24 | dock-click-action = 点击图标的操作 25 | dock-disable = 无 Dock 26 | dock-dynamic = Dock 不延伸到屏幕边缘 27 | dock-enable = 启用 Dock 28 | dock-extend = Dock 延伸到屏幕边缘 29 | dock-extends = Dock 延伸到屏幕边缘 30 | dock-intelligently-hide = 智能隐藏 31 | dock-intelligently-hide-description = 有窗口妨碍 Dock 时隐藏 32 | dock-launcher = 在 Dock 显示应用程序 33 | dock-mounted-drives = 显示已挂载的磁盘 34 | dock-options = Dock 选项 35 | dock-position = 在桌面上的位置 36 | dock-show-on-display = 显示 Dock 的显示器 37 | dock-size = Dock 大小 38 | dock-visibility = Dock 可见度 39 | dock-workspaces = 在 Dock 显示工作区图标 40 | 41 | gis-dock-description = Dock 外观、大小和位置随时都可在设置中修改。 42 | gis-dock-header = 选择你首选的外观,以便继续设置桌面。 43 | gis-dock-title = 欢迎使用 Pop!_OS 44 | 45 | gis-extensions-label1 = 通过手动安装的 GNOME Shell 扩展已被禁用,以保证升级的可靠性。因为在 Pop!_OS 的测试中不会经常测试扩展,所以可能会出现问题。你可以一次启用一个扩展,来确保插件的兼容性。如要重新启用,可前往 {$url} 重新安装,或从备份目录中还原。 46 | 47 | 你的 GNOME Shell 扩展现已移到: 48 | gis-extensions-label2 = 到这个文件夹: 49 | gis-extensions-title = GNOME Shell 扩展更新 50 | 51 | gis-gestures-description = 使用四根手指,左划来打开窗口和工作区的概览,右划来打开应用程序,上划或下划来在工作区之间切换。使用三根手指划动来在窗口之间切换。 52 | gis-gestures-title = 使用手势让导航变得更容易 53 | 54 | gis-launcher-description = 按 Super(徽标)键,或是使用 Dock 上的图标来显示启动器搜索框。使用方向键,以便快速在打开的窗口中切换;或是输入应用程序的名称来打开它。启动器让桌面导航变得更容易、更顺畅。 55 | gis-launcher-notice = Super(徽标)键的配置随时都可在设置中修改。 56 | gis-launcher-title = 通过启动器打开、切换应用程序 57 | 58 | gis-panel-notice = 顶栏的配置随时都可在设置中修改。 59 | gis-panel-title = 配置顶栏 60 | 61 | hot-corner = 热区 62 | hot-corner-description = 启用鼠标移动到左上角来访问工作区 63 | 64 | multi-monitor-behavior = 多显示器行为 65 | 66 | page-appearance = 外观 67 | page-dock = Dock 68 | page-main = 通用 69 | page-workspaces = 工作区 70 | 71 | position-bottom = 屏幕底部 72 | position-left = 靠左边缘 73 | position-right = 靠右边缘 74 | 75 | show-applications-button = 显示应用程序图标 76 | show-maximize-button = 显示最大化按钮 77 | show-minimize-button = 显示最小化按钮 78 | show-workspaces-button = 显示工作区按钮 79 | 80 | size-custom = 自定义大小 81 | size-large = 大 82 | size-medium = 中 83 | size-small = 小 84 | 85 | super-key-action = Super(徽标)键动作 86 | 87 | top-bar = 顶栏 88 | 89 | window-controls = 窗口控件 90 | 91 | workspace-picker-position = 工作区选取器摆放位置 92 | 93 | workspaces-amount = 工作区数量 94 | workspaces-dynamic = 动态工作区 95 | workspaces-dynamic-description = 自动移除空的工作空间。 96 | workspaces-fixed = 固定数量的工作区 97 | workspaces-fixed-description = 给定工作区的数量 98 | workspaces-primary = 只在主显示器上显示工作区 99 | workspaces-span-displays = 工作区跨显示器显示 100 | 101 | -------------------------------------------------------------------------------- /rust-toolchain: -------------------------------------------------------------------------------- 1 | 1.59.0 2 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | comment_width = 100 2 | condense_wildcard_suffixes = true 3 | fn_single_line = true 4 | force_multiline_blocks = false 5 | format_strings = true 6 | imports_granularity="Crate" 7 | imports_indent = "Block" 8 | max_width = 100 9 | normalize_comments = true 10 | reorder_impl_items = true 11 | reorder_imports = true 12 | reorder_modules = true 13 | struct_field_align_threshold = 30 14 | unstable_features = true 15 | use_field_init_shorthand = true 16 | use_small_heuristics = "Max" 17 | wrap_comments = true -------------------------------------------------------------------------------- /src/gis/dock.rs: -------------------------------------------------------------------------------- 1 | use crate::fl; 2 | use gtk::prelude::*; 3 | 4 | pub fn page(header: >k::Widget) -> gtk::Widget { 5 | (cascade! { 6 | gtk::Box::new(gtk::Orientation::Vertical, 0); 7 | ..set_halign(gtk::Align::Center); 8 | ..add(header); 9 | ..add(>k::Label::new(Some(&fl!("gis-dock-header")))); 10 | ..add(&crate::dock_selector()); 11 | ..add(>k::Label::new(Some(&fl!("gis-dock-description")))); 12 | }) 13 | .upcast() 14 | } 15 | 16 | pub fn title() -> String { fl!("gis-dock-title") } 17 | -------------------------------------------------------------------------------- /src/gis/extensions.rs: -------------------------------------------------------------------------------- 1 | use crate::fl; 2 | use gtk::prelude::*; 3 | use std::{fs::File, path::PathBuf}; 4 | 5 | pub fn page(header: >k::Widget) -> Option { 6 | let gnome_shell_data_dir = gnome_shell_data_dir(); 7 | let extensions_source = gnome_shell_data_dir.join("extensions"); 8 | let extensions_backup = gnome_shell_data_dir.join("extensions.bak"); 9 | let extensions_notified = extensions_backup.join("notified"); 10 | 11 | if !extensions_backup.exists() || extensions_notified.exists() { 12 | return None; 13 | } 14 | 15 | let _ = File::create(extensions_notified); 16 | 17 | let label_create = |selectable: bool, label: &str| -> gtk::Label { 18 | gtk::LabelBuilder::new() 19 | .justify(gtk::Justification::Center) 20 | .label(label) 21 | .selectable(selectable) 22 | .wrap(true) 23 | .build() 24 | }; 25 | 26 | let url = "extensions.gnome.org"; 27 | 28 | let label1 = cascade! { 29 | label_create(false, &fl!("gis-extensions-label1", url=url)); 30 | ..set_use_markup(true); 31 | ..connect_activate_link(|_, uri| { 32 | let _ = std::process::Command::new("xdg-open").arg(uri).status(); 33 | gtk::Inhibit(true) 34 | }); 35 | }; 36 | 37 | let image = crate::scaled_image_from_resource("/org/pop/desktop-widget/extension.png", 192) 38 | .halign(gtk::Align::Center) 39 | .valign(gtk::Align::Start) 40 | .margin_top(32) 41 | .build(); 42 | 43 | Some( 44 | (cascade! { 45 | gtk::Box::new(gtk::Orientation::Vertical, 0); 46 | ..set_halign(gtk::Align::Center); 47 | ..add(header); 48 | ..add(&label1); 49 | ..add(&label_create(true, &fomat!((extensions_source.display())))); 50 | ..add(&cascade! { 51 | label_create(false, &fl!("gis-extensions-label2")); 52 | ..set_margin_top(12); 53 | }); 54 | ..add(&label_create(true, &fomat!((extensions_backup.display())))); 55 | ..add(&image); 56 | }) 57 | .upcast(), 58 | ) 59 | } 60 | 61 | pub fn title() -> String { fl!("gis-extensions-title") } 62 | 63 | fn gnome_shell_data_dir() -> PathBuf { 64 | glib::user_data_dir().join("gnome-shell") 65 | } 66 | -------------------------------------------------------------------------------- /src/gis/gestures.rs: -------------------------------------------------------------------------------- 1 | use crate::fl; 2 | use gio::prelude::*; 3 | use gtk::prelude::*; 4 | 5 | pub fn page(header: >k::Widget) -> gtk::Widget { 6 | let description = gtk::LabelBuilder::new() 7 | .wrap(true) 8 | .justify(gtk::Justification::Center) 9 | .label(&fl!("gis-gestures-description")) 10 | .build(); 11 | 12 | let video = gtk::ImageBuilder::new() 13 | .resource("/org/pop/desktop-widget/gestures.png") 14 | .halign(gtk::Align::Center) 15 | .valign(gtk::Align::Start) 16 | .vexpand(true) 17 | .margin_top(32) 18 | .build() 19 | .upcast::(); 20 | 21 | (cascade! { 22 | gtk::Box::new(gtk::Orientation::Vertical, 0); 23 | ..set_halign(gtk::Align::Center); 24 | ..add(header); 25 | ..add(&description); 26 | ..add(&video); 27 | }) 28 | .upcast() 29 | } 30 | 31 | pub fn title() -> String { fl!("gis-gestures-title") } 32 | -------------------------------------------------------------------------------- /src/gis/launcher.rs: -------------------------------------------------------------------------------- 1 | use crate::fl; 2 | use gio::prelude::*; 3 | use gtk::prelude::*; 4 | 5 | pub fn page(header: >k::Widget) -> gtk::Widget { 6 | let description = gtk::LabelBuilder::new() 7 | .wrap(true) 8 | .justify(gtk::Justification::Center) 9 | .label(&fl!("gis-launcher-description")) 10 | .build(); 11 | 12 | let image = gtk::ImageBuilder::new() 13 | .resource("/org/pop/desktop-widget/launcher.png") 14 | .halign(gtk::Align::Center) 15 | .valign(gtk::Align::Start) 16 | .vexpand(true) 17 | .margin_top(32) 18 | .build(); 19 | 20 | let extra_notice = gtk::LabelBuilder::new().label(&fl!("gis-launcher-notice")).build(); 21 | 22 | (cascade! { 23 | gtk::Box::new(gtk::Orientation::Vertical, 0); 24 | ..set_halign(gtk::Align::Center); 25 | ..add(header); 26 | ..add(&description); 27 | ..add(&image); 28 | ..add(&extra_notice); 29 | }) 30 | .upcast() 31 | } 32 | 33 | pub fn title() -> String { fl!("gis-launcher-title") } 34 | -------------------------------------------------------------------------------- /src/gis/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod dock; 2 | pub mod extensions; 3 | pub mod gestures; 4 | pub mod launcher; 5 | pub mod panel; 6 | -------------------------------------------------------------------------------- /src/gis/panel.rs: -------------------------------------------------------------------------------- 1 | use crate::fl; 2 | use gio::prelude::*; 3 | use gtk::prelude::*; 4 | 5 | pub fn page(header: >k::Widget) -> gtk::Widget { 6 | let extra_notice = gtk::LabelBuilder::new().label(&fl!("gis-panel-notice")).build(); 7 | 8 | let framed_box = cascade! { 9 | crate::framed_list_box(); 10 | ..set_margin_top(32); 11 | ..set_vexpand(true); 12 | ..set_valign(gtk::Align::Start); 13 | }; 14 | 15 | crate::top_bar(&framed_box); 16 | 17 | (cascade! { 18 | gtk::Box::new(gtk::Orientation::Vertical, 0); 19 | ..set_halign(gtk::Align::Center); 20 | ..add(header); 21 | ..add(&framed_box); 22 | ..add(&extra_notice); 23 | }) 24 | .upcast() 25 | } 26 | 27 | pub fn title() -> String { fl!("gis-panel-title") } 28 | -------------------------------------------------------------------------------- /src/gresource.rs: -------------------------------------------------------------------------------- 1 | pub fn init() -> Result<(), glib::Error> { 2 | const GRESOURCE: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/compiled.gresource")); 3 | 4 | gio::resources_register(&gio::Resource::from_data(&glib::Bytes::from_static(GRESOURCE))?); 5 | 6 | Ok(()) 7 | } -------------------------------------------------------------------------------- /src/gst_video.rs: -------------------------------------------------------------------------------- 1 | use gst::prelude::*; 2 | use gstreamer as gst; 3 | use gtk::prelude::*; 4 | 5 | pub struct Player { 6 | pub player: gst::Element, 7 | pub container: gtk::Widget, 8 | } 9 | 10 | impl Player { 11 | pub fn new(uri: &str) -> Result { 12 | let _ = gst::init(); 13 | 14 | // gtksink creates an OpenGL GTK widget for rendering our video to 15 | let sink = gst::ElementFactory::make("gtkglsink", None)?; 16 | let glsinkbin = gst::ElementFactory::make("glsinkbin", None)?; 17 | glsinkbin.set_property("sink", &sink)?; 18 | 19 | // playbin automatically decodes and renders the video to our gtk sink 20 | let player = gst::ElementFactory::make("playbin", None)?; 21 | player.set_property("uri", &glib::Value::from(uri))?; 22 | player.set_property("video-sink", &glsinkbin)?; 23 | 24 | // Register a signal to listen for events from the player's pipeline bus 25 | if let Some(bus) = player.bus() { 26 | let player = player.downgrade(); 27 | let _ = bus.add_watch_local(move |_, msg| { 28 | let player = match player.upgrade() { 29 | Some(player) => player, 30 | None => return glib::Continue(false), 31 | }; 32 | 33 | match msg.view() { 34 | // Loop video on end of stream 35 | gst::MessageView::Eos(_) => { 36 | let _ = player 37 | .seek_simple(gst::SeekFlags::FLUSH, gst::ClockTime::from_seconds(0)); 38 | } 39 | 40 | gst::MessageView::Error(err) => { 41 | eprintln!( 42 | "Gstreamer error from {:?}: {} ({:?})", 43 | err.src().map(|s| s.path_string()), 44 | err.error(), 45 | err.debug() 46 | ); 47 | } 48 | _ => (), 49 | } 50 | 51 | glib::Continue(true) 52 | }); 53 | } 54 | 55 | // Attach the sink widget, and begin playing the video, on widget realize 56 | let container = (cascade! { 57 | gtk::Box::new(gtk::Orientation::Vertical, 0); 58 | ..connect_realize(glib::clone!(@strong player => move |container| { 59 | let widget = sink.property("widget") 60 | .unwrap() 61 | .get::() 62 | .unwrap(); 63 | widget.set_hexpand(false); 64 | widget.set_halign(gtk::Align::Center); 65 | widget.set_valign(gtk::Align::Center); 66 | widget.set_vexpand(false); 67 | container.add(&widget); 68 | container.show_all(); 69 | player.set_state(gst::State::Playing).unwrap(); 70 | })); 71 | }) 72 | .upcast(); 73 | 74 | Ok(Self { player, container }) 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate fomat_macros; 3 | #[macro_use] 4 | extern crate gtk_extras; 5 | 6 | pub mod gis; 7 | pub mod gresource; 8 | mod gst_video; 9 | pub mod localize; 10 | 11 | use gio::{Settings, SettingsBindFlags, prelude::SettingsExt}; 12 | use glib::clone; 13 | use gtk::prelude::*; 14 | use gtk_extras::settings; 15 | use i18n_embed::DesktopLanguageRequester; 16 | use libhandy::prelude::*; 17 | use pop_theme_switcher::PopThemeSwitcher; 18 | use std::{cell::RefCell, rc::Rc}; 19 | 20 | const PAGE_APPEARANCE: &str = "appearance"; 21 | const PAGE_DOCK: &str = "dock"; 22 | const PAGE_MAIN: &str = "main"; 23 | const PAGE_WORKSPACES: &str = "workspaces"; 24 | 25 | pub fn localize() { 26 | let localizer = crate::localize::localizer(); 27 | let requested_languages = DesktopLanguageRequester::requested_languages(); 28 | 29 | if let Err(error) = localizer.select(&requested_languages) { 30 | eprintln!("Error while loading language for pop-desktop-widget {}", error); 31 | } 32 | } 33 | 34 | pub struct PopDesktopWidget; 35 | 36 | fn header_func(row: >k::ListBoxRow, before: Option<>k::ListBoxRow>) { 37 | if before.is_none() { 38 | row.set_header::(None) 39 | } else if row.header().is_none() { 40 | row.set_header(Some(&cascade! { 41 | gtk::Separator::new(gtk::Orientation::Horizontal); 42 | ..show(); 43 | })); 44 | } 45 | } 46 | 47 | fn combo_row( 48 | container: &C, 49 | title: &str, 50 | active: &str, 51 | values: &[&str], 52 | ) -> gtk::ComboBoxText { 53 | let combo = cascade! { 54 | gtk::ComboBoxText::new(); 55 | ..set_valign(gtk::Align::Center); 56 | }; 57 | for value in values.iter() { 58 | combo.append(Some(value), value); 59 | } 60 | combo.set_active_id(Some(active)); 61 | let row = cascade! { 62 | libhandy::ActionRow::new(); 63 | ..set_title(Some(title)); 64 | ..add(&combo); 65 | }; 66 | container.add(&row); 67 | combo 68 | } 69 | 70 | fn radio_bindings( 71 | settings: &gio::Settings, 72 | key: &'static str, 73 | radios: Vec<(glib::Variant, gtk::RadioButton)>, 74 | custom_radio: Option, 75 | ) { 76 | let update = { 77 | let radios = radios.clone(); 78 | move |event_value: glib::Variant| { 79 | let mut custom = true; 80 | for (value, radio) in radios.iter() { 81 | if &event_value == value { 82 | radio.set_active(true); 83 | custom = false; 84 | break; 85 | } 86 | } 87 | if custom { 88 | if let Some(ref radio) = custom_radio { 89 | radio.set_active(true); 90 | } 91 | } 92 | } 93 | }; 94 | 95 | // Set active radio based on current settings 96 | update(settings.value(key)); 97 | 98 | // Set active radio when settings change 99 | // TODO: if settings is dropped, changed event fails. Would only happen if radios is empty 100 | settings.connect_changed(None, move |settings, event_key| { 101 | if event_key == key { 102 | update(settings.value(key)); 103 | } 104 | }); 105 | 106 | // Set settings when radios are activated 107 | for (value, radio) in radios { 108 | radio.connect_active_notify(clone!(@strong settings => move |radio| { 109 | if radio.is_active() { 110 | let _ = settings.set_value(key, &value); 111 | } 112 | })); 113 | } 114 | } 115 | 116 | fn radio_row( 117 | container: &C, 118 | title: &str, 119 | subtitle: Option<&str>, 120 | ) -> gtk::RadioButton { 121 | let radio = cascade! { 122 | gtk::RadioButton::new(); 123 | ..set_valign(gtk::Align::Center); 124 | }; 125 | let row = cascade! { 126 | libhandy::ActionRow::new(); 127 | ..set_title(Some(title)); 128 | ..set_subtitle(subtitle); 129 | ..add(&radio); 130 | }; 131 | container.add(&row); 132 | radio 133 | } 134 | 135 | fn scaled_image_from_resource(resource: &str, pixels: i32) -> gtk::ImageBuilder { 136 | let pixels = f64::from(pixels); 137 | let mut pixbuf = gdk_pixbuf::Pixbuf::from_resource(resource).expect("missing resource"); 138 | 139 | let mut width = f64::from(pixbuf.width()); 140 | let mut height = f64::from(pixbuf.height()); 141 | let scale = f64::min(pixels / width, pixels / height); 142 | 143 | width = scale * width; 144 | height = scale * height; 145 | 146 | pixbuf = pixbuf 147 | .scale_simple(width.round() as i32, height.round() as i32, gdk_pixbuf::InterpType::Hyper) 148 | .unwrap(); 149 | 150 | gtk::ImageBuilder::new().pixbuf(&pixbuf) 151 | } 152 | 153 | fn spin_row( 154 | container: &C, 155 | title: &str, 156 | min: f64, 157 | max: f64, 158 | step: f64, 159 | ) -> gtk::SpinButton { 160 | let spin = cascade! { 161 | gtk::SpinButton::with_range(min, max, step); 162 | ..set_valign(gtk::Align::Center); 163 | }; 164 | let row = cascade! { 165 | libhandy::ActionRow::new(); 166 | ..set_title(Some(title)); 167 | ..add(&spin); 168 | }; 169 | container.add(&row); 170 | spin 171 | } 172 | 173 | fn switch_row(container: &C, title: &str) -> gtk::Switch { 174 | let switch = cascade! { 175 | gtk::Switch::new(); 176 | ..set_valign(gtk::Align::Center); 177 | }; 178 | let row = cascade! { 179 | libhandy::ActionRow::new(); 180 | ..set_title(Some(title)); 181 | ..add(&switch); 182 | }; 183 | container.add(&row); 184 | switch 185 | } 186 | 187 | fn settings_vbox() -> gtk::Box { 188 | gtk::Box::new(gtk::Orientation::Vertical, 48) 189 | } 190 | 191 | /// Template for a settings page. `id` is used internally for stack switching. 192 | fn settings_page>(stack: >k::Stack, content: &T, id: &str, title: &str) { 193 | let clamp = cascade! { 194 | libhandy::Clamp::new(); 195 | ..set_margin_top(32); 196 | ..set_margin_bottom(32); 197 | ..set_margin_start(12); 198 | ..set_margin_end(12); 199 | ..add(content); 200 | }; 201 | let scrolled_window = cascade! { 202 | gtk::ScrolledWindow::new::(None, None); 203 | ..add(&clamp); 204 | }; 205 | stack.add_titled(&scrolled_window, id, title); 206 | } 207 | 208 | fn settings_list_box(container: &C, title: &str) -> gtk::ListBox { 209 | let vbox = gtk::Box::new(gtk::Orientation::Vertical, 12); 210 | container.add(&vbox); 211 | 212 | let label = cascade! { 213 | gtk::Label::new(Some(&format!("{}", title))); 214 | ..set_use_markup(true); 215 | ..set_xalign(0.0); 216 | }; 217 | vbox.add(&label); 218 | 219 | let list_box = cascade! { 220 | gtk::ListBox::new(); 221 | ..style_context().add_class("frame"); 222 | ..set_header_func(Some(Box::new(header_func))); 223 | ..set_selection_mode(gtk::SelectionMode::None); 224 | }; 225 | 226 | vbox.add(&list_box); 227 | 228 | list_box 229 | } 230 | 231 | fn super_key(container: &C) { 232 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.pop-cosmic") { 233 | let list_box = settings_list_box(container, &fl!("super-key-action")); 234 | 235 | let radio_launcher = radio_row( 236 | &list_box, 237 | &fl!("action-launcher"), 238 | Some(&fl!("action-launcher-description")), 239 | ); 240 | let radio_workspaces = radio_row( 241 | &list_box, 242 | &fl!("action-workspaces"), 243 | Some(&fl!("action-workspaces-description")), 244 | ); 245 | radio_workspaces.join_group(Some(&radio_launcher)); 246 | let radio_applications = radio_row( 247 | &list_box, 248 | &fl!("action-applications"), 249 | Some(&fl!("action-applications-description")), 250 | ); 251 | radio_applications.join_group(Some(&radio_launcher)); 252 | 253 | radio_bindings( 254 | &settings, 255 | "overlay-key-action", 256 | vec![ 257 | ("LAUNCHER".to_variant(), radio_launcher), 258 | ("WORKSPACES".to_variant(), radio_workspaces), 259 | ("APPLICATIONS".to_variant(), radio_applications), 260 | ], 261 | None, 262 | ); 263 | } 264 | } 265 | 266 | fn hot_corner(container: &C) { 267 | // TODO: Support more options in the future 268 | 269 | let list_box = settings_list_box(container, &fl!("hot-corner")); 270 | let settings = gio::Settings::new("org.gnome.desktop.interface"); 271 | 272 | let switch = switch_row(&list_box, &fl!("hot-corner-description")); 273 | settings.bind("enable-hot-corners", &switch, "active").build(); 274 | } 275 | 276 | fn top_bar(container: &C) { 277 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.pop-cosmic") { 278 | let switch = switch_row(container, &fl!("show-workspaces-button")); 279 | settings.bind("show-workspaces-button", &switch, "active").build(); 280 | 281 | let switch = switch_row(container, &fl!("show-applications-button")); 282 | settings.bind("show-applications-button", &switch, "active").build(); 283 | 284 | let center = &fl!("date-combo-center"); 285 | 286 | cascade! { 287 | combo_row(container, &fl!("date-combo"), center, &[ 288 | center, 289 | &fl!("date-combo-left"), 290 | &fl!("date-combo-right") 291 | ]); 292 | ..set_active(Some(settings.enum_("clock-alignment") as u32)); 293 | ..connect_changed(clone!(@strong settings => move |combo| { 294 | settings.set_enum("clock-alignment", combo.active().unwrap_or(0) as i32).unwrap(); 295 | })); 296 | }; 297 | } 298 | } 299 | 300 | pub struct ButtonLayout { 301 | settings: gio::Settings, 302 | key: &'static str, 303 | switch_min: gtk::Switch, 304 | switch_max: gtk::Switch, 305 | } 306 | 307 | impl ButtonLayout { 308 | fn connect(self: Rc) { 309 | self.update(false); 310 | 311 | let self_event = self.clone(); 312 | self.settings.connect_changed(None, move |_, event_key| { 313 | if event_key == self_event.key { 314 | self_event.update(false); 315 | } 316 | }); 317 | 318 | let self_event = self.clone(); 319 | self.switch_min.connect_active_notify(move |_| { 320 | self_event.update(true); 321 | }); 322 | 323 | let self_event = self.clone(); 324 | self.switch_max.connect_active_notify(move |_| { 325 | self_event.update(true); 326 | }); 327 | } 328 | 329 | fn update(&self, write: bool) { 330 | let default_value = "appmenu:close"; 331 | let value = self.settings.string("button-layout"); 332 | if write { 333 | let new_value = match (self.switch_min.is_active(), self.switch_max.is_active()) { 334 | (false, false) => default_value, 335 | (false, true) => "appmenu:maximize,close", 336 | (true, false) => "appmenu:minimize,close", 337 | (true, true) => "appmenu:minimize,maximize,close", 338 | }; 339 | 340 | let _ = self.settings.set_string("button-layout", &new_value); 341 | } else { 342 | self.switch_min.set_active(value.contains("minimize")); 343 | self.switch_max.set_active(value.contains("maximize")); 344 | } 345 | } 346 | } 347 | 348 | fn window_controls(container: &C) { 349 | if let Some(settings) = settings::new_checked("org.gnome.desktop.wm.preferences") { 350 | let list_box = settings_list_box(container, &fl!("window-controls")); 351 | 352 | let switch_min = switch_row(&list_box, &fl!("show-minimize-button")); 353 | let switch_max = switch_row(&list_box, &fl!("show-maximize-button")); 354 | 355 | let button_layout = 356 | Rc::new(ButtonLayout { settings, key: "button-layout", switch_min, switch_max }); 357 | 358 | button_layout.connect(); 359 | } 360 | } 361 | 362 | pub fn main_page() -> gtk::Box { 363 | let page = settings_vbox(); 364 | 365 | super_key(&page); 366 | hot_corner(&page); 367 | top_bar(&settings_list_box(&page, &fl!("top-bar"))); 368 | window_controls(&page); 369 | 370 | page 371 | } 372 | 373 | pub fn appearance_page() -> gtk::Box { 374 | let page = settings_vbox(); 375 | 376 | let theme_switcher = PopThemeSwitcher::new(); 377 | page.add(&*theme_switcher); 378 | 379 | page 380 | } 381 | 382 | fn dock_options(container: &C) { 383 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 384 | let list_box = settings_list_box(container, &fl!("dock-options")); 385 | 386 | let switch = switch_row(&list_box, &fl!("dock-extend")); 387 | settings.bind("extend-height", &switch, "active").build(); 388 | 389 | let shell_settings = gio::Settings::new("org.gnome.shell"); 390 | let launcher_switch = switch_row(&list_box, &fl!("dock-launcher")); 391 | let workspaces_switch = switch_row(&list_box, &fl!("dock-workspaces")); 392 | let applications_switch = switch_row(&list_box, &fl!("dock-applications")); 393 | let update_switches = clone!(@strong shell_settings, @strong launcher_switch, @strong workspaces_switch, @strong applications_switch => move || { 394 | let mut launcher_active = false; 395 | let mut workspaces_active = false; 396 | let mut applications_active = false; 397 | for favorite in shell_settings.strv("favorite-apps") { 398 | match favorite.as_str() { 399 | "pop-cosmic-launcher.desktop" => launcher_active = true, 400 | "pop-cosmic-workspaces.desktop" => workspaces_active = true, 401 | "pop-cosmic-applications.desktop" => applications_active = true, 402 | _ => {} 403 | } 404 | } 405 | launcher_switch.set_active(launcher_active); 406 | workspaces_switch.set_active(workspaces_active); 407 | applications_switch.set_active(applications_active); 408 | }); 409 | update_switches(); 410 | let switch_handlers = 411 | Rc::new(RefCell::new(Vec::<(gtk::Switch, glib::SignalHandlerId)>::new())); 412 | let handler_id = Rc::new( 413 | shell_settings 414 | .connect_local( 415 | "changed::favorite-apps", 416 | false, 417 | clone!(@strong switch_handlers => move |_| { 418 | let ids = switch_handlers.borrow(); 419 | for (switch, id) in ids.iter() { 420 | switch.block_signal(id); 421 | } 422 | update_switches(); 423 | for (switch, id) in ids.iter() { 424 | switch.unblock_signal(id); 425 | } 426 | None 427 | }), 428 | ) 429 | .unwrap(), 430 | ); 431 | let connect_switch = move |switch: >k::Switch, desktop, pos: usize| { 432 | let shell_settings = shell_settings.clone(); 433 | let handler_id = handler_id.clone(); 434 | let id = switch.connect_active_notify(move |switch| { 435 | let active = switch.is_active(); 436 | let favorites = shell_settings.strv("favorite-apps"); 437 | let mut favorites = favorites.iter().map(|x| x.as_str()).collect::>(); 438 | let index = favorites.iter().position(|x| *x == desktop); 439 | if !active { 440 | if let Some(index) = index { 441 | favorites.remove(index); 442 | } 443 | } else if index.is_none() { 444 | // Insert at `pos`, or before first non-cosmic favorite 445 | let pos = pos.min( 446 | favorites 447 | .iter() 448 | .position(|x| { 449 | ![ 450 | "pop-cosmic-launcher.desktop", 451 | "pop-cosmic-workspaces.desktop", 452 | "pop-cosmic-applications.desktop", 453 | ] 454 | .contains(x) 455 | }) 456 | .unwrap_or(0), 457 | ); 458 | favorites.insert(pos, desktop); 459 | } 460 | shell_settings.block_signal(&handler_id); 461 | shell_settings.set_strv("favorite-apps", &favorites).unwrap(); 462 | shell_settings.unblock_signal(&handler_id); 463 | }); 464 | switch_handlers.borrow_mut().push((switch.clone(), id)); 465 | }; 466 | connect_switch(&launcher_switch, "pop-cosmic-launcher.desktop", 0); 467 | connect_switch(&workspaces_switch, "pop-cosmic-workspaces.desktop", 1); 468 | connect_switch(&applications_switch, "pop-cosmic-applications.desktop", 2); 469 | 470 | let switch = switch_row(&list_box, &fl!("dock-mounted-drives")); 471 | settings.bind("show-mounts", &switch, "active").build(); 472 | 473 | fn map_click_action_selection(selection: i32) -> &'static str { 474 | return match selection { 475 | 0 => "cycle-windows", 476 | 1 => "minimize", 477 | 2 => "minimize-or-previews", 478 | _ => "cycle-windows" 479 | }; 480 | } 481 | fn map_click_action_setting(setting: &str) -> u32 { 482 | return match setting { 483 | "cycle-windows" => 0, 484 | "minimize" => 1, 485 | "minimize-or-previews" => 2, 486 | _ => 0 487 | } 488 | } 489 | let cycle_windows = &fl!("click-action-cycle"); 490 | let minimize = &fl!("click-action-minimize"); 491 | let minimize_or_previews = &fl!("click-action-minimize-or-previews"); 492 | cascade! { 493 | combo_row(&list_box, &fl!("dock-click-action"), cycle_windows, &[ 494 | cycle_windows, 495 | minimize, 496 | minimize_or_previews 497 | ]); 498 | ..set_active(Some(map_click_action_setting(&settings.string("click-action")))); 499 | ..connect_changed(clone!(@strong settings => move |combo| { 500 | let click_action_selection = combo.active().unwrap_or(0) as i32; 501 | settings.set_string("click-action", map_click_action_selection(click_action_selection)).unwrap(); 502 | })); 503 | }; 504 | } 505 | } 506 | 507 | fn dock_selector() -> gtk::Box { 508 | let container = cascade! { 509 | gtk::Box::new(gtk::Orientation::Horizontal, 12); 510 | ..set_vexpand(true); 511 | ..set_valign(gtk::Align::Center); 512 | ..set_homogeneous(true); 513 | }; 514 | 515 | if let Some(settings) = 516 | gtk_extras::settings::new_checked("org.gnome.shell.extensions.dash-to-dock") 517 | { 518 | let radio_no_dock = gtk::RadioButton::with_label(&fl!("dock-disable")); 519 | settings.bind("manualhide", &radio_no_dock, "active").build(); 520 | 521 | let radio_extend = 522 | gtk::RadioButton::with_label_from_widget(&radio_no_dock, &fl!("dock-extends")); 523 | settings.bind("extend-height", &radio_extend, "active").build(); 524 | 525 | let radio_no_extend = 526 | gtk::RadioButton::with_label_from_widget(&radio_extend, &fl!("dock-dynamic")); 527 | 528 | (if settings.boolean("manualhide") { 529 | &radio_no_dock 530 | } else if settings.boolean("extend-height") { 531 | &radio_extend 532 | } else { 533 | &radio_no_extend 534 | }) 535 | .set_active(true); 536 | 537 | fn create_option(button: >k::RadioButton, image_resource: &str) -> gtk::Box { 538 | let image = gtk::ImageBuilder::new() 539 | .resource(image_resource) 540 | .halign(gtk::Align::Start) 541 | .margin_start(4) 542 | .build(); 543 | 544 | cascade! { 545 | gtk::Box::new(gtk::Orientation::Vertical, 16); 546 | ..add(button); 547 | ..add(&image); 548 | } 549 | } 550 | 551 | container.add(&create_option(&radio_no_dock, "/org/pop/desktop-widget/no-dock.png")); 552 | container.add(&create_option(&radio_extend, "/org/pop/desktop-widget/extend.png")); 553 | container.add(&create_option(&radio_no_extend, "/org/pop/desktop-widget/no-extend.png")); 554 | } 555 | 556 | container 557 | } 558 | 559 | fn dock_visibility(container: &C) { 560 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 561 | let list_box = settings_list_box(container, &fl!("dock-visibility")); 562 | 563 | let radio_visible = radio_row(&list_box, &fl!("dock-always-visible"), None); 564 | let radio_autohide = radio_row( 565 | &list_box, 566 | &fl!("dock-always-hide"), 567 | Some(&fl!("dock-always-hide-description")), 568 | ); 569 | radio_autohide.join_group(Some(&radio_visible)); 570 | let radio_intellihide = radio_row( 571 | &list_box, 572 | &fl!("dock-intelligently-hide"), 573 | Some(&fl!("dock-intelligently-hide-description")), 574 | ); 575 | radio_intellihide.join_group(Some(&radio_visible)); 576 | 577 | let update_radios = clone!(@strong radio_visible, @strong radio_autohide, @strong radio_intellihide => move |settings: &gio::Settings| { 578 | let radio = if settings.boolean("dock-fixed") { 579 | &radio_visible 580 | } else if settings.boolean("intellihide") { 581 | &radio_intellihide 582 | } else { 583 | &radio_autohide 584 | }; 585 | if !radio.is_active() { 586 | radio.set_active(true); 587 | } 588 | }); 589 | update_radios(&settings); 590 | // shell_settings.block_signal(&handler_id); 591 | let handler_id = Rc::new(settings.connect_changed(None, move |settings, key| { 592 | if key == "dock-fixed" || key == "intellihide" { 593 | update_radios(settings); 594 | } 595 | })); 596 | radio_visible.connect_active_notify( 597 | clone!(@strong settings, @strong handler_id => move |radio| { 598 | if !radio.is_active() { 599 | return; 600 | } 601 | settings.block_signal(&handler_id); 602 | settings.set_boolean("dock-fixed", true).unwrap(); 603 | settings.set_boolean("intellihide", false).unwrap(); 604 | settings.unblock_signal(&handler_id); 605 | }), 606 | ); 607 | radio_intellihide.connect_active_notify( 608 | clone!(@strong settings, @strong handler_id => move |radio| { 609 | if !radio.is_active() { 610 | return; 611 | } 612 | settings.block_signal(&handler_id); 613 | settings.set_boolean("dock-fixed", false).unwrap(); 614 | settings.set_boolean("intellihide", true).unwrap(); 615 | settings.unblock_signal(&handler_id); 616 | }), 617 | ); 618 | radio_autohide.connect_active_notify(clone!(@strong settings => move |radio| { 619 | if !radio.is_active() { 620 | return; 621 | } 622 | settings.block_signal(&handler_id); 623 | settings.set_boolean("dock-fixed", false).unwrap(); 624 | settings.set_boolean("intellihide", false).unwrap(); 625 | settings.unblock_signal(&handler_id); 626 | })); 627 | 628 | // TODO: Use `bind_with_mapping` when gtk-rs version with that is released 629 | let primary = fl!("display-primary"); 630 | let all = fl!("display-all"); 631 | let combo = combo_row(&list_box, &fl!("dock-show-on-display"), &primary, &[&primary, &all]); 632 | let id = if settings.boolean("multi-monitor") { &all } else { &primary }; 633 | combo.set_active_id(Some(id)); 634 | combo.connect_changed(clone!(@strong settings => move |combo| { 635 | let all_displays = combo.active_id().map_or(false, |x| &x == &all ); 636 | settings.set_boolean("multi-monitor", all_displays).unwrap(); 637 | })); 638 | } 639 | } 640 | 641 | fn dock_size(container: &C) { 642 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 643 | let list_box = settings_list_box(container, &fl!("dock-size")); 644 | 645 | let mut description: String = [&fl!("size-small"), " (36px)"].concat(); 646 | let radio_small = radio_row(&list_box, &description, None); 647 | 648 | description = [&fl!("size-medium"), " (48px)"].concat(); 649 | let radio_medium = radio_row(&list_box, &description, None); 650 | radio_medium.join_group(Some(&radio_small)); 651 | 652 | description = [&fl!("size-large"), " (60px)"].concat(); 653 | let radio_large = radio_row(&list_box, &description, None); 654 | radio_large.join_group(Some(&radio_small)); 655 | 656 | let radio_custom = gtk::RadioButton::new(); 657 | radio_custom.set_no_show_all(true); 658 | radio_custom.join_group(Some(&radio_small)); 659 | 660 | let spin = spin_row(&list_box, &fl!("size-custom"), 8.0, 128.0, 1.0); 661 | settings.bind("dash-max-icon-size", &spin, "value").build(); 662 | 663 | radio_bindings( 664 | &settings, 665 | "dash-max-icon-size", 666 | vec![ 667 | (36i32.to_variant(), radio_small), 668 | (48i32.to_variant(), radio_medium), 669 | (60i32.to_variant(), radio_large), 670 | ], 671 | Some(radio_custom), 672 | ); 673 | } 674 | } 675 | 676 | fn dock_position(container: &C) { 677 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 678 | let list_box = settings_list_box(container, &fl!("dock-position")); 679 | 680 | let radio_bottom = radio_row(&list_box, &fl!("position-bottom"), None); 681 | let radio_left = radio_row(&list_box, &fl!("position-left"), None); 682 | radio_left.join_group(Some(&radio_bottom)); 683 | let radio_right = radio_row(&list_box, &fl!("position-right"), None); 684 | radio_right.join_group(Some(&radio_bottom)); 685 | 686 | radio_bindings( 687 | &settings, 688 | "dock-position", 689 | vec![ 690 | ("BOTTOM".to_variant(), radio_bottom), 691 | ("LEFT".to_variant(), radio_left), 692 | ("RIGHT".to_variant(), radio_right), 693 | ], 694 | None, 695 | ); 696 | } 697 | } 698 | 699 | fn dock_alignment(container: &C) { 700 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 701 | let list_box = settings_list_box(container, &fl!("dock-alignment")); 702 | 703 | let radio_center = radio_row(&list_box, &fl!("alignment-center"), None); 704 | let radio_start = radio_row(&list_box, &fl!("alignment-start"), None); 705 | radio_start.join_group(Some(&radio_center)); 706 | let radio_end = radio_row(&list_box, &fl!("alignment-end"), None); 707 | radio_end.join_group(Some(&radio_center)); 708 | 709 | radio_bindings( 710 | &settings, 711 | "dock-alignment", 712 | vec![ 713 | ("CENTER".to_variant(), radio_center), 714 | ("START".to_variant(), radio_start), 715 | ("END".to_variant(), radio_end), 716 | ], 717 | None, 718 | ); 719 | } 720 | } 721 | 722 | pub fn dock_page() -> gtk::Box { 723 | let page = settings_vbox(); 724 | 725 | let list_box = framed_list_box(); 726 | page.add(&list_box); 727 | 728 | let switch = switch_row(&list_box, &fl!("dock-enable")); 729 | 730 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.dash-to-dock") { 731 | settings.bind( 732 | "manualhide", 733 | &switch, 734 | "active", 735 | ).flags( 736 | SettingsBindFlags::INVERT_BOOLEAN, 737 | ).build(); 738 | } 739 | 740 | dock_options(&page); 741 | dock_visibility(&page); 742 | dock_size(&page); 743 | dock_position(&page); 744 | dock_alignment(&page); 745 | 746 | page.foreach(|child| { 747 | if child != list_box.upcast_ref::() { 748 | switch.bind_property("active", child, "sensitive").build(); 749 | } 750 | }); 751 | 752 | page 753 | } 754 | 755 | fn framed_list_box() -> gtk::ListBox { 756 | cascade! { 757 | gtk::ListBox::new(); 758 | ..style_context().add_class("frame"); 759 | ..set_header_func(Some(Box::new(header_func))); 760 | ..set_selection_mode(gtk::SelectionMode::None); 761 | } 762 | } 763 | 764 | fn workspaces_multi_monitor(container: &C) { 765 | let list_box = settings_list_box(container, &fl!("multi-monitor-behavior")); 766 | 767 | let settings = Settings::new("org.gnome.mutter"); 768 | 769 | let radio_span = radio_row(&list_box, &fl!("workspaces-span-displays"), None); 770 | let radio_primary = radio_row(&list_box, &fl!("workspaces-primary"), None); 771 | radio_primary.join_group(Some(&radio_span)); 772 | 773 | radio_bindings( 774 | &settings, 775 | "workspaces-only-on-primary", 776 | vec![(false.to_variant(), radio_span), (true.to_variant(), radio_primary)], 777 | None, 778 | ); 779 | } 780 | 781 | fn workspaces_position(container: &C) { 782 | if let Some(settings) = settings::new_checked("org.gnome.shell.extensions.pop-cosmic") { 783 | if !settings 784 | .settings_schema() 785 | .map_or(false, |x| x.has_key("workspace-picker-left")) 786 | { 787 | return; 788 | } 789 | 790 | let list_box = settings_list_box(container, &fl!("workspace-picker-position")); 791 | 792 | let radio_left = radio_row(&list_box, &fl!("position-left"), None); 793 | let radio_right = radio_row(&list_box, &fl!("position-right"), None); 794 | radio_right.join_group(Some(&radio_left)); 795 | radio_bindings( 796 | &settings, 797 | "workspace-picker-left", 798 | vec![ 799 | (false.to_variant(), radio_right), 800 | (true.to_variant(), radio_left), 801 | ], 802 | None, 803 | ); 804 | 805 | if let Some(mm_settings) = 806 | settings::new_checked("org.gnome.shell.extensions.multi-monitors-add-on") 807 | { 808 | if mm_settings 809 | .settings_schema() 810 | .map_or(false, |x| x.has_key("thumbnails-on-left-side")) 811 | { 812 | let settings_clone = settings.clone(); 813 | settings 814 | .connect_local("changed::workspace-picker-left", false, move |_| { 815 | mm_settings 816 | .set_boolean( 817 | "thumbnails-on-left-side", 818 | settings_clone.boolean("workspace-picker-left"), 819 | ) 820 | .unwrap(); 821 | None 822 | }) 823 | .unwrap(); 824 | } 825 | } 826 | } 827 | } 828 | 829 | pub fn workspaces_page() -> gtk::Box { 830 | let page = settings_vbox(); 831 | 832 | let list_box = cascade! { 833 | gtk::ListBox::new(); 834 | ..style_context().add_class("frame"); 835 | ..set_header_func(Some(Box::new(header_func))); 836 | ..set_selection_mode(gtk::SelectionMode::None); 837 | }; 838 | page.add(&list_box); 839 | 840 | if let Some(settings) = settings::new_checked("org.gnome.mutter") { 841 | let radio_dynamic = radio_row( 842 | &list_box, 843 | &fl!("workspaces-dynamic"), 844 | Some(&fl!("workspaces-dynamic-description")), 845 | ); 846 | 847 | let radio_fixed = radio_row( 848 | &list_box, 849 | &fl!("workspaces-fixed"), 850 | Some(&fl!("workspaces-fixed-description")), 851 | ); 852 | 853 | radio_fixed.join_group(Some(&radio_dynamic)); 854 | settings.bind("dynamic-workspaces", &radio_dynamic, "active").build(); 855 | settings.bind( 856 | "dynamic-workspaces", 857 | &radio_fixed, 858 | "active", 859 | ).flags( 860 | SettingsBindFlags::DEFAULT | SettingsBindFlags::INVERT_BOOLEAN, 861 | ).build(); 862 | 863 | if let Some(settings) = settings::new_checked("org.gnome.desktop.wm.preferences") { 864 | let spin_number = spin_row(&list_box, &fl!("workspaces-amount"), 1.0, 36.0, 1.0); 865 | settings.bind("num-workspaces", &spin_number, "value").build(); 866 | radio_fixed 867 | .bind_property("active", &spin_number, "sensitive") 868 | .flags(glib::BindingFlags::SYNC_CREATE) 869 | .build(); 870 | } 871 | } 872 | 873 | workspaces_multi_monitor(&page); 874 | workspaces_position(&page); 875 | 876 | page 877 | } 878 | 879 | impl PopDesktopWidget { 880 | pub fn new(stack: >k::Stack) -> Self { 881 | let mut children = Vec::new(); 882 | stack.foreach(|w| { 883 | let name = stack.child_name(w).unwrap(); 884 | let title = stack.child_title(w).unwrap(); 885 | stack.remove(w); 886 | children.push((w.clone(), name, title)); 887 | }); 888 | 889 | settings_page(stack, &main_page(), PAGE_MAIN, &fl!("page-main")); 890 | for (w, name, title) in children { 891 | stack.add_titled(&w, &name, &title); 892 | } 893 | 894 | settings_page(stack, &appearance_page(), PAGE_APPEARANCE, &fl!("page-appearance")); 895 | settings_page(stack, &dock_page(), PAGE_DOCK, &fl!("page-dock")); 896 | settings_page(stack, &workspaces_page(), PAGE_WORKSPACES, &fl!("page-workspaces")); 897 | 898 | stack.show_all(); 899 | 900 | if let Ok(page) = std::env::var("POP_DESKTOP_PAGE") { 901 | stack.set_visible_child_name(&page); 902 | } 903 | 904 | Self 905 | } 906 | } 907 | -------------------------------------------------------------------------------- /src/localize.rs: -------------------------------------------------------------------------------- 1 | use i18n_embed::{ 2 | fluent::{fluent_language_loader, FluentLanguageLoader}, 3 | DefaultLocalizer, LanguageLoader, Localizer, 4 | }; 5 | use once_cell::sync::Lazy; 6 | use rust_embed::RustEmbed; 7 | 8 | #[derive(RustEmbed)] 9 | #[folder = "i18n/"] 10 | struct Localizations; 11 | 12 | pub static LANGUAGE_LOADER: Lazy = Lazy::new(|| { 13 | let loader: FluentLanguageLoader = fluent_language_loader!(); 14 | 15 | loader.load_fallback_language(&Localizations).expect("Error while loading fallback language"); 16 | 17 | loader 18 | }); 19 | 20 | #[macro_export] 21 | macro_rules! fl { 22 | ($message_id:literal) => {{ 23 | i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id) 24 | }}; 25 | 26 | ($message_id:literal, $($args:expr),*) => {{ 27 | i18n_embed_fl::fl!($crate::localize::LANGUAGE_LOADER, $message_id, $($args), *) 28 | }}; 29 | } 30 | 31 | // Get the `Localizer` to be used for localizing this library. 32 | pub fn localizer() -> Box { 33 | Box::new(DefaultLocalizer::new(&*LANGUAGE_LOADER, &Localizations)) 34 | } 35 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate gtk_extras; 3 | 4 | use gio::prelude::*; 5 | use gtk::prelude::*; 6 | use pop_desktop_widget::PopDesktopWidget; 7 | 8 | pub const APP_ID: &str = "com.system76.PopDesktopWidget"; 9 | 10 | fn monitors() -> Result<(), Box> { 11 | let display_manager = gdk::DisplayManager::get(); 12 | if let Some(display) = display_manager.default_display() { 13 | for i in 0..display.n_monitors() { 14 | if let Some(monitor) = display.monitor(i) { 15 | let rect = monitor.geometry(); 16 | println!("{}: {}, {}, {}, {}", i, rect.x, rect.y, rect.width, rect.height); 17 | if let Some(manufacturer) = monitor.manufacturer() { 18 | println!(" Manufacturer: {}", manufacturer); 19 | } 20 | if let Some(model) = monitor.model() { 21 | println!(" Model: {}", model); 22 | } 23 | } else { 24 | eprintln!("Failed to get monitor {}", i); 25 | } 26 | } 27 | } else { 28 | eprintln!("Failed to get default display"); 29 | } 30 | 31 | Ok(()) 32 | } 33 | 34 | fn main() { 35 | pop_desktop_widget::localize(); 36 | glib::set_program_name(APP_ID.into()); 37 | gtk::init().expect("failed to init GTK"); 38 | 39 | if let Err(err) = monitors() { 40 | eprintln!("monitors error: {}", err); 41 | } 42 | 43 | let application = gtk::ApplicationBuilder::new().application_id(APP_ID).build(); 44 | 45 | application.connect_activate(|app| { 46 | if let Some(window) = app.window_by_id(0) { 47 | window.present(); 48 | } 49 | }); 50 | 51 | application.connect_startup(|app| { 52 | let stack = gtk::Stack::new(); 53 | let stack_switcher = cascade! { 54 | gtk::StackSwitcher::new(); 55 | ..set_stack(Some(&stack)); 56 | }; 57 | 58 | PopDesktopWidget::new(&stack); 59 | 60 | let headerbar = gtk::HeaderBarBuilder::new() 61 | .custom_title(&stack_switcher) 62 | .show_close_button(true) 63 | .build(); 64 | 65 | let _window = cascade! { 66 | gtk::ApplicationWindowBuilder::new() 67 | .application(app) 68 | .icon_name("pop-desktop-widget") 69 | .window_position(gtk::WindowPosition::Center) 70 | .default_height(600) 71 | .default_width(800) 72 | .build(); 73 | ..set_titlebar(Some(&headerbar)); 74 | ..add(&stack); 75 | ..show_all(); 76 | ..connect_delete_event(move |window, _| { 77 | window.close(); 78 | 79 | let _widget = &stack; 80 | 81 | Inhibit(false) 82 | }); 83 | }; 84 | }); 85 | 86 | application.run(); 87 | } 88 | -------------------------------------------------------------------------------- /tools/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tools" 3 | version = "0.1.0" 4 | authors = ["Michael Aaron Murphy "] 5 | edition = "2018" 6 | description = "build tools used by this project" 7 | 8 | [[bin]] 9 | name = "pkgconfig" 10 | path = "src/pkgconfig.rs" 11 | -------------------------------------------------------------------------------- /tools/src/pkgconfig.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | env, 3 | fs::{self, File}, 4 | io::{self, Write}, 5 | }; 6 | 7 | const PKGCONFIG: &str = r#"Name: ${name} 8 | Description: {description} 9 | Version: {version} 10 | Cflags: -I${includedir} 11 | Libs: -L${libdir} -l${name}"#; 12 | 13 | fn main() -> io::Result<()> { 14 | let mut args = env::args(); 15 | 16 | let app = args.nth(1).expect("requires APP argument"); 17 | let libdir = args.next().expect("requires libdir argument"); 18 | let includedir = args.next().expect("requires includedir argument"); 19 | 20 | fs::create_dir_all("target/")?; 21 | 22 | let target = ["target/", &app, ".pc"].concat(); 23 | let mut file = File::create(&target).expect("unable to create pkgconfig file"); 24 | 25 | let cargo = fs::read_to_string("Cargo.toml").expect("no parent Cargo.toml"); 26 | 27 | let version = cargo 28 | .lines() 29 | .find(|line| line.starts_with("version =")) 30 | .expect("no version found in parent Cargo.toml") 31 | .split_whitespace() 32 | .nth(2) 33 | .expect("no version string on version key in Cargo.toml"); 34 | 35 | let config = PKGCONFIG.replace("{version}", version); 36 | 37 | writeln!(&mut file, "libdir={}\nincludedir={}\nname={}\n{}", libdir, includedir, app, config) 38 | } 39 | --------------------------------------------------------------------------------