Compare commits

...

44 Commits

Author SHA1 Message Date
f0cf611e1b shell: Update to MetaCursorTracker API change
The pointer coordinates in meta_cursor_tracker_get_pointer() are now
returned as a graphene_point_t.
2020-08-13 19:49:11 +00:00
beddbc0583 st/test-theme: Use stage from mutter
Clutter application style stages not supported anymore.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1359
2020-08-13 12:46:22 +00:00
2f840174cb Updated Spanish translation 2020-08-13 10:41:32 +02:00
015559a207 Updated Spanish translation 2020-08-13 10:33:26 +02:00
98d6c4e8dd Update Catalan translation 2020-08-13 09:26:56 +02:00
1675b54738 Updated Galician translations 2020-08-13 01:40:06 +02:00
44cbd1e718 libcroco: Limit recursion in block and any productions (CVE-2020-12825)
If we don't have any limits, we can recurse forever and overflow the
stack.

This is per https://gitlab.gnome.org/Archive/libcroco/-/issues/8

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1404
2020-08-12 15:06:27 -05:00
0dc1e1e99a perf: Add basic run tests
While the performance framework was originally written to collect
performance metrics, driving the shell by an automated script is
also useful to ensure that basic functionality is working.

Add such a basic test, initially checking top bar menus, notifications
and the overview.

Eventually it would be nice to separate the automatic scripting from
gathering performance metrics, but IMHO that can wait until we switch
from gjs' custom imports system to ES modules.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1396
2020-08-12 15:43:39 +00:00
1029e683d3 perf-tool: Expose --x11 option
Running with the X11 backend is no longer as easy as not specifying
wayland, so expose mutter's --x11 option to allow enforcing the X11
backend for testing.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1396
2020-08-12 15:43:38 +00:00
cf1d09b482 environment: Mark transitions as "work"
global.run_at_leisure() is used from automated scripts to schedule
a callback when the shell is idle. However since we moved away from
Tweener, animations are no longer taken into account; fix this by
marking transitions as "work" if the convenience ease() functions
are used.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1396
2020-08-12 15:43:38 +00:00
a436226266 scripting: Switch to standard async/await pattern
The original scripting framework was based on SpiderMonkey's
pre-standard generators, and was simply translated to the
corresponding standard syntax when updating it to work with
recent JS versions.

We can do even better by using the standard async/await pattern
instead of generators/yield.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1396
2020-08-12 15:43:38 +00:00
33ff3dc44f Bump version to 3.37.90
Update NEWS.
2020-08-11 17:41:51 +02:00
2e77ed712c Update Basque translation 2020-08-11 14:01:34 +00:00
9d6ccb6072 dbusServices/screencast: Quote filename in pipeline
Otherwise Gst fails to parse the pipeline string if the filename
contains spaces, as all words following the first are interpreted
as additional Gst elements.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1403
2020-08-11 11:50:44 +00:00
5091eab280 Update Ukrainian translation 2020-08-11 06:24:22 +00:00
6d38bc69ca endSessionDialog: default to not installing updates on low battery
If the user's battery power is low, we should not check the checkbox to
install updates by default. Rationale: if the user's battery is not low,
it's very unlikely to run out during a normal system upgrade. Low
battery is defined as any level below 30%, matching our battery status
indicator.

We'll also change the battery warning to only display when battery is
actually low. However, we will still always warn on battery for full
system upgrades, since these are expected to take a long time.

Future improvement: it would be nice to make the checkbox insensitive
when on low power. However, I don't think we currently have a proper
style for insensitive checkboxes. I was unable to make it look good.

Lastly, note that I did not test this on a laptop. I tested this by
mocking the return values of _isDischargingBattery() and
_isBatteryLow().

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2717
2020-08-10 23:55:14 +00:00
adc8b1ba89 Update Turkish translation 2020-08-10 22:14:14 +00:00
38777b41a5 Update Ukrainian translation 2020-08-10 18:08:16 +00:00
263320696e status/system: Add separate 'Restart' item
A side effect of removing the action buttons in favor of a regular
submenu is that we are a lot less constrained by size. So instead
of lumping "Restart" in with "Power Off", make it a separate menu
item.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
e6153bb578 status/system: Swap power- and user-related items in session menu
Quoting Allan:
"It's been niggling me that log out is closest to hand,
as opposed to suspend"

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
c723a1b72a status/system: Use new indentation style
... before moving stuff around.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
0b56416d30 sytemActions: Add separate 'restart' action
In order to split restart and power-off in the system menu, we need
to separate the underlying actions as well.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
0c5716b018 systemActions: Reindent properties
... so we can add another property using the new coding style
without making surrounding code terribly inconsistent.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
1fa1333e13 endSessionDialog: Remove "Restart" option from shutdown dialog
Restart will be exposed as a separate action instead of being part
of the shutdown dialog.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
6edd3c4b93 endSessionDialog: Support updates in restart dialog
We will split off restart from the existing shutdown dialog, and
instead offer it as a separate menu item in the session submenu.
But before doing that, make sure that the existing restart dialog
exposes the same feature set as power off.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
72a8522a10 endSessionDialog: Reindent dialog configs
We are about to make some changes, so make them conform to the
new indentation style first.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2202
2020-08-10 15:36:26 +00:00
b91903555a Update Brazilian Portuguese translation 2020-08-10 11:53:38 +00:00
6b78f58a75 keyboard: Fix missing icons in Keypad
This is more fallout from commit 57669bca1b.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3007
2020-08-09 15:59:34 +02:00
e62c0757c3 Update Ukrainian translation 2020-08-08 14:57:38 +00:00
9168f6055e St Documentation: add and improve documentation for public classes
Much of St is undocumented, aside from input/output arguments. This is
no doubt because a lot of it parallels Gtk closely, but is worth
improving since many new programmers are not familiar with Gtk.

closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2983
2020-08-08 11:26:41 +00:00
8993de76f0 ci: Remove pot file test
A recent Docker image update broke the test, as xgettext now prints
the following warning:

warning: a fallback ITS rule file '/usr/share/gettext-0.21/its/metainfo.its'
is used; it may not be in sync with the upstream

That is completely unrelated to what the test is meant to catch and
could be fixed by adding appstream to the image, but considering that

 - the test didn't actually catch the last template string regression
 - we no longer allow template strings in files that include translatable
   strings (and enforce that with a CI job)
 - as of gettext 0.20.2, the template handling really really is fixed
   (we'll see)

let's remove the test rather than piling up more stuff in the container
image.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1399
2020-08-07 21:52:00 +02:00
01fedeed8f Update Turkish translation 2020-08-07 14:35:48 +00:00
757e4b6731 shell-screenshot: Change to use clutter_stage_paint_to*() API
This eliminates the need to wait for redraws, drawing cursors, and
stiching together cairo images in case the screenshot covers multiple
monitors.

All of that is now handled by mutter itself.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1383
2020-08-06 16:26:59 +00:00
c2b70101f2 endSessionDialog: Support rebooting into the bootloader menu aka ("Boot Options")
This implements the "Alt" behavior for the "Reboot" button as outlined in
the design here: https://wiki.gnome.org/Design/OS/BootOptions

Note I've tried implemeting this with the AltSwitcher class from
js/ui/status/system.js first, but that puts the button in a St.Bin()
which causes the button to think it is the only button on the dialog
and makes it have rounded corners on both of its bottom corners.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/199
2020-08-06 15:14:45 +02:00
9d4a3a614d endSessionDialog: Immediately add buttons to the dialog
Immediately add buttons to the dialog instead of first building an
array of button-info structs.

This is a preparation patch for adding support changing the "Reboot"
button into a "Boot Options" button when Alt is pressed.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/199
2020-08-06 15:14:45 +02:00
2af7264cff LoginManager: Add canRebootToBootLoaderMenu and setRebootToBootLoaderMenu methods
Add wrappers for the new logind Manager CanRebootToBootLoaderMenu and
SetRebootToBootLoaderMenu dbus methods.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/199
2020-08-06 15:14:42 +02:00
a96c8d91b5 ci: Explicitly specify job dependencies
We can speed up CI a bit by allowing build jobs to run in parallel
with review jobs, and don't have test jobs wait for the flatpak build.

See https://gitlab.gnome.org/help/ci/yaml/README.md#needs for details.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1391
2020-08-04 14:12:11 +00:00
3541a57570 cleanup: remove controversial naming
Replace "whitelist" and "blacklist" with "allow" and "deny" in variable
naming, which better represents the purpose of those variables.

There is no functional change.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1393
2020-08-04 13:24:50 +02:00
18155fc6ea st/private: Multiply position in fb coordinates with resource scale
The framebuffer we use for rendering shadows is scaled by the resource
scale, that means we also need to offset coordinates when translating
them to the framebuffers coordinate system.

So far we forgot to do that when translating the framebuffer using the
position of the actor, which lead to small rendering bugs of
text-shadows for actors allocated at non-zero origins. To fix that,
simply multiply those positions with the actors resource scale.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1390
2020-08-03 21:57:50 +00:00
b83c93ad62 appDisplay: Return false in acceptDrop when not accepting the drop
Fix what is probably a copy-paste error and return false instead of a
CONTINUE DragMotionResult which is only meant for dragMotion events, not
drop events. This makes sure we don't create a folder when dropping an
app over the drag leeways of another icon.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1389
2020-08-03 21:48:44 +00:00
d0dab5a6d1 style: Swap text-align in RTL locales
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3037
2020-08-03 16:26:37 +00:00
c9708b140c status/network: Use D-Bus to launch Settings panels
For more obscure network configurations, we need to launch the
corresponding Settings panel with additional parameters, so we
cannot simply launch the .desktop file.

However we can do better than spawning a command line: Control center
exposes an application action we can use instead, so the process is
launched with the appropriate activation environment and startup
notification support.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1385
2020-08-03 16:17:40 +00:00
dd846f1ba2 rfkill: Always sync state on construction
This fixes an issue where the indicator can be out of sync until the
RfkillManager (used by it) properties change.

The problem is that multiple instances of the indicator will use
the same RfkillManager instance (getRfkillManager() returns a singleton)
that only guarantees to emit the changed signal in two scenarios:
when the D-Bus proxy connects and when the proxy properties change.

If by the time an indicator is instantiated the RfkillManager's D-Bus
proxy is already connected, that indicator would only sync its state
when the RfkillManager properties change.

Let's fix that by always syncing the state on construction - in the worst
case scenario the RfkillManager's D-Bus proxy won't have connected yet
and the indicator state will be temporarily out of sync but once it gets
connected the indicator will sync again with the correct state.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1386
2020-08-02 19:57:11 +00:00
ec3653240a Update POTFILES.skip
It silences false positives on https://l10n.gnome.org/module/gnome-shell/

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1387
2020-08-01 14:33:13 +02:00
74 changed files with 3797 additions and 2244 deletions

@ -9,7 +9,6 @@ stages:
variables: variables:
BUNDLE: "extensions-git.flatpak" BUNDLE: "extensions-git.flatpak"
JS_LOG: "js-report.txt" JS_LOG: "js-report.txt"
POT_LOG: "pot-update.txt"
.only_default: &only_default .only_default: &only_default
only: only:
@ -67,6 +66,7 @@ no_template_check:
build: build:
image: registry.gitlab.gnome.org/gnome/mutter/master:v4 image: registry.gitlab.gnome.org/gnome/mutter/master:v4
stage: build stage: build
needs: []
before_script: before_script:
- .gitlab-ci/checkout-mutter.sh - .gitlab-ci/checkout-mutter.sh
- meson mutter mutter/build --prefix=/usr -Dtests=false - meson mutter mutter/build --prefix=/usr -Dtests=false
@ -85,6 +85,7 @@ build:
test: test:
image: registry.gitlab.gnome.org/gnome/mutter/master:v4 image: registry.gitlab.gnome.org/gnome/mutter/master:v4
stage: test stage: test
needs: ["build"]
variables: variables:
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir" XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
NO_AT_BRIDGE: "1" NO_AT_BRIDGE: "1"
@ -99,24 +100,9 @@ test:
- build/meson-logs/testlog.txt - build/meson-logs/testlog.txt
when: on_failure when: on_failure
test-pot:
image: registry.gitlab.gnome.org/gnome/mutter/master:v4
stage: test
before_script:
- ninja -C mutter/build install
script:
# Check that pot files are generated correctly:
# https://savannah.gnu.org/bugs/?50920#comment5
- ninja -C build gnome-shell-pot 2>&1 | awk '
BEGIN { start=0; }
start==1 { print $0; }
/gnome-shell-pot/ { start=1; }
' | tee $POT_LOG
- (! grep -q . $POT_LOG)
<<: *only_default
flatpak: flatpak:
stage: build stage: build
needs: []
variables: variables:
SUBPROJECT: "subprojects/extensions-app" SUBPROJECT: "subprojects/extensions-app"
# Your manifest path # Your manifest path

32
NEWS

@ -1,3 +1,35 @@
3.37.90
=======
* Fix extension updates when many extensions are installed [Jeremias; !1363]
* Fix missing icons in on-screen keyboard [Emre; #2631, #3007]
* Fix delay when showing calendar events [Sebastian; #2992]
* Allow rearranging items in app picker [Georges; !1284]
* Fix top bar navigation when NumLock is active [Olivier; #550]
* Delay login animation until wallpaper has loaded [Michael; #734996]
* Reset auth prompt on login screen on VT switch before fade in [Ray; #2997]
* Move screencasting into a separate service [Jonas Å.; !1372]
* Replace loaded terms with more descriptive one [Olivier; !1393]
* Add "Boot Options" support to restart dialog [Hans; !199]
* Move "Restart" into a separate menu item/dialog [Florian; #2202]
* Default to not installing updates on low battery [Michael; #2717]
* Misc. bug fixes and cleanups [Florian, Daniel V., Georges, Jonas Å.,
Daniel G., Carlos, Benjamin, Piotr, Andre, Jonas D., Andy; !1357, !1356,
#2969, #2969, !1358, !1371, #3005, !1380, #3022, !1381, !895, !1387, !1386,
!1385, #3037, !1389, !1390, !1391, !1383, !1399, #2983, !1403]
Contributors:
Jonas Ådahl, Benjamin Berg, Michael Catanzaro, Piotr Drąg, Jonas Dreßler,
Olivier Fourdan, Carlos Garnacho, Hans de Goede, Andy Holmes,
Sebastian Keller, Andre Moreira Magalhaes, Daniel García Moreno,
Florian Müllner, Georges Basile Stavracas Neto, Jeremias Ortega, Ray Strode,
Emre Uyguroglu, Daniel van Vugt
Translators:
Tim Sabsch [de], Boyuan Yang [zh_CN], Fabio Tomat [fur],
Efstathios Iosifidis [el], Rafael Fontenelle [pt_BR], Yuri Chornoivan [uk],
Daniel Șerbănescu [ro], Jordi Mas [ca], Daniel Mustieles [es],
Emin Tufan Çetin [tr], Asier Sarasua Garmendia [eu]
3.37.3 3.37.3
====== ======
* Refactor and clean up window picker * Refactor and clean up window picker

@ -20,6 +20,12 @@
<method name="ListSessions"> <method name="ListSessions">
<arg name="sessions" type="a(susso)" direction="out"/> <arg name="sessions" type="a(susso)" direction="out"/>
</method> </method>
<method name="CanRebootToBootLoaderMenu">
<arg type="s" direction="out"/>
</method>
<method name="SetRebootToBootLoaderMenu">
<arg type="t" direction="in"/>
</method>
<signal name="PrepareForSleep"> <signal name="PrepareForSleep">
<arg type="b" direction="out"/> <arg type="b" direction="out"/>
</signal> </signal>

@ -232,7 +232,9 @@
color: $fg_color; color: $fg_color;
font-feature-settings: "tnum"; font-feature-settings: "tnum";
@include fontsize($base_font_size); @include fontsize($base_font_size);
text-align: right;
&:ltr { text-align: right; }
&:rtl { text-align: left; }
} }
// timezone offset label // timezone offset label

@ -138,11 +138,10 @@
.user-widget.horizontal .user-widget-label { .user-widget.horizontal .user-widget-label {
@include fontsize($base_font_size + 2); @include fontsize($base_font_size + 2);
font-weight: bold; font-weight: bold;
text-align: left;
padding-left: 15px; padding-left: 15px;
&:ltr { padding-left: 14px; } &:ltr { padding-left: 14px; text-align: left; }
&:rtl { padding-right: 14px; } &:rtl { padding-right: 14px; text-align: right; }
} }
.user-widget.vertical .user-widget-label { .user-widget.vertical .user-widget-label {

@ -71,9 +71,11 @@
> .event-time { > .event-time {
color: transparentize($fg_color, 0.5); color: transparentize($fg_color, 0.5);
@include fontsize($base_font_size - 2); @include fontsize($base_font_size - 2);
text-align: right;
/* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
padding-bottom: 0.13em; padding-bottom: 0.13em;
&:ltr { text-align: right };
&:rtl { text-align: left };
} }
} }

@ -76,8 +76,10 @@ $popover_arrow_height: 12px;
// container for radio and check boxes // container for radio and check boxes
.popup-menu-ornament { .popup-menu-ornament {
text-align: right;
width: 1.2em; width: 1.2em;
&:ltr { text-align: right };
&:rtl { text-align: left };
} }
// separator // separator

@ -224,7 +224,7 @@ var Recorder = class {
video/x-raw,max-framerate=${framerate}/1 ! video/x-raw,max-framerate=${framerate}/1 !
videoconvert ! videoconvert !
${this._pipelineString} ! ${this._pipelineString} !
filesink location=${this._filePath}`; filesink location="${this._filePath}"`;
fullPipeline = this._substituteThreadCount(fullPipeline); fullPipeline = this._substituteThreadCount(fullPipeline);
this._pipeline = Gst.parse_launch_full(fullPipeline, this._pipeline = Gst.parse_launch_full(fullPipeline,

@ -32,6 +32,7 @@
<file>misc/util.js</file> <file>misc/util.js</file>
<file>misc/weather.js</file> <file>misc/weather.js</file>
<file>perf/basic.js</file>
<file>perf/core.js</file> <file>perf/core.js</file>
<file>perf/hwtest.js</file> <file>perf/hwtest.js</file>

@ -3,7 +3,7 @@ const { Gio, GLib, Meta, Shell, St } = imports.gi;
const INTROSPECT_SCHEMA = 'org.gnome.shell'; const INTROSPECT_SCHEMA = 'org.gnome.shell';
const INTROSPECT_KEY = 'introspect'; const INTROSPECT_KEY = 'introspect';
const APP_WHITELIST = ['org.freedesktop.impl.portal.desktop.gtk']; const APP_ALLOWLIST = ['org.freedesktop.impl.portal.desktop.gtk'];
const INTROSPECT_DBUS_API_VERSION = 3; const INTROSPECT_DBUS_API_VERSION = 3;
@ -46,13 +46,13 @@ var IntrospectService = class {
this._syncRunningApplications(); this._syncRunningApplications();
this._whitelistMap = new Map(); this._allowlistMap = new Map();
APP_WHITELIST.forEach(appName => { APP_ALLOWLIST.forEach(appName => {
Gio.DBus.watch_name(Gio.BusType.SESSION, Gio.DBus.watch_name(Gio.BusType.SESSION,
appName, appName,
Gio.BusNameWatcherFlags.NONE, Gio.BusNameWatcherFlags.NONE,
(conn, name, owner) => this._whitelistMap.set(name, owner), (conn, name, owner) => this._allowlistMap.set(name, owner),
(conn, name) => this._whitelistMap.delete(name)); (conn, name) => this._allowlistMap.delete(name));
}); });
this._settings = St.Settings.get(); this._settings = St.Settings.get();
@ -74,8 +74,8 @@ var IntrospectService = class {
return this._introspectSettings.get_boolean(INTROSPECT_KEY); return this._introspectSettings.get_boolean(INTROSPECT_KEY);
} }
_isSenderWhitelisted(sender) { _isSenderAllowed(sender) {
return [...this._whitelistMap.values()].includes(sender); return [...this._allowlistMap.values()].includes(sender);
} }
_getSandboxedAppId(app) { _getSandboxedAppId(app) {
@ -138,7 +138,7 @@ var IntrospectService = class {
if (this._isIntrospectEnabled()) if (this._isIntrospectEnabled())
return true; return true;
if (this._isSenderWhitelisted(invocation.get_sender())) if (this._isSenderAllowed(invocation.get_sender()))
return true; return true;
return false; return false;

@ -158,6 +158,23 @@ var LoginManagerSystemd = class {
}); });
} }
canRebootToBootLoaderMenu(asyncCallback) {
this._proxy.CanRebootToBootLoaderMenuRemote((result, error) => {
if (error) {
asyncCallback(false, false);
} else {
const needsAuth = result[0] === 'challenge';
const canRebootToBootLoaderMenu = needsAuth || result[0] === 'yes';
asyncCallback(canRebootToBootLoaderMenu, needsAuth);
}
});
}
setRebootToBootLoaderMenu() {
/* Parameter is timeout in usec, show to menu for 60 seconds */
this._proxy.SetRebootToBootLoaderMenuRemote(60000000);
}
listSessions(asyncCallback) { listSessions(asyncCallback) {
this._proxy.ListSessionsRemote((result, error) => { this._proxy.ListSessionsRemote((result, error) => {
if (error) if (error)
@ -203,6 +220,13 @@ var LoginManagerDummy = class {
asyncCallback(false, false); asyncCallback(false, false);
} }
canRebootToBootLoaderMenu(asyncCallback) {
asyncCallback(false, false);
}
setRebootToBootLoaderMenu() {
}
listSessions(asyncCallback) { listSessions(asyncCallback) {
asyncCallback([]); asyncCallback([]);
} }

@ -121,10 +121,10 @@ var ParentalControlsManager = GObject.registerClass({
// Calculate whether the given app (a Gio.DesktopAppInfo) should be shown // Calculate whether the given app (a Gio.DesktopAppInfo) should be shown
// on the desktop, in search results, etc. The app should be shown if: // on the desktop, in search results, etc. The app should be shown if:
// - The .desktop file doesnt say it should be hidden. // - The .desktop file doesnt say it should be hidden.
// - The executable from the .desktop files Exec line isnt blacklisted in // - The executable from the .desktop files Exec line isnt denied in
// the users parental controls. // the users parental controls.
// - None of the flatpak app IDs from the X-Flatpak and the // - None of the flatpak app IDs from the X-Flatpak and the
// X-Flatpak-RenamedFrom lines are blacklisted in the users parental // X-Flatpak-RenamedFrom lines are denied in the users parental
// controls. // controls.
shouldShowApp(appInfo) { shouldShowApp(appInfo) {
// Quick decision? // Quick decision?

@ -21,6 +21,7 @@ const SENSOR_OBJECT_PATH = '/net/hadess/SensorProxy';
const SensorProxyInterface = loadInterfaceXML('net.hadess.SensorProxy'); const SensorProxyInterface = loadInterfaceXML('net.hadess.SensorProxy');
const POWER_OFF_ACTION_ID = 'power-off'; const POWER_OFF_ACTION_ID = 'power-off';
const RESTART_ACTION_ID = 'restart';
const LOCK_SCREEN_ACTION_ID = 'lock-screen'; const LOCK_SCREEN_ACTION_ID = 'lock-screen';
const LOGOUT_ACTION_ID = 'logout'; const LOGOUT_ACTION_ID = 'logout';
const SUSPEND_ACTION_ID = 'suspend'; const SUSPEND_ACTION_ID = 'suspend';
@ -40,39 +41,36 @@ function getDefault() {
const SystemActions = GObject.registerClass({ const SystemActions = GObject.registerClass({
Properties: { Properties: {
'can-power-off': GObject.ParamSpec.boolean('can-power-off', 'can-power-off': GObject.ParamSpec.boolean(
'can-power-off', 'can-power-off', 'can-power-off', 'can-power-off',
'can-power-off',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'can-suspend': GObject.ParamSpec.boolean('can-suspend', 'can-restart': GObject.ParamSpec.boolean(
'can-suspend', 'can-restart', 'can-restart', 'can-restart',
'can-suspend',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'can-lock-screen': GObject.ParamSpec.boolean('can-lock-screen', 'can-suspend': GObject.ParamSpec.boolean(
'can-lock-screen', 'can-suspend', 'can-suspend', 'can-suspend',
'can-lock-screen',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'can-switch-user': GObject.ParamSpec.boolean('can-switch-user', 'can-lock-screen': GObject.ParamSpec.boolean(
'can-switch-user', 'can-lock-screen', 'can-lock-screen', 'can-lock-screen',
'can-switch-user',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'can-logout': GObject.ParamSpec.boolean('can-logout', 'can-switch-user': GObject.ParamSpec.boolean(
'can-logout', 'can-switch-user', 'can-switch-user', 'can-switch-user',
'can-logout',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'can-lock-orientation': GObject.ParamSpec.boolean('can-lock-orientation', 'can-logout': GObject.ParamSpec.boolean(
'can-lock-orientation', 'can-logout', 'can-logout', 'can-logout',
'can-lock-orientation',
GObject.ParamFlags.READABLE, GObject.ParamFlags.READABLE,
false), false),
'orientation-lock-icon': GObject.ParamSpec.string('orientation-lock-icon', 'can-lock-orientation': GObject.ParamSpec.boolean(
'orientation-lock-icon', 'can-lock-orientation', 'can-lock-orientation', 'can-lock-orientation',
'orientation-lock-icon', GObject.ParamFlags.READABLE,
false),
'orientation-lock-icon': GObject.ParamSpec.string(
'orientation-lock-icon', 'orientation-lock-icon', 'orientation-lock-icon',
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
null), null),
}, },
@ -93,7 +91,15 @@ const SystemActions = GObject.registerClass({
name: C_("search-result", "Power Off"), name: C_("search-result", "Power Off"),
iconName: 'system-shutdown-symbolic', iconName: 'system-shutdown-symbolic',
// Translators: A list of keywords that match the power-off action, separated by semicolons // Translators: A list of keywords that match the power-off action, separated by semicolons
keywords: tokenizeKeywords(_('power off;shutdown;reboot;restart;halt;stop')), keywords: tokenizeKeywords(_('power off;shutdown;halt;stop')),
available: false,
});
this._actions.set(RESTART_ACTION_ID, {
// Translators: The name of the restart action in search
name: C_('search-result', 'Restart'),
iconName: 'system-reboot-symbolic',
// Translators: A list of keywords that match the restart action, separated by semicolons
keywords: tokenizeKeywords(_('reboot;restart;')),
available: false, available: false,
}); });
this._actions.set(LOCK_SCREEN_ACTION_ID, { this._actions.set(LOCK_SCREEN_ACTION_ID, {
@ -203,6 +209,11 @@ const SystemActions = GObject.registerClass({
return this._actions.get(POWER_OFF_ACTION_ID).available; return this._actions.get(POWER_OFF_ACTION_ID).available;
} }
// eslint-disable-next-line camelcase
get can_restart() {
return this._actions.get(RESTART_ACTION_ID).available;
}
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
get can_suspend() { get can_suspend() {
return this._actions.get(SUSPEND_ACTION_ID).available; return this._actions.get(SUSPEND_ACTION_ID).available;
@ -306,6 +317,9 @@ const SystemActions = GObject.registerClass({
case POWER_OFF_ACTION_ID: case POWER_OFF_ACTION_ID:
this.activatePowerOff(); this.activatePowerOff();
break; break;
case RESTART_ACTION_ID:
this.activateRestart();
break;
case LOCK_SCREEN_ACTION_ID: case LOCK_SCREEN_ACTION_ID:
this.activateLockScreen(); this.activateLockScreen();
break; break;
@ -347,6 +361,9 @@ const SystemActions = GObject.registerClass({
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY)); this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
this._actions.get(POWER_OFF_ACTION_ID).available = this._canHavePowerOff && !disabled; this._actions.get(POWER_OFF_ACTION_ID).available = this._canHavePowerOff && !disabled;
this.notify('can-power-off'); this.notify('can-power-off');
this._actions.get(RESTART_ACTION_ID).available = this._canHavePowerOff && !disabled;
this.notify('can-restart');
} }
_updateHaveSuspend() { _updateHaveSuspend() {
@ -445,6 +462,13 @@ const SystemActions = GObject.registerClass({
this._session.ShutdownRemote(0); this._session.ShutdownRemote(0);
} }
activateRestart() {
if (!this._actions.get(RESTART_ACTION_ID).available)
throw new Error('The restart action is not available!');
this._session.RebootRemote();
}
activateSuspend() { activateSuspend() {
if (!this._actions.get(SUSPEND_ACTION_ID).available) if (!this._actions.get(SUSPEND_ACTION_ID).available)
throw new Error('The suspend action is not available!'); throw new Error('The suspend action is not available!');

146
js/perf/basic.js Normal file

@ -0,0 +1,146 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported run, finish, script_topBarNavDone, script_notificationShowDone,
script_notificationCloseDone, script_overviewShowDone,
script_applicationsShowStart, script_applicationsShowDone, METRICS,
*/
/* eslint camelcase: ["error", { properties: "never", allow: ["^script_"] }] */
const { St } = imports.gi;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const Scripting = imports.ui.scripting;
// This script tests the most important (basic) functionality of the shell.
var METRICS = {};
async function run() {
/* eslint-disable no-await-in-loop */
Scripting.defineScriptEvent('topBarNavStart', 'Starting to navigate the top bar');
Scripting.defineScriptEvent('topBarNavDone', 'Done navigating the top bar');
Scripting.defineScriptEvent('notificationShowStart', 'Showing a notification');
Scripting.defineScriptEvent('notificationShowDone', 'Done showing a notification');
Scripting.defineScriptEvent('notificationCloseStart', 'Closing a notification');
Scripting.defineScriptEvent('notificationCloseDone', 'Done closing a notification');
Scripting.defineScriptEvent('overviewShowStart', 'Starting to show the overview');
Scripting.defineScriptEvent('overviewShowDone', 'Overview finished showing');
Scripting.defineScriptEvent('applicationsShowStart', 'Starting to switch to applications view');
Scripting.defineScriptEvent('applicationsShowDone', 'Done switching to applications view');
Main.overview.connect('shown',
() => Scripting.scriptEvent('overviewShowDone'));
await Scripting.sleep(1000);
// navigate through top bar
Scripting.scriptEvent('topBarNavStart');
Main.panel.statusArea.aggregateMenu.menu.open();
await Scripting.sleep(400);
const { menuManager } = Main.panel;
while (menuManager.activeMenu &&
Main.panel.navigate_focus(menuManager.activeMenu.sourceActor,
St.DirectionType.TAB_BACKWARD, false))
await Scripting.sleep(400);
Scripting.scriptEvent('topBarNavDone');
await Scripting.sleep(1000);
// notification
const source = new MessageTray.SystemNotificationSource();
Main.messageTray.add(source);
Scripting.scriptEvent('notificationShowStart');
source.connect('notification-show',
() => Scripting.scriptEvent('notificationShowDone'));
const notification = new MessageTray.Notification(source,
'A test notification');
source.showNotification(notification);
await Scripting.sleep(400);
Main.panel.statusArea.dateMenu.menu.open();
await Scripting.sleep(400);
Scripting.scriptEvent('notificationCloseStart');
notification.connect('destroy',
() => Scripting.scriptEvent('notificationCloseDone'));
notification.destroy();
await Scripting.sleep(400);
Main.panel.statusArea.dateMenu.menu.close();
await Scripting.waitLeisure();
await Scripting.sleep(1000);
// overview (window picker)
Scripting.scriptEvent('overviewShowStart');
Main.overview.show();
await Scripting.waitLeisure();
Main.overview.hide();
await Scripting.waitLeisure();
await Scripting.sleep(1000);
// overview (app picker)
Main.overview.show();
await Scripting.waitLeisure();
Scripting.scriptEvent('applicationsShowStart');
// eslint-disable-next-line require-atomic-updates
Main.overview.dash.showAppsButton.checked = true;
await Scripting.waitLeisure();
Scripting.scriptEvent('applicationsShowDone');
// eslint-disable-next-line require-atomic-updates
Main.overview.dash.showAppsButton.checked = false;
await Scripting.waitLeisure();
Main.overview.hide();
await Scripting.waitLeisure();
/* eslint-enable no-await-in-loop */
}
let topBarNav = false;
let notificationShown = false;
let notificationClosed = false;
let windowPickerShown = false;
let appPickerShown = false;
function script_topBarNavDone() {
topBarNav = true;
}
function script_notificationShowDone() {
notificationShown = true;
}
function script_notificationCloseDone() {
notificationClosed = true;
}
function script_overviewShowDone() {
windowPickerShown = true;
}
function script_applicationsShowDone() {
appPickerShown = true;
}
function finish() {
if (!topBarNav)
throw new Error('Failed to navigate top bar');
if (!notificationShown)
throw new Error('Failed to show notification');
if (!notificationClosed)
throw new Error('Failed to close notification');
if (!windowPickerShown)
throw new Error('Failed to show window picker');
if (!appPickerShown)
throw new Error('Failed to show app picker');
}

@ -70,7 +70,8 @@ let WINDOW_CONFIGS = [
{ width: 640, height: 480, alpha: true, maximized: false, count: 10, metric: 'overviewFps10Alpha' }, { width: 640, height: 480, alpha: true, maximized: false, count: 10, metric: 'overviewFps10Alpha' },
]; ];
function *run() { async function run() {
/* eslint-disable no-await-in-loop */
Scripting.defineScriptEvent("overviewShowStart", "Starting to show the overview"); Scripting.defineScriptEvent("overviewShowStart", "Starting to show the overview");
Scripting.defineScriptEvent("overviewShowDone", "Overview finished showing"); Scripting.defineScriptEvent("overviewShowDone", "Overview finished showing");
Scripting.defineScriptEvent("afterShowHide", "After a show/hide cycle for the overview"); Scripting.defineScriptEvent("afterShowHide", "After a show/hide cycle for the overview");
@ -84,7 +85,7 @@ function *run() {
Scripting.scriptEvent('overviewShowDone'); Scripting.scriptEvent('overviewShowDone');
}); });
yield Scripting.sleep(1000); await Scripting.sleep(1000);
for (let i = 0; i < 2 * WINDOW_CONFIGS.length; i++) { for (let i = 0; i < 2 * WINDOW_CONFIGS.length; i++) {
// We go to the overview twice for each configuration; the first time // We go to the overview twice for each configuration; the first time
@ -92,49 +93,50 @@ function *run() {
// a clean set of numbers. // a clean set of numbers.
if ((i % 2) == 0) { if ((i % 2) == 0) {
let config = WINDOW_CONFIGS[i / 2]; let config = WINDOW_CONFIGS[i / 2];
yield Scripting.destroyTestWindows(); await Scripting.destroyTestWindows();
for (let k = 0; k < config.count; k++) { for (let k = 0; k < config.count; k++) {
yield Scripting.createTestWindow({ width: config.width, await Scripting.createTestWindow({ width: config.width,
height: config.height, height: config.height,
alpha: config.alpha, alpha: config.alpha,
maximized: config.maximized }); maximized: config.maximized });
} }
yield Scripting.waitTestWindows(); await Scripting.waitTestWindows();
yield Scripting.sleep(1000); await Scripting.sleep(1000);
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
} }
Scripting.scriptEvent('overviewShowStart'); Scripting.scriptEvent('overviewShowStart');
Main.overview.show(); Main.overview.show();
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
Main.overview.hide(); Main.overview.hide();
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
System.gc(); System.gc();
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.collectStatistics(); Scripting.collectStatistics();
Scripting.scriptEvent('afterShowHide'); Scripting.scriptEvent('afterShowHide');
} }
yield Scripting.destroyTestWindows(); await Scripting.destroyTestWindows();
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Main.overview.show(); Main.overview.show();
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
for (let i = 0; i < 2; i++) { for (let i = 0; i < 2; i++) {
Scripting.scriptEvent('applicationsShowStart'); Scripting.scriptEvent('applicationsShowStart');
// eslint-disable-next-line require-atomic-updates // eslint-disable-next-line require-atomic-updates
Main.overview.dash.showAppsButton.checked = true; Main.overview.dash.showAppsButton.checked = true;
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
Scripting.scriptEvent('applicationsShowDone'); Scripting.scriptEvent('applicationsShowDone');
// eslint-disable-next-line require-atomic-updates // eslint-disable-next-line require-atomic-updates
Main.overview.dash.showAppsButton.checked = false; Main.overview.dash.showAppsButton.checked = false;
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
} }
/* eslint-enable no-await-in-loop */
} }
let showingOverview = false; let showingOverview = false;

@ -94,7 +94,8 @@ function extractBootTimestamp() {
return result; return result;
} }
function *run() { async function run() {
/* eslint-disable no-await-in-loop */
Scripting.defineScriptEvent("desktopShown", "Finished initial animation"); Scripting.defineScriptEvent("desktopShown", "Finished initial animation");
Scripting.defineScriptEvent("overviewShowStart", "Starting to show the overview"); Scripting.defineScriptEvent("overviewShowStart", "Starting to show the overview");
Scripting.defineScriptEvent("overviewShowDone", "Overview finished showing"); Scripting.defineScriptEvent("overviewShowDone", "Overview finished showing");
@ -110,7 +111,7 @@ function *run() {
Scripting.defineScriptEvent("geditLaunch", "gedit application launch"); Scripting.defineScriptEvent("geditLaunch", "gedit application launch");
Scripting.defineScriptEvent("geditFirstFrame", "first frame of gedit window drawn"); Scripting.defineScriptEvent("geditFirstFrame", "first frame of gedit window drawn");
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
Scripting.scriptEvent('desktopShown'); Scripting.scriptEvent('desktopShown');
let interfaceSettings = new Gio.Settings({ let interfaceSettings = new Gio.Settings({
@ -120,22 +121,22 @@ function *run() {
Scripting.scriptEvent('overviewShowStart'); Scripting.scriptEvent('overviewShowStart');
Main.overview.show(); Main.overview.show();
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
Scripting.scriptEvent('overviewShowDone'); Scripting.scriptEvent('overviewShowDone');
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.scriptEvent('applicationsShowStart'); Scripting.scriptEvent('applicationsShowStart');
// eslint-disable-next-line require-atomic-updates // eslint-disable-next-line require-atomic-updates
Main.overview.dash.showAppsButton.checked = true; Main.overview.dash.showAppsButton.checked = true;
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
Scripting.scriptEvent('applicationsShowDone'); Scripting.scriptEvent('applicationsShowDone');
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Main.overview.hide(); Main.overview.hide();
yield Scripting.waitLeisure(); await Scripting.waitLeisure();
// --------------------- // // --------------------- //
// Tests of redraw speed // // Tests of redraw speed //
@ -145,46 +146,46 @@ function *run() {
global.frame_finish_timestamp = true; global.frame_finish_timestamp = true;
for (let k = 0; k < 5; k++) for (let k = 0; k < 5; k++)
yield Scripting.createTestWindow({ maximized: true }); await Scripting.createTestWindow({ maximized: true });
yield Scripting.waitTestWindows(); await Scripting.waitTestWindows();
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.scriptEvent('mainViewDrawStart'); Scripting.scriptEvent('mainViewDrawStart');
yield waitAndDraw(1000); await waitAndDraw(1000);
Scripting.scriptEvent('mainViewDrawDone'); Scripting.scriptEvent('mainViewDrawDone');
Main.overview.show(); Main.overview.show();
Scripting.waitLeisure(); Scripting.waitLeisure();
yield Scripting.sleep(1500); await Scripting.sleep(1500);
Scripting.scriptEvent('overviewDrawStart'); Scripting.scriptEvent('overviewDrawStart');
yield waitAndDraw(1000); await waitAndDraw(1000);
Scripting.scriptEvent('overviewDrawDone'); Scripting.scriptEvent('overviewDrawDone');
yield Scripting.destroyTestWindows(); await Scripting.destroyTestWindows();
Main.overview.hide(); Main.overview.hide();
yield Scripting.createTestWindow({ maximized: true, await Scripting.createTestWindow({ maximized: true,
redraws: true }); redraws: true });
yield Scripting.waitTestWindows(); await Scripting.waitTestWindows();
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.scriptEvent('redrawTestStart'); Scripting.scriptEvent('redrawTestStart');
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.scriptEvent('redrawTestDone'); Scripting.scriptEvent('redrawTestDone');
yield Scripting.sleep(1000); await Scripting.sleep(1000);
Scripting.scriptEvent('collectTimings'); Scripting.scriptEvent('collectTimings');
yield Scripting.destroyTestWindows(); await Scripting.destroyTestWindows();
global.frame_timestamps = false; global.frame_timestamps = false;
global.frame_finish_timestamp = false; global.frame_finish_timestamp = false;
yield Scripting.sleep(1000); await Scripting.sleep(1000);
let appSys = Shell.AppSystem.get_default(); let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app('org.gnome.gedit.desktop'); let app = appSys.lookup_app('org.gnome.gedit.desktop');
@ -197,21 +198,22 @@ function *run() {
throw new Error('gedit was already running'); throw new Error('gedit was already running');
while (windows.length == 0) { while (windows.length == 0) {
yield waitSignal(global.display, 'window-created'); await waitSignal(global.display, 'window-created');
windows = app.get_windows(); windows = app.get_windows();
} }
let actor = windows[0].get_compositor_private(); let actor = windows[0].get_compositor_private();
yield waitSignal(actor, 'first-frame'); await waitSignal(actor, 'first-frame');
Scripting.scriptEvent('geditFirstFrame'); Scripting.scriptEvent('geditFirstFrame');
yield Scripting.sleep(1000); await Scripting.sleep(1000);
windows[0].delete(global.get_current_time()); windows[0].delete(global.get_current_time());
yield Scripting.sleep(1000); await Scripting.sleep(1000);
interfaceSettings.set_boolean('enable-animations', true); interfaceSettings.set_boolean('enable-animations', true);
/* eslint-enable no-await-in-loop */
} }
let overviewShowStart; let overviewShowStart;

@ -1541,7 +1541,7 @@ class AppViewItem extends St.Button {
return false; return false;
if (this._withinLeeways(x)) if (this._withinLeeways(x))
return DND.DragMotionResult.CONTINUE; return false;
return true; return true;
} }

@ -18,7 +18,7 @@
*/ */
const { AccountsService, Clutter, Gio, const { AccountsService, Clutter, Gio,
GLib, GObject, Pango, Polkit, Shell, St } = imports.gi; GLib, GObject, Pango, Polkit, Shell, St, UPowerGlib: UPower } = imports.gi;
const CheckBox = imports.ui.checkBox; const CheckBox = imports.ui.checkBox;
const Dialog = imports.ui.dialog; const Dialog = imports.ui.dialog;
@ -31,24 +31,30 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
const _ITEM_ICON_SIZE = 64; const _ITEM_ICON_SIZE = 64;
const LOW_BATTERY_THRESHOLD = 30;
const EndSessionDialogIface = loadInterfaceXML('org.gnome.SessionManager.EndSessionDialog'); const EndSessionDialogIface = loadInterfaceXML('org.gnome.SessionManager.EndSessionDialog');
const logoutDialogContent = { const logoutDialogContent = {
subjectWithUser: C_("title", "Log Out %s"), subjectWithUser: C_("title", "Log Out %s"),
subject: C_("title", "Log Out"), subject: C_("title", "Log Out"),
descriptionWithUser(user, seconds) { descriptionWithUser(user, seconds) {
return ngettext("%s will be logged out automatically in %d second.", return ngettext(
"%s will be logged out automatically in %d seconds.", '%s will be logged out automatically in %d second.',
'%s will be logged out automatically in %d seconds.',
seconds).format(user, seconds); seconds).format(user, seconds);
}, },
description(seconds) { description(seconds) {
return ngettext("You will be logged out automatically in %d second.", return ngettext(
"You will be logged out automatically in %d seconds.", 'You will be logged out automatically in %d second.',
'You will be logged out automatically in %d seconds.',
seconds).format(seconds); seconds).format(seconds);
}, },
showBatteryWarning: false, showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedLogout', confirmButtons: [{
label: C_("button", "Log Out") }], signal: 'ConfirmedLogout',
label: C_('button', 'Log Out'),
}],
showOtherSessions: false, showOtherSessions: false,
}; };
@ -56,30 +62,36 @@ const shutdownDialogContent = {
subject: C_("title", "Power Off"), subject: C_("title", "Power Off"),
subjectWithUpdates: C_("title", "Install Updates & Power Off"), subjectWithUpdates: C_("title", "Install Updates & Power Off"),
description(seconds) { description(seconds) {
return ngettext("The system will power off automatically in %d second.", return ngettext(
"The system will power off automatically in %d seconds.", 'The system will power off automatically in %d second.',
'The system will power off automatically in %d seconds.',
seconds).format(seconds); seconds).format(seconds);
}, },
checkBoxText: C_("checkbox", "Install pending software updates"), checkBoxText: C_("checkbox", "Install pending software updates"),
showBatteryWarning: true, showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot', confirmButtons: [{
label: C_("button", "Restart") }, signal: 'ConfirmedShutdown',
{ signal: 'ConfirmedShutdown', label: C_('button', 'Power Off'),
label: C_("button", "Power Off") }], }],
iconName: 'system-shutdown-symbolic', iconName: 'system-shutdown-symbolic',
showOtherSessions: true, showOtherSessions: true,
}; };
const restartDialogContent = { const restartDialogContent = {
subject: C_("title", "Restart"), subject: C_("title", "Restart"),
subjectWithUpdates: C_('title', 'Install Updates & Restart'),
description(seconds) { description(seconds) {
return ngettext("The system will restart automatically in %d second.", return ngettext(
"The system will restart automatically in %d seconds.", 'The system will restart automatically in %d second.',
'The system will restart automatically in %d seconds.',
seconds).format(seconds); seconds).format(seconds);
}, },
showBatteryWarning: false, checkBoxText: C_('checkbox', 'Install pending software updates'),
confirmButtons: [{ signal: 'ConfirmedReboot', showBatteryWarning: true,
label: C_("button", "Restart") }], confirmButtons: [{
signal: 'ConfirmedReboot',
label: C_('button', 'Restart'),
}],
iconName: 'view-refresh-symbolic', iconName: 'view-refresh-symbolic',
showOtherSessions: true, showOtherSessions: true,
}; };
@ -88,13 +100,16 @@ const restartUpdateDialogContent = {
subject: C_("title", "Restart & Install Updates"), subject: C_("title", "Restart & Install Updates"),
description(seconds) { description(seconds) {
return ngettext("The system will automatically restart and install updates in %d second.", return ngettext(
"The system will automatically restart and install updates in %d seconds.", 'The system will automatically restart and install updates in %d second.',
'The system will automatically restart and install updates in %d seconds.',
seconds).format(seconds); seconds).format(seconds);
}, },
showBatteryWarning: true, showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot', confirmButtons: [{
label: C_("button", "Restart &amp; Install") }], signal: 'ConfirmedReboot',
label: C_('button', 'Restart &amp; Install'),
}],
unusedFutureButtonForTranslation: C_("button", "Install &amp; Power Off"), unusedFutureButtonForTranslation: C_("button", "Install &amp; Power Off"),
unusedFutureCheckBoxForTranslation: C_("checkbox", "Power off after updates are installed"), unusedFutureCheckBoxForTranslation: C_("checkbox", "Power off after updates are installed"),
iconName: 'view-refresh-symbolic', iconName: 'view-refresh-symbolic',
@ -112,8 +127,10 @@ const restartUpgradeDialogContent = {
}, },
disableTimer: true, disableTimer: true,
showBatteryWarning: false, showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedReboot', confirmButtons: [{
label: C_("button", "Restart &amp; Install") }], signal: 'ConfirmedReboot',
label: C_('button', 'Restart &amp; Install'),
}],
iconName: 'view-refresh-symbolic', iconName: 'view-refresh-symbolic',
showOtherSessions: true, showOtherSessions: true,
}; };
@ -142,7 +159,7 @@ const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
const PkOfflineIface = loadInterfaceXML('org.freedesktop.PackageKit.Offline'); const PkOfflineIface = loadInterfaceXML('org.freedesktop.PackageKit.Offline');
const PkOfflineProxy = Gio.DBusProxy.makeProxyWrapper(PkOfflineIface); const PkOfflineProxy = Gio.DBusProxy.makeProxyWrapper(PkOfflineIface);
const UPowerIface = loadInterfaceXML('org.freedesktop.UPower'); const UPowerIface = loadInterfaceXML('org.freedesktop.UPower.Device');
const UPowerProxy = Gio.DBusProxy.makeProxyWrapper(UPowerIface); const UPowerProxy = Gio.DBusProxy.makeProxyWrapper(UPowerIface);
function findAppFromInhibitor(inhibitor) { function findAppFromInhibitor(inhibitor) {
@ -213,6 +230,11 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
destroyOnClose: false }); destroyOnClose: false });
this._loginManager = LoginManager.getLoginManager(); this._loginManager = LoginManager.getLoginManager();
this._loginManager.canRebootToBootLoaderMenu(
(canRebootToBootLoaderMenu, unusedNeedsAuth) => {
this._canRebootToBootLoaderMenu = canRebootToBootLoaderMenu;
});
this._userManager = AccountsService.UserManager.get_default(); this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name()); this._user = this._userManager.get_user(GLib.get_user_name());
this._updatesPermission = null; this._updatesPermission = null;
@ -224,7 +246,7 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
this._powerProxy = new UPowerProxy(Gio.DBus.system, this._powerProxy = new UPowerProxy(Gio.DBus.system,
'org.freedesktop.UPower', 'org.freedesktop.UPower',
'/org/freedesktop/UPower', '/org/freedesktop/UPower/devices/DisplayDevice',
(proxy, error) => { (proxy, error) => {
if (error) { if (error) {
log(error.message); log(error.message);
@ -239,6 +261,9 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
this._totalSecondsToStayOpen = 0; this._totalSecondsToStayOpen = 0;
this._applications = []; this._applications = [];
this._sessions = []; this._sessions = [];
this._capturedEventId = 0;
this._rebootButton = null;
this._rebootButtonAlt = null;
this.connect('destroy', this.connect('destroy',
this._onDestroy.bind(this)); this._onDestroy.bind(this));
@ -256,7 +281,7 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
this._batteryWarning = new St.Label({ this._batteryWarning = new St.Label({
style_class: 'end-session-dialog-battery-warning', style_class: 'end-session-dialog-battery-warning',
text: _('Running on battery power: Please plug in before installing updates.'), text: _('Low battery power: please plug in before installing updates.'),
}); });
this._batteryWarning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; this._batteryWarning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this._batteryWarning.clutter_text.line_wrap = true; this._batteryWarning.clutter_text.line_wrap = true;
@ -306,6 +331,32 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
this._user.disconnect(this._userChangedId); this._user.disconnect(this._userChangedId);
} }
_isDischargingBattery() {
return this._powerProxy.IsPresent &&
this._powerProxy.State !== UPower.DeviceState.CHARGING &&
this._powerProxy.State !== UPower.DeviceState.FULLY_CHARGED;
}
_isBatteryLow() {
return this._isDischargingBattery() && this._powerProxy.Percentage < LOW_BATTERY_THRESHOLD;
}
_shouldShowLowBatteryWarning(dialogContent) {
if (!dialogContent.showBatteryWarning)
return false;
if (!this._isBatteryLow())
return false;
if (this._checkBox.checked)
return true;
// Show the warning if updates have already been triggered, but
// the user doesn't have enough permissions to cancel them.
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
return this._updateInfo.UpdatePrepared && this._updateInfo.UpdateTriggered && !updatesAllowed;
}
_sync() { _sync() {
let open = this.state == ModalDialog.State.OPENING || this.state == ModalDialog.State.OPENED; let open = this.state == ModalDialog.State.OPENING || this.state == ModalDialog.State.OPENED;
if (!open) if (!open)
@ -319,10 +370,7 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
if (dialogContent.subjectWithUpdates && this._checkBox.checked) if (dialogContent.subjectWithUpdates && this._checkBox.checked)
subject = dialogContent.subjectWithUpdates; subject = dialogContent.subjectWithUpdates;
if (dialogContent.showBatteryWarning) { this._batteryWarning.visible = this._shouldShowLowBatteryWarning(dialogContent);
this._batteryWarning.visible =
this._powerProxy.OnBattery && this._checkBox.checked;
}
let description; let description;
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen, let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
@ -363,16 +411,38 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
this._sessionSection.visible = hasSessions; this._sessionSection.visible = hasSessions;
} }
_updateButtons() { _onCapturedEvent(actor, event) {
let dialogContent = DialogContent[this._type]; let altEnabled = false;
let buttons = [{ action: this.cancel.bind(this),
label: _("Cancel"),
key: Clutter.KEY_Escape }];
let type = event.type();
if (type !== Clutter.EventType.KEY_PRESS && type !== Clutter.EventType.KEY_RELEASE)
return Clutter.EVENT_PROPAGATE;
let key = event.get_key_symbol();
if (key !== Clutter.KEY_Alt_L && key !== Clutter.KEY_Alt_R)
return Clutter.EVENT_PROPAGATE;
if (type === Clutter.EventType.KEY_PRESS)
altEnabled = true;
this._rebootButton.visible = !altEnabled;
this._rebootButtonAlt.visible = altEnabled;
return Clutter.EVENT_PROPAGATE;
}
_updateButtons() {
this.clearButtons();
this.addButton({ action: this.cancel.bind(this),
label: _("Cancel"),
key: Clutter.KEY_Escape });
let dialogContent = DialogContent[this._type];
for (let i = 0; i < dialogContent.confirmButtons.length; i++) { for (let i = 0; i < dialogContent.confirmButtons.length; i++) {
let signal = dialogContent.confirmButtons[i].signal; let signal = dialogContent.confirmButtons[i].signal;
let label = dialogContent.confirmButtons[i].label; let label = dialogContent.confirmButtons[i].label;
buttons.push({ let button = this.addButton({
action: () => { action: () => {
this.close(true); this.close(true);
let signalId = this.connect('closed', () => { let signalId = this.connect('closed', () => {
@ -382,9 +452,34 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
}, },
label, label,
}); });
// Add Alt "Boot Options" option to the Reboot button
if (this._canRebootToBootLoaderMenu && signal === 'ConfirmedReboot') {
this._rebootButton = button;
this._rebootButtonAlt = this.addButton({
action: () => {
this.close(true);
let signalId = this.connect('closed', () => {
this.disconnect(signalId);
this._confirmRebootToBootLoaderMenu();
});
},
label: C_('button', 'Boot Options'),
});
this._rebootButtonAlt.visible = false;
this._capturedEventId = global.stage.connect('captured-event',
this._onCapturedEvent.bind(this));
}
}
} }
this.setButtons(buttons); _stopAltCapture() {
if (this._capturedEventId > 0) {
global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0;
}
this._rebootButton = null;
this._rebootButtonAlt = null;
} }
close(skipSignal) { close(skipSignal) {
@ -396,14 +491,21 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
cancel() { cancel() {
this._stopTimer(); this._stopTimer();
this._stopAltCapture();
this._dbusImpl.emit_signal('Canceled', null); this._dbusImpl.emit_signal('Canceled', null);
this.close(); this.close();
} }
_confirmRebootToBootLoaderMenu() {
this._loginManager.setRebootToBootLoaderMenu();
this._confirm('ConfirmedReboot');
}
_confirm(signal) { _confirm(signal) {
let callback = () => { let callback = () => {
this._fadeOutDialog(); this._fadeOutDialog();
this._stopTimer(); this._stopTimer();
this._stopAltCapture();
this._dbusImpl.emit_signal(signal, null); this._dbusImpl.emit_signal(signal, null);
}; };
@ -671,19 +773,17 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
if (dialogContent.showOtherSessions) if (dialogContent.showOtherSessions)
this._loadSessions(); this._loadSessions();
let updateTriggered = this._updateInfo.UpdateTriggered;
let updatePrepared = this._updateInfo.UpdatePrepared;
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed; let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || ''); _setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || '');
this._checkBox.visible = dialogContent.checkBoxText && updatePrepared && updatesAllowed; this._checkBox.visible = dialogContent.checkBoxText && this._updateInfo.UpdatePrepared && updatesAllowed;
this._checkBox.checked = this._checkBox.visible;
// We show the warning either together with the checkbox, or when if (this._type === DialogType.UPGRADE_RESTART)
// updates have already been triggered, but the user doesn't have this._checkBox.checked = this._checkBox.visible && this._updateInfo.UpdateTriggered && !this._isDischargingBattery();
// enough permissions to cancel them. else
this._batteryWarning.visible = dialogContent.showBatteryWarning && this._checkBox.checked = this._checkBox.visible && !this._isBatteryLow();
(this._checkBox.visible || updatePrepared && updateTriggered && !updatesAllowed);
this._batteryWarning.visible = this._shouldShowLowBatteryWarning(dialogContent);
this._updateButtons(); this._updateButtons();

@ -134,7 +134,14 @@ function _easeActor(actor, params) {
actor.set_easing_mode(params.mode); actor.set_easing_mode(params.mode);
delete params.mode; delete params.mode;
let cleanup = () => Meta.enable_unredirect_for_display(global.display); const prepare = () => {
Meta.disable_unredirect_for_display(global.display);
global.begin_work();
};
const cleanup = () => {
Meta.enable_unredirect_for_display(global.display);
global.end_work();
};
let callback = _makeEaseCallback(params, cleanup); let callback = _makeEaseCallback(params, cleanup);
// cancel overwritten transitions // cancel overwritten transitions
@ -149,9 +156,9 @@ function _easeActor(actor, params) {
.find(t => t !== null); .find(t => t !== null);
if (transition && transition.delay) if (transition && transition.delay)
transition.connect('started', () => Meta.disable_unredirect_for_display(global.display)); transition.connect('started', () => prepare());
else else
Meta.disable_unredirect_for_display(global.display); prepare();
if (transition) { if (transition) {
transition.set({ repeatCount, autoReverse }); transition.set({ repeatCount, autoReverse });
@ -191,7 +198,14 @@ function _easeActorProperty(actor, propName, target, params) {
if (actor instanceof Clutter.Actor && !actor.mapped) if (actor instanceof Clutter.Actor && !actor.mapped)
duration = 0; duration = 0;
let cleanup = () => Meta.enable_unredirect_for_display(global.display); const prepare = () => {
Meta.disable_unredirect_for_display(global.display);
global.begin_work();
};
const cleanup = () => {
Meta.enable_unredirect_for_display(global.display);
global.end_work();
};
let callback = _makeEaseCallback(params, cleanup); let callback = _makeEaseCallback(params, cleanup);
// cancel overwritten transition // cancel overwritten transition
@ -203,7 +217,7 @@ function _easeActorProperty(actor, propName, target, params) {
if (!isReversed) if (!isReversed)
obj[prop] = target; obj[prop] = target;
Meta.disable_unredirect_for_display(global.display); prepare();
callback(true); callback(true);
return; return;
@ -222,9 +236,9 @@ function _easeActorProperty(actor, propName, target, params) {
transition.set_to(target); transition.set_to(target);
if (transition.delay) if (transition.delay)
transition.connect('started', () => Meta.disable_unredirect_for_display(global.display)); transition.connect('started', () => prepare());
else else
Meta.disable_unredirect_for_display(global.display); prepare();
transition.connect('stopped', (t, finished) => callback(finished)); transition.connect('stopped', (t, finished) => callback(finished));
} }

@ -7,7 +7,7 @@ const PermissionStore = imports.misc.permissionStore;
const WAYLAND_KEYBINDINGS_SCHEMA = 'org.gnome.mutter.wayland.keybindings'; const WAYLAND_KEYBINDINGS_SCHEMA = 'org.gnome.mutter.wayland.keybindings';
const APP_WHITELIST = ['gnome-control-center.desktop']; const APP_ALLOWLIST = ['gnome-control-center.desktop'];
const APP_PERMISSIONS_TABLE = 'gnome'; const APP_PERMISSIONS_TABLE = 'gnome';
const APP_PERMISSIONS_ID = 'shortcuts-inhibitor'; const APP_PERMISSIONS_ID = 'shortcuts-inhibitor';
const GRANTED = 'GRANTED'; const GRANTED = 'GRANTED';
@ -118,7 +118,7 @@ var InhibitShortcutsDialog = GObject.registerClass({
} }
vfunc_show() { vfunc_show() {
if (this._app && APP_WHITELIST.includes(this._app.get_id())) { if (this._app && APP_ALLOWLIST.includes(this._app.get_id())) {
this._emitResponse(DialogResponse.ALLOW); this._emitResponse(DialogResponse.ALLOW);
return; return;
} }

@ -1091,8 +1091,8 @@ var Keypad = GObject.registerClass({
{ label: '8', keyval: Clutter.KEY_8, left: 1, top: 2 }, { label: '8', keyval: Clutter.KEY_8, left: 1, top: 2 },
{ label: '9', keyval: Clutter.KEY_9, left: 2, top: 2 }, { label: '9', keyval: Clutter.KEY_9, left: 2, top: 2 },
{ label: '0', keyval: Clutter.KEY_0, left: 1, top: 3 }, { label: '0', keyval: Clutter.KEY_0, left: 1, top: 3 },
{ label: '⌫', keyval: Clutter.KEY_BackSpace, left: 3, top: 0 }, { keyval: Clutter.KEY_BackSpace, icon: 'edit-clear-symbolic', left: 3, top: 0 },
{ keyval: Clutter.KEY_Return, extraClassName: 'enter-key', left: 3, top: 1, height: 2 }, { keyval: Clutter.KEY_Return, extraClassName: 'enter-key', icon: 'keyboard-enter-symbolic', left: 3, top: 1, height: 2 },
]; ];
super._init({ super._init({
@ -1109,7 +1109,7 @@ var Keypad = GObject.registerClass({
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
let cur = keys[i]; let cur = keys[i];
let key = new Key(cur.label || "", []); let key = new Key(cur.label || "", [], cur.icon);
if (keys[i].extraClassName) if (keys[i].extraClassName)
key.keyButton.add_style_class_name(cur.extraClassName); key.keyButton.add_style_class_name(cur.extraClassName);

@ -21,16 +21,13 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
// When scripting an automated test we want to make a series of calls // When scripting an automated test we want to make a series of calls
// in a linear fashion, but we also want to be able to let the main // in a linear fashion, but we also want to be able to let the main
// loop run so actions can finish. For this reason we write the script // loop run so actions can finish. For this reason we write the script
// as a generator function that yields when it want to let the main // as an async function that uses await when it wants to let the main
// loop run. // loop run.
// //
// yield Scripting.sleep(1000); // await Scripting.sleep(1000);
// main.overview.show(); // main.overview.show();
// yield Scripting.waitLeisure(); // await Scripting.waitLeisure();
// //
// While it isn't important to the person writing the script, the actual
// yielded result is a function that the caller uses to provide the
// callback for resuming the script.
/** /**
* sleep: * sleep:
@ -285,14 +282,12 @@ function _collect(scriptModule, outputFile) {
} }
async function _runPerfScript(scriptModule, outputFile) { async function _runPerfScript(scriptModule, outputFile) {
for (let step of scriptModule.run()) {
try { try {
await step; // eslint-disable-line no-await-in-loop await scriptModule.run();
} catch (err) { } catch (err) {
log(`Script failed: ${err}\n${err.stack}`); log(`Script failed: ${err}\n${err.stack}`);
Meta.exit(Meta.ExitCode.ERROR); Meta.exit(Meta.ExitCode.ERROR);
} }
}
try { try {
_collect(scriptModule, outputFile); _collect(scriptModule, outputFile);

@ -113,10 +113,10 @@ function _loadMode(file, info) {
} }
_modes[modeName] = {}; _modes[modeName] = {};
let propBlacklist = ['unlockDialog']; const excludedProps = ['unlockDialog'];
for (let prop in _modes[DEFAULT_MODE]) { for (let prop in _modes[DEFAULT_MODE]) {
if (newMode[prop] !== undefined && if (newMode[prop] !== undefined &&
!propBlacklist.includes(prop)) !excludedProps.includes(prop))
_modes[modeName][prop] = newMode[prop]; _modes[modeName][prop] = newMode[prop];
} }
_modes[modeName]['isPrimary'] = true; _modes[modeName]['isPrimary'] = true;

@ -15,6 +15,7 @@ const Util = imports.misc.util;
const { loadInterfaceXML } = imports.misc.fileUtils; const { loadInterfaceXML } = imports.misc.fileUtils;
Gio._promisify(Gio.DBusConnection.prototype, 'call', 'call_finish');
Gio._promisify(NM.Client, 'new_async', 'new_finish'); Gio._promisify(NM.Client, 'new_async', 'new_finish');
Gio._promisify(NM.Client.prototype, Gio._promisify(NM.Client.prototype,
'check_connectivity_async', 'check_connectivity_finish'); 'check_connectivity_async', 'check_connectivity_finish');
@ -82,6 +83,30 @@ function ensureActiveConnectionProps(active) {
} }
} }
function launchSettingsPanel(panel, ...args) {
const param = new GLib.Variant('(sav)',
[panel, args.map(s => new GLib.Variant('s', s))]);
const platformData = {
'desktop-startup-id': new GLib.Variant('s',
'_TIME%s'.format(global.get_current_time())),
};
try {
Gio.DBus.session.call(
'org.gnome.ControlCenter',
'/org/gnome/ControlCenter',
'org.freedesktop.Application',
'ActivateAction',
new GLib.Variant('(sava{sv})',
['launch-panel', [param], platformData]),
null,
Gio.DBusCallFlags.NONE,
-1,
null);
} catch (e) {
log('Failed to launch Settings panel: %s'.format(e.message));
}
}
var NMConnectionItem = class { var NMConnectionItem = class {
constructor(section, connection) { constructor(section, connection) {
this._section = section; this._section = section;
@ -539,8 +564,7 @@ var NMDeviceModem = class extends NMConnectionDevice {
} }
_autoConnect() { _autoConnect() {
Util.spawn(['gnome-control-center', 'network', launchSettingsPanel('network', 'connect-3g', this._device.get_path());
'connect-3g', this._device.get_path()]);
} }
destroy() { destroy() {
@ -931,8 +955,8 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
(accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs require further configuration, so they're // 802.1x-enabled APs require further configuration, so they're
// handled in gnome-control-center // handled in gnome-control-center
Util.spawn(['gnome-control-center', 'wifi', 'connect-8021x-wifi', launchSettingsPanel('wifi', 'connect-8021x-wifi',
this._device.get_path(), accessPoints[0].get_path()]); this._device.get_path(), accessPoints[0].get_path());
} else { } else {
let connection = new NM.SimpleConnection(); let connection = new NM.SimpleConnection();
this._client.add_and_activate_connection_async(connection, this._device, accessPoints[0].get_path(), null, null); this._client.add_and_activate_connection_async(connection, this._device, accessPoints[0].get_path(), null, null);

@ -86,6 +86,8 @@ class Indicator extends PanelMenu.SystemIndicator {
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
this._sync();
} }
_sessionUpdated() { _sessionUpdated() {

@ -27,6 +27,8 @@ class Indicator extends PanelMenu.SystemIndicator {
() => this._updateSessionSubMenu()); () => this._updateSessionSubMenu());
this._powerOffItem.connect('notify::visible', this._powerOffItem.connect('notify::visible',
() => this._updateSessionSubMenu()); () => this._updateSessionSubMenu());
this._restartItem.connect('notify::visible',
() => this._updateSessionSubMenu());
// Whether shutdown is available or not depends on both lockdown // Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't // settings (disable-log-out) and Polkit policy - the latter doesn't
// notify, so we update the menu item each time the menu opens or // notify, so we update the menu item each time the menu opens or
@ -52,6 +54,7 @@ class Indicator extends PanelMenu.SystemIndicator {
this._loginScreenItem.visible || this._loginScreenItem.visible ||
this._logoutItem.visible || this._logoutItem.visible ||
this._suspendItem.visible || this._suspendItem.visible ||
this._restartItem.visible ||
this._powerOffItem.visible; this._powerOffItem.visible;
} }
@ -70,8 +73,7 @@ class Indicator extends PanelMenu.SystemIndicator {
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._orientationLockItem = item; this._orientationLockItem = item;
this._systemActions.bind_property('can-lock-orientation', this._systemActions.bind_property('can-lock-orientation',
this._orientationLockItem, this._orientationLockItem, 'visible',
'visible',
bindFlags); bindFlags);
this._systemActions.connect('notify::orientation-lock-icon', () => { this._systemActions.connect('notify::orientation-lock-icon', () => {
let iconName = this._systemActions.orientation_lock_icon; let iconName = this._systemActions.orientation_lock_icon;
@ -84,8 +86,8 @@ class Indicator extends PanelMenu.SystemIndicator {
let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app( let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app(
'gnome-control-center.desktop'); 'gnome-control-center.desktop');
if (app) { if (app) {
let [icon, name] = [app.app_info.get_icon().names[0], const [icon] = app.app_info.get_icon().names;
app.get_name()]; const name = app.app_info.get_name();
item = new PopupMenu.PopupImageMenuItem(name, icon); item = new PopupMenu.PopupImageMenuItem(name, icon);
item.connect('activate', () => { item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE); this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
@ -107,41 +109,14 @@ class Indicator extends PanelMenu.SystemIndicator {
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._lockScreenItem = item; this._lockScreenItem = item;
this._systemActions.bind_property('can-lock-screen', this._systemActions.bind_property('can-lock-screen',
this._lockScreenItem, this._lockScreenItem, 'visible',
'visible',
bindFlags); bindFlags);
this._sessionSubMenu = new PopupMenu.PopupSubMenuMenuItem( this._sessionSubMenu = new PopupMenu.PopupSubMenuMenuItem(
_('Power Off / Log Out'), true); _('Power Off / Log Out'), true);
this._sessionSubMenu.icon.icon_name = 'system-shutdown-symbolic'; this._sessionSubMenu.icon.icon_name = 'system-shutdown-symbolic';
item = new PopupMenu.PopupMenuItem(_("Log Out")); item = new PopupMenu.PopupMenuItem(_('Suspend'));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateLogout();
});
this._sessionSubMenu.menu.addMenuItem(item);
this._logoutItem = item;
this._systemActions.bind_property('can-logout',
this._logoutItem,
'visible',
bindFlags);
item = new PopupMenu.PopupMenuItem(_("Switch User…"));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateSwitchUser();
});
this._sessionSubMenu.menu.addMenuItem(item);
this._loginScreenItem = item;
this._systemActions.bind_property('can-switch-user',
this._loginScreenItem,
'visible',
bindFlags);
this._sessionSubMenu.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
item = new PopupMenu.PopupMenuItem(_("Suspend"));
item.connect('activate', () => { item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE); this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateSuspend(); this._systemActions.activateSuspend();
@ -149,11 +124,21 @@ class Indicator extends PanelMenu.SystemIndicator {
this._sessionSubMenu.menu.addMenuItem(item); this._sessionSubMenu.menu.addMenuItem(item);
this._suspendItem = item; this._suspendItem = item;
this._systemActions.bind_property('can-suspend', this._systemActions.bind_property('can-suspend',
this._suspendItem, this._suspendItem, 'visible',
'visible',
bindFlags); bindFlags);
item = new PopupMenu.PopupMenuItem(_("Power Off…")); item = new PopupMenu.PopupMenuItem(_('Restart…'));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateRestart();
});
this._sessionSubMenu.menu.addMenuItem(item);
this._restartItem = item;
this._systemActions.bind_property('can-restart',
this._restartItem, 'visible',
bindFlags);
item = new PopupMenu.PopupMenuItem(_('Power Off…'));
item.connect('activate', () => { item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE); this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activatePowerOff(); this._systemActions.activatePowerOff();
@ -161,8 +146,31 @@ class Indicator extends PanelMenu.SystemIndicator {
this._sessionSubMenu.menu.addMenuItem(item); this._sessionSubMenu.menu.addMenuItem(item);
this._powerOffItem = item; this._powerOffItem = item;
this._systemActions.bind_property('can-power-off', this._systemActions.bind_property('can-power-off',
this._powerOffItem, this._powerOffItem, 'visible',
'visible', bindFlags);
this._sessionSubMenu.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
item = new PopupMenu.PopupMenuItem(_('Log Out'));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateLogout();
});
this._sessionSubMenu.menu.addMenuItem(item);
this._logoutItem = item;
this._systemActions.bind_property('can-logout',
this._logoutItem, 'visible',
bindFlags);
item = new PopupMenu.PopupMenuItem(_('Switch User…'));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateSwitchUser();
});
this._sessionSubMenu.menu.addMenuItem(item);
this._loginScreenItem = item;
this._systemActions.bind_property('can-switch-user',
this._loginScreenItem, 'visible',
bindFlags); bindFlags);
this.menu.addMenuItem(this._sessionSubMenu); this.menu.addMenuItem(this._sessionSubMenu);

@ -1,5 +1,5 @@
project('gnome-shell', 'c', project('gnome-shell', 'c',
version: '3.37.3', version: '3.37.90',
meson_version: '>= 0.53.0', meson_version: '>= 0.53.0',
license: 'GPLv2+' license: 'GPLv2+'
) )
@ -25,7 +25,7 @@ gio_req = '>= 2.56.0'
gi_req = '>= 1.49.1' gi_req = '>= 1.49.1'
gjs_req = '>= 1.65.1' gjs_req = '>= 1.65.1'
gtk_req = '>= 3.15.0' gtk_req = '>= 3.15.0'
mutter_req = '>= 3.37.3' mutter_req = '>= 3.37.90'
polkit_req = '>= 0.100' polkit_req = '>= 0.100'
schemas_req = '>= 3.33.1' schemas_req = '>= 3.33.1'
startup_req = '>= 0.11' startup_req = '>= 0.11'

@ -1 +1,3 @@
data/org.gnome.Shell@wayland.service.in
data/org.gnome.Shell@x11.service.in
subprojects/extensions-tool/src/templates/indicator/extension.js subprojects/extensions-tool/src/templates/indicator/extension.js

296
po/ca.po

@ -10,7 +10,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: HEAD\n" "Project-Id-Version: HEAD\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-07-22 01:49+0000\n" "POT-Creation-Date: 2020-08-10 23:58+0000\n"
"PO-Revision-Date: 2020-05-15 20:39+0200\n" "PO-Revision-Date: 2020-05-15 20:39+0200\n"
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n" "Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n" "Language-Team: Catalan <tradgnome@softcatala.org>\n"
@ -182,8 +182,8 @@ msgstr ""
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"Si s'han de recordar les contrasenyes dels punts de muntatge xifrat o " "Si s'han de recordar les contrasenyes dels punts de muntatge xifrat o els "
"els sistemes de fitxers remots" "sistemes de fitxers remots"
#: data/org.gnome.shell.gschema.xml.in:87 #: data/org.gnome.shell.gschema.xml.in:87
msgid "" msgid ""
@ -192,9 +192,9 @@ msgid ""
"“Remember Password” checkbox will be present. This key sets the default " "“Remember Password” checkbox will be present. This key sets the default "
"state of the checkbox." "state of the checkbox."
msgstr "" msgstr ""
"El GNOME Shell us demanarà la contrasenya quan es munti un dispositiu " "El GNOME Shell us demanarà la contrasenya quan es munti un dispositiu xifrat"
"xifrat o un sistema de fitxers remot. Si es pot desar la contrasenya per " " o un sistema de fitxers remot. Si es pot desar la contrasenya per a "
"a utilitzar-la en el futur, es mostrarà la casella de selecció «Recorda la " "utilitzar-la en el futur, es mostrarà la casella de selecció «Recorda la "
"contrasenya». Aquesta clau estableix el valor per defecte d'aquesta casella " "contrasenya». Aquesta clau estableix el valor per defecte d'aquesta casella "
"de selecció." "de selecció."
@ -454,9 +454,9 @@ msgstr "Visiteu la pàgina d'inici de l'extensió"
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57 #: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139 #: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:183 #: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:183
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 #: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149 #: js/ui/status/network.js:940 subprojects/extensions-app/js/main.js:149
msgid "Cancel" msgid "Cancel"
msgstr "Cancel·la" msgstr "Cancel·la"
@ -492,7 +492,7 @@ msgstr "(p. ex. l'usuari o %s)"
msgid "Username" msgid "Username"
msgstr "Nom d'usuari" msgstr "Nom d'usuari"
#: js/gdm/loginDialog.js:1254 #: js/gdm/loginDialog.js:1253
msgid "Login Window" msgid "Login Window"
msgstr "Finestra d'entrada" msgstr "Finestra d'entrada"
@ -510,77 +510,89 @@ msgid "(or swipe finger)"
msgstr "(o passeu el dit)" msgstr "(o passeu el dit)"
#. Translators: The name of the power-off action in search #. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:93 #: js/misc/systemActions.js:91
msgctxt "search-result" msgctxt "search-result"
msgid "Power Off" msgid "Power Off"
msgstr "Apaga" msgstr "Apaga"
#. Translators: A list of keywords that match the power-off action, separated #. Translators: A list of keywords that match the power-off action, separated
#. by semicolons #. by semicolons
#: js/misc/systemActions.js:96 #: js/misc/systemActions.js:94
msgid "power off;shutdown;reboot;restart;halt;stop" msgid "power off;shutdown;halt;stop"
msgstr "apaga;atura;reinicia" msgstr "apaga;atura;reinicia"
#. Translators: The name of the restart action in search
#: js/misc/systemActions.js:99
msgctxt "search-result"
msgid "Restart"
msgstr "Reinicia"
#. Translators: A list of keywords that match the restart action, separated by
#. semicolons
#: js/misc/systemActions.js:102
msgid "reboot;restart;"
msgstr "reinicia;reinici;"
#. Translators: The name of the lock screen action in search #. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:101 #: js/misc/systemActions.js:107
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Bloqueja la pantalla" msgstr "Bloqueja la pantalla"
#. Translators: A list of keywords that match the lock screen action, #. Translators: A list of keywords that match the lock screen action,
#. separated by semicolons #. separated by semicolons
#: js/misc/systemActions.js:104 #: js/misc/systemActions.js:110
msgid "lock screen" msgid "lock screen"
msgstr "bloca la pantalla" msgstr "bloca la pantalla"
#. Translators: The name of the logout action in search #. Translators: The name of the logout action in search
#: js/misc/systemActions.js:109 #: js/misc/systemActions.js:115
msgctxt "search-result" msgctxt "search-result"
msgid "Log Out" msgid "Log Out"
msgstr "Surt" msgstr "Surt"
#. Translators: A list of keywords that match the logout action, separated by #. Translators: A list of keywords that match the logout action, separated by
#. semicolons #. semicolons
#: js/misc/systemActions.js:112 #: js/misc/systemActions.js:118
msgid "logout;log out;sign off" msgid "logout;log out;sign off"
msgstr "desconnecta;sortida;surt" msgstr "desconnecta;sortida;surt"
#. Translators: The name of the suspend action in search #. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:117 #: js/misc/systemActions.js:123
msgctxt "search-result" msgctxt "search-result"
msgid "Suspend" msgid "Suspend"
msgstr "Atura temporalment" msgstr "Atura temporalment"
#. Translators: A list of keywords that match the suspend action, separated by #. Translators: A list of keywords that match the suspend action, separated by
#. semicolons #. semicolons
#: js/misc/systemActions.js:120 #: js/misc/systemActions.js:126
msgid "suspend;sleep" msgid "suspend;sleep"
msgstr "atura temporalment;dorm" msgstr "atura temporalment;dorm"
#. Translators: The name of the switch user action in search #. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:125 #: js/misc/systemActions.js:131
msgctxt "search-result" msgctxt "search-result"
msgid "Switch User" msgid "Switch User"
msgstr "Canvia d'usuari" msgstr "Canvia d'usuari"
#. Translators: A list of keywords that match the switch user action, #. Translators: A list of keywords that match the switch user action,
#. separated by semicolons #. separated by semicolons
#: js/misc/systemActions.js:128 #: js/misc/systemActions.js:134
msgid "switch user" msgid "switch user"
msgstr "canvia d'usuari" msgstr "canvia d'usuari"
#. Translators: A list of keywords that match the lock orientation action, #. Translators: A list of keywords that match the lock orientation action,
#. separated by semicolons #. separated by semicolons
#: js/misc/systemActions.js:135 #: js/misc/systemActions.js:141
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "bloqueja l'orientació;desbloqueja l'orientació;pantalla;rotació" msgstr "bloqueja l'orientació;desbloqueja l'orientació;pantalla;rotació"
#: js/misc/systemActions.js:255 #: js/misc/systemActions.js:266
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Desbloqueja la rotació de la pantalla" msgstr "Desbloqueja la rotació de la pantalla"
#: js/misc/systemActions.js:256 #: js/misc/systemActions.js:267
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Bloqueja la rotació de la pantalla" msgstr "Bloqueja la rotació de la pantalla"
@ -751,31 +763,31 @@ msgid "Unnamed Folder"
msgstr "Carpeta sense nom" msgstr "Carpeta sense nom"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2767 js/ui/panel.js:75 #: js/ui/appDisplay.js:2762 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Obre finestres" msgstr "Obre finestres"
#: js/ui/appDisplay.js:2786 js/ui/panel.js:82 #: js/ui/appDisplay.js:2781 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Finestra nova" msgstr "Finestra nova"
#: js/ui/appDisplay.js:2802 #: js/ui/appDisplay.js:2797
msgid "Launch using Integrated Graphics Card" msgid "Launch using Integrated Graphics Card"
msgstr "Inicia usant una targeta gràfica integrada" msgstr "Inicia usant una targeta gràfica integrada"
#: js/ui/appDisplay.js:2803 #: js/ui/appDisplay.js:2798
msgid "Launch using Discrete Graphics Card" msgid "Launch using Discrete Graphics Card"
msgstr "Inicia usant una targeta gràfica discreta" msgstr "Inicia usant una targeta gràfica discreta"
#: js/ui/appDisplay.js:2831 js/ui/dash.js:239 #: js/ui/appDisplay.js:2826 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Suprimeix dels preferits" msgstr "Suprimeix dels preferits"
#: js/ui/appDisplay.js:2837 #: js/ui/appDisplay.js:2832
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Afegeix als preferits" msgstr "Afegeix als preferits"
#: js/ui/appDisplay.js:2847 js/ui/panel.js:93 #: js/ui/appDisplay.js:2842 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Mostra els detalls" msgstr "Mostra els detalls"
@ -974,8 +986,8 @@ msgid ""
msgstr "" msgstr ""
"També us podeu connectar prement el botó «WPS» del vostre encaminador." "També us podeu connectar prement el botó «WPS» del vostre encaminador."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:227 #: js/ui/components/networkAgent.js:104 js/ui/status/network.js:252
#: js/ui/status/network.js:318 js/ui/status/network.js:919 #: js/ui/status/network.js:343 js/ui/status/network.js:943
msgid "Connect" msgid "Connect"
msgstr "Connecta" msgstr "Connecta"
@ -1040,7 +1052,7 @@ msgstr "PIN"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Cal introduir una contrasenya per a connectar-vos a «%s»." msgstr "Cal introduir una contrasenya per a connectar-vos a «%s»."
#: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1694 #: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1718
msgid "Network Manager" msgid "Network Manager"
msgstr "Gestor de connexions de xarxa" msgstr "Gestor de connexions de xarxa"
@ -1166,86 +1178,91 @@ msgstr "El temps"
msgid "Select weather location…" msgid "Select weather location…"
msgstr "Trieu una ubicació pel temps…" msgstr "Trieu una ubicació pel temps…"
#: js/ui/endSessionDialog.js:37 #: js/ui/endSessionDialog.js:39
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Sortida %s" msgstr "Sortida %s"
#: js/ui/endSessionDialog.js:38 #: js/ui/endSessionDialog.js:40
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Sortida" msgstr "Sortida"
#: js/ui/endSessionDialog.js:40 #: js/ui/endSessionDialog.js:43
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s sortirà de la sessió automàticament d'aquí %d segon." msgstr[0] "%s sortirà de la sessió automàticament d'aquí %d segon."
msgstr[1] "%s sortirà de la sessió automàticament d'aquí %d segons." msgstr[1] "%s sortirà de la sessió automàticament d'aquí %d segons."
#: js/ui/endSessionDialog.js:45 #: js/ui/endSessionDialog.js:49
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Sortireu automàticament d'aquí %d segon." msgstr[0] "Sortireu automàticament d'aquí %d segon."
msgstr[1] "Sortireu automàticament d'aquí %d segons." msgstr[1] "Sortireu automàticament d'aquí %d segons."
#: js/ui/endSessionDialog.js:51 #: js/ui/endSessionDialog.js:56
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Surt" msgstr "Surt"
#: js/ui/endSessionDialog.js:56 #: js/ui/endSessionDialog.js:62
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Apagada" msgstr "Apagada"
#: js/ui/endSessionDialog.js:57 #: js/ui/endSessionDialog.js:63
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Instal·la les actualitzacions i apaga" msgstr "Instal·la les actualitzacions i apaga"
#: js/ui/endSessionDialog.js:59 #: js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "S'apagarà l'ordinador automàticament d'aquí %d segon." msgstr[0] "S'apagarà l'ordinador automàticament d'aquí %d segon."
msgstr[1] "S'apagarà l'ordinador automàticament d'aquí %d segons." msgstr[1] "S'apagarà l'ordinador automàticament d'aquí %d segons."
#: js/ui/endSessionDialog.js:63 #: js/ui/endSessionDialog.js:70 js/ui/endSessionDialog.js:89
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Instal·la les actualitzacions pendents" msgstr "Instal·la les actualitzacions pendents"
#: js/ui/endSessionDialog.js:66 js/ui/endSessionDialog.js:82 #: js/ui/endSessionDialog.js:74
msgctxt "button"
msgid "Restart"
msgstr "Reinicia"
#: js/ui/endSessionDialog.js:68
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Apaga" msgstr "Apaga"
#: js/ui/endSessionDialog.js:74 #: js/ui/endSessionDialog.js:81
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Reinici" msgstr "Reinici"
#: js/ui/endSessionDialog.js:76 #: js/ui/endSessionDialog.js:82
msgctxt "title"
msgid "Install Updates & Restart"
msgstr "Instal·la les actualitzacions i reinicia"
#: js/ui/endSessionDialog.js:85
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Es reiniciarà l'ordinador automàticament d'aquí %d segon." msgstr[0] "Es reiniciarà l'ordinador automàticament d'aquí %d segon."
msgstr[1] "Es reiniciarà l'ordinador automàticament d'aquí %d segons." msgstr[1] "Es reiniciarà l'ordinador automàticament d'aquí %d segons."
#: js/ui/endSessionDialog.js:89 #: js/ui/endSessionDialog.js:93
msgctxt "button"
msgid "Restart"
msgstr "Reinicia"
#: js/ui/endSessionDialog.js:101
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Reinicia i instal·la les actualitzacions" msgstr "Reinicia i instal·la les actualitzacions"
#: js/ui/endSessionDialog.js:91 #: js/ui/endSessionDialog.js:104
#, javascript-format #, javascript-format
msgid "" msgid ""
"The system will automatically restart and install updates in %d second." "The system will automatically restart and install updates in %d second."
@ -1258,22 +1275,22 @@ msgstr[1] ""
"Es reiniciarà l'ordinador automàticament i s'instal·laran les " "Es reiniciarà l'ordinador automàticament i s'instal·laran les "
"actualitzacions d'aquí %d segons." "actualitzacions d'aquí %d segons."
#: js/ui/endSessionDialog.js:97 js/ui/endSessionDialog.js:116 #: js/ui/endSessionDialog.js:111 js/ui/endSessionDialog.js:132
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Reinicia i instal·la" msgstr "Reinicia i instal·la"
#: js/ui/endSessionDialog.js:98 #: js/ui/endSessionDialog.js:113
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Instal·la i apaga" msgstr "Instal·la i apaga"
#: js/ui/endSessionDialog.js:99 #: js/ui/endSessionDialog.js:114
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Apaga després d'instal·lar les actualitzacions" msgstr "Apaga després d'instal·lar les actualitzacions"
#: js/ui/endSessionDialog.js:106 #: js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Upgrade" msgid "Restart & Install Upgrade"
msgstr "Reinicia i instal·la l'actualització" msgstr "Reinicia i instal·la l'actualització"
@ -1281,7 +1298,7 @@ msgstr "Reinicia i instal·la l'actualització"
#. Translators: This is the text displayed for system upgrades in the #. Translators: This is the text displayed for system upgrades in the
#. shut down dialog. First %s gets replaced with the distro name and #. shut down dialog. First %s gets replaced with the distro name and
#. second %s with the distro version to upgrade to #. second %s with the distro version to upgrade to
#: js/ui/endSessionDialog.js:111 #: js/ui/endSessionDialog.js:126
#, javascript-format #, javascript-format
msgid "" msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long " "%s %s will be installed after restart. Upgrade installation can take a long "
@ -1291,30 +1308,35 @@ msgstr ""
"instal·lació pot trigar força temps. Assegureu-vos que heu fet còpia de " "instal·lació pot trigar força temps. Assegureu-vos que heu fet còpia de "
"seguretat i que l'ordinador està connectat al corrent." "seguretat i que l'ordinador està connectat al corrent."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:284
msgid "Running on battery power: Please plug in before installing updates." msgid "Low battery power: please plug in before installing updates."
msgstr "" msgstr ""
"S'està utilitzant la bateria. Connecteu l'ordinador a la xarxa elèctrica " "Hi ha poca bateria. Connecteu l'ordinador a la xarxa elèctrica abans "
"abans d'instal·lar les actualitzacions." "d'instal·lar les actualitzacions."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:293
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "" msgstr ""
"Hi ha algunes aplicacions que estan ocupades o que tenen documents sense " "Hi ha algunes aplicacions que estan ocupades o que tenen documents sense "
"desar" "desar"
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:298
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Altres usuaris tenen la sessió oberta" msgstr "Altres usuaris tenen la sessió oberta"
#: js/ui/endSessionDialog.js:467
msgctxt "button"
msgid "Boot Options"
msgstr "Opcions d'arrencada"
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:583 #: js/ui/endSessionDialog.js:685
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (remot)" msgstr "%s (remot)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:586 #: js/ui/endSessionDialog.js:688
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (consola)" msgstr "%s (consola)"
@ -1419,15 +1441,15 @@ msgid "Leave On"
msgstr "Deixa-ho actiu" msgstr "Deixa-ho actiu"
#: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1291 #: js/ui/status/network.js:1315
msgid "Turn On" msgid "Turn On"
msgstr "Activa" msgstr "Activa"
#: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:135 js/ui/status/network.js:319 #: js/ui/status/network.js:160 js/ui/status/network.js:344
#: js/ui/status/network.js:1291 js/ui/status/network.js:1403 #: js/ui/status/network.js:1315 js/ui/status/network.js:1427
#: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81 #: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:108 #: js/ui/status/rfkill.js:110
msgid "Turn Off" msgid "Turn Off"
msgstr "Desactiva" msgstr "Desactiva"
@ -1488,11 +1510,11 @@ msgstr "Mostra el codi font"
msgid "Web Page" msgid "Web Page"
msgstr "Pàgina web" msgstr "Pàgina web"
#: js/ui/main.js:297 #: js/ui/main.js:294
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Sessió iniciada com a usuari privilegiat" msgstr "Sessió iniciada com a usuari privilegiat"
#: js/ui/main.js:298 #: js/ui/main.js:295
msgid "" msgid ""
"Running a session as a privileged user should be avoided for security " "Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user." "reasons. If possible, you should log in as a normal user."
@ -1500,11 +1522,11 @@ msgstr ""
"Cal evitar iniciar sessions com a usuari privilegiat per raons de seguretat." "Cal evitar iniciar sessions com a usuari privilegiat per raons de seguretat."
" Si és possible, entreu com a un usuari normal." " Si és possible, entreu com a un usuari normal."
#: js/ui/main.js:337 #: js/ui/main.js:334
msgid "Screen Lock disabled" msgid "Screen Lock disabled"
msgstr "La pantalla de bloqueig està inhabilitada" msgstr "La pantalla de bloqueig està inhabilitada"
#: js/ui/main.js:338 #: js/ui/main.js:335
msgid "Screen Locking requires the GNOME display manager." msgid "Screen Locking requires the GNOME display manager."
msgstr "El bloqueig de pantalla requereix el gestor de pantalla del GNOME." msgstr "El bloqueig de pantalla requereix el gestor de pantalla del GNOME."
@ -1597,7 +1619,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: js/ui/panel.js:827 #: js/ui/panel.js:825
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@ -1772,7 +1794,7 @@ msgstr "Text gran"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:49 js/ui/status/network.js:595 #: js/ui/status/bluetooth.js:49 js/ui/status/network.js:619
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Paràmetres del Bluetooth" msgstr "Paràmetres del Bluetooth"
@ -1856,19 +1878,19 @@ msgstr ""
"Podeu canviar la configuració de l'accés a la ubicació sempre que vulgueu " "Podeu canviar la configuració de l'accés a la ubicació sempre que vulgueu "
"des de la configuració de la privacitat." "des de la configuració de la privacitat."
#: js/ui/status/network.js:70 #: js/ui/status/network.js:71
msgid "<unknown>" msgid "<unknown>"
msgstr "<desconegut>" msgstr "<desconegut>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:424 js/ui/status/network.js:1320 #: js/ui/status/network.js:449 js/ui/status/network.js:1344
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s apagat" msgstr "%s apagat"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
# N.T.: p. ex. Connectat amb fil # N.T.: p. ex. Connectat amb fil
#: js/ui/status/network.js:427 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "Connectat %s" msgstr "Connectat %s"
@ -1877,26 +1899,26 @@ msgstr "Connectat %s"
#. are not #. are not
#. under NetworkManager's control (and thus cannot be used in the menu); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:432 #: js/ui/status/network.js:457
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s no gestionat" msgstr "%s no gestionat"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 #: js/ui/status/network.js:460
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "%s s'està desconnectant" msgstr "%s s'està desconnectant"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:442 js/ui/status/network.js:1312 #: js/ui/status/network.js:467 js/ui/status/network.js:1336
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s s'està connectant" msgstr "%s s'està connectant"
#. Translators: this is for network connections that require some kind of key #. Translators: this is for network connections that require some kind of key
#. or password; %s is a network identifier #. or password; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:470
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s requereix autenticació" msgstr "%s requereix autenticació"
@ -1904,7 +1926,7 @@ msgstr "%s requereix autenticació"
#. Translators: this is for devices that require some kind of firmware or #. Translators: this is for devices that require some kind of firmware or
#. kernel #. kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:478
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Manca el microprogramari per %s" msgstr "Manca el microprogramari per %s"
@ -1912,159 +1934,159 @@ msgstr "Manca el microprogramari per %s"
#. Translators: this is for a network device that cannot be activated (for #. Translators: this is for a network device that cannot be activated (for
#. example it #. example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:457 #: js/ui/status/network.js:482
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s no disponible" msgstr "%s no disponible"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:460 #: js/ui/status/network.js:485
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "%s ha fallat la connexió" msgstr "%s ha fallat la connexió"
#: js/ui/status/network.js:472 #: js/ui/status/network.js:497
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Paràmetres de la xarxa amb fil" msgstr "Paràmetres de la xarxa amb fil"
#: js/ui/status/network.js:515 #: js/ui/status/network.js:540
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configuració de la xarxa de banda ampla mòbil" msgstr "Configuració de la xarxa de banda ampla mòbil"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:562 js/ui/status/network.js:1317 #: js/ui/status/network.js:586 js/ui/status/network.js:1341
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s maquinari inhabilitat" msgstr "%s maquinari inhabilitat"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:566 #: js/ui/status/network.js:590
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s Inhabilitat" msgstr "%s Inhabilitat"
#: js/ui/status/network.js:607 #: js/ui/status/network.js:631
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Connecta a Internet" msgstr "Connecta a Internet"
#: js/ui/status/network.js:811 #: js/ui/status/network.js:835
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "El mode d'avió és actiu" msgstr "El mode d'avió és actiu"
#: js/ui/status/network.js:812 #: js/ui/status/network.js:836
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Quan el mode d'avió és actiu es desactiva la xarxa sense fil." msgstr "Quan el mode d'avió és actiu es desactiva la xarxa sense fil."
#: js/ui/status/network.js:813 #: js/ui/status/network.js:837
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Desactiva el mode d'avió" msgstr "Desactiva el mode d'avió"
#: js/ui/status/network.js:822 #: js/ui/status/network.js:846
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "La xarxa sense fil està desactivada" msgstr "La xarxa sense fil està desactivada"
#: js/ui/status/network.js:823 #: js/ui/status/network.js:847
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "" msgstr ""
"S'ha d'activar la xarxa sense fil per a poder-se connectar a una xarxa." "S'ha d'activar la xarxa sense fil per a poder-se connectar a una xarxa."
#: js/ui/status/network.js:824 #: js/ui/status/network.js:848
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Activa la xarxa sense fil" msgstr "Activa la xarxa sense fil"
#: js/ui/status/network.js:849 #: js/ui/status/network.js:873
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Xarxes sense fil" msgstr "Xarxes sense fil"
#: js/ui/status/network.js:851 #: js/ui/status/network.js:875
msgid "Select a network" msgid "Select a network"
msgstr "Trieu una xarxa" msgstr "Trieu una xarxa"
#: js/ui/status/network.js:883 #: js/ui/status/network.js:907
msgid "No Networks" msgid "No Networks"
msgstr "Cap xarxa" msgstr "Cap xarxa"
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:106 #: js/ui/status/network.js:928 js/ui/status/rfkill.js:108
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Utilitza l'interruptor de maquinari per a desactivar-la" msgstr "Utilitza l'interruptor de maquinari per a desactivar-la"
#: js/ui/status/network.js:1181 #: js/ui/status/network.js:1205
msgid "Select Network" msgid "Select Network"
msgstr "Trieu una xarxa" msgstr "Trieu una xarxa"
#: js/ui/status/network.js:1187 #: js/ui/status/network.js:1211
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Paràmetres de la xarxa sense fil" msgstr "Paràmetres de la xarxa sense fil"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1308 #: js/ui/status/network.js:1332
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Hostpot %s actiu" msgstr "Hostpot %s actiu"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1323 #: js/ui/status/network.js:1347
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s no està connectat" msgstr "%s no està connectat"
#: js/ui/status/network.js:1420 #: js/ui/status/network.js:1444
msgid "connecting…" msgid "connecting…"
msgstr "s'està connectant..." msgstr "s'està connectant..."
#. Translators: this is for network connections that require some kind of key #. Translators: this is for network connections that require some kind of key
#. or password #. or password
#: js/ui/status/network.js:1423 #: js/ui/status/network.js:1447
msgid "authentication required" msgid "authentication required"
msgstr "cal autenticació" msgstr "cal autenticació"
#: js/ui/status/network.js:1425 #: js/ui/status/network.js:1449
msgid "connection failed" msgid "connection failed"
msgstr "ha fallat la connexió" msgstr "ha fallat la connexió"
#: js/ui/status/network.js:1476 #: js/ui/status/network.js:1500
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Paràmetres de la VPN" msgstr "Paràmetres de la VPN"
#: js/ui/status/network.js:1493 #: js/ui/status/network.js:1517
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1503 #: js/ui/status/network.js:1527
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN apagada" msgstr "VPN apagada"
#: js/ui/status/network.js:1564 js/ui/status/rfkill.js:84 #: js/ui/status/network.js:1588 js/ui/status/rfkill.js:84
msgid "Network Settings" msgid "Network Settings"
msgstr "Paràmetres de xarxa" msgstr "Paràmetres de xarxa"
#: js/ui/status/network.js:1593 #: js/ui/status/network.js:1617
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s connexió amb fil" msgstr[0] "%s connexió amb fil"
msgstr[1] "%s connexions amb fil" msgstr[1] "%s connexions amb fil"
#: js/ui/status/network.js:1597 #: js/ui/status/network.js:1621
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s connexió Wifi" msgstr[0] "%s connexió Wifi"
msgstr[1] "%s connexions Wifi" msgstr[1] "%s connexions Wifi"
#: js/ui/status/network.js:1601 #: js/ui/status/network.js:1625
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s connexió mòdem" msgstr[0] "%s connexió mòdem"
msgstr[1] "%s connexions mòdem" msgstr[1] "%s connexions mòdem"
#: js/ui/status/network.js:1735 #: js/ui/status/network.js:1759
msgid "Connection failed" msgid "Connection failed"
msgstr "Ha fallat la connexió" msgstr "Ha fallat la connexió"
#: js/ui/status/network.js:1736 #: js/ui/status/network.js:1760
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Ha fallat l'activació de la connexió de xarxa" msgstr "Ha fallat l'activació de la connexió de xarxa"
@ -2119,11 +2141,11 @@ msgstr "%d%02d per a completar la càrrega (%d %%)"
msgid "%d%%" msgid "%d%%"
msgstr "%d%%" msgstr "%d%%"
#: js/ui/status/remoteAccess.js:43 #: js/ui/status/remoteAccess.js:45
msgid "Screen is Being Shared" msgid "Screen is Being Shared"
msgstr "Es comparteix la pantalla" msgstr "Es comparteix la pantalla"
#: js/ui/status/remoteAccess.js:45 #: js/ui/status/remoteAccess.js:47
msgid "Turn off" msgid "Turn off"
msgstr "Desactiva" msgstr "Desactiva"
@ -2134,30 +2156,34 @@ msgstr "Desactiva"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "El mode d'avió és actiu" msgstr "El mode d'avió és actiu"
#: js/ui/status/system.js:102 #: js/ui/status/system.js:104
msgid "Lock" msgid "Lock"
msgstr "Bloqueja" msgstr "Bloqueja"
#: js/ui/status/system.js:115 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Apaga / Surt" msgstr "Apaga / Surt"
#: js/ui/status/system.js:118 #: js/ui/status/system.js:119
msgid "Log Out"
msgstr "Surt"
#: js/ui/status/system.js:130
msgid "Switch User…"
msgstr "Canvia d'usuari…"
#: js/ui/status/system.js:144
msgid "Suspend" msgid "Suspend"
msgstr "Atura temporalment" msgstr "Atura temporalment"
#: js/ui/status/system.js:156 #: js/ui/status/system.js:130
msgid "Restart…"
msgstr "S'està reiniciant…"
#: js/ui/status/system.js:141
msgid "Power Off…" msgid "Power Off…"
msgstr "Atura…" msgstr "Atura…"
#: js/ui/status/system.js:154
msgid "Log Out"
msgstr "Surt"
#: js/ui/status/system.js:165
msgid "Switch User…"
msgstr "Canvia d'usuari…"
#: js/ui/status/thunderbolt.js:263 #: js/ui/status/thunderbolt.js:263
msgid "Thunderbolt" msgid "Thunderbolt"
msgstr "Thunderbolt" msgstr "Thunderbolt"
@ -2262,21 +2288,21 @@ msgid "“%s” is ready"
msgstr "«%s» ja està a punt" msgstr "«%s» ja està a punt"
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:60
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "Mantenir aquesta configuració de la pantalla?" msgstr "Mantenir aquesta configuració de la pantalla?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#: js/ui/windowManager.js:64 #: js/ui/windowManager.js:69
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Descarta els canvis" msgstr "Descarta els canvis"
#: js/ui/windowManager.js:67 #: js/ui/windowManager.js:72
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Mantén els canvis" msgstr "Mantén els canvis"
#: js/ui/windowManager.js:86 #: js/ui/windowManager.js:91
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -2285,7 +2311,7 @@ msgstr[1] "Es descartaran els canvis d'aquí %d segons"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:546 #: js/ui/windowManager.js:551
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"

295
po/es.po

@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-07-27 06:59+0000\n" "POT-Creation-Date: 2020-08-10 23:58+0000\n"
"PO-Revision-Date: 2020-07-29 09:47+0200\n" "PO-Revision-Date: 2020-08-13 10:39+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n" "Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\n" "Language: es_ES\n"
@ -446,9 +446,9 @@ msgstr "Visitar la página web de la extensión"
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57 #: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139 #: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:183 #: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:183
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 #: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149 #: js/ui/status/network.js:940 subprojects/extensions-app/js/main.js:149
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@ -484,7 +484,7 @@ msgstr "(ej., usuario o %s)"
msgid "Username" msgid "Username"
msgstr "Nombre de usuario" msgstr "Nombre de usuario"
#: js/gdm/loginDialog.js:1254 #: js/gdm/loginDialog.js:1253
msgid "Login Window" msgid "Login Window"
msgstr "Ventana de inicio de sesión" msgstr "Ventana de inicio de sesión"
@ -502,71 +502,84 @@ msgid "(or swipe finger)"
msgstr "(o pase el dedo)" msgstr "(o pase el dedo)"
#. Translators: The name of the power-off action in search #. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:93 #: js/misc/systemActions.js:91
msgctxt "search-result" msgctxt "search-result"
msgid "Power Off" msgid "Power Off"
msgstr "Apagar" msgstr "Apagar"
#. Translators: A list of keywords that match the power-off action, separated by semicolons #. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:96 #: js/misc/systemActions.js:94
msgid "power off;shutdown;reboot;restart;halt;stop" #| msgid "power off;shutdown;reboot;restart;halt;stop"
msgid "power off;shutdown;halt;stop"
msgstr "apagar;apagado;reinicio;reiniciar;detener;parar" msgstr "apagar;apagado;reinicio;reiniciar;detener;parar"
#. Translators: The name of the restart action in search
#: js/misc/systemActions.js:99
#| msgid "Restart"
msgctxt "search-result"
msgid "Restart"
msgstr "Reiniciar"
#. Translators: A list of keywords that match the restart action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "reboot;restart;"
msgstr "reiniciar;rebotar;"
#. Translators: The name of the lock screen action in search #. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:101 #: js/misc/systemActions.js:107
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Bloquear la pantalla" msgstr "Bloquear la pantalla"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons #. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:104 #: js/misc/systemActions.js:110
msgid "lock screen" msgid "lock screen"
msgstr "bloquear;pantalla" msgstr "bloquear;pantalla"
#. Translators: The name of the logout action in search #. Translators: The name of the logout action in search
#: js/misc/systemActions.js:109 #: js/misc/systemActions.js:115
msgctxt "search-result" msgctxt "search-result"
msgid "Log Out" msgid "Log Out"
msgstr "Cerrar la sesión" msgstr "Cerrar la sesión"
#. Translators: A list of keywords that match the logout action, separated by semicolons #. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:112 #: js/misc/systemActions.js:118
msgid "logout;log out;sign off" msgid "logout;log out;sign off"
msgstr "cerrar;sesión;salir" msgstr "cerrar;sesión;salir"
#. Translators: The name of the suspend action in search #. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:117 #: js/misc/systemActions.js:123
msgctxt "search-result" msgctxt "search-result"
msgid "Suspend" msgid "Suspend"
msgstr "Suspender" msgstr "Suspender"
#. Translators: A list of keywords that match the suspend action, separated by semicolons #. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:120 #: js/misc/systemActions.js:126
msgid "suspend;sleep" msgid "suspend;sleep"
msgstr "suspender;dormir" msgstr "suspender;dormir"
#. Translators: The name of the switch user action in search #. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:125 #: js/misc/systemActions.js:131
msgctxt "search-result" msgctxt "search-result"
msgid "Switch User" msgid "Switch User"
msgstr "Cambiar de usuario" msgstr "Cambiar de usuario"
#. Translators: A list of keywords that match the switch user action, separated by semicolons #. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:128 #: js/misc/systemActions.js:134
msgid "switch user" msgid "switch user"
msgstr "cambiar;usuario" msgstr "cambiar;usuario"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:135 #: js/misc/systemActions.js:141
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "bloquear orientación;desbloquear orientación;pantalla;rotación" msgstr "bloquear orientación;desbloquear orientación;pantalla;rotación"
#: js/misc/systemActions.js:255 #: js/misc/systemActions.js:266
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Desbloquear la rotación de la pantalla" msgstr "Desbloquear la rotación de la pantalla"
#: js/misc/systemActions.js:256 #: js/misc/systemActions.js:267
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Bloquear la rotación de la pantalla" msgstr "Bloquear la rotación de la pantalla"
@ -736,31 +749,31 @@ msgid "Unnamed Folder"
msgstr "Carpeta sin nombre" msgstr "Carpeta sin nombre"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2767 js/ui/panel.js:75 #: js/ui/appDisplay.js:2762 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Ventanas abiertas" msgstr "Ventanas abiertas"
#: js/ui/appDisplay.js:2786 js/ui/panel.js:82 #: js/ui/appDisplay.js:2781 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Ventana nueva" msgstr "Ventana nueva"
#: js/ui/appDisplay.js:2802 #: js/ui/appDisplay.js:2797
msgid "Launch using Integrated Graphics Card" msgid "Launch using Integrated Graphics Card"
msgstr "Lanzar usando la tarjeta gráfica integrada" msgstr "Lanzar usando la tarjeta gráfica integrada"
#: js/ui/appDisplay.js:2803 #: js/ui/appDisplay.js:2798
msgid "Launch using Discrete Graphics Card" msgid "Launch using Discrete Graphics Card"
msgstr "Lanzar usando la tarjeta gráfica discreta" msgstr "Lanzar usando la tarjeta gráfica discreta"
#: js/ui/appDisplay.js:2831 js/ui/dash.js:239 #: js/ui/appDisplay.js:2826 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Quitar de los favoritos" msgstr "Quitar de los favoritos"
#: js/ui/appDisplay.js:2837 #: js/ui/appDisplay.js:2832
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a los favoritos" msgstr "Añadir a los favoritos"
#: js/ui/appDisplay.js:2847 js/ui/panel.js:93 #: js/ui/appDisplay.js:2842 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
@ -960,8 +973,8 @@ msgid ""
msgstr "" msgstr ""
"Alternativamente puede conectarse pulsando el botón «WPS» de su router." "Alternativamente puede conectarse pulsando el botón «WPS» de su router."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:227 #: js/ui/components/networkAgent.js:104 js/ui/status/network.js:252
#: js/ui/status/network.js:318 js/ui/status/network.js:919 #: js/ui/status/network.js:343 js/ui/status/network.js:943
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
@ -1026,7 +1039,7 @@ msgstr "PIN"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Se requiere una contraseña para conectarse a «%s»." msgstr "Se requiere una contraseña para conectarse a «%s»."
#: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1694 #: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1718
msgid "Network Manager" msgid "Network Manager"
msgstr "Gestor de la red" msgstr "Gestor de la red"
@ -1152,86 +1165,94 @@ msgstr "Meteorología"
msgid "Select weather location…" msgid "Select weather location…"
msgstr "Seleccionar ubicación meteorológica…" msgstr "Seleccionar ubicación meteorológica…"
#: js/ui/endSessionDialog.js:37 #: js/ui/endSessionDialog.js:39
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Cerrar la sesión %s" msgstr "Cerrar la sesión %s"
#: js/ui/endSessionDialog.js:38 #: js/ui/endSessionDialog.js:40
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Cerrar la sesión" msgstr "Cerrar la sesión"
#: js/ui/endSessionDialog.js:40 #: js/ui/endSessionDialog.js:43
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "se cerrará automáticamente la sesión de %s en %d segundo." msgstr[0] "se cerrará automáticamente la sesión de %s en %d segundo."
msgstr[1] "se cerrará automáticamente la sesión de %s en %d segundos." msgstr[1] "se cerrará automáticamente la sesión de %s en %d segundos."
#: js/ui/endSessionDialog.js:45 #: js/ui/endSessionDialog.js:49
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Su sesión se cerrará automáticamente en %d segundo." msgstr[0] "Su sesión se cerrará automáticamente en %d segundo."
msgstr[1] "Su sesión se cerrará automáticamente en %d segundos." msgstr[1] "Su sesión se cerrará automáticamente en %d segundos."
#: js/ui/endSessionDialog.js:51 #: js/ui/endSessionDialog.js:56
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Cerrar la sesión" msgstr "Cerrar la sesión"
#: js/ui/endSessionDialog.js:56 #: js/ui/endSessionDialog.js:62
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Apagar" msgstr "Apagar"
#: js/ui/endSessionDialog.js:57 #: js/ui/endSessionDialog.js:63
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Instalar actualizaciones y apagar" msgstr "Instalar actualizaciones y apagar"
#: js/ui/endSessionDialog.js:59 #: js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "El sistema se apagará automáticamente en %d segundo." msgstr[0] "El sistema se apagará automáticamente en %d segundo."
msgstr[1] "El sistema se apagará automáticamente en %d segundos." msgstr[1] "El sistema se apagará automáticamente en %d segundos."
#: js/ui/endSessionDialog.js:63 #: js/ui/endSessionDialog.js:70 js/ui/endSessionDialog.js:89
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Instalar las actualizaciones de software pendientes" msgstr "Instalar las actualizaciones de software pendientes"
#: js/ui/endSessionDialog.js:66 js/ui/endSessionDialog.js:82 #: js/ui/endSessionDialog.js:74
msgctxt "button"
msgid "Restart"
msgstr "Reiniciar"
#: js/ui/endSessionDialog.js:68
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Apagar" msgstr "Apagar"
#: js/ui/endSessionDialog.js:74 #: js/ui/endSessionDialog.js:81
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"
#: js/ui/endSessionDialog.js:76 #: js/ui/endSessionDialog.js:82
#, fuzzy
#| msgctxt "title"
#| msgid "Install Updates & Power Off"
msgctxt "title"
msgid "Install Updates & Restart"
msgstr "Instalar actualizaciones y apagar"
#: js/ui/endSessionDialog.js:85
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "El sistema se reiniciará automáticamente en %d segundo." msgstr[0] "El sistema se reiniciará automáticamente en %d segundo."
msgstr[1] "El sistema se reiniciará automáticamente en %d segundos." msgstr[1] "El sistema se reiniciará automáticamente en %d segundos."
#: js/ui/endSessionDialog.js:89 #: js/ui/endSessionDialog.js:93
msgctxt "button"
msgid "Restart"
msgstr "Reiniciar"
#: js/ui/endSessionDialog.js:101
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Reiniciar e instalar actualizaciones" msgstr "Reiniciar e instalar actualizaciones"
#: js/ui/endSessionDialog.js:91 #: js/ui/endSessionDialog.js:104
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@ -1243,22 +1264,22 @@ msgstr[1] ""
"El sistema se reiniciará automáticamente e instalará las actualizaciones en " "El sistema se reiniciará automáticamente e instalará las actualizaciones en "
"%d segundos." "%d segundos."
#: js/ui/endSessionDialog.js:97 js/ui/endSessionDialog.js:116 #: js/ui/endSessionDialog.js:111 js/ui/endSessionDialog.js:132
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Reiniciar e instalar" msgstr "Reiniciar e instalar"
#: js/ui/endSessionDialog.js:98 #: js/ui/endSessionDialog.js:113
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Instalar y apagar" msgstr "Instalar y apagar"
#: js/ui/endSessionDialog.js:99 #: js/ui/endSessionDialog.js:114
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Apagar después de instalar las actualizaciones" msgstr "Apagar después de instalar las actualizaciones"
#: js/ui/endSessionDialog.js:106 #: js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Upgrade" msgid "Restart & Install Upgrade"
msgstr "Reiniciar e instalar actualizaciones" msgstr "Reiniciar e instalar actualizaciones"
@ -1266,7 +1287,7 @@ msgstr "Reiniciar e instalar actualizaciones"
#. Translators: This is the text displayed for system upgrades in the #. Translators: This is the text displayed for system upgrades in the
#. shut down dialog. First %s gets replaced with the distro name and #. shut down dialog. First %s gets replaced with the distro name and
#. second %s with the distro version to upgrade to #. second %s with the distro version to upgrade to
#: js/ui/endSessionDialog.js:111 #: js/ui/endSessionDialog.js:126
#, javascript-format #, javascript-format
msgid "" msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long " "%s %s will be installed after restart. Upgrade installation can take a long "
@ -1276,27 +1297,34 @@ msgstr ""
"puede tardar mucho tiempo: asegúrese de que tiene una copia de respaldo y de " "puede tardar mucho tiempo: asegúrese de que tiene una copia de respaldo y de "
"que el equipo está enchufado." "que el equipo está enchufado."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:284
msgid "Running on battery power: Please plug in before installing updates." #, fuzzy
#| msgid "Running on battery power: Please plug in before installing updates."
msgid "Low battery power: please plug in before installing updates."
msgstr "" msgstr ""
"Funcionando con batería: conéctese antes de instalar las actualizaciones." "Funcionando con batería: conéctese antes de instalar las actualizaciones."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:293
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "Algunas aplicaciones están ocupadas o tienen trabajo sin guardar" msgstr "Algunas aplicaciones están ocupadas o tienen trabajo sin guardar"
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:298
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Hay otros usuarios con la sesión iniciada" msgstr "Hay otros usuarios con la sesión iniciada"
#: js/ui/endSessionDialog.js:467
msgctxt "button"
msgid "Boot Options"
msgstr ""
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:583 #: js/ui/endSessionDialog.js:685
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (remoto)" msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:586 #: js/ui/endSessionDialog.js:688
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (consola)" msgstr "%s (consola)"
@ -1399,15 +1427,15 @@ msgid "Leave On"
msgstr "Dejar activada" msgstr "Dejar activada"
#: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1291 #: js/ui/status/network.js:1315
msgid "Turn On" msgid "Turn On"
msgstr "Encendido" msgstr "Encendido"
#: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:135 js/ui/status/network.js:319 #: js/ui/status/network.js:160 js/ui/status/network.js:344
#: js/ui/status/network.js:1291 js/ui/status/network.js:1403 #: js/ui/status/network.js:1315 js/ui/status/network.js:1427
#: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81 #: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:108 #: js/ui/status/rfkill.js:110
msgid "Turn Off" msgid "Turn Off"
msgstr "Apagar" msgstr "Apagar"
@ -1468,11 +1496,11 @@ msgstr "Ver fuente"
msgid "Web Page" msgid "Web Page"
msgstr "Página web" msgstr "Página web"
#: js/ui/main.js:297 #: js/ui/main.js:294
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Sesión iniciada como usuario con privilegios" msgstr "Sesión iniciada como usuario con privilegios"
#: js/ui/main.js:298 #: js/ui/main.js:295
msgid "" msgid ""
"Running a session as a privileged user should be avoided for security " "Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user." "reasons. If possible, you should log in as a normal user."
@ -1480,11 +1508,11 @@ msgstr ""
"Se debe evitar ejecutar una sesión como usuario con privilegios por motivos " "Se debe evitar ejecutar una sesión como usuario con privilegios por motivos "
"de seguridad. Si es posible, inicie sesión como un usuario normal." "de seguridad. Si es posible, inicie sesión como un usuario normal."
#: js/ui/main.js:337 #: js/ui/main.js:334
msgid "Screen Lock disabled" msgid "Screen Lock disabled"
msgstr "Pantalla de bloqueo desactivada" msgstr "Pantalla de bloqueo desactivada"
#: js/ui/main.js:338 #: js/ui/main.js:335
msgid "Screen Locking requires the GNOME display manager." msgid "Screen Locking requires the GNOME display manager."
msgstr "La pantalla de bloqueo necesita el gestor de pantallas de GNOME." msgstr "La pantalla de bloqueo necesita el gestor de pantallas de GNOME."
@ -1577,7 +1605,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: js/ui/panel.js:827 #: js/ui/panel.js:825
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@ -1754,7 +1782,7 @@ msgstr "Texto grande"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:49 js/ui/status/network.js:595 #: js/ui/status/bluetooth.js:49 js/ui/status/network.js:619
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth" msgstr "Configuración de Bluetooth"
@ -1838,18 +1866,18 @@ msgstr ""
"Los servicios de ubicación se pueden cambiar en cualquier momento desde la " "Los servicios de ubicación se pueden cambiar en cualquier momento desde la "
"configuración de privacidad." "configuración de privacidad."
#: js/ui/status/network.js:70 #: js/ui/status/network.js:71
msgid "<unknown>" msgid "<unknown>"
msgstr "<desconocido>" msgstr "<desconocido>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:424 js/ui/status/network.js:1320 #: js/ui/status/network.js:449 js/ui/status/network.js:1344
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s apagada" msgstr "%s apagada"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:427 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s conectada" msgstr "%s conectada"
@ -1857,189 +1885,189 @@ msgstr "%s conectada"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:432 #: js/ui/status/network.js:457
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s sin gestionar" msgstr "%s sin gestionar"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 #: js/ui/status/network.js:460
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "Desconectando %s" msgstr "Desconectando %s"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:442 js/ui/status/network.js:1312 #: js/ui/status/network.js:467 js/ui/status/network.js:1336
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "Conectando %s" msgstr "Conectando %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:470
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s requiere autenticación" msgstr "%s requiere autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:478
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Falta el «firmware» para %s" msgstr "Falta el «firmware» para %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:457 #: js/ui/status/network.js:482
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s no disponible" msgstr "%s no disponible"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:460 #: js/ui/status/network.js:485
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "Falló la conexión %s" msgstr "Falló la conexión %s"
#: js/ui/status/network.js:472 #: js/ui/status/network.js:497
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Configuración de red cableada" msgstr "Configuración de red cableada"
#: js/ui/status/network.js:515 #: js/ui/status/network.js:540
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil" msgstr "Configuración de banda ancha móvil"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:562 js/ui/status/network.js:1317 #: js/ui/status/network.js:586 js/ui/status/network.js:1341
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "Hardware %s desactivado" msgstr "Hardware %s desactivado"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:566 #: js/ui/status/network.js:590
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s desactivado" msgstr "%s desactivado"
#: js/ui/status/network.js:607 #: js/ui/status/network.js:631
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Conectar a Internet" msgstr "Conectar a Internet"
#: js/ui/status/network.js:811 #: js/ui/status/network.js:835
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "El modo avión está activado" msgstr "El modo avión está activado"
#: js/ui/status/network.js:812 #: js/ui/status/network.js:836
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión." msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
#: js/ui/status/network.js:813 #: js/ui/status/network.js:837
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Apagar el modo avión" msgstr "Apagar el modo avión"
#: js/ui/status/network.js:822 #: js/ui/status/network.js:846
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "La Wi-Fi está desactivada" msgstr "La Wi-Fi está desactivada"
#: js/ui/status/network.js:823 #: js/ui/status/network.js:847
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Se debe activar la Wi-Fi para poder conectarse a la red." msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
#: js/ui/status/network.js:824 #: js/ui/status/network.js:848
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Activar la Wi-Fi" msgstr "Activar la Wi-Fi"
#: js/ui/status/network.js:849 #: js/ui/status/network.js:873
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi" msgstr "Redes Wi-Fi"
#: js/ui/status/network.js:851 #: js/ui/status/network.js:875
msgid "Select a network" msgid "Select a network"
msgstr "Seleccionar una red" msgstr "Seleccionar una red"
#: js/ui/status/network.js:883 #: js/ui/status/network.js:907
msgid "No Networks" msgid "No Networks"
msgstr "No hay redes" msgstr "No hay redes"
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:106 #: js/ui/status/network.js:928 js/ui/status/rfkill.js:108
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar" msgstr "Usar el interruptor hardware para apagar"
#: js/ui/status/network.js:1181 #: js/ui/status/network.js:1205
msgid "Select Network" msgid "Select Network"
msgstr "Seleccionar red" msgstr "Seleccionar red"
#: js/ui/status/network.js:1187 #: js/ui/status/network.js:1211
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi" msgstr "Configuración de Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1308 #: js/ui/status/network.js:1332
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Punto de acceso %s activo" msgstr "Punto de acceso %s activo"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1323 #: js/ui/status/network.js:1347
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s no conectado" msgstr "%s no conectado"
#: js/ui/status/network.js:1420 #: js/ui/status/network.js:1444
msgid "connecting…" msgid "connecting…"
msgstr "conectando…" msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1423 #: js/ui/status/network.js:1447
msgid "authentication required" msgid "authentication required"
msgstr "se necesita autenticación" msgstr "se necesita autenticación"
#: js/ui/status/network.js:1425 #: js/ui/status/network.js:1449
msgid "connection failed" msgid "connection failed"
msgstr "falló la conexión" msgstr "falló la conexión"
#: js/ui/status/network.js:1476 #: js/ui/status/network.js:1500
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Configuración de VPN" msgstr "Configuración de VPN"
#: js/ui/status/network.js:1493 #: js/ui/status/network.js:1517
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1503 #: js/ui/status/network.js:1527
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN apagada" msgstr "VPN apagada"
#: js/ui/status/network.js:1564 js/ui/status/rfkill.js:84 #: js/ui/status/network.js:1588 js/ui/status/rfkill.js:84
msgid "Network Settings" msgid "Network Settings"
msgstr "Configuración de la red" msgstr "Configuración de la red"
#: js/ui/status/network.js:1593 #: js/ui/status/network.js:1617
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s conexión cableada" msgstr[0] "%s conexión cableada"
msgstr[1] "%s conexiones cableadas" msgstr[1] "%s conexiones cableadas"
#: js/ui/status/network.js:1597 #: js/ui/status/network.js:1621
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conexión inalámbrica" msgstr[0] "%s conexión inalámbrica"
msgstr[1] "%s conexiones inalámbricas" msgstr[1] "%s conexiones inalámbricas"
#: js/ui/status/network.js:1601 #: js/ui/status/network.js:1625
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s conexión por módem" msgstr[0] "%s conexión por módem"
msgstr[1] "%s conexiones por módem" msgstr[1] "%s conexiones por módem"
#: js/ui/status/network.js:1735 #: js/ui/status/network.js:1759
msgid "Connection failed" msgid "Connection failed"
msgstr "Falló la conexión" msgstr "Falló la conexión"
#: js/ui/status/network.js:1736 #: js/ui/status/network.js:1760
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red" msgstr "Falló la activación de la conexión de red"
@ -2094,11 +2122,11 @@ msgstr "%d%02d para la carga completa (%d%%)"
msgid "%d%%" msgid "%d%%"
msgstr "%d%%" msgstr "%d%%"
#: js/ui/status/remoteAccess.js:43 #: js/ui/status/remoteAccess.js:45
msgid "Screen is Being Shared" msgid "Screen is Being Shared"
msgstr "Se está compartiendo la pantalla" msgstr "Se está compartiendo la pantalla"
#: js/ui/status/remoteAccess.js:45 #: js/ui/status/remoteAccess.js:47
msgid "Turn off" msgid "Turn off"
msgstr "Apagar" msgstr "Apagar"
@ -2109,30 +2137,36 @@ msgstr "Apagar"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Modo avión activado" msgstr "Modo avión activado"
#: js/ui/status/system.js:102 #: js/ui/status/system.js:104
msgid "Lock" msgid "Lock"
msgstr "Bloquear" msgstr "Bloquear"
#: js/ui/status/system.js:115 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Apagar / cerrar sesión" msgstr "Apagar / cerrar sesión"
#: js/ui/status/system.js:118 #: js/ui/status/system.js:119
msgid "Log Out"
msgstr "Cerrar la sesión"
#: js/ui/status/system.js:130
msgid "Switch User…"
msgstr "Cambiar de usuario…"
#: js/ui/status/system.js:144
msgid "Suspend" msgid "Suspend"
msgstr "Suspender" msgstr "Suspender"
#: js/ui/status/system.js:156 #: js/ui/status/system.js:130
#, fuzzy
#| msgid "Restarting…"
msgid "Restart…"
msgstr "Reiniciando…"
#: js/ui/status/system.js:141
msgid "Power Off…" msgid "Power Off…"
msgstr "Apagar…" msgstr "Apagar…"
#: js/ui/status/system.js:154
msgid "Log Out"
msgstr "Cerrar la sesión"
#: js/ui/status/system.js:165
msgid "Switch User…"
msgstr "Cambiar de usuario…"
#: js/ui/status/thunderbolt.js:263 #: js/ui/status/thunderbolt.js:263
msgid "Thunderbolt" msgid "Thunderbolt"
msgstr "Thunderbolt" msgstr "Thunderbolt"
@ -2240,22 +2274,22 @@ msgid "“%s” is ready"
msgstr "«%s» está preparado" msgstr "«%s» está preparado"
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:60
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "¿Quiere mantener esta configuración de la pantalla?" msgstr "¿Quiere mantener esta configuración de la pantalla?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #.
#: js/ui/windowManager.js:64 #: js/ui/windowManager.js:69
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Revertir configuración" msgstr "Revertir configuración"
#: js/ui/windowManager.js:67 #: js/ui/windowManager.js:72
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Mantener cambios" msgstr "Mantener cambios"
#: js/ui/windowManager.js:86 #: js/ui/windowManager.js:91
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -2264,7 +2298,7 @@ msgstr[1] "La configuración se revertirá en %d segundos"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:546 #: js/ui/windowManager.js:551
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@ -3562,9 +3596,6 @@ msgstr "Sonidos del sistema"
#~ msgid "Power" #~ msgid "Power"
#~ msgstr "Energía" #~ msgstr "Energía"
#~ msgid "Restart"
#~ msgstr "Reiniciar"
#~ msgid "Volume, network, battery" #~ msgid "Volume, network, battery"
#~ msgstr "Volumen, red, batería" #~ msgstr "Volumen, red, batería"

745
po/eu.po

File diff suppressed because it is too large Load Diff

1270
po/gl.po

File diff suppressed because it is too large Load Diff

@ -24,8 +24,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-07-18 13:44+0000\n" "POT-Creation-Date: 2020-08-10 08:53+0000\n"
"PO-Revision-Date: 2020-07-19 09:46-0300\n" "PO-Revision-Date: 2020-08-10 08:51-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -237,92 +237,109 @@ msgstr ""
"Habilita uma API de D-Bus que permite introspectar o estado do aplicativo do " "Habilita uma API de D-Bus que permite introspectar o estado do aplicativo do "
"shell." "shell."
#: data/org.gnome.shell.gschema.xml.in:119 #: data/org.gnome.shell.gschema.xml.in:114
msgid "Layout of the app picker"
msgstr "Layout do seletor de aplicativo"
#: data/org.gnome.shell.gschema.xml.in:115
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
"“application id” → 'data' pair. Currently, the following values are stored "
"as 'data': • “position”: the position of the application icon in the page"
msgstr ""
"Layout do seletor de aplicativo. Cada entrada na matriz é uma página. As "
"páginas são armazenadas na ordem em que aparecem no GNOME Shell. Cada página "
"contém um par “id do aplicativo” → “dados”. Atualmente, os seguintes valores "
"são armazenados como “dados”: • “posição”: a posição do ícone do aplicativo "
"na página"
#: data/org.gnome.shell.gschema.xml.in:130
msgid "Keybinding to open the application menu" msgid "Keybinding to open the application menu"
msgstr "Atalho de teclado para abrir um menu de aplicativo" msgstr "Atalho de teclado para abrir um menu de aplicativo"
#: data/org.gnome.shell.gschema.xml.in:120 #: data/org.gnome.shell.gschema.xml.in:131
msgid "Keybinding to open the application menu." msgid "Keybinding to open the application menu."
msgstr "Atalho de teclado para abrir um menu de aplicativo." msgstr "Atalho de teclado para abrir um menu de aplicativo."
#: data/org.gnome.shell.gschema.xml.in:126 #: data/org.gnome.shell.gschema.xml.in:137
msgid "Keybinding to open the “Show Applications” view" msgid "Keybinding to open the “Show Applications” view"
msgstr "Atalho de teclado para abrir a visualização “Mostrar aplicativos”" msgstr "Atalho de teclado para abrir a visualização “Mostrar aplicativos”"
#: data/org.gnome.shell.gschema.xml.in:127 #: data/org.gnome.shell.gschema.xml.in:138
msgid "" msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview." "Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr "" msgstr ""
"Atalho de teclado para abrir a visualização “Mostrar aplicativos” do " "Atalho de teclado para abrir a visualização “Mostrar aplicativos” do "
"panorama de atividades." "panorama de atividades."
#: data/org.gnome.shell.gschema.xml.in:134 #: data/org.gnome.shell.gschema.xml.in:145
msgid "Keybinding to open the overview" msgid "Keybinding to open the overview"
msgstr "Atalho de teclado para abrir o panorama" msgstr "Atalho de teclado para abrir o panorama"
#: data/org.gnome.shell.gschema.xml.in:135 #: data/org.gnome.shell.gschema.xml.in:146
msgid "Keybinding to open the Activities Overview." msgid "Keybinding to open the Activities Overview."
msgstr "Atalho de teclado para abrir o panorama de atividades." msgstr "Atalho de teclado para abrir o panorama de atividades."
#: data/org.gnome.shell.gschema.xml.in:141 #: data/org.gnome.shell.gschema.xml.in:152
msgid "Keybinding to toggle the visibility of the notification list" msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Atalho de teclado para alternar a visibilidade da lista de notificação" msgstr "Atalho de teclado para alternar a visibilidade da lista de notificação"
#: data/org.gnome.shell.gschema.xml.in:142 #: data/org.gnome.shell.gschema.xml.in:153
msgid "Keybinding to toggle the visibility of the notification list." msgid "Keybinding to toggle the visibility of the notification list."
msgstr "" msgstr ""
"Atalho de teclado para alternar a visibilidade da lista de notificação." "Atalho de teclado para alternar a visibilidade da lista de notificação."
#: data/org.gnome.shell.gschema.xml.in:148 #: data/org.gnome.shell.gschema.xml.in:159
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "Atalho de teclado para ativar a notificação ativa" msgstr "Atalho de teclado para ativar a notificação ativa"
#: data/org.gnome.shell.gschema.xml.in:149 #: data/org.gnome.shell.gschema.xml.in:160
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "Atalho de teclado para ativar a notificação ativa." msgstr "Atalho de teclado para ativar a notificação ativa."
#: data/org.gnome.shell.gschema.xml.in:155 #: data/org.gnome.shell.gschema.xml.in:166
msgid "Switch to application 1" msgid "Switch to application 1"
msgstr "Alternar para o aplicativo 1" msgstr "Alternar para o aplicativo 1"
#: data/org.gnome.shell.gschema.xml.in:159 #: data/org.gnome.shell.gschema.xml.in:170
msgid "Switch to application 2" msgid "Switch to application 2"
msgstr "Alternar para o aplicativo 2" msgstr "Alternar para o aplicativo 2"
#: data/org.gnome.shell.gschema.xml.in:163 #: data/org.gnome.shell.gschema.xml.in:174
msgid "Switch to application 3" msgid "Switch to application 3"
msgstr "Alternar para o aplicativo 3" msgstr "Alternar para o aplicativo 3"
#: data/org.gnome.shell.gschema.xml.in:167 #: data/org.gnome.shell.gschema.xml.in:178
msgid "Switch to application 4" msgid "Switch to application 4"
msgstr "Alternar para o aplicativo 4" msgstr "Alternar para o aplicativo 4"
#: data/org.gnome.shell.gschema.xml.in:171 #: data/org.gnome.shell.gschema.xml.in:182
msgid "Switch to application 5" msgid "Switch to application 5"
msgstr "Alternar para o aplicativo 5" msgstr "Alternar para o aplicativo 5"
#: data/org.gnome.shell.gschema.xml.in:175 #: data/org.gnome.shell.gschema.xml.in:186
msgid "Switch to application 6" msgid "Switch to application 6"
msgstr "Alternar para o aplicativo 6" msgstr "Alternar para o aplicativo 6"
#: data/org.gnome.shell.gschema.xml.in:179 #: data/org.gnome.shell.gschema.xml.in:190
msgid "Switch to application 7" msgid "Switch to application 7"
msgstr "Alternar para o aplicativo 7" msgstr "Alternar para o aplicativo 7"
#: data/org.gnome.shell.gschema.xml.in:183 #: data/org.gnome.shell.gschema.xml.in:194
msgid "Switch to application 8" msgid "Switch to application 8"
msgstr "Alternar para o aplicativo 8" msgstr "Alternar para o aplicativo 8"
#: data/org.gnome.shell.gschema.xml.in:187 #: data/org.gnome.shell.gschema.xml.in:198
msgid "Switch to application 9" msgid "Switch to application 9"
msgstr "Alternar para o aplicativo 9" msgstr "Alternar para o aplicativo 9"
#: data/org.gnome.shell.gschema.xml.in:196 #: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:223 #: data/org.gnome.shell.gschema.xml.in:234
msgid "Limit switcher to current workspace." msgid "Limit switcher to current workspace."
msgstr "Limitar o alternador ao espaço de trabalho atual." msgstr "Limitar o alternador ao espaço de trabalho atual."
#: data/org.gnome.shell.gschema.xml.in:197 #: data/org.gnome.shell.gschema.xml.in:208
msgid "" msgid ""
"If true, only applications that have windows on the current workspace are " "If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included." "shown in the switcher. Otherwise, all applications are included."
@ -331,11 +348,11 @@ msgstr ""
"janelas no espaço de trabalho atual. Caso contrário, todos os aplicativos " "janelas no espaço de trabalho atual. Caso contrário, todos os aplicativos "
"serão incluídos." "serão incluídos."
#: data/org.gnome.shell.gschema.xml.in:214 #: data/org.gnome.shell.gschema.xml.in:225
msgid "The application icon mode." msgid "The application icon mode."
msgstr "O modo ícone do aplicativo." msgstr "O modo ícone do aplicativo."
#: data/org.gnome.shell.gschema.xml.in:215 #: data/org.gnome.shell.gschema.xml.in:226
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-" "are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -345,7 +362,7 @@ msgstr ""
"válidas são “thumbnail-only” (mostra uma miniatura da janela), “app-icon-" "válidas são “thumbnail-only” (mostra uma miniatura da janela), “app-icon-"
"only” (mostra apenas o ícone do aplicativo) ou “both”." "only” (mostra apenas o ícone do aplicativo) ou “both”."
#: data/org.gnome.shell.gschema.xml.in:224 #: data/org.gnome.shell.gschema.xml.in:235
msgid "" msgid ""
"If true, only windows from the current workspace are shown in the switcher. " "If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included." "Otherwise, all windows are included."
@ -353,58 +370,58 @@ msgstr ""
"Se verdadeiro, o alternador mostrará somente as janelas do espaço de " "Se verdadeiro, o alternador mostrará somente as janelas do espaço de "
"trabalho atual. Caso contrário, todos as janelas serão incluídas." "trabalho atual. Caso contrário, todos as janelas serão incluídas."
#: data/org.gnome.shell.gschema.xml.in:234 #: data/org.gnome.shell.gschema.xml.in:245
msgid "Locations" msgid "Locations"
msgstr "Localizações" msgstr "Localizações"
#: data/org.gnome.shell.gschema.xml.in:235 #: data/org.gnome.shell.gschema.xml.in:246
msgid "The locations to show in world clocks" msgid "The locations to show in world clocks"
msgstr "As localizações para mostrar nos relógios mundiais" msgstr "As localizações para mostrar nos relógios mundiais"
#: data/org.gnome.shell.gschema.xml.in:245 #: data/org.gnome.shell.gschema.xml.in:256
msgid "Automatic location" msgid "Automatic location"
msgstr "Localização automática" msgstr "Localização automática"
#: data/org.gnome.shell.gschema.xml.in:246 #: data/org.gnome.shell.gschema.xml.in:257
msgid "Whether to fetch the current location or not" msgid "Whether to fetch the current location or not"
msgstr "Se deve-se obter a localização atual ou não" msgstr "Se deve-se obter a localização atual ou não"
#: data/org.gnome.shell.gschema.xml.in:253 #: data/org.gnome.shell.gschema.xml.in:264
msgid "Location" msgid "Location"
msgstr "Localização" msgstr "Localização"
#: data/org.gnome.shell.gschema.xml.in:254 #: data/org.gnome.shell.gschema.xml.in:265
msgid "The location for which to show a forecast" msgid "The location for which to show a forecast"
msgstr "A localização para a qual deve-se mostrar uma previsão do tempo" msgstr "A localização para a qual deve-se mostrar uma previsão do tempo"
#: data/org.gnome.shell.gschema.xml.in:266 #: data/org.gnome.shell.gschema.xml.in:277
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "Anexar diálogo modal à janela pai" msgstr "Anexar diálogo modal à janela pai"
#: data/org.gnome.shell.gschema.xml.in:267 #: data/org.gnome.shell.gschema.xml.in:278
#: data/org.gnome.shell.gschema.xml.in:276 #: data/org.gnome.shell.gschema.xml.in:287
#: data/org.gnome.shell.gschema.xml.in:284 #: data/org.gnome.shell.gschema.xml.in:295
#: data/org.gnome.shell.gschema.xml.in:292 #: data/org.gnome.shell.gschema.xml.in:303
#: data/org.gnome.shell.gschema.xml.in:300 #: data/org.gnome.shell.gschema.xml.in:311
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "" msgstr ""
"Esta chave sobrescreve a chave em org.gnome.mutter ao executar o GNOME Shell." "Esta chave sobrescreve a chave em org.gnome.mutter ao executar o GNOME Shell."
#: data/org.gnome.shell.gschema.xml.in:275 #: data/org.gnome.shell.gschema.xml.in:286
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela" "Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
#: data/org.gnome.shell.gschema.xml.in:283 #: data/org.gnome.shell.gschema.xml.in:294
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "Espaços de trabalho são gerenciados dinamicamente" msgstr "Espaços de trabalho são gerenciados dinamicamente"
#: data/org.gnome.shell.gschema.xml.in:291 #: data/org.gnome.shell.gschema.xml.in:302
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Espaços de trabalho apenas no monitor primário" msgstr "Espaços de trabalho apenas no monitor primário"
#: data/org.gnome.shell.gschema.xml.in:299 #: data/org.gnome.shell.gschema.xml.in:310
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover" msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
@ -441,9 +458,9 @@ msgstr "Visita a página web da extensão"
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57 #: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139 #: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:183 #: js/ui/endSessionDialog.js:398 js/ui/extensionDownloader.js:183
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 #: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149 #: js/ui/status/network.js:940 subprojects/extensions-app/js/main.js:149
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@ -479,7 +496,7 @@ msgstr "(ex.: usuário ou %s)"
msgid "Username" msgid "Username"
msgstr "Nome de usuário" msgstr "Nome de usuário"
#: js/gdm/loginDialog.js:1254 #: js/gdm/loginDialog.js:1253
msgid "Login Window" msgid "Login Window"
msgstr "Janela de sessão" msgstr "Janela de sessão"
@ -727,38 +744,36 @@ msgstr "Negar acesso"
msgid "Grant Access" msgid "Grant Access"
msgstr "Conceder acesso" msgstr "Conceder acesso"
#: js/ui/appDisplay.js:903 #: js/ui/appDisplay.js:1297
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Pasta sem nome" msgstr "Pasta sem nome"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2225 js/ui/panel.js:75 #: js/ui/appDisplay.js:2762 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Janelas abertas" msgstr "Janelas abertas"
#: js/ui/appDisplay.js:2244 js/ui/panel.js:82 #: js/ui/appDisplay.js:2781 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Nova janela" msgstr "Nova janela"
#: js/ui/appDisplay.js:2260 #: js/ui/appDisplay.js:2797
#| msgid "Launch using Dedicated Graphics Card"
msgid "Launch using Integrated Graphics Card" msgid "Launch using Integrated Graphics Card"
msgstr "Iniciar usando placa de vídeo integrada" msgstr "Iniciar usando placa de vídeo integrada"
#: js/ui/appDisplay.js:2261 #: js/ui/appDisplay.js:2798
#| msgid "Launch using Dedicated Graphics Card"
msgid "Launch using Discrete Graphics Card" msgid "Launch using Discrete Graphics Card"
msgstr "Iniciar usando placa de vídeo dedicada" msgstr "Iniciar usando placa de vídeo dedicada"
#: js/ui/appDisplay.js:2289 js/ui/dash.js:239 #: js/ui/appDisplay.js:2826 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Remover dos favoritos" msgstr "Remover dos favoritos"
#: js/ui/appDisplay.js:2295 #: js/ui/appDisplay.js:2832
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Adicionar aos favoritos" msgstr "Adicionar aos favoritos"
#: js/ui/appDisplay.js:2305 js/ui/panel.js:93 #: js/ui/appDisplay.js:2842 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalhes" msgstr "Mostrar detalhes"
@ -959,8 +974,8 @@ msgstr ""
"Alternativamente, você pode conectar pressionando o botão “WPS” em seu " "Alternativamente, você pode conectar pressionando o botão “WPS” em seu "
"roteador." "roteador."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:227 #: js/ui/components/networkAgent.js:104 js/ui/status/network.js:252
#: js/ui/status/network.js:318 js/ui/status/network.js:919 #: js/ui/status/network.js:343 js/ui/status/network.js:943
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
@ -1025,7 +1040,7 @@ msgstr "PIN"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Uma senha é necessária para se conectar a “%s”." msgstr "Uma senha é necessária para se conectar a “%s”."
#: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1694 #: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1718
msgid "Network Manager" msgid "Network Manager"
msgstr "Gerenciador de rede" msgstr "Gerenciador de rede"
@ -1093,14 +1108,12 @@ msgstr "%A, %e de %B de %Y"
#. Translators: Shown on calendar heading when selected day occurs on current year #. Translators: Shown on calendar heading when selected day occurs on current year
#: js/ui/dateMenu.js:151 #: js/ui/dateMenu.js:151
#| msgid "%B %-d %Y"
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%B %-d" msgid "%B %-d"
msgstr "%-d de %B" msgstr "%-d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: js/ui/dateMenu.js:154 #: js/ui/dateMenu.js:154
#| msgid "%B %-d %Y"
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%B %-d %Y" msgid "%B %-d %Y"
msgstr "%-d de %B de %Y" msgstr "%-d de %B de %Y"
@ -1150,7 +1163,6 @@ msgid "Weather"
msgstr "Meteorologia" msgstr "Meteorologia"
#: js/ui/dateMenu.js:653 #: js/ui/dateMenu.js:653
#| msgid "Select a location…"
msgid "Select weather location…" msgid "Select weather location…"
msgstr "Selecione uma localização meteorológica…" msgstr "Selecione uma localização meteorológica…"
@ -1278,27 +1290,32 @@ msgstr ""
"pode levar um longo tempo: certifique-se de que fez cópia de segurança (back " "pode levar um longo tempo: certifique-se de que fez cópia de segurança (back "
"up) e que o computador esteja ligado na tomada." "up) e que o computador esteja ligado na tomada."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:267
msgid "Running on battery power: Please plug in before installing updates." msgid "Running on battery power: Please plug in before installing updates."
msgstr "" msgstr ""
"Funcionando na bateria: conecte na tomada antes de instalar atualizações." "Funcionando na bateria: conecte na tomada antes de instalar atualizações."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:276
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "Alguns aplicativos estão ocupados ou possuem trabalhos não salvos" msgstr "Alguns aplicativos estão ocupados ou possuem trabalhos não salvos"
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:281
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Outros usuários estão com sessão aberta" msgstr "Outros usuários estão com sessão aberta"
#: js/ui/endSessionDialog.js:427
msgctxt "button"
msgid "Boot Options"
msgstr "Opções de inicialização"
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:583 #: js/ui/endSessionDialog.js:645
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (remoto)" msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:586 #: js/ui/endSessionDialog.js:648
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (console)" msgstr "%s (console)"
@ -1401,15 +1418,15 @@ msgid "Leave On"
msgstr "Deixar ativado" msgstr "Deixar ativado"
#: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1291 #: js/ui/status/network.js:1315
msgid "Turn On" msgid "Turn On"
msgstr "Ligar" msgstr "Ligar"
#: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:135 js/ui/status/network.js:319 #: js/ui/status/network.js:160 js/ui/status/network.js:344
#: js/ui/status/network.js:1291 js/ui/status/network.js:1403 #: js/ui/status/network.js:1315 js/ui/status/network.js:1427
#: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81 #: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:108 #: js/ui/status/rfkill.js:110
msgid "Turn Off" msgid "Turn Off"
msgstr "Desligar" msgstr "Desligar"
@ -1470,11 +1487,11 @@ msgstr "Ver fonte"
msgid "Web Page" msgid "Web Page"
msgstr "Página web" msgstr "Página web"
#: js/ui/main.js:297 #: js/ui/main.js:294
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Sessão aberta como um usuário privilegiado" msgstr "Sessão aberta como um usuário privilegiado"
#: js/ui/main.js:298 #: js/ui/main.js:295
msgid "" msgid ""
"Running a session as a privileged user should be avoided for security " "Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user." "reasons. If possible, you should log in as a normal user."
@ -1482,11 +1499,11 @@ msgstr ""
"Usar uma sessão como um usuário privilegiado deve ser evitado por motivos de " "Usar uma sessão como um usuário privilegiado deve ser evitado por motivos de "
"segurança. Se possível, você deve abrir uma sessão como um usuário normal." "segurança. Se possível, você deve abrir uma sessão como um usuário normal."
#: js/ui/main.js:337 #: js/ui/main.js:334
msgid "Screen Lock disabled" msgid "Screen Lock disabled"
msgstr "Bloqueio de tela desabilitado" msgstr "Bloqueio de tela desabilitado"
#: js/ui/main.js:338 #: js/ui/main.js:335
msgid "Screen Locking requires the GNOME display manager." msgid "Screen Locking requires the GNOME display manager."
msgstr "O bloqueio de tela requer o gerenciador de exibição do GNOME." msgstr "O bloqueio de tela requer o gerenciador de exibição do GNOME."
@ -1579,7 +1596,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistema" msgstr "Sistema"
#: js/ui/panel.js:827 #: js/ui/panel.js:825
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@ -1756,17 +1773,15 @@ msgstr "Texto grande"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:49 js/ui/status/network.js:595 #: js/ui/status/bluetooth.js:49 js/ui/status/network.js:619
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Configurações de Bluetooth" msgstr "Configurações de Bluetooth"
#: js/ui/status/bluetooth.js:152 #: js/ui/status/bluetooth.js:152
#| msgid "Bluetooth"
msgid "Bluetooth Off" msgid "Bluetooth Off"
msgstr "Bluetooth desligado" msgstr "Bluetooth desligado"
#: js/ui/status/bluetooth.js:154 #: js/ui/status/bluetooth.js:154
#| msgid "Bluetooth"
msgid "Bluetooth On" msgid "Bluetooth On"
msgstr "Bluetooth ligado" msgstr "Bluetooth ligado"
@ -1842,18 +1857,18 @@ msgstr ""
"Acesso a localização pode ser alterado a qualquer momento nas configurações " "Acesso a localização pode ser alterado a qualquer momento nas configurações "
"de privacidade." "de privacidade."
#: js/ui/status/network.js:70 #: js/ui/status/network.js:71
msgid "<unknown>" msgid "<unknown>"
msgstr "<desconhecido>" msgstr "<desconhecido>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:424 js/ui/status/network.js:1320 #: js/ui/status/network.js:449 js/ui/status/network.js:1344
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s desligada" msgstr "%s desligada"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:427 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "Conectado à %s" msgstr "Conectado à %s"
@ -1862,189 +1877,189 @@ msgstr "Conectado à %s"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:432 #: js/ui/status/network.js:457
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s não é gerenciável" msgstr "%s não é gerenciável"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 #: js/ui/status/network.js:460
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "Desconectando de %s" msgstr "Desconectando de %s"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:442 js/ui/status/network.js:1312 #: js/ui/status/network.js:467 js/ui/status/network.js:1336
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "Conectando à %s" msgstr "Conectando à %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:470
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s requer autenticação" msgstr "%s requer autenticação"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:478
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Firmware em falta para %s" msgstr "Firmware em falta para %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:457 #: js/ui/status/network.js:482
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s está indisponível" msgstr "%s está indisponível"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:460 #: js/ui/status/network.js:485
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "Falha na conexão de %s" msgstr "Falha na conexão de %s"
#: js/ui/status/network.js:472 #: js/ui/status/network.js:497
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Configurações da rede cabeada" msgstr "Configurações da rede cabeada"
#: js/ui/status/network.js:515 #: js/ui/status/network.js:540
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configurações de banda larga móvel" msgstr "Configurações de banda larga móvel"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:562 js/ui/status/network.js:1317 #: js/ui/status/network.js:586 js/ui/status/network.js:1341
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "Hardware de %s desabilitado" msgstr "Hardware de %s desabilitado"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:566 #: js/ui/status/network.js:590
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s está desabilitado" msgstr "%s está desabilitado"
#: js/ui/status/network.js:607 #: js/ui/status/network.js:631
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Conectar à Internet" msgstr "Conectar à Internet"
#: js/ui/status/network.js:811 #: js/ui/status/network.js:835
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "Modo avião ligado" msgstr "Modo avião ligado"
#: js/ui/status/network.js:812 #: js/ui/status/network.js:836
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "O Wi-Fi é desabilitado quando o modo avião está ligado." msgstr "O Wi-Fi é desabilitado quando o modo avião está ligado."
#: js/ui/status/network.js:813 #: js/ui/status/network.js:837
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Desligar modo avião" msgstr "Desligar modo avião"
#: js/ui/status/network.js:822 #: js/ui/status/network.js:846
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "Wi-Fi desligado" msgstr "Wi-Fi desligado"
#: js/ui/status/network.js:823 #: js/ui/status/network.js:847
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "O Wi-Fi precisa ser ligado a fim de conectar-se a uma rede." msgstr "O Wi-Fi precisa ser ligado a fim de conectar-se a uma rede."
#: js/ui/status/network.js:824 #: js/ui/status/network.js:848
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Ligar Wi-Fi" msgstr "Ligar Wi-Fi"
#: js/ui/status/network.js:849 #: js/ui/status/network.js:873
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi" msgstr "Redes Wi-Fi"
#: js/ui/status/network.js:851 #: js/ui/status/network.js:875
msgid "Select a network" msgid "Select a network"
msgstr "Selecione uma rede" msgstr "Selecione uma rede"
#: js/ui/status/network.js:883 #: js/ui/status/network.js:907
msgid "No Networks" msgid "No Networks"
msgstr "Nenhuma rede" msgstr "Nenhuma rede"
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:106 #: js/ui/status/network.js:928 js/ui/status/rfkill.js:108
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usar alternador de hardware para desligar" msgstr "Usar alternador de hardware para desligar"
#: js/ui/status/network.js:1181 #: js/ui/status/network.js:1205
msgid "Select Network" msgid "Select Network"
msgstr "Selecione a rede" msgstr "Selecione a rede"
#: js/ui/status/network.js:1187 #: js/ui/status/network.js:1211
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Configurações de Wi-Fi" msgstr "Configurações de Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1308 #: js/ui/status/network.js:1332
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "Ponto de acesso %s está ativo" msgstr "Ponto de acesso %s está ativo"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1323 #: js/ui/status/network.js:1347
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s não está conectado" msgstr "%s não está conectado"
#: js/ui/status/network.js:1420 #: js/ui/status/network.js:1444
msgid "connecting…" msgid "connecting…"
msgstr "conectando…" msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1423 #: js/ui/status/network.js:1447
msgid "authentication required" msgid "authentication required"
msgstr "autenticação necessária" msgstr "autenticação necessária"
#: js/ui/status/network.js:1425 #: js/ui/status/network.js:1449
msgid "connection failed" msgid "connection failed"
msgstr "conexão falhou" msgstr "conexão falhou"
#: js/ui/status/network.js:1476 #: js/ui/status/network.js:1500
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Configurações de VPN" msgstr "Configurações de VPN"
#: js/ui/status/network.js:1493 #: js/ui/status/network.js:1517
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1503 #: js/ui/status/network.js:1527
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN desligada" msgstr "VPN desligada"
#: js/ui/status/network.js:1564 js/ui/status/rfkill.js:84 #: js/ui/status/network.js:1588 js/ui/status/rfkill.js:84
msgid "Network Settings" msgid "Network Settings"
msgstr "Configurações de rede" msgstr "Configurações de rede"
#: js/ui/status/network.js:1593 #: js/ui/status/network.js:1617
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s conexão cabeada" msgstr[0] "%s conexão cabeada"
msgstr[1] "%s conexões cabeadas" msgstr[1] "%s conexões cabeadas"
#: js/ui/status/network.js:1597 #: js/ui/status/network.js:1621
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conexão Wi-Fi" msgstr[0] "%s conexão Wi-Fi"
msgstr[1] "%s conexões Wi-Fi" msgstr[1] "%s conexões Wi-Fi"
#: js/ui/status/network.js:1601 #: js/ui/status/network.js:1625
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s conexão por modem" msgstr[0] "%s conexão por modem"
msgstr[1] "%s conexões por modems" msgstr[1] "%s conexões por modems"
#: js/ui/status/network.js:1735 #: js/ui/status/network.js:1759
msgid "Connection failed" msgid "Connection failed"
msgstr "Falha de conexão" msgstr "Falha de conexão"
#: js/ui/status/network.js:1736 #: js/ui/status/network.js:1760
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Falha ao ativar a conexão da rede" msgstr "Falha ao ativar a conexão da rede"
@ -2099,11 +2114,11 @@ msgstr "%d:%02d até completar (%d%%)"
msgid "%d%%" msgid "%d%%"
msgstr "%d%%" msgstr "%d%%"
#: js/ui/status/remoteAccess.js:43 #: js/ui/status/remoteAccess.js:45
msgid "Screen is Being Shared" msgid "Screen is Being Shared"
msgstr "A tela está sendo compartilhada" msgstr "A tela está sendo compartilhada"
#: js/ui/status/remoteAccess.js:45 #: js/ui/status/remoteAccess.js:47
msgid "Turn off" msgid "Turn off"
msgstr "Desativar" msgstr "Desativar"
@ -2248,22 +2263,22 @@ msgstr "“%s” está pronto"
# Título de janela de confirmação; Se grande demais, pode ser exibida com "..." # Título de janela de confirmação; Se grande demais, pode ser exibida com "..."
# Vide: https://bugzilla.gnome.org/show_bug.cgi?id=786331 # Vide: https://bugzilla.gnome.org/show_bug.cgi?id=786331
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:60
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "Manter essas configurações da tela?" msgstr "Manter essas configurações da tela?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #.
#: js/ui/windowManager.js:64 #: js/ui/windowManager.js:69
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Reverter configurações" msgstr "Reverter configurações"
#: js/ui/windowManager.js:67 #: js/ui/windowManager.js:72
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Manter alterações" msgstr "Manter alterações"
#: js/ui/windowManager.js:86 #: js/ui/windowManager.js:91
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -2272,7 +2287,7 @@ msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:546 #: js/ui/windowManager.js:551
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@ -2450,7 +2465,6 @@ msgid "The extension is incompatible with the current GNOME version"
msgstr "A extensão é incompatível com a versão atual do GNOME" msgstr "A extensão é incompatível com a versão atual do GNOME"
#: subprojects/extensions-app/js/main.js:464 #: subprojects/extensions-app/js/main.js:464
#| msgid "Show extension info"
msgid "The extension had an error" msgid "The extension had an error"
msgstr "A extensão apresentou um erro" msgstr "A extensão apresentou um erro"
@ -2607,7 +2621,6 @@ msgid "TEMPLATE"
msgstr "MODELO" msgstr "MODELO"
#: subprojects/extensions-tool/src/command-create.c:447 #: subprojects/extensions-tool/src/command-create.c:447
#| msgid "The user-visible name of the new extension"
msgid "The template to use for the new extension" msgid "The template to use for the new extension"
msgstr "O modelo para usar para a nova extensão" msgstr "O modelo para usar para a nova extensão"
@ -2784,7 +2797,6 @@ msgstr "Mais de um diretório fonte especificado"
#: subprojects/extensions-tool/src/command-prefs.c:47 #: subprojects/extensions-tool/src/command-prefs.c:47
#, c-format #, c-format
#| msgid "Show extensions with preferences"
msgid "Extension “%s” doesn't have preferences\n" msgid "Extension “%s” doesn't have preferences\n"
msgstr "A extensão “%s” não tem preferências\n" msgstr "A extensão “%s” não tem preferências\n"
@ -2797,13 +2809,11 @@ msgid "Reset an extension"
msgstr "Redefine uma extensão" msgstr "Redefine uma extensão"
#: subprojects/extensions-tool/src/command-uninstall.c:49 #: subprojects/extensions-tool/src/command-uninstall.c:49
#| msgid "List installed extensions"
msgid "Cannot uninstall system extensions\n" msgid "Cannot uninstall system extensions\n"
msgstr "Não é possível desinstalar as extensões do sistema\n" msgstr "Não é possível desinstalar as extensões do sistema\n"
#: subprojects/extensions-tool/src/command-uninstall.c:64 #: subprojects/extensions-tool/src/command-uninstall.c:64
#, c-format #, c-format
#| msgid "Failed to launch “%s”"
msgid "Failed to uninstall “%s”\n" msgid "Failed to uninstall “%s”\n"
msgstr "Falha ao desinstalar “%s”\n" msgstr "Falha ao desinstalar “%s”\n"
@ -2916,7 +2926,6 @@ msgid "Plain"
msgstr "Em branco" msgstr "Em branco"
#: subprojects/extensions-tool/src/templates/00-plain.desktop.in:5 #: subprojects/extensions-tool/src/templates/00-plain.desktop.in:5
#| msgid "Reset extension"
msgid "An empty extension" msgid "An empty extension"
msgstr "Uma extensão vazia" msgstr "Uma extensão vazia"

289
po/tr.po

@ -17,8 +17,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-07-29 07:55+0000\n" "POT-Creation-Date: 2020-08-10 15:40+0000\n"
"PO-Revision-Date: 2020-07-30 00:49+0300\n" "PO-Revision-Date: 2020-08-11 01:10+0300\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n" "Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n" "Language-Team: Türkçe <gnome-turk@gnome.org>\n"
"Language: tr\n" "Language: tr\n"
@ -26,7 +26,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.3\n" "X-Generator: Poedit 2.4\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: data/50-gnome-shell-system.xml:6 #: data/50-gnome-shell-system.xml:6
@ -236,10 +236,10 @@ msgid ""
"“application id” → 'data' pair. Currently, the following values are stored " "“application id” → 'data' pair. Currently, the following values are stored "
"as 'data': • “position”: the position of the application icon in the page" "as 'data': • “position”: the position of the application icon in the page"
msgstr "" msgstr ""
"Uygulama seçicinin düzeni. Dizideki her girdi bir sayfadır. Sayfalar " "Uygulama seçicinin düzeni. Dizideki her girdi bir sayfadır. Sayfalar GNOME "
"GNOME Kabuğunda göründüğü sırayla depolanır. Her sayfa bir “application id” " "Kabuğunda göründüğü sırayla depolanır. Her sayfa bir “application id” "
"'data' çifti içerir. Şimdilik şu değerler 'data' olarak depolanır: " "'data' çifti içerir. Şimdilik şu değerler 'data' olarak depolanır: "
"“position”: sayfadaki uygulama simgesinin konumu" "“position”: sayfadaki uygulama simgesinin konumu"
#: data/org.gnome.shell.gschema.xml.in:130 #: data/org.gnome.shell.gschema.xml.in:130
msgid "Keybinding to open the application menu" msgid "Keybinding to open the application menu"
@ -446,9 +446,9 @@ msgstr "Uzantı ana sayfasını ziyaret et"
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57 #: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139 #: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:183 #: js/ui/endSessionDialog.js:413 js/ui/extensionDownloader.js:183
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 #: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149 #: js/ui/status/network.js:940 subprojects/extensions-app/js/main.js:149
msgid "Cancel" msgid "Cancel"
msgstr "İptal" msgstr "İptal"
@ -502,71 +502,82 @@ msgid "(or swipe finger)"
msgstr "(ya da parmak izi okut)" msgstr "(ya da parmak izi okut)"
#. Translators: The name of the power-off action in search #. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:93 #: js/misc/systemActions.js:91
msgctxt "search-result" msgctxt "search-result"
msgid "Power Off" msgid "Power Off"
msgstr "Bilgisayarı Kapat" msgstr "Bilgisayarı Kapat"
#. Translators: A list of keywords that match the power-off action, separated by semicolons #. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:96 #: js/misc/systemActions.js:94
msgid "power off;shutdown;reboot;restart;halt;stop" msgid "power off;shutdown;halt;stop"
msgstr "gücü kapat;bilgisayarı kapat;yeniden başlat;duraklat;durdur" msgstr "gücü kapat;bilgisayarı kapat;duraklat;durdur"
#. Translators: The name of the restart action in search
#: js/misc/systemActions.js:99
msgctxt "search-result"
msgid "Restart"
msgstr "Yeniden Başlat"
#. Translators: A list of keywords that match the restart action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "reboot;restart;"
msgstr "yeniden önyükle;yeniden başlat;"
#. Translators: The name of the lock screen action in search #. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:101 #: js/misc/systemActions.js:107
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Ekranı Kilitle" msgstr "Ekranı Kilitle"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons #. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:104 #: js/misc/systemActions.js:110
msgid "lock screen" msgid "lock screen"
msgstr "ekranı kilitle" msgstr "ekranı kilitle"
#. Translators: The name of the logout action in search #. Translators: The name of the logout action in search
#: js/misc/systemActions.js:109 #: js/misc/systemActions.js:115
msgctxt "search-result" msgctxt "search-result"
msgid "Log Out" msgid "Log Out"
msgstr "Oturumu Kapat" msgstr "Oturumu Kapat"
#. Translators: A list of keywords that match the logout action, separated by semicolons #. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:112 #: js/misc/systemActions.js:118
msgid "logout;log out;sign off" msgid "logout;log out;sign off"
msgstr "çıkış;oturumu kapat;çıkış yap" msgstr "çıkış;oturumu kapat;çıkış yap"
#. Translators: The name of the suspend action in search #. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:117 #: js/misc/systemActions.js:123
msgctxt "search-result" msgctxt "search-result"
msgid "Suspend" msgid "Suspend"
msgstr "Bilgisayarı beklet" msgstr "Bilgisayarı beklet"
#. Translators: A list of keywords that match the suspend action, separated by semicolons #. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:120 #: js/misc/systemActions.js:126
msgid "suspend;sleep" msgid "suspend;sleep"
msgstr "beklet;uyku;duraklat" msgstr "beklet;uyku;duraklat"
#. Translators: The name of the switch user action in search #. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:125 #: js/misc/systemActions.js:131
msgctxt "search-result" msgctxt "search-result"
msgid "Switch User" msgid "Switch User"
msgstr "Kullanıcı Değiştir" msgstr "Kullanıcı Değiştir"
#. Translators: A list of keywords that match the switch user action, separated by semicolons #. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:128 #: js/misc/systemActions.js:134
msgid "switch user" msgid "switch user"
msgstr "kullanıcı değiştir" msgstr "kullanıcı değiştir"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:135 #: js/misc/systemActions.js:141
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "yönelimi kilitle;yönelim kilidini kaldır;ekran;döndürme" msgstr "yönelimi kilitle;yönelim kilidini kaldır;ekran;döndürme"
#: js/misc/systemActions.js:255 #: js/misc/systemActions.js:266
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Ekran Döndürme Kilidini Kaldır" msgstr "Ekran Döndürme Kilidini Kaldır"
#: js/misc/systemActions.js:256 #: js/misc/systemActions.js:267
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Ekran Döndürmeyi Kilitle" msgstr "Ekran Döndürmeyi Kilitle"
@ -731,31 +742,31 @@ msgid "Unnamed Folder"
msgstr "Adsız Klasör" msgstr "Adsız Klasör"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2767 js/ui/panel.js:75 #: js/ui/appDisplay.js:2762 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Açık Pencereler" msgstr "Açık Pencereler"
#: js/ui/appDisplay.js:2786 js/ui/panel.js:82 #: js/ui/appDisplay.js:2781 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Yeni Pencere" msgstr "Yeni Pencere"
#: js/ui/appDisplay.js:2802 #: js/ui/appDisplay.js:2797
msgid "Launch using Integrated Graphics Card" msgid "Launch using Integrated Graphics Card"
msgstr "Tümleşik Ekran Kartıyla Başlat" msgstr "Tümleşik Ekran Kartıyla Başlat"
#: js/ui/appDisplay.js:2803 #: js/ui/appDisplay.js:2798
msgid "Launch using Discrete Graphics Card" msgid "Launch using Discrete Graphics Card"
msgstr "Ayrık Ekran Kartıyla Başlat" msgstr "Ayrık Ekran Kartıyla Başlat"
#: js/ui/appDisplay.js:2831 js/ui/dash.js:239 #: js/ui/appDisplay.js:2826 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Sık Kullanılanlardan Çıkar" msgstr "Sık Kullanılanlardan Çıkar"
#: js/ui/appDisplay.js:2837 #: js/ui/appDisplay.js:2832
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Sık Kullanılanlara Ekle" msgstr "Sık Kullanılanlara Ekle"
#: js/ui/appDisplay.js:2847 js/ui/panel.js:93 #: js/ui/appDisplay.js:2842 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Ayrıntıları Göster" msgstr "Ayrıntıları Göster"
@ -956,8 +967,8 @@ msgstr ""
"Diğer seçenek olarak, yönlendiricinizde “WPS” düğmesini kullanarak " "Diğer seçenek olarak, yönlendiricinizde “WPS” düğmesini kullanarak "
"bağlayabilirsiniz." "bağlayabilirsiniz."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:227 #: js/ui/components/networkAgent.js:104 js/ui/status/network.js:252
#: js/ui/status/network.js:318 js/ui/status/network.js:919 #: js/ui/status/network.js:343 js/ui/status/network.js:943
msgid "Connect" msgid "Connect"
msgstr "Bağlan" msgstr "Bağlan"
@ -1021,7 +1032,7 @@ msgstr "PIN"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "“%s”e bağlanmak için parola gerekli." msgstr "“%s”e bağlanmak için parola gerekli."
#: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1694 #: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1718
msgid "Network Manager" msgid "Network Manager"
msgstr "Ağ Yöneticisi" msgstr "Ağ Yöneticisi"
@ -1158,71 +1169,76 @@ msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Oturumu Kapat" msgstr "Oturumu Kapat"
#: js/ui/endSessionDialog.js:40 #: js/ui/endSessionDialog.js:41
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s oturumu %d saniye içinde kendiliğinden kapatılacak." msgstr[0] "%s oturumu %d saniye içinde kendiliğinden kapatılacak."
#: js/ui/endSessionDialog.js:45 #: js/ui/endSessionDialog.js:47
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "%d saniye içinde oturumunuz kendiliğinden kapatılacak." msgstr[0] "%d saniye içinde oturumunuz kendiliğinden kapatılacak."
#: js/ui/endSessionDialog.js:51 #: js/ui/endSessionDialog.js:54
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Çıkış" msgstr "Çıkış"
#: js/ui/endSessionDialog.js:56 #: js/ui/endSessionDialog.js:60
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Bilgisayarı Kapat" msgstr "Bilgisayarı Kapat"
#: js/ui/endSessionDialog.js:57 #: js/ui/endSessionDialog.js:61
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Güncelleştirmeleri Kur ve Kapat" msgstr "Güncelleştirmeleri Kur ve Kapat"
#: js/ui/endSessionDialog.js:59 #: js/ui/endSessionDialog.js:64
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Sistem %d saniye içinde kendiliğinden kapanacak." msgstr[0] "Sistem %d saniye içinde kendiliğinden kapanacak."
#: js/ui/endSessionDialog.js:63 #: js/ui/endSessionDialog.js:68 js/ui/endSessionDialog.js:87
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Beklemede olan yazılım güncelleştirmelerini kur" msgstr "Beklemede olan yazılım güncelleştirmelerini kur"
#: js/ui/endSessionDialog.js:66 js/ui/endSessionDialog.js:82 #: js/ui/endSessionDialog.js:72
msgctxt "button"
msgid "Restart"
msgstr "Yeniden Başlat"
#: js/ui/endSessionDialog.js:68
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Kapat" msgstr "Kapat"
#: js/ui/endSessionDialog.js:74 #: js/ui/endSessionDialog.js:79
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Bilgisayarı Yeniden Başlat" msgstr "Bilgisayarı Yeniden Başlat"
#: js/ui/endSessionDialog.js:76 #: js/ui/endSessionDialog.js:80
msgctxt "title"
msgid "Install Updates & Restart"
msgstr "Güncelleştirmeleri Kur ve Yeniden Başlat"
#: js/ui/endSessionDialog.js:83
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Sistem %d saniye içinde kendiliğinden yeniden başlayacak." msgstr[0] "Sistem %d saniye içinde kendiliğinden yeniden başlayacak."
#: js/ui/endSessionDialog.js:89 #: js/ui/endSessionDialog.js:91
msgctxt "button"
msgid "Restart"
msgstr "Yeniden Başlat"
#: js/ui/endSessionDialog.js:99
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Yeniden Başlat ve Güncelleştirmeleri Kur" msgstr "Yeniden Başlat ve Güncelleştirmeleri Kur"
#: js/ui/endSessionDialog.js:91 #: js/ui/endSessionDialog.js:102
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@ -1231,22 +1247,22 @@ msgstr[0] ""
"Sistem %d saniye içinde kendiliğinden yeniden başlayacak ve " "Sistem %d saniye içinde kendiliğinden yeniden başlayacak ve "
"güncelleştirmeleri kuracak." "güncelleştirmeleri kuracak."
#: js/ui/endSessionDialog.js:97 js/ui/endSessionDialog.js:116 #: js/ui/endSessionDialog.js:109 js/ui/endSessionDialog.js:130
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Yeniden Başlat ve Kur" msgstr "Yeniden Başlat ve Kur"
#: js/ui/endSessionDialog.js:98 #: js/ui/endSessionDialog.js:111
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Kur ve Kapat" msgstr "Kur ve Kapat"
#: js/ui/endSessionDialog.js:99 #: js/ui/endSessionDialog.js:112
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Güncelleştirmeler kurulduktan sonra kapat" msgstr "Güncelleştirmeler kurulduktan sonra kapat"
#: js/ui/endSessionDialog.js:106 #: js/ui/endSessionDialog.js:119
msgctxt "title" msgctxt "title"
msgid "Restart & Install Upgrade" msgid "Restart & Install Upgrade"
msgstr "Yeniden Başlat ve Yükseltmeyi Kur" msgstr "Yeniden Başlat ve Yükseltmeyi Kur"
@ -1254,7 +1270,7 @@ msgstr "Yeniden Başlat ve Yükseltmeyi Kur"
#. Translators: This is the text displayed for system upgrades in the #. Translators: This is the text displayed for system upgrades in the
#. shut down dialog. First %s gets replaced with the distro name and #. shut down dialog. First %s gets replaced with the distro name and
#. second %s with the distro version to upgrade to #. second %s with the distro version to upgrade to
#: js/ui/endSessionDialog.js:111 #: js/ui/endSessionDialog.js:124
#, javascript-format #, javascript-format
msgid "" msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long " "%s %s will be installed after restart. Upgrade installation can take a long "
@ -1264,27 +1280,32 @@ msgstr ""
"uzun sürebilir: verilerinizi yedeklediğinizden ve bilgisayarınızın prize " "uzun sürebilir: verilerinizi yedeklediğinizden ve bilgisayarınızın prize "
"takılı olduğundan emin olun." "takılı olduğundan emin olun."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:282
msgid "Running on battery power: Please plug in before installing updates." msgid "Running on battery power: Please plug in before installing updates."
msgstr "" msgstr ""
"Pil gücünde çalışıyor: lütfen güncelleştirmeleri kurmadan önce fişi takın." "Pil gücünde çalışıyor: lütfen güncelleştirmeleri kurmadan önce fişi takın."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:291
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "Bazı uygulamalar meşgul ya da kaydedilmemiş verisi var" msgstr "Bazı uygulamalar meşgul ya da kaydedilmemiş verisi var"
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:296
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Diğer kullanıcılar oturum açmış" msgstr "Diğer kullanıcılar oturum açmış"
#: js/ui/endSessionDialog.js:442
msgctxt "button"
msgid "Boot Options"
msgstr "Önyükleme Seçenekleri"
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:583 #: js/ui/endSessionDialog.js:660
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (uzak)" msgstr "%s (uzak)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:586 #: js/ui/endSessionDialog.js:663
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (uçbirim)" msgstr "%s (uçbirim)"
@ -1300,7 +1321,7 @@ msgstr "Uzantı Yükle"
#: js/ui/extensionDownloader.js:194 #: js/ui/extensionDownloader.js:194
#, javascript-format #, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org üstünden “%s” uzantısı indirilip kurulsun mu?" msgstr "“%s” uzantısı extensions.gnome.org üstünden indirilip kurulsun mu?"
#: js/ui/extensionSystem.js:252 #: js/ui/extensionSystem.js:252
msgid "Extension Updates Available" msgid "Extension Updates Available"
@ -1384,15 +1405,15 @@ msgid "Leave On"
msgstr "Açık Bırak" msgstr "Açık Bırak"
#: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1291 #: js/ui/status/network.js:1315
msgid "Turn On" msgid "Turn On"
msgstr "Aç" msgstr "Aç"
#: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:135 js/ui/status/network.js:319 #: js/ui/status/network.js:160 js/ui/status/network.js:344
#: js/ui/status/network.js:1291 js/ui/status/network.js:1403 #: js/ui/status/network.js:1315 js/ui/status/network.js:1427
#: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81 #: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:108 #: js/ui/status/rfkill.js:110
msgid "Turn Off" msgid "Turn Off"
msgstr "Kapat" msgstr "Kapat"
@ -1453,11 +1474,11 @@ msgstr "Kaynağı Görüntüle"
msgid "Web Page" msgid "Web Page"
msgstr "Web Sayfası" msgstr "Web Sayfası"
#: js/ui/main.js:297 #: js/ui/main.js:294
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Yetkili kullanıcı olarak oturum açılmış" msgstr "Yetkili kullanıcı olarak oturum açılmış"
#: js/ui/main.js:298 #: js/ui/main.js:295
msgid "" msgid ""
"Running a session as a privileged user should be avoided for security " "Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user." "reasons. If possible, you should log in as a normal user."
@ -1465,11 +1486,11 @@ msgstr ""
"Oturumu öncelikli kullanıcı olarak çalıştırmaktan güvenlik nedeniyle " "Oturumu öncelikli kullanıcı olarak çalıştırmaktan güvenlik nedeniyle "
"kaçınılmalıdır. Eğer olasıysa sıradan kullanıcı olarak giriş yapmalısınız." "kaçınılmalıdır. Eğer olasıysa sıradan kullanıcı olarak giriş yapmalısınız."
#: js/ui/main.js:337 #: js/ui/main.js:334
msgid "Screen Lock disabled" msgid "Screen Lock disabled"
msgstr "Ekran Kilidi devre dışı" msgstr "Ekran Kilidi devre dışı"
#: js/ui/main.js:338 #: js/ui/main.js:335
msgid "Screen Locking requires the GNOME display manager." msgid "Screen Locking requires the GNOME display manager."
msgstr "Ekran Kilitleme, GNOME ekran yöneticisi gerektirir." msgstr "Ekran Kilitleme, GNOME ekran yöneticisi gerektirir."
@ -1562,7 +1583,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Sistem" msgstr "Sistem"
#: js/ui/panel.js:827 #: js/ui/panel.js:825
msgid "Top Bar" msgid "Top Bar"
msgstr "Tepe Çubuğu" msgstr "Tepe Çubuğu"
@ -1738,7 +1759,7 @@ msgstr "Büyük Yazı"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:49 js/ui/status/network.js:595 #: js/ui/status/bluetooth.js:49 js/ui/status/network.js:619
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Bluetooth Ayarları" msgstr "Bluetooth Ayarları"
@ -1820,18 +1841,18 @@ msgstr "%s uygulaması konumunuza erişmek istiyor"
msgid "Location access can be changed at any time from the privacy settings." msgid "Location access can be changed at any time from the privacy settings."
msgstr "Konum erişimi, gizlilik ayarlarından her zaman değiştirilebilir." msgstr "Konum erişimi, gizlilik ayarlarından her zaman değiştirilebilir."
#: js/ui/status/network.js:70 #: js/ui/status/network.js:71
msgid "<unknown>" msgid "<unknown>"
msgstr "<bilinmeyen>" msgstr "<bilinmeyen>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:424 js/ui/status/network.js:1320 #: js/ui/status/network.js:449 js/ui/status/network.js:1344
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s Kapalı" msgstr "%s Kapalı"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:427 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s Bağlandı" msgstr "%s Bağlandı"
@ -1839,186 +1860,186 @@ msgstr "%s Bağlandı"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:432 #: js/ui/status/network.js:457
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s Yönetilmiyor" msgstr "%s Yönetilmiyor"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 #: js/ui/status/network.js:460
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "%s Bağlantısı Kesiliyor" msgstr "%s Bağlantısı Kesiliyor"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:442 js/ui/status/network.js:1312 #: js/ui/status/network.js:467 js/ui/status/network.js:1336
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s Bağlanıyor" msgstr "%s Bağlanıyor"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:470
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s Kimlik Doğrulaması Gerektiriyor" msgstr "%s Kimlik Doğrulaması Gerektiriyor"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:478
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "%s İçin Ürün Bilgisi Eksik" msgstr "%s İçin Ürün Bilgisi Eksik"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:457 #: js/ui/status/network.js:482
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s Kullanılamaz" msgstr "%s Kullanılamaz"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:460 #: js/ui/status/network.js:485
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "%s Bağlantısı Başarısız Oldu" msgstr "%s Bağlantısı Başarısız Oldu"
#: js/ui/status/network.js:472 #: js/ui/status/network.js:497
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Kablolu Ağ Ayarları" msgstr "Kablolu Ağ Ayarları"
#: js/ui/status/network.js:515 #: js/ui/status/network.js:540
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Mobil Geniş Bant Ayarları" msgstr "Mobil Geniş Bant Ayarları"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:562 js/ui/status/network.js:1317 #: js/ui/status/network.js:586 js/ui/status/network.js:1341
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s Donanımı Devre Dışı" msgstr "%s Donanımı Devre Dışı"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:566 #: js/ui/status/network.js:590
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s Devre Dışı" msgstr "%s Devre Dışı"
#: js/ui/status/network.js:607 #: js/ui/status/network.js:631
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "İnternete Bağlan" msgstr "İnternete Bağlan"
#: js/ui/status/network.js:811 #: js/ui/status/network.js:835
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "Uçak Kipi Açık" msgstr "Uçak Kipi Açık"
#: js/ui/status/network.js:812 #: js/ui/status/network.js:836
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Uçak kipi açıldığında kablosuz ağ devre dışı kalır." msgstr "Uçak kipi açıldığında kablosuz ağ devre dışı kalır."
#: js/ui/status/network.js:813 #: js/ui/status/network.js:837
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Uçak Kipini Kapat" msgstr "Uçak Kipini Kapat"
#: js/ui/status/network.js:822 #: js/ui/status/network.js:846
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "Kablosuz Ağ Kapalı" msgstr "Kablosuz Ağ Kapalı"
#: js/ui/status/network.js:823 #: js/ui/status/network.js:847
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Ağa bağlanmak için kablosuz ağın açık olması gerekir." msgstr "Ağa bağlanmak için kablosuz ağın açık olması gerekir."
#: js/ui/status/network.js:824 #: js/ui/status/network.js:848
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Kablosuz Ağı Aç" msgstr "Kablosuz Ağı Aç"
#: js/ui/status/network.js:849 #: js/ui/status/network.js:873
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Kablosuz Ağlar" msgstr "Kablosuz Ağlar"
#: js/ui/status/network.js:851 #: js/ui/status/network.js:875
msgid "Select a network" msgid "Select a network"
msgstr "Ağ seç" msgstr "Ağ seç"
#: js/ui/status/network.js:883 #: js/ui/status/network.js:907
msgid "No Networks" msgid "No Networks"
msgstr "Ağ Yok" msgstr "Ağ Yok"
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:106 #: js/ui/status/network.js:928 js/ui/status/rfkill.js:108
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Kapatmak için donanım anahtarını kullan" msgstr "Kapatmak için donanım anahtarını kullan"
#: js/ui/status/network.js:1181 #: js/ui/status/network.js:1205
msgid "Select Network" msgid "Select Network"
msgstr "Ağ Seç" msgstr "Ağ Seç"
#: js/ui/status/network.js:1187 #: js/ui/status/network.js:1211
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Kablosuz Ağ Ayarları" msgstr "Kablosuz Ağ Ayarları"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1308 #: js/ui/status/network.js:1332
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "%s Erişim Noktası Etkin" msgstr "%s Erişim Noktası Etkin"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1323 #: js/ui/status/network.js:1347
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s Bağlı Değil" msgstr "%s Bağlı Değil"
#: js/ui/status/network.js:1420 #: js/ui/status/network.js:1444
msgid "connecting…" msgid "connecting…"
msgstr "bağlanıyor…" msgstr "bağlanıyor…"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1423 #: js/ui/status/network.js:1447
msgid "authentication required" msgid "authentication required"
msgstr "kimlik doğrulaması gerekli" msgstr "kimlik doğrulaması gerekli"
#: js/ui/status/network.js:1425 #: js/ui/status/network.js:1449
msgid "connection failed" msgid "connection failed"
msgstr "bağlantı başarısız" msgstr "bağlantı başarısız"
#: js/ui/status/network.js:1476 #: js/ui/status/network.js:1500
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN Ayarları" msgstr "VPN Ayarları"
#: js/ui/status/network.js:1493 #: js/ui/status/network.js:1517
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1503 #: js/ui/status/network.js:1527
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN Kapalı" msgstr "VPN Kapalı"
#: js/ui/status/network.js:1564 js/ui/status/rfkill.js:84 #: js/ui/status/network.js:1588 js/ui/status/rfkill.js:84
msgid "Network Settings" msgid "Network Settings"
msgstr "Ağ Ayarları" msgstr "Ağ Ayarları"
#: js/ui/status/network.js:1593 #: js/ui/status/network.js:1617
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
msgstr[0] "%s Kablolu Bağlantı" msgstr[0] "%s Kablolu Bağlantı"
#: js/ui/status/network.js:1597 #: js/ui/status/network.js:1621
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Kablosuz Ağ Bağlantısı" msgstr[0] "%s Kablosuz Ağ Bağlantısı"
#: js/ui/status/network.js:1601 #: js/ui/status/network.js:1625
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
msgstr[0] "%s Modem Bağlantısı" msgstr[0] "%s Modem Bağlantısı"
#: js/ui/status/network.js:1735 #: js/ui/status/network.js:1759
msgid "Connection failed" msgid "Connection failed"
msgstr "Bağlantı başarısız oldu" msgstr "Bağlantı başarısız oldu"
#: js/ui/status/network.js:1736 #: js/ui/status/network.js:1760
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Ağ bağlantısının etkinleştirilmesi başarısız oldu" msgstr "Ağ bağlantısının etkinleştirilmesi başarısız oldu"
@ -2073,11 +2094,11 @@ msgstr "Tümüyle Dolmasına %d.%02d Kaldı (%% %d)"
msgid "%d%%" msgid "%d%%"
msgstr "%d%%" msgstr "%d%%"
#: js/ui/status/remoteAccess.js:43 #: js/ui/status/remoteAccess.js:45
msgid "Screen is Being Shared" msgid "Screen is Being Shared"
msgstr "Ekran Paylaşılıyor" msgstr "Ekran Paylaşılıyor"
#: js/ui/status/remoteAccess.js:45 #: js/ui/status/remoteAccess.js:47
msgid "Turn off" msgid "Turn off"
msgstr "Kapat" msgstr "Kapat"
@ -2088,30 +2109,34 @@ msgstr "Kapat"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Uçak Kipi Açık" msgstr "Uçak Kipi Açık"
#: js/ui/status/system.js:102 #: js/ui/status/system.js:104
msgid "Lock" msgid "Lock"
msgstr "Kilitle" msgstr "Kilitle"
#: js/ui/status/system.js:115 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Gücü Kapat / Oturumu Kapat" msgstr "Gücü Kapat / Oturumu Kapat"
#: js/ui/status/system.js:118 #: js/ui/status/system.js:119
msgid "Log Out"
msgstr "Oturumu Kapat"
#: js/ui/status/system.js:130
msgid "Switch User…"
msgstr "Kullanıcı Değiştir…"
#: js/ui/status/system.js:144
msgid "Suspend" msgid "Suspend"
msgstr "Beklet" msgstr "Beklet"
#: js/ui/status/system.js:156 #: js/ui/status/system.js:130
msgid "Restart…"
msgstr "Yeniden Başlat…"
#: js/ui/status/system.js:141
msgid "Power Off…" msgid "Power Off…"
msgstr "Gücü Kapat…" msgstr "Gücü Kapat…"
#: js/ui/status/system.js:154
msgid "Log Out"
msgstr "Oturumu Kapat"
#: js/ui/status/system.js:165
msgid "Switch User…"
msgstr "Kullanıcı Değiştir…"
#: js/ui/status/thunderbolt.js:263 #: js/ui/status/thunderbolt.js:263
msgid "Thunderbolt" msgid "Thunderbolt"
msgstr "Thunderbolt" msgstr "Thunderbolt"
@ -2219,22 +2244,22 @@ msgid "“%s” is ready"
msgstr "“%s” hazır" msgstr "“%s” hazır"
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:60
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "Bu görüntü ayarları saklansın mı?" msgstr "Bu görüntü ayarları saklansın mı?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #.
#: js/ui/windowManager.js:64 #: js/ui/windowManager.js:69
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Ayarları Eski Haline Getir" msgstr "Ayarları Eski Haline Getir"
#: js/ui/windowManager.js:67 #: js/ui/windowManager.js:72
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Değişiklikleri Sakla" msgstr "Değişiklikleri Sakla"
#: js/ui/windowManager.js:86 #: js/ui/windowManager.js:91
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -2242,7 +2267,7 @@ msgstr[0] "Ayarlardaki değişiklikler %d saniye içinde eski haline döndürül
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:546 #: js/ui/windowManager.js:551
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"

300
po/uk.po

@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-07-20 16:18+0000\n" "POT-Creation-Date: 2020-08-10 23:58+0000\n"
"PO-Revision-Date: 2020-07-21 08:42+0300\n" "PO-Revision-Date: 2020-08-11 09:23+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n" "Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n" "Language: uk\n"
@ -227,11 +227,11 @@ msgid ""
"“application id” → 'data' pair. Currently, the following values are stored " "“application id” → 'data' pair. Currently, the following values are stored "
"as 'data': • “position”: the position of the application icon in the page" "as 'data': • “position”: the position of the application icon in the page"
msgstr "" msgstr ""
"Компонування засобу вибору програм. Кожен запис у цьому масиві є сторінкою." "Компонування засобу вибору програм. Кожен запис у цьому масиві є сторінкою. "
" Сторінки зберігаються у порядку, у якому їх буде показано у GNOME Shell." "Сторінки зберігаються у порядку, у якому їх буде показано у GNOME Shell. "
" Кожна сторінка містить пану записів “ідентифікатор програми” → 'дані'. У" "Кожна сторінка містить пану записів “ідентифікатор програми” → 'дані'. У "
" поточній версії як 'дані' може бути збережено такі значення: • “позиція”:" "поточній версії як 'дані' може бути збережено такі значення: • “позиція”: "
" позиція піктограми програми на сторінці" "позиція піктограми програми на сторінці"
#: data/org.gnome.shell.gschema.xml.in:130 #: data/org.gnome.shell.gschema.xml.in:130
msgid "Keybinding to open the application menu" msgid "Keybinding to open the application menu"
@ -431,9 +431,9 @@ msgstr "Відвідати сторінку розширення"
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57 #: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139 #: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:183 #: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:183
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 #: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149 #: js/ui/status/network.js:940 subprojects/extensions-app/js/main.js:149
msgid "Cancel" msgid "Cancel"
msgstr "Скасувати" msgstr "Скасувати"
@ -469,7 +469,7 @@ msgstr "(наприклад, користувач або %s)"
msgid "Username" msgid "Username"
msgstr "Користувач" msgstr "Користувач"
#: js/gdm/loginDialog.js:1254 #: js/gdm/loginDialog.js:1253
msgid "Login Window" msgid "Login Window"
msgstr "Вікно входу" msgstr "Вікно входу"
@ -487,73 +487,84 @@ msgid "(or swipe finger)"
msgstr "(або проведіть пальцем)" msgstr "(або проведіть пальцем)"
#. Translators: The name of the power-off action in search #. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:93 #: js/misc/systemActions.js:91
msgctxt "search-result" msgctxt "search-result"
msgid "Power Off" msgid "Power Off"
msgstr "Вимкнути" msgstr "Вимкнути"
#. Translators: A list of keywords that match the power-off action, separated by semicolons #. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:96 #: js/misc/systemActions.js:94
msgid "power off;shutdown;reboot;restart;halt;stop" msgid "power off;shutdown;halt;stop"
msgstr "вимкнути;перезавантажити;power off;shutdown;reboot;restart;halt;stop" msgstr "вимкнути;перезавантажити;зупинити;power off;shutdown;halt;stop"
#. Translators: The name of the restart action in search
#: js/misc/systemActions.js:99
msgctxt "search-result"
msgid "Restart"
msgstr "Перезапустити"
#. Translators: A list of keywords that match the restart action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "reboot;restart;"
msgstr "reboot;restart;перезавантаження;перезапуск;"
#. Translators: The name of the lock screen action in search #. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:101 #: js/misc/systemActions.js:107
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen" msgid "Lock Screen"
msgstr "Заблокувати екран" msgstr "Заблокувати екран"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons #. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:104 #: js/misc/systemActions.js:110
msgid "lock screen" msgid "lock screen"
msgstr "заблокувати екран;lock screen" msgstr "заблокувати екран;lock screen"
#. Translators: The name of the logout action in search #. Translators: The name of the logout action in search
#: js/misc/systemActions.js:109 #: js/misc/systemActions.js:115
msgctxt "search-result" msgctxt "search-result"
msgid "Log Out" msgid "Log Out"
msgstr "Вийти" msgstr "Вийти"
#. Translators: A list of keywords that match the logout action, separated by semicolons #. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:112 #: js/misc/systemActions.js:118
msgid "logout;log out;sign off" msgid "logout;log out;sign off"
msgstr "вийти;завершити роботу;logout;log out;sign off" msgstr "вийти;завершити роботу;logout;log out;sign off"
#. Translators: The name of the suspend action in search #. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:117 #: js/misc/systemActions.js:123
msgctxt "search-result" msgctxt "search-result"
msgid "Suspend" msgid "Suspend"
msgstr "Призупинити" msgstr "Призупинити"
#. Translators: A list of keywords that match the suspend action, separated by semicolons #. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:120 #: js/misc/systemActions.js:126
msgid "suspend;sleep" msgid "suspend;sleep"
msgstr "призупинити;сон;suspend;sleep" msgstr "призупинити;сон;suspend;sleep"
#. Translators: The name of the switch user action in search #. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:125 #: js/misc/systemActions.js:131
msgctxt "search-result" msgctxt "search-result"
msgid "Switch User" msgid "Switch User"
msgstr "Змінити користувача" msgstr "Змінити користувача"
#. Translators: A list of keywords that match the switch user action, separated by semicolons #. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:128 #: js/misc/systemActions.js:134
msgid "switch user" msgid "switch user"
msgstr "змінити користувача;перемкнути;switch user" msgstr "змінити користувача;перемкнути;switch user"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:135 #: js/misc/systemActions.js:141
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "" msgstr ""
"заблокувати орієнтацію;розблокувати орієнтацію;екран;обертання;lock " "заблокувати орієнтацію;розблокувати орієнтацію;екран;обертання;lock "
"orientation;unlock orientation;screen;rotation" "orientation;unlock orientation;screen;rotation"
#: js/misc/systemActions.js:255 #: js/misc/systemActions.js:266
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Розблокувати обертання екрана" msgstr "Розблокувати обертання екрана"
#: js/misc/systemActions.js:256 #: js/misc/systemActions.js:267
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Заблокувати обертання екрана" msgstr "Заблокувати обертання екрана"
@ -735,31 +746,31 @@ msgid "Unnamed Folder"
msgstr "Неназвана тека" msgstr "Неназвана тека"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2767 js/ui/panel.js:75 #: js/ui/appDisplay.js:2762 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Відкрити вікна" msgstr "Відкрити вікна"
#: js/ui/appDisplay.js:2786 js/ui/panel.js:82 #: js/ui/appDisplay.js:2781 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Нове вікно" msgstr "Нове вікно"
#: js/ui/appDisplay.js:2802 #: js/ui/appDisplay.js:2797
msgid "Launch using Integrated Graphics Card" msgid "Launch using Integrated Graphics Card"
msgstr "Запустити через інтегровану графічну плату" msgstr "Запустити через інтегровану графічну плату"
#: js/ui/appDisplay.js:2803 #: js/ui/appDisplay.js:2798
msgid "Launch using Discrete Graphics Card" msgid "Launch using Discrete Graphics Card"
msgstr "Запустити через дискретну графічну плату" msgstr "Запустити через дискретну графічну плату"
#: js/ui/appDisplay.js:2831 js/ui/dash.js:239 #: js/ui/appDisplay.js:2826 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Вилучити з улюбленого" msgstr "Вилучити з улюбленого"
#: js/ui/appDisplay.js:2837 #: js/ui/appDisplay.js:2832
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Додати до улюбленого" msgstr "Додати до улюбленого"
#: js/ui/appDisplay.js:2847 js/ui/panel.js:93 #: js/ui/appDisplay.js:2842 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Показати подробиці" msgstr "Показати подробиці"
@ -958,8 +969,8 @@ msgid ""
msgstr "" msgstr ""
"Також можете під'єднатися, натиснувши кнопку «WPS» на вашому маршрутизаторі." "Також можете під'єднатися, натиснувши кнопку «WPS» на вашому маршрутизаторі."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:227 #: js/ui/components/networkAgent.js:104 js/ui/status/network.js:252
#: js/ui/status/network.js:318 js/ui/status/network.js:919 #: js/ui/status/network.js:343 js/ui/status/network.js:943
msgid "Connect" msgid "Connect"
msgstr "З'єднатись" msgstr "З'єднатись"
@ -1022,7 +1033,7 @@ msgstr "Пін-код"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Пароль потрібен для з'єднання з «%s»." msgstr "Пароль потрібен для з'єднання з «%s»."
#: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1694 #: js/ui/components/networkAgent.js:669 js/ui/status/network.js:1718
msgid "Network Manager" msgid "Network Manager"
msgstr "Керування мережею" msgstr "Керування мережею"
@ -1148,18 +1159,18 @@ msgstr "Погода"
msgid "Select weather location…" msgid "Select weather location…"
msgstr "Виберіть місцевість для погоди…" msgstr "Виберіть місцевість для погоди…"
#: js/ui/endSessionDialog.js:37 #: js/ui/endSessionDialog.js:39
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Завершити сеанс %s" msgstr "Завершити сеанс %s"
#: js/ui/endSessionDialog.js:38 #: js/ui/endSessionDialog.js:40
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Завершити сеанс" msgstr "Завершити сеанс"
#: js/ui/endSessionDialog.js:40 #: js/ui/endSessionDialog.js:43
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
@ -1168,7 +1179,7 @@ msgstr[1] "%s вийде автоматично через %d секунди."
msgstr[2] "%s вийде автоматично через %d секунд." msgstr[2] "%s вийде автоматично через %d секунд."
msgstr[3] "%s вийде автоматично через %d секунду." msgstr[3] "%s вийде автоматично через %d секунду."
#: js/ui/endSessionDialog.js:45 #: js/ui/endSessionDialog.js:49
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
@ -1177,22 +1188,22 @@ msgstr[1] "Вихід автоматично через %d секунди."
msgstr[2] "Вихід автоматично через %d секунд." msgstr[2] "Вихід автоматично через %d секунд."
msgstr[3] "Вихід автоматично через %d секунду." msgstr[3] "Вихід автоматично через %d секунду."
#: js/ui/endSessionDialog.js:51 #: js/ui/endSessionDialog.js:56
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Вийти" msgstr "Вийти"
#: js/ui/endSessionDialog.js:56 #: js/ui/endSessionDialog.js:62
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Вимкнути" msgstr "Вимкнути"
#: js/ui/endSessionDialog.js:57 #: js/ui/endSessionDialog.js:63
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Установити оновлення і вимкнути" msgstr "Установити оновлення і вимкнути"
#: js/ui/endSessionDialog.js:59 #: js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
@ -1201,27 +1212,27 @@ msgstr[1] "Система автоматично вимкнеться через
msgstr[2] "Система автоматично вимкнеться через %d секунд." msgstr[2] "Система автоматично вимкнеться через %d секунд."
msgstr[3] "Система автоматично вимкнеться через %d секунду." msgstr[3] "Система автоматично вимкнеться через %d секунду."
#: js/ui/endSessionDialog.js:63 #: js/ui/endSessionDialog.js:70 js/ui/endSessionDialog.js:89
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Установити оновлення, які в черзі" msgstr "Установити оновлення, які в черзі"
#: js/ui/endSessionDialog.js:66 js/ui/endSessionDialog.js:82 #: js/ui/endSessionDialog.js:74
msgctxt "button"
msgid "Restart"
msgstr "Перезапустити"
#: js/ui/endSessionDialog.js:68
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Вимкнути" msgstr "Вимкнути"
#: js/ui/endSessionDialog.js:74 #: js/ui/endSessionDialog.js:81
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Перезапустити" msgstr "Перезапустити"
#: js/ui/endSessionDialog.js:76 #: js/ui/endSessionDialog.js:82
msgctxt "title"
msgid "Install Updates & Restart"
msgstr "Установити оновлення і перезапустити"
#: js/ui/endSessionDialog.js:85
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
@ -1230,12 +1241,17 @@ msgstr[1] "Система автоматично перезапуститься
msgstr[2] "Система автоматично перезапуститься через %d секунд." msgstr[2] "Система автоматично перезапуститься через %d секунд."
msgstr[3] "Система автоматично перезапуститься через %d секунду." msgstr[3] "Система автоматично перезапуститься через %d секунду."
#: js/ui/endSessionDialog.js:89 #: js/ui/endSessionDialog.js:93
msgctxt "button"
msgid "Restart"
msgstr "Перезапустити"
#: js/ui/endSessionDialog.js:101
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Перезапустити і встановити оновлення" msgstr "Перезапустити і встановити оновлення"
#: js/ui/endSessionDialog.js:91 #: js/ui/endSessionDialog.js:104
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@ -1249,22 +1265,22 @@ msgstr[2] ""
msgstr[3] "" msgstr[3] ""
"Система автоматично перезапуститься та встановить оновлення через %d секунду." "Система автоматично перезапуститься та встановить оновлення через %d секунду."
#: js/ui/endSessionDialog.js:97 js/ui/endSessionDialog.js:116 #: js/ui/endSessionDialog.js:111 js/ui/endSessionDialog.js:132
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Перезапустити та встановити" msgstr "Перезапустити та встановити"
#: js/ui/endSessionDialog.js:98 #: js/ui/endSessionDialog.js:113
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Установити та вимкнути" msgstr "Установити та вимкнути"
#: js/ui/endSessionDialog.js:99 #: js/ui/endSessionDialog.js:114
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Вимкнути після встановлення оновлень" msgstr "Вимкнути після встановлення оновлень"
#: js/ui/endSessionDialog.js:106 #: js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Upgrade" msgid "Restart & Install Upgrade"
msgstr "Перезапустити і встановити оновлення" msgstr "Перезапустити і встановити оновлення"
@ -1272,7 +1288,7 @@ msgstr "Перезапустити і встановити оновлення"
#. Translators: This is the text displayed for system upgrades in the #. Translators: This is the text displayed for system upgrades in the
#. shut down dialog. First %s gets replaced with the distro name and #. shut down dialog. First %s gets replaced with the distro name and
#. second %s with the distro version to upgrade to #. second %s with the distro version to upgrade to
#: js/ui/endSessionDialog.js:111 #: js/ui/endSessionDialog.js:126
#, javascript-format #, javascript-format
msgid "" msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long " "%s %s will be installed after restart. Upgrade installation can take a long "
@ -1282,28 +1298,34 @@ msgstr ""
"переконайтесь, що ви зробили резервні копії та комп'ютер під'єднано до " "переконайтесь, що ви зробили резервні копії та комп'ютер під'єднано до "
"живлення." "живлення."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:284
msgid "Running on battery power: Please plug in before installing updates." #| msgid "Running on battery power: Please plug in before installing updates."
msgid "Low battery power: please plug in before installing updates."
msgstr "" msgstr ""
"Працює від заряду батареї: під'єднайте до живлення перед установленням " "Низький рівень заряду батареї: під'єднайте до живлення перед установленням"
"оновлень." " оновлень."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:293
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "Деякі програми зайняті або мають незбережені дані" msgstr "Деякі програми зайняті або мають незбережені дані"
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:298
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Є інші користувачі з активним сеансом" msgstr "Є інші користувачі з активним сеансом"
#: js/ui/endSessionDialog.js:467
msgctxt "button"
msgid "Boot Options"
msgstr "Параметри завантаження"
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:583 #: js/ui/endSessionDialog.js:685
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (віддалено)" msgstr "%s (віддалено)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:586 #: js/ui/endSessionDialog.js:688
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (консоль)" msgstr "%s (консоль)"
@ -1403,15 +1425,15 @@ msgid "Leave On"
msgstr "Залишити" msgstr "Залишити"
#: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:55 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1291 #: js/ui/status/network.js:1315
msgid "Turn On" msgid "Turn On"
msgstr "Увімкнути" msgstr "Увімкнути"
#: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156 #: js/ui/kbdA11yDialog.js:63 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:135 js/ui/status/network.js:319 #: js/ui/status/network.js:160 js/ui/status/network.js:344
#: js/ui/status/network.js:1291 js/ui/status/network.js:1403 #: js/ui/status/network.js:1315 js/ui/status/network.js:1427
#: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81 #: js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:108 #: js/ui/status/rfkill.js:110
msgid "Turn Off" msgid "Turn Off"
msgstr "Вимкнути" msgstr "Вимкнути"
@ -1472,11 +1494,11 @@ msgstr "Переглянути джерело"
msgid "Web Page" msgid "Web Page"
msgstr "Веб-сторінка" msgstr "Веб-сторінка"
#: js/ui/main.js:297 #: js/ui/main.js:294
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Увійшов як наділений користувач" msgstr "Увійшов як наділений користувач"
#: js/ui/main.js:298 #: js/ui/main.js:295
msgid "" msgid ""
"Running a session as a privileged user should be avoided for security " "Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user." "reasons. If possible, you should log in as a normal user."
@ -1484,11 +1506,11 @@ msgstr ""
"З міркувань безпеки слід уникати сеансів з наділеними правами. Користуйтесь " "З міркувань безпеки слід уникати сеансів з наділеними правами. Користуйтесь "
"звичайним сеансом." "звичайним сеансом."
#: js/ui/main.js:337 #: js/ui/main.js:334
msgid "Screen Lock disabled" msgid "Screen Lock disabled"
msgstr "Блокування екрана вимкнено" msgstr "Блокування екрана вимкнено"
#: js/ui/main.js:338 #: js/ui/main.js:335
msgid "Screen Locking requires the GNOME display manager." msgid "Screen Locking requires the GNOME display manager."
msgstr "Блокування екрана потребує керування входом GNOME." msgstr "Блокування екрана потребує керування входом GNOME."
@ -1581,7 +1603,7 @@ msgctxt "System menu in the top bar"
msgid "System" msgid "System"
msgstr "Система" msgstr "Система"
#: js/ui/panel.js:827 #: js/ui/panel.js:825
msgid "Top Bar" msgid "Top Bar"
msgstr "Верхня панель" msgstr "Верхня панель"
@ -1758,7 +1780,7 @@ msgstr "Більший текст"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:49 js/ui/status/network.js:595 #: js/ui/status/bluetooth.js:49 js/ui/status/network.js:619
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Параметри Bluetooth" msgstr "Параметри Bluetooth"
@ -1842,18 +1864,18 @@ msgstr ""
"Доступ до місця перебування можна змінити в будь-яку мить у параметрах " "Доступ до місця перебування можна змінити в будь-яку мить у параметрах "
"конфіденційності." "конфіденційності."
#: js/ui/status/network.js:70 #: js/ui/status/network.js:71
msgid "<unknown>" msgid "<unknown>"
msgstr "<невідомо>" msgstr "<невідомо>"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:424 js/ui/status/network.js:1320 #: js/ui/status/network.js:449 js/ui/status/network.js:1344
#, javascript-format #, javascript-format
msgid "%s Off" msgid "%s Off"
msgstr "%s вимкнено" msgstr "%s вимкнено"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:427 #: js/ui/status/network.js:452
#, javascript-format #, javascript-format
msgid "%s Connected" msgid "%s Connected"
msgstr "%s під'єднано" msgstr "%s під'єднано"
@ -1861,164 +1883,164 @@ msgstr "%s під'єднано"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu); #. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier #. %s is a network identifier
#: js/ui/status/network.js:432 #: js/ui/status/network.js:457
#, javascript-format #, javascript-format
msgid "%s Unmanaged" msgid "%s Unmanaged"
msgstr "%s нескеровано" msgstr "%s нескеровано"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:435 #: js/ui/status/network.js:460
#, javascript-format #, javascript-format
msgid "%s Disconnecting" msgid "%s Disconnecting"
msgstr "%s від'єднується" msgstr "%s від'єднується"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:442 js/ui/status/network.js:1312 #: js/ui/status/network.js:467 js/ui/status/network.js:1336
#, javascript-format #, javascript-format
msgid "%s Connecting" msgid "%s Connecting"
msgstr "%s під'єднується" msgstr "%s під'єднується"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier #. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:445 #: js/ui/status/network.js:470
#, javascript-format #, javascript-format
msgid "%s Requires Authentication" msgid "%s Requires Authentication"
msgstr "%s вимагає засвідчення" msgstr "%s вимагає засвідчення"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier #. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:453 #: js/ui/status/network.js:478
#, javascript-format #, javascript-format
msgid "Firmware Missing For %s" msgid "Firmware Missing For %s"
msgstr "Бракує мікропрограми для %s" msgstr "Бракує мікропрограми для %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:457 #: js/ui/status/network.js:482
#, javascript-format #, javascript-format
msgid "%s Unavailable" msgid "%s Unavailable"
msgstr "%s недоступний" msgstr "%s недоступний"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:460 #: js/ui/status/network.js:485
#, javascript-format #, javascript-format
msgid "%s Connection Failed" msgid "%s Connection Failed"
msgstr "%s під'єднано невдало" msgstr "%s під'єднано невдало"
#: js/ui/status/network.js:472 #: js/ui/status/network.js:497
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Параметри мережі" msgstr "Параметри мережі"
#: js/ui/status/network.js:515 #: js/ui/status/network.js:540
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "параметри мобільної радіомережі" msgstr "параметри мобільної радіомережі"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:562 js/ui/status/network.js:1317 #: js/ui/status/network.js:586 js/ui/status/network.js:1341
#, javascript-format #, javascript-format
msgid "%s Hardware Disabled" msgid "%s Hardware Disabled"
msgstr "%s вимкнено апаратно" msgstr "%s вимкнено апаратно"
#. Translators: this is for a network device that cannot be activated #. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier #. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:566 #: js/ui/status/network.js:590
#, javascript-format #, javascript-format
msgid "%s Disabled" msgid "%s Disabled"
msgstr "%s вимкнено" msgstr "%s вимкнено"
#: js/ui/status/network.js:607 #: js/ui/status/network.js:631
msgid "Connect to Internet" msgid "Connect to Internet"
msgstr "Під'єднатись до інтернету" msgstr "Під'єднатись до інтернету"
#: js/ui/status/network.js:811 #: js/ui/status/network.js:835
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "Режим «у літаку» ввімкнено" msgstr "Режим «у літаку» ввімкнено"
#: js/ui/status/network.js:812 #: js/ui/status/network.js:836
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Wi-Fi вимкнено, коли режим «у літаку» ввімкнено." msgstr "Wi-Fi вимкнено, коли режим «у літаку» ввімкнено."
#: js/ui/status/network.js:813 #: js/ui/status/network.js:837
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Вимкнути режим «у літаку»" msgstr "Вимкнути режим «у літаку»"
#: js/ui/status/network.js:822 #: js/ui/status/network.js:846
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "Wi-Fi вимкнено" msgstr "Wi-Fi вимкнено"
#: js/ui/status/network.js:823 #: js/ui/status/network.js:847
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Wi-Fi потрібно ввімкнути, щоб з'єднатись з мережею." msgstr "Wi-Fi потрібно ввімкнути, щоб з'єднатись з мережею."
#: js/ui/status/network.js:824 #: js/ui/status/network.js:848
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Увімкнути Wi-Fi" msgstr "Увімкнути Wi-Fi"
#: js/ui/status/network.js:849 #: js/ui/status/network.js:873
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Мережі Wi-Fi" msgstr "Мережі Wi-Fi"
#: js/ui/status/network.js:851 #: js/ui/status/network.js:875
msgid "Select a network" msgid "Select a network"
msgstr "Вибрати мережу" msgstr "Вибрати мережу"
#: js/ui/status/network.js:883 #: js/ui/status/network.js:907
msgid "No Networks" msgid "No Networks"
msgstr "Немає мереж" msgstr "Немає мереж"
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:106 #: js/ui/status/network.js:928 js/ui/status/rfkill.js:108
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Натисніть апаратну кнопку, щоб вимкнути" msgstr "Натисніть апаратну кнопку, щоб вимкнути"
#: js/ui/status/network.js:1181 #: js/ui/status/network.js:1205
msgid "Select Network" msgid "Select Network"
msgstr "Виберіть мережу" msgstr "Виберіть мережу"
#: js/ui/status/network.js:1187 #: js/ui/status/network.js:1211
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Параметри Wi-Fi" msgstr "Параметри Wi-Fi"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1308 #: js/ui/status/network.js:1332
#, javascript-format #, javascript-format
msgid "%s Hotspot Active" msgid "%s Hotspot Active"
msgstr "%s точка доступу" msgstr "%s точка доступу"
#. Translators: %s is a network identifier #. Translators: %s is a network identifier
#: js/ui/status/network.js:1323 #: js/ui/status/network.js:1347
#, javascript-format #, javascript-format
msgid "%s Not Connected" msgid "%s Not Connected"
msgstr "%s не під'єднано" msgstr "%s не під'єднано"
#: js/ui/status/network.js:1420 #: js/ui/status/network.js:1444
msgid "connecting…" msgid "connecting…"
msgstr "З'єднання…" msgstr "З'єднання…"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1423 #: js/ui/status/network.js:1447
msgid "authentication required" msgid "authentication required"
msgstr "Потрібна аутентифікація" msgstr "Потрібна аутентифікація"
#: js/ui/status/network.js:1425 #: js/ui/status/network.js:1449
msgid "connection failed" msgid "connection failed"
msgstr "не вдалось з'єднатись" msgstr "не вдалось з'єднатись"
#: js/ui/status/network.js:1476 #: js/ui/status/network.js:1500
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Параметри VPN" msgstr "Параметри VPN"
#: js/ui/status/network.js:1493 #: js/ui/status/network.js:1517
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: js/ui/status/network.js:1503 #: js/ui/status/network.js:1527
msgid "VPN Off" msgid "VPN Off"
msgstr "VPN вимкнено" msgstr "VPN вимкнено"
#: js/ui/status/network.js:1564 js/ui/status/rfkill.js:84 #: js/ui/status/network.js:1588 js/ui/status/rfkill.js:84
msgid "Network Settings" msgid "Network Settings"
msgstr "Налаштування мережі" msgstr "Налаштування мережі"
#: js/ui/status/network.js:1593 #: js/ui/status/network.js:1617
#, javascript-format #, javascript-format
msgid "%s Wired Connection" msgid "%s Wired Connection"
msgid_plural "%s Wired Connections" msgid_plural "%s Wired Connections"
@ -2027,7 +2049,7 @@ msgstr[1] "%s з'єднання через дріт"
msgstr[2] "%s з'єднань через дріт" msgstr[2] "%s з'єднань через дріт"
msgstr[3] "%s з'єднання через дріт" msgstr[3] "%s з'єднання через дріт"
#: js/ui/status/network.js:1597 #: js/ui/status/network.js:1621
#, javascript-format #, javascript-format
msgid "%s Wi-Fi Connection" msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections" msgid_plural "%s Wi-Fi Connections"
@ -2036,7 +2058,7 @@ msgstr[1] "%s з'єднання через Wi-Fi"
msgstr[2] "%s з'єднань через Wi-Fi" msgstr[2] "%s з'єднань через Wi-Fi"
msgstr[3] "%s з'єднання через Wi-Fi" msgstr[3] "%s з'єднання через Wi-Fi"
#: js/ui/status/network.js:1601 #: js/ui/status/network.js:1625
#, javascript-format #, javascript-format
msgid "%s Modem Connection" msgid "%s Modem Connection"
msgid_plural "%s Modem Connections" msgid_plural "%s Modem Connections"
@ -2045,11 +2067,11 @@ msgstr[1] "%s з'єднання через модем"
msgstr[2] "%s з'єднань через модем" msgstr[2] "%s з'єднань через модем"
msgstr[3] "%s з'єднання через модем" msgstr[3] "%s з'єднання через модем"
#: js/ui/status/network.js:1735 #: js/ui/status/network.js:1759
msgid "Connection failed" msgid "Connection failed"
msgstr "Не вдалось з'єднатись" msgstr "Не вдалось з'єднатись"
#: js/ui/status/network.js:1736 #: js/ui/status/network.js:1760
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Не вдалось увімкнути мережеве з'єднання" msgstr "Не вдалось увімкнути мережеве з'єднання"
@ -2104,11 +2126,11 @@ msgstr "Зарядиться через %d%02d (%d%%)"
msgid "%d%%" msgid "%d%%"
msgstr "%d%%" msgstr "%d%%"
#: js/ui/status/remoteAccess.js:43 #: js/ui/status/remoteAccess.js:45
msgid "Screen is Being Shared" msgid "Screen is Being Shared"
msgstr "Екран у спільному доступі" msgstr "Екран у спільному доступі"
#: js/ui/status/remoteAccess.js:45 #: js/ui/status/remoteAccess.js:47
msgid "Turn off" msgid "Turn off"
msgstr "Вимкнути" msgstr "Вимкнути"
@ -2119,30 +2141,34 @@ msgstr "Вимкнути"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Режим «у літаку» ввімкнено" msgstr "Режим «у літаку» ввімкнено"
#: js/ui/status/system.js:102 #: js/ui/status/system.js:104
msgid "Lock" msgid "Lock"
msgstr "Заблокувати" msgstr "Заблокувати"
#: js/ui/status/system.js:115 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Вимкнути / Вийти" msgstr "Вимкнути / Вийти"
#: js/ui/status/system.js:118 #: js/ui/status/system.js:119
msgid "Log Out"
msgstr "Вийти"
#: js/ui/status/system.js:130
msgid "Switch User…"
msgstr "Змінити користувача…"
#: js/ui/status/system.js:144
msgid "Suspend" msgid "Suspend"
msgstr "Призупинити" msgstr "Призупинити"
#: js/ui/status/system.js:156 #: js/ui/status/system.js:130
msgid "Restart…"
msgstr "Перезапуск…"
#: js/ui/status/system.js:141
msgid "Power Off…" msgid "Power Off…"
msgstr "Вимкнути…" msgstr "Вимкнути…"
#: js/ui/status/system.js:154
msgid "Log Out"
msgstr "Вийти"
#: js/ui/status/system.js:165
msgid "Switch User…"
msgstr "Змінити користувача…"
#: js/ui/status/thunderbolt.js:263 #: js/ui/status/thunderbolt.js:263
msgid "Thunderbolt" msgid "Thunderbolt"
msgstr "Thunderbolt" msgstr "Thunderbolt"
@ -2249,22 +2275,22 @@ msgid "“%s” is ready"
msgstr "«%s» готовий" msgstr "«%s» готовий"
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:60
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "Зберегти ці параметри екрана?" msgstr "Зберегти ці параметри екрана?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #.
#: js/ui/windowManager.js:64 #: js/ui/windowManager.js:69
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Повернути параметри" msgstr "Повернути параметри"
#: js/ui/windowManager.js:67 #: js/ui/windowManager.js:72
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Зберегти зміни" msgstr "Зберегти зміни"
#: js/ui/windowManager.js:86 #: js/ui/windowManager.js:91
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -2275,7 +2301,7 @@ msgstr[3] "Зміни параметрів буде повернуто чере
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: js/ui/windowManager.js:546 #: js/ui/windowManager.js:551
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"

@ -51,6 +51,8 @@ def start_shell(perf_output=None):
args.append('--nested') args.append('--nested')
else: else:
args.append('--display-server') args.append('--display-server')
elif options.x11:
args.append('--x11')
return subprocess.Popen(args, env=env) return subprocess.Popen(args, env=env)
@ -295,6 +297,8 @@ parser.add_option("-w", "--wayland", action="store_true",
help="Run as a Wayland compositor") help="Run as a Wayland compositor")
parser.add_option("-n", "--nested", action="store_true", parser.add_option("-n", "--nested", action="store_true",
help="Run as a Wayland nested compositor") help="Run as a Wayland nested compositor")
parser.add_option("-x", "--x11", action="store_true",
help="Run as an X11 compositor")
options, args = parser.parse_args() options, args = parser.parse_args()

@ -1361,9 +1361,15 @@ shell_global_get_pointer (ShellGlobal *global,
{ {
ClutterModifierType raw_mods; ClutterModifierType raw_mods;
MetaCursorTracker *tracker; MetaCursorTracker *tracker;
graphene_point_t point;
tracker = meta_cursor_tracker_get_for_display (global->meta_display); tracker = meta_cursor_tracker_get_for_display (global->meta_display);
meta_cursor_tracker_get_pointer (tracker, x, y, &raw_mods); meta_cursor_tracker_get_pointer (tracker, &point, &raw_mods);
if (x)
*x = point.x;
if (y)
*y = point.y;
*mods = raw_mods & CLUTTER_MODIFIER_MASK; *mods = raw_mods & CLUTTER_MODIFIER_MASK;
} }

@ -12,6 +12,12 @@
#include "shell-screenshot.h" #include "shell-screenshot.h"
#include "shell-util.h" #include "shell-util.h"
typedef enum _ShellScreenshotFlag
{
SHELL_SCREENSHOT_FLAG_NONE,
SHELL_SCREENSHOT_FLAG_INCLUDE_CURSOR,
} ShellScreenshotFlag;
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate; typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
struct _ShellScreenshot struct _ShellScreenshot
@ -32,7 +38,6 @@ struct _ShellScreenshotPrivate
cairo_surface_t *image; cairo_surface_t *image;
cairo_rectangle_int_t screenshot_area; cairo_rectangle_int_t screenshot_area;
gboolean include_cursor;
gboolean include_frame; gboolean include_frame;
}; };
@ -45,10 +50,6 @@ typedef enum
G_DEFINE_TYPE_WITH_PRIVATE (ShellScreenshot, shell_screenshot, G_TYPE_OBJECT); G_DEFINE_TYPE_WITH_PRIVATE (ShellScreenshot, shell_screenshot, G_TYPE_OBJECT);
static void
grab_screenshot (ClutterActor *stage,
GTask *result);
static void static void
shell_screenshot_class_init (ShellScreenshotClass *screenshot_class) shell_screenshot_class_init (ShellScreenshotClass *screenshot_class)
{ {
@ -77,8 +78,6 @@ on_screenshot_written (GObject *source,
g_clear_pointer (&priv->image, cairo_surface_destroy); g_clear_pointer (&priv->image, cairo_surface_destroy);
g_clear_object (&priv->stream); g_clear_object (&priv->stream);
g_clear_pointer (&priv->datetime, g_date_time_unref); g_clear_pointer (&priv->datetime, g_date_time_unref);
meta_enable_unredirect_for_display (shell_global_get_display (priv->global));
} }
static void static void
@ -122,62 +121,48 @@ write_screenshot_thread (GTask *result,
static void static void
do_grab_screenshot (ShellScreenshot *screenshot, do_grab_screenshot (ShellScreenshot *screenshot,
ClutterStage *stage,
int x, int x,
int y, int y,
int width, int width,
int height) int height,
ShellScreenshotFlag flags)
{ {
ShellScreenshotPrivate *priv = screenshot->priv; ShellScreenshotPrivate *priv = screenshot->priv;
ClutterStage *stage = shell_global_get_stage (priv->global);
cairo_rectangle_int_t screenshot_rect = { x, y, width, height }; cairo_rectangle_int_t screenshot_rect = { x, y, width, height };
ClutterCapture *captures; int image_width;
int n_captures; int image_height;
int i; float scale;
cairo_surface_t *image;
if (!clutter_stage_capture (stage, FALSE, ClutterPaintFlag paint_flags = CLUTTER_PAINT_FLAG_NONE;
&screenshot_rect, g_autoptr (GError) error = NULL;
&captures,
&n_captures))
return;
if (n_captures == 1)
priv->image = cairo_surface_reference (captures[0].image);
else
{
float target_scale;
clutter_stage_get_capture_final_size (stage, &screenshot_rect, clutter_stage_get_capture_final_size (stage, &screenshot_rect,
&width, &height, &target_scale); &image_width,
priv->image = shell_util_composite_capture_images (captures, &image_height,
n_captures, &scale);
x, y, image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
width, height, image_width, image_height);
target_scale);
if (flags & SHELL_SCREENSHOT_FLAG_INCLUDE_CURSOR)
paint_flags |= CLUTTER_PAINT_FLAG_FORCE_CURSORS;
else
paint_flags |= CLUTTER_PAINT_FLAG_NO_CURSORS;
if (!clutter_stage_paint_to_buffer (stage, &screenshot_rect, scale,
cairo_image_surface_get_data (image),
cairo_image_surface_get_stride (image),
CLUTTER_CAIRO_FORMAT_ARGB32,
paint_flags,
&error))
{
cairo_surface_destroy (image);
g_warning ("Failed to take screenshot: %s", error->message);
return;
} }
priv->image = image;
priv->datetime = g_date_time_new_now_local (); priv->datetime = g_date_time_new_now_local ();
for (i = 0; i < n_captures; i++)
cairo_surface_destroy (captures[i].image);
g_free (captures);
}
static gboolean
should_draw_cursor_image (ShellScreenshotMode mode)
{
if (mode == SHELL_SCREENSHOT_WINDOW || !meta_is_wayland_compositor ())
{
StSettings *settings = st_settings_get ();
gboolean magnifier_active = FALSE;
g_object_get (settings, "magnifier-active", &magnifier_active, NULL);
if (!magnifier_active)
return TRUE;
}
return FALSE;
} }
static void static void
@ -196,6 +181,7 @@ draw_cursor_image (cairo_surface_t *surface,
int x, y; int x, y;
int xhot, yhot; int xhot, yhot;
double xscale, yscale; double xscale, yscale;
graphene_point_t point;
display = shell_global_get_display (shell_global_get ()); display = shell_global_get_display (shell_global_get ());
tracker = meta_cursor_tracker_get_for_display (display); tracker = meta_cursor_tracker_get_for_display (display);
@ -205,9 +191,11 @@ draw_cursor_image (cairo_surface_t *surface,
return; return;
screenshot_region = cairo_region_create_rectangle (&area); screenshot_region = cairo_region_create_rectangle (&area);
meta_cursor_tracker_get_pointer (tracker, &x, &y, NULL); meta_cursor_tracker_get_pointer (tracker, &point, NULL);
x = point.x;
y = point.y;
if (!cairo_region_contains_point (screenshot_region, x, y)) if (!cairo_region_contains_point (screenshot_region, point.x, point.y))
{ {
cairo_region_destroy (screenshot_region); cairo_region_destroy (screenshot_region);
return; return;
@ -256,116 +244,37 @@ draw_cursor_image (cairo_surface_t *surface,
} }
static void static void
on_paint (ClutterActor *actor, grab_screenshot (ShellScreenshot *screenshot,
ClutterPaintContext *paint_context, ShellScreenshotFlag flags,
GTask *result)
{
grab_screenshot (actor, result);
}
static void
on_actors_painted (ClutterActor *actor,
GTask *result)
{
grab_screenshot (actor, result);
}
static void
grab_screenshot (ClutterActor *stage,
GTask *result) GTask *result)
{ {
ShellScreenshotPrivate *priv = screenshot->priv;
MetaDisplay *display; MetaDisplay *display;
int width, height; int width, height;
ShellScreenshot *screenshot = g_task_get_source_object (result);
ShellScreenshotPrivate *priv = screenshot->priv;
GTask *task; GTask *task;
display = shell_global_get_display (priv->global); display = shell_global_get_display (priv->global);
meta_display_get_size (display, &width, &height); meta_display_get_size (display, &width, &height);
do_grab_screenshot (screenshot, CLUTTER_STAGE (stage), 0, 0, width, height); do_grab_screenshot (screenshot,
0, 0, width, height,
if (meta_display_get_n_monitors (display) > 1) flags);
{
cairo_region_t *screen_region = cairo_region_create ();
cairo_region_t *stage_region;
MetaRectangle monitor_rect;
cairo_rectangle_int_t stage_rect;
int i;
cairo_t *cr;
for (i = meta_display_get_n_monitors (display) - 1; i >= 0; i--)
{
meta_display_get_monitor_geometry (display, i, &monitor_rect);
cairo_region_union_rectangle (screen_region,
(const cairo_rectangle_int_t *) &monitor_rect);
}
stage_rect.x = 0;
stage_rect.y = 0;
stage_rect.width = width;
stage_rect.height = height;
stage_region = cairo_region_create_rectangle ((const cairo_rectangle_int_t *) &stage_rect);
cairo_region_xor (stage_region, screen_region);
cairo_region_destroy (screen_region);
cr = cairo_create (priv->image);
for (i = 0; i < cairo_region_num_rectangles (stage_region); i++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (stage_region, i, &rect);
cairo_rectangle (cr, (double) rect.x, (double) rect.y, (double) rect.width, (double) rect.height);
cairo_fill (cr);
}
cairo_destroy (cr);
cairo_region_destroy (stage_region);
}
priv->screenshot_area.x = 0; priv->screenshot_area.x = 0;
priv->screenshot_area.y = 0; priv->screenshot_area.y = 0;
priv->screenshot_area.width = width; priv->screenshot_area.width = width;
priv->screenshot_area.height = height; priv->screenshot_area.height = height;
if (priv->include_cursor)
draw_cursor_image (priv->image, priv->screenshot_area);
g_signal_handlers_disconnect_by_func (stage, on_paint, result);
g_signal_handlers_disconnect_by_func (stage, on_actors_painted, result);
task = g_task_new (screenshot, NULL, on_screenshot_written, result); task = g_task_new (screenshot, NULL, on_screenshot_written, result);
g_task_run_in_thread (task, write_screenshot_thread); g_task_run_in_thread (task, write_screenshot_thread);
g_object_unref (task); g_object_unref (task);
} }
static void static void
grab_area_screenshot (ClutterActor *stage, grab_window_screenshot (ShellScreenshot *screenshot,
ShellScreenshotFlag flags,
GTask *result) GTask *result)
{ {
ShellScreenshot *screenshot = g_task_get_source_object (result);
ShellScreenshotPrivate *priv = screenshot->priv;
GTask *task;
do_grab_screenshot (screenshot,
CLUTTER_STAGE (stage),
priv->screenshot_area.x,
priv->screenshot_area.y,
priv->screenshot_area.width,
priv->screenshot_area.height);
g_signal_handlers_disconnect_by_func (stage, grab_area_screenshot, result);
task = g_task_new (screenshot, NULL, on_screenshot_written, result);
g_task_run_in_thread (task, write_screenshot_thread);
g_object_unref (task);
}
static void
grab_window_screenshot (ClutterActor *stage,
GTask *result)
{
ShellScreenshot *screenshot = g_task_get_source_object (result);
ShellScreenshotPrivate *priv = screenshot->priv; ShellScreenshotPrivate *priv = screenshot->priv;
GTask *task; GTask *task;
MetaDisplay *display = shell_global_get_display (priv->global); MetaDisplay *display = shell_global_get_display (priv->global);
@ -388,7 +297,7 @@ grab_window_screenshot (ClutterActor *stage,
NULL); NULL);
priv->datetime = g_date_time_new_now_local (); priv->datetime = g_date_time_new_now_local ();
if (priv->include_cursor) if (flags & SHELL_SCREENSHOT_FLAG_INCLUDE_CURSOR)
{ {
if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_WAYLAND) if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_WAYLAND)
{ {
@ -401,33 +310,11 @@ grab_window_screenshot (ClutterActor *stage,
draw_cursor_image (priv->image, priv->screenshot_area); draw_cursor_image (priv->image, priv->screenshot_area);
} }
g_signal_handlers_disconnect_by_func (stage, grab_window_screenshot, result);
task = g_task_new (screenshot, NULL, on_screenshot_written, result); task = g_task_new (screenshot, NULL, on_screenshot_written, result);
g_task_run_in_thread (task, write_screenshot_thread); g_task_run_in_thread (task, write_screenshot_thread);
g_object_unref (task); g_object_unref (task);
} }
static void
grab_pixel (ClutterActor *stage,
GTask *result)
{
ShellScreenshot *screenshot = g_task_get_source_object (result);
ShellScreenshotPrivate *priv = screenshot->priv;
do_grab_screenshot (screenshot,
CLUTTER_STAGE (stage),
priv->screenshot_area.x,
priv->screenshot_area.y,
1,
1);
meta_enable_unredirect_for_display (shell_global_get_display (priv->global));
g_signal_handlers_disconnect_by_func (stage, grab_pixel, result);
g_task_return_boolean (result, TRUE);
g_object_unref (result);
}
static gboolean static gboolean
finish_screenshot (ShellScreenshot *screenshot, finish_screenshot (ShellScreenshot *screenshot,
GAsyncResult *result, GAsyncResult *result,
@ -465,10 +352,9 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
ClutterActor *stage;
ShellScreenshotPrivate *priv; ShellScreenshotPrivate *priv;
gboolean use_paint_signal = FALSE;
GTask *result; GTask *result;
ShellScreenshotFlag flags;
g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot)); g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot));
g_return_if_fail (G_IS_OUTPUT_STREAM (stream)); g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
@ -492,34 +378,12 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot,
g_task_set_source_tag (result, shell_screenshot_screenshot); g_task_set_source_tag (result, shell_screenshot_screenshot);
priv->stream = g_object_ref (stream); priv->stream = g_object_ref (stream);
priv->include_cursor = FALSE;
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
meta_disable_unredirect_for_display (shell_global_get_display (priv->global));
flags = SHELL_SCREENSHOT_FLAG_NONE;
if (include_cursor) if (include_cursor)
{ flags |= SHELL_SCREENSHOT_FLAG_INCLUDE_CURSOR;
if (should_draw_cursor_image (SHELL_SCREENSHOT_SCREEN))
priv->include_cursor = TRUE;
else
use_paint_signal = TRUE;
}
if (use_paint_signal) grab_screenshot (screenshot, flags, result);
{
g_signal_connect_after (stage, "paint",
G_CALLBACK (on_paint),
result);
}
else
{
g_signal_connect_after (stage, "actors-painted",
G_CALLBACK (on_actors_painted),
result);
}
clutter_actor_queue_redraw (stage);
} }
/** /**
@ -575,9 +439,9 @@ shell_screenshot_screenshot_area (ShellScreenshot *screenshot,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
ClutterActor *stage;
ShellScreenshotPrivate *priv; ShellScreenshotPrivate *priv;
GTask *result; GTask *result;
g_autoptr (GTask) task = NULL;
g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot)); g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot));
g_return_if_fail (G_IS_OUTPUT_STREAM (stream)); g_return_if_fail (G_IS_OUTPUT_STREAM (stream));
@ -606,13 +470,15 @@ shell_screenshot_screenshot_area (ShellScreenshot *screenshot,
priv->screenshot_area.width = width; priv->screenshot_area.width = width;
priv->screenshot_area.height = height; priv->screenshot_area.height = height;
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); do_grab_screenshot (screenshot,
priv->screenshot_area.x,
priv->screenshot_area.y,
priv->screenshot_area.width,
priv->screenshot_area.height,
SHELL_SCREENSHOT_FLAG_NONE);
meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ())); task = g_task_new (screenshot, NULL, on_screenshot_written, result);
g_task_run_in_thread (task, write_screenshot_thread);
g_signal_connect_after (stage, "actors-painted", G_CALLBACK (grab_area_screenshot), result);
clutter_actor_queue_redraw (stage);
} }
/** /**
@ -666,7 +532,6 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
{ {
ShellScreenshotPrivate *priv; ShellScreenshotPrivate *priv;
MetaDisplay *display; MetaDisplay *display;
ClutterActor *stage;
MetaWindow *window; MetaWindow *window;
GTask *result; GTask *result;
@ -695,16 +560,8 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
priv->stream = g_object_ref (stream); priv->stream = g_object_ref (stream);
priv->include_frame = include_frame; priv->include_frame = include_frame;
priv->include_cursor = include_cursor &&
should_draw_cursor_image (SHELL_SCREENSHOT_WINDOW);
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); grab_window_screenshot (screenshot, include_cursor, result);
meta_disable_unredirect_for_display (shell_global_get_display (shell_global_get ()));
g_signal_connect_after (stage, "actors-painted", G_CALLBACK (grab_window_screenshot), result);
clutter_actor_queue_redraw (stage);
} }
/** /**
@ -753,9 +610,7 @@ shell_screenshot_pick_color (ShellScreenshot *screenshot,
gpointer user_data) gpointer user_data)
{ {
ShellScreenshotPrivate *priv; ShellScreenshotPrivate *priv;
MetaDisplay *display; g_autoptr (GTask) result = NULL;
ClutterActor *stage;
GTask *result;
g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot)); g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot));
@ -769,14 +624,14 @@ shell_screenshot_pick_color (ShellScreenshot *screenshot,
priv->screenshot_area.width = 1; priv->screenshot_area.width = 1;
priv->screenshot_area.height = 1; priv->screenshot_area.height = 1;
display = shell_global_get_display (priv->global); do_grab_screenshot (screenshot,
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global)); priv->screenshot_area.x,
priv->screenshot_area.y,
1,
1,
SHELL_SCREENSHOT_FLAG_NONE);
meta_disable_unredirect_for_display (display); g_task_return_boolean (result, TRUE);
g_signal_connect_after (stage, "actors-painted", G_CALLBACK (grab_pixel), result);
clutter_actor_queue_redraw (stage);
} }
#if G_BYTE_ORDER == G_LITTLE_ENDIAN #if G_BYTE_ORDER == G_LITTLE_ENDIAN

@ -136,6 +136,8 @@ struct _CRParserPriv {
#define CHARS_TAB_SIZE 12 #define CHARS_TAB_SIZE 12
#define RECURSIVE_CALLERS_LIMIT 100
/** /**
* IS_NUM: * IS_NUM:
*@a_char: the char to test. *@a_char: the char to test.
@ -343,9 +345,11 @@ static enum CRStatus cr_parser_parse_selector_core (CRParser * a_this);
static enum CRStatus cr_parser_parse_declaration_core (CRParser * a_this); static enum CRStatus cr_parser_parse_declaration_core (CRParser * a_this);
static enum CRStatus cr_parser_parse_any_core (CRParser * a_this); static enum CRStatus cr_parser_parse_any_core (CRParser * a_this,
guint n_calls);
static enum CRStatus cr_parser_parse_block_core (CRParser * a_this); static enum CRStatus cr_parser_parse_block_core (CRParser * a_this,
guint n_calls);
static enum CRStatus cr_parser_parse_value_core (CRParser * a_this); static enum CRStatus cr_parser_parse_value_core (CRParser * a_this);
@ -783,7 +787,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
cr_parser_try_to_skip_spaces_and_comments (a_this); cr_parser_try_to_skip_spaces_and_comments (a_this);
do { do {
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, 0);
} while (status == CR_OK); } while (status == CR_OK);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr,
@ -794,7 +798,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token); token);
token = NULL; token = NULL;
status = cr_parser_parse_block_core (a_this); status = cr_parser_parse_block_core (a_this, 0);
CHECK_PARSING_STATUS (status, CHECK_PARSING_STATUS (status,
FALSE); FALSE);
goto done; goto done;
@ -929,11 +933,11 @@ cr_parser_parse_selector_core (CRParser * a_this)
RECORD_INITIAL_POS (a_this, &init_pos); RECORD_INITIAL_POS (a_this, &init_pos);
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, 0);
CHECK_PARSING_STATUS (status, FALSE); CHECK_PARSING_STATUS (status, FALSE);
do { do {
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, 0);
} while (status == CR_OK); } while (status == CR_OK);
@ -955,10 +959,12 @@ cr_parser_parse_selector_core (CRParser * a_this)
*in chapter 4.1 of the css2 spec. *in chapter 4.1 of the css2 spec.
*block ::= '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*; *block ::= '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*;
*@param a_this the current instance of #CRParser. *@param a_this the current instance of #CRParser.
*@param n_calls used to limit recursion depth
*FIXME: code this function. *FIXME: code this function.
*/ */
static enum CRStatus static enum CRStatus
cr_parser_parse_block_core (CRParser * a_this) cr_parser_parse_block_core (CRParser * a_this,
guint n_calls)
{ {
CRToken *token = NULL; CRToken *token = NULL;
CRInputPos init_pos; CRInputPos init_pos;
@ -966,6 +972,9 @@ cr_parser_parse_block_core (CRParser * a_this)
g_return_val_if_fail (a_this && PRIVATE (a_this), CR_BAD_PARAM_ERROR); g_return_val_if_fail (a_this && PRIVATE (a_this), CR_BAD_PARAM_ERROR);
if (n_calls > RECURSIVE_CALLERS_LIMIT)
return CR_ERROR;
RECORD_INITIAL_POS (a_this, &init_pos); RECORD_INITIAL_POS (a_this, &init_pos);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token); status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token);
@ -995,13 +1004,13 @@ cr_parser_parse_block_core (CRParser * a_this)
} else if (token->type == CBO_TK) { } else if (token->type == CBO_TK) {
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token); cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
token = NULL; token = NULL;
status = cr_parser_parse_block_core (a_this); status = cr_parser_parse_block_core (a_this, n_calls + 1);
CHECK_PARSING_STATUS (status, FALSE); CHECK_PARSING_STATUS (status, FALSE);
goto parse_block_content; goto parse_block_content;
} else { } else {
cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token); cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
token = NULL; token = NULL;
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, n_calls + 1);
CHECK_PARSING_STATUS (status, FALSE); CHECK_PARSING_STATUS (status, FALSE);
goto parse_block_content; goto parse_block_content;
} }
@ -1108,7 +1117,7 @@ cr_parser_parse_value_core (CRParser * a_this)
status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token); token);
token = NULL; token = NULL;
status = cr_parser_parse_block_core (a_this); status = cr_parser_parse_block_core (a_this, 0);
CHECK_PARSING_STATUS (status, FALSE); CHECK_PARSING_STATUS (status, FALSE);
ref++; ref++;
goto continue_parsing; goto continue_parsing;
@ -1122,7 +1131,7 @@ cr_parser_parse_value_core (CRParser * a_this)
status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
token); token);
token = NULL; token = NULL;
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, 0);
if (status == CR_OK) { if (status == CR_OK) {
ref++; ref++;
goto continue_parsing; goto continue_parsing;
@ -1161,10 +1170,12 @@ cr_parser_parse_value_core (CRParser * a_this)
* | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*; * | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;
* *
*@param a_this the current instance of #CRParser. *@param a_this the current instance of #CRParser.
*@param n_calls used to limit recursion depth
*@return CR_OK upon successfull completion, an error code otherwise. *@return CR_OK upon successfull completion, an error code otherwise.
*/ */
static enum CRStatus static enum CRStatus
cr_parser_parse_any_core (CRParser * a_this) cr_parser_parse_any_core (CRParser * a_this,
guint n_calls)
{ {
CRToken *token1 = NULL, CRToken *token1 = NULL,
*token2 = NULL; *token2 = NULL;
@ -1173,6 +1184,9 @@ cr_parser_parse_any_core (CRParser * a_this)
g_return_val_if_fail (a_this, CR_BAD_PARAM_ERROR); g_return_val_if_fail (a_this, CR_BAD_PARAM_ERROR);
if (n_calls > RECURSIVE_CALLERS_LIMIT)
return CR_ERROR;
RECORD_INITIAL_POS (a_this, &init_pos); RECORD_INITIAL_POS (a_this, &init_pos);
status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token1); status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token1);
@ -1211,7 +1225,7 @@ cr_parser_parse_any_core (CRParser * a_this)
*We consider parameter as being an "any*" production. *We consider parameter as being an "any*" production.
*/ */
do { do {
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK); } while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR); ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
@ -1236,7 +1250,7 @@ cr_parser_parse_any_core (CRParser * a_this)
} }
do { do {
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK); } while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR); ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
@ -1264,7 +1278,7 @@ cr_parser_parse_any_core (CRParser * a_this)
} }
do { do {
status = cr_parser_parse_any_core (a_this); status = cr_parser_parse_any_core (a_this, n_calls + 1);
} while (status == CR_OK); } while (status == CR_OK);
ENSURE_PARSING_COND (status == CR_PARSING_ERROR); ENSURE_PARSING_COND (status == CR_PARSING_ERROR);

@ -279,11 +279,23 @@ st_adjustment_class_init (StAdjustmentClass *klass)
object_class->set_property = st_adjustment_set_property; object_class->set_property = st_adjustment_set_property;
object_class->dispose = st_adjustment_dispose; object_class->dispose = st_adjustment_dispose;
/**
* StAdjustment:actor:
*
* If the adjustment is used as #ClutterAnimatable for a
* #ClutterPropertyTransition, this property is used to determine which
* monitor should drive the animation.
*/
props[PROP_ACTOR] = props[PROP_ACTOR] =
g_param_spec_object ("actor", "Actor", "Actor", g_param_spec_object ("actor", "Actor", "Actor",
CLUTTER_TYPE_ACTOR, CLUTTER_TYPE_ACTOR,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StAdjustment:lower:
*
* The minimum value of the adjustment.
*/
props[PROP_LOWER] = props[PROP_LOWER] =
g_param_spec_double ("lower", "Lower", "Lower bound", g_param_spec_double ("lower", "Lower", "Lower bound",
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
@ -291,6 +303,14 @@ st_adjustment_class_init (StAdjustmentClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* StAdjustment:upper:
*
* The maximum value of the adjustment.
*
* Note that values will be restricted by `upper - page-size` if
* #StAdjustment:page-size is non-zero.
*/
props[PROP_UPPER] = props[PROP_UPPER] =
g_param_spec_double ("upper", "Upper", "Upper bound", g_param_spec_double ("upper", "Upper", "Upper bound",
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
@ -298,6 +318,11 @@ st_adjustment_class_init (StAdjustmentClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* StAdjustment:value:
*
* The value of the adjustment.
*/
props[PROP_VALUE] = props[PROP_VALUE] =
g_param_spec_double ("value", "Value", "Current value", g_param_spec_double ("value", "Value", "Current value",
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0, -G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
@ -305,6 +330,11 @@ st_adjustment_class_init (StAdjustmentClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* StAdjustment:step-increment:
*
* The step increment of the adjustment.
*/
props[PROP_STEP_INC] = props[PROP_STEP_INC] =
g_param_spec_double ("step-increment", "Step Increment", "Step increment", g_param_spec_double ("step-increment", "Step Increment", "Step increment",
0.0, G_MAXDOUBLE, 0.0, 0.0, G_MAXDOUBLE, 0.0,
@ -312,6 +342,11 @@ st_adjustment_class_init (StAdjustmentClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* StAdjustment:page-increment:
*
* The page increment of the adjustment.
*/
props[PROP_PAGE_INC] = props[PROP_PAGE_INC] =
g_param_spec_double ("page-increment", "Page Increment", "Page increment", g_param_spec_double ("page-increment", "Page Increment", "Page increment",
0.0, G_MAXDOUBLE, 0.0, 0.0, G_MAXDOUBLE, 0.0,
@ -319,6 +354,14 @@ st_adjustment_class_init (StAdjustmentClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT |
G_PARAM_EXPLICIT_NOTIFY); G_PARAM_EXPLICIT_NOTIFY);
/**
* StAdjustment:page-size:
*
* The page size of the adjustment.
*
* Note that the page-size is irrelevant and should be set to zero if the
* adjustment is used for a simple scalar value.
*/
props[PROP_PAGE_SIZE] = props[PROP_PAGE_SIZE] =
g_param_spec_double ("page-size", "Page Size", "Page size", g_param_spec_double ("page-size", "Page Size", "Page size",
0.0, G_MAXDOUBLE, 0.0, 0.0, G_MAXDOUBLE, 0.0,
@ -350,6 +393,20 @@ st_adjustment_init (StAdjustment *self)
priv->is_constructing = TRUE; priv->is_constructing = TRUE;
} }
/**
* st_adjustment_new:
* @actor: (nullable): a #ClutterActor
* @value: the initial value
* @lower: the minimum value
* @upper: the maximum value
* @step_increment: the step increment
* @page_increment: the page increment
* @page_size: the page size
*
* Creates a new #StAdjustment
*
* Returns: a new #StAdjustment
*/
StAdjustment * StAdjustment *
st_adjustment_new (ClutterActor *actor, st_adjustment_new (ClutterActor *actor,
gdouble value, gdouble value,
@ -370,6 +427,14 @@ st_adjustment_new (ClutterActor *actor,
NULL); NULL);
} }
/**
* st_adjustment_get_value:
* @adjustment: a #StAdjustment
*
* Gets the current value of the adjustment. See st_adjustment_set_value().
*
* Returns: The current value of the adjustment
*/
gdouble gdouble
st_adjustment_get_value (StAdjustment *adjustment) st_adjustment_get_value (StAdjustment *adjustment)
{ {
@ -378,6 +443,14 @@ st_adjustment_get_value (StAdjustment *adjustment)
return ((StAdjustmentPrivate *)st_adjustment_get_instance_private (adjustment))->value; return ((StAdjustmentPrivate *)st_adjustment_get_instance_private (adjustment))->value;
} }
/**
* st_adjustment_set_value:
* @adjustment: a #StAdjustment
* @value: the new value
*
* Sets the #StAdjustment value. The value is clamped to lie between
* #StAdjustment:lower and #StAdjustment:upper - #StAdjustment:page-size.
*/
void void
st_adjustment_set_value (StAdjustment *adjustment, st_adjustment_set_value (StAdjustment *adjustment,
gdouble value) gdouble value)
@ -404,6 +477,15 @@ st_adjustment_set_value (StAdjustment *adjustment,
} }
} }
/**
* st_adjustment_clamp_page:
* @adjustment: a #StAdjustment
* @lower: the lower value
* @upper: the upper value
*
* Set #StAdjustment:value to a value clamped between @lower and @upper. The
* clamping described by st_adjustment_set_value() still applies.
*/
void void
st_adjustment_clamp_page (StAdjustment *adjustment, st_adjustment_clamp_page (StAdjustment *adjustment,
gdouble lower, gdouble lower,
@ -437,6 +519,23 @@ st_adjustment_clamp_page (StAdjustment *adjustment,
g_object_notify_by_pspec (G_OBJECT (adjustment), props[PROP_VALUE]); g_object_notify_by_pspec (G_OBJECT (adjustment), props[PROP_VALUE]);
} }
/**
* st_adjustment_set_lower:
* @adjustment: a #StAdjustment
* @lower: the new minimum value
*
* Sets the minimum value of the adjustment.
*
* When setting multiple adjustment properties via their individual
* setters, multiple #GObject::notify and #StAdjustment::changed
* signals will be emitted. However, its possible to compress the
* #GObject::notify signals into one by calling
* g_object_freeze_notify() and g_object_thaw_notify() around the
* calls to the individual setters.
*
* Alternatively, using st_adjustment_set_values() will compress both
* #GObject::notify and #StAdjustment::changed emissions.
*/
static gboolean static gboolean
st_adjustment_set_lower (StAdjustment *adjustment, st_adjustment_set_lower (StAdjustment *adjustment,
gdouble lower) gdouble lower)
@ -461,6 +560,21 @@ st_adjustment_set_lower (StAdjustment *adjustment,
return FALSE; return FALSE;
} }
/**
* st_adjustment_set_upper:
* @adjustment: a #StAdjustment
* @upper: the new maximum value
*
* Sets the maximum value of the adjustment.
*
* Note that values will be restricted by `upper - page-size`
* if the page-size property is nonzero.
*
* See st_adjustment_set_lower() about how to compress multiple
* signal emissions when setting multiple adjustment properties.
*
* Returns: %TRUE if the value was changed
*/
static gboolean static gboolean
st_adjustment_set_upper (StAdjustment *adjustment, st_adjustment_set_upper (StAdjustment *adjustment,
gdouble upper) gdouble upper)
@ -485,6 +599,18 @@ st_adjustment_set_upper (StAdjustment *adjustment,
return FALSE; return FALSE;
} }
/**
* st_adjustment_set_step_increment:
* @adjustment: a #StAdjustment
* @step: the new step increment
*
* Sets the step increment of the adjustment.
*
* See st_adjustment_set_lower() about how to compress multiple
* signal emissions when setting multiple adjustment properties.
*
* Returns: %TRUE if the value was changed
*/
static gboolean static gboolean
st_adjustment_set_step_increment (StAdjustment *adjustment, st_adjustment_set_step_increment (StAdjustment *adjustment,
gdouble step) gdouble step)
@ -505,6 +631,18 @@ st_adjustment_set_step_increment (StAdjustment *adjustment,
return FALSE; return FALSE;
} }
/**
* st_adjustment_set_page_increment:
* @adjustment: a #StAdjustment
* @page: the new page increment
*
* Sets the page increment of the adjustment.
*
* See st_adjustment_set_lower() about how to compress multiple
* signal emissions when setting multiple adjustment properties.
*
* Returns: %TRUE if the value was changed
*/
static gboolean static gboolean
st_adjustment_set_page_increment (StAdjustment *adjustment, st_adjustment_set_page_increment (StAdjustment *adjustment,
gdouble page) gdouble page)
@ -525,6 +663,18 @@ st_adjustment_set_page_increment (StAdjustment *adjustment,
return FALSE; return FALSE;
} }
/**
* st_adjustment_set_page_size:
* @adjustment: a #StAdjustment
* @size: the new page size
*
* Sets the page size of the adjustment.
*
* See st_adjustment_set_lower() about how to compress multiple
* signal emissions when setting multiple adjustment properties.
*
* Returns: %TRUE if the value was changed
*/
static gboolean static gboolean
st_adjustment_set_page_size (StAdjustment *adjustment, st_adjustment_set_page_size (StAdjustment *adjustment,
gdouble size) gdouble size)
@ -549,6 +699,23 @@ st_adjustment_set_page_size (StAdjustment *adjustment,
return FALSE; return FALSE;
} }
/**
* st_adjustment_set_values:
* @adjustment: a #StAdjustment
* @value: the new value
* @lower: the new minimum value
* @upper: the new maximum value
* @step_increment: the new step increment
* @page_increment: the new page increment
* @page_size: the new page size
*
* Sets all properties of the adjustment at once.
*
* Use this function to avoid multiple emissions of the #GObject::notify and
* #StAdjustment::changed signals. See st_adjustment_set_lower() for an
* alternative way of compressing multiple emissions of #GObject::notify into
* one.
*/
void void
st_adjustment_set_values (StAdjustment *adjustment, st_adjustment_set_values (StAdjustment *adjustment,
gdouble value, gdouble value,
@ -593,12 +760,12 @@ st_adjustment_set_values (StAdjustment *adjustment,
/** /**
* st_adjustment_get_values: * st_adjustment_get_values:
* @adjustment: an #StAdjustment * @adjustment: an #StAdjustment
* @value: (out): the current value * @value: (out) (optional): the current value
* @lower: (out): the lower bound * @lower: (out) (optional): the lower bound
* @upper: (out): the upper bound * @upper: (out) (optional): the upper bound
* @step_increment: (out): the step increment * @step_increment: (out) (optional): the step increment
* @page_increment: (out): the page increment * @page_increment: (out) (optional): the page increment
* @page_size: (out): the page size * @page_size: (out) (optional): the page size
* *
* Gets all of @adjustment's values at once. * Gets all of @adjustment's values at once.
*/ */
@ -722,7 +889,13 @@ on_transition_stopped (ClutterTransition *transition,
/** /**
* st_adjustment_get_transition: * st_adjustment_get_transition:
* Returns: (transfer none) (nullable): * @adjustment: a #StAdjustment
* @name: a transition name
*
* Get the #ClutterTransition for @name previously added with
* st_adjustment_add_transition() or %NULL if not found.
*
* Returns: (transfer none) (nullable): a #ClutterTransition
*/ */
ClutterTransition * ClutterTransition *
st_adjustment_get_transition (StAdjustment *adjustment, st_adjustment_get_transition (StAdjustment *adjustment,
@ -745,6 +918,15 @@ st_adjustment_get_transition (StAdjustment *adjustment,
return clos->transition; return clos->transition;
} }
/**
* st_adjustment_add_transition:
* @adjustment: a #StAdjustment
* @name: a unique name for the transition
* @transtion: a #ClutterTransition
*
* Add a #ClutterTransition for the adjustment. If the transiton stops, it will
* be automatically removed if #ClutterTransition:remove-on-complete is %TRUE.
*/
void void
st_adjustment_add_transition (StAdjustment *adjustment, st_adjustment_add_transition (StAdjustment *adjustment,
const char *name, const char *name,
@ -785,6 +967,14 @@ st_adjustment_add_transition (StAdjustment *adjustment,
clutter_timeline_start (CLUTTER_TIMELINE (transition)); clutter_timeline_start (CLUTTER_TIMELINE (transition));
} }
/**
* st_adjusmtent_remove_transition:
* @adjusment: a #StAdjustment
* @name: the name of the transition to remove
*
* Remove a #ClutterTransition previously added by st_adjustment_add_transtion()
* with @name.
*/
void void
st_adjustment_remove_transition (StAdjustment *adjustment, st_adjustment_remove_transition (StAdjustment *adjustment,
const char *name) const char *name)

@ -327,7 +327,7 @@ st_bin_init (StBin *bin)
* *
* Creates a new #StBin, a simple container for one child. * Creates a new #StBin, a simple container for one child.
* *
* Return value: the newly created #StBin actor * Returns: the newly created #StBin actor
*/ */
StWidget * StWidget *
st_bin_new (void) st_bin_new (void)
@ -378,9 +378,9 @@ st_bin_set_child (StBin *bin,
* st_bin_get_child: * st_bin_get_child:
* @bin: a #StBin * @bin: a #StBin
* *
* Retrieves a pointer to the child of @bin. * Gets the #ClutterActor child for @bin.
* *
* Return value: (transfer none): a #ClutterActor, or %NULL * Returns: (transfer none) (nullable): a #ClutterActor, or %NULL
*/ */
ClutterActor * ClutterActor *
st_bin_get_child (StBin *bin) st_bin_get_child (StBin *bin)

@ -66,6 +66,19 @@ st_border_image_init (StBorderImage *image)
{ {
} }
/**
* st_border_image_new:
* @file: a #GFile
* @border_top: the top border
* @border_right: the right border
* @border_bottom: the bottom border
* @border_left: the left border
* @scale_factor: the scale factor
*
* Creates a new #StBorderImage.
*
* Returns: a new #StBorderImage.
*/
StBorderImage * StBorderImage *
st_border_image_new (GFile *file, st_border_image_new (GFile *file,
int border_top, int border_top,
@ -90,9 +103,11 @@ st_border_image_new (GFile *file,
/** /**
* st_border_image_get_file: * st_border_image_get_file:
* @image: a #StBorder_Image * @image: a #StBorderImage
* *
* Returns: (transfer none): the #GFile for the #StBorder_Image * Get the #GFile for @image.
*
* Returns: (transfer none): a #GFile
*/ */
GFile * GFile *
st_border_image_get_file (StBorderImage *image) st_border_image_get_file (StBorderImage *image)
@ -102,6 +117,17 @@ st_border_image_get_file (StBorderImage *image)
return image->file; return image->file;
} }
/**
* st_border_image_get_border:
* @image: a #StBorderImage
* @border_top: (out) (optional): the top border
* @border_right: (out) (optional): the right border
* @border_bottom: (out) (optional): the bottom border
* @border_left: (out) (optional): the left border
*
* Get the border widths for @image, taking into account the scale factor
* provided at construction.
*/
void void
st_border_image_get_borders (StBorderImage *image, st_border_image_get_borders (StBorderImage *image,
int *border_top, int *border_top,
@ -123,12 +149,12 @@ st_border_image_get_borders (StBorderImage *image,
/** /**
* st_border_image_equal: * st_border_image_equal:
* @image: a #StBorder_Image * @image: a #StBorderImage
* @other: a different #StBorder_Image * @other: a different #StBorderImage
* *
* Check if two border_image objects are identical. * Check if two #StBorderImage objects are identical.
* *
* Return value: %TRUE if the two border image objects are identical * Returns: %TRUE if the two border image objects are identical
*/ */
gboolean gboolean
st_border_image_equal (StBorderImage *image, st_border_image_equal (StBorderImage *image,

@ -181,8 +181,8 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
/** /**
* StBoxLayout:vertical: * StBoxLayout:vertical:
* *
* A convenience property for getting the #ClutterBoxLayout:vertical * A convenience property for the #ClutterBoxLayout:vertical property of the
* property of the layout for #StBoxLayout. * internal layout for #StBoxLayout.
*/ */
pspec = g_param_spec_boolean ("vertical", pspec = g_param_spec_boolean ("vertical",
"Vertical", "Vertical",
@ -195,8 +195,8 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
/** /**
* StBoxLayout:pack-start: * StBoxLayout:pack-start:
* *
* A convenience property for getting the #ClutterBoxLayout:pack-start * A convenience property for the #ClutterBoxLayout:pack-start property of the
* property of the layout for #StBoxLayout. * internal layout for #StBoxLayout.
*/ */
pspec = g_param_spec_boolean ("pack-start", pspec = g_param_spec_boolean ("pack-start",
"Pack Start", "Pack Start",

@ -484,6 +484,11 @@ st_button_class_init (StButtonClass *klass)
widget_class->style_changed = st_button_style_changed; widget_class->style_changed = st_button_style_changed;
widget_class->get_accessible_type = st_button_accessible_get_type; widget_class->get_accessible_type = st_button_accessible_get_type;
/**
* StButton:label:
*
* The label of the #StButton.
*/
props[PROP_LABEL] = props[PROP_LABEL] =
g_param_spec_string ("label", g_param_spec_string ("label",
"Label", "Label",
@ -491,6 +496,11 @@ st_button_class_init (StButtonClass *klass)
NULL, NULL,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StButton:button-mask:
*
* Which buttons will trigger the #StButton::clicked signal.
*/
props[PROP_BUTTON_MASK] = props[PROP_BUTTON_MASK] =
g_param_spec_flags ("button-mask", g_param_spec_flags ("button-mask",
"Button mask", "Button mask",
@ -498,6 +508,11 @@ st_button_class_init (StButtonClass *klass)
ST_TYPE_BUTTON_MASK, ST_BUTTON_ONE, ST_TYPE_BUTTON_MASK, ST_BUTTON_ONE,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StButton:toggle-mode:
*
* Whether the #StButton is operating in toggle mode (on/off).
*/
props[PROP_TOGGLE_MODE] = props[PROP_TOGGLE_MODE] =
g_param_spec_boolean ("toggle-mode", g_param_spec_boolean ("toggle-mode",
"Toggle Mode", "Toggle Mode",
@ -505,6 +520,15 @@ st_button_class_init (StButtonClass *klass)
FALSE, FALSE,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StButton:checked:
*
* If #StButton:toggle-mode is %TRUE, indicates if the #StButton is toggled
* "on" or "off".
*
* When the value is %TRUE, the #StButton will have the `checked` CSS
* pseudo-class set.
*/
props[PROP_CHECKED] = props[PROP_CHECKED] =
g_param_spec_boolean ("checked", g_param_spec_boolean ("checked",
"Checked", "Checked",
@ -512,6 +536,12 @@ st_button_class_init (StButtonClass *klass)
FALSE, FALSE,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StButton:pressed:
*
* In contrast to #StButton:checked, this property indicates whether the
* #StButton is being actively pressed, rather than just in the "on" state.
*/
props[PROP_PRESSED] = props[PROP_PRESSED] =
g_param_spec_boolean ("pressed", g_param_spec_boolean ("pressed",
"Pressed", "Pressed",
@ -583,9 +613,10 @@ st_button_new_with_label (const gchar *text)
* st_button_get_label: * st_button_get_label:
* @button: a #StButton * @button: a #StButton
* *
* Get the text displayed on the button * Get the text displayed on the button. If the label is empty, an empty string
* will be returned instead of %NULL.
* *
* Returns: the text for the button. This must not be freed by the application * Returns: (transfer none): the text for the button
*/ */
const gchar * const gchar *
st_button_get_label (StButton *button) st_button_get_label (StButton *button)
@ -598,9 +629,9 @@ st_button_get_label (StButton *button)
/** /**
* st_button_set_label: * st_button_set_label:
* @button: a #Stbutton * @button: a #Stbutton
* @text: text to set the label to * @text: (nullable): text to set the label to
* *
* Sets the text displayed on the button * Sets the text displayed on the button.
*/ */
void void
st_button_set_label (StButton *button, st_button_set_label (StButton *button,
@ -726,7 +757,7 @@ st_button_set_toggle_mode (StButton *button,
* st_button_get_checked: * st_button_get_checked:
* @button: a #StButton * @button: a #StButton
* *
* Get the state of the button that is in toggle mode. * Get the #StButton:checked property of a #StButton that is in toggle mode.
* *
* Returns: %TRUE if the button is checked, or %FALSE if not * Returns: %TRUE if the button is checked, or %FALSE if not
*/ */
@ -743,8 +774,8 @@ st_button_get_checked (StButton *button)
* @button: a #Stbutton * @button: a #Stbutton
* @checked: %TRUE or %FALSE * @checked: %TRUE or %FALSE
* *
* Sets the pressed state of the button. This is only really useful if the * Set the #StButton:checked property of the button. This is only really useful
* button has #toggle-mode mode set to %TRUE. * if the button has #StButton:toggle-mode property set to %TRUE.
*/ */
void void
st_button_set_checked (StButton *button, st_button_set_checked (StButton *button,
@ -773,9 +804,9 @@ st_button_set_checked (StButton *button,
* @button: an #StButton * @button: an #StButton
* *
* If this widget is holding a pointer grab, this function will * If this widget is holding a pointer grab, this function will
* will ungrab it, and reset the pressed state. The effect is * will ungrab it, and reset the #StButton:pressed state. The effect is
* similar to if the user had released the mouse button, but without * similar to if the user had released the mouse button, but without
* emitting the clicked signal. * emitting the #StButton::clicked signal.
* *
* This function is useful if for example you want to do something * This function is useful if for example you want to do something
* after the user is holding the mouse button for a given period of * after the user is holding the mouse button for a given period of

@ -63,7 +63,7 @@ void st_button_fake_release (StButton *button);
* @ST_BUTTON_TWO: button 2 (middle) * @ST_BUTTON_TWO: button 2 (middle)
* @ST_BUTTON_THREE: button 3 (right) * @ST_BUTTON_THREE: button 3 (right)
* *
* A mask representing which mouse buttons an StButton responds to. * A mask representing which mouse buttons an #StButton responds to.
*/ */
typedef enum { typedef enum {
ST_BUTTON_ONE = (1 << 0), ST_BUTTON_ONE = (1 << 0),

@ -195,7 +195,6 @@ st_clipboard_get_mimetypes (StClipboard *clipboard,
* *
* Request the data from the clipboard in text form. @callback is executed * Request the data from the clipboard in text form. @callback is executed
* when the data is retreived. * when the data is retreived.
*
*/ */
void void
st_clipboard_get_text (StClipboard *clipboard, st_clipboard_get_text (StClipboard *clipboard,
@ -244,7 +243,6 @@ st_clipboard_get_text (StClipboard *clipboard,
* *
* Request the data from the clipboard in #GBytes form. @callback is executed * Request the data from the clipboard in #GBytes form. @callback is executed
* when the data is retrieved. * when the data is retrieved.
*
*/ */
void void
st_clipboard_get_content (StClipboard *clipboard, st_clipboard_get_content (StClipboard *clipboard,
@ -287,7 +285,9 @@ st_clipboard_get_content (StClipboard *clipboard,
* @mimetype: content mimetype * @mimetype: content mimetype
* @bytes: content data * @bytes: content data
* *
* Sets the clipboard content. * Sets the clipboard content to @bytes.
*
* @mimetype is a semi-colon separated list of mime-type strings.
**/ **/
void void
st_clipboard_set_content (StClipboard *clipboard, st_clipboard_set_content (StClipboard *clipboard,
@ -334,6 +334,13 @@ st_clipboard_set_text (StClipboard *clipboard,
g_bytes_unref (bytes); g_bytes_unref (bytes);
} }
/**
* st_clipboard_set_selection: (skip)
*
* Sets the #MetaSelection of the default #StClipboard.
*
* This function is called during the initialization of GNOME Shell.
*/
void void
st_clipboard_set_selection (MetaSelection *selection) st_clipboard_set_selection (MetaSelection *selection)
{ {

@ -150,8 +150,8 @@ st_drawing_area_init (StDrawingArea *area)
* st_drawing_area_queue_repaint: * st_drawing_area_queue_repaint:
* @area: the #StDrawingArea * @area: the #StDrawingArea
* *
* Will cause the actor to emit a ::repaint signal before it is next * Will cause the actor to emit a #StDrawingArea::repaint signal before it is
* drawn to the scene. Useful if some parameters for the area being * next drawn to the scene. Useful if some parameters for the area being
* drawn other than the size or style have changed. Note that * drawn other than the size or style have changed. Note that
* clutter_actor_queue_redraw() will simply result in the same * clutter_actor_queue_redraw() will simply result in the same
* contents being drawn to the scene again. * contents being drawn to the scene again.
@ -169,9 +169,26 @@ st_drawing_area_queue_repaint (StDrawingArea *area)
* @area: the #StDrawingArea * @area: the #StDrawingArea
* *
* Gets the Cairo context to paint to. This function must only be called * Gets the Cairo context to paint to. This function must only be called
* from a signal hander for the ::repaint signal. * from a signal hander or virtual function for the #StDrawingArea::repaint
* signal.
* *
* Return Value: (transfer none): the Cairo context for the paint operation * JavaScript code must call the special dispose function before returning from
* the signal handler or virtual function to avoid leaking memory:
*
* |[<!-- language="JavaScript" -->
* function onRepaint(area) {
* let cr = area.get_context();
*
* // Draw to the context
*
* cr.$dispose();
* }
*
* let area = new St.DrawingArea();
* area.connect('repaint', onRepaint);
* ]|
*
* Returns: (transfer none): the Cairo context for the paint operation
*/ */
cairo_t * cairo_t *
st_drawing_area_get_context (StDrawingArea *area) st_drawing_area_get_context (StDrawingArea *area)
@ -189,12 +206,12 @@ st_drawing_area_get_context (StDrawingArea *area)
/** /**
* st_drawing_area_get_surface_size: * st_drawing_area_get_surface_size:
* @area: the #StDrawingArea * @area: the #StDrawingArea
* @width: (out): location to store the width of the painted area * @width: (out) (optional): location to store the width of the painted area
* @height: (out): location to store the height of the painted area * @height: (out) (optional): location to store the height of the painted area
* *
* Gets the size of the cairo surface being painted to, which is equal * Gets the size of the cairo surface being painted to, which is equal
* to the size of the content area of the widget. This function must * to the size of the content area of the widget. This function must
* only be called from a signal hander for the ::repaint signal. * only be called from a signal hander for the #StDrawingArea::repaint signal.
*/ */
void void
st_drawing_area_get_surface_size (StDrawingArea *area, st_drawing_area_get_surface_size (StDrawingArea *area,

@ -29,14 +29,9 @@
* applications to set further properties. * applications to set further properties.
* *
* #StEntry supports the following pseudo style states: * #StEntry supports the following pseudo style states:
* <itemizedlist> *
* <listitem> * - `focus`: the widget has focus
* <para>focus: the widget has focus</para> * - `indeterminate`: the widget is showing the hint text or actor
* </listitem>
* <listitem>
* <para>indeterminate: the widget is showing the hint text or actor</para>
* </listitem>
* </itemizedlist>
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
@ -897,6 +892,11 @@ st_entry_class_init (StEntryClass *klass)
widget_class->navigate_focus = st_entry_navigate_focus; widget_class->navigate_focus = st_entry_navigate_focus;
widget_class->get_accessible_type = st_entry_accessible_get_type; widget_class->get_accessible_type = st_entry_accessible_get_type;
/**
* StEntry:clutter-text:
*
* The internal #ClutterText actor supporting the #StEntry.
*/
props[PROP_CLUTTER_TEXT] = props[PROP_CLUTTER_TEXT] =
g_param_spec_object ("clutter-text", g_param_spec_object ("clutter-text",
"Clutter Text", "Clutter Text",
@ -904,6 +904,11 @@ st_entry_class_init (StEntryClass *klass)
CLUTTER_TYPE_TEXT, CLUTTER_TYPE_TEXT,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StEntry:primary-icon:
*
* The #ClutterActor acting as the primary icon at the start of the #StEntry.
*/
props[PROP_PRIMARY_ICON] = props[PROP_PRIMARY_ICON] =
g_param_spec_object ("primary-icon", g_param_spec_object ("primary-icon",
"Primary Icon", "Primary Icon",
@ -911,6 +916,11 @@ st_entry_class_init (StEntryClass *klass)
CLUTTER_TYPE_ACTOR, CLUTTER_TYPE_ACTOR,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:secondary-icon:
*
* The #ClutterActor acting as the secondary icon at the end of the #StEntry.
*/
props[PROP_SECONDARY_ICON] = props[PROP_SECONDARY_ICON] =
g_param_spec_object ("secondary-icon", g_param_spec_object ("secondary-icon",
"Secondary Icon", "Secondary Icon",
@ -918,6 +928,12 @@ st_entry_class_init (StEntryClass *klass)
CLUTTER_TYPE_ACTOR, CLUTTER_TYPE_ACTOR,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:hint-text:
*
* The text to display when the entry is empty and unfocused. Setting this
* will replace the actor of #StEntry::hint-actor.
*/
props[PROP_HINT_TEXT] = props[PROP_HINT_TEXT] =
g_param_spec_string ("hint-text", g_param_spec_string ("hint-text",
"Hint Text", "Hint Text",
@ -926,6 +942,12 @@ st_entry_class_init (StEntryClass *klass)
NULL, NULL,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:hint-actor:
*
* A #ClutterActor to display when the entry is empty and unfocused. Setting
* this will replace the actor displaying #StEntry:hint-text.
*/
props[PROP_HINT_ACTOR] = props[PROP_HINT_ACTOR] =
g_param_spec_object ("hint-actor", g_param_spec_object ("hint-actor",
"Hint Actor", "Hint Actor",
@ -934,6 +956,11 @@ st_entry_class_init (StEntryClass *klass)
CLUTTER_TYPE_ACTOR, CLUTTER_TYPE_ACTOR,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:text:
*
* The current text value of the #StEntry.
*/
props[PROP_TEXT] = props[PROP_TEXT] =
g_param_spec_string ("text", g_param_spec_string ("text",
"Text", "Text",
@ -941,6 +968,12 @@ st_entry_class_init (StEntryClass *klass)
NULL, NULL,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:input-purpose:
*
* The #ClutterInputContentPurpose that helps on-screen keyboards and similar
* input methods to decide which keys should be presented to the user.
*/
props[PROP_INPUT_PURPOSE] = props[PROP_INPUT_PURPOSE] =
g_param_spec_enum ("input-purpose", g_param_spec_enum ("input-purpose",
"Purpose", "Purpose",
@ -949,6 +982,13 @@ st_entry_class_init (StEntryClass *klass)
CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL, CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StEntry:input-hints:
*
* The #ClutterInputContentHintFlags providing additional hints (beyond
* #StEntry:input-purpose) that allow input methods to fine-tune their
* behaviour.
*/
props[PROP_INPUT_HINTS] = props[PROP_INPUT_HINTS] =
g_param_spec_flags ("input-hints", g_param_spec_flags ("input-hints",
"hints", "hints",
@ -964,8 +1004,7 @@ st_entry_class_init (StEntryClass *klass)
* StEntry::primary-icon-clicked: * StEntry::primary-icon-clicked:
* @self: the #StEntry * @self: the #StEntry
* *
* * Emitted when the primary icon is clicked.
* Emitted when the primary icon is clicked
*/ */
entry_signals[PRIMARY_ICON_CLICKED] = entry_signals[PRIMARY_ICON_CLICKED] =
g_signal_new ("primary-icon-clicked", g_signal_new ("primary-icon-clicked",
@ -974,11 +1013,12 @@ st_entry_class_init (StEntryClass *klass)
G_STRUCT_OFFSET (StEntryClass, primary_icon_clicked), G_STRUCT_OFFSET (StEntryClass, primary_icon_clicked),
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
/** /**
* StEntry::secondary-icon-clicked: * StEntry::secondary-icon-clicked:
* @self: the #StEntry * @self: the #StEntry
* *
* Emitted when the secondary icon is clicked * Emitted when the secondary icon is clicked.
*/ */
entry_signals[SECONDARY_ICON_CLICKED] = entry_signals[SECONDARY_ICON_CLICKED] =
g_signal_new ("secondary-icon-clicked", g_signal_new ("secondary-icon-clicked",
@ -1040,9 +1080,9 @@ st_entry_init (StEntry *entry)
/** /**
* st_entry_new: * st_entry_new:
* @text: text to set the entry to * @text: (nullable): text to set the entry to
* *
* Create a new #StEntry with the specified entry * Create a new #StEntry with the specified text.
* *
* Returns: a new #StEntry * Returns: a new #StEntry
*/ */
@ -1063,9 +1103,10 @@ st_entry_new (const gchar *text)
* st_entry_get_text: * st_entry_get_text:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Get the text displayed on the entry * Get the text displayed on the entry. If @entry is empty, an empty string will
* be returned instead of %NULL.
* *
* Returns: the text for the entry. This must not be freed by the application * Returns: (transfer none): the text for the entry
*/ */
const gchar * const gchar *
st_entry_get_text (StEntry *entry) st_entry_get_text (StEntry *entry)
@ -1084,7 +1125,8 @@ st_entry_get_text (StEntry *entry)
* @entry: a #StEntry * @entry: a #StEntry
* @text: (nullable): text to set the entry to * @text: (nullable): text to set the entry to
* *
* Sets the text displayed on the entry * Sets the text displayed on the entry. If @text is %NULL, the #ClutterText
* will instead be set to an empty string.
*/ */
void void
st_entry_set_text (StEntry *entry, st_entry_set_text (StEntry *entry,
@ -1106,10 +1148,9 @@ st_entry_set_text (StEntry *entry,
* st_entry_get_clutter_text: * st_entry_get_clutter_text:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Retrieve the internal #ClutterText so that extra parameters can be set * Retrieve the internal #ClutterText so that extra parameters can be set.
* *
* Returns: (transfer none): the #ClutterText used by #StEntry. The entry is * Returns: (transfer none): the #ClutterText used by @entry
* owned by the #StEntry and should not be unref'ed by the application.
*/ */
ClutterActor* ClutterActor*
st_entry_get_clutter_text (StEntry *entry) st_entry_get_clutter_text (StEntry *entry)
@ -1125,8 +1166,8 @@ st_entry_get_clutter_text (StEntry *entry)
* @text: (nullable): text to set as the entry hint * @text: (nullable): text to set as the entry hint
* *
* Sets the text to display when the entry is empty and unfocused. When the * Sets the text to display when the entry is empty and unfocused. When the
* entry is displaying the hint, it has a pseudo class of "indeterminate". * entry is displaying the hint, it has a pseudo class of `indeterminate`.
* A value of NULL unsets the hint. * A value of %NULL unsets the hint.
*/ */
void void
st_entry_set_hint_text (StEntry *entry, st_entry_set_hint_text (StEntry *entry,
@ -1146,10 +1187,13 @@ st_entry_set_hint_text (StEntry *entry,
* st_entry_get_hint_text: * st_entry_get_hint_text:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Gets the text that is displayed when the entry is empty and unfocused * Gets the text that is displayed when the entry is empty and unfocused or
* %NULL if the #StEntry:hint-actor was set to an actor that is not a #StLabel.
* *
* Returns: the current value of the hint property. This string is owned by the * Unlike st_entry_get_text() this function may return %NULL if
* #StEntry and should not be freed or modified. * #StEntry:hint-actor is not a #StLabel.
*
* Returns: (nullable) (transfer none): the current value of the hint property
*/ */
const gchar * const gchar *
st_entry_get_hint_text (StEntry *entry) st_entry_get_hint_text (StEntry *entry)
@ -1200,6 +1244,8 @@ st_entry_set_input_purpose (StEntry *entry,
* @entry: a #StEntry * @entry: a #StEntry
* *
* Gets the value of the #StEntry:input-purpose property. * Gets the value of the #StEntry:input-purpose property.
*
* Returns: the input purpose of the entry
*/ */
ClutterInputContentPurpose ClutterInputContentPurpose
st_entry_get_input_purpose (StEntry *entry) st_entry_get_input_purpose (StEntry *entry)
@ -1245,6 +1291,8 @@ st_entry_set_input_hints (StEntry *entry,
* @entry: a #StEntry * @entry: a #StEntry
* *
* Gets the value of the #StEntry:input-hints property. * Gets the value of the #StEntry:input-hints property.
*
* Returns: the input hints for the entry
*/ */
ClutterInputContentHintFlags ClutterInputContentHintFlags
st_entry_get_input_hints (StEntry *entry) st_entry_get_input_hints (StEntry *entry)
@ -1305,7 +1353,7 @@ _st_entry_set_icon (StEntry *entry,
* @entry: a #StEntry * @entry: a #StEntry
* @icon: (nullable): a #ClutterActor * @icon: (nullable): a #ClutterActor
* *
* Set the primary icon of the entry to @icon * Set the primary icon of the entry to @icon.
*/ */
void void
st_entry_set_primary_icon (StEntry *entry, st_entry_set_primary_icon (StEntry *entry,
@ -1324,7 +1372,9 @@ st_entry_set_primary_icon (StEntry *entry,
* st_entry_get_primary_icon: * st_entry_get_primary_icon:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Returns: (transfer none): a #ClutterActor * Get the value of the #StEntry:primary-icon property.
*
* Returns: (nullable) (transfer none): a #ClutterActor
*/ */
ClutterActor * ClutterActor *
st_entry_get_primary_icon (StEntry *entry) st_entry_get_primary_icon (StEntry *entry)
@ -1342,7 +1392,7 @@ st_entry_get_primary_icon (StEntry *entry)
* @entry: a #StEntry * @entry: a #StEntry
* @icon: (nullable): an #ClutterActor * @icon: (nullable): an #ClutterActor
* *
* Set the secondary icon of the entry to @icon * Set the secondary icon of the entry to @icon.
*/ */
void void
st_entry_set_secondary_icon (StEntry *entry, st_entry_set_secondary_icon (StEntry *entry,
@ -1361,7 +1411,9 @@ st_entry_set_secondary_icon (StEntry *entry,
* st_entry_get_secondary_icon: * st_entry_get_secondary_icon:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Returns: (transfer none): a #ClutterActor * Get the value of the #StEntry:secondary-icon property.
*
* Returns: (nullable) (transfer none): a #ClutterActor
*/ */
ClutterActor * ClutterActor *
st_entry_get_secondary_icon (StEntry *entry) st_entry_get_secondary_icon (StEntry *entry)
@ -1377,9 +1429,9 @@ st_entry_get_secondary_icon (StEntry *entry)
/** /**
* st_entry_set_hint_actor: * st_entry_set_hint_actor:
* @entry: a #StEntry * @entry: a #StEntry
* @hint_actor: (allow-none): a #ClutterActor * @hint_actor: (nullable): a #ClutterActor
* *
* Set the hint actor of the entry to @hint_actor * Set the hint actor of the entry to @hint_actor.
*/ */
void void
st_entry_set_hint_actor (StEntry *entry, st_entry_set_hint_actor (StEntry *entry,
@ -1412,7 +1464,9 @@ st_entry_set_hint_actor (StEntry *entry,
* st_entry_get_hint_actor: * st_entry_get_hint_actor:
* @entry: a #StEntry * @entry: a #StEntry
* *
* Returns: (transfer none): a #ClutterActor * Get the value of the #StEntry:hint-actor property.
*
* Returns: (nullable) (transfer none): a #ClutterActor
*/ */
ClutterActor * ClutterActor *
st_entry_get_hint_actor (StEntry *entry) st_entry_get_hint_actor (StEntry *entry)

@ -133,7 +133,7 @@ st_focus_manager_stage_event (ClutterActor *stage,
* *
* Gets the #StFocusManager for @stage, creating it if necessary. * Gets the #StFocusManager for @stage, creating it if necessary.
* *
* Return value: (transfer none): the focus manager for @stage * Returns: (transfer none): the focus manager for @stage
*/ */
StFocusManager * StFocusManager *
st_focus_manager_get_for_stage (ClutterStage *stage) st_focus_manager_get_for_stage (ClutterStage *stage)
@ -215,7 +215,7 @@ st_focus_manager_remove_group (StFocusManager *manager,
* Checks if @widget is inside a focus group, and if so, returns * Checks if @widget is inside a focus group, and if so, returns
* the root of that group. * the root of that group.
* *
* Return value: (transfer none): the focus group root, or %NULL if * Returns: (transfer none): the focus group root, or %NULL if
* @widget is not in a focus group * @widget is not in a focus group
*/ */
StWidget * StWidget *

@ -72,7 +72,7 @@ st_generic_accessible_class_init (StGenericAccessibleClass *klass)
* @self. Right now we only care about doubles, so the value is * @self. Right now we only care about doubles, so the value is
* directly returned by the signal. * directly returned by the signal.
* *
* Return value: value of the current element. * Returns: value of the current element.
*/ */
st_generic_accessible_signals[GET_CURRENT_VALUE] = st_generic_accessible_signals[GET_CURRENT_VALUE] =
g_signal_new ("get-current-value", g_signal_new ("get-current-value",
@ -90,7 +90,7 @@ st_generic_accessible_class_init (StGenericAccessibleClass *klass)
* @self. Right now we only care about doubles, so the value is * @self. Right now we only care about doubles, so the value is
* directly returned by the signal. * directly returned by the signal.
* *
* Return value: maximum value of the accessible. * Returns: maximum value of the accessible.
*/ */
st_generic_accessible_signals[GET_MAXIMUM_VALUE] = st_generic_accessible_signals[GET_MAXIMUM_VALUE] =
g_signal_new ("get-maximum-value", g_signal_new ("get-maximum-value",
@ -108,7 +108,7 @@ st_generic_accessible_class_init (StGenericAccessibleClass *klass)
* @self. Right now we only care about doubles, so the value is * @self. Right now we only care about doubles, so the value is
* directly returned by the signal. * directly returned by the signal.
* *
* Return value: minimum value of the accessible. * Returns: minimum value of the accessible.
*/ */
st_generic_accessible_signals[GET_MINIMUM_VALUE] = st_generic_accessible_signals[GET_MINIMUM_VALUE] =
g_signal_new ("get-minimum-value", g_signal_new ("get-minimum-value",
@ -126,7 +126,7 @@ st_generic_accessible_class_init (StGenericAccessibleClass *klass)
* @self. Right now we only care about doubles, so the value is * @self. Right now we only care about doubles, so the value is
* directly returned by the signal. * directly returned by the signal.
* *
* Return value: value of the current element. * Returns: value of the current element.
*/ */
st_generic_accessible_signals[GET_MINIMUM_INCREMENT] = st_generic_accessible_signals[GET_MINIMUM_INCREMENT] =
g_signal_new ("get-minimum-increment", g_signal_new ("get-minimum-increment",
@ -221,6 +221,16 @@ atk_value_iface_init (AtkValueIface *iface)
iface->set_current_value = st_generic_accessible_set_current_value; iface->set_current_value = st_generic_accessible_set_current_value;
} }
/**
* st_generic_accessible_new_for_actor:
* @actor: a #Clutter Actor
*
* Create a new #StGenericAccessible for @actor.
*
* This is useful only for custom widgets that need a proxy for #AtkObject.
*
* Returns: (transfer full): a new #AtkObject
*/
AtkObject* AtkObject*
st_generic_accessible_new_for_actor (ClutterActor *actor) st_generic_accessible_new_for_actor (ClutterActor *actor)
{ {

@ -26,7 +26,7 @@
* *
* Creates a new #StIconColors. All colors are initialized to transparent black. * Creates a new #StIconColors. All colors are initialized to transparent black.
* *
* Return value: a newly created #StIconColors. Free with st_icon_colors_unref() * Returns: a newly created #StIconColors. Free with st_icon_colors_unref()
*/ */
StIconColors * StIconColors *
st_icon_colors_new (void) st_icon_colors_new (void)
@ -107,6 +107,8 @@ st_icon_colors_copy (StIconColors *colors)
* @colors: a #StIconColors * @colors: a #StIconColors
* @other: another #StIconColors * @other: another #StIconColors
* *
* Check if two #StIconColors objects are identical.
*
* Returns: %TRUE if the #StIconColors are equal * Returns: %TRUE if the #StIconColors are equal
*/ */
gboolean gboolean

@ -255,6 +255,11 @@ st_icon_class_init (StIconClass *klass)
widget_class->style_changed = st_icon_style_changed; widget_class->style_changed = st_icon_style_changed;
actor_class->resource_scale_changed = st_icon_resource_scale_changed; actor_class->resource_scale_changed = st_icon_resource_scale_changed;
/**
* StIcon:gicon:
*
* The #GIcon being displayed by this #StIcon.
*/
props[PROP_GICON] = props[PROP_GICON] =
g_param_spec_object ("gicon", g_param_spec_object ("gicon",
"GIcon", "GIcon",
@ -262,6 +267,11 @@ st_icon_class_init (StIconClass *klass)
G_TYPE_ICON, G_TYPE_ICON,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StIcon:fallback-gicon:
*
* The fallback #GIcon to display if #StIcon:gicon fails to load.
*/
props[PROP_FALLBACK_GICON] = props[PROP_FALLBACK_GICON] =
g_param_spec_object ("fallback-gicon", g_param_spec_object ("fallback-gicon",
"Fallback GIcon", "Fallback GIcon",
@ -269,6 +279,11 @@ st_icon_class_init (StIconClass *klass)
G_TYPE_ICON, G_TYPE_ICON,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StIcon:icon-name:
*
* The name of the icon if the icon being displayed is a #GThemedIcon.
*/
props[PROP_ICON_NAME] = props[PROP_ICON_NAME] =
g_param_spec_string ("icon-name", g_param_spec_string ("icon-name",
"Icon name", "Icon name",
@ -276,6 +291,12 @@ st_icon_class_init (StIconClass *klass)
NULL, NULL,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StIcon:icon-size:
*
* The size of the icon, if greater than `0`. Other the icon sise is derived
* from the current style.
*/
props[PROP_ICON_SIZE] = props[PROP_ICON_SIZE] =
g_param_spec_int ("icon-size", g_param_spec_int ("icon-size",
"Icon size", "Icon size",
@ -283,6 +304,12 @@ st_icon_class_init (StIconClass *klass)
-1, G_MAXINT, -1, -1, G_MAXINT, -1,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StIcon:fallback-icon-name:
*
* The fallback icon name of the #StIcon. See st_icon_set_fallback_icon_name()
* for details.
*/
props[PROP_FALLBACK_ICON_NAME] = props[PROP_FALLBACK_ICON_NAME] =
g_param_spec_string ("fallback-icon-name", g_param_spec_string ("fallback-icon-name",
"Fallback icon name", "Fallback icon name",
@ -524,7 +551,7 @@ st_icon_update_icon_size (StIcon *icon)
/** /**
* st_icon_new: * st_icon_new:
* *
* Create a newly allocated #StIcon * Create a newly allocated #StIcon.
* *
* Returns: A newly allocated #StIcon * Returns: A newly allocated #StIcon
*/ */
@ -538,10 +565,10 @@ st_icon_new (void)
* st_icon_get_icon_name: * st_icon_get_icon_name:
* @icon: an #StIcon * @icon: an #StIcon
* *
* This is a convenience method to get the icon name of the #GThemedIcon that * This is a convenience method to get the icon name of the current icon, if it
* is currently set. * is currenyly a #GThemedIcon, or %NULL otherwise.
* *
* Returns: (transfer none): The name of the icon or %NULL if no icon is set * Returns: (transfer none) (nullable): The name of the icon or %NULL
*/ */
const gchar * const gchar *
st_icon_get_icon_name (StIcon *icon) st_icon_get_icon_name (StIcon *icon)
@ -592,7 +619,7 @@ st_icon_set_icon_name (StIcon *icon,
* *
* Gets the current #GIcon in use. * Gets the current #GIcon in use.
* *
* Returns: (transfer none): The current #GIcon, if set, otherwise %NULL * Returns: (nullable) (transfer none): The current #GIcon, if set, otherwise %NULL
*/ */
GIcon * GIcon *
st_icon_get_gicon (StIcon *icon) st_icon_get_gicon (StIcon *icon)

@ -329,7 +329,10 @@ g_loadable_icon_interface_init (GLoadableIconIface *iface)
* *
* Creates a new #StImageContent, a simple content for sized images. * Creates a new #StImageContent, a simple content for sized images.
* *
* Return value: (transfer full): the newly created #StImageContent content * See #ClutterImage for setting the actual image to display or #StIcon for
* displaying icons.
*
* Returns: (transfer full): the newly created #StImageContent content
* Use g_object_unref() when done. * Use g_object_unref() when done.
*/ */
ClutterContent * ClutterContent *

@ -274,6 +274,11 @@ st_label_class_init (StLabelClass *klass)
widget_class->style_changed = st_label_style_changed; widget_class->style_changed = st_label_style_changed;
widget_class->get_accessible_type = st_label_accessible_get_type; widget_class->get_accessible_type = st_label_accessible_get_type;
/**
* StLabel:clutter-text:
*
* The internal #ClutterText actor supporting the label
*/
props[PROP_CLUTTER_TEXT] = props[PROP_CLUTTER_TEXT] =
g_param_spec_object ("clutter-text", g_param_spec_object ("clutter-text",
"Clutter Text", "Clutter Text",
@ -281,6 +286,11 @@ st_label_class_init (StLabelClass *klass)
CLUTTER_TYPE_TEXT, CLUTTER_TYPE_TEXT,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StLabel:text:
*
* The current text being display in the #StLabel.
*/
props[PROP_TEXT] = props[PROP_TEXT] =
g_param_spec_string ("text", g_param_spec_string ("text",
"Text", "Text",
@ -314,9 +324,9 @@ st_label_init (StLabel *label)
/** /**
* st_label_new: * st_label_new:
* @text: text to set the label to * @text: (nullable): text to set the label to
* *
* Create a new #StLabel with the specified label * Create a new #StLabel with the label specified by @text.
* *
* Returns: a new #StLabel * Returns: a new #StLabel
*/ */
@ -335,9 +345,10 @@ st_label_new (const gchar *text)
* st_label_get_text: * st_label_get_text:
* @label: a #StLabel * @label: a #StLabel
* *
* Get the text displayed on the label * Get the text displayed on the label.
* *
* Returns: the text for the label. This must not be freed by the application * Returns: (transfer none): the text for the label. This must not be freed by
* the application
*/ */
const gchar * const gchar *
st_label_get_text (StLabel *label) st_label_get_text (StLabel *label)
@ -350,9 +361,9 @@ st_label_get_text (StLabel *label)
/** /**
* st_label_set_text: * st_label_set_text:
* @label: a #StLabel * @label: a #StLabel
* @text: text to set the label to * @text: (nullable): text to set the label to
* *
* Sets the text displayed on the label * Sets the text displayed by the label.
*/ */
void void
st_label_set_text (StLabel *label, st_label_set_text (StLabel *label,
@ -382,10 +393,11 @@ st_label_set_text (StLabel *label,
* st_label_get_clutter_text: * st_label_get_clutter_text:
* @label: a #StLabel * @label: a #StLabel
* *
* Retrieve the internal #ClutterText so that extra parameters can be set * Retrieve the internal #ClutterText used by @label so that extra parameters
* can be set.
* *
* Returns: (transfer none): ethe #ClutterText used by #StLabel. The label * Returns: (transfer none): the #ClutterText used by #StLabel. The actor
* is owned by the #StLabel and should not be unref'ed by the application. * is owned by the #StLabel and should not be destroyed by the application.
*/ */
ClutterActor* ClutterActor*
st_label_get_clutter_text (StLabel *label) st_label_get_clutter_text (StLabel *label)

@ -133,12 +133,23 @@ st_password_entry_class_init (StPasswordEntryClass *klass)
st_entry_class->secondary_icon_clicked = st_password_entry_secondary_icon_clicked; st_entry_class->secondary_icon_clicked = st_password_entry_secondary_icon_clicked;
/**
* StPasswordEntry:password-visible:
*
* Whether the text in the entry is masked for privacy.
*/
props[PROP_PASSWORD_VISIBLE] = g_param_spec_boolean ("password-visible", props[PROP_PASSWORD_VISIBLE] = g_param_spec_boolean ("password-visible",
"Password visible", "Password visible",
"Whether to text in the entry is masked or not", "Whether the text in the entry is masked or not",
FALSE, FALSE,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StPasswordEntry:show-peek-icon:
*
* Whether to display an icon button to toggle the masking enabled by the
* #StPasswordEntry:password-visible property.
*/
props[PROP_SHOW_PEEK_ICON] = g_param_spec_boolean ("show-peek-icon", props[PROP_SHOW_PEEK_ICON] = g_param_spec_boolean ("show-peek-icon",
"Show peek icon", "Show peek icon",
"Whether to show the password peek icon", "Whether to show the password peek icon",
@ -202,12 +213,15 @@ st_password_entry_new (void)
/** /**
* st_password_entry_set_show_peek_icon: * st_password_entry_set_show_peek_icon:
* @entry: a #StPasswordEntry * @entry: a #StPasswordEntry
* @value: #TRUE to show the peek-icon in the entry, #FALSE otherwise * @value: %TRUE to show the peek-icon in the entry
* *
* Sets whether to show or hide the peek-icon in the password entry. * Sets whether to show or hide the peek-icon in the password entry. If %TRUE,
* a icon button for temporarily unmasking the password will be shown at the
* end of the entry.
*/ */
void void
st_password_entry_set_show_peek_icon (StPasswordEntry *entry, gboolean value) st_password_entry_set_show_peek_icon (StPasswordEntry *entry,
gboolean value)
{ {
StPasswordEntryPrivate *priv; StPasswordEntryPrivate *priv;
@ -231,6 +245,8 @@ st_password_entry_set_show_peek_icon (StPasswordEntry *entry, gboolean value)
* @entry: a #StPasswordEntry * @entry: a #StPasswordEntry
* *
* Gets whether peek-icon is shown or hidden in the password entry. * Gets whether peek-icon is shown or hidden in the password entry.
*
* Returns: %TRUE if visible
*/ */
gboolean gboolean
st_password_entry_get_show_peek_icon (StPasswordEntry *entry) st_password_entry_get_show_peek_icon (StPasswordEntry *entry)
@ -246,12 +262,13 @@ st_password_entry_get_show_peek_icon (StPasswordEntry *entry)
/** /**
* st_password_entry_set_password_visible: * st_password_entry_set_password_visible:
* @entry: a #StPasswordEntry * @entry: a #StPasswordEntry
* @value: #TRUE to show the password in the entry, #FALSE otherwise * @value: %TRUE to show the password in the entry, #FALSE otherwise
* *
* Sets whether to show or hide text in the password entry. * Sets whether to show or hide text in the password entry.
*/ */
void void
st_password_entry_set_password_visible (StPasswordEntry *entry, gboolean value) st_password_entry_set_password_visible (StPasswordEntry *entry,
gboolean value)
{ {
StPasswordEntryPrivate *priv; StPasswordEntryPrivate *priv;
ClutterActor *clutter_text; ClutterActor *clutter_text;
@ -284,6 +301,8 @@ st_password_entry_set_password_visible (StPasswordEntry *entry, gboolean value)
* @entry: a #StPasswordEntry * @entry: a #StPasswordEntry
* *
* Gets whether the text is masked in the password entry. * Gets whether the text is masked in the password entry.
*
* Returns: %TRUE if visible
*/ */
gboolean gboolean
st_password_entry_get_password_visible (StPasswordEntry *entry) st_password_entry_get_password_visible (StPasswordEntry *entry)

@ -508,6 +508,8 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0); cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0);
clutter_actor_get_position (actor, &x, &y); clutter_actor_get_position (actor, &x, &y);
x *= resource_scale;
y *= resource_scale;
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color); cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_framebuffer_translate (fb, -x, -y, 0); cogl_framebuffer_translate (fb, -x, -y, 0);

@ -538,11 +538,21 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
widget_class->style_changed = st_scroll_bar_style_changed; widget_class->style_changed = st_scroll_bar_style_changed;
/**
* StScrollBar:adjustment:
*
* The #StAdjustment controlling the #StScrollBar.
*/
props[PROP_ADJUSTMENT] = props[PROP_ADJUSTMENT] =
g_param_spec_object ("adjustment", "Adjustment", "The adjustment", g_param_spec_object ("adjustment", "Adjustment", "The adjustment",
ST_TYPE_ADJUSTMENT, ST_TYPE_ADJUSTMENT,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollBar:vertical:
*
* Whether the #StScrollBar is vertical. If %FALSE it is horizontal.
*/
props[PROP_VERTICAL] = props[PROP_VERTICAL] =
g_param_spec_boolean ("vertical", g_param_spec_boolean ("vertical",
"Vertical Orientation", "Vertical Orientation",
@ -552,6 +562,13 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
g_object_class_install_properties (object_class, N_PROPS, props); g_object_class_install_properties (object_class, N_PROPS, props);
/**
* StScrollBar::scroll-start:
* @bar: a #StScrollBar
*
* Emitted when the #StScrollBar begins scrolling.
*/
signals[SCROLL_START] = signals[SCROLL_START] =
g_signal_new ("scroll-start", g_signal_new ("scroll-start",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -560,6 +577,12 @@ st_scroll_bar_class_init (StScrollBarClass *klass)
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
/**
* StScrollBar::scroll-stop:
* @bar: a #StScrollBar
*
* Emitted when the #StScrollBar finishes scrolling.
*/
signals[SCROLL_STOP] = signals[SCROLL_STOP] =
g_signal_new ("scroll-stop", g_signal_new ("scroll-stop",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -982,10 +1005,9 @@ st_scroll_bar_set_adjustment (StScrollBar *bar,
* st_scroll_bar_get_adjustment: * st_scroll_bar_get_adjustment:
* @bar: a #StScrollbar * @bar: a #StScrollbar
* *
* Gets the adjustment object that stores the current position * Gets the #StAdjustment that controls the current position of @bar.
* of the scrollbar.
* *
* Return value: (transfer none): the adjustment * Returns: (transfer none): an #StAdjustment
*/ */
StAdjustment * StAdjustment *
st_scroll_bar_get_adjustment (StScrollBar *bar) st_scroll_bar_get_adjustment (StScrollBar *bar)

@ -389,6 +389,12 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
offscreen_class->create_texture = st_scroll_view_fade_create_texture; offscreen_class->create_texture = st_scroll_view_fade_create_texture;
offscreen_class->paint_target = st_scroll_view_fade_paint_target; offscreen_class->paint_target = st_scroll_view_fade_paint_target;
/**
* StScrollViewFade:vfade-offset:
*
* The height of area which is faded at the top and bottom edges of the
* #StScrollViewFade.
*/
props[PROP_VFADE_OFFSET] = props[PROP_VFADE_OFFSET] =
g_param_spec_float ("vfade-offset", g_param_spec_float ("vfade-offset",
"Vertical Fade Offset", "Vertical Fade Offset",
@ -396,6 +402,12 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET, 0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollViewFade:hfade-offset:
*
* The height of area which is faded at the left and right edges of the
* #StScrollViewFade.
*/
props[PROP_HFADE_OFFSET] = props[PROP_HFADE_OFFSET] =
g_param_spec_float ("hfade-offset", g_param_spec_float ("hfade-offset",
"Horizontal Fade Offset", "Horizontal Fade Offset",
@ -403,6 +415,11 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET, 0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollViewFade:fade-edges:
*
* Whether the faded area should extend to the edges of the #StScrollViewFade.
*/
props[PROP_FADE_EDGES] = props[PROP_FADE_EDGES] =
g_param_spec_boolean ("fade-edges", g_param_spec_boolean ("fade-edges",
"Fade Edges", "Fade Edges",
@ -420,6 +437,13 @@ st_scroll_view_fade_init (StScrollViewFade *self)
self->hfade_offset = DEFAULT_FADE_OFFSET; self->hfade_offset = DEFAULT_FADE_OFFSET;
} }
/**
* st_scroll_view_fade_new:
*
* Create a new #StScrollViewFade.
*
* Returns: (transfer full): a new #StScrollViewFade
*/
ClutterEffect * ClutterEffect *
st_scroll_view_fade_new (void) st_scroll_view_fade_new (void)
{ {

@ -830,6 +830,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
widget_class->style_changed = st_scroll_view_style_changed; widget_class->style_changed = st_scroll_view_style_changed;
/**
* StScrollView:hscroll:
*
* The horizontal #StScrollBar for the #StScrollView.
*/
props[PROP_HSCROLL] = props[PROP_HSCROLL] =
g_param_spec_object ("hscroll", g_param_spec_object ("hscroll",
"StScrollBar", "StScrollBar",
@ -837,6 +842,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
ST_TYPE_SCROLL_BAR, ST_TYPE_SCROLL_BAR,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StScrollView:vscroll:
*
* The vertical #StScrollBar for the #StScrollView.
*/
props[PROP_VSCROLL] = props[PROP_VSCROLL] =
g_param_spec_object ("vscroll", g_param_spec_object ("vscroll",
"StScrollBar", "StScrollBar",
@ -844,6 +854,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
ST_TYPE_SCROLL_BAR, ST_TYPE_SCROLL_BAR,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StScrollView:vscrollbar-policy:
*
* The #StPolicyType for when to show the vertical #StScrollBar.
*/
props[PROP_VSCROLLBAR_POLICY] = props[PROP_VSCROLLBAR_POLICY] =
g_param_spec_enum ("vscrollbar-policy", g_param_spec_enum ("vscrollbar-policy",
"Vertical Scrollbar Policy", "Vertical Scrollbar Policy",
@ -852,6 +867,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
ST_POLICY_AUTOMATIC, ST_POLICY_AUTOMATIC,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollView:hscrollbar-policy:
*
* The #StPolicyType for when to show the horizontal #StScrollBar.
*/
props[PROP_HSCROLLBAR_POLICY] = props[PROP_HSCROLLBAR_POLICY] =
g_param_spec_enum ("hscrollbar-policy", g_param_spec_enum ("hscrollbar-policy",
"Horizontal Scrollbar Policy", "Horizontal Scrollbar Policy",
@ -860,6 +880,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
ST_POLICY_AUTOMATIC, ST_POLICY_AUTOMATIC,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollView:hscrollbar-visible:
*
* Whether the horizontal #StScrollBar is visible.
*/
props[PROP_HSCROLLBAR_VISIBLE] = props[PROP_HSCROLLBAR_VISIBLE] =
g_param_spec_boolean ("hscrollbar-visible", g_param_spec_boolean ("hscrollbar-visible",
"Horizontal Scrollbar Visibility", "Horizontal Scrollbar Visibility",
@ -867,6 +892,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
TRUE, TRUE,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StScrollView:vscrollbar-visible:
*
* Whether the vertical #StScrollBar is visible.
*/
props[PROP_VSCROLLBAR_VISIBLE] = props[PROP_VSCROLLBAR_VISIBLE] =
g_param_spec_boolean ("vscrollbar-visible", g_param_spec_boolean ("vscrollbar-visible",
"Vertical Scrollbar Visibility", "Vertical Scrollbar Visibility",
@ -874,6 +904,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
TRUE, TRUE,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StScrollView:enable-mouse-scrolling:
*
* Whether to enable automatic mouse wheel scrolling.
*/
props[PROP_MOUSE_SCROLL] = props[PROP_MOUSE_SCROLL] =
g_param_spec_boolean ("enable-mouse-scrolling", g_param_spec_boolean ("enable-mouse-scrolling",
"Enable Mouse Scrolling", "Enable Mouse Scrolling",
@ -881,6 +916,11 @@ st_scroll_view_class_init (StScrollViewClass *klass)
TRUE, TRUE,
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/**
* StScrollView:overlay-scrollbars:
*
* Whether scrollbars are painted on top of the content.
*/
props[PROP_OVERLAY_SCROLLBARS] = props[PROP_OVERLAY_SCROLLBARS] =
g_param_spec_boolean ("overlay-scrollbars", g_param_spec_boolean ("overlay-scrollbars",
"Use Overlay Scrollbars", "Use Overlay Scrollbars",
@ -995,6 +1035,13 @@ clutter_container_iface_init (ClutterContainerIface *iface)
iface->remove = st_scroll_view_remove; iface->remove = st_scroll_view_remove;
} }
/**
* st_scroll_view_new:
*
* Create a new #StScrollView.
*
* Returns: (transfer full): a new #StScrollView
*/
StWidget * StWidget *
st_scroll_view_new (void) st_scroll_view_new (void)
{ {
@ -1005,9 +1052,9 @@ st_scroll_view_new (void)
* st_scroll_view_get_hscroll_bar: * st_scroll_view_get_hscroll_bar:
* @scroll: a #StScrollView * @scroll: a #StScrollView
* *
* Gets the horizontal scrollbar of the scrollbiew * Gets the horizontal #StScrollBar of the #StScrollView.
* *
* Return value: (transfer none): the horizontal #StScrollBar * Returns: (transfer none): the horizontal scrollbar
*/ */
ClutterActor * ClutterActor *
st_scroll_view_get_hscroll_bar (StScrollView *scroll) st_scroll_view_get_hscroll_bar (StScrollView *scroll)
@ -1021,9 +1068,9 @@ st_scroll_view_get_hscroll_bar (StScrollView *scroll)
* st_scroll_view_get_vscroll_bar: * st_scroll_view_get_vscroll_bar:
* @scroll: a #StScrollView * @scroll: a #StScrollView
* *
* Gets the vertical scrollbar of the scrollbiew * Gets the vertical scrollbar of the #StScrollView.
* *
* Return value: (transfer none): the vertical #StScrollBar * Returns: (transfer none): the vertical #StScrollBar
*/ */
ClutterActor * ClutterActor *
st_scroll_view_get_vscroll_bar (StScrollView *scroll) st_scroll_view_get_vscroll_bar (StScrollView *scroll)
@ -1033,6 +1080,14 @@ st_scroll_view_get_vscroll_bar (StScrollView *scroll)
return scroll->priv->vscroll; return scroll->priv->vscroll;
} }
/**
* st_scroll_view_get_column_size:
* @scroll: a #StScrollView
*
* Get the step increment of the horizontal plane.
*
* Returns: the horizontal step increment
*/
gfloat gfloat
st_scroll_view_get_column_size (StScrollView *scroll) st_scroll_view_get_column_size (StScrollView *scroll)
{ {
@ -1047,6 +1102,13 @@ st_scroll_view_get_column_size (StScrollView *scroll)
return column_size; return column_size;
} }
/**
* st_scroll_view_set_column_size:
* @scroll: a #StScrollView
* @column_size: horizontal step increment
*
* Set the step increment of the horizontal plane to @column_size.
*/
void void
st_scroll_view_set_column_size (StScrollView *scroll, st_scroll_view_set_column_size (StScrollView *scroll,
gfloat column_size) gfloat column_size)
@ -1069,6 +1131,14 @@ st_scroll_view_set_column_size (StScrollView *scroll,
} }
} }
/**
* st_scroll_view_get_row_size:
* @scroll: a #StScrollView
*
* Get the step increment of the vertical plane.
*
* Returns: the vertical step increment
*/
gfloat gfloat
st_scroll_view_get_row_size (StScrollView *scroll) st_scroll_view_get_row_size (StScrollView *scroll)
{ {
@ -1083,6 +1153,13 @@ st_scroll_view_get_row_size (StScrollView *scroll)
return row_size; return row_size;
} }
/**
* st_scroll_view_set_row_size:
* @scroll: a #StScrollView
* @row_size: vertical step increment
*
* Set the step increment of the vertical plane to @row_size.
*/
void void
st_scroll_view_set_row_size (StScrollView *scroll, st_scroll_view_set_row_size (StScrollView *scroll,
gfloat row_size) gfloat row_size)
@ -1105,6 +1182,13 @@ st_scroll_view_set_row_size (StScrollView *scroll,
} }
} }
/**
* st_scroll_view_set_mouse_scrolling:
* @scroll: a #StScrollView
* @enabled: %TRUE or %FALSE
*
* Sets automatic mouse wheel scrolling to enabled or disabled.
*/
void void
st_scroll_view_set_mouse_scrolling (StScrollView *scroll, st_scroll_view_set_mouse_scrolling (StScrollView *scroll,
gboolean enabled) gboolean enabled)
@ -1125,6 +1209,14 @@ st_scroll_view_set_mouse_scrolling (StScrollView *scroll,
} }
} }
/**
* st_scroll_view_get_mouse_scrolling:
* @scroll: a #StScrollView
*
* Get whether automatic mouse wheel scrolling is enabled or disabled.
*
* Returns: %TRUE if enabled, %FALSE otherwise
*/
gboolean gboolean
st_scroll_view_get_mouse_scrolling (StScrollView *scroll) st_scroll_view_get_mouse_scrolling (StScrollView *scroll)
{ {
@ -1167,7 +1259,9 @@ st_scroll_view_set_overlay_scrollbars (StScrollView *scroll,
* st_scroll_view_get_overlay_scrollbars: * st_scroll_view_get_overlay_scrollbars:
* @scroll: A #StScrollView * @scroll: A #StScrollView
* *
* Gets the value set by st_scroll_view_set_overlay_scrollbars(). * Gets whether scrollbars are painted on top of the content.
*
* Returns: %TRUE if enabled, %FALSE otherwise
*/ */
gboolean gboolean
st_scroll_view_get_overlay_scrollbars (StScrollView *scroll) st_scroll_view_get_overlay_scrollbars (StScrollView *scroll)

@ -86,6 +86,40 @@ st_scrollable_default_init (StScrollableInterface *g_iface)
if (!initialized) if (!initialized)
{ {
/**
* StScrollable:hadjustment:
*
* The horizontal #StAdjustment used by the #StScrollable.
*
* Implementations should override this property to provide read-write
* access to the #StAdjustment.
*
* JavaScript code may override this as demonstrated below:
*
* |[<!-- language="JavaScript" -->
* var MyScrollable = GObject.registerClass({
* Properties: {
* 'hadjustment': GObject.ParamSpec.override(
* 'hadjustment',
* St.Scrollable
* )
* }
* }, class MyScrollable extends St.Scrollable {
*
* get hadjustment() {
* return this._hadjustment || null;
* }
*
* set hadjustment(adjustment) {
* if (this.hadjustment === adjustment)
* return;
*
* this._hadjustment = adjustment;
* this.notify('hadjustment');
* }
* });
* ]|
*/
g_object_interface_install_property (g_iface, g_object_interface_install_property (g_iface,
g_param_spec_object ("hadjustment", g_param_spec_object ("hadjustment",
"StAdjustment", "StAdjustment",
@ -93,6 +127,17 @@ st_scrollable_default_init (StScrollableInterface *g_iface)
ST_TYPE_ADJUSTMENT, ST_TYPE_ADJUSTMENT,
ST_PARAM_READWRITE)); ST_PARAM_READWRITE));
/**
* StScrollable:vadjustment:
*
* The vertical #StAdjustment used by the #StScrollable.
*
* Implementations should override this property to provide read-write
* access to the #StAdjustment.
*
* See #StScrollable:hadjustment for an example of how to override this
* property in JavaScript code.
*/
g_object_interface_install_property (g_iface, g_object_interface_install_property (g_iface,
g_param_spec_object ("vadjustment", g_param_spec_object ("vadjustment",
"StAdjustment", "StAdjustment",
@ -104,6 +149,18 @@ st_scrollable_default_init (StScrollableInterface *g_iface)
} }
} }
/**
* st_scrollable_set_adjustments:
* @scrollable: a #StScrollable
* @hadjustment: the horizontal #StAdjustment
* @vadjustment: the vertical #StAdjustment
*
* This method should be implemented by classes implementing the #StScrollable
* interface.
*
* JavaScript code should do this by overriding the `vfunc_set_adjustments()`
* method.
*/
void void
st_scrollable_set_adjustments (StScrollable *scrollable, st_scrollable_set_adjustments (StScrollable *scrollable,
StAdjustment *hadjustment, StAdjustment *hadjustment,
@ -116,11 +173,17 @@ st_scrollable_set_adjustments (StScrollable *scrollable,
/** /**
* st_scroll_bar_get_adjustments: * st_scroll_bar_get_adjustments:
* @hadjustment: (transfer none) (out) (optional) (nullable): location to store the horizontal adjustment, or %NULL * @hadjustment: (transfer none) (out) (optional): location to store the horizontal adjustment, or %NULL
* @vadjustment: (transfer none) (out) (optional) (nullable): location to store the vertical adjustment, or %NULL * @vadjustment: (transfer none) (out) (optional): location to store the vertical adjustment, or %NULL
* *
* Gets the adjustment objects that store the offsets of the scrollable widget * Gets the adjustment objects that store the offsets of the scrollable widget
* into its possible scrolling area. * into its possible scrolling area.
*
* This method should be implemented by classes implementing the #StScrollable
* interface.
*
* JavaScript code should do this by overriding the `vfunc_get_adjustments()`
* method.
*/ */
void void
st_scrollable_get_adjustments (StScrollable *scrollable, st_scrollable_get_adjustments (StScrollable *scrollable,

@ -199,41 +199,89 @@ st_settings_class_init (StSettingsClass *klass)
object_class->set_property = st_settings_set_property; object_class->set_property = st_settings_set_property;
object_class->get_property = st_settings_get_property; object_class->get_property = st_settings_get_property;
/**
* StSettings:enable-animations:
*
* Whether animations are enabled.
*/
props[PROP_ENABLE_ANIMATIONS] = g_param_spec_boolean ("enable-animations", props[PROP_ENABLE_ANIMATIONS] = g_param_spec_boolean ("enable-animations",
"Enable animations", "Enable animations",
"Enable animations", "Enable animations",
TRUE, TRUE,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:primary-paste:
*
* Whether pasting from the `PRIMARY` selection is supported (eg. middle-click
* paste).
*/
props[PROP_PRIMARY_PASTE] = g_param_spec_boolean ("primary-paste", props[PROP_PRIMARY_PASTE] = g_param_spec_boolean ("primary-paste",
"Primary paste", "Primary paste",
"Primary paste", "Primary paste",
TRUE, TRUE,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:drag-threshold:
*
* The threshold before a drag operation begins.
*/
props[PROP_DRAG_THRESHOLD] = g_param_spec_int ("drag-threshold", props[PROP_DRAG_THRESHOLD] = g_param_spec_int ("drag-threshold",
"Drag threshold", "Drag threshold",
"Drag threshold", "Drag threshold",
0, G_MAXINT, 8, 0, G_MAXINT, 8,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:font-name:
*
* The current font name.
*/
props[PROP_FONT_NAME] = g_param_spec_string ("font-name", props[PROP_FONT_NAME] = g_param_spec_string ("font-name",
"font name", "font name",
"font name", "font name",
"", "",
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:gtk-theme:
*
* The current GTK theme.
*/
props[PROP_GTK_THEME] = g_param_spec_string ("gtk-theme", props[PROP_GTK_THEME] = g_param_spec_string ("gtk-theme",
"GTK+ Theme", "GTK Theme",
"GTK+ Theme", "GTK Theme",
"", "",
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:gtk-icon-theme:
*
* The current GTK icon theme
*/
props[PROP_GTK_ICON_THEME] = g_param_spec_string ("gtk-icon-theme", props[PROP_GTK_ICON_THEME] = g_param_spec_string ("gtk-icon-theme",
"GTK+ Icon Theme", "GTK Icon Theme",
"GTK+ Icon Theme", "GTK Icon Theme",
"", "",
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:magnifier-active:
*
* Whether the accessibility magnifier is active.
*/
props[PROP_MAGNIFIER_ACTIVE] = g_param_spec_boolean("magnifier-active", props[PROP_MAGNIFIER_ACTIVE] = g_param_spec_boolean("magnifier-active",
"Magnifier is active", "Magnifier is active",
"Weather the a11y magnifier is active", "Whether the a11y magnifier is active",
FALSE, FALSE,
ST_PARAM_READABLE); ST_PARAM_READABLE);
/**
* StSettings:slow-down-factor:
*
* The slow-down factor applied to all animation durations.
*/
props[PROP_SLOW_DOWN_FACTOR] = g_param_spec_double("slow-down-factor", props[PROP_SLOW_DOWN_FACTOR] = g_param_spec_double("slow-down-factor",
"Slow down factor", "Slow down factor",
"Factor applied to all animation durations", "Factor applied to all animation durations",
@ -338,9 +386,9 @@ st_settings_init (StSettings *settings)
/** /**
* st_settings_get: * st_settings_get:
* *
* Gets the #StSettings * Gets the global #StSettings object.
* *
* Returns: (transfer none): a settings object * Returns: (transfer none): the global #StSettings object
**/ **/
StSettings * StSettings *
st_settings_get (void) st_settings_get (void)

@ -117,7 +117,7 @@ st_shadow_unref (StShadow *shadow)
* compare non-identically if they differ only by floating point rounding * compare non-identically if they differ only by floating point rounding
* errors. * errors.
* *
* Return value: %TRUE if the two shadows are identical * Returns: %TRUE if the two shadows are identical
*/ */
gboolean gboolean
st_shadow_equal (StShadow *shadow, st_shadow_equal (StShadow *shadow,
@ -216,6 +216,13 @@ st_shadow_helper_new (StShadow *shadow)
return helper; return helper;
} }
/**
* st_shadow_helper_update:
* @helper: a #StShadowHelper
* @source: a #ClutterActor
*
* Update @helper from @source.
*/
void void
st_shadow_helper_update (StShadowHelper *helper, st_shadow_helper_update (StShadowHelper *helper,
ClutterActor *source) ClutterActor *source)

@ -100,6 +100,12 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
gobject_class->dispose = st_texture_cache_dispose; gobject_class->dispose = st_texture_cache_dispose;
gobject_class->finalize = st_texture_cache_finalize; gobject_class->finalize = st_texture_cache_finalize;
/**
* StTextureCache::icon-theme-changed:
* @self: a #StTextureCache
*
* Emitted when the icon theme is changed.
*/
signals[ICON_THEME_CHANGED] = signals[ICON_THEME_CHANGED] =
g_signal_new ("icon-theme-changed", g_signal_new ("icon-theme-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -108,6 +114,13 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
/**
* StTextureCache::texture-file-changed:
* @self: a #StTextureCache
* @file: a #GFile
*
* Emitted when the source file of a texture is changed.
*/
signals[TEXTURE_FILE_CHANGED] = signals[TEXTURE_FILE_CHANGED] =
g_signal_new ("texture-file-changed", g_signal_new ("texture-file-changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -799,7 +812,7 @@ st_texture_cache_free_bind (gpointer data)
/** /**
* st_texture_cache_bind_cairo_surface_property: * st_texture_cache_bind_cairo_surface_property:
* @cache: * @cache: A #StTextureCache
* @object: A #GObject with a property @property_name of type #cairo_surface_t * @object: A #GObject with a property @property_name of type #cairo_surface_t
* @property_name: Name of a property * @property_name: Name of a property
* *
@ -810,7 +823,7 @@ st_texture_cache_free_bind (gpointer data)
* If the source object is destroyed, the texture will continue to show the last * If the source object is destroyed, the texture will continue to show the last
* value of the property. * value of the property.
* *
* Return value: (transfer none): A new #GIcon * Returns: (transfer none): A new #GIcon
*/ */
GIcon * GIcon *
st_texture_cache_bind_cairo_surface_property (StTextureCache *cache, st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
@ -879,7 +892,7 @@ st_texture_cache_load (StTextureCache *cache,
/** /**
* ensure_request: * ensure_request:
* @cache: * @cache: A #StTextureCache
* @key: A cache key * @key: A cache key
* @policy: Cache policy * @policy: Cache policy
* @request: (out): If no request is outstanding, one will be created and returned here * @request: (out): If no request is outstanding, one will be created and returned here
@ -932,8 +945,8 @@ ensure_request (StTextureCache *cache,
/** /**
* st_texture_cache_load_gicon: * st_texture_cache_load_gicon:
* @cache: The texture cache instance * @cache: A #StTextureCache
* @theme_node: (nullable): The #StThemeNode to use for colors, or NULL * @theme_node: (nullable): The #StThemeNode to use for colors, or %NULL
* if the icon must not be recolored * if the icon must not be recolored
* @icon: the #GIcon to load * @icon: the #GIcon to load
* @size: Size of themed * @size: Size of themed
@ -944,7 +957,7 @@ ensure_request (StTextureCache *cache,
* icon isn't loaded already, the texture will be filled * icon isn't loaded already, the texture will be filled
* asynchronously. * asynchronously.
* *
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found * Returns: (transfer none) (nullable): A new #ClutterActor for the icon, or %NULL if not found
*/ */
ClutterActor * ClutterActor *
st_texture_cache_load_gicon (StTextureCache *cache, st_texture_cache_load_gicon (StTextureCache *cache,
@ -1371,7 +1384,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
/** /**
* st_texture_cache_load_file_async: * st_texture_cache_load_file_async:
* @cache: The texture cache instance * @cache: A #StTextureCache
* @file: a #GFile of the image file from which to create a pixbuf * @file: a #GFile of the image file from which to create a pixbuf
* @available_width: available width for the image, can be -1 if not limited * @available_width: available width for the image, can be -1 if not limited
* @available_height: available height for the image, can be -1 if not limited * @available_height: available height for the image, can be -1 if not limited
@ -1382,7 +1395,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
* size of zero. At some later point, either the image will be loaded successfully * size of zero. At some later point, either the image will be loaded successfully
* and at that point size will be negotiated, or upon an error, no image will be set. * and at that point size will be negotiated, or upon an error, no image will be set.
* *
* Return value: (transfer none): A new #ClutterActor with no image loaded initially. * Returns: (transfer none): A new #ClutterActor with no image loaded initially.
*/ */
ClutterActor * ClutterActor *
st_texture_cache_load_file_async (StTextureCache *cache, st_texture_cache_load_file_async (StTextureCache *cache,
@ -1612,7 +1625,7 @@ static StTextureCache *instance = NULL;
/** /**
* st_texture_cache_get_default: * st_texture_cache_get_default:
* *
* Return value: (transfer none): The global texture cache * Returns: (transfer none): The global texture cache
*/ */
StTextureCache* StTextureCache*
st_texture_cache_get_default (void) st_texture_cache_get_default (void)
@ -1622,6 +1635,13 @@ st_texture_cache_get_default (void)
return instance; return instance;
} }
/**
* st_texture_cache_rescan_icon_theme:
*
* Rescan the current icon theme, if necessary.
*
* Returns: %TRUE if the icon theme has changed and needed to be reloaded.
*/
gboolean gboolean
st_texture_cache_rescan_icon_theme (StTextureCache *cache) st_texture_cache_rescan_icon_theme (StTextureCache *cache)
{ {

@ -118,16 +118,23 @@ st_theme_context_class_init (StThemeContextClass *klass)
/** /**
* StThemeContext:scale-factor: * StThemeContext:scale-factor:
* *
* The scaling factor used or high dpi scaling. * The scaling factor used for HiDPI scaling.
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_SCALE_FACTOR, PROP_SCALE_FACTOR,
g_param_spec_int ("scale-factor", g_param_spec_int ("scale-factor",
"Scale factor", "Scale factor",
"Integer scale factor used for high dpi scaling", "Integer scale factor used for HiDPI scaling",
0, G_MAXINT, 1, 0, G_MAXINT, 1,
ST_PARAM_READWRITE)); ST_PARAM_READWRITE));
/**
* StThemeContext::changed:
* @self: a #StThemeContext
*
* Emitted when the icon theme, font, resolution, scale factor or the current
* theme's custom stylesheets change.
*/
signals[CHANGED] = signals[CHANGED] =
g_signal_new ("changed", g_signal_new ("changed",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -214,6 +221,8 @@ st_theme_context_get_property (GObject *object,
* This can be useful in testing scenarios, or if using StThemeContext * This can be useful in testing scenarios, or if using StThemeContext
* with something other than #ClutterActor objects, but you generally * with something other than #ClutterActor objects, but you generally
* should use st_theme_context_get_for_stage() instead. * should use st_theme_context_get_for_stage() instead.
*
* Returns: (transfer full): a new #StThemeContext
*/ */
StThemeContext * StThemeContext *
st_theme_context_new (void) st_theme_context_new (void)
@ -296,7 +305,7 @@ on_icon_theme_changed (StTextureCache *cache,
* *
* Gets a singleton theme context associated with the stage. * Gets a singleton theme context associated with the stage.
* *
* Return value: (transfer none): the singleton theme context for the stage * Returns: (transfer none): the singleton theme context for the stage
*/ */
StThemeContext * StThemeContext *
st_theme_context_get_for_stage (ClutterStage *stage) st_theme_context_get_for_stage (ClutterStage *stage)
@ -320,6 +329,7 @@ st_theme_context_get_for_stage (ClutterStage *stage)
/** /**
* st_theme_context_set_theme: * st_theme_context_set_theme:
* @context: a #StThemeContext * @context: a #StThemeContext
* @theme: a #StTheme
* *
* Sets the default set of theme stylesheets for the context. This theme will * Sets the default set of theme stylesheets for the context. This theme will
* be used for the root node and for nodes descending from it, unless some other * be used for the root node and for nodes descending from it, unless some other
@ -358,7 +368,7 @@ st_theme_context_set_theme (StThemeContext *context,
* *
* Gets the default theme for the context. See st_theme_context_set_theme() * Gets the default theme for the context. See st_theme_context_set_theme()
* *
* Return value: (transfer none): the default theme for the context * Returns: (transfer none): the default theme for the context
*/ */
StTheme * StTheme *
st_theme_context_get_theme (StThemeContext *context) st_theme_context_get_theme (StThemeContext *context)
@ -376,7 +386,7 @@ st_theme_context_get_theme (StThemeContext *context)
* Sets the default font for the theme context. This is the font that * Sets the default font for the theme context. This is the font that
* is inherited by the root node of the tree of theme nodes. If the * is inherited by the root node of the tree of theme nodes. If the
* font is not overriden, then this font will be used. If the font is * font is not overriden, then this font will be used. If the font is
* partially modified (for example, with 'font-size: 110%', then that * partially modified (for example, with 'font-size: 110%'), then that
* modification is based on this font. * modification is based on this font.
*/ */
void void
@ -401,7 +411,7 @@ st_theme_context_set_font (StThemeContext *context,
* *
* Gets the default font for the theme context. See st_theme_context_set_font(). * Gets the default font for the theme context. See st_theme_context_set_font().
* *
* Return value: the default font for the theme context. * Returns: the default font for the theme context.
*/ */
const PangoFontDescription * const PangoFontDescription *
st_theme_context_get_font (StThemeContext *context) st_theme_context_get_font (StThemeContext *context)
@ -419,7 +429,7 @@ st_theme_context_get_font (StThemeContext *context)
* context. For the node tree associated with a stage, this node represents * context. For the node tree associated with a stage, this node represents
* styles applied to the stage itself. * styles applied to the stage itself.
* *
* Return value: (transfer none): the root node of the context's style tree * Returns: (transfer none): the root node of the context's style tree
*/ */
StThemeNode * StThemeNode *
st_theme_context_get_root_node (StThemeContext *context) st_theme_context_get_root_node (StThemeContext *context)
@ -439,7 +449,7 @@ st_theme_context_get_root_node (StThemeContext *context)
* Return an existing node matching @node, or if that isn't possible, * Return an existing node matching @node, or if that isn't possible,
* @node itself. * @node itself.
* *
* Return value: (transfer none): a node with the same properties as @node * Returns: (transfer none): a node with the same properties as @node
*/ */
StThemeNode * StThemeNode *
st_theme_context_intern_node (StThemeContext *context, st_theme_context_intern_node (StThemeContext *context,
@ -461,7 +471,7 @@ st_theme_context_intern_node (StThemeContext *context,
* *
* Return the current scale factor of @context. * Return the current scale factor of @context.
* *
* Return value: a scale factor * Returns: an integer scale factor
*/ */
int int
st_theme_context_get_scale_factor (StThemeContext *context) st_theme_context_get_scale_factor (StThemeContext *context)

@ -180,11 +180,11 @@ split_on_whitespace (const gchar *s)
* @pseudo_class: (nullable): a whitespace-separated list of pseudo-classes * @pseudo_class: (nullable): a whitespace-separated list of pseudo-classes
* (like 'hover' or 'visited') to match CSS rules against * (like 'hover' or 'visited') to match CSS rules against
* *
* Creates a new #StThemeNode. Once created, a node is immutable. Of any * Creates a new #StThemeNode. Once created, a node is immutable. If any
* of the attributes of the node (like the @element_class) change the node * of the attributes of the node (like the @element_class) change the node
* and its child nodes must be destroyed and recreated. * and its child nodes must be destroyed and recreated.
* *
* Return value: (transfer full): the theme node * Returns: (transfer full): a new #StThemeNode
*/ */
StThemeNode * StThemeNode *
st_theme_node_new (StThemeContext *context, st_theme_node_new (StThemeContext *context,
@ -229,8 +229,8 @@ st_theme_node_new (StThemeContext *context,
* *
* Gets the parent themed element node. * Gets the parent themed element node.
* *
* Return value: (transfer none): the parent #StThemeNode, or %NULL if this * Returns: (nullable) (transfer none): the parent #StThemeNode, or %NULL if
* is the root node of the tree of theme elements. * this is the root node of the tree of theme elements.
*/ */
StThemeNode * StThemeNode *
st_theme_node_get_parent (StThemeNode *node) st_theme_node_get_parent (StThemeNode *node)
@ -246,7 +246,7 @@ st_theme_node_get_parent (StThemeNode *node)
* *
* Gets the theme stylesheet set that styles this node * Gets the theme stylesheet set that styles this node
* *
* Return value: (transfer none): the theme stylesheet set * Returns: (transfer none): the theme stylesheet set
*/ */
StTheme * StTheme *
st_theme_node_get_theme (StThemeNode *node) st_theme_node_get_theme (StThemeNode *node)
@ -256,6 +256,14 @@ st_theme_node_get_theme (StThemeNode *node)
return node->theme; return node->theme;
} }
/**
* st_theme_node_get_element_type:
* @node: a #StThemeNode
*
* Get the element #GType for @node.
*
* Returns: the element type
*/
GType GType
st_theme_node_get_element_type (StThemeNode *node) st_theme_node_get_element_type (StThemeNode *node)
{ {
@ -264,6 +272,14 @@ st_theme_node_get_element_type (StThemeNode *node)
return node->element_type; return node->element_type;
} }
/**
* st_theme_node_get_element_id:
* @node: a #StThemeNode
*
* Get the unqiue element ID for @node.
*
* Returns: (transfer none): the element's ID
*/
const char * const char *
st_theme_node_get_element_id (StThemeNode *node) st_theme_node_get_element_id (StThemeNode *node)
{ {
@ -274,6 +290,9 @@ st_theme_node_get_element_id (StThemeNode *node)
/** /**
* st_theme_node_get_element_classes: * st_theme_node_get_element_classes:
* @node: a #StThemeNode
*
* Get the list of element classes for @node.
* *
* Returns: (transfer none): the element's classes * Returns: (transfer none): the element's classes
*/ */
@ -287,6 +306,9 @@ st_theme_node_get_element_classes (StThemeNode *node)
/** /**
* st_theme_node_get_pseudo_classes: * st_theme_node_get_pseudo_classes:
* @node: a #StThemeNode
*
* Get the list of pseudo-classes for @node (eg. `:focused`).
* *
* Returns: (transfer none): the element's pseudo-classes * Returns: (transfer none): the element's pseudo-classes
*/ */
@ -307,21 +329,13 @@ st_theme_node_get_pseudo_classes (StThemeNode *node)
* the same CSS rules and have the same style properties. However, two * the same CSS rules and have the same style properties. However, two
* nodes that have ended up with identical style properties do not * nodes that have ended up with identical style properties do not
* necessarily compare equal. * necessarily compare equal.
* In detail, @node_a and @node_b are considered equal iff *
* <itemizedlist> * In detail, @node_a and @node_b are considered equal if and only if:
* <listitem> *
* <para>they share the same #StTheme and #StThemeContext</para> * - they share the same #StTheme and #StThemeContext
* </listitem> * - they have the same parent
* <listitem> * - they have the same element type
* <para>they have the same parent</para> * - their id, class, pseudo-class and inline-style match
* </listitem>
* <listitem>
* <para>they have the same element type</para>
* </listitem>
* <listitem>
* <para>their id, class, pseudo-class and inline-style match</para>
* </listitem>
* </itemizedlist>
* *
* Returns: %TRUE if @node_a equals @node_b * Returns: %TRUE if @node_a equals @node_b
*/ */
@ -383,6 +397,14 @@ st_theme_node_equal (StThemeNode *node_a, StThemeNode *node_b)
return TRUE; return TRUE;
} }
/**
* st_theme_node_hash:
* @node: a #StThemeNode
*
* Converts @node to a hash value.
*
* Returns: a hash value corresponding to @node
*/
guint guint
st_theme_node_hash (StThemeNode *node) st_theme_node_hash (StThemeNode *node)
{ {
@ -637,7 +659,7 @@ get_color_from_term (StThemeNode *node,
* *
* See also st_theme_node_get_color(), which provides a simpler API. * See also st_theme_node_get_color(), which provides a simpler API.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.) * theme node (or in the properties of parent nodes when inheriting.)
*/ */
gboolean gboolean
@ -727,7 +749,7 @@ st_theme_node_get_color (StThemeNode *node,
* *
* See also st_theme_node_get_double(), which provides a simpler API. * See also st_theme_node_get_double(), which provides a simpler API.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.) * theme node (or in the properties of parent nodes when inheriting.)
*/ */
gboolean gboolean
@ -780,7 +802,7 @@ st_theme_node_lookup_double (StThemeNode *node,
* Generically looks up a property containing a single time value, * Generically looks up a property containing a single time value,
* which is converted to milliseconds. * which is converted to milliseconds.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.) * theme node (or in the properties of parent nodes when inheriting.)
*/ */
gboolean gboolean
@ -837,7 +859,7 @@ st_theme_node_lookup_time (StThemeNode *node,
* and lets you handle the case where the theme does not specify the * and lets you handle the case where the theme does not specify the
* indicated value. * indicated value.
* *
* Return value: the value found. If @property_name is not * Returns: the value found. If @property_name is not
* found, a warning will be logged and 0 will be returned. * found, a warning will be logged and 0 will be returned.
*/ */
gdouble gdouble
@ -872,7 +894,7 @@ st_theme_node_get_double (StThemeNode *node,
* *
* See also st_theme_node_get_url(), which provides a simpler API. * See also st_theme_node_get_url(), which provides a simpler API.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.) * theme node (or in the properties of parent nodes when inheriting.)
*/ */
gboolean gboolean
@ -928,7 +950,7 @@ st_theme_node_lookup_url (StThemeNode *node,
* and lets you handle the case where the theme does not specify the * and lets you handle the case where the theme does not specify the
* indicated value. * indicated value.
* *
* Returns: (transfer full): the newly allocated value if found. * Returns: (nullable) (transfer full): the newly allocated value if found.
* If @property_name is not found, a warning will be logged and %NULL * If @property_name is not found, a warning will be logged and %NULL
* will be returned. * will be returned.
*/ */
@ -1169,7 +1191,7 @@ get_length_internal (StThemeNode *node,
* *
* See also st_theme_node_get_length(), which provides a simpler API. * See also st_theme_node_get_length(), which provides a simpler API.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.) * theme node (or in the properties of parent nodes when inheriting.)
*/ */
gboolean gboolean
@ -1204,9 +1226,10 @@ st_theme_node_lookup_length (StThemeNode *node,
* this does not print a warning if the property is not found; it just * this does not print a warning if the property is not found; it just
* returns 0. * returns 0.
* *
* See also st_theme_node_lookup_length(), which provides more options. * See also st_theme_node_lookup_length(), which provides more options. The
* returned value is in physical pixels, as opposed to logical pixels.
* *
* Return value: the length, in pixels, or 0 if the property was not found. * Returns: the length, in pixels, or 0 if the property was not found.
*/ */
gdouble gdouble
st_theme_node_get_length (StThemeNode *node, st_theme_node_get_length (StThemeNode *node,
@ -1807,6 +1830,15 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
node->height = node->min_height; node->height = node->min_height;
} }
/**
* st_theme_node_get_border_width:
* @node: a #StThemeNode
* @side: a #StCorner
*
* Get the border width for @node on @side, in physical pixels.
*
* Returns: the border width in physical pixels
*/
int int
st_theme_node_get_border_width (StThemeNode *node, st_theme_node_get_border_width (StThemeNode *node,
StSide side) StSide side)
@ -1819,6 +1851,15 @@ st_theme_node_get_border_width (StThemeNode *node,
return node->border_width[side]; return node->border_width[side];
} }
/**
* st_theme_node_get_border_radius:
* @node: a #StThemeNode
* @corner: a #StCorner
*
* Get the border radius for @node at @corner, in physical pixels.
*
* Returns: the border radius in physical pixels
*/
int int
st_theme_node_get_border_radius (StThemeNode *node, st_theme_node_get_border_radius (StThemeNode *node,
StCorner corner) StCorner corner)
@ -1831,6 +1872,14 @@ st_theme_node_get_border_radius (StThemeNode *node,
return node->border_radius[corner]; return node->border_radius[corner];
} }
/**
* st_theme_node_get_outline_width:
* @node: a #StThemeNode
*
* Get the width of the outline for @node, in physical pixels.
*
* Returns: the width in physical pixels
*/
int int
st_theme_node_get_outline_width (StThemeNode *node) st_theme_node_get_outline_width (StThemeNode *node)
{ {
@ -1859,6 +1908,14 @@ st_theme_node_get_outline_color (StThemeNode *node,
*color = node->outline_color; *color = node->outline_color;
} }
/**
* st_theme_node_get_width:
* @node: a #StThemeNode
*
* Get the width for @node, in physical pixels.
*
* Returns: the width in physical pixels
*/
int int
st_theme_node_get_width (StThemeNode *node) st_theme_node_get_width (StThemeNode *node)
{ {
@ -1868,6 +1925,14 @@ st_theme_node_get_width (StThemeNode *node)
return node->width; return node->width;
} }
/**
* st_theme_node_get_height:
* @node: a #StThemeNode
*
* Get the height for @node, in physical pixels.
*
* Returns: the height in physical pixels
*/
int int
st_theme_node_get_height (StThemeNode *node) st_theme_node_get_height (StThemeNode *node)
{ {
@ -1877,6 +1942,14 @@ st_theme_node_get_height (StThemeNode *node)
return node->height; return node->height;
} }
/**
* st_theme_node_get_min_width:
* @node: a #StThemeNode
*
* Get the minimum width for @node, in physical pixels.
*
* Returns: the minimum width in physical pixels
*/
int int
st_theme_node_get_min_width (StThemeNode *node) st_theme_node_get_min_width (StThemeNode *node)
{ {
@ -1886,6 +1959,14 @@ st_theme_node_get_min_width (StThemeNode *node)
return node->min_width; return node->min_width;
} }
/**
* st_theme_node_get_min_height:
* @node: a #StThemeNode
*
* Get the minimum height for @node, in physical pixels.
*
* Returns: the minimum height in physical pixels
*/
int int
st_theme_node_get_min_height (StThemeNode *node) st_theme_node_get_min_height (StThemeNode *node)
{ {
@ -1895,6 +1976,14 @@ st_theme_node_get_min_height (StThemeNode *node)
return node->min_height; return node->min_height;
} }
/**
* st_theme_node_get_max_width:
* @node: a #StThemeNode
*
* Get the maximum width for @node, in physical pixels.
*
* Returns: the maximum width in physical pixels
*/
int int
st_theme_node_get_max_width (StThemeNode *node) st_theme_node_get_max_width (StThemeNode *node)
{ {
@ -1904,6 +1993,14 @@ st_theme_node_get_max_width (StThemeNode *node)
return node->max_width; return node->max_width;
} }
/**
* st_theme_node_get_max_height:
* @node: a #StThemeNode
*
* Get the maximum height for @node, in physical pixels.
*
* Returns: the maximum height in physical pixels
*/
int int
st_theme_node_get_max_height (StThemeNode *node) st_theme_node_get_max_height (StThemeNode *node)
{ {
@ -2270,6 +2367,16 @@ st_theme_node_get_border_color (StThemeNode *node,
*color = node->border_color[side]; *color = node->border_color[side];
} }
/**
* st_theme_node_get_padding:
* @node: a #StThemeNode
* @side: a #StSide
*
* Get the padding for @node on @side, in physical pixels. This corresponds to
* the CSS properties such as `padding-top`.
*
* Returns: the padding size in physical pixels
*/
double double
st_theme_node_get_padding (StThemeNode *node, st_theme_node_get_padding (StThemeNode *node,
StSide side) StSide side)
@ -2282,6 +2389,16 @@ st_theme_node_get_padding (StThemeNode *node,
return node->padding[side]; return node->padding[side];
} }
/**
* st_theme_node_get_margin:
* @node: a #StThemeNode
* @side: a #StSide
*
* Get the margin for @node on @side, in physical pixels. This corresponds to
* the CSS properties such as `margin-top`.
*
* Returns: the margin size in physical pixels
*/
double double
st_theme_node_get_margin (StThemeNode *node, st_theme_node_get_margin (StThemeNode *node,
StSide side) StSide side)
@ -2326,6 +2443,15 @@ st_theme_node_get_transition_duration (StThemeNode *node)
return factor * node->transition_duration; return factor * node->transition_duration;
} }
/**
* st_theme_node_get_icon_style:
* @node: a #StThemeNode
*
* Get the icon style for @node (eg. symbolic, regular). This corresponds to the
* special `-st-icon-style` CSS property.
*
* Returns: the icon style for @node
*/
StIconStyle StIconStyle
st_theme_node_get_icon_style (StThemeNode *node) st_theme_node_get_icon_style (StThemeNode *node)
{ {
@ -2368,6 +2494,14 @@ st_theme_node_get_icon_style (StThemeNode *node)
return ST_ICON_STYLE_REQUESTED; return ST_ICON_STYLE_REQUESTED;
} }
/**
* st_theme_node_get_text_decoration
* @node: a #StThemeNode
*
* Get the text decoration for @node (eg. underline, line-through, etc).
*
* Returns: the text decoration for @node
*/
StTextDecoration StTextDecoration
st_theme_node_get_text_decoration (StThemeNode *node) st_theme_node_get_text_decoration (StThemeNode *node)
{ {
@ -2435,6 +2569,14 @@ st_theme_node_get_text_decoration (StThemeNode *node)
return 0; return 0;
} }
/**
* st_theme_node_get_text_align:
* @node: a #StThemeNode
*
* Get the text alignment of @node.
*
* Returns: the alignment of text for @node
*/
StTextAlign StTextAlign
st_theme_node_get_text_align(StThemeNode *node) st_theme_node_get_text_align(StThemeNode *node)
{ {
@ -2486,9 +2628,9 @@ st_theme_node_get_text_align(StThemeNode *node)
* st_theme_node_get_letter_spacing: * st_theme_node_get_letter_spacing:
* @node: a #StThemeNode * @node: a #StThemeNode
* *
* Gets the value for the letter-spacing style property, in pixels. * Gets the value for the letter-spacing style property, in physical pixels.
* *
* Return value: the value of the letter-spacing property, if * Returns: the value of the letter-spacing property, if
* found, or zero if such property has not been found. * found, or zero if such property has not been found.
*/ */
gdouble gdouble
@ -2763,6 +2905,14 @@ font_variant_from_term (CRTerm *term,
return TRUE; return TRUE;
} }
/**
* st_theme_node_get_font:
* @node: a #StThemeNode
*
* Get the current font of @node as a #PangoFontDescription
*
* Returns: (transfer none): the current font
*/
const PangoFontDescription * const PangoFontDescription *
st_theme_node_get_font (StThemeNode *node) st_theme_node_get_font (StThemeNode *node)
{ {
@ -2956,6 +3106,14 @@ st_theme_node_get_font (StThemeNode *node)
return node->font_desc; return node->font_desc;
} }
/**
* st_theme_node_get_font_features:
* @node: a #StThemeNode
*
* Get the CSS font-features for @node.
*
* Returns: (transfer full): font-features as a string
*/
gchar * gchar *
st_theme_node_get_font_features (StThemeNode *node) st_theme_node_get_font_features (StThemeNode *node)
{ {
@ -2995,7 +3153,7 @@ st_theme_node_get_font_features (StThemeNode *node)
* *
* Gets the value for the border-image style property * Gets the value for the border-image style property
* *
* Return value: (transfer none): the border image, or %NULL * Returns: (transfer none): the border image, or %NULL
* if there is no border image. * if there is no border image.
*/ */
StBorderImage * StBorderImage *
@ -3132,10 +3290,9 @@ st_theme_node_get_border_image (StThemeNode *node)
* st_theme_node_get_horizontal_padding: * st_theme_node_get_horizontal_padding:
* @node: a #StThemeNode * @node: a #StThemeNode
* *
* Gets the total horizonal padding (left + right padding) * Gets the total horizonal padding (left + right padding), in physical pixels.
* *
* Return value: the total horizonal padding * Returns: the total horizonal padding in physical pixels
* in pixels
*/ */
double double
st_theme_node_get_horizontal_padding (StThemeNode *node) st_theme_node_get_horizontal_padding (StThemeNode *node)
@ -3151,10 +3308,9 @@ st_theme_node_get_horizontal_padding (StThemeNode *node)
* st_theme_node_get_vertical_padding: * st_theme_node_get_vertical_padding:
* @node: a #StThemeNode * @node: a #StThemeNode
* *
* Gets the total vertical padding (top + bottom padding) * Gets the total vertical padding (top + bottom padding), in physical pixels.
* *
* Return value: the total vertical padding * Returns: the total vertical padding in physical pixels
* in pixels
*/ */
double double
st_theme_node_get_vertical_padding (StThemeNode *node) st_theme_node_get_vertical_padding (StThemeNode *node)
@ -3317,7 +3473,7 @@ parse_shadow_property (StThemeNode *node,
* *
* See also st_theme_node_get_shadow(), which provides a simpler API. * See also st_theme_node_get_shadow(), which provides a simpler API.
* *
* Return value: %TRUE if the property was found in the properties for this * Returns: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.), %FALSE * theme node (or in the properties of parent nodes when inheriting.), %FALSE
* if the property was not found, or was explicitly set to 'none'. * if the property was not found, or was explicitly set to 'none'.
*/ */
@ -3402,7 +3558,8 @@ st_theme_node_lookup_shadow (StThemeNode *node,
* *
* See also st_theme_node_lookup_shadow (), which provides more options. * See also st_theme_node_lookup_shadow (), which provides more options.
* *
* Return value: (transfer full): the shadow, or %NULL if the property was not found. * Returns: (nullable) (transfer full): the shadow, or %NULL if the property was
* not found.
*/ */
StShadow * StShadow *
st_theme_node_get_shadow (StThemeNode *node, st_theme_node_get_shadow (StThemeNode *node,
@ -3422,7 +3579,7 @@ st_theme_node_get_shadow (StThemeNode *node,
* *
* Gets the value for the box-shadow style property * Gets the value for the box-shadow style property
* *
* Return value: (transfer none): the node's shadow, or %NULL * Returns: (nullable) (transfer none): the node's shadow, or %NULL
* if node has no shadow * if node has no shadow
*/ */
StShadow * StShadow *
@ -3455,8 +3612,8 @@ st_theme_node_get_box_shadow (StThemeNode *node)
* *
* Gets the value for the -st-background-image-shadow style property * Gets the value for the -st-background-image-shadow style property
* *
* Return value: (transfer none): the node's background image shadow, or %NULL * Returns: (nullable) (transfer none): the node's background image shadow, or
* if node has no such shadow * %NULL if node has no such shadow
*/ */
StShadow * StShadow *
st_theme_node_get_background_image_shadow (StThemeNode *node) st_theme_node_get_background_image_shadow (StThemeNode *node)
@ -3496,7 +3653,7 @@ st_theme_node_get_background_image_shadow (StThemeNode *node)
* *
* Gets the value for the text-shadow style property * Gets the value for the text-shadow style property
* *
* Return value: (transfer none): the node's text-shadow, or %NULL * Returns: (nullable) (transfer none): the node's text-shadow, or %NULL
* if node has no text-shadow * if node has no text-shadow
*/ */
StShadow * StShadow *
@ -3542,7 +3699,7 @@ st_theme_node_get_text_shadow (StThemeNode *node)
* Gets the colors that should be used for colorizing symbolic icons according * Gets the colors that should be used for colorizing symbolic icons according
* the style of this node. * the style of this node.
* *
* Return value: (transfer none): the icon colors to use for this theme node * Returns: (transfer none): the icon colors to use for this theme node
*/ */
StIconColors * StIconColors *
st_theme_node_get_icon_colors (StThemeNode *node) st_theme_node_get_icon_colors (StThemeNode *node)
@ -3941,6 +4098,8 @@ st_theme_node_get_paint_box (StThemeNode *node,
* Tests if two theme nodes have the same borders and padding; this can be * Tests if two theme nodes have the same borders and padding; this can be
* used to optimize having to relayout when the style applied to a Clutter * used to optimize having to relayout when the style applied to a Clutter
* actor changes colors without changing the geometry. * actor changes colors without changing the geometry.
*
* Returns: %TRUE if equal, %FALSE otherwise
*/ */
gboolean gboolean
st_theme_node_geometry_equal (StThemeNode *node, st_theme_node_geometry_equal (StThemeNode *node,
@ -3988,7 +4147,7 @@ st_theme_node_geometry_equal (StThemeNode *node,
* for @other. Note that in some cases this function may return %TRUE even * for @other. Note that in some cases this function may return %TRUE even
* if there is no visible difference in the painting. * if there is no visible difference in the painting.
* *
* Return value: %TRUE if the two theme nodes paint identically. %FALSE if the * Returns: %TRUE if the two theme nodes paint identically. %FALSE if the
* two nodes potentially paint differently. * two nodes potentially paint differently.
*/ */
gboolean gboolean
@ -4077,6 +4236,15 @@ st_theme_node_paint_equal (StThemeNode *node,
return TRUE; return TRUE;
} }
/**
* st_theme_node_to_string:
* @node: a #StThemeNode
*
* Serialize @node to a string of its #GType name, CSS ID, classes and
* pseudo-classes.
*
* Returns: the serialized theme node
*/
gchar * gchar *
st_theme_node_to_string (StThemeNode *node) st_theme_node_to_string (StThemeNode *node)
{ {

@ -43,6 +43,11 @@ G_BEGIN_DECLS
* accessors for standard CSS properties that add caching and handling of various * accessors for standard CSS properties that add caching and handling of various
* details of the CSS specification. #StThemeNode also has convenience functions to help * details of the CSS specification. #StThemeNode also has convenience functions to help
* in implementing a #ClutterActor with borders and padding. * in implementing a #ClutterActor with borders and padding.
*
* Note that pixel measurements take the #StThemeContext:scale-factor into
* account so all values are in physical pixels, as opposed to logical pixels.
* Physical pixels correspond to actor sizes, not necessarily to pixels on
* display devices (eg. when `scale-monitor-framebuffer` is enabled).
*/ */
typedef struct _StTheme StTheme; typedef struct _StTheme StTheme;
@ -51,6 +56,15 @@ typedef struct _StThemeContext StThemeContext;
#define ST_TYPE_THEME_NODE (st_theme_node_get_type ()) #define ST_TYPE_THEME_NODE (st_theme_node_get_type ())
G_DECLARE_FINAL_TYPE (StThemeNode, st_theme_node, ST, THEME_NODE, GObject) G_DECLARE_FINAL_TYPE (StThemeNode, st_theme_node, ST, THEME_NODE, GObject)
/**
* StSide:
* @ST_SIDE_TOP: The top side.
* @ST_SIDE_RIGHT: The right side.
* @ST_SIDE_BOTTOM: The bottom side.
* @ST_SIDE_LEFT: The left side.
*
* Used to target a particular side of a #StThemeNode element.
*/
typedef enum { typedef enum {
ST_SIDE_TOP, ST_SIDE_TOP,
ST_SIDE_RIGHT, ST_SIDE_RIGHT,
@ -58,6 +72,15 @@ typedef enum {
ST_SIDE_LEFT ST_SIDE_LEFT
} StSide; } StSide;
/**
* StCorner:
* @ST_CORNER_TOPLEFT: The top-right corner.
* @ST_CORNER_TOPRIGHT: The top-right corner.
* @ST_CORNER_BOTTOMRIGHT: The bottom-right corner.
* @ST_CORNER_BOTTOMLEFT: The bottom-left corner.
*
* Used to target a particular corner of a #StThemeNode element.
*/
typedef enum { typedef enum {
ST_CORNER_TOPLEFT, ST_CORNER_TOPLEFT,
ST_CORNER_TOPRIGHT, ST_CORNER_TOPRIGHT,
@ -66,6 +89,18 @@ typedef enum {
} StCorner; } StCorner;
/* These are the CSS values; that doesn't mean we have to implement blink... */ /* These are the CSS values; that doesn't mean we have to implement blink... */
/**
* StTextDecoration:
* @ST_TEXT_DECORATION_: Text is underlined
* @ST_TEXT_DECORATION_OVERLINE: Text is overlined
* @ST_TEXT_DECORATION_LINE_THROUGH: Text is striked out
* @ST_TEXT_DECORATION_BLINK: Text blinks
*
* Flags used to determine the decoration of text.
*
* Not that neither %ST_TEXT_DECORATION_OVERLINE or %ST_TEXT_DECORATION_BLINK
* are implemented, currently.
*/
typedef enum { typedef enum {
ST_TEXT_DECORATION_UNDERLINE = 1 << 0, ST_TEXT_DECORATION_UNDERLINE = 1 << 0,
ST_TEXT_DECORATION_OVERLINE = 1 << 1, ST_TEXT_DECORATION_OVERLINE = 1 << 1,
@ -73,6 +108,15 @@ typedef enum {
ST_TEXT_DECORATION_BLINK = 1 << 3 ST_TEXT_DECORATION_BLINK = 1 << 3
} StTextDecoration; } StTextDecoration;
/**
* StTextAlign:
* @ST_TEXT_ALIGN_LEFT: Text is aligned at the beginning of the label.
* @ST_TEXT_ALIGN_CENTER: Text is aligned in the middle of the label.
* @ST_TEXT_ALIGN_RIGHT: Text is aligned at the end of the label.
* @ST_GRADIENT_JUSTIFY: Text is justified in the label.
*
* Used to align text in a label.
*/
typedef enum { typedef enum {
ST_TEXT_ALIGN_LEFT = PANGO_ALIGN_LEFT, ST_TEXT_ALIGN_LEFT = PANGO_ALIGN_LEFT,
ST_TEXT_ALIGN_CENTER = PANGO_ALIGN_CENTER, ST_TEXT_ALIGN_CENTER = PANGO_ALIGN_CENTER,
@ -80,6 +124,15 @@ typedef enum {
ST_TEXT_ALIGN_JUSTIFY ST_TEXT_ALIGN_JUSTIFY
} StTextAlign; } StTextAlign;
/**
* StGradientType:
* @ST_GRADIENT_NONE: No gradient.
* @ST_GRADIENT_VERTICAL: A vertical gradient.
* @ST_GRADIENT_HORIZONTAL: A horizontal gradient.
* @ST_GRADIENT_RADIAL: Lookup the style requested in the icon name.
*
* Used to specify options when rendering gradients.
*/
typedef enum { typedef enum {
ST_GRADIENT_NONE, ST_GRADIENT_NONE,
ST_GRADIENT_VERTICAL, ST_GRADIENT_VERTICAL,
@ -87,6 +140,16 @@ typedef enum {
ST_GRADIENT_RADIAL ST_GRADIENT_RADIAL
} StGradientType; } StGradientType;
/**
* StIconStyle:
* @ST_ICON_STYLE_REQUESTED: Lookup the style requested in the icon name.
* @ST_ICON_STYLE_REGULAR: Try to always load regular icons, even when symbolic
* icon names are given.
* @ST_ICON_STYLE_SYMBOLIC: Try to always load symbolic icons, even when regular
* icon names are given.
*
* Used to specify options when looking up icons.
*/
typedef enum { typedef enum {
ST_ICON_STYLE_REQUESTED, ST_ICON_STYLE_REQUESTED,
ST_ICON_STYLE_REGULAR, ST_ICON_STYLE_REGULAR,

@ -250,6 +250,16 @@ insert_stylesheet (StTheme *theme,
g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file); g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file);
} }
/**
* st_theme_load_stylesheet:
* @theme: a #StTheme
* @file: a #GFile
* @error: (optional): a #GError
*
* Load the stylesheet associated with @file.
*
* Returns: %TRUE if successful
*/
gboolean gboolean
st_theme_load_stylesheet (StTheme *theme, st_theme_load_stylesheet (StTheme *theme,
GFile *file, GFile *file,
@ -271,6 +281,14 @@ st_theme_load_stylesheet (StTheme *theme,
return TRUE; return TRUE;
} }
/**
* st_theme_unload_stylesheet:
* @theme: a #StTheme
* @file: a #GFile
*
* Unload the stylesheet associated with @file. If @file was not loaded this
* function does nothing.
*/
void void
st_theme_unload_stylesheet (StTheme *theme, st_theme_unload_stylesheet (StTheme *theme,
GFile *file) GFile *file)
@ -301,6 +319,8 @@ st_theme_unload_stylesheet (StTheme *theme,
* st_theme_get_custom_stylesheets: * st_theme_get_custom_stylesheets:
* @theme: an #StTheme * @theme: an #StTheme
* *
* Get a list of the stylesheet files loaded with st_theme_load_stylesheet().
*
* Returns: (transfer full) (element-type GFile): the list of stylesheet files * Returns: (transfer full) (element-type GFile): the list of stylesheet files
* that were loaded with st_theme_load_stylesheet() * that were loaded with st_theme_load_stylesheet()
*/ */
@ -461,7 +481,7 @@ st_theme_get_property (GObject *object,
* @default_stylesheet: The lowest priority stylesheet, representing global default styling; * @default_stylesheet: The lowest priority stylesheet, representing global default styling;
* this is associated with the CSS "user agent" stylesheet, may be %NULL * this is associated with the CSS "user agent" stylesheet, may be %NULL
* *
* Return value: the newly created theme object * Returns: the newly created theme object
**/ **/
StTheme * StTheme *
st_theme_new (GFile *application_stylesheet, st_theme_new (GFile *application_stylesheet,

@ -562,7 +562,7 @@ get_root_theme_node (ClutterStage *stage)
* Note: it is a fatal error to call this on a widget that is * Note: it is a fatal error to call this on a widget that is
* not been added to a stage. * not been added to a stage.
* *
* Return value: (transfer none): the theme node for the widget. * Returns: (transfer none): the theme node for the widget.
* This is owned by the widget. When attributes of the widget * This is owned by the widget. When attributes of the widget
* or the environment that affect the styling change (for example * or the environment that affect the styling change (for example
* the style_class property of the widget), it will be recreated, * the style_class property of the widget), it will be recreated,
@ -653,7 +653,7 @@ st_widget_get_theme_node (StWidget *widget)
* node hasn't been computed. If %NULL is returned, then ::style-changed * node hasn't been computed. If %NULL is returned, then ::style-changed
* will be reliably emitted before the widget is allocated or painted. * will be reliably emitted before the widget is allocated or painted.
* *
* Return value: (transfer none): the theme node for the widget. * Returns: (transfer none): the theme node for the widget.
* This is owned by the widget. When attributes of the widget * This is owned by the widget. When attributes of the widget
* or the environment that affect the styling change (for example * or the environment that affect the styling change (for example
* the style_class property of the widget), it will be recreated, * the style_class property of the widget), it will be recreated,
@ -949,7 +949,7 @@ st_widget_class_init (StWidgetClass *klass)
ST_PARAM_READWRITE); ST_PARAM_READWRITE);
/** /**
* ClutterActor:label-actor: * StWidget:label-actor:
* *
* An actor that labels this widget. * An actor that labels this widget.
*/ */
@ -1006,8 +1006,7 @@ st_widget_class_init (StWidgetClass *klass)
* StWidget::popup-menu: * StWidget::popup-menu:
* @widget: the #StWidget * @widget: the #StWidget
* *
* Emitted when the user has requested a context menu (eg, via a * Emitted when the user has requested a context menu (eg, via a keybinding)
* keybinding)
*/ */
signals[POPUP_MENU] = signals[POPUP_MENU] =
g_signal_new ("popup-menu", g_signal_new ("popup-menu",
@ -1388,8 +1387,8 @@ st_widget_set_style (StWidget *actor,
* *
* Get the current inline style string. See st_widget_set_style(). * Get the current inline style string. See st_widget_set_style().
* *
* Returns: The inline style string, or %NULL. The string is owned by the * Returns: (transfer none) (nullable): The inline style string, or %NULL. The
* #StWidget and should not be modified or freed. * string is owned by the #StWidget and should not be modified or freed.
*/ */
const gchar* const gchar*
st_widget_get_style (StWidget *actor) st_widget_get_style (StWidget *actor)
@ -1745,8 +1744,8 @@ st_widget_recompute_style (StWidget *widget,
* st_widget_ensure_style: * st_widget_ensure_style:
* @widget: A #StWidget * @widget: A #StWidget
* *
* Ensures that @widget has read its style information. * Ensures that @widget has read its style information and propagated any
* * changes to its children.
*/ */
void void
st_widget_ensure_style (StWidget *widget) st_widget_ensure_style (StWidget *widget)
@ -1808,7 +1807,7 @@ st_widget_set_track_hover (StWidget *widget,
* st_widget_get_track_hover: * st_widget_get_track_hover:
* @widget: A #StWidget * @widget: A #StWidget
* *
* Returns the current value of the track-hover property. See * Returns the current value of the #StWidget:track-hover property. See
* st_widget_set_track_hover() for more information. * st_widget_set_track_hover() for more information.
* *
* Returns: current value of track-hover on @widget * Returns: current value of track-hover on @widget
@ -1942,7 +1941,7 @@ st_widget_get_can_focus (StWidget *widget)
* st_widget_popup_menu: * st_widget_popup_menu:
* @self: A #StWidget * @self: A #StWidget
* *
* Asks the widget to pop-up a context menu. * Asks the widget to pop-up a context menu by emitting #StWidget::popup-menu.
*/ */
void void
st_widget_popup_menu (StWidget *self) st_widget_popup_menu (StWidget *self)
@ -2229,7 +2228,7 @@ st_widget_real_navigate_focus (StWidget *widget,
* time, using a %NULL @from, which should cause it to reset the focus * time, using a %NULL @from, which should cause it to reset the focus
* to the first available widget in the given direction. * to the first available widget in the given direction.
* *
* Return value: %TRUE if clutter_actor_grab_key_focus() has been * Returns: %TRUE if clutter_actor_grab_key_focus() has been
* called on an actor. %FALSE if not. * called on an actor. %FALSE if not.
*/ */
gboolean gboolean
@ -2275,7 +2274,7 @@ append_actor_text (GString *desc,
* includes the class name and actor name (if any), plus if @actor * includes the class name and actor name (if any), plus if @actor
* is an #StWidget, its style class and pseudo class names. * is an #StWidget, its style class and pseudo class names.
* *
* Return value: the debug name. * Returns: the debug name.
*/ */
char * char *
st_describe_actor (ClutterActor *actor) st_describe_actor (ClutterActor *actor)
@ -2350,7 +2349,7 @@ st_describe_actor (ClutterActor *actor)
* *
* Gets the label that identifies @widget if it is defined * Gets the label that identifies @widget if it is defined
* *
* Return value: (transfer none): the label that identifies the widget * Returns: (transfer none): the label that identifies the widget
*/ */
ClutterActor * ClutterActor *
st_widget_get_label_actor (StWidget *widget) st_widget_get_label_actor (StWidget *widget)
@ -2433,7 +2432,7 @@ st_widget_set_accessible_name (StWidget *widget,
* Gets the accessible name for this widget. See * Gets the accessible name for this widget. See
* st_widget_set_accessible_name() for more information. * st_widget_set_accessible_name() for more information.
* *
* Return value: a character string representing the accessible name * Returns: a character string representing the accessible name
* of the widget. * of the widget.
*/ */
const gchar * const gchar *
@ -2488,7 +2487,7 @@ st_widget_set_accessible_role (StWidget *widget,
* Gets the #AtkRole for this widget. See * Gets the #AtkRole for this widget. See
* st_widget_set_accessible_role() for more information. * st_widget_set_accessible_role() for more information.
* *
* Return value: accessible #AtkRole for this widget * Returns: accessible #AtkRole for this widget
*/ */
AtkRole AtkRole
st_widget_get_accessible_role (StWidget *widget) st_widget_get_accessible_role (StWidget *widget)

@ -38,6 +38,17 @@ G_BEGIN_DECLS
#define ST_TYPE_WIDGET (st_widget_get_type ()) #define ST_TYPE_WIDGET (st_widget_get_type ())
G_DECLARE_DERIVABLE_TYPE (StWidget, st_widget, ST, WIDGET, ClutterActor) G_DECLARE_DERIVABLE_TYPE (StWidget, st_widget, ST, WIDGET, ClutterActor)
/**
* StDirectionType:
* @ST_DIR_TAB_FORWARD: Move forward.
* @ST_DIR_TAB_BACKWARD: Move backward.
* @ST_DIR_UP: Move up.
* @ST_DIR_DOWN: Move down.
* @ST_DIR_LEFT: Move left.
* @ST_DIR_RIGHT: Move right.
*
* Enumeration for focus direction.
*/
typedef enum typedef enum
{ {
ST_DIR_TAB_FORWARD, ST_DIR_TAB_FORWARD,

@ -26,6 +26,7 @@
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
#include <meta/main.h> #include <meta/main.h>
#include <meta/meta-backend.h>
static ClutterActor *stage; static ClutterActor *stage;
static StThemeNode *root; static StThemeNode *root;
@ -533,6 +534,7 @@ test_inline_style (void)
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
MetaBackend *backend;
StTheme *theme; StTheme *theme;
StThemeContext *context; StThemeContext *context;
PangoFontDescription *font_desc; PangoFontDescription *font_desc;
@ -556,7 +558,8 @@ main (int argc, char **argv)
theme = st_theme_new (file, NULL, NULL); theme = st_theme_new (file, NULL, NULL);
g_object_unref (file); g_object_unref (file);
stage = clutter_stage_new (); backend = meta_get_backend ();
stage = meta_backend_get_stage (backend);
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage)); context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
st_theme_context_set_theme (context, theme); st_theme_context_set_theme (context, theme);

@ -39,6 +39,7 @@
</description> </description>
<releases> <releases>
<release version="3.37.90" date="2020-08-11"/>
<release version="3.37.3" date="2020-07-07"/> <release version="3.37.3" date="2020-07-07"/>
<release version="3.37.2" date="2020-06-02"/> <release version="3.37.2" date="2020-06-02"/>
<release version="3.37.1" date="2020-04-29"/> <release version="3.37.1" date="2020-04-29"/>

@ -1,5 +1,5 @@
project('gnome-extensions-app', project('gnome-extensions-app',
version: '3.37.3', version: '3.37.90',
meson_version: '>= 0.53.0', meson_version: '>= 0.53.0',
license: 'GPLv2+' license: 'GPLv2+'
) )

@ -1,5 +1,5 @@
project('gnome-extensions-tool', 'c', project('gnome-extensions-tool', 'c',
version: '3.37.3', version: '3.37.90',
meson_version: '>= 0.53.0', meson_version: '>= 0.53.0',
license: 'GPLv2+' license: 'GPLv2+'
) )

@ -1,5 +1,5 @@
project('shew', 'c', project('shew', 'c',
version: '3.37.3', version: '3.37.90',
meson_version: '>= 0.53.0', meson_version: '>= 0.53.0',
license: 'LGPLv2+', license: 'LGPLv2+',
) )