Compare commits
	
		
			67 Commits
		
	
	
		
			issue154
			...
			theme-sear
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 9ab35786f6 | ||
|   | 5fe349d5ba | ||
|   | 1f03599d1c | ||
|   | a24999b7a3 | ||
|   | 8237a1f6e0 | ||
|   | f9dec475a1 | ||
|   | 68b01a8f56 | ||
|   | f56ba0877a | ||
|   | 5ac6201d91 | ||
|   | a21a22fdb5 | ||
|   | a0fa50ac31 | ||
|   | b1dd746443 | ||
|   | c15e163eb1 | ||
|   | 7a3927c168 | ||
|   | 6eed4e31d7 | ||
|   | f0557ea05c | ||
|   | 44894262f4 | ||
|   | b03bcc85aa | ||
|   | 70057c6a55 | ||
|   | 86bd5b281d | ||
|   | ad3e9ab205 | ||
|   | 02bbf409ea | ||
|   | f56e4e177e | ||
|   | fc26559f2c | ||
|   | fdaddbd1e0 | ||
|   | 04f61567ba | ||
|   | a0785cdbc1 | ||
|   | 94101e8bb8 | ||
|   | f13dbf2f26 | ||
|   | bae6f06e4e | ||
|   | d8b9e23502 | ||
|   | 7d59eaa67e | ||
|   | c0a453f64f | ||
|   | 5336175736 | ||
|   | 2997e4950b | ||
|   | a49fb90d86 | ||
|   | ffc0eb1de2 | ||
|   | 853c81eb62 | ||
|   | 594cc7cbef | ||
|   | 0932324d39 | ||
|   | 2d6cf236c4 | ||
|   | 642107a28f | ||
|   | 581b38ecf4 | ||
|   | fbc03cc262 | ||
|   | a6ff195893 | ||
|   | f411724064 | ||
|   | 39f43a4cd4 | ||
|   | c82cb918ae | ||
|   | 38cdaa6c20 | ||
|   | 0327069e83 | ||
|   | 7601b029c8 | ||
|   | fb509dfc25 | ||
|   | 874a91968f | ||
|   | 0963ccddba | ||
|   | c4e0f6df08 | ||
|   | 58aafe9520 | ||
|   | a46df7f8ec | ||
|   | 1dd16618d1 | ||
|   | a4190f83ac | ||
|   | a8e17f73ec | ||
|   | 86a741c1ee | ||
|   | 5cc6fef689 | ||
|   | 522a5fe480 | ||
|   | b1239b1257 | ||
|   | 58063d9ee1 | ||
|   | d7aba2dece | ||
|   | 35fced27df | 
| @@ -1,19 +1,16 @@ | ||||
| Coding guide | ||||
| ============ | ||||
| # Coding guide | ||||
| 
 | ||||
| Our goal is to have all JavaScript code in GNOME follow a consistent style. In | ||||
| a dynamic language like JavaScript, it is essential to be rigorous about style | ||||
| (and unit tests), or you rapidly end up with a spaghetti-code mess. | ||||
| 
 | ||||
| A quick note | ||||
| ------------ | ||||
| ## A quick note | ||||
| 
 | ||||
| Life isn't fun if you can't break the rules. If a rule seems unnecessarily | ||||
| restrictive while you're coding, ignore it, and let the patch reviewer decide | ||||
| what to do. | ||||
| 
 | ||||
| Indentation and whitespace | ||||
| -------------------------- | ||||
| ## Indentation and whitespace | ||||
| 
 | ||||
| Use four-space indents. Braces are on the same line as their associated | ||||
| statements.  You should only omit braces if *both* sides of the statement are | ||||
| @@ -22,7 +19,7 @@ on one line. | ||||
| * One space after the `function` keyword.  No space between the function name | ||||
| * in a declaration or a call.  One space before the parens in the `if` | ||||
| * statements, or `while`, or `for` loops. | ||||
| 
 | ||||
| ```javascript | ||||
|     function foo(a, b) { | ||||
|         let bar; | ||||
| 
 | ||||
| @@ -39,22 +36,20 @@ on one line. | ||||
|             print(20); | ||||
|         } | ||||
|     } | ||||
| ``` | ||||
| 
 | ||||
| Semicolons | ||||
| ---------- | ||||
| ## Semicolons | ||||
| 
 | ||||
| JavaScript allows omitting semicolons at the end of lines, but don't. Always | ||||
| end statements with a semicolon. | ||||
| 
 | ||||
| js2-mode | ||||
| -------- | ||||
| ## js2-mode | ||||
| 
 | ||||
| If using Emacs, do not use js2-mode. It is outdated and hasn't worked for a | ||||
| while. emacs now has a built-in JavaScript mode, js-mode, based on | ||||
| espresso-mode. It is the de facto emacs mode for JavaScript. | ||||
| 
 | ||||
| File naming and creation | ||||
| ------------------------ | ||||
| ## File naming and creation | ||||
| 
 | ||||
| For JavaScript files, use lowerCamelCase-style names, with a `.js` extension. | ||||
| 
 | ||||
| @@ -67,14 +62,13 @@ library name followed by a dash, e.g. `shell-app-system.c`. Create a | ||||
| `-private.h` header when you want to share code internally in the | ||||
| library. These headers are not installed, distributed or introspected. | ||||
| 
 | ||||
| Imports | ||||
| ------- | ||||
| ## Imports | ||||
| 
 | ||||
| Use UpperCamelCase when importing modules to distinguish them from ordinary | ||||
| variables, e.g. | ||||
| 
 | ||||
| ```javascript | ||||
|     const GLib = imports.gi.GLib; | ||||
| 
 | ||||
| ``` | ||||
| Imports should be categorized into one of two places. The top-most import block | ||||
| should contain only "environment imports". These are either modules from | ||||
| gobject-introspection or modules added by gjs itself. | ||||
| @@ -85,7 +79,7 @@ e.g. `imports.ui.popupMenu`. | ||||
| 
 | ||||
| Each import block should be sorted alphabetically. Don't import modules you | ||||
| don't use. | ||||
| 
 | ||||
| ```javascript | ||||
|     const GLib = imports.gi.GLib; | ||||
|     const Gio = imports.gi.Gio; | ||||
|     const Lang = imports.lang; | ||||
| @@ -95,23 +89,22 @@ don't use. | ||||
|     const Params = imports.misc.params; | ||||
|     const Tweener = imports.ui.tweener; | ||||
|     const Util = imports.misc.util; | ||||
| 
 | ||||
| ``` | ||||
| The alphabetical ordering should be done independently of the location of the | ||||
| location. Never reference `imports` in actual code. | ||||
| 
 | ||||
| Constants | ||||
| --------- | ||||
| ## Constants | ||||
| 
 | ||||
| We use CONSTANTS_CASE to define constants. All constants should be directly | ||||
| under the imports: | ||||
| 
 | ||||
| ```javascript | ||||
|     const MY_DBUS_INTERFACE = 'org.my.Interface'; | ||||
| ``` | ||||
| 
 | ||||
| Variable declaration | ||||
| -------------------- | ||||
| ## Variable declaration | ||||
| 
 | ||||
| Always use either `const` or `let` when defining a variable. | ||||
| 
 | ||||
| ```javascript | ||||
|     // Iterating over an array | ||||
|     for (let i = 0; i < arr.length; ++i) { | ||||
|         let item = arr[i]; | ||||
| @@ -121,17 +114,17 @@ Always use either `const` or `let` when defining a variable. | ||||
|     for (let prop in someobj) { | ||||
|         ... | ||||
|     } | ||||
| ``` | ||||
| 
 | ||||
| If you use "var" then the variable is added to function scope, not block scope. | ||||
| See [What's new in JavaScript 1.7](https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Block_scope_with_let_%28Merge_into_let_Statement%29) | ||||
| 
 | ||||
| Classes | ||||
| ------- | ||||
| ## Classes | ||||
| 
 | ||||
| There are many approaches to classes in JavaScript. We use our own class framework | ||||
| (sigh), which is built in gjs. The advantage is that it supports inheriting from | ||||
| GObjects, although this feature isn't used very often in the Shell itself. | ||||
| 
 | ||||
| ```javascript | ||||
|     var IconLabelMenuItem = new Lang.Class({ | ||||
|         Name: 'IconLabelMenuItem', | ||||
|         Extends: PopupMenu.PopupMenuBaseItem, | ||||
| @@ -146,6 +139,7 @@ GObjects, although this feature isn't used very often in the Shell itself. | ||||
|             log("menu opened!"); | ||||
|         } | ||||
|     }); | ||||
| ``` | ||||
| 
 | ||||
| * 'Name' is required. 'Extends' is optional. If you leave it out, you will | ||||
|   automatically inherit from Object. | ||||
| @@ -162,13 +156,12 @@ GObjects, although this feature isn't used very often in the Shell itself. | ||||
|   still a giant function call, even though it may resemble a more | ||||
|   conventional syntax. | ||||
| 
 | ||||
| GObject Introspection | ||||
| --------------------- | ||||
| ## GObject Introspection | ||||
| 
 | ||||
| GObject Introspection is a powerful feature that allows us to have native | ||||
| bindings for almost any library built around GObject. If a library requires | ||||
| you to inherit from a type to use it, you can do so: | ||||
| 
 | ||||
| ```javascript | ||||
|     var MyClutterActor = new Lang.Class({ | ||||
|         Name: 'MyClutterActor', | ||||
|         Extends: Clutter.Actor, | ||||
| @@ -188,9 +181,9 @@ you to inherit from a type to use it, you can do so: | ||||
|                             alloc.x2, alloc.y2); | ||||
|         } | ||||
|     }); | ||||
| ``` | ||||
| 
 | ||||
| Translatable strings, `environment.js` | ||||
| -------------------------------------- | ||||
| ## Translatable strings, `environment.js` | ||||
| 
 | ||||
| We use gettext to translate the GNOME Shell into all the languages that GNOME | ||||
| supports. The `gettext` function is aliased globally as `_`, you do not need to | ||||
| @@ -204,8 +197,7 @@ and "double quotes" for strings that the user may see. This allows us to | ||||
| quickly find untranslated or mistranslated strings by grepping through the | ||||
| sources for double quotes without a gettext call around them. | ||||
| 
 | ||||
| `actor` and `_delegate` | ||||
| ----------------------- | ||||
| ## `actor` and `_delegate` | ||||
| 
 | ||||
| gjs allows us to set so-called "expando properties" on introspected objects, | ||||
| allowing us to treat them like any other. Because the Shell was built before | ||||
| @@ -214,7 +206,7 @@ that has a property called `actor`. We call this wrapper class the "delegate". | ||||
| 
 | ||||
| We sometimes use expando properties to set a property called `_delegate` on | ||||
| the actor itself: | ||||
| 
 | ||||
| ```javascript | ||||
|     var MyClass = new Lang.Class({ | ||||
|         Name: 'MyClass', | ||||
| 
 | ||||
| @@ -229,6 +221,7 @@ the actor itself: | ||||
|             actor.set_label("You clicked the button!"); | ||||
|         } | ||||
|     }); | ||||
| ``` | ||||
| 
 | ||||
| The 'delegate' property is important for anything which trying to get the | ||||
| delegate object from an associated actor. For instance, the drag and drop | ||||
| @@ -236,16 +229,14 @@ system calls the `handleDragOver` function on the delegate of a "drop target" | ||||
| when the user drags an item over it. If you do not set the `_delegate` | ||||
| property, your actor will not be able to be dropped onto. | ||||
| 
 | ||||
| Functional style | ||||
| ---------------- | ||||
| ## Functional style | ||||
| 
 | ||||
| JavaScript Array objects offer a lot of common functional programming | ||||
| capabilities such as forEach, map, filter and so on. You can use these when | ||||
| they make sense, but please don't have a spaghetti mess of function programming | ||||
| messed in a procedural style. Use your best judgment. | ||||
| 
 | ||||
| Closures | ||||
| -------- | ||||
| ## Closures | ||||
| 
 | ||||
| `this` will not be captured in a closure, it is relative to how the closure is | ||||
| invoked, not to the value of this where the closure is created, because "this" | ||||
| @@ -254,15 +245,16 @@ variable that can be captured in closures. | ||||
| 
 | ||||
| All closures should be wrapped with Function.prototype.bind or use arrow | ||||
| notation. | ||||
| 
 | ||||
| ```javascript | ||||
|     const Lang = imports.lang; | ||||
| 
 | ||||
|     let closure1 = () => { this._fnorbate(); }; | ||||
|     let closure2 = this._fnorbate.bind(this); | ||||
| ``` | ||||
| 
 | ||||
| A more realistic example would be connecting to a signal on a method of a | ||||
| prototype: | ||||
| 
 | ||||
| ```javascript | ||||
|     const Lang = imports.lang; | ||||
|     const FnorbLib = imports.fborbLib; | ||||
| 
 | ||||
| @@ -276,19 +268,21 @@ prototype: | ||||
|             this._updateFnorb(); | ||||
|         } | ||||
|     }); | ||||
| ``` | ||||
| 
 | ||||
| Object literal syntax | ||||
| --------------------- | ||||
| ## Object literal syntax | ||||
| 
 | ||||
| In JavaScript, these are equivalent: | ||||
| 
 | ||||
| ```javascript | ||||
|     foo = { 'bar': 42 }; | ||||
|     foo = { bar: 42 }; | ||||
| ``` | ||||
| 
 | ||||
| and so are these: | ||||
| 
 | ||||
| ```javascript | ||||
|     var b = foo['bar']; | ||||
|     var b = foo.bar; | ||||
| ``` | ||||
| 
 | ||||
| If your usage of an object is like an object, then you're defining "member | ||||
| variables." For member variables, use the no-quotes no-brackets syntax: `{ bar: | ||||
| @@ -298,14 +292,13 @@ If your usage of an object is like a hash table (and thus conceptually the keys | ||||
| can have special chars in them), don't use quotes, but use brackets: `{ bar: 42 | ||||
| }`, `foo['bar']`. | ||||
| 
 | ||||
| Getters, setters, and Tweener | ||||
| ----------------------------- | ||||
| ## Getters, setters, and Tweener | ||||
| 
 | ||||
| Getters and setters should be used when you are dealing with an API that is | ||||
| designed around setting properties, like Tweener. If you want to animate an | ||||
| arbitrary property, create a getter and setter, and use Tweener to animate the | ||||
| property. | ||||
| 
 | ||||
| ```javascript | ||||
|     var ANIMATION_TIME = 2000; | ||||
| 
 | ||||
|     var MyClass = new Lang.Class({ | ||||
| @@ -331,3 +324,4 @@ property. | ||||
|                      { position: 100, | ||||
|                        time: ANIMATION_TIME, | ||||
|                        transition: 'easeOutQuad' }); | ||||
| ``` | ||||
| @@ -1,7 +0,0 @@ | ||||
| Owen Taylor | ||||
| E-mail: otaylor@redhat.com | ||||
| Userid: otaylor | ||||
|  | ||||
| Colin Walters | ||||
| E-mail: walters@verbum.org | ||||
| Userid: walters | ||||
							
								
								
									
										32
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,3 +1,35 @@ | ||||
| 3.29.2 | ||||
| ====== | ||||
| * Guard against untimely keyboard map changes [Carlos; #240] | ||||
| * Fix icons in search provider results [Florian; #249] | ||||
| * Fix blurriness of OSD under some resolutions [Silvère; #782011] | ||||
| * Fix lagging pointer when zoomed [Daniel; #682013] | ||||
| * Misc. bug fixes [Milan, Xiaoguang, Florian, Mario, Ole; #244, #787871, | ||||
|   #781471, #136, #214, #294] | ||||
|  | ||||
| Contributors: | ||||
|   Ole Jørgen Brønner, Milan Crha, Carlos Garnacho, Yussuf Khalil, | ||||
|   Silvère Latchurié, Florian Müllner, Mario Sanchez Prada, Ray Strode, | ||||
|   Daniel van Vugt, Xiaoguang Wang | ||||
|  | ||||
| Translators: | ||||
|   Rafael Fontenelle [pt_BR], Kukuh Syafaat [id], Marcos Lans [gl], | ||||
|   Anders Jonsson [sv], Mingcong Bai [zh_CN] | ||||
|  | ||||
| 3.29.1 | ||||
| ====== | ||||
| * Support icons in app-menu [Florian; #760985] | ||||
| * Misc. bug fixes [Marco, Florian, Lubomir; #792687, #221, !63] | ||||
|  | ||||
| Contributors: | ||||
|   Piotr Drąg, Takao Fujiwara, Christian Kellner, Florian Müllner, | ||||
|   Mario Sanchez Prada, Lubomir Rintel, Didier Roche, Marco Trevisan (Treviño), | ||||
|   verdre | ||||
|  | ||||
| Translators: | ||||
|   gogo [hr], Stas Solovey [ru], Matej Urbančič [sl], Daniel Șerbănescu [ro], | ||||
|   Fabio Tomat [fur], Marek Cernocky [cs], Daniel Mustieles [es] | ||||
|  | ||||
| 3.28.1 | ||||
| ====== | ||||
| * Fix compose characters in shell entries [Carlos; #115] | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| # GNOME Shell | ||||
| GNOME Shell provides core user interface functions for the GNOME 3 desktop, | ||||
| like switching to windows and launching applications. GNOME Shell takes | ||||
| advantage of the capabilities of modern graphics hardware and introduces | ||||
| @@ -6,15 +7,14 @@ easy to use experience. | ||||
| 
 | ||||
| For more information about GNOME Shell, including instructions on how | ||||
| to build GNOME Shell from source and how to get involved with the project, | ||||
| see: | ||||
| see the [project wiki][wiki] | ||||
| 
 | ||||
|  https://wiki.gnome.org/Projects/GnomeShell | ||||
| Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. | ||||
| 
 | ||||
| Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell' | ||||
| product. | ||||
| 
 | ||||
| License | ||||
| ======= | ||||
| ## License | ||||
| GNOME Shell is distributed under the terms of the GNU General Public License, | ||||
| version 2 or later. See the COPYING file for details. | ||||
| version 2 or later. See the [COPYING][license] file for details. | ||||
| 
 | ||||
| [project-wiki]: https://wiki.gnome.org/Projects/GnomeShell | ||||
| [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell/issues | ||||
| [license]: COPYING | ||||
| @@ -4,14 +4,14 @@ the extensions repository to provide good integration, letting the website | ||||
| know which extensions are enabled and disabled, and allowing the website to | ||||
| enable, disable and install them. | ||||
| 
 | ||||
| Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell' | ||||
| product. | ||||
| Bugs should be reported to the GNOME [bug tracking system][bug-tracker]. | ||||
| 
 | ||||
| License | ||||
| ======= | ||||
| ## License | ||||
| The GNOME Shell Browser Plugin, like GNOME Shell itself is distributed under | ||||
| the GNU General Public License, version 2 or later. The plugin also contains | ||||
| header files from the "NPAPI SDK" project, tri-licensed under MPL 1.1, GPL 2.0 | ||||
| and LGPL 2.1. These headers are third-party sources and can be retrieved from: | ||||
| 
 | ||||
|   http://code.google.com/p/npapi-sdk/ | ||||
| 
 | ||||
| [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell/issues | ||||
| @@ -1,3 +0,0 @@ | ||||
| To generate the css files, from the project directory: | ||||
|  | ||||
| sass --sourcemap=none --update . | ||||
| @@ -1,31 +0,0 @@ | ||||
| Summary | ||||
| ------- | ||||
|  | ||||
| * Do not edit the CSS directly, edit the source SCSS files and the CSS files will be generated | ||||
|   automatically when building with meson + ninja and left inside the build directory to be | ||||
|   incorporated into the gresource XML (you'll need to have sassc installed). | ||||
|  | ||||
| How to tweak the theme | ||||
| ---------------------- | ||||
|  | ||||
| Adwaita is a complex theme, so to keep it maintainable it's written and processed in SASS, the | ||||
| generated CSS is then transformed into a gresource file during gtk build and used at runtime in a  | ||||
| non-legible or editable form. | ||||
|  | ||||
| It is very likely your change will happen in the _common.scss file. That's where all the widget  | ||||
| selectors are defined. Here's a rundown of the "supporting" stylesheets, that are unlikely to be the  | ||||
| right place for a drive by stylesheet fix: | ||||
|  | ||||
| _colors.scss        - global color definitions. We keep the number of defined colors to a necessary minimum,  | ||||
|                       most colors are derived from a handful of basics. It is an exact copy of the gtk+  | ||||
|                       counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell  | ||||
|                       default. | ||||
|  | ||||
| _drawing.scss       - drawing helper mixings/functions to allow easier definition of widget drawing under | ||||
|                       specific context. This is why Adwaita isn't 15000 LOC. | ||||
|  | ||||
| _common.scss        - actual definitions of style for each widget. This is where you are likely to add/remove | ||||
|                       your changes. | ||||
|                        | ||||
| You can read about SASS at http://sass-lang.com/documentation/. Once you make your changes to the | ||||
| _common.scss file, you can run ninja to generate the final CSS files. | ||||
							
								
								
									
										32
									
								
								data/theme/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								data/theme/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| ## Summary | ||||
|  | ||||
| Do not edit the CSS directly, edit the source SCSS files and the CSS files | ||||
| will be generated automatically when building with meson + ninja and left | ||||
| inside the build directory to be incorporated into the gresource XML (you'll | ||||
| need to have sassc installed). | ||||
|  | ||||
| ## How to tweak the theme | ||||
|  | ||||
| Adwaita is a complex theme, so to keep it maintainable it's written and | ||||
| processed in SASS, the generated CSS is then transformed into a gresource | ||||
| file during gtk build and used at runtime in a non-legible or editable form. | ||||
|  | ||||
| It is very likely your change will happen in the [_common.scss][common] file. | ||||
| That's where all the widget selectors are defined. Here's a rundown of | ||||
| the "supporting" stylesheets, that are unlikely to be the right place | ||||
| for a drive by stylesheet fix: | ||||
|  | ||||
| | File                     | Description       | | ||||
| | ------------------------ | ----------------- | | ||||
| | [_colors.scss][colors]   | global color definitions. We keep the number of defined colors to a necessary minimum,  most colors are derived from a handful of basics. It is an exact copy of the gtk+ counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell default. | | ||||
| | [_drawing.scss][drawing] | drawing helper mixings/functions to allow easier definition of widget drawing under specific context. This is why Adwaita isn't 15000 LOC. | | ||||
| | [_common.scss][common]   | actual definitions of style for each widget. This is where you are likely to add/remove your changes. | | ||||
|  | ||||
| You can read about SASS on its [web page][sass-web]. Once you make your | ||||
| changes to the [_common.scss][common] file, you can run ninja to generate the | ||||
| final CSS files. | ||||
|  | ||||
| [common]: data/theme/gnome-shell-sass/_common.scss | ||||
| [colors]: data/theme/gnome-shell-sass/_colors.scss | ||||
| [drawing]: data/theme/gnome-shell-sass/_drawing.scss | ||||
| [sass-web]: http://sass-lang.com/documentation/ | ||||
| @@ -1,6 +0,0 @@ | ||||
| --- Generating the css file --- | ||||
|  | ||||
| You need sass to generate the css file. | ||||
|  | ||||
| To generate them run from a command line in the project directory: | ||||
| sass --sourcemap=none --update ./ | ||||
| @@ -1,7 +0,0 @@ | ||||
| GNOME Shell Sass is a project intended to allow the sharing of the theme sources in sass between gnome-shell and other projects like gnome-shell-extensions. | ||||
|  | ||||
| License | ||||
| ======= | ||||
| GNOME Shell Sass is distributed under the terms of the GNU General Public License, | ||||
| version 2 or later. See the COPYING file for details. | ||||
|  | ||||
							
								
								
									
										16
									
								
								data/theme/gnome-shell-sass/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								data/theme/gnome-shell-sass/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| # GNOME Shell Sass | ||||
| GNOME Shell Sass is a project intended to allow the sharing of the | ||||
| theme sources in sass between gnome-shell and other projects like | ||||
| gnome-shell-extensions. | ||||
|  | ||||
| Any changes should be done in the [GNOME Shell subtree][shell-subtree] | ||||
| and not the stand-alone [gnome-shell-sass repository][sass-repo]. They | ||||
| will then be synchronized periodically before releases. | ||||
|  | ||||
| ## License | ||||
| GNOME Shell Sass is distributed under the terms of the GNU General Public | ||||
| License, version 2 or later. See the [COPYING][license] file for details. | ||||
|  | ||||
| [shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/master/data/theme/gnome-shell-sass | ||||
| [sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass | ||||
| [license]: COPYING | ||||
| @@ -733,6 +733,7 @@ StScrollBar { | ||||
|   transition-duration: 500ms; | ||||
|   font-weight: bold; | ||||
|   height: 1.86em; | ||||
|   font-feature-settings: "tnum"; | ||||
|  | ||||
|   &.unlock-screen, | ||||
|   &.login-screen, | ||||
| @@ -958,6 +959,7 @@ StScrollBar { | ||||
|       padding: 0.1em; | ||||
|       margin: 2px; | ||||
|       border-radius: 1.4em; | ||||
|       font-feature-settings: "tnum"; | ||||
|       &:hover,&:focus { background-color: lighten($bg_color,5%); } | ||||
|       &:active,&:selected { | ||||
|         color: lighten($selected_fg_color,5%); | ||||
| @@ -1788,20 +1790,19 @@ StScrollBar { | ||||
|   .login-dialog-user-list-view { -st-vfade-offset: 1em; } | ||||
|   .login-dialog-user-list { | ||||
|     spacing: 12px; | ||||
|     padding: .2em; | ||||
|     width: 23em; | ||||
|     &:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; } | ||||
|     &:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; } | ||||
|   } | ||||
|   .login-dialog-user-list-item { | ||||
|     border-radius: 5px; | ||||
|     padding: .2em; | ||||
|     padding: 6px; | ||||
|     color: darken($osd_fg_color,30%); | ||||
|     &:ltr { padding-right: 1em; } | ||||
|     &:rtl { padding-left: 1em; } | ||||
|     &:ltr .user-widget { padding-right: 1em; } | ||||
|     &:rtl .user-widget { padding-left: 1em; } | ||||
|     .login-dialog-timed-login-indicator { | ||||
|       height: 2px; | ||||
|       margin: 2px 0 0 0; | ||||
|       margin-top: 6px; | ||||
|       background-color: $osd_fg_color; | ||||
|     } | ||||
|     &:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; } | ||||
| @@ -1816,8 +1817,8 @@ StScrollBar { | ||||
|     padding-left: 15px; | ||||
|   } | ||||
|     .user-widget-label { | ||||
|       &:ltr { padding-left: 18px; } | ||||
|       &:rtl { padding-right: 18px; } | ||||
|       &:ltr { padding-left: 14px; } | ||||
|       &:rtl { padding-right: 14px; } | ||||
|     } | ||||
|  | ||||
|   .login-dialog-prompt-layout { | ||||
| @@ -1868,6 +1869,7 @@ StScrollBar { | ||||
| .screen-shield-clock-time { | ||||
|   font-size: 72pt; | ||||
|   text-shadow: 0px 2px 2px rgba(0,0,0,0.4); | ||||
|   font-feature-settings: "tnum"; | ||||
| } | ||||
|  | ||||
| .screen-shield-clock-date {  | ||||
|   | ||||
| @@ -25,7 +25,6 @@ const GLib = imports.gi.GLib; | ||||
| const GObject = imports.gi.GObject; | ||||
| const Gtk = imports.gi.Gtk; | ||||
| const Lang = imports.lang; | ||||
| const Mainloop = imports.mainloop; | ||||
| const Meta = imports.gi.Meta; | ||||
| const Pango = imports.gi.Pango; | ||||
| const Shell = imports.gi.Shell; | ||||
| @@ -86,7 +85,8 @@ var UserListItem = new Lang.Class({ | ||||
|                                              GObject.BindingFlags.SYNC_CREATE); | ||||
|  | ||||
|         this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator', | ||||
|                                                  scale_x: 0 }); | ||||
|                                                  scale_x: 0, | ||||
|                                                  visible: false }); | ||||
|         layout.add(this._timedLoginIndicator); | ||||
|  | ||||
|         this.actor.connect('clicked', this._onClicked.bind(this)); | ||||
| @@ -126,6 +126,8 @@ var UserListItem = new Lang.Class({ | ||||
|  | ||||
|         this.hideTimedLoginIndicator(); | ||||
|  | ||||
|         this._timedLoginIndicator.visible = true; | ||||
|  | ||||
|         let startTime = GLib.get_monotonic_time(); | ||||
|  | ||||
|         this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33, | ||||
| @@ -152,6 +154,8 @@ var UserListItem = new Lang.Class({ | ||||
|             GLib.source_remove(this._timedLoginTimeoutId); | ||||
|             this._timedLoginTimeoutId = 0; | ||||
|         } | ||||
|  | ||||
|         this._timedLoginIndicator.visible = false; | ||||
|         this._timedLoginIndicator.scale_x = 0.; | ||||
|     } | ||||
| }); | ||||
| @@ -991,59 +995,81 @@ var LoginDialog = new Lang.Class({ | ||||
|         return hold; | ||||
|     }, | ||||
|  | ||||
|     _showTimedLoginAnimation() { | ||||
|         this._timedLoginItem.actor.grab_key_focus(); | ||||
|         return this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime); | ||||
|     }, | ||||
|  | ||||
|     _blockTimedLoginUntilIdle() { | ||||
|         // This blocks timed login from starting until a few | ||||
|         // seconds after the user stops interacting with the | ||||
|         // login screen. | ||||
|         // | ||||
|         // We skip this step if the timed login delay is very | ||||
|         // short. | ||||
|         if ((this._timedLoginDelay - _TIMED_LOGIN_IDLE_THRESHOLD) <= 0) | ||||
|           return null; | ||||
|  | ||||
|         let hold = new Batch.Hold(); | ||||
|  | ||||
|         this._timedLoginIdleTimeOutId = Mainloop.timeout_add_seconds(_TIMED_LOGIN_IDLE_THRESHOLD, | ||||
|         this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD, | ||||
|             () => { | ||||
|                 this._timedLoginAnimationTime -= _TIMED_LOGIN_IDLE_THRESHOLD; | ||||
|                 this._timedLoginIdleTimeOutId = 0; | ||||
|                 hold.release(); | ||||
|                 return GLib.SOURCE_REMOVE; | ||||
|             }); | ||||
|         GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginAnimationTime'); | ||||
|         GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginIdleTimeOutId'); | ||||
|         return hold; | ||||
|     }, | ||||
|  | ||||
|     _startTimedLogin(userName, delay) { | ||||
|         this._timedLoginItem = null; | ||||
|         this._timedLoginDelay = delay; | ||||
|         this._timedLoginAnimationTime = delay; | ||||
|         let firstRun = true; | ||||
|  | ||||
|         // Cancel execution of old batch | ||||
|         if (this._timedLoginBatch) { | ||||
|             this._timedLoginBatch.cancel(); | ||||
|             this._timedLoginBatch = null; | ||||
|             firstRun = false; | ||||
|         } | ||||
|  | ||||
|         // Reset previous idle-timeout | ||||
|         if (this._timedLoginIdleTimeOutId) { | ||||
|             GLib.source_remove(this._timedLoginIdleTimeOutId); | ||||
|             this._timedLoginIdleTimeOutId = 0; | ||||
|         } | ||||
|  | ||||
|         let loginItem = null; | ||||
|         let animationTime; | ||||
|  | ||||
|         let tasks = [() => this._waitForItemForUser(userName), | ||||
|  | ||||
|                      () => { | ||||
|                          this._timedLoginItem = this._userList.getItemFromUserName(userName); | ||||
|                          loginItem = this._userList.getItemFromUserName(userName); | ||||
|  | ||||
|                          // If there is an animation running on the item, reset it. | ||||
|                          loginItem.hideTimedLoginIndicator(); | ||||
|                      }, | ||||
|  | ||||
|                      () => { | ||||
|                          // If we're just starting out, start on the right | ||||
|                          // item. | ||||
|                          // If we're just starting out, start on the right item. | ||||
|                          if (!this._userManager.is_loaded) { | ||||
|                              this._userList.jumpToItem(this._timedLoginItem); | ||||
|                              this._userList.jumpToItem(loginItem); | ||||
|                          } | ||||
|                      }, | ||||
|  | ||||
|                      this._blockTimedLoginUntilIdle, | ||||
|  | ||||
|                      () => { | ||||
|                          this._userList.scrollToItem(this._timedLoginItem); | ||||
|                          // This blocks the timed login animation until a few | ||||
|                          // seconds after the user stops interacting with the | ||||
|                          // login screen. | ||||
|  | ||||
|                          // We skip this step if the timed login delay is very short. | ||||
|                          if (delay > _TIMED_LOGIN_IDLE_THRESHOLD) { | ||||
|                              animationTime = delay - _TIMED_LOGIN_IDLE_THRESHOLD; | ||||
|                              return this._blockTimedLoginUntilIdle(); | ||||
|                          } else { | ||||
|                              animationTime = delay; | ||||
|                          } | ||||
|                      }, | ||||
|  | ||||
|                      this._showTimedLoginAnimation, | ||||
|                      () => { | ||||
|                          // If idle timeout is done, make sure the timed login indicator is shown | ||||
|                          if (delay > _TIMED_LOGIN_IDLE_THRESHOLD && | ||||
|                              this._authPrompt.actor.visible) | ||||
|                              this._authPrompt.cancel(); | ||||
|  | ||||
|                          if (delay > _TIMED_LOGIN_IDLE_THRESHOLD || firstRun) { | ||||
|                              this._userList.scrollToItem(loginItem); | ||||
|                              loginItem.actor.grab_key_focus(); | ||||
|                          } | ||||
|                      }, | ||||
|  | ||||
|                      () => loginItem.showTimedLoginIndicator(animationTime), | ||||
|  | ||||
|                      () => { | ||||
|                          this._timedLoginBatch = null; | ||||
| @@ -1055,37 +1081,17 @@ var LoginDialog = new Lang.Class({ | ||||
|         return this._timedLoginBatch.run(); | ||||
|     }, | ||||
|  | ||||
|     _resetTimedLogin() { | ||||
|         if (this._timedLoginBatch) { | ||||
|             this._timedLoginBatch.cancel(); | ||||
|             this._timedLoginBatch = null; | ||||
|         } | ||||
|  | ||||
|         if (this._timedLoginItem) | ||||
|             this._timedLoginItem.hideTimedLoginIndicator(); | ||||
|  | ||||
|         let userName = this._timedLoginItem.user.get_user_name(); | ||||
|  | ||||
|         if (userName) | ||||
|             this._startTimedLogin(userName, this._timedLoginDelay); | ||||
|     }, | ||||
|  | ||||
|     _onTimedLoginRequested(client, userName, seconds) { | ||||
|         if (this._timedLoginBatch) | ||||
|             return; | ||||
|  | ||||
|         this._startTimedLogin(userName, seconds); | ||||
|  | ||||
|         // Restart timed login on user interaction | ||||
|         global.stage.connect('captured-event', (actor, event) => { | ||||
|            if (this._timedLoginDelay == undefined) | ||||
|                return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|            if (event.type() == Clutter.EventType.KEY_PRESS || | ||||
|                event.type() == Clutter.EventType.BUTTON_PRESS) { | ||||
|                if (this._timedLoginBatch) { | ||||
|                    this._timedLoginBatch.cancel(); | ||||
|                    this._timedLoginBatch = null; | ||||
|                } | ||||
|            } else if (event.type() == Clutter.EventType.KEY_RELEASE || | ||||
|                       event.type() == Clutter.EventType.BUTTON_RELEASE) { | ||||
|                this._resetTimedLogin(); | ||||
|                this._startTimedLogin(userName, seconds); | ||||
|            } | ||||
|  | ||||
|            return Clutter.EVENT_PROPAGATE; | ||||
|   | ||||
| @@ -89,6 +89,8 @@ var KeyboardManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     setUserLayouts(ids) { | ||||
|         let currentId = this._current ? this._current.id : null; | ||||
|         let currentGroupIndex = this._current ? this._current.groupIndex : null; | ||||
|         this._current = null; | ||||
|         this._layoutInfos = {}; | ||||
|  | ||||
| @@ -115,6 +117,9 @@ var KeyboardManager = new Lang.Class({ | ||||
|             info.group = group; | ||||
|             info.groupIndex = groupIndex; | ||||
|  | ||||
|             if (currentId == id && currentGroupIndex == groupIndex) | ||||
|                 this._current = info; | ||||
|  | ||||
|             i += 1; | ||||
|         } | ||||
|     }, | ||||
|   | ||||
| @@ -136,8 +136,7 @@ function run() { | ||||
|     global.frame_finish_timestamp = true; | ||||
|  | ||||
|     for (let k = 0; k < 5; k++) | ||||
|         yield Scripting.createTestWindow(640, 480, | ||||
|                                          { maximized: true }); | ||||
|         yield Scripting.createTestWindow({ maximized: true }); | ||||
|     yield Scripting.waitTestWindows(); | ||||
|  | ||||
|     yield Scripting.sleep(1000); | ||||
| @@ -158,8 +157,7 @@ function run() { | ||||
|     yield Scripting.destroyTestWindows(); | ||||
|     Main.overview.hide(); | ||||
|  | ||||
|     yield Scripting.createTestWindow(640, 480, | ||||
|                                      { maximized: true, | ||||
|     yield Scripting.createTestWindow({ maximized: true, | ||||
|                                        redraws: true}); | ||||
|     yield Scripting.waitTestWindows(); | ||||
|  | ||||
|   | ||||
| @@ -1778,10 +1778,11 @@ var AppIcon = new Lang.Class({ | ||||
|     activate(button) { | ||||
|         let event = Clutter.get_current_event(); | ||||
|         let modifiers = event ? event.get_state() : 0; | ||||
|         let openNewWindow = this.app.can_open_new_window () && | ||||
|                             modifiers & Clutter.ModifierType.CONTROL_MASK && | ||||
|                             this.app.state == Shell.AppState.RUNNING || | ||||
|                             button && button == 2; | ||||
|         let isMiddleButton = button && button == Clutter.BUTTON_MIDDLE; | ||||
|         let isCtrlPressed = (modifiers & Clutter.ModifierType.CONTROL_MASK) != 0; | ||||
|         let openNewWindow = this.app.can_open_new_window() && | ||||
|                             this.app.state == Shell.AppState.RUNNING && | ||||
|                             (isCtrlPressed || isMiddleButton); | ||||
|  | ||||
|         if (this.app.state == Shell.AppState.STOPPED || openNewWindow) | ||||
|             this.animateLaunch(); | ||||
| @@ -1870,7 +1871,9 @@ var AppIconMenu = new Lang.Class({ | ||||
|                 this._appendSeparator(); | ||||
|                 separatorShown = true; | ||||
|             } | ||||
|             let item = this._appendMenuItem(window.title); | ||||
|             let title = window.title ? window.title | ||||
|                                      : this._source.app.get_name(); | ||||
|             let item = this._appendMenuItem(title); | ||||
|             item.connect('activate', () => { | ||||
|                 this.emit('activate-window', window); | ||||
|             }); | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const Gio = imports.gi.Gio; | ||||
| const GLib = imports.gi.GLib; | ||||
| const GObject = imports.gi.GObject; | ||||
| const Lang = imports.lang; | ||||
| const Meta = imports.gi.Meta; | ||||
| @@ -13,6 +14,7 @@ const Tweener = imports.ui.tweener; | ||||
|  | ||||
| var FROZEN_WINDOW_BRIGHTNESS = -0.3 | ||||
| var DIALOG_TRANSITION_TIME = 0.15 | ||||
| var ALIVE_TIMEOUT = 5000; | ||||
|  | ||||
| var CloseDialog = new Lang.Class({ | ||||
|     Name: 'CloseDialog', | ||||
| @@ -26,6 +28,7 @@ var CloseDialog = new Lang.Class({ | ||||
|         this.parent(); | ||||
|         this._window = window; | ||||
|         this._dialog = null; | ||||
|         this._timeoutId = 0; | ||||
|     }, | ||||
|  | ||||
|     get window() { | ||||
| @@ -97,6 +100,14 @@ var CloseDialog = new Lang.Class({ | ||||
|         if (this._dialog != null) | ||||
|             return; | ||||
|  | ||||
|         Meta.disable_unredirect_for_screen(global.screen); | ||||
|  | ||||
|         this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ALIVE_TIMEOUT, | ||||
|             () => { | ||||
|                 this._window.check_alive(global.display.get_current_time_roundtrip()); | ||||
|                 return GLib.SOURCE_CONTINUE; | ||||
|             }); | ||||
|  | ||||
|         this._addWindowEffect(); | ||||
|         this._initDialog(); | ||||
|  | ||||
| @@ -117,6 +128,11 @@ var CloseDialog = new Lang.Class({ | ||||
|         if (this._dialog == null) | ||||
|             return; | ||||
|  | ||||
|         Meta.enable_unredirect_for_screen(global.screen); | ||||
|  | ||||
|         GLib.source_remove(this._timeoutId); | ||||
|         this._timeoutId = 0; | ||||
|  | ||||
|         let dialog = this._dialog; | ||||
|         this._dialog = null; | ||||
|         this._removeWindowEffect(); | ||||
|   | ||||
| @@ -604,12 +604,17 @@ var NetworkAgent = new Lang.Class({ | ||||
|  | ||||
|         this._native.connect('new-request', this._newRequest.bind(this)); | ||||
|         this._native.connect('cancel-request', this._cancelRequest.bind(this)); | ||||
|         try { | ||||
|             this._native.init(null); | ||||
|         } catch(e) { | ||||
|             this._native = null; | ||||
|             logError(e, 'error initializing the NetworkManager Agent'); | ||||
|         } | ||||
|  | ||||
|         this._initialized = false; | ||||
|         this._native.init_async(GLib.PRIORITY_DEFAULT, null, (o, res) => { | ||||
|             try { | ||||
|                 this._native.init_finish(res); | ||||
|                 this._initialized = true; | ||||
|             } catch(e) { | ||||
|                 this._native = null; | ||||
|                 logError(e, 'error initializing the NetworkManager Agent'); | ||||
|             } | ||||
|         }); | ||||
|     }, | ||||
|  | ||||
|     enable() { | ||||
| @@ -617,7 +622,7 @@ var NetworkAgent = new Lang.Class({ | ||||
|             return; | ||||
|  | ||||
|         this._native.auto_register = true; | ||||
|         if (!this._native.registered) | ||||
|         if (this._initialized && !this._native.registered) | ||||
|             this._native.register_async(null, null); | ||||
|     }, | ||||
|  | ||||
| @@ -640,7 +645,7 @@ var NetworkAgent = new Lang.Class({ | ||||
|             return; | ||||
|  | ||||
|         this._native.auto_register = false; | ||||
|         if (this._native.registered) | ||||
|         if (this._initialized && this._native.registered) | ||||
|             this._native.unregister_async(null, null); | ||||
|     }, | ||||
|  | ||||
| @@ -655,7 +660,7 @@ var NetworkAgent = new Lang.Class({ | ||||
|         switch (connectionType) { | ||||
|         case '802-11-wireless': | ||||
|             let wirelessSetting = connection.get_setting_wireless(); | ||||
|             let ssid = NM.utils_ssid_to_utf8(wirelessSetting.get_ssid()); | ||||
|             let ssid = NM.utils_ssid_to_utf8(wirelessSetting.get_ssid().get_data()); | ||||
|             title = _("Authentication required by wireless network"); | ||||
|             body = _("Passwords or encryption keys are required to access the wireless network “%s”.").format(ssid); | ||||
|             break; | ||||
|   | ||||
| @@ -201,7 +201,9 @@ var AuthenticationDialog = new Lang.Class({ | ||||
|     close(timestamp) { | ||||
|         this.parent(timestamp); | ||||
|  | ||||
|         Main.sessionMode.disconnect(this._sessionUpdatedId); | ||||
|         if (this._sessionUpdatedId) | ||||
|             Main.sessionMode.disconnect(this._sessionUpdatedId); | ||||
|         this._sessionUpdatedId = 0; | ||||
|     }, | ||||
|  | ||||
|     _ensureOpen() { | ||||
|   | ||||
| @@ -166,7 +166,7 @@ var CandidatePopup = new Lang.Class({ | ||||
|             this._panelService.cursor_down(); | ||||
|         }); | ||||
|  | ||||
|         this._candidateArea.connect('candidate-clicked', () => { | ||||
|         this._candidateArea.connect('candidate-clicked', (area, index, button, state) => { | ||||
|             this._panelService.candidate_clicked(index, button, state); | ||||
|         }); | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,6 @@ const MagnifierDBus = imports.ui.magnifierDBus; | ||||
| const Params = imports.misc.params; | ||||
| const PointerWatcher = imports.ui.pointerWatcher; | ||||
|  | ||||
| var MOUSE_POLL_FREQUENCY = 50; | ||||
| var CROSSHAIRS_CLIP_SIZE = [100, 100]; | ||||
| var NO_CHANGE = 0.0; | ||||
|  | ||||
| @@ -152,8 +151,10 @@ var Magnifier = new Lang.Class({ | ||||
|      * Turn on mouse tracking, if not already doing so. | ||||
|      */ | ||||
|     startTrackingMouse() { | ||||
|         if (!this._pointerWatch) | ||||
|             this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(MOUSE_POLL_FREQUENCY, this.scrollToMousePos.bind(this)); | ||||
|         if (!this._pointerWatch) { | ||||
|             let interval = 1000 / Clutter.get_default_frame_rate(); | ||||
|             this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this)); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -14,6 +14,7 @@ const St = imports.gi.St; | ||||
| const AccessDialog = imports.ui.accessDialog; | ||||
| const AudioDeviceSelection = imports.ui.audioDeviceSelection; | ||||
| const Components = imports.ui.components; | ||||
| const Config = imports.misc.config; | ||||
| const CtrlAltTab = imports.ui.ctrlAltTab; | ||||
| const EndSessionDialog = imports.ui.endSessionDialog; | ||||
| const Environment = imports.ui.environment; | ||||
| @@ -249,26 +250,61 @@ function _initializeUI() { | ||||
|     }); | ||||
| } | ||||
|  | ||||
| function _findThemeDirByVersion(dir, major, minor, name) { | ||||
|     let path; | ||||
|     let stylesheet; | ||||
|     let subpath; | ||||
|  | ||||
|     /* Don't search back to before we introduced this support */ | ||||
|     let max_minor = (major == 3) ? 28 : 0; | ||||
|  | ||||
|     for (let i = minor; i >= max_minor; i = i - 2) { | ||||
|         subpath = major + '.' + i; | ||||
|         path = GLib.build_filenamev([dir, 'gnome-shell', subpath, 'theme', name]); | ||||
|         stylesheet = Gio.file_new_for_path(path); | ||||
|  | ||||
|         log('Checking for ' + path); | ||||
|  | ||||
|         if (stylesheet.query_exists(null)) { | ||||
|             log('Using ' + path); | ||||
|             return stylesheet; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     path = GLib.build_filenamev([dir, 'gnome-shell', 'theme', name]); | ||||
|     stylesheet = Gio.file_new_for_path(path); | ||||
|  | ||||
|     if (stylesheet.query_exists(null)) { | ||||
|         log('Using unversioned' + path); | ||||
|         return stylesheet; | ||||
|     } | ||||
|  | ||||
|     return null; | ||||
| } | ||||
|  | ||||
| function _getStylesheet(name) { | ||||
|     let stylesheet; | ||||
|  | ||||
|     let [major, minor] = Config.PACKAGE_VERSION.split('.'); | ||||
|  | ||||
|     // Directories are versioned according to the stable version | ||||
|     if ((minor % 2) == 1) | ||||
|         minor++; | ||||
|  | ||||
|     stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name); | ||||
|     if (stylesheet.query_exists(null)) | ||||
|     if (stylesheet.query_exists(null)) { | ||||
|         log('Using built-in default theme ' + name) | ||||
|         return stylesheet; | ||||
|     } | ||||
|  | ||||
|     let dataDirs = GLib.get_system_data_dirs(); | ||||
|     for (let i = 0; i < dataDirs.length; i++) { | ||||
|         let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'theme', name]); | ||||
|         let stylesheet = Gio.file_new_for_path(path); | ||||
|         if (stylesheet.query_exists(null)) | ||||
|         stylesheet = _findThemeDirByVersion(dataDirs[i], major, minor, name) | ||||
|         if (stylesheet != null) | ||||
|             return stylesheet; | ||||
|     } | ||||
|  | ||||
|     stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name); | ||||
|     if (stylesheet.query_exists(null)) | ||||
|         return stylesheet; | ||||
|  | ||||
|     return null; | ||||
|     return _findThemeDirByVersion(global.datadir, major, minor, name); | ||||
| } | ||||
|  | ||||
| function _getDefaultStylesheet() { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ function _fixMarkup(text, allowMarkup) { | ||||
|  | ||||
|         // Support <b>, <i>, and <u>, escape anything else | ||||
|         // so it displays as raw markup. | ||||
|         // Ref: https://developer.gnome.org/notification-spec/#markup | ||||
|         _text = _text.replace(/<(?!\/?[biu]>)/g, '<'); | ||||
|  | ||||
|         try { | ||||
|   | ||||
| @@ -315,10 +315,10 @@ var NotificationApplicationPolicy = new Lang.Class({ | ||||
| // You can add a secondary icon to the banner with 'secondaryGIcon'. There | ||||
| // is no fallback for this icon. | ||||
| // | ||||
| // If @params contains 'bannerMarkup', with the value %true, then | ||||
| // the corresponding element is assumed to use pango markup. If the | ||||
| // parameter is not present for an element, then anything that looks | ||||
| // like markup in that element will appear literally in the output. | ||||
| // If @params contains 'bannerMarkup', with the value %true, a subset (<b>, | ||||
| // <i> and <u>) of the markup in [1] will be interpreted within @banner. If | ||||
| // the parameter is not present, then anything that looks like markup | ||||
| // in @banner will appear literally in the output. | ||||
| // | ||||
| // If @params contains a 'clear' parameter with the value %true, then | ||||
| // the content and the action area of the notification will be cleared. | ||||
| @@ -328,6 +328,8 @@ var NotificationApplicationPolicy = new Lang.Class({ | ||||
| // If @params contains 'soundName' or 'soundFile', the corresponding | ||||
| // event sound is played when the notification is shown (if the policy for | ||||
| // @source allows playing sounds). | ||||
| // | ||||
| // [1] https://developer.gnome.org/notification-spec/#markup  | ||||
| var Notification = new Lang.Class({ | ||||
|     Name: 'Notification', | ||||
|  | ||||
|   | ||||
| @@ -204,7 +204,7 @@ var OsdWindow = new Lang.Class({ | ||||
|  | ||||
|         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|         this._icon.icon_size = popupSize / (2 * scaleFactor); | ||||
|         this._box.translation_y = monitor.height / 4; | ||||
|         this._box.translation_y = Math.round(monitor.height / 4); | ||||
|         this._boxConstraint.minSize = popupSize; | ||||
|     } | ||||
| }); | ||||
|   | ||||
| @@ -295,7 +295,7 @@ var RemoteSearchProvider = new Lang.Class({ | ||||
|                                name: metas[i]['name'], | ||||
|                                description: metas[i]['description'], | ||||
|                                createIcon: size => { | ||||
|                                    this.createIcon(size, metas[i]); | ||||
|                                    return this.createIcon(size, metas[i]); | ||||
|                                }, | ||||
|                                clipboardText: metas[i]['clipboardText'] }); | ||||
|         } | ||||
|   | ||||
| @@ -133,7 +133,7 @@ function _callRemote(obj, method, ...args) { | ||||
|  * because of the normal X asynchronous mapping process, to actually wait | ||||
|  * until the window has been mapped and exposed, use waitTestWindows(). | ||||
|  */ | ||||
| function createTestWindow(width, height, params) { | ||||
| function createTestWindow(params) { | ||||
|     params = Params.parse(params, { width: 640, | ||||
|                                     height: 480, | ||||
|                                     alpha: false, | ||||
|   | ||||
| @@ -995,8 +995,16 @@ var NMWirelessDialog = new Lang.Class({ | ||||
|         else if (!oneHasConnection && twoHasConnection) | ||||
|             return 1; | ||||
|  | ||||
|         let oneStrength = one.accessPoints[0].strength; | ||||
|         let twoStrength = two.accessPoints[0].strength; | ||||
|         let oneAp = one.accessPoints[0] || null; | ||||
|         let twoAp = two.accessPoints[0] || null; | ||||
|  | ||||
|         if (oneAp != null && twoAp == null) | ||||
|             return -1; | ||||
|         else if (oneAp == null && twoAp != null) | ||||
|             return 1; | ||||
|  | ||||
|         let oneStrength = oneAp.strength; | ||||
|         let twoStrength = twoAp.strength; | ||||
|  | ||||
|         // place stronger connections first | ||||
|         if (oneStrength != twoStrength) | ||||
| @@ -1156,6 +1164,11 @@ var NMWirelessDialog = new Lang.Class({ | ||||
|             Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor); | ||||
|             this._selectNetwork(network); | ||||
|         }); | ||||
|         network.item.actor.connect('destroy', () => { | ||||
|             let keyFocus = global.stage.key_focus; | ||||
|             if (keyFocus && keyFocus.contains(network.item.actor)) | ||||
|                 this._itemBox.grab_key_focus(); | ||||
|         }); | ||||
|     }, | ||||
| }); | ||||
|  | ||||
| @@ -1944,6 +1957,7 @@ var NMApplet = new Lang.Class({ | ||||
|         this.indicators.visible = this._client.nm_running; | ||||
|         this.menu.actor.visible = this._client.networking_enabled; | ||||
|  | ||||
|         this._updateIcon(); | ||||
|         this._syncConnectivity(); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -49,19 +49,17 @@ const BoltDeviceInterface = '<node> \ | ||||
|   </interface> \ | ||||
| </node>'; | ||||
|  | ||||
| const BoltClientProxy = Gio.DBusProxy.makeProxyWrapper(BoltClientInterface); | ||||
| const BoltDeviceProxy = Gio.DBusProxy.makeProxyWrapper(BoltDeviceInterface); | ||||
|  | ||||
| /*  */ | ||||
|  | ||||
| var Status = { | ||||
|     DISCONNECTED: 'disconnected', | ||||
|     CONNECTING: 'connecting', | ||||
|     CONNECTED: 'connected', | ||||
|     AUTHORIZING: 'authorizing', | ||||
|     AUTH_ERROR: 'auth-error', | ||||
|     AUTHORIZED: 'authorized', | ||||
|     AUTHORIZED_SECURE: 'authorized-secure', | ||||
|     AUTHORIZED_NEWKEY: 'authorized-newkey' | ||||
|     AUTHORIZED: 'authorized' | ||||
| }; | ||||
|  | ||||
| var Policy = { | ||||
| @@ -70,7 +68,7 @@ var Policy = { | ||||
|     AUTO: 'auto' | ||||
| }; | ||||
|  | ||||
| var AuthFlags = { | ||||
| var AuthCtrl = { | ||||
|     NONE: 'none', | ||||
| }; | ||||
|  | ||||
| @@ -79,6 +77,7 @@ var AuthMode = { | ||||
|     ENABLED: 'enabled' | ||||
| }; | ||||
|  | ||||
| const BOLT_DBUS_CLIENT_IFACE = 'org.freedesktop.bolt1.Manager'; | ||||
| const BOLT_DBUS_NAME = 'org.freedesktop.bolt'; | ||||
| const BOLT_DBUS_PATH = '/org/freedesktop/bolt'; | ||||
|  | ||||
| @@ -88,22 +87,26 @@ var Client = new Lang.Class({ | ||||
|     _init() { | ||||
|  | ||||
| 	this._proxy = null; | ||||
|         new BoltClientProxy( | ||||
| 	    Gio.DBus.system, | ||||
| 	    BOLT_DBUS_NAME, | ||||
| 	    BOLT_DBUS_PATH, | ||||
| 	    this._onProxyReady.bind(this) | ||||
| 	); | ||||
|         let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface); | ||||
|         Gio.DBusProxy.new(Gio.DBus.system, | ||||
|                           Gio.DBusProxyFlags.DO_NOT_AUTO_START, | ||||
|                           nodeInfo.lookup_interface(BOLT_DBUS_CLIENT_IFACE), | ||||
|                           BOLT_DBUS_NAME, | ||||
|                           BOLT_DBUS_PATH, | ||||
|                           BOLT_DBUS_CLIENT_IFACE, | ||||
|                           null, | ||||
|                           this._onProxyReady.bind(this)); | ||||
|  | ||||
| 	this.probing = false; | ||||
|     }, | ||||
|  | ||||
|     _onProxyReady(proxy, error) { | ||||
| 	if (error !== null) { | ||||
| 	    log('error creating bolt proxy: %s'.format(error.message)); | ||||
| 	    return; | ||||
| 	} | ||||
| 	this._proxy = proxy; | ||||
|     _onProxyReady(o, res) { | ||||
|         try { | ||||
| 	    this._proxy = Gio.DBusProxy.new_finish(res); | ||||
|         } catch(e) { | ||||
| 	    log('error creating bolt proxy: %s'.format(e.message)); | ||||
|             return; | ||||
|         } | ||||
| 	this._propsChangedId = this._proxy.connect('g-properties-changed', this._onPropertiesChanged.bind(this)); | ||||
| 	this._deviceAddedId = this._proxy.connectSignal('DeviceAdded', this._onDeviceAdded.bind(this)); | ||||
|  | ||||
| @@ -141,9 +144,10 @@ var Client = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     enrollDevice(id, policy, callback) { | ||||
| 	this._proxy.EnrollDeviceRemote(id, policy, AuthFlags.NONE, | ||||
| 	this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE, | ||||
|                                        (res, error) => { | ||||
| 	    if (error) { | ||||
| 		Gio.DBusError.strip_remote_error(error); | ||||
| 		callback(null, error); | ||||
| 		return; | ||||
| 	    } | ||||
| @@ -228,7 +232,7 @@ var AuthRobot = new Lang.Class({ | ||||
|  | ||||
|     _onEnrollDone(device, error) { | ||||
| 	if (error) | ||||
| 	    this.emit('enroll-failed', error, device); | ||||
| 	    this.emit('enroll-failed', device, error); | ||||
|  | ||||
| 	/* TODO: scan the list of devices to be authorized for children | ||||
| 	 *  of this device and remove them (and their children and | ||||
|   | ||||
| @@ -24,7 +24,7 @@ const EdgeDragAction = imports.ui.edgeDragAction; | ||||
| const CloseDialog = imports.ui.closeDialog; | ||||
| const SwitchMonitor = imports.ui.switchMonitor; | ||||
|  | ||||
| const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; | ||||
| var SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; | ||||
| var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2; | ||||
| var SHOW_WINDOW_ANIMATION_TIME = 0.15; | ||||
| var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1; | ||||
|   | ||||
| @@ -447,12 +447,13 @@ var WindowOverlay = new Lang.Class({ | ||||
|         this.border = new St.Bin({ style_class: 'window-clone-border' }); | ||||
|  | ||||
|         let title = new St.Label({ style_class: 'window-caption', | ||||
|                                    text: metaWindow.title }); | ||||
|                                    text: this._getCaption() }); | ||||
|         title.clutter_text.ellipsize = Pango.EllipsizeMode.END; | ||||
|         windowClone.actor.label_actor = title; | ||||
|  | ||||
|         this._updateCaptionId = metaWindow.connect('notify::title', w => { | ||||
|             this.title.text = w.title; | ||||
|             this.title.text = this._getCaption(); | ||||
|             this.relayout(false); | ||||
|         }); | ||||
|  | ||||
| @@ -565,6 +566,16 @@ var WindowOverlay = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _getCaption() { | ||||
|         let metaWindow = this._windowClone.metaWindow; | ||||
|         if (metaWindow.title) | ||||
|             return metaWindow.title; | ||||
|  | ||||
|         let tracker = Shell.WindowTracker.get_default(); | ||||
|         let app = tracker.get_window_app(metaWindow); | ||||
|         return app.get_name(); | ||||
|     }, | ||||
|  | ||||
|     _animateOverlayActor(actor, x, y, width, height) { | ||||
|         let params = { x: x, | ||||
|                        y: y, | ||||
|   | ||||
| @@ -31,7 +31,7 @@ var WORKSPACE_CUT_SIZE = 10; | ||||
|  | ||||
| var WORKSPACE_KEEP_ALIVE_TIME = 100; | ||||
|  | ||||
| const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides'; | ||||
| var OVERRIDE_SCHEMA = 'org.gnome.shell.overrides'; | ||||
|  | ||||
| /* A layout manager that requests size only for primary_actor, but then allocates | ||||
|    all using a fixed layout */ | ||||
| @@ -241,7 +241,7 @@ var WindowClone = new Lang.Class({ | ||||
| Signals.addSignalMethods(WindowClone.prototype); | ||||
|  | ||||
|  | ||||
| const ThumbnailState = { | ||||
| var ThumbnailState = { | ||||
|     NEW   :         0, | ||||
|     ANIMATING_IN :  1, | ||||
|     NORMAL:         2, | ||||
| @@ -884,6 +884,9 @@ var ThumbnailsBox = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _destroyThumbnails() { | ||||
|         if (this._thumbnails.length == 0) | ||||
|             return; | ||||
|  | ||||
|         if (this._switchWorkspaceNotifyId > 0) { | ||||
|             global.window_manager.disconnect(this._switchWorkspaceNotifyId); | ||||
|             this._switchWorkspaceNotifyId = 0; | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| project('gnome-shell', 'c', | ||||
|   version: '3.28.1', | ||||
|   version: '3.29.2', | ||||
|   meson_version: '>= 0.42.0', | ||||
|   license: 'GPLv2+' | ||||
| ) | ||||
| @@ -23,7 +23,7 @@ gi_req = '>= 1.49.1' | ||||
| gjs_req = '>= 1.47.0' | ||||
| gtk_req = '>= 3.15.0' | ||||
| json_glib_req = '>= 0.13.2' | ||||
| mutter_req = '>= 3.28.0' | ||||
| mutter_req = '>= 3.29.2' | ||||
| polkit_req = '>= 0.100' | ||||
| schemas_req = '>= 3.21.3' | ||||
| startup_req = '>= 0.11' | ||||
| @@ -31,7 +31,7 @@ ibus_req = '>= 1.5.2' | ||||
|  | ||||
| bt_req = '>= 3.9.0' | ||||
| gst_req = '>= 0.11.92' | ||||
| nm_req = '>= 0.9.8' | ||||
| nm_req = '>= 1.10.4' | ||||
| secret_req = '>= 0.18' | ||||
|  | ||||
| gnome = import('gnome') | ||||
|   | ||||
							
								
								
									
										62
									
								
								po/cs.po
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								po/cs.po
									
									
									
									
									
								
							| @@ -11,8 +11,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-02-26 12:57+0000\n" | ||||
| "PO-Revision-Date: 2018-02-26 17:57+0100\n" | ||||
| "POT-Creation-Date: 2018-04-13 19:54+0000\n" | ||||
| "PO-Revision-Date: 2018-04-24 17:32+0200\n" | ||||
| "Last-Translator: Marek Černocký <marek@manet.cz>\n" | ||||
| "Language-Team: čeština <gnome-cs-list@gnome.org>\n" | ||||
| "Language: cs\n" | ||||
| @@ -332,7 +332,7 @@ msgstr "" | ||||
| "Nastala chyba při načítání dialogového okna předvoleb pro rozšíření %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -667,12 +667,12 @@ msgstr "Přidat mezi oblíbené" | ||||
| msgid "Show Details" | ||||
| msgstr "Zobrazit podrobnosti" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s byl přidán mezi oblíbené." | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s byl odstraněn z oblíbených." | ||||
| @@ -867,7 +867,7 @@ msgstr "Externí svazek odpojen" | ||||
| msgid "Open with %s" | ||||
| msgstr "Otevřít pomocí %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Heslo:" | ||||
|  | ||||
| @@ -955,15 +955,15 @@ msgstr "Pro připojení k „%s“ je vyžadováno heslo." | ||||
| msgid "Network Manager" | ||||
| msgstr "Network Manager" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Je vyžadováno ověření" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Správce" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Ověřit" | ||||
|  | ||||
| @@ -971,7 +971,7 @@ msgstr "Ověřit" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu." | ||||
|  | ||||
| @@ -1021,7 +1021,7 @@ msgstr "Přidat světový čas…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Světové hodiny" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Počasí" | ||||
|  | ||||
| @@ -1029,7 +1029,7 @@ msgstr "Počasí" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s celý den." | ||||
| @@ -1038,7 +1038,7 @@ msgstr "%s celý den." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, později %s." | ||||
| @@ -1047,30 +1047,30 @@ msgstr "%s, později %s." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, pak %s a později %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Vybrat místo…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Načítá se…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Pocitově jako %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Připojit se kvůli informacím o počasí" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Informace o počasí nejsou nyní dostupné" | ||||
|  | ||||
| @@ -1986,16 +1986,16 @@ msgstr "Uspat do paměti" | ||||
| msgid "Power Off" | ||||
| msgstr "Vypnout" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:272 | ||||
| #: js/ui/status/thunderbolt.js:294 | ||||
| msgid "Thunderbolt" | ||||
| msgstr "Thunderbolt" | ||||
|  | ||||
| #. we are done | ||||
| #: js/ui/status/thunderbolt.js:328 | ||||
| #: js/ui/status/thunderbolt.js:350 | ||||
| msgid "Unknown Thunderbolt device" | ||||
| msgstr "Neznámé zařízení Thunderbolt" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:329 | ||||
| #: js/ui/status/thunderbolt.js:351 | ||||
| msgid "" | ||||
| "New device has been detected while you were away. Please disconnect and " | ||||
| "reconnect the device to start using it." | ||||
| @@ -2003,13 +2003,13 @@ msgstr "" | ||||
| "Zatímco jste byli pryč, bylo nalezeno nové zařízení. Odpojte jej prosím a " | ||||
| "znovu připojte, abyste jej mohli používat." | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:334 | ||||
| #: js/ui/status/thunderbolt.js:356 | ||||
| msgid "Thunderbolt authorization error" | ||||
| msgstr "Chyba ověření Thunderbolt" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:335 | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
| @@ -2233,15 +2233,3 @@ msgstr[2] "%u vstupů" | ||||
| #: subprojects/gvc/gvc-mixer-control.c:2738 | ||||
| msgid "System Sounds" | ||||
| msgstr "Systémové zvuky" | ||||
|  | ||||
| #~ msgctxt "search-result" | ||||
| #~ msgid "Power off" | ||||
| #~ msgstr "Vypnout" | ||||
|  | ||||
| #~ msgctxt "search-result" | ||||
| #~ msgid "Log out" | ||||
| #~ msgstr "Odhlásit se" | ||||
|  | ||||
| #~ msgctxt "search-result" | ||||
| #~ msgid "Switch user" | ||||
| #~ msgstr "Přepnout uživatele" | ||||
|   | ||||
							
								
								
									
										51
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								po/es.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell.master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-02-22 09:24+0000\n" | ||||
| "PO-Revision-Date: 2018-02-23 08:26+0100\n" | ||||
| "POT-Creation-Date: 2018-04-13 19:54+0000\n" | ||||
| "PO-Revision-Date: 2018-04-25 12:54+0200\n" | ||||
| "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" | ||||
| "Language-Team: es <gnome-es-list@gnome.org>\n" | ||||
| "Language: es\n" | ||||
| @@ -346,7 +346,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Hubo un error al lanzar el diálogo de preferencias para %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -665,12 +665,12 @@ msgstr "Añadir a los favoritos" | ||||
| msgid "Show Details" | ||||
| msgstr "Mostrar detalles" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "Se ha añadido %s a sus favoritos." | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "Se ha quitado %s de sus favoritos." | ||||
| @@ -865,7 +865,7 @@ msgstr "Dispositivo externo desconectado" | ||||
| msgid "Open with %s" | ||||
| msgstr "Abrir con %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Contraseña:" | ||||
|  | ||||
| @@ -953,15 +953,15 @@ msgstr "Se requiere una contraseña para conectarse a «%s»." | ||||
| msgid "Network Manager" | ||||
| msgstr "Gestor de la red" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Se necesita autenticación" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Administrador" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Autenticar" | ||||
|  | ||||
| @@ -969,7 +969,7 @@ msgstr "Autenticar" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Eso no ha funcionado. Inténtelo de nuevo." | ||||
|  | ||||
| @@ -1017,7 +1017,7 @@ msgstr "Añadir relojes del mundo…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Relojes del mundo" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Meteorología" | ||||
|  | ||||
| @@ -1025,7 +1025,7 @@ msgstr "Meteorología" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s todo el día." | ||||
| @@ -1034,7 +1034,7 @@ msgstr "%s todo el día." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, luego %s." | ||||
| @@ -1043,30 +1043,30 @@ msgstr "%s, luego %s." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, luego %s seguido de %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Seleccionar ubicación…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Cargando…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Sensación térmica de %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Conectarse para obtener la información meteorológica" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "La información meteorológica no está disponible actualmente." | ||||
|  | ||||
| @@ -1968,16 +1968,16 @@ msgstr "Suspender" | ||||
| msgid "Power Off" | ||||
| msgstr "Apagar" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:272 | ||||
| #: js/ui/status/thunderbolt.js:294 | ||||
| msgid "Thunderbolt" | ||||
| msgstr "Thunderbolt" | ||||
|  | ||||
| #. we are done | ||||
| #: js/ui/status/thunderbolt.js:328 | ||||
| #: js/ui/status/thunderbolt.js:350 | ||||
| msgid "Unknown Thunderbolt device" | ||||
| msgstr "Dispositivo Thunderbolt desconocido" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:329 | ||||
| #: js/ui/status/thunderbolt.js:351 | ||||
| msgid "" | ||||
| "New device has been detected while you were away. Please disconnect and " | ||||
| "reconnect the device to start using it." | ||||
| @@ -1985,13 +1985,14 @@ msgstr "" | ||||
| "Se ha detectado un dispositivo nuevo mientras estaba fuera. Desconéctelo y " | ||||
| "vuélvalo a conectar para empezar a usarlo." | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:334 | ||||
| #: js/ui/status/thunderbolt.js:356 | ||||
| msgid "Thunderbolt authorization error" | ||||
| msgstr "Error de autorización de Thunderbolt" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:335 | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| #| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
|   | ||||
							
								
								
									
										46
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								po/pt_BR.po
									
									
									
									
									
								
							| @@ -15,22 +15,22 @@ | ||||
| # Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2014. | ||||
| # Felipe Braga <fbobraga@gmail.com>, 2015. | ||||
| # Artur de Aquino Morais <artur.morais93@outlook.com>, 2016. | ||||
| # Rafael Fontenelle <rafaelff@gnome.org>, 2013-2017. | ||||
| # Rafael Fontenelle <rafaelff@gnome.org>, 2013-2018. | ||||
| # Enrico Nicoletto <liverig@gmail.com>, 2013-2018. | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-03-16 21:34+0000\n" | ||||
| "PO-Revision-Date: 2018-02-09 21:52-0200\n" | ||||
| "Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n" | ||||
| "POT-Creation-Date: 2018-04-13 18:31+0000\n" | ||||
| "PO-Revision-Date: 2018-05-02 15:45-0200\n" | ||||
| "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" | ||||
| "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" | ||||
| "Language: pt_BR\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "X-Generator: Virtaal 1.0.0-beta1\n" | ||||
| "X-Project-Style: gnome\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| @@ -356,7 +356,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -642,7 +642,7 @@ msgstr "Negar acesso" | ||||
|  | ||||
| #: js/ui/accessDialog.js:64 js/ui/status/location.js:396 | ||||
| msgid "Grant Access" | ||||
| msgstr "Garantir acesso" | ||||
| msgstr "Conceder acesso" | ||||
|  | ||||
| #: js/ui/appDisplay.js:793 | ||||
| msgid "Frequently used applications will appear here" | ||||
| @@ -676,12 +676,12 @@ msgstr "Adicionar aos favoritos" | ||||
| msgid "Show Details" | ||||
| msgstr "Mostrar detalhes" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s foi adicionado aos seus favoritos." | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s foi removido dos seus favoritos." | ||||
| @@ -876,7 +876,7 @@ msgstr "Unidade externa desconectada" | ||||
| msgid "Open with %s" | ||||
| msgstr "Abrir com %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Senha:" | ||||
|  | ||||
| @@ -964,15 +964,15 @@ msgstr "Uma senha é necessária para se conectar a “%s”." | ||||
| msgid "Network Manager" | ||||
| msgstr "Gerenciador de rede" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Autenticação necessária" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Administrador" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Autenticação" | ||||
|  | ||||
| @@ -980,7 +980,7 @@ msgstr "Autenticação" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Desculpe, isto não funcionou. Por favor, tente novamente." | ||||
|  | ||||
| @@ -1028,7 +1028,7 @@ msgstr "Adicionar relógios mundiais…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Relógios mundiais" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Meteorologia" | ||||
|  | ||||
| @@ -1036,7 +1036,7 @@ msgstr "Meteorologia" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s por todo o dia." | ||||
| @@ -1045,7 +1045,7 @@ msgstr "%s por todo o dia." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, depois %s mais tarde." | ||||
| @@ -1054,30 +1054,30 @@ msgstr "%s, depois %s mais tarde." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, depois %s, seguido de %s mais tarde." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Selecione uma localização…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Carregando…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Sensação térmica de %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Conecte-se à internet para obter as informações meteorológicas" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "No momento as informações meteorológicas não estão disponíveis" | ||||
|  | ||||
|   | ||||
							
								
								
									
										40
									
								
								po/ru.po
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								po/ru.po
									
									
									
									
									
								
							| @@ -18,8 +18,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-04-12 11:47+0000\n" | ||||
| "PO-Revision-Date: 2018-04-12 16:48+0300\n" | ||||
| "POT-Creation-Date: 2018-04-13 18:31+0000\n" | ||||
| "PO-Revision-Date: 2018-04-19 23:31+0300\n" | ||||
| "Last-Translator: Stas Solovey <whats_up@tut.by>\n" | ||||
| "Language-Team: Русский <gnome-cyr@gnome.org>\n" | ||||
| "Language: ru\n" | ||||
| @@ -344,7 +344,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Возникла ошибка загрузки диалогового окна параметров для %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:149 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -563,7 +563,6 @@ msgstr "Вчера, %H∶%M" | ||||
| msgid "%A, %H∶%M" | ||||
| msgstr "%A, %H∶%M" | ||||
|  | ||||
| # fix даты "11 мар., 20:35" | ||||
| #. Translators: this is the month name and day number | ||||
| #. followed by a time string in 24h format. | ||||
| #. i.e. "May 25, 14:30" | ||||
| @@ -572,7 +571,6 @@ msgstr "%A, %H∶%M" | ||||
| msgid "%B %d, %H∶%M" | ||||
| msgstr "%-d %B, %H∶%M" | ||||
|  | ||||
| # fix даты | ||||
| #. Translators: this is the month name, day number, year | ||||
| #. number followed by a time string in 24h format. | ||||
| #. i.e. "May 25 2012, 14:30" | ||||
| @@ -581,7 +579,6 @@ msgstr "%-d %B, %H∶%M" | ||||
| msgid "%B %d %Y, %H∶%M" | ||||
| msgstr "%-d %B %Y, %H∶%M" | ||||
|  | ||||
| # по всей видимости разрабы коммент перепутали c "Translators: Time in 12h format" | ||||
| #. Translators: Time in 12h format | ||||
| #: js/misc/util.js:257 | ||||
| msgid "%l∶%M %p" | ||||
| @@ -823,7 +820,6 @@ msgctxt "calendar heading" | ||||
| msgid "%A, %B %d" | ||||
| msgstr "%A, %-d %B" | ||||
|  | ||||
| # fix для даты в календаре и на экране блокировки | ||||
| #: js/ui/calendar.js:868 | ||||
| msgctxt "calendar heading" | ||||
| msgid "%A, %B %d, %Y" | ||||
| @@ -876,7 +872,7 @@ msgstr "Внешний диск отключён" | ||||
| msgid "Open with %s" | ||||
| msgstr "Открыть с помощью %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:285 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Пароль:" | ||||
|  | ||||
| @@ -963,15 +959,15 @@ msgstr "Для подключения к «%s» требуется пароль. | ||||
| msgid "Network Manager" | ||||
| msgstr "Диспетчер сети" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:44 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Требуется подтверждение подлинности" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:72 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Администратор" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:152 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Подтвердить" | ||||
|  | ||||
| @@ -979,7 +975,7 @@ msgstr "Подтвердить" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:271 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Не удалось подтвердить подлинность. Попробуйте снова." | ||||
|  | ||||
| @@ -1004,7 +1000,6 @@ msgstr "Показать приложения" | ||||
| msgid "Dash" | ||||
| msgstr "Панель приложений" | ||||
|  | ||||
| # fix для даты в календаре и на экране блокировки | ||||
| #. Translators: This is the date format to use when the calendar popup is | ||||
| #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). | ||||
| #. | ||||
| @@ -1012,7 +1007,6 @@ msgstr "Панель приложений" | ||||
| msgid "%B %e %Y" | ||||
| msgstr "%-d %B %Y" | ||||
|  | ||||
| # fix для даты в календаре и на экране блокировки | ||||
| #. Translators: This is the accessible name of the date button shown | ||||
| #. * below the time in the shell; it should combine the weekday and the | ||||
| #. * date, e.g. "Tuesday February 17 2015". | ||||
| @@ -1029,7 +1023,7 @@ msgstr "Добавить мировые часы…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Мировые часы" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Погода" | ||||
|  | ||||
| @@ -1037,7 +1031,7 @@ msgstr "Погода" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s весь день." | ||||
| @@ -1046,7 +1040,7 @@ msgstr "%s весь день." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, затем позднее %s." | ||||
| @@ -1055,30 +1049,30 @@ msgstr "%s, затем позднее %s." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, затем %s, позже %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Выберите местоположение…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Загрузка…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Ощущается как %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Подключите интернет для получения информации о погоде" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Информация о погоде сейчас недоступна" | ||||
|  | ||||
|   | ||||
							
								
								
									
										87
									
								
								po/sl.po
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								po/sl.po
									
									
									
									
									
								
							| @@ -8,8 +8,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-03-18 10:36+0000\n" | ||||
| "PO-Revision-Date: 2018-03-19 21:42+0100\n" | ||||
| "POT-Creation-Date: 2018-04-17 15:11+0000\n" | ||||
| "PO-Revision-Date: 2018-04-17 18:32+0200\n" | ||||
| "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" | ||||
| "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" | ||||
| "Language: sl\n" | ||||
| @@ -66,19 +66,19 @@ msgstr "Upravljanje oken in zaganjanje programov" | ||||
| msgid "Enable internal tools useful for developers and testers from Alt-F2" | ||||
| msgstr "" | ||||
| "Omogoči dostop do orodij razvijalcev in preizkuševalcev programske opreme " | ||||
| "preko Alt-F2 vnosnega polja." | ||||
| "prek vnosnega polja Alt-F2." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:9 | ||||
| msgid "" | ||||
| "Allows access to internal debugging and monitoring tools using the Alt-F2 " | ||||
| "dialog." | ||||
| msgstr "" | ||||
| "Dovoli dostop do razhroščevanja in drugih orodij nadzora preko Alt-F2 " | ||||
| "vnosnega polja." | ||||
| "Dovoli dostop do razhroščevanja in drugih orodij nadzora prek vnosnega polja " | ||||
| "Alt-F2." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:16 | ||||
| msgid "UUIDs of extensions to enable" | ||||
| msgstr "Določila UUID razširitev, ki bodo omogočene" | ||||
| msgstr "Določila razširitev UUID, ki bodo omogočene" | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:17 | ||||
| msgid "" | ||||
| @@ -87,10 +87,9 @@ msgid "" | ||||
| "list. You can also manipulate this list with the EnableExtension and " | ||||
| "DisableExtension D-Bus methods on org.gnome.Shell." | ||||
| msgstr "" | ||||
| "Razširitve lupine GNOME imajo določila UUID; ključ določa seznam razširitev, " | ||||
| "ki bodo naložene. Razširitev, ki se naj naloži, mora biti zavedena na tem " | ||||
| "seznamu. Upravljanje seznama je mogoče tudi preko vodila D-BUs na org.gnome." | ||||
| "Shell." | ||||
| "Razširitve lupine GNOME imajo nastavljeno določilo UUID; ključ določa seznam " | ||||
| "razširitev, ki naj bodo naložene ob zagonu. Upravljanje seznama je mogoče " | ||||
| "tudi prek vodila D-BUs na org.gnome.Shell." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:26 | ||||
| msgid "Disable user extensions" | ||||
| @@ -115,8 +114,8 @@ msgid "" | ||||
| "load all extensions regardless of the versions they claim to support." | ||||
| msgstr "" | ||||
| "Lupina GNOME naloži le razširitve, ki so skladne z nameščeno različico. " | ||||
| "Izbrana možnost onemogoči preverjanje skladnosti, zato so lahko naložene " | ||||
| "tudi razširitve, katerih skladnost ni potrjena." | ||||
| "Izbrana možnost onemogoči preverjanje, zato so lahko naložene tudi " | ||||
| "razširitve, katerih skladnost ni potrjena." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:43 | ||||
| msgid "List of desktop file IDs for favorite applications" | ||||
| @@ -127,7 +126,7 @@ msgid "" | ||||
| "The applications corresponding to these identifiers will be displayed in the " | ||||
| "favorites area." | ||||
| msgstr "" | ||||
| "Programi določeni s temi določili bodo prikazani v območju priljubljenih " | ||||
| "Programi, ki ustrezajo določilom, bodo prikazani v polju priljubljenih " | ||||
| "programov" | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:51 | ||||
| @@ -145,18 +144,18 @@ msgstr "Zgodovina pogovornega okna ukazov (Alt-F2)" | ||||
| #. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass | ||||
| #: data/org.gnome.shell.gschema.xml.in:63 | ||||
| msgid "History for the looking glass dialog" | ||||
| msgstr "Zgodovina za pogovorno okno povečevalnega stekla" | ||||
| msgstr "Zgodovina za pogovorno okno povečevala" | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:67 | ||||
| msgid "Always show the “Log out” menu item in the user menu." | ||||
| msgstr "Vedno pokaži možnost »Odjava« v uporabniškem meniju." | ||||
| msgstr "Vedno pokaži možnost »Odjave« v uporabniškem meniju." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:68 | ||||
| msgid "" | ||||
| "This key overrides the automatic hiding of the “Log out” menu item in single-" | ||||
| "user, single-session situations." | ||||
| msgstr "" | ||||
| "Izbira prepiše možnost samodejnega skrivanja predmeta »Odjava« na sistemskem " | ||||
| "Izbira prepiše možnost samodejnega skrivanja gumba za »Odjavo« na sistemskem " | ||||
| "meniju pri eno-uporabniškem in eno-sejnem zagonu." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:75 | ||||
| @@ -174,8 +173,8 @@ msgid "" | ||||
| "state of the checkbox." | ||||
| msgstr "" | ||||
| "Za priklop oddaljenega datotečnega sistema ali šifrirane naprave bo po " | ||||
| "izbiri možnosti zahtevano geslo. Na pogovornem oknu bo prikazana možnost " | ||||
| "»Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja." | ||||
| "izbiri podana zahteva za vnos gesla. Na pogovornem oknu bo prikazana tudi " | ||||
| "možnost »Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja." | ||||
|  | ||||
| #: data/org.gnome.shell.gschema.xml.in:85 | ||||
| msgid "" | ||||
| @@ -333,7 +332,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnostmi za %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -664,12 +663,12 @@ msgstr "Dodaj med priljubljene" | ||||
| msgid "Show Details" | ||||
| msgstr "Pokaži besedilo" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "Program »%s« je dodan med priljubljeno." | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "Program »%s« je odstranjen iz priljubljenih." | ||||
| @@ -840,7 +839,7 @@ msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "" | ||||
| "Lahko še malo počakate, če začne morda program spet delovati, ali pa vsilite " | ||||
| "Lahko počakate, če se program morda začne spet odzivati, lahko pa vsilite " | ||||
| "končanje delovanja." | ||||
|  | ||||
| #: js/ui/closeDialog.js:61 | ||||
| @@ -864,13 +863,13 @@ msgstr "Zunanji pogon je odklopljen" | ||||
| msgid "Open with %s" | ||||
| msgstr "Odpri s programom %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Geslo:" | ||||
|  | ||||
| #: js/ui/components/keyring.js:140 | ||||
| msgid "Type again:" | ||||
| msgstr "Vpišite znova:" | ||||
| msgstr "Ponovni vpis:" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:112 js/ui/status/network.js:245 | ||||
| #: js/ui/status/network.js:336 js/ui/status/network.js:922 | ||||
| @@ -887,19 +886,19 @@ msgstr "Geslo:" | ||||
| #. static WEP | ||||
| #: js/ui/components/networkAgent.js:210 | ||||
| msgid "Key: " | ||||
| msgstr "Ključ:" | ||||
| msgstr "Ključ: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:249 | ||||
| msgid "Identity: " | ||||
| msgstr "_Istovetnost:" | ||||
| msgstr "_Istovetnost: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:251 | ||||
| msgid "Private key password: " | ||||
| msgstr "Geslo zasebnega ključa:" | ||||
| msgstr "Geslo zasebnega ključa: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:263 | ||||
| msgid "Service: " | ||||
| msgstr "Storitev:" | ||||
| msgstr "Storitev: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659 | ||||
| msgid "Authentication required by wireless network" | ||||
| @@ -920,7 +919,7 @@ msgstr "Žična overitev 802.1X" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:299 | ||||
| msgid "Network name: " | ||||
| msgstr "Naziv omrežja:" | ||||
| msgstr "Naziv omrežja: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667 | ||||
| msgid "DSL authentication" | ||||
| @@ -952,15 +951,15 @@ msgstr "Za povezavo z omrežjem »%s« je zahtevano geslo." | ||||
| msgid "Network Manager" | ||||
| msgstr "Upravljalnik omrežij" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Zahtevana je overitev" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Skrbnik" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Overi" | ||||
|  | ||||
| @@ -968,7 +967,7 @@ msgstr "Overi" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Overitev je spodletela.. Poskusite znova." | ||||
|  | ||||
| @@ -1016,7 +1015,7 @@ msgstr "Dodaj svetovni čas ..." | ||||
| msgid "World Clocks" | ||||
| msgstr "Svetovni časi" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Vreme" | ||||
|  | ||||
| @@ -1024,7 +1023,7 @@ msgstr "Vreme" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s – ves dan." | ||||
| @@ -1033,7 +1032,7 @@ msgstr "%s – ves dan." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, sledi %s." | ||||
| @@ -1042,30 +1041,30 @@ msgstr "%s, sledi %s." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, sledi %s, kasneje tudi %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Izbor mesta ..." | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Poteka nalaganje ..." | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Občuti se kot %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Preglej splet za podrobnosti o vremenu." | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Podatki o vremenu trenutno niso na voljo." | ||||
|  | ||||
| @@ -2014,8 +2013,8 @@ msgstr "Napaka overitve naprave Thunderbolt" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgstr "Naprave thunderbolt ni mogoče overiti: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "Naprave Thunderbolt ni mogoče overiti: %s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
| msgid "Volume changed" | ||||
|   | ||||
							
								
								
									
										52
									
								
								po/sv.po
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								po/sv.po
									
									
									
									
									
								
							| @@ -11,8 +11,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-02-21 14:13+0000\n" | ||||
| "PO-Revision-Date: 2018-02-22 15:56+0100\n" | ||||
| "POT-Creation-Date: 2018-04-13 19:54+0000\n" | ||||
| "PO-Revision-Date: 2018-05-20 19:24+0200\n" | ||||
| "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" | ||||
| "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" | ||||
| "Language: sv\n" | ||||
| @@ -20,7 +20,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "X-Generator: Poedit 2.0.7\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| msgid "System" | ||||
| @@ -332,7 +332,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Det uppstod ett fel vid inläsning av inställningsdialogen för %s:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -652,12 +652,12 @@ msgstr "Lägg till som favorit" | ||||
| msgid "Show Details" | ||||
| msgstr "Visa detaljer" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s har lagts till i dina favoriter." | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s har tagits bort från dina favoriter." | ||||
| @@ -852,7 +852,7 @@ msgstr "Extern disk frånkopplad" | ||||
| msgid "Open with %s" | ||||
| msgstr "Öppna med %s" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "Lösenord:" | ||||
|  | ||||
| @@ -940,15 +940,15 @@ msgstr "Ett lösenord krävs för att ansluta till ”%s”." | ||||
| msgid "Network Manager" | ||||
| msgstr "Nätverkshanterare" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "Autentisering krävs" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "Administratör" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "Autentisera" | ||||
|  | ||||
| @@ -956,7 +956,7 @@ msgstr "Autentisera" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "Tyvärr, det fungerade inte. Försök igen." | ||||
|  | ||||
| @@ -1004,7 +1004,7 @@ msgstr "Lägg till världsklockor…" | ||||
| msgid "World Clocks" | ||||
| msgstr "Världsklockor" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "Väder" | ||||
|  | ||||
| @@ -1012,7 +1012,7 @@ msgstr "Väder" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "%s hela dagen." | ||||
| @@ -1021,7 +1021,7 @@ msgstr "%s hela dagen." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s, sedan %s senare." | ||||
| @@ -1030,30 +1030,30 @@ msgstr "%s, sedan %s senare." | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s, sedan %s, följt av %s senare." | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "Välj en plats…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "Läser in…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "Känns som %s." | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "Anslut till nätet för väderinformation" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "Väderinformation är för närvarande inte tillgänglig" | ||||
|  | ||||
| @@ -1953,16 +1953,16 @@ msgstr "Vänteläge" | ||||
| msgid "Power Off" | ||||
| msgstr "Stäng av" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:272 | ||||
| #: js/ui/status/thunderbolt.js:294 | ||||
| msgid "Thunderbolt" | ||||
| msgstr "Thunderbolt" | ||||
|  | ||||
| #. we are done | ||||
| #: js/ui/status/thunderbolt.js:328 | ||||
| #: js/ui/status/thunderbolt.js:350 | ||||
| msgid "Unknown Thunderbolt device" | ||||
| msgstr "Okänd Thunderbolt-enhet" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:329 | ||||
| #: js/ui/status/thunderbolt.js:351 | ||||
| msgid "" | ||||
| "New device has been detected while you were away. Please disconnect and " | ||||
| "reconnect the device to start using it." | ||||
| @@ -1970,13 +1970,13 @@ msgstr "" | ||||
| "En ny enhet har upptäckts medan du var borta. Koppla från och anslut enheten " | ||||
| "igen för att börja använda den." | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:334 | ||||
| #: js/ui/status/thunderbolt.js:356 | ||||
| msgid "Thunderbolt authorization error" | ||||
| msgstr "Thunderbolt-auktoriseringsfel" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:335 | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "Kunde inte auktorisera Thunderbolt-enheten: %s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
|   | ||||
							
								
								
									
										44
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								po/zh_CN.po
									
									
									
									
									
								
							| @@ -23,16 +23,16 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-03-05 21:11+0000\n" | ||||
| "PO-Revision-Date: 2018-02-15 01:42+0800\n" | ||||
| "Last-Translator: Dingzhong Chen <wsxy162@gmail.com>\n" | ||||
| "POT-Creation-Date: 2018-04-13 19:54+0000\n" | ||||
| "PO-Revision-Date: 2018-05-10 12:11-0500\n" | ||||
| "Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n" | ||||
| "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" | ||||
| "Language: zh_CN\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
| "X-Generator: Gtranslator 2.91.7\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| msgid "System" | ||||
| @@ -320,7 +320,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "载入 %s 的首选项对话框时出错:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -631,12 +631,12 @@ msgstr "添加到收藏夹" | ||||
| msgid "Show Details" | ||||
| msgstr "显示细节" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s 已经添加到了您的收藏夹。" | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s 已经从您的收藏夹移除。" | ||||
| @@ -829,7 +829,7 @@ msgstr "外部驱动器已断开" | ||||
| msgid "Open with %s" | ||||
| msgstr "使用 %s 打开" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295 | ||||
| msgid "Password:" | ||||
| msgstr "密码:" | ||||
|  | ||||
| @@ -915,15 +915,15 @@ msgstr "连接到“%s”需要密码。" | ||||
| msgid "Network Manager" | ||||
| msgstr "网络管理器" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "需要认证" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "管理员" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "认证" | ||||
|  | ||||
| @@ -932,7 +932,7 @@ msgstr "认证" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "抱歉,认证失败。请重试。" | ||||
|  | ||||
| @@ -980,7 +980,7 @@ msgstr "添加世界时钟…" | ||||
| msgid "World Clocks" | ||||
| msgstr "世界时钟" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "天气" | ||||
|  | ||||
| @@ -988,7 +988,7 @@ msgstr "天气" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "全天%s。" | ||||
| @@ -997,7 +997,7 @@ msgstr "全天%s。" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s转%s。" | ||||
| @@ -1006,30 +1006,30 @@ msgstr "%s转%s。" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s转%s,随后转%s。" | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "选择地点…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "正在载入…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "体感温度 %s。" | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "通过互联网查看天气信息" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "天气信息目前不可用" | ||||
|  | ||||
| @@ -1930,7 +1930,7 @@ msgstr "Thunderbolt 授权错误" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "无法授权 Thunderbolt 设备:%s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
|   | ||||
							
								
								
									
										134
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								po/zh_TW.po
									
									
									
									
									
								
							| @@ -8,8 +8,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell 3.3.90\n" | ||||
| "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" | ||||
| "POT-Creation-Date: 2018-03-05 21:11+0000\n" | ||||
| "PO-Revision-Date: 2018-03-10 20:30+0800\n" | ||||
| "POT-Creation-Date: 2018-06-08 17:30+0000\n" | ||||
| "PO-Revision-Date: 2018-06-09 11:17+0800\n" | ||||
| "Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n" | ||||
| "Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n" | ||||
| "Language: zh_TW\n" | ||||
| @@ -17,7 +17,7 @@ msgstr "" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "X-Generator: Poedit 2.0.8\n" | ||||
|  | ||||
| #: data/50-gnome-shell-system.xml:6 | ||||
| msgid "System" | ||||
| @@ -308,7 +308,7 @@ msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "載入 %s 的偏好設定對話盒時發生錯誤:" | ||||
|  | ||||
| #: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148 | ||||
| #: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153 | ||||
| #: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197 | ||||
| #: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919 | ||||
| msgid "Cancel" | ||||
| @@ -328,20 +328,20 @@ msgctxt "button" | ||||
| msgid "Sign In" | ||||
| msgstr "登入" | ||||
|  | ||||
| #: js/gdm/loginDialog.js:315 | ||||
| #: js/gdm/loginDialog.js:319 | ||||
| msgid "Choose Session" | ||||
| msgstr "選擇工作階段" | ||||
|  | ||||
| #. translators: this message is shown below the user list on the | ||||
| #. login screen. It can be activated to reveal an entry for | ||||
| #. manually entering the username. | ||||
| #: js/gdm/loginDialog.js:458 | ||||
| #: js/gdm/loginDialog.js:462 | ||||
| msgid "Not listed?" | ||||
| msgstr "沒有列出來?" | ||||
|  | ||||
| #. Translators: this message is shown below the username entry field | ||||
| #. to clue the user in on how to login to the local network realm | ||||
| #: js/gdm/loginDialog.js:887 | ||||
| #: js/gdm/loginDialog.js:891 | ||||
| #, javascript-format | ||||
| msgid "(e.g., user or %s)" | ||||
| msgstr "(例如: user 或 %s)" | ||||
| @@ -349,12 +349,12 @@ msgstr "(例如: user 或 %s)" | ||||
| #. TTLS and PEAP are actually much more complicated, but this complication | ||||
| #. is not visible here since we only care about phase2 authentication | ||||
| #. (and don't even care of which one) | ||||
| #: js/gdm/loginDialog.js:892 js/ui/components/networkAgent.js:243 | ||||
| #: js/gdm/loginDialog.js:896 js/ui/components/networkAgent.js:243 | ||||
| #: js/ui/components/networkAgent.js:261 | ||||
| msgid "Username: " | ||||
| msgstr "使用者名稱:" | ||||
|  | ||||
| #: js/gdm/loginDialog.js:1228 | ||||
| #: js/gdm/loginDialog.js:1234 | ||||
| msgid "Login Window" | ||||
| msgstr "登入視窗" | ||||
|  | ||||
| @@ -601,32 +601,32 @@ msgstr "常用" | ||||
| msgid "All" | ||||
| msgstr "全部" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1886 | ||||
| #: js/ui/appDisplay.js:1889 | ||||
| msgid "New Window" | ||||
| msgstr "新視窗" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1900 | ||||
| #: js/ui/appDisplay.js:1903 | ||||
| msgid "Launch using Dedicated Graphics Card" | ||||
| msgstr "使用獨立顯卡啟動" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1927 js/ui/dash.js:285 | ||||
| #: js/ui/appDisplay.js:1930 js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "自喜好中移除" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1933 | ||||
| #: js/ui/appDisplay.js:1936 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "加入喜好" | ||||
|  | ||||
| #: js/ui/appDisplay.js:1943 | ||||
| #: js/ui/appDisplay.js:1946 | ||||
| msgid "Show Details" | ||||
| msgstr "顯示詳細資訊" | ||||
|  | ||||
| #: js/ui/appFavorites.js:138 | ||||
| #: js/ui/appFavorites.js:140 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s 已加入您的喜好中。" | ||||
|  | ||||
| #: js/ui/appFavorites.js:172 | ||||
| #: js/ui/appFavorites.js:174 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s 已經從您的喜好中移除。" | ||||
| @@ -787,22 +787,22 @@ msgid "Clear All" | ||||
| msgstr "全部清除" | ||||
|  | ||||
| #. Translators: %s is an application name | ||||
| #: js/ui/closeDialog.js:44 | ||||
| #: js/ui/closeDialog.js:47 | ||||
| #, javascript-format | ||||
| msgid "“%s” is not responding." | ||||
| msgstr "「%s」沒有回應。" | ||||
|  | ||||
| #: js/ui/closeDialog.js:45 | ||||
| #: js/ui/closeDialog.js:48 | ||||
| msgid "" | ||||
| "You may choose to wait a short while for it to continue or force the " | ||||
| "application to quit entirely." | ||||
| msgstr "您可以選擇再等一下讓它繼續,或是強制讓應用程式立刻退出。" | ||||
|  | ||||
| #: js/ui/closeDialog.js:61 | ||||
| #: js/ui/closeDialog.js:64 | ||||
| msgid "Force Quit" | ||||
| msgstr "強制退出" | ||||
|  | ||||
| #: js/ui/closeDialog.js:64 | ||||
| #: js/ui/closeDialog.js:67 | ||||
| msgid "Wait" | ||||
| msgstr "等待" | ||||
|  | ||||
| @@ -819,7 +819,7 @@ msgstr "外部裝置已拔除" | ||||
| msgid "Open with %s" | ||||
| msgstr "用 %s 開啟" | ||||
|  | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284 | ||||
| #: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:297 | ||||
| msgid "Password:" | ||||
| msgstr "密碼: " | ||||
|  | ||||
| @@ -856,18 +856,18 @@ msgstr "私密金鑰密碼:" | ||||
| msgid "Service: " | ||||
| msgstr "服務:" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659 | ||||
| #: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:664 | ||||
| msgid "Authentication required by wireless network" | ||||
| msgstr "無線網路所需要的核對" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:660 | ||||
| #: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:665 | ||||
| #, javascript-format | ||||
| msgid "" | ||||
| "Passwords or encryption keys are required to access the wireless network " | ||||
| "“%s”." | ||||
| msgstr "需要密碼或是加密金鑰來存取無線網路「%s」。" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:297 js/ui/components/networkAgent.js:663 | ||||
| #: js/ui/components/networkAgent.js:297 js/ui/components/networkAgent.js:668 | ||||
| msgid "Wired 802.1X authentication" | ||||
| msgstr "有線網路 802.1X 核對" | ||||
|  | ||||
| @@ -875,15 +875,15 @@ msgstr "有線網路 802.1X 核對" | ||||
| msgid "Network name: " | ||||
| msgstr "網路名稱:" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667 | ||||
| #: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:672 | ||||
| msgid "DSL authentication" | ||||
| msgstr "DSL 核對" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:673 | ||||
| #: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:678 | ||||
| msgid "PIN code required" | ||||
| msgstr "需要 PIN 碼" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:674 | ||||
| #: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:679 | ||||
| msgid "PIN code is needed for the mobile broadband device" | ||||
| msgstr "這個行動寬頻裝置需要 PIN 碼" | ||||
|  | ||||
| @@ -891,29 +891,29 @@ msgstr "這個行動寬頻裝置需要 PIN 碼" | ||||
| msgid "PIN: " | ||||
| msgstr "PIN: " | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:680 | ||||
| #: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:685 | ||||
| msgid "Mobile broadband network password" | ||||
| msgstr "行動寬頻網路密碼" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:664 | ||||
| #: js/ui/components/networkAgent.js:668 js/ui/components/networkAgent.js:681 | ||||
| #: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:669 | ||||
| #: js/ui/components/networkAgent.js:673 js/ui/components/networkAgent.js:686 | ||||
| #, javascript-format | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "連線至「%s」需要密碼。" | ||||
|  | ||||
| #: js/ui/components/networkAgent.js:648 js/ui/status/network.js:1691 | ||||
| #: js/ui/components/networkAgent.js:653 js/ui/status/network.js:1704 | ||||
| msgid "Network Manager" | ||||
| msgstr "網路管理員" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:43 | ||||
| #: js/ui/components/polkitAgent.js:48 | ||||
| msgid "Authentication Required" | ||||
| msgstr "要求核對" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:71 | ||||
| #: js/ui/components/polkitAgent.js:76 | ||||
| msgid "Administrator" | ||||
| msgstr "管理員" | ||||
|  | ||||
| #: js/ui/components/polkitAgent.js:151 | ||||
| #: js/ui/components/polkitAgent.js:156 | ||||
| msgid "Authenticate" | ||||
| msgstr "核對" | ||||
|  | ||||
| @@ -921,7 +921,7 @@ msgstr "核對" | ||||
| #. * requested authentication was not gained; this can happen | ||||
| #. * because of an authentication error (like invalid password), | ||||
| #. * for instance. | ||||
| #: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327 | ||||
| #: js/ui/components/polkitAgent.js:283 js/ui/shellMountOperation.js:327 | ||||
| msgid "Sorry, that didn’t work. Please try again." | ||||
| msgstr "抱歉,那沒有作用。請再試一次。" | ||||
|  | ||||
| @@ -969,7 +969,7 @@ msgstr "加入世界時鐘…" | ||||
| msgid "World Clocks" | ||||
| msgstr "世界時鐘" | ||||
|  | ||||
| #: js/ui/dateMenu.js:225 | ||||
| #: js/ui/dateMenu.js:227 | ||||
| msgid "Weather" | ||||
| msgstr "天氣" | ||||
|  | ||||
| @@ -977,7 +977,7 @@ msgstr "天氣" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:289 | ||||
| #: js/ui/dateMenu.js:291 | ||||
| #, javascript-format | ||||
| msgid "%s all day." | ||||
| msgstr "全天%s。" | ||||
| @@ -986,7 +986,7 @@ msgstr "全天%s。" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:295 | ||||
| #: js/ui/dateMenu.js:297 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s later." | ||||
| msgstr "%s,較晚%s。" | ||||
| @@ -995,30 +995,30 @@ msgstr "%s,較晚%s。" | ||||
| #. libgweather for the possible condition strings. If at all | ||||
| #. possible, the sentence should match the grammatical case etc. of | ||||
| #. the inserted conditions. | ||||
| #: js/ui/dateMenu.js:301 | ||||
| #: js/ui/dateMenu.js:303 | ||||
| #, javascript-format | ||||
| msgid "%s, then %s, followed by %s later." | ||||
| msgstr "%s,然後%s,接著較晚%s。" | ||||
|  | ||||
| #: js/ui/dateMenu.js:312 | ||||
| #: js/ui/dateMenu.js:314 | ||||
| msgid "Select a location…" | ||||
| msgstr "選擇位置…" | ||||
|  | ||||
| #: js/ui/dateMenu.js:315 | ||||
| #: js/ui/dateMenu.js:317 | ||||
| msgid "Loading…" | ||||
| msgstr "載入中…" | ||||
|  | ||||
| #. Translators: %s is a temperature with unit, e.g. "23℃" | ||||
| #: js/ui/dateMenu.js:321 | ||||
| #: js/ui/dateMenu.js:323 | ||||
| #, javascript-format | ||||
| msgid "Feels like %s." | ||||
| msgstr "體感溫度 %s。" | ||||
|  | ||||
| #: js/ui/dateMenu.js:324 | ||||
| #: js/ui/dateMenu.js:326 | ||||
| msgid "Go online for weather information" | ||||
| msgstr "上線以取得天氣資訊" | ||||
|  | ||||
| #: js/ui/dateMenu.js:326 | ||||
| #: js/ui/dateMenu.js:328 | ||||
| msgid "Weather information is currently unavailable" | ||||
| msgstr "天氣資訊目前不可使用" | ||||
|  | ||||
| @@ -1239,13 +1239,13 @@ msgid "Leave On" | ||||
| msgstr "離開" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:59 js/ui/status/bluetooth.js:143 | ||||
| #: js/ui/status/network.js:1281 | ||||
| #: js/ui/status/network.js:1294 | ||||
| msgid "Turn On" | ||||
| msgstr "開啟" | ||||
|  | ||||
| #: js/ui/kbdA11yDialog.js:67 js/ui/status/bluetooth.js:143 | ||||
| #: js/ui/status/network.js:154 js/ui/status/network.js:337 | ||||
| #: js/ui/status/network.js:1281 js/ui/status/network.js:1396 | ||||
| #: js/ui/status/network.js:1294 js/ui/status/network.js:1409 | ||||
| #: js/ui/status/nightLight.js:47 js/ui/status/rfkill.js:90 | ||||
| #: js/ui/status/rfkill.js:117 | ||||
| msgid "Turn Off" | ||||
| @@ -1307,7 +1307,7 @@ msgstr "檢示來源" | ||||
| msgid "Web Page" | ||||
| msgstr "網頁" | ||||
|  | ||||
| #: js/ui/messageTray.js:1493 | ||||
| #: js/ui/messageTray.js:1495 | ||||
| msgid "System Information" | ||||
| msgstr "系統資訊" | ||||
|  | ||||
| @@ -1622,7 +1622,7 @@ msgid "<unknown>" | ||||
| msgstr "<不明>" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:441 js/ui/status/network.js:1310 | ||||
| #: js/ui/status/network.js:441 js/ui/status/network.js:1323 | ||||
| #, javascript-format | ||||
| msgid "%s Off" | ||||
| msgstr "%s 關閉" | ||||
| @@ -1648,7 +1648,7 @@ msgid "%s Disconnecting" | ||||
| msgstr "%s 正在斷線" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:459 js/ui/status/network.js:1302 | ||||
| #: js/ui/status/network.js:459 js/ui/status/network.js:1315 | ||||
| #, javascript-format | ||||
| msgid "%s Connecting" | ||||
| msgstr "正連線到 %s" | ||||
| @@ -1688,7 +1688,7 @@ msgid "Mobile Broadband Settings" | ||||
| msgstr "行動寬頻設定值" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:578 js/ui/status/network.js:1307 | ||||
| #: js/ui/status/network.js:578 js/ui/status/network.js:1320 | ||||
| #, javascript-format | ||||
| msgid "%s Hardware Disabled" | ||||
| msgstr "%s 硬體已停用" | ||||
| @@ -1744,78 +1744,78 @@ msgstr "沒有網路" | ||||
| msgid "Use hardware switch to turn off" | ||||
| msgstr "使用硬體開關來關閉" | ||||
|  | ||||
| #: js/ui/status/network.js:1173 | ||||
| #: js/ui/status/network.js:1186 | ||||
| msgid "Select Network" | ||||
| msgstr "選擇網路" | ||||
|  | ||||
| #: js/ui/status/network.js:1179 | ||||
| #: js/ui/status/network.js:1192 | ||||
| msgid "Wi-Fi Settings" | ||||
| msgstr "Wi-Fi 設定值" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1298 | ||||
| #: js/ui/status/network.js:1311 | ||||
| #, javascript-format | ||||
| msgid "%s Hotspot Active" | ||||
| msgstr "%s 熱點有效" | ||||
|  | ||||
| #. Translators: %s is a network identifier | ||||
| #: js/ui/status/network.js:1313 | ||||
| #: js/ui/status/network.js:1326 | ||||
| #, javascript-format | ||||
| msgid "%s Not Connected" | ||||
| msgstr "%s 未連線" | ||||
|  | ||||
| #: js/ui/status/network.js:1413 | ||||
| #: js/ui/status/network.js:1426 | ||||
| msgid "connecting…" | ||||
| msgstr "連線中…" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password | ||||
| #: js/ui/status/network.js:1416 | ||||
| #: js/ui/status/network.js:1429 | ||||
| msgid "authentication required" | ||||
| msgstr "要求核對" | ||||
|  | ||||
| #: js/ui/status/network.js:1418 | ||||
| #: js/ui/status/network.js:1431 | ||||
| msgid "connection failed" | ||||
| msgstr "連線失敗" | ||||
|  | ||||
| #: js/ui/status/network.js:1472 | ||||
| #: js/ui/status/network.js:1485 | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPN 設定值" | ||||
|  | ||||
| #: js/ui/status/network.js:1485 | ||||
| #: js/ui/status/network.js:1498 | ||||
| msgid "VPN" | ||||
| msgstr "VPN" | ||||
|  | ||||
| #: js/ui/status/network.js:1495 | ||||
| #: js/ui/status/network.js:1508 | ||||
| msgid "VPN Off" | ||||
| msgstr "VPN 關閉" | ||||
|  | ||||
| #: js/ui/status/network.js:1559 js/ui/status/rfkill.js:93 | ||||
| #: js/ui/status/network.js:1572 js/ui/status/rfkill.js:93 | ||||
| msgid "Network Settings" | ||||
| msgstr "網路設定值" | ||||
|  | ||||
| #: js/ui/status/network.js:1588 | ||||
| #: js/ui/status/network.js:1601 | ||||
| #, javascript-format | ||||
| msgid "%s Wired Connection" | ||||
| msgid_plural "%s Wired Connections" | ||||
| msgstr[0] "%s 個有線網路連線" | ||||
|  | ||||
| #: js/ui/status/network.js:1592 | ||||
| #: js/ui/status/network.js:1605 | ||||
| #, javascript-format | ||||
| msgid "%s Wi-Fi Connection" | ||||
| msgid_plural "%s Wi-Fi Connections" | ||||
| msgstr[0] "%s 個 Wi-Fi 連線" | ||||
|  | ||||
| #: js/ui/status/network.js:1596 | ||||
| #: js/ui/status/network.js:1609 | ||||
| #, javascript-format | ||||
| msgid "%s Modem Connection" | ||||
| msgid_plural "%s Modem Connections" | ||||
| msgstr[0] "%s 個數據機連線" | ||||
|  | ||||
| #: js/ui/status/network.js:1728 | ||||
| #: js/ui/status/network.js:1741 | ||||
| msgid "Connection failed" | ||||
| msgstr "連線失敗" | ||||
|  | ||||
| #: js/ui/status/network.js:1729 | ||||
| #: js/ui/status/network.js:1742 | ||||
| msgid "Activation of network connection failed" | ||||
| msgstr "啟動網路連線失敗" | ||||
|  | ||||
| @@ -1918,7 +1918,7 @@ msgstr "Thunderbolt 授權錯誤" | ||||
|  | ||||
| #: js/ui/status/thunderbolt.js:357 | ||||
| #, javascript-format | ||||
| msgid "Could not authorize the thunderbolt device: %s" | ||||
| msgid "Could not authorize the Thunderbolt device: %s" | ||||
| msgstr "無法授權該 Thunderbolt 裝置:%s" | ||||
|  | ||||
| #: js/ui/status/volume.js:128 | ||||
|   | ||||
| @@ -590,6 +590,11 @@ app_load_events (App *app) | ||||
|   g_list_free (app->live_views); | ||||
|   app->live_views = NULL; | ||||
|  | ||||
|   if (!app->since || !app->until) | ||||
|     { | ||||
|       print_debug ("Skipping load of events, no time interval set yet"); | ||||
|       return; | ||||
|     } | ||||
|   /* timezone could have changed */ | ||||
|   app_update_timezone (app); | ||||
|  | ||||
|   | ||||
| @@ -347,10 +347,10 @@ if options.perf == None: | ||||
|         options.perf = 'core' | ||||
|  | ||||
| if options.extra_filter is None: | ||||
|     if options.hwtest: | ||||
|         options.extra_filter = ['Gedit'] | ||||
|     else: | ||||
|         options.extra_filter = [] | ||||
|     options.extra_filter = [] | ||||
|  | ||||
| if options.perf == 'hwtest': | ||||
|     options.extra_filter.append('Gedit') | ||||
|  | ||||
| if args: | ||||
|     parser.print_usage() | ||||
|   | ||||
| @@ -31,6 +31,8 @@ struct _ShellScreenshotPrivate | ||||
|   char *filename; | ||||
|   char *filename_used; | ||||
|  | ||||
|   GDateTime *datetime; | ||||
|  | ||||
|   cairo_surface_t *image; | ||||
|   cairo_rectangle_int_t screenshot_area; | ||||
|  | ||||
| @@ -72,6 +74,7 @@ on_screenshot_written (GObject      *source, | ||||
|   g_clear_pointer (&priv->image, cairo_surface_destroy); | ||||
|   g_clear_pointer (&priv->filename, g_free); | ||||
|   g_clear_pointer (&priv->filename_used, g_free); | ||||
|   g_clear_pointer (&priv->datetime, g_date_time_unref); | ||||
|  | ||||
|   meta_enable_unredirect_for_screen (shell_global_get_screen (priv->global)); | ||||
| } | ||||
| @@ -175,6 +178,7 @@ write_screenshot_thread (GTask        *result, | ||||
|   GOutputStream *stream; | ||||
|   ShellScreenshot *screenshot = SHELL_SCREENSHOT (object); | ||||
|   ShellScreenshotPrivate *priv; | ||||
|   char *creation_time; | ||||
|  | ||||
|   g_assert (screenshot != NULL); | ||||
|  | ||||
| @@ -193,14 +197,18 @@ write_screenshot_thread (GTask        *result, | ||||
|                                             0, 0, | ||||
|                                             cairo_image_surface_get_width (priv->image), | ||||
|                                             cairo_image_surface_get_height (priv->image)); | ||||
|       creation_time = g_date_time_format (priv->datetime, "%c"); | ||||
|  | ||||
|       if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL, | ||||
|                                     "tEXt::Software", "gnome-screenshot", NULL)) | ||||
|                                      "tEXt::Software", "gnome-screenshot", | ||||
|                                      "tEXt::Creation Time", creation_time, | ||||
|                                      NULL)) | ||||
|         status = CAIRO_STATUS_SUCCESS; | ||||
|       else | ||||
|         status = CAIRO_STATUS_WRITE_ERROR; | ||||
|  | ||||
|       g_object_unref (pixbuf); | ||||
|       g_free (creation_time); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -241,6 +249,7 @@ do_grab_screenshot (ShellScreenshot *screenshot, | ||||
|                                                        n_captures, | ||||
|                                                        x, y, | ||||
|                                                        width, height); | ||||
|   priv->datetime = g_date_time_new_now_local (); | ||||
|  | ||||
|   for (i = 0; i < n_captures; i++) | ||||
|     cairo_surface_destroy (captures[i].image); | ||||
| @@ -432,6 +441,7 @@ grab_window_screenshot (ClutterActor *stage, | ||||
|  | ||||
|   stex = META_SHAPED_TEXTURE (meta_window_actor_get_texture (META_WINDOW_ACTOR (window_actor))); | ||||
|   priv->image = meta_shaped_texture_get_image (stex, &clip); | ||||
|   priv->datetime = g_date_time_new_now_local (); | ||||
|  | ||||
|   settings = g_settings_new (A11Y_APPS_SCHEMA); | ||||
|   if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY)) | ||||
|   | ||||
| @@ -142,7 +142,7 @@ libst_gir = gnome.generate_gir(libst, | ||||
|   sources: st_gir_sources, | ||||
|   nsversion: '1.0', | ||||
|   namespace: 'St', | ||||
|   includes: ['Clutter-' + mutter_api_version, 'Gtk-3.0'], | ||||
|   includes: ['Clutter-' + mutter_api_version, 'Cally-' + mutter_api_version, 'Gtk-3.0'], | ||||
|   dependencies: [mutter_dep], | ||||
|   include_directories: include_directories('..'), | ||||
|   extra_args: ['-DST_COMPILATION', '--quiet'], | ||||
|   | ||||
| @@ -180,6 +180,7 @@ st_label_dispose (GObject   *object) | ||||
| { | ||||
|   StLabelPrivate *priv = ST_LABEL (object)->priv; | ||||
|  | ||||
|   priv->label = NULL; | ||||
|   g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref); | ||||
|  | ||||
|   G_OBJECT_CLASS (st_label_parent_class)->dispose (object); | ||||
|   | ||||
| @@ -117,6 +117,7 @@ _st_set_text_from_style (ClutterText *text, | ||||
|   const PangoFontDescription *font; | ||||
|   StTextAlign align; | ||||
|   gdouble spacing; | ||||
|   gchar *font_features; | ||||
|  | ||||
|   st_theme_node_get_foreground_color (theme_node, &color); | ||||
|   clutter_text_set_color (text, &color); | ||||
| @@ -151,6 +152,13 @@ _st_set_text_from_style (ClutterText *text, | ||||
|       pango_attr_list_insert (attribs, letter_spacing); | ||||
|     } | ||||
|  | ||||
|   font_features = st_theme_node_get_font_features (theme_node); | ||||
|   if (font_features) | ||||
|     { | ||||
|       pango_attr_list_insert (attribs, pango_attr_font_features_new (font_features)); | ||||
|       g_free (font_features); | ||||
|     } | ||||
|  | ||||
|   clutter_text_set_attributes (text, attribs); | ||||
|  | ||||
|   if (attribs) | ||||
|   | ||||
| @@ -37,6 +37,7 @@ struct _StTextureCachePrivate | ||||
|  | ||||
|   /* Things that were loaded with a cache policy != NONE */ | ||||
|   GHashTable *keyed_cache; /* char * -> CoglTexture* */ | ||||
|   GHashTable *keyed_surface_cache; /* char * -> cairo_surface_t* */ | ||||
|  | ||||
|   /* Presently this is used to de-duplicate requests for GIcons and async URIs. */ | ||||
|   GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */ | ||||
| @@ -145,6 +146,10 @@ st_texture_cache_init (StTextureCache *self) | ||||
|  | ||||
|   self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal, | ||||
|                                                    g_free, cogl_object_unref); | ||||
|   self->priv->keyed_surface_cache = g_hash_table_new_full (g_str_hash, | ||||
|                                                            g_str_equal, | ||||
|                                                            g_free, | ||||
|                                                            (GDestroyNotify) cairo_surface_destroy); | ||||
|   self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal, | ||||
|                                                             g_free, NULL); | ||||
|   self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal, | ||||
| @@ -166,6 +171,7 @@ st_texture_cache_dispose (GObject *object) | ||||
|     } | ||||
|  | ||||
|   g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy); | ||||
|   g_clear_pointer (&self->priv->keyed_surface_cache, g_hash_table_destroy); | ||||
|   g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy); | ||||
|   g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy); | ||||
|  | ||||
| @@ -520,6 +526,8 @@ finish_texture_load (AsyncTextureLoadData *data, | ||||
|     goto out; | ||||
|  | ||||
|   texdata = pixbuf_to_cogl_texture (pixbuf); | ||||
|   if (!texdata) | ||||
|     goto out; | ||||
|  | ||||
|   if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE) | ||||
|     { | ||||
| @@ -986,7 +994,7 @@ file_changed_cb (GFileMonitor      *monitor, | ||||
|   g_free (key); | ||||
|  | ||||
|   key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash); | ||||
|   g_hash_table_remove (cache->priv->keyed_cache, key); | ||||
|   g_hash_table_remove (cache->priv->keyed_surface_cache, key); | ||||
|   g_free (key); | ||||
|  | ||||
|   g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file); | ||||
| @@ -1273,6 +1281,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache, | ||||
|       texdata = pixbuf_to_cogl_texture (pixbuf); | ||||
|       g_object_unref (pixbuf); | ||||
|  | ||||
|       if (!texdata) | ||||
|         goto out; | ||||
|  | ||||
|       if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) | ||||
|         { | ||||
|           cogl_object_ref (texdata); | ||||
| @@ -1304,7 +1315,7 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache        *cache, | ||||
|  | ||||
|   key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file)); | ||||
|  | ||||
|   surface = g_hash_table_lookup (cache->priv->keyed_cache, key); | ||||
|   surface = g_hash_table_lookup (cache->priv->keyed_surface_cache, key); | ||||
|  | ||||
|   if (surface == NULL) | ||||
|     { | ||||
| @@ -1318,7 +1329,8 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache        *cache, | ||||
|       if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) | ||||
|         { | ||||
|           cairo_surface_reference (surface); | ||||
|           g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), surface); | ||||
|           g_hash_table_insert (cache->priv->keyed_surface_cache, | ||||
|                                g_strdup (key), surface); | ||||
|         } | ||||
|     } | ||||
|   else | ||||
|   | ||||
| @@ -3019,6 +3019,39 @@ st_theme_node_get_font (StThemeNode *node) | ||||
|   return node->font_desc; | ||||
| } | ||||
|  | ||||
| gchar * | ||||
| st_theme_node_get_font_features (StThemeNode *node) | ||||
| { | ||||
|   int i; | ||||
|  | ||||
|   ensure_properties (node); | ||||
|  | ||||
|   for (i = node->n_properties - 1; i >= 0; i--) | ||||
|     { | ||||
|       CRDeclaration *decl = node->properties[i]; | ||||
|  | ||||
|       if (strcmp (decl->property->stryng->str, "font-feature-settings") == 0) | ||||
|         { | ||||
|           CRTerm *term = decl->value; | ||||
|  | ||||
|           if (!term->next && term->type == TERM_IDENT) | ||||
|             { | ||||
|               gchar *ident = term->content.str->stryng->str; | ||||
|  | ||||
|               if (strcmp (ident, "inherit") == 0) | ||||
|                 break; | ||||
|  | ||||
|               if (strcmp (ident, "normal") == 0) | ||||
|                 return NULL; | ||||
|             } | ||||
|  | ||||
|           return (gchar *)cr_term_to_string (term); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   return node->parent_node ? st_theme_node_get_font_features (node->parent_node) : NULL; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * st_theme_node_get_border_image: | ||||
|  * @node: a #StThemeNode | ||||
|   | ||||
| @@ -232,6 +232,8 @@ double st_theme_node_get_letter_spacing (StThemeNode *node); | ||||
|  */ | ||||
| const PangoFontDescription *st_theme_node_get_font (StThemeNode *node); | ||||
|  | ||||
| gchar *st_theme_node_get_font_features (StThemeNode *node); | ||||
|  | ||||
| StBorderImage *st_theme_node_get_border_image (StThemeNode *node); | ||||
| StShadow      *st_theme_node_get_box_shadow   (StThemeNode *node); | ||||
| StShadow      *st_theme_node_get_text_shadow  (StThemeNode *node); | ||||
|   | ||||
| @@ -59,6 +59,24 @@ assert_font (StThemeNode *node, | ||||
|   g_free (value); | ||||
| } | ||||
|  | ||||
| static void | ||||
| assert_font_features (StThemeNode *node, | ||||
|                       const char  *node_description, | ||||
|                       const char  *expected) | ||||
| { | ||||
|   char *value = st_theme_node_get_font_features (node); | ||||
|  | ||||
|   if (g_strcmp0 (expected, value) != 0) | ||||
|     { | ||||
|       g_print ("%s: %s.font-feature-settings: expected: %s, got: %s\n", | ||||
|                test, node_description, expected, value); | ||||
|       fail = TRUE; | ||||
|     } | ||||
|  | ||||
|   if (value) | ||||
|     g_free (value); | ||||
| } | ||||
|  | ||||
| static char * | ||||
| text_decoration_to_string (StTextDecoration decoration) | ||||
| { | ||||
| @@ -396,7 +414,7 @@ test_background (void) | ||||
|   /* text1 inherits the background image but not the color */ | ||||
|   assert_background_color (text1,  "text1",  0x00000000); | ||||
|   assert_background_image (text1,  "text1",  "st/some-background.png"); | ||||
|   /* text1 inherits inherits both, but then background: none overrides both */ | ||||
|   /* text2 inherits both, but then background: none overrides both */ | ||||
|   assert_background_color (text2,  "text2",  0x00000000); | ||||
|   assert_background_image (text2,  "text2",  NULL); | ||||
|   /* background-image property */ | ||||
| @@ -413,6 +431,22 @@ test_font (void) | ||||
|   assert_font (text3,  "text3",  "serif Bold Oblique Small-Caps 24px"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_font_features (void) | ||||
| { | ||||
|   test = "font_features"; | ||||
|   /* group1 has font-feature-settings: "tnum" */ | ||||
|   assert_font_features (group1, "group1", "\"tnum\""); | ||||
|   /* text2 should inherit from group1 */ | ||||
|   assert_font_features (text2,  "text2", "\"tnum\""); | ||||
|   /* group2 has font-feature-settings: "tnum", "zero" */ | ||||
|   assert_font_features (group2, "group2", "\"tnum\", \"zero\""); | ||||
|   /* text3 should inherit from group2 using the inherit keyword */ | ||||
|   assert_font_features (text3,  "text3",  "\"tnum\", \"zero\""); | ||||
|   /* text4 has font-feature-settings: normal */ | ||||
|   assert_font_features (text4,  "text4",  NULL); | ||||
| } | ||||
|  | ||||
| static void | ||||
| test_pseudo_class (void) | ||||
| { | ||||
| @@ -554,6 +588,7 @@ main (int argc, char **argv) | ||||
|   test_border (); | ||||
|   test_background (); | ||||
|   test_font (); | ||||
|   test_font_features (); | ||||
|   test_pseudo_class (); | ||||
|   test_inline_style (); | ||||
|  | ||||
|   | ||||
| @@ -13,6 +13,8 @@ stage { | ||||
|     margin-left: 1in; | ||||
|  | ||||
|     background: #ff0000 url('some-background.png'); | ||||
|  | ||||
|     font-feature-settings: "tnum"; | ||||
| } | ||||
|  | ||||
| #text1 { | ||||
| @@ -35,6 +37,7 @@ ClutterTexture.special-text { | ||||
|  | ||||
| #group2 { | ||||
|     font: italic 12px serif; | ||||
|     font-feature-settings: "tnum", "zero"; | ||||
| } | ||||
|  | ||||
| #text3 { | ||||
| @@ -42,6 +45,11 @@ ClutterTexture.special-text { | ||||
|     font-weight: bold; | ||||
|     font-style: oblique; | ||||
|     font-size: 200%; | ||||
|     font-feature-settings: "pnum"; | ||||
| } | ||||
|  | ||||
| #text4 { | ||||
|     font-feature-settings: normal; | ||||
| } | ||||
|  | ||||
| ClutterTexture { | ||||
| @@ -60,6 +68,10 @@ stage > #text2 { | ||||
|     color: #ff0000; | ||||
| } | ||||
|  | ||||
| #group2 > #text3 { | ||||
|     font-feature-settings: inherit; | ||||
| } | ||||
|  | ||||
| #group2 { | ||||
|     background-image: url('other-background.png'); | ||||
|     padding: 1px 2px 3px 4px; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user