Compare commits
57 Commits
gbsneto/ea
...
3.36.2
Author | SHA1 | Date | |
---|---|---|---|
2a2634439c | |||
0d2d8cf623 | |||
d64b1e6efb | |||
bbf3a09e2a | |||
e57a4e0937 | |||
443d615edf | |||
006d0e8521 | |||
1a5a01622a | |||
38e31b9f0d | |||
fb7e70d562 | |||
63a6c0d6f9 | |||
05c1a6dce6 | |||
4097f7943f | |||
802c2fe532 | |||
9497ddd68a | |||
890f5b591f | |||
5b0d013229 | |||
60ee6ab4b7 | |||
18a5c74362 | |||
4895032054 | |||
6b24ab572c | |||
35a3320851 | |||
156e05fe90 | |||
cc0fac895c | |||
a6783692c5 | |||
1c27b68bcc | |||
717c05a288 | |||
e68604b1aa | |||
0368ad29e9 | |||
b982ce394e | |||
025647f585 | |||
7125b726ad | |||
aebfab7207 | |||
698bd5b3a9 | |||
51e9f19f2f | |||
6d38a4a7b3 | |||
dfcc5ffb1e | |||
8b80a4cf4d | |||
01e894c028 | |||
856adfd1f1 | |||
efee3aa749 | |||
15e72da648 | |||
3f8bd1db25 | |||
3a863ee341 | |||
654a7af929 | |||
8dd9cbac7f | |||
331db650dd | |||
428d38179d | |||
fe9708ebd8 | |||
8398769321 | |||
768c08ba9d | |||
69426cbfda | |||
9f968e7378 | |||
1ab5e6973a | |||
1dea3341ec | |||
8fda054dc5 | |||
e989684602 |
86
NEWS
86
NEWS
@ -1,3 +1,89 @@
|
||||
3.36.2
|
||||
======
|
||||
* Add openPrefs() convenience method for extensions [Florian; !1163]
|
||||
* Bring back support for empty StIcons [Andre, Jonas D.; !1173, !1178]
|
||||
* Wake up screen when unlocking programmatically [Florian; !1158]
|
||||
* Improve handling of scale-factor changes [Georges; !1176]
|
||||
* Fix translations of folder names [Florian; #2623]
|
||||
* Fix delay on lock screen after entering wrong password [Jonas D.; #2655]
|
||||
* Match ASCII alternatives of system actions [Will; #2688]
|
||||
* Tone down weekend days with events in calendar [Jakub; #2588]
|
||||
* Fix area screenshots on multi-monitor systems [Jonas Å; !1224]
|
||||
* Fix stuck lock screen after unlock [Jonas D., Florian; #2446]
|
||||
* Fixed crashes [Jonas D., Florian, Carlos; #2584, #2625, !1223, !1218]
|
||||
* Misc. bug fixes and cleanups [Jonas Å., Marco, Andre, Florian, Jonas D.;
|
||||
!1155, !1156, !1169, !1168, #2551, #2563, !1172, !1179, !1160, #2562, #2578,
|
||||
!1203, #2649, #2628, #2691, #1615, #2607, !1228]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Jonas Dreßler, Carlos Garnacho,
|
||||
Andre Moreira Magalhaes, Florian Müllner, Georges Basile Stavracas Neto,
|
||||
Jakub Steiner, Will Thompson, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Fabio Tomat [fur], Cheng-Chia Tseng [zh_TW], Danial Behzadi [fa],
|
||||
Jiri Grönroos [fi], Ibai Oihanguren Sala [eu], Марко Костић [sr],
|
||||
Rūdolfs Mazurs [lv], Rafael Fontenelle [pt_BR], Petr Kovář [cs],
|
||||
Daniel Rusek [cs]
|
||||
|
||||
3.36.1
|
||||
======
|
||||
* Improve app folders [Jonas D.; !1011]
|
||||
* Fix launching ibus daemon [Alynx; !1080]
|
||||
* Do not shutdown ibus/xsettings on X11 compositor restart [Carlos; #2329]
|
||||
* Hide hint text in entries when preedit is used [Carlos; !1084]
|
||||
* Do not load app infos on main thread [Christian; #2282]
|
||||
* Don't expose FDO Notifications interface on main bus name [Florian; !547]
|
||||
* Fix icon of mobile broadband connections [Cosimo, Reik; !1097, !1105]
|
||||
* Fix high-contrast/symbolic icon mix-up [Florian; #2414]
|
||||
* Don't ellipsize times in world clock [Florian; !1090]
|
||||
* Only check for extension updates if there are any extensions [Florian; !1100]
|
||||
* Fix crash when trying to update removed extensions [Florian; #2343]
|
||||
* Make Extensions app available as flatpak [Florian; !1081, !1106, !1087, !1133]
|
||||
* Display fractional timezones as hours:minutes [Jonas D.; #2438]
|
||||
* Fix assigning pad keybindings [Carlos; #2451]
|
||||
* Handle embedded newlines in lock screen notifications [Florian; #2463]
|
||||
* Fix OSK layout fallback for unsupported variants [Florian; #2471]
|
||||
* Do not apply text color to color glyphs (emojis) [Carlos; #850]
|
||||
* Check "Install pending software updates" by default [Michael; #2427]
|
||||
* Do not warn about missing GDM on each login [Florian; #2432]
|
||||
* Fix telepathy chat notifications [Marco; !1112]
|
||||
* Fix offline updates support in end session dialog [Michael; #2276]
|
||||
* Fix activating notifications by keyboard [Florian; #2319]
|
||||
* Remove handling of 'blacklisted' extensions [Florian; !1132]
|
||||
* Only update extensions if Extensions app is installed [Florian; #2346]
|
||||
* Improve Norwegian on-screen-keyboard layout [Bjørn; !1073]
|
||||
* Fix IM support for deleting surrounding text [Takao; !477]
|
||||
* Fix blur effect with fractional scaling [Jonas D.; !1000]
|
||||
* Use better location name in weather section [Florian; #2468]
|
||||
* Fix glitch in sound feedback on volume changes [Florian; !1147]
|
||||
* Fix on-screen keyboard regressions [Jonas D.; !1142]
|
||||
* Improve screen-reader support [Luke; #2508, #2517]
|
||||
* Fix password entry resize on login/lock screen [Florian; #2423]
|
||||
* Fix crash when opening app picker [Jonas Å.; !1154]
|
||||
* Misc. bug fixes and cleanups [Florian, Sebastian, Jan, Daniel, Philip, Mario,
|
||||
Ray, Marco, Jonas D., Carlos, Georges; #2298, #2305, !1078, !1077, #2334,
|
||||
#2381, !1093, !1098, #2386, !1108, !1109, !1114, !1076, !1072, !1115, !1088,
|
||||
!1101, #2467, !1121, !1122, #2476, !1123, !1117, !1129, !1113, !1102, !1127,
|
||||
#2238, !1131, !1135, !1136, !849, #2504, #2371, !1146, !1141, #2510, !1150]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Michael Catanzaro, Cosimo Cecchi, Jonas Dreßler,
|
||||
Takao Fujiwara, Carlos Garnacho, Christian Hergert, Sebastian Keller,
|
||||
Reik Keutterling, Bjørn Lie, Florian Müllner, Jwtiyar Nariman,
|
||||
Georges Basile Stavracas Neto, Mario Sanchez Prada, Ray Strode, Jan Tojnar,
|
||||
Daniel van Vugt, Philip Withnall, Luke Yelavich, Alynx Zhou, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Марко Костић [sr], Jordi Mas [ca], sicklylife [ja], Marek Černocký [cs],
|
||||
Daniel Rusek [cs], Kjartan Maraas [nb], Tim Sabsch [de], Stas Solovey [ru],
|
||||
Peter Mráz [sk], Rafael Fontenelle [pt_BR], Piotr Drąg [pl],
|
||||
Milo Casagrande [it], Anders Jonsson [sv], Yuri Chornoivan [uk],
|
||||
Kukuh Syafaat [id], Guillaume Bernard [fr], Daniel Mustieles [es],
|
||||
Danial Behzadi [fa], Goran Vidović [hr], Yosef Or Boczko [he],
|
||||
Emin Tufan Çetin [tr], Wolfgang Stöggl [de], Ibai Oihanguren Sala [eu],
|
||||
Jwtiyar Nariman [ckb], Aurimas Černius [lt]
|
||||
|
||||
3.36.0
|
||||
======
|
||||
* Fix off-by-1900 error in date conversions [Florian; !1061]
|
||||
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.1 KiB |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M6.5 1.031c-.371 0-.742-.035-1.11.016-.367.05-.73.203-.972.476-.125.141-.215.309-.266.485-.047.18-.054.367-.02.55.032.184.102.356.192.516.09.164.203.309.317.457L5 4H2a1.8 1.8 0 00-.41.035.791.791 0 00-.36.195.791.791 0 00-.195.36C1 4.723 1 4.863 1 5v2.75l.77-.344c.265-.117.542-.23.832-.242.289-.016.586.074.812.254.227.18.383.441.465.723.082.277.101.57.121.859.02.316.04.637-.016.95-.058.312-.199.616-.43.831a1.264 1.264 0 01-.874.32c-.317-.007-.618-.128-.91-.257L1 10.5V14c0 .137.004.277.035.41a.791.791 0 00.195.36c.098.097.227.16.36.195.133.035.273.035.41.035h3l-.328-.68c-.14-.293-.274-.597-.29-.922-.015-.32.095-.652.31-.894.214-.242.523-.39.84-.453.316-.067.644-.059.968-.059.324 0 .652-.008.969.059.316.062.625.21.84.453.214.242.324.574.308.894-.015.325-.148.63-.289.922L8 15h3a1.8 1.8 0 00.41-.035.791.791 0 00.36-.195.791.791 0 00.195-.36C12 14.277 12 14.137 12 14v-3.563l.703.297c.29.125.59.239.902.246.313.004.63-.101.864-.308.238-.203.386-.496.46-.8C15 9.565 15 9.25 15 8.937c0-.313 0-.63-.07-.934-.075-.305-.223-.598-.461-.8a1.288 1.288 0 00-.864-.31c-.312.008-.613.122-.902.247L12 7.437V5a1.8 1.8 0 00-.035-.41.791.791 0 00-.195-.36.791.791 0 00-.36-.195C11.277 4 11.137 4 11 4H8l.36-.469c.113-.148.226-.293.316-.457.09-.16.16-.332.191-.515a1.248 1.248 0 00-.02-.551 1.256 1.256 0 00-.265-.485c-.242-.273-.605-.425-.973-.476-.367-.05-.738-.016-1.109-.016zm0 0" fill="#474747"/></svg>
|
After Width: | Height: | Size: 1.4 KiB |
1
data/icons/meson.build
Normal file
1
data/icons/meson.build
Normal file
@ -0,0 +1 @@
|
||||
install_subdir('hicolor', install_dir: icondir)
|
@ -1,5 +1,6 @@
|
||||
desktop_files = [
|
||||
'org.gnome.Shell.desktop',
|
||||
'org.gnome.Shell.Extensions.desktop',
|
||||
]
|
||||
service_files = []
|
||||
|
||||
@ -42,6 +43,7 @@ endforeach
|
||||
|
||||
|
||||
subdir('dbus-interfaces')
|
||||
subdir('icons')
|
||||
subdir('theme')
|
||||
|
||||
data_resources = [
|
||||
|
10
data/org.gnome.Shell.Extensions.desktop.in.in
Normal file
10
data/org.gnome.Shell.Extensions.desktop.in.in
Normal file
@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
# Keep in sync with subprojects/extensions-app
|
||||
Name=Extensions
|
||||
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
Icon=org.gnome.Shell.Extensions
|
||||
# Never launch this, just provide name+icon to portal dialog
|
||||
Exec=false
|
||||
OnlyShowIn=GNOME;
|
||||
NoDisplay=true
|
@ -153,9 +153,11 @@
|
||||
}
|
||||
|
||||
.calendar-day-with-events {
|
||||
color: lighten($fg_color,10%);
|
||||
font-weight: bold;
|
||||
background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg");
|
||||
&.calendar-work-day {
|
||||
color: lighten($fg_color,10%);
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.calendar-other-month-day {
|
||||
|
@ -184,7 +184,7 @@ var AuthPrompt = GObject.registerClass({
|
||||
});
|
||||
this._defaultButtonWell.add_constraint(new Clutter.BindConstraint({
|
||||
source: this.cancelButton,
|
||||
coordinate: Clutter.BindCoordinate.SIZE,
|
||||
coordinate: Clutter.BindCoordinate.WIDTH,
|
||||
}));
|
||||
this._mainBox.add_child(this._defaultButtonWell);
|
||||
|
||||
@ -424,7 +424,13 @@ var AuthPrompt = GObject.registerClass({
|
||||
}
|
||||
|
||||
updateSensitivity(sensitive) {
|
||||
if (this._entry.reactive === sensitive)
|
||||
return;
|
||||
|
||||
this._entry.reactive = sensitive;
|
||||
|
||||
if (sensitive)
|
||||
this._entry.grab_key_focus();
|
||||
}
|
||||
|
||||
vfunc_hide() {
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* exported BANNER_MESSAGE_KEY, BANNER_MESSAGE_TEXT_KEY, LOGO_KEY,
|
||||
DISABLE_USER_LIST_KEY, fadeInActor, fadeOutActor, cloneAndFadeOutActor */
|
||||
|
||||
const { Clutter, Gdm, Gio, GLib } = imports.gi;
|
||||
const { Clutter, Gio, GLib } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Batch = imports.gdm.batch;
|
||||
@ -12,15 +12,6 @@ const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const SmartcardManager = imports.misc.smartcardManager;
|
||||
|
||||
Gio._promisify(Gdm.Client.prototype,
|
||||
'open_reauthentication_channel', 'open_reauthentication_channel_finish');
|
||||
Gio._promisify(Gdm.Client.prototype,
|
||||
'get_user_verifier', 'get_user_verifier_finish');
|
||||
Gio._promisify(Gdm.UserVerifierProxy.prototype,
|
||||
'call_begin_verification_for_user', 'call_begin_verification_for_user_finish');
|
||||
Gio._promisify(Gdm.UserVerifierProxy.prototype,
|
||||
'call_begin_verification', 'call_begin_verification_finish');
|
||||
|
||||
var PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||
var FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||
var SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
||||
@ -177,12 +168,14 @@ var ShellUserVerifier = class {
|
||||
|
||||
this._checkForFingerprintReader();
|
||||
|
||||
// If possible, reauthenticate an already running session,
|
||||
// so any session specific credentials get updated appropriately
|
||||
if (userName)
|
||||
this._openReauthenticationChannel(userName);
|
||||
else
|
||||
this._getUserVerifier();
|
||||
if (userName) {
|
||||
// If possible, reauthenticate an already running session,
|
||||
// so any session specific credentials get updated appropriately
|
||||
this._client.open_reauthentication_channel(userName, this._cancellable,
|
||||
this._reauthenticationChannelOpened.bind(this));
|
||||
} else {
|
||||
this._client.get_user_verifier(this._cancellable, this._userVerifierGot.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
cancel() {
|
||||
@ -346,11 +339,10 @@ var ShellUserVerifier = class {
|
||||
this._verificationFailed(false);
|
||||
}
|
||||
|
||||
async _openReauthenticationChannel(userName) {
|
||||
_reauthenticationChannelOpened(client, result) {
|
||||
try {
|
||||
this._clearUserVerifier();
|
||||
this._userVerifier = await this._client.open_reauthentication_channel(
|
||||
userName, this._cancellable);
|
||||
this._userVerifier = client.open_reauthentication_channel_finish(result);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
return;
|
||||
@ -359,7 +351,8 @@ var ShellUserVerifier = class {
|
||||
// Gdm emits org.freedesktop.DBus.Error.AccessDenied when there
|
||||
// is no session to reauthenticate. Fall back to performing
|
||||
// verification from this login session
|
||||
this._getUserVerifier();
|
||||
client.get_user_verifier(this._cancellable,
|
||||
this._userVerifierGot.bind(this));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -373,11 +366,10 @@ var ShellUserVerifier = class {
|
||||
this._hold.release();
|
||||
}
|
||||
|
||||
async _getUserVerifier() {
|
||||
_userVerifierGot(client, result) {
|
||||
try {
|
||||
this._clearUserVerifier();
|
||||
this._userVerifier =
|
||||
await this._client.get_user_verifier(this._cancellable);
|
||||
this._userVerifier = client.get_user_verifier_finish(result);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
return;
|
||||
@ -429,25 +421,35 @@ var ShellUserVerifier = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _startService(serviceName) {
|
||||
_startService(serviceName) {
|
||||
this._hold.acquire();
|
||||
try {
|
||||
if (this._userName) {
|
||||
await this._userVerifier.call_begin_verification_for_user(
|
||||
serviceName, this._userName, this._cancellable);
|
||||
} else {
|
||||
await this._userVerifier.call_begin_verification(
|
||||
serviceName, this._cancellable);
|
||||
}
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
return;
|
||||
this._reportInitError(this._userName
|
||||
? 'Failed to start verification for user'
|
||||
: 'Failed to start verification', e);
|
||||
return;
|
||||
if (this._userName) {
|
||||
this._userVerifier.call_begin_verification_for_user(serviceName, this._userName, this._cancellable, (obj, result) => {
|
||||
try {
|
||||
obj.call_begin_verification_for_user_finish(result);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
return;
|
||||
this._reportInitError('Failed to start verification for user', e);
|
||||
return;
|
||||
}
|
||||
|
||||
this._hold.release();
|
||||
});
|
||||
} else {
|
||||
this._userVerifier.call_begin_verification(serviceName, this._cancellable, (obj, result) => {
|
||||
try {
|
||||
obj.call_begin_verification_finish(result);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
return;
|
||||
this._reportInitError('Failed to start verification', e);
|
||||
return;
|
||||
}
|
||||
|
||||
this._hold.release();
|
||||
});
|
||||
}
|
||||
this._hold.release();
|
||||
}
|
||||
|
||||
_beginVerification() {
|
||||
|
@ -6,15 +6,6 @@ const Signals = imports.signals;
|
||||
|
||||
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
|
||||
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'list_engines_async', 'list_engines_async_finish');
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'request_name_async', 'request_name_async_finish');
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'get_global_engine_async', 'get_global_engine_async_finish');
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'set_global_engine_async', 'set_global_engine_async_finish');
|
||||
|
||||
// Ensure runtime version matches
|
||||
_checkIBusVersion(1, 5, 2);
|
||||
|
||||
@ -111,14 +102,16 @@ var IBusManager = class {
|
||||
|
||||
_onConnected() {
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
this._initEngines();
|
||||
this._initPanelService();
|
||||
this._ibus.list_engines_async(-1, this._cancellable,
|
||||
this._initEngines.bind(this));
|
||||
this._ibus.request_name_async(IBus.SERVICE_PANEL,
|
||||
IBus.BusNameFlag.REPLACE_EXISTING, -1, this._cancellable,
|
||||
this._initPanelService.bind(this));
|
||||
}
|
||||
|
||||
async _initEngines() {
|
||||
_initEngines(ibus, result) {
|
||||
try {
|
||||
const enginesList =
|
||||
await this._ibus.list_engines_async(-1, this._cancellable);
|
||||
let enginesList = this._ibus.list_engines_async_finish(result);
|
||||
for (let i = 0; i < enginesList.length; ++i) {
|
||||
let name = enginesList[i].get_name();
|
||||
this._engines.set(name, enginesList[i]);
|
||||
@ -133,10 +126,9 @@ var IBusManager = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _initPanelService() {
|
||||
_initPanelService(ibus, result) {
|
||||
try {
|
||||
await this._ibus.request_name_async(IBus.SERVICE_PANEL,
|
||||
IBus.BusNameFlag.REPLACE_EXISTING, -1, this._cancellable);
|
||||
this._ibus.request_name_async_finish(result);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
||||
logError(e);
|
||||
@ -171,15 +163,19 @@ var IBusManager = class {
|
||||
this._panelService.connect('set-content-type', this._setContentType.bind(this));
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
try {
|
||||
// If an engine is already active we need to get its properties
|
||||
const engine =
|
||||
await this._ibus.get_global_engine_async(-1, this._cancellable);
|
||||
// If an engine is already active we need to get its properties
|
||||
this._ibus.get_global_engine_async(-1, this._cancellable, (_bus, res) => {
|
||||
let engine;
|
||||
try {
|
||||
engine = this._ibus.get_global_engine_async_finish(res);
|
||||
if (!engine)
|
||||
return;
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
this._engineChanged(this._ibus, engine.get_name());
|
||||
this._updateReadiness();
|
||||
} catch (e) {
|
||||
}
|
||||
});
|
||||
this._updateReadiness();
|
||||
}
|
||||
|
||||
_updateReadiness() {
|
||||
@ -227,7 +223,7 @@ var IBusManager = class {
|
||||
return this._engines.get(id);
|
||||
}
|
||||
|
||||
async setEngine(id, callback) {
|
||||
setEngine(id, callback) {
|
||||
// Send id even if id == this._currentEngineName
|
||||
// because 'properties-registered' signal can be emitted
|
||||
// while this._ibusSources == null on a lock screen.
|
||||
@ -237,16 +233,18 @@ var IBusManager = class {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await this._ibus.set_global_engine_async(id,
|
||||
this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
||||
this._cancellable);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
logError(e);
|
||||
}
|
||||
if (callback)
|
||||
callback();
|
||||
this._ibus.set_global_engine_async(id,
|
||||
this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
||||
this._cancellable, (_bus, res) => {
|
||||
try {
|
||||
this._ibus.set_global_engine_async_finish(res);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
|
||||
logError(e);
|
||||
}
|
||||
if (callback)
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
preloadEngines(ids) {
|
||||
|
@ -4,9 +4,6 @@ const { Clutter, GLib, Gio, GObject, IBus } = imports.gi;
|
||||
|
||||
const Keyboard = imports.ui.status.keyboard;
|
||||
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'create_input_context_async', 'create_input_context_async_finish');
|
||||
|
||||
var HIDE_PANEL_TIME = 50;
|
||||
|
||||
var InputMethod = GObject.registerClass(
|
||||
@ -49,11 +46,15 @@ class InputMethod extends Clutter.InputMethod {
|
||||
this._currentSource = this._inputSourceManager.currentSource;
|
||||
}
|
||||
|
||||
async _onConnected() {
|
||||
_onConnected() {
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
this._ibus.create_input_context_async('gnome-shell', -1,
|
||||
this._cancellable, this._setContext.bind(this));
|
||||
}
|
||||
|
||||
_setContext(bus, res) {
|
||||
try {
|
||||
this._context = await this._ibus.create_input_context_async(
|
||||
'gnome-shell', -1, this._cancellable);
|
||||
this._context = this._ibus.create_input_context_async_finish(res);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
|
||||
logError(e);
|
||||
|
@ -50,22 +50,25 @@ function canLock() {
|
||||
}
|
||||
|
||||
|
||||
async function registerSessionWithGDM() {
|
||||
function registerSessionWithGDM() {
|
||||
log("Registering session with GDM");
|
||||
try {
|
||||
await Gio.DBus.system.call(
|
||||
'org.gnome.DisplayManager',
|
||||
'/org/gnome/DisplayManager/Manager',
|
||||
'org.gnome.DisplayManager.Manager',
|
||||
'RegisterSession',
|
||||
GLib.Variant.new('(a{sv})', [{}]), null,
|
||||
Gio.DBusCallFlags.NONE, -1, null);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD))
|
||||
log(`Error registering session with GDM: ${e.message}`);
|
||||
else
|
||||
log('Not calling RegisterSession(): method not exported, GDM too old?');
|
||||
}
|
||||
Gio.DBus.system.call('org.gnome.DisplayManager',
|
||||
'/org/gnome/DisplayManager/Manager',
|
||||
'org.gnome.DisplayManager.Manager',
|
||||
'RegisterSession',
|
||||
GLib.Variant.new('(a{sv})', [{}]), null,
|
||||
Gio.DBusCallFlags.NONE, -1, null,
|
||||
(source, result) => {
|
||||
try {
|
||||
source.call_finish(result);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD))
|
||||
log(`Error registering session with GDM: ${e.message}`);
|
||||
else
|
||||
log("Not calling RegisterSession(): method not exported, GDM too old?");
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
let _loginManager = null;
|
||||
@ -171,19 +174,24 @@ var LoginManagerSystemd = class {
|
||||
this._proxy.SuspendRemote(true);
|
||||
}
|
||||
|
||||
async inhibit(reason, callback) {
|
||||
try {
|
||||
const inVariant = new GLib.Variant('(ssss)',
|
||||
['sleep', 'GNOME Shell', reason, 'delay']);
|
||||
const [outVariant_, fdList] =
|
||||
await this._proxy.call_with_unix_fd_list('Inhibit',
|
||||
inVariant, 0, -1, null, null);
|
||||
const [fd] = fdList.steal_fds();
|
||||
callback(new Gio.UnixInputStream({ fd }));
|
||||
} catch (e) {
|
||||
logError(e, 'Error getting systemd inhibitor');
|
||||
callback(null);
|
||||
}
|
||||
inhibit(reason, callback) {
|
||||
let inVariant = GLib.Variant.new('(ssss)',
|
||||
['sleep',
|
||||
'GNOME Shell',
|
||||
reason,
|
||||
'delay']);
|
||||
this._proxy.call_with_unix_fd_list('Inhibit', inVariant, 0, -1, null, null,
|
||||
(proxy, result) => {
|
||||
let fd = -1;
|
||||
try {
|
||||
let [outVariant_, fdList] = proxy.call_with_unix_fd_list_finish(result);
|
||||
fd = fdList.steal_fds()[0];
|
||||
callback(new Gio.UnixInputStream({ fd }));
|
||||
} catch (e) {
|
||||
logError(e, "Error getting systemd inhibitor");
|
||||
callback(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_prepareForSleep(proxy, sender, [aboutToSuspend]) {
|
||||
|
@ -57,7 +57,9 @@ var ObjectManager = class {
|
||||
// Start out inhibiting load until at least the proxy
|
||||
// manager is loaded and the remote objects are fetched
|
||||
this._numLoadInhibitors = 1;
|
||||
this._initManagerProxy();
|
||||
this._managerProxy.init_async(GLib.PRIORITY_DEFAULT,
|
||||
this._cancellable,
|
||||
this._onManagerProxyLoaded.bind(this));
|
||||
}
|
||||
|
||||
_tryToCompleteLoad() {
|
||||
@ -71,7 +73,7 @@ var ObjectManager = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _addInterface(objectPath, interfaceName, onFinished) {
|
||||
_addInterface(objectPath, interfaceName, onFinished) {
|
||||
let info = this._interfaceInfos[interfaceName];
|
||||
|
||||
if (!info) {
|
||||
@ -87,38 +89,40 @@ var ObjectManager = class {
|
||||
g_interface_info: info,
|
||||
g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START });
|
||||
|
||||
try {
|
||||
await proxy.init_async(GLib.PRIORITY_DEFAULT, this._cancellable);
|
||||
} catch (e) {
|
||||
logError(e, `could not initialize proxy for interface ${interfaceName}`);
|
||||
proxy.init_async(GLib.PRIORITY_DEFAULT, this._cancellable, (initable, result) => {
|
||||
try {
|
||||
initable.init_finish(result);
|
||||
} catch (e) {
|
||||
logError(e, `could not initialize proxy for interface ${interfaceName}`);
|
||||
|
||||
if (onFinished)
|
||||
onFinished();
|
||||
return;
|
||||
}
|
||||
|
||||
let isNewObject;
|
||||
if (!this._objects[objectPath]) {
|
||||
this._objects[objectPath] = {};
|
||||
isNewObject = true;
|
||||
} else {
|
||||
isNewObject = false;
|
||||
}
|
||||
|
||||
this._objects[objectPath][interfaceName] = proxy;
|
||||
|
||||
if (!this._interfaces[interfaceName])
|
||||
this._interfaces[interfaceName] = [];
|
||||
|
||||
this._interfaces[interfaceName].push(proxy);
|
||||
|
||||
if (isNewObject)
|
||||
this.emit('object-added', objectPath);
|
||||
|
||||
this.emit('interface-added', interfaceName, proxy);
|
||||
|
||||
if (onFinished)
|
||||
onFinished();
|
||||
return;
|
||||
}
|
||||
|
||||
let isNewObject;
|
||||
if (!this._objects[objectPath]) {
|
||||
this._objects[objectPath] = {};
|
||||
isNewObject = true;
|
||||
} else {
|
||||
isNewObject = false;
|
||||
}
|
||||
|
||||
this._objects[objectPath][interfaceName] = proxy;
|
||||
|
||||
if (!this._interfaces[interfaceName])
|
||||
this._interfaces[interfaceName] = [];
|
||||
|
||||
this._interfaces[interfaceName].push(proxy);
|
||||
|
||||
if (isNewObject)
|
||||
this.emit('object-added', objectPath);
|
||||
|
||||
this.emit('interface-added', interfaceName, proxy);
|
||||
|
||||
if (onFinished)
|
||||
onFinished();
|
||||
});
|
||||
}
|
||||
|
||||
_removeInterface(objectPath, interfaceName) {
|
||||
@ -147,10 +151,9 @@ var ObjectManager = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _initManagerProxy() {
|
||||
_onManagerProxyLoaded(initable, result) {
|
||||
try {
|
||||
await this._managerProxy.init_async(
|
||||
GLib.PRIORITY_DEFAULT, this._cancellable);
|
||||
initable.init_finish(result);
|
||||
} catch (e) {
|
||||
logError(e, `could not initialize object manager for object ${this._serviceName}`);
|
||||
|
||||
|
@ -83,13 +83,17 @@ const SystemActions = GObject.registerClass({
|
||||
this._canHavePowerOff = true;
|
||||
this._canHaveSuspend = true;
|
||||
|
||||
function tokenizeKeywords(keywords) {
|
||||
return keywords.split(';').map(keyword => GLib.str_tokenize_and_fold(keyword, null)).flat(2);
|
||||
}
|
||||
|
||||
this._actions = new Map();
|
||||
this._actions.set(POWER_OFF_ACTION_ID, {
|
||||
// Translators: The name of the power-off action in search
|
||||
name: C_("search-result", "Power Off"),
|
||||
iconName: 'system-shutdown-symbolic',
|
||||
// Translators: A list of keywords that match the power-off action, separated by semicolons
|
||||
keywords: _('power off;shutdown;reboot;restart;halt;stop').split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('power off;shutdown;reboot;restart;halt;stop')),
|
||||
available: false,
|
||||
});
|
||||
this._actions.set(LOCK_SCREEN_ACTION_ID, {
|
||||
@ -97,7 +101,7 @@ const SystemActions = GObject.registerClass({
|
||||
name: C_("search-result", "Lock Screen"),
|
||||
iconName: 'system-lock-screen-symbolic',
|
||||
// Translators: A list of keywords that match the lock screen action, separated by semicolons
|
||||
keywords: _("lock screen").split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('lock screen')),
|
||||
available: false,
|
||||
});
|
||||
this._actions.set(LOGOUT_ACTION_ID, {
|
||||
@ -105,7 +109,7 @@ const SystemActions = GObject.registerClass({
|
||||
name: C_("search-result", "Log Out"),
|
||||
iconName: 'application-exit-symbolic',
|
||||
// Translators: A list of keywords that match the logout action, separated by semicolons
|
||||
keywords: _("logout;log out;sign off").split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('logout;log out;sign off')),
|
||||
available: false,
|
||||
});
|
||||
this._actions.set(SUSPEND_ACTION_ID, {
|
||||
@ -113,7 +117,7 @@ const SystemActions = GObject.registerClass({
|
||||
name: C_("search-result", "Suspend"),
|
||||
iconName: 'media-playback-pause-symbolic',
|
||||
// Translators: A list of keywords that match the suspend action, separated by semicolons
|
||||
keywords: _("suspend;sleep").split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('suspend;sleep')),
|
||||
available: false,
|
||||
});
|
||||
this._actions.set(SWITCH_USER_ACTION_ID, {
|
||||
@ -121,14 +125,14 @@ const SystemActions = GObject.registerClass({
|
||||
name: C_("search-result", "Switch User"),
|
||||
iconName: 'system-switch-user-symbolic',
|
||||
// Translators: A list of keywords that match the switch user action, separated by semicolons
|
||||
keywords: _("switch user").split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('switch user')),
|
||||
available: false,
|
||||
});
|
||||
this._actions.set(LOCK_ORIENTATION_ACTION_ID, {
|
||||
name: '',
|
||||
iconName: '',
|
||||
// Translators: A list of keywords that match the lock orientation action, separated by semicolons
|
||||
keywords: _("lock orientation;unlock orientation;screen;rotation").split(/[; ]/),
|
||||
keywords: tokenizeKeywords(_('lock orientation;unlock orientation;screen;rotation')),
|
||||
available: false,
|
||||
});
|
||||
|
||||
@ -277,7 +281,7 @@ const SystemActions = GObject.registerClass({
|
||||
|
||||
getMatchingActions(terms) {
|
||||
// terms is a list of strings
|
||||
terms = terms.map(term => term.toLowerCase());
|
||||
terms = terms.map(term => GLib.str_tokenize_and_fold(term, null)[0]);
|
||||
|
||||
let results = [];
|
||||
|
||||
|
@ -7,8 +7,6 @@ const PermissionStore = imports.misc.permissionStore;
|
||||
|
||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||
|
||||
Gio._promisify(Geoclue.Simple, 'new', 'new_finish');
|
||||
|
||||
const WeatherIntegrationIface = loadInterfaceXML('org.gnome.Shell.WeatherIntegration');
|
||||
|
||||
const WEATHER_BUS_NAME = 'org.gnome.Weather';
|
||||
@ -81,7 +79,16 @@ var WeatherClient = class {
|
||||
this._weatherApp = null;
|
||||
this._weatherProxy = null;
|
||||
|
||||
this._createWeatherProxy();
|
||||
let nodeInfo = Gio.DBusNodeInfo.new_for_xml(WeatherIntegrationIface);
|
||||
Gio.DBusProxy.new(
|
||||
Gio.DBus.session,
|
||||
Gio.DBusProxyFlags.DO_NOT_AUTO_START | Gio.DBusProxyFlags.GET_INVALIDATED_PROPERTIES,
|
||||
nodeInfo.lookup_interface(WEATHER_INTEGRATION_IFACE),
|
||||
WEATHER_BUS_NAME,
|
||||
WEATHER_OBJECT_PATH,
|
||||
WEATHER_INTEGRATION_IFACE,
|
||||
null,
|
||||
this._onWeatherProxyReady.bind(this));
|
||||
|
||||
this._settings = new Gio.Settings({
|
||||
schema_id: 'org.gnome.shell.weather',
|
||||
@ -139,17 +146,9 @@ var WeatherClient = class {
|
||||
(!this._needsAuth || this._weatherAuthorized);
|
||||
}
|
||||
|
||||
async _createWeatherProxy() {
|
||||
const nodeInfo = Gio.DBusNodeInfo.new_for_xml(WeatherIntegrationIface);
|
||||
_onWeatherProxyReady(o, res) {
|
||||
try {
|
||||
this._weatherProxy = await Gio.DBusProxy.new(
|
||||
Gio.DBus.session,
|
||||
Gio.DBusProxyFlags.DO_NOT_AUTO_START | Gio.DBusProxyFlags.GET_INVALIDATED_PROPERTIES,
|
||||
nodeInfo.lookup_interface(WEATHER_INTEGRATION_IFACE),
|
||||
WEATHER_BUS_NAME,
|
||||
WEATHER_OBJECT_PATH,
|
||||
WEATHER_INTEGRATION_IFACE,
|
||||
null);
|
||||
this._weatherProxy = Gio.DBusProxy.new_finish(res);
|
||||
} catch (e) {
|
||||
log(`Failed to create GNOME Weather proxy: ${e}`);
|
||||
return;
|
||||
@ -240,23 +239,25 @@ var WeatherClient = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _startGClueService() {
|
||||
_startGClueService() {
|
||||
if (this._gclueStarting)
|
||||
return;
|
||||
|
||||
this._gclueStarting = true;
|
||||
|
||||
try {
|
||||
this._gclueService = await Geoclue.Simple.new(
|
||||
'org.gnome.Shell', Geoclue.AccuracyLevel.CITY, null);
|
||||
} catch (e) {
|
||||
log(`Failed to connect to Geoclue2 service: ${e.message}`);
|
||||
this._setLocation(this._mostRecentLocation);
|
||||
return;
|
||||
}
|
||||
this._gclueStarted = true;
|
||||
this._gclueService.get_client().distance_threshold = 100;
|
||||
this._updateLocationMonitoring();
|
||||
Geoclue.Simple.new('org.gnome.Shell', Geoclue.AccuracyLevel.CITY, null,
|
||||
(o, res) => {
|
||||
try {
|
||||
this._gclueService = Geoclue.Simple.new_finish(res);
|
||||
} catch (e) {
|
||||
log(`Failed to connect to Geoclue2 service: ${e.message}`);
|
||||
this._setLocation(this._mostRecentLocation);
|
||||
return;
|
||||
}
|
||||
this._gclueStarted = true;
|
||||
this._gclueService.get_client().distance_threshold = 100;
|
||||
this._updateLocationMonitoring();
|
||||
});
|
||||
}
|
||||
|
||||
_onGClueLocationChanged() {
|
||||
|
@ -1060,25 +1060,25 @@ class WindowSwitcher extends SwitcherPopup.SwitcherList {
|
||||
vfunc_allocate(box, flags) {
|
||||
let themeNode = this.get_theme_node();
|
||||
let contentBox = themeNode.get_content_box(box);
|
||||
const labelHeight = this._label.height;
|
||||
const totalLabelHeight =
|
||||
labelHeight + themeNode.get_padding(St.Side.BOTTOM);
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
childBox.x1 = contentBox.x1;
|
||||
childBox.x2 = contentBox.x2;
|
||||
childBox.y2 = contentBox.y2;
|
||||
childBox.y1 = childBox.y2 - this._label.height;
|
||||
this._label.allocate(childBox, flags);
|
||||
|
||||
let totalLabelHeight = this._label.height + themeNode.get_padding(St.Side.BOTTOM);
|
||||
childBox.x1 = box.x1;
|
||||
childBox.x2 = box.x2;
|
||||
childBox.y1 = box.y1;
|
||||
childBox.y2 = box.y2 - totalLabelHeight;
|
||||
super.vfunc_allocate(childBox, flags);
|
||||
box.y2 -= totalLabelHeight;
|
||||
super.vfunc_allocate(box, flags);
|
||||
|
||||
// Hooking up the parent vfunc will call this.set_allocation() with
|
||||
// the height without the label height, so call it again with the
|
||||
// correct size here.
|
||||
box.y2 += totalLabelHeight;
|
||||
this.set_allocation(box, flags);
|
||||
|
||||
const childBox = new Clutter.ActorBox();
|
||||
childBox.x1 = contentBox.x1;
|
||||
childBox.x2 = contentBox.x2;
|
||||
childBox.y2 = contentBox.y2;
|
||||
childBox.y1 = childBox.y2 - labelHeight;
|
||||
this._label.allocate(childBox, flags);
|
||||
}
|
||||
|
||||
highlight(index, justOutline) {
|
||||
|
@ -15,8 +15,7 @@ class Animation extends St.Bin {
|
||||
const themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||
|
||||
super._init({
|
||||
width: width * themeContext.scale_factor,
|
||||
height: height * themeContext.scale_factor,
|
||||
style: `width: ${width}px; height: ${height}px;`,
|
||||
});
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
|
@ -114,7 +114,8 @@ function _findBestFolderName(apps) {
|
||||
}, commonCategories);
|
||||
|
||||
for (let category of commonCategories) {
|
||||
let translated = Shell.util_get_translated_folder_name(category);
|
||||
const directory = '%s.directory'.format(category);
|
||||
const translated = Shell.util_get_translated_folder_name(directory);
|
||||
if (translated !== null)
|
||||
return translated;
|
||||
}
|
||||
@ -2551,18 +2552,19 @@ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
|
||||
if (Shell.AppSystem.get_default().lookup_app('org.gnome.Software.desktop')) {
|
||||
this._appendSeparator();
|
||||
let item = this._appendMenuItem(_("Show Details"));
|
||||
item.connect('activate', async () => {
|
||||
item.connect('activate', () => {
|
||||
let id = this._source.app.get_id();
|
||||
let args = GLib.Variant.new('(ss)', [id, '']);
|
||||
const bus = await Gio.DBus.get(Gio.BusType.SESSION, null);
|
||||
bus.call(
|
||||
'org.gnome.Software',
|
||||
'/org/gnome/Software',
|
||||
'org.gtk.Actions', 'Activate',
|
||||
new GLib.Variant.new(
|
||||
'(sava{sv})', ['details', [args], null]),
|
||||
null, 0, -1, null);
|
||||
Main.overview.hide();
|
||||
Gio.DBus.get(Gio.BusType.SESSION, null, (o, res) => {
|
||||
let bus = Gio.DBus.get_finish(res);
|
||||
bus.call('org.gnome.Software',
|
||||
'/org/gnome/Software',
|
||||
'org.gtk.Actions', 'Activate',
|
||||
GLib.Variant.new('(sava{sv})',
|
||||
['details', [args], null]),
|
||||
null, 0, -1, null);
|
||||
Main.overview.hide();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -197,6 +197,11 @@ var BoxPointer = GObject.registerClass({
|
||||
}
|
||||
|
||||
vfunc_allocate(box, flags) {
|
||||
if (this._sourceActor && this._sourceActor.mapped) {
|
||||
this._reposition(box);
|
||||
this._updateFlip(box);
|
||||
}
|
||||
|
||||
this.set_allocation(box, flags);
|
||||
|
||||
let themeNode = this.get_theme_node();
|
||||
@ -230,12 +235,6 @@ var BoxPointer = GObject.registerClass({
|
||||
break;
|
||||
}
|
||||
this.bin.allocate(childBox, flags);
|
||||
|
||||
if (this._sourceActor && this._sourceActor.mapped) {
|
||||
this._reposition(box);
|
||||
this._updateFlip(box);
|
||||
this.set_allocation(box, flags);
|
||||
}
|
||||
}
|
||||
|
||||
_drawBorder(area) {
|
||||
|
@ -199,47 +199,46 @@ class DBusEventSource extends EventSourceBase {
|
||||
|
||||
this._initialized = false;
|
||||
this._dbusProxy = new CalendarServer();
|
||||
this._initProxy();
|
||||
}
|
||||
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, (object, result) => {
|
||||
let loaded = false;
|
||||
|
||||
async _initProxy() {
|
||||
let loaded = false;
|
||||
|
||||
try {
|
||||
await this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null);
|
||||
loaded = true;
|
||||
} catch (e) {
|
||||
// Ignore timeouts and install signals as normal, because with high
|
||||
// probability the service will appear later on, and we will get a
|
||||
// NameOwnerChanged which will finish loading
|
||||
//
|
||||
// (But still _initialized to false, because the proxy does not know
|
||||
// about the HasCalendars property and would cause an exception trying
|
||||
// to read it)
|
||||
if (!e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
|
||||
log('Error loading calendars: %s'.format(e.message));
|
||||
return;
|
||||
try {
|
||||
this._dbusProxy.init_finish(result);
|
||||
loaded = true;
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
|
||||
// Ignore timeouts and install signals as normal, because with high
|
||||
// probability the service will appear later on, and we will get a
|
||||
// NameOwnerChanged which will finish loading
|
||||
//
|
||||
// (But still _initialized to false, because the proxy does not know
|
||||
// about the HasCalendars property and would cause an exception trying
|
||||
// to read it)
|
||||
} else {
|
||||
log('Error loading calendars: %s'.format(e.message));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._dbusProxy.connectSignal('Changed', this._onChanged.bind(this));
|
||||
this._dbusProxy.connectSignal('Changed', this._onChanged.bind(this));
|
||||
|
||||
this._dbusProxy.connect('notify::g-name-owner', () => {
|
||||
if (this._dbusProxy.g_name_owner)
|
||||
this._dbusProxy.connect('notify::g-name-owner', () => {
|
||||
if (this._dbusProxy.g_name_owner)
|
||||
this._onNameAppeared();
|
||||
else
|
||||
this._onNameVanished();
|
||||
});
|
||||
|
||||
this._dbusProxy.connect('g-properties-changed', () => {
|
||||
this.notify('has-calendars');
|
||||
});
|
||||
|
||||
this._initialized = loaded;
|
||||
if (loaded) {
|
||||
this.notify('has-calendars');
|
||||
this._onNameAppeared();
|
||||
else
|
||||
this._onNameVanished();
|
||||
}
|
||||
});
|
||||
|
||||
this._dbusProxy.connect('g-properties-changed', () => {
|
||||
this.notify('has-calendars');
|
||||
});
|
||||
|
||||
this._initialized = loaded;
|
||||
if (loaded) {
|
||||
this.notify('has-calendars');
|
||||
this._onNameAppeared();
|
||||
}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
|
@ -10,7 +10,6 @@ const MessageTray = imports.ui.messageTray;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
|
||||
Gio._promisify(Shell.NetworkAgent.prototype, 'init_async', 'init_finish');
|
||||
Gio._promisify(Shell.NetworkAgent.prototype,
|
||||
'search_vpn_plugin', 'search_vpn_plugin_finish');
|
||||
|
||||
@ -483,37 +482,39 @@ var VPNRequestHandler = class {
|
||||
}
|
||||
}
|
||||
|
||||
async _readStdoutOldStyle() {
|
||||
const [line, len_] =
|
||||
await this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null);
|
||||
_readStdoutOldStyle() {
|
||||
this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null, (stream, result) => {
|
||||
let [line, len_] = this._dataStdout.read_line_finish_utf8(result);
|
||||
|
||||
if (line === null) {
|
||||
// end of file
|
||||
this._stdout.close(null);
|
||||
return;
|
||||
}
|
||||
if (line == null) {
|
||||
// end of file
|
||||
this._stdout.close(null);
|
||||
return;
|
||||
}
|
||||
|
||||
this._vpnChildProcessLineOldStyle(line);
|
||||
this._vpnChildProcessLineOldStyle(line);
|
||||
|
||||
// try to read more!
|
||||
this._readStdoutOldStyle();
|
||||
// try to read more!
|
||||
this._readStdoutOldStyle();
|
||||
});
|
||||
}
|
||||
|
||||
async _readStdoutNewStyle() {
|
||||
const cnt =
|
||||
await this._dataStdout.fill_async(-1, GLib.PRIORITY_DEFAULT, null);
|
||||
_readStdoutNewStyle() {
|
||||
this._dataStdout.fill_async(-1, GLib.PRIORITY_DEFAULT, null, (stream, result) => {
|
||||
let cnt = this._dataStdout.fill_finish(result);
|
||||
|
||||
if (cnt === 0) {
|
||||
// end of file
|
||||
this._showNewStyleDialog();
|
||||
if (cnt == 0) {
|
||||
// end of file
|
||||
this._showNewStyleDialog();
|
||||
|
||||
this._stdout.close(null);
|
||||
return;
|
||||
}
|
||||
this._stdout.close(null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to read more
|
||||
this._dataStdout.set_buffer_size(2 * this._dataStdout.get_buffer_size());
|
||||
this._readStdoutNewStyle();
|
||||
// Try to read more
|
||||
this._dataStdout.set_buffer_size(2 * this._dataStdout.get_buffer_size());
|
||||
this._readStdoutNewStyle();
|
||||
});
|
||||
}
|
||||
|
||||
_showNewStyleDialog() {
|
||||
@ -620,17 +621,15 @@ var NetworkAgent = class {
|
||||
this._native.connect('cancel-request', this._cancelRequest.bind(this));
|
||||
|
||||
this._initialized = false;
|
||||
this._initNative();
|
||||
}
|
||||
|
||||
async _initNative() {
|
||||
try {
|
||||
await this._native.init_async(GLib.PRIORITY_DEFAULT, null);
|
||||
this._initialized = true;
|
||||
} catch (e) {
|
||||
this._native = null;
|
||||
logError(e, 'error initializing the NetworkManager Agent');
|
||||
}
|
||||
this._native.init_async(GLib.PRIORITY_DEFAULT, null, (o, res) => {
|
||||
try {
|
||||
this._native.init_finish(res);
|
||||
this._initialized = true;
|
||||
} catch (e) {
|
||||
this._native = null;
|
||||
logError(e, 'error initializing the NetworkManager Agent');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
enable() {
|
||||
|
@ -327,6 +327,8 @@ var AuthenticationDialog = GObject.registerClass({
|
||||
}
|
||||
|
||||
let resetDialog = () => {
|
||||
this._sessionRequestTimeoutId = 0;
|
||||
|
||||
if (this.state != ModalDialog.State.OPENED)
|
||||
return;
|
||||
|
||||
|
@ -7,14 +7,6 @@ var Tpl = null;
|
||||
var Tp = null;
|
||||
try {
|
||||
({ TelepathyGLib: Tp, TelepathyLogger: Tpl } = imports.gi);
|
||||
|
||||
Gio._promisify(Tp.Channel.prototype, 'close_async', 'close_finish');
|
||||
Gio._promisify(Tp.Channel.prototype,
|
||||
'send_message_async', 'send_message_finish');
|
||||
Gio._promisify(Tp.ChannelDispatchOperation.prototype,
|
||||
'claim_with_async', 'claim_with_finish');
|
||||
Gio._promisify(Tpl.LogManager.prototype,
|
||||
'get_filtered_events_async', 'get_filtered_events_finish');
|
||||
} catch (e) {
|
||||
log('Telepathy is not available, chat integration will be disabled.');
|
||||
}
|
||||
@ -223,7 +215,7 @@ class TelepathyClient extends Tp.BaseClient {
|
||||
|
||||
// We can only handle text channel, so close any other channel
|
||||
if (!(channel instanceof Tp.TextChannel)) {
|
||||
channel.close_async();
|
||||
channel.close_async(null);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -269,7 +261,7 @@ class TelepathyClient extends Tp.BaseClient {
|
||||
}
|
||||
}
|
||||
|
||||
async _approveTextChannel(account, conn, channel, dispatchOp, context) {
|
||||
_approveTextChannel(account, conn, channel, dispatchOp, context) {
|
||||
let [targetHandle_, targetHandleType] = channel.get_handle();
|
||||
|
||||
if (targetHandleType != Tp.HandleType.CONTACT) {
|
||||
@ -278,15 +270,17 @@ class TelepathyClient extends Tp.BaseClient {
|
||||
return;
|
||||
}
|
||||
|
||||
context.accept();
|
||||
|
||||
// Approve private text channels right away as we are going to handle it
|
||||
try {
|
||||
await dispatchOp.claim_with_async(this);
|
||||
this._handlingChannels(account, conn, [channel], false);
|
||||
} catch (err) {
|
||||
log('Failed to Claim channel: %s'.format(err.toString()));
|
||||
}
|
||||
dispatchOp.claim_with_async(this, (o, result) => {
|
||||
try {
|
||||
dispatchOp.claim_with_finish(result);
|
||||
this._handlingChannels(account, conn, [channel], false);
|
||||
} catch (err) {
|
||||
log('Failed to Claim channel: %s'.format(err.toString()));
|
||||
}
|
||||
});
|
||||
|
||||
context.accept();
|
||||
}
|
||||
|
||||
_delegatedChannelsCb(_client, _channels) {
|
||||
@ -447,14 +441,17 @@ class ChatSource extends MessageTray.Source {
|
||||
}
|
||||
}
|
||||
|
||||
async _getLogMessages() {
|
||||
_getLogMessages() {
|
||||
let logManager = Tpl.LogManager.dup_singleton();
|
||||
let entity = Tpl.Entity.new_from_tp_contact(this._contact, Tpl.EntityType.CONTACT);
|
||||
|
||||
const [events] = await logManager.get_filtered_events_async(
|
||||
this._account, entity,
|
||||
Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES,
|
||||
null);
|
||||
logManager.get_filtered_events_async(this._account, entity,
|
||||
Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES,
|
||||
null, this._displayPendingMessages.bind(this));
|
||||
}
|
||||
|
||||
_displayPendingMessages(logManager, result) {
|
||||
let [success_, events] = logManager.get_filtered_events_finish(result);
|
||||
|
||||
let logMessages = events.map(e => ChatMessage.newFromTplTextEvent(e));
|
||||
this._ensureNotification();
|
||||
@ -512,7 +509,9 @@ class ChatSource extends MessageTray.Source {
|
||||
this._ackMessages();
|
||||
// The chat box has been destroyed so it can't
|
||||
// handle the channel any more.
|
||||
this._channel.close_async();
|
||||
this._channel.close_async((channel, result) => {
|
||||
channel.close_finish(result);
|
||||
});
|
||||
} else {
|
||||
// Don't indicate any unread messages when the notification
|
||||
// that represents them has been destroyed.
|
||||
@ -610,7 +609,9 @@ class ChatSource extends MessageTray.Source {
|
||||
}
|
||||
|
||||
let msg = Tp.ClientMessage.new_text(type, text);
|
||||
this._channel.send_message_async(msg, 0);
|
||||
this._channel.send_message_async(msg, 0, (src, result) => {
|
||||
this._channel.send_message_finish(result);
|
||||
});
|
||||
}
|
||||
|
||||
setChatState(state) {
|
||||
|
@ -278,7 +278,7 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog');
|
||||
}
|
||||
|
||||
async _onPkOfflineProxyCreated(proxy, error) {
|
||||
_onPkOfflineProxyCreated(proxy, error) {
|
||||
if (error) {
|
||||
log(error.message);
|
||||
return;
|
||||
@ -293,12 +293,15 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
}
|
||||
|
||||
// It only makes sense to check for this permission if PackageKit is available.
|
||||
try {
|
||||
this._updatesPermission = await Polkit.Permission.new(
|
||||
'org.freedesktop.packagekit.trigger-offline-update', null, null);
|
||||
} catch (e) {
|
||||
log('No permission to trigger offline updates: %s'.format(e.toString()));
|
||||
}
|
||||
Polkit.Permission.new(
|
||||
'org.freedesktop.packagekit.trigger-offline-update', null, null,
|
||||
(source, res) => {
|
||||
try {
|
||||
this._updatesPermission = Polkit.Permission.new_finish(res);
|
||||
} catch (e) {
|
||||
log('No permission to trigger offline updates: %s'.format(e.toString()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
@ -677,7 +680,7 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
|
||||
|
||||
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || '');
|
||||
this._checkBox.visible = dialogContent.checkBoxText && updatePrepared && updatesAllowed;
|
||||
this._checkBox.checked = this._checkBox.visible;
|
||||
this._checkBox.checked = updatePrepared && updateTriggered;
|
||||
|
||||
// We show the warning either together with the checkbox, or when
|
||||
// updates have already been triggered, but the user doesn't have
|
||||
|
@ -10,20 +10,11 @@ imports.gi.versions.Gtk = '3.0';
|
||||
imports.gi.versions.TelepathyGLib = '0.12';
|
||||
imports.gi.versions.TelepathyLogger = '0.2';
|
||||
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Polkit, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Gettext = imports.gettext;
|
||||
const System = imports.system;
|
||||
|
||||
Gio._promisify(Gio.DataInputStream.prototype, 'fill_async', 'fill_finish');
|
||||
Gio._promisify(Gio.DataInputStream.prototype,
|
||||
'read_line_async', 'read_line_finish');
|
||||
Gio._promisify(Gio.DBus, 'get', 'get_finish');
|
||||
Gio._promisify(Gio.DBusConnection.prototype, 'call', 'call_finish');
|
||||
Gio._promisify(Gio.DBusProxy, 'new', 'new_finish');
|
||||
Gio._promisify(Gio.DBusProxy.prototype, 'init_async', 'init_finish');
|
||||
Gio._promisify(Gio.DBusProxy.prototype,
|
||||
'call_with_unix_fd_list', 'call_with_unix_fd_list_finish');
|
||||
Gio._promisify(Polkit.Permission, 'new', 'new_finish');
|
||||
|
||||
let _localTimeZone = null;
|
||||
|
||||
|
@ -229,7 +229,8 @@ var ExtensionManager = class {
|
||||
null,
|
||||
Gio.DBusCallFlags.NONE,
|
||||
-1,
|
||||
null);
|
||||
null,
|
||||
(conn, res) => conn.call_finish(res));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -114,11 +114,8 @@ class BaseIcon extends St.Bin {
|
||||
if (this._setSizeManually) {
|
||||
size = this.iconSize;
|
||||
} else {
|
||||
const { scaleFactor } =
|
||||
St.ThemeContext.get_for_stage(global.stage);
|
||||
|
||||
let [found, len] = node.lookup_length('icon-size', false);
|
||||
size = found ? len / scaleFactor : ICON_SIZE;
|
||||
size = found ? len : ICON_SIZE;
|
||||
}
|
||||
|
||||
if (this.iconSize == size && this._iconBin.child)
|
||||
|
@ -1257,6 +1257,10 @@ class Keyboard extends St.BoxLayout {
|
||||
return this._keyboardVisible && super.visible;
|
||||
}
|
||||
|
||||
set visible(visible) {
|
||||
super.visible = visible;
|
||||
}
|
||||
|
||||
_onFocusPositionChanged(focusTracker) {
|
||||
let rect = focusTracker.getCurrentRect();
|
||||
this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
|
||||
|
@ -521,7 +521,9 @@ function pushModal(actor, params) {
|
||||
let prevFocusDestroyId;
|
||||
if (prevFocus != null) {
|
||||
prevFocusDestroyId = prevFocus.connect('destroy', () => {
|
||||
let index = _findModal(actor);
|
||||
const index = modalActorFocusStack.findIndex(
|
||||
record => record.prevFocus === prevFocus);
|
||||
|
||||
if (index >= 0)
|
||||
modalActorFocusStack[index].prevFocus = null;
|
||||
});
|
||||
|
@ -473,6 +473,7 @@ class ControlsManager extends St.Widget {
|
||||
|
||||
// A workspace might have been inserted or removed before the active
|
||||
// one, causing the adjustment to go out of sync, so update the value
|
||||
this._workspaceAdjustment.remove_transition('value');
|
||||
this._workspaceAdjustment.value = activeIndex;
|
||||
}
|
||||
|
||||
|
@ -90,16 +90,18 @@ class AppMenu extends PopupMenu.PopupMenu {
|
||||
|
||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this._detailsItem = this.addAction(_('Show Details'), async () => {
|
||||
this._detailsItem = this.addAction(_("Show Details"), () => {
|
||||
let id = this._app.get_id();
|
||||
let args = GLib.Variant.new('(ss)', [id, '']);
|
||||
const bus = await Gio.DBus.get(Gio.BusType.SESSION, null);
|
||||
bus.call(
|
||||
'org.gnome.Software',
|
||||
'/org/gnome/Software',
|
||||
'org.gtk.Actions', 'Activate',
|
||||
new GLib.Variant('(sava{sv})', ['details', [args], null]),
|
||||
null, 0, -1, null);
|
||||
Gio.DBus.get(Gio.BusType.SESSION, null, (o, res) => {
|
||||
let bus = Gio.DBus.get_finish(res);
|
||||
bus.call('org.gnome.Software',
|
||||
'/org/gnome/Software',
|
||||
'org.gtk.Actions', 'Activate',
|
||||
GLib.Variant.new('(sava{sv})',
|
||||
['details', [args], null]),
|
||||
null, 0, -1, null);
|
||||
});
|
||||
});
|
||||
|
||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
@ -204,7 +204,7 @@ var RemoteSearchProvider = class {
|
||||
g_interface_info: proxyInfo,
|
||||
g_interface_name: proxyInfo.name,
|
||||
gFlags });
|
||||
this.proxy.init_async(GLib.PRIORITY_DEFAULT, null);
|
||||
this.proxy.init_async(GLib.PRIORITY_DEFAULT, null, null);
|
||||
|
||||
this.appInfo = appInfo;
|
||||
this.id = appInfo.get_id();
|
||||
|
@ -7,13 +7,6 @@ const GrabHelper = imports.ui.grabHelper;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
Gio._promisify(Shell.Screenshot.prototype, 'pick_color', 'pick_color_finish');
|
||||
Gio._promisify(Shell.Screenshot.prototype, 'screenshot', 'screenshot_finish');
|
||||
Gio._promisify(Shell.Screenshot.prototype,
|
||||
'screenshot_window', 'screenshot_window_finish');
|
||||
Gio._promisify(Shell.Screenshot.prototype,
|
||||
'screenshot_area', 'screenshot_area_finish');
|
||||
|
||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||
|
||||
const ScreenshotIface = loadInterfaceXML('org.gnome.Shell.Screenshot');
|
||||
@ -163,7 +156,7 @@ var ScreenshotService = class {
|
||||
return [x, y, width, height];
|
||||
}
|
||||
|
||||
async ScreenshotAreaAsync(params, invocation) {
|
||||
ScreenshotAreaAsync(params, invocation) {
|
||||
let [x, y, width, height, flash, filename] = params;
|
||||
[x, y, width, height] = this._scaleArea(x, y, width, height);
|
||||
if (!this._checkArea(x, y, width, height)) {
|
||||
@ -180,17 +173,21 @@ var ScreenshotService = class {
|
||||
if (!stream)
|
||||
return;
|
||||
|
||||
try {
|
||||
let [area] =
|
||||
await screenshot.screenshot_area(x, y, width, height, stream);
|
||||
this._onScreenshotComplete(area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
screenshot.screenshot_area(x, y, width, height, stream,
|
||||
(o, res) => {
|
||||
try {
|
||||
let [success_, area] =
|
||||
screenshot.screenshot_area_finish(res);
|
||||
this._onScreenshotComplete(
|
||||
area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async ScreenshotWindowAsync(params, invocation) {
|
||||
ScreenshotWindowAsync(params, invocation) {
|
||||
let [includeFrame, includeCursor, flash, filename] = params;
|
||||
let screenshot = this._createScreenshot(invocation);
|
||||
if (!screenshot)
|
||||
@ -200,17 +197,21 @@ var ScreenshotService = class {
|
||||
if (!stream)
|
||||
return;
|
||||
|
||||
try {
|
||||
let [area] =
|
||||
await screenshot.screenshot_window(includeFrame, includeCursor, stream);
|
||||
this._onScreenshotComplete(area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
screenshot.screenshot_window(includeFrame, includeCursor, stream,
|
||||
(o, res) => {
|
||||
try {
|
||||
let [success_, area] =
|
||||
screenshot.screenshot_window_finish(res);
|
||||
this._onScreenshotComplete(
|
||||
area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async ScreenshotAsync(params, invocation) {
|
||||
ScreenshotAsync(params, invocation) {
|
||||
let [includeCursor, flash, filename] = params;
|
||||
let screenshot = this._createScreenshot(invocation);
|
||||
if (!screenshot)
|
||||
@ -220,13 +221,18 @@ var ScreenshotService = class {
|
||||
if (!stream)
|
||||
return;
|
||||
|
||||
try {
|
||||
let [area] = await screenshot.screenshot(includeCursor, stream);
|
||||
this._onScreenshotComplete(area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
screenshot.screenshot(includeCursor, stream,
|
||||
(o, res) => {
|
||||
try {
|
||||
let [success_, area] =
|
||||
screenshot.screenshot_finish(res);
|
||||
this._onScreenshotComplete(
|
||||
area, stream, file, flash, invocation);
|
||||
} catch (e) {
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(new GLib.Variant('(bs)', [false, '']));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async SelectAreaAsync(params, invocation) {
|
||||
@ -267,17 +273,19 @@ var ScreenshotService = class {
|
||||
if (!screenshot)
|
||||
return;
|
||||
|
||||
const [color] = await screenshot.pick_color(coords.x, coords.y);
|
||||
const { red, green, blue } = color;
|
||||
const retval = GLib.Variant.new('(a{sv})', [{
|
||||
color: GLib.Variant.new('(ddd)', [
|
||||
red / 255.0,
|
||||
green / 255.0,
|
||||
blue / 255.0,
|
||||
]),
|
||||
}]);
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(retval);
|
||||
screenshot.pick_color(coords.x, coords.y, (_o, res) => {
|
||||
let [success_, color] = screenshot.pick_color_finish(res);
|
||||
let { red, green, blue } = color;
|
||||
let retval = GLib.Variant.new('(a{sv})', [{
|
||||
color: GLib.Variant.new('(ddd)', [
|
||||
red / 255.0,
|
||||
green / 255.0,
|
||||
blue / 255.0,
|
||||
]),
|
||||
}]);
|
||||
this._removeShooterForSender(invocation.get_sender());
|
||||
invocation.return_value(retval);
|
||||
});
|
||||
} catch (e) {
|
||||
invocation.return_error_literal(
|
||||
Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,
|
||||
|
@ -72,45 +72,46 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
return null;
|
||||
}
|
||||
|
||||
_getDeviceInfos(adapter) {
|
||||
// nDevices is the number of devices setup for the current default
|
||||
// adapter if one exists and is powered. If unpowered or unavailable,
|
||||
// nDevice is "1" if it had setup devices associated to it the last
|
||||
// time it was seen, and "-1" if not.
|
||||
//
|
||||
// nConnectedDevices is the number of devices connected to the default
|
||||
// adapter if one exists and is powered, or -1 if it's not available.
|
||||
_getNDevices() {
|
||||
let adapter = this._getDefaultAdapter();
|
||||
if (!adapter)
|
||||
return [];
|
||||
return [this._hadSetupDevices ? 1 : -1, -1];
|
||||
|
||||
let deviceInfos = [];
|
||||
let nConnectedDevices = 0;
|
||||
let nDevices = 0;
|
||||
let [ret, iter] = this._model.iter_children(adapter);
|
||||
while (ret) {
|
||||
const isPaired = this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.PAIRED);
|
||||
const isTrusted = this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.TRUSTED);
|
||||
|
||||
if (isPaired || isTrusted) {
|
||||
deviceInfos.push({
|
||||
connected: this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.CONNECTED),
|
||||
name: this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.ALIAS),
|
||||
});
|
||||
}
|
||||
let isConnected = this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.CONNECTED);
|
||||
if (isConnected)
|
||||
nConnectedDevices++;
|
||||
|
||||
let isPaired = this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.PAIRED);
|
||||
let isTrusted = this._model.get_value(iter,
|
||||
GnomeBluetooth.Column.TRUSTED);
|
||||
if (isPaired || isTrusted)
|
||||
nDevices++;
|
||||
ret = this._model.iter_next(iter);
|
||||
}
|
||||
|
||||
if (this._hadSetupDevices !== (deviceInfos.length > 0)) {
|
||||
if (this._hadSetupDevices != (nDevices > 0)) {
|
||||
this._hadSetupDevices = !this._hadSetupDevices;
|
||||
global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
|
||||
}
|
||||
|
||||
return deviceInfos;
|
||||
return [nDevices, nConnectedDevices];
|
||||
}
|
||||
|
||||
_sync() {
|
||||
let adapter = this._getDefaultAdapter();
|
||||
let devices = this._getDeviceInfos(adapter);
|
||||
const connectedDevices = devices.filter(dev => dev.connected);
|
||||
const nConnectedDevices = connectedDevices.length;
|
||||
const nDevices = devices.length;
|
||||
|
||||
let [nDevices, nConnectedDevices] = this._getNDevices();
|
||||
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
||||
|
||||
this.menu.setSensitive(sensitive);
|
||||
@ -123,16 +124,14 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
else
|
||||
this._item.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
|
||||
|
||||
if (nConnectedDevices > 1)
|
||||
if (nConnectedDevices > 0)
|
||||
/* Translators: this is the number of connected bluetooth devices */
|
||||
this._item.label.text = ngettext('%d Connected", "%d Connected', nConnectedDevices).format(nConnectedDevices);
|
||||
else if (nConnectedDevices === 1)
|
||||
this._item.label.text = connectedDevices[0].name;
|
||||
else if (adapter === null)
|
||||
this._item.label.text = _('Bluetooth Off');
|
||||
this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
|
||||
else if (nConnectedDevices == -1)
|
||||
this._item.label.text = _("Off");
|
||||
else
|
||||
this._item.label.text = _('Bluetooth On');
|
||||
this._item.label.text = _("On");
|
||||
|
||||
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _('Turn On') : _('Turn Off');
|
||||
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
|
||||
}
|
||||
});
|
||||
|
@ -199,36 +199,36 @@ var InputSourceSystemSettings = class extends InputSourceSettings {
|
||||
this._reload.bind(this));
|
||||
}
|
||||
|
||||
async _reload() {
|
||||
let props;
|
||||
try {
|
||||
const result = await Gio.DBus.system.call(
|
||||
this._BUS_NAME,
|
||||
this._BUS_PATH,
|
||||
this._BUS_PROPS_IFACE,
|
||||
'GetAll',
|
||||
new GLib.Variant('(s)', [this._BUS_IFACE]),
|
||||
null, Gio.DBusCallFlags.NONE, -1, null);
|
||||
[props] = result.deep_unpack();
|
||||
} catch (e) {
|
||||
log('Could not get properties from %s'.format(this._BUS_NAME));
|
||||
return;
|
||||
}
|
||||
_reload() {
|
||||
Gio.DBus.system.call(this._BUS_NAME,
|
||||
this._BUS_PATH,
|
||||
this._BUS_PROPS_IFACE,
|
||||
'GetAll',
|
||||
new GLib.Variant('(s)', [this._BUS_IFACE]),
|
||||
null, Gio.DBusCallFlags.NONE, -1, null,
|
||||
(conn, result) => {
|
||||
let props;
|
||||
try {
|
||||
props = conn.call_finish(result).deep_unpack()[0];
|
||||
} catch (e) {
|
||||
log('Could not get properties from %s'.format(this._BUS_NAME));
|
||||
return;
|
||||
}
|
||||
let layouts = props['X11Layout'].unpack();
|
||||
let variants = props['X11Variant'].unpack();
|
||||
let options = props['X11Options'].unpack();
|
||||
|
||||
const layouts = props['X11Layout'].unpack();
|
||||
const variants = props['X11Variant'].unpack();
|
||||
const options = props['X11Options'].unpack();
|
||||
|
||||
if (layouts !== this._layouts ||
|
||||
variants !== this._variants) {
|
||||
this._layouts = layouts;
|
||||
this._variants = variants;
|
||||
this._emitInputSourcesChanged();
|
||||
}
|
||||
if (options !== this._options) {
|
||||
this._options = options;
|
||||
this._emitKeyboardOptionsChanged();
|
||||
}
|
||||
if (layouts != this._layouts ||
|
||||
variants != this._variants) {
|
||||
this._layouts = layouts;
|
||||
this._variants = variants;
|
||||
this._emitInputSourcesChanged();
|
||||
}
|
||||
if (options != this._options) {
|
||||
this._options = options;
|
||||
this._emitKeyboardOptionsChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
get inputSources() {
|
||||
|
@ -15,10 +15,6 @@ const Util = imports.misc.util;
|
||||
|
||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||
|
||||
Gio._promisify(NM.Client, 'new_async', 'new_finish');
|
||||
Gio._promisify(NM.Client.prototype,
|
||||
'check_connectivity_async', 'check_connectivity_finish');
|
||||
|
||||
const NMConnectionCategory = {
|
||||
INVALID: 'invalid',
|
||||
WIRED: 'wired',
|
||||
@ -1631,11 +1627,11 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
this._ctypes[NM.SETTING_GSM_SETTING_NAME] = NMConnectionCategory.WWAN;
|
||||
this._ctypes[NM.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN;
|
||||
|
||||
this._getClient();
|
||||
NM.Client.new_async(null, this._clientGot.bind(this));
|
||||
}
|
||||
|
||||
async _getClient() {
|
||||
this._client = await NM.Client.new_async(null);
|
||||
_clientGot(obj, result) {
|
||||
this._client = NM.Client.new_finish(result);
|
||||
|
||||
this._activeConnections = [];
|
||||
this._connections = [];
|
||||
@ -1986,7 +1982,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
}
|
||||
}
|
||||
|
||||
async _portalHelperDone(proxy, emitter, parameters) {
|
||||
_portalHelperDone(proxy, emitter, parameters) {
|
||||
let [path, result] = parameters;
|
||||
|
||||
if (result == PortalHelperResult.CANCELLED) {
|
||||
@ -1997,11 +1993,13 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
} else if (result == PortalHelperResult.COMPLETED) {
|
||||
this._closeConnectivityCheck(path);
|
||||
} else if (result == PortalHelperResult.RECHECK) {
|
||||
try {
|
||||
const state = await this._client.check_connectivity_async(null);
|
||||
if (state >= NM.ConnectivityState.FULL)
|
||||
this._closeConnectivityCheck(path);
|
||||
} catch (e) { }
|
||||
this._client.check_connectivity_async(null, (client, res) => {
|
||||
try {
|
||||
let state = client.check_connectivity_finish(res);
|
||||
if (state >= NM.ConnectivityState.FULL)
|
||||
this._closeConnectivityCheck(path);
|
||||
} catch (e) { }
|
||||
});
|
||||
} else {
|
||||
log('Invalid result from portal helper: %s'.format(result));
|
||||
}
|
||||
|
@ -52,21 +52,22 @@ const BOLT_DBUS_PATH = '/org/freedesktop/bolt';
|
||||
var Client = class {
|
||||
constructor() {
|
||||
this._proxy = null;
|
||||
let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface);
|
||||
Gio.DBusProxy.new(Gio.DBus.system,
|
||||
Gio.DBusProxyFlags.DO_NOT_AUTO_START,
|
||||
nodeInfo.lookup_interface(BOLT_DBUS_CLIENT_IFACE),
|
||||
BOLT_DBUS_NAME,
|
||||
BOLT_DBUS_PATH,
|
||||
BOLT_DBUS_CLIENT_IFACE,
|
||||
null,
|
||||
this._onProxyReady.bind(this));
|
||||
|
||||
this.probing = false;
|
||||
this._getProxy();
|
||||
}
|
||||
|
||||
async _getProxy() {
|
||||
let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface);
|
||||
_onProxyReady(o, res) {
|
||||
try {
|
||||
this._proxy = await Gio.DBusProxy.new(
|
||||
Gio.DBus.system,
|
||||
Gio.DBusProxyFlags.DO_NOT_AUTO_START,
|
||||
nodeInfo.lookup_interface(BOLT_DBUS_CLIENT_IFACE),
|
||||
BOLT_DBUS_NAME,
|
||||
BOLT_DBUS_PATH,
|
||||
BOLT_DBUS_CLIENT_IFACE,
|
||||
null);
|
||||
this._proxy = Gio.DBusProxy.new_finish(res);
|
||||
} catch (e) {
|
||||
log('error creating bolt proxy: %s'.format(e.message));
|
||||
return;
|
||||
@ -242,15 +243,14 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
|
||||
this._source = null;
|
||||
this._perm = null;
|
||||
this._createPermission();
|
||||
}
|
||||
|
||||
async _createPermission() {
|
||||
try {
|
||||
this._perm = await Polkit.Permission.new('org.freedesktop.bolt.enroll', null, null);
|
||||
} catch (e) {
|
||||
log('Failed to get PolKit permission: %s'.format(e.toString()));
|
||||
}
|
||||
Polkit.Permission.new('org.freedesktop.bolt.enroll', null, null, (source, res) => {
|
||||
try {
|
||||
this._perm = Polkit.Permission.new_finish(res);
|
||||
} catch (e) {
|
||||
log('Failed to get PolKit permission: %s'.format(e.toString()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
|
@ -605,7 +605,7 @@ var UnlockDialog = GObject.registerClass({
|
||||
this._showPrompt();
|
||||
|
||||
if (GLib.unichar_isgraph(unichar))
|
||||
this.addCharacter(unichar);
|
||||
this._authPrompt.addCharacter(unichar);
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
@ -835,11 +835,6 @@ var UnlockDialog = GObject.registerClass({
|
||||
this._authPrompt.cancel();
|
||||
}
|
||||
|
||||
addCharacter(unichar) {
|
||||
this._showPrompt();
|
||||
this._authPrompt.addCharacter(unichar);
|
||||
}
|
||||
|
||||
finish(onComplete) {
|
||||
this._ensureAuthPrompt();
|
||||
this._authPrompt.finish(onComplete);
|
||||
|
@ -82,8 +82,10 @@ class DisplayChangeDialog extends ModalDialog.ModalDialog {
|
||||
}
|
||||
|
||||
_formatCountDown() {
|
||||
let fmt = ngettext("Settings changes will revert in %d second",
|
||||
"Settings changes will revert in %d seconds");
|
||||
const fmt = ngettext(
|
||||
'Settings changes will revert in %d second',
|
||||
'Settings changes will revert in %d seconds',
|
||||
this._countDown);
|
||||
return fmt.format(this._countDown);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('gnome-shell', 'c',
|
||||
version: '3.37.0',
|
||||
version: '3.36.2',
|
||||
meson_version: '>= 0.47.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
|
457
po/cs.po
457
po/cs.po
@ -3,7 +3,7 @@
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Andre Klapper <ak-47@gmx.net>, 2009.
|
||||
# Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012, 2014, 2015.
|
||||
# Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012, 2014, 2015, 2020.
|
||||
# Adam Matoušek <adamatousek@gmail.com>, 2012, 2013.
|
||||
# Marek Černocký <marek@manet.cz>, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
|
||||
#
|
||||
@ -11,8 +11,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2020-03-09 12:45+0000\n"
|
||||
"PO-Revision-Date: 2020-03-09 14:56+0100\n"
|
||||
"POT-Creation-Date: 2020-04-22 12:52+0000\n"
|
||||
"PO-Revision-Date: 2020-04-27 16:42+0200\n"
|
||||
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
|
||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
@ -47,15 +47,6 @@ msgstr "Zobrazit všechny aplikace"
|
||||
msgid "Open the application menu"
|
||||
msgstr "Otevřít nabídku aplikací"
|
||||
|
||||
#: data/org.gnome.Extensions.desktop.in.in:4 js/extensionPrefs/main.js:218
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:61
|
||||
msgid "Extensions"
|
||||
msgstr "Rozšíření"
|
||||
|
||||
#: data/org.gnome.Extensions.desktop.in.in:7
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Nastavit rozšíření pro GNOME Shell"
|
||||
|
||||
#: data/org.gnome.Shell.desktop.in.in:4
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
@ -249,7 +240,7 @@ msgstr "Klávesová zkratka otevírající přehled"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:135
|
||||
msgid "Keybinding to open the Activities Overview."
|
||||
msgstr "Klávesová zkratka sloužící k otevření přehledu činností"
|
||||
msgstr "Klávesová zkratka sloužící k otevření přehledu činností."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:141
|
||||
msgid "Keybinding to toggle the visibility of the notification list"
|
||||
@ -306,7 +297,7 @@ msgstr "Přepnout do aplikace 9"
|
||||
#: data/org.gnome.shell.gschema.xml.in:196
|
||||
#: data/org.gnome.shell.gschema.xml.in:223
|
||||
msgid "Limit switcher to current workspace."
|
||||
msgstr "Omezit přepínání jen na aktuální plochu"
|
||||
msgstr "Omezit přepínání jen na aktuální plochu."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:197
|
||||
msgid ""
|
||||
@ -318,7 +309,7 @@ msgstr ""
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:214
|
||||
msgid "The application icon mode."
|
||||
msgstr "Režim ikon aplikací"
|
||||
msgstr "Režim ikon aplikací."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:215
|
||||
msgid ""
|
||||
@ -373,7 +364,7 @@ msgstr "Modální dialogová okna připojovat k rodičovskému oknu"
|
||||
#: data/org.gnome.shell.gschema.xml.in:300
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
msgstr "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter"
|
||||
msgstr "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:275
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
@ -395,44 +386,12 @@ msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukaza
|
||||
msgid "Network Login"
|
||||
msgstr "Přihlášení do sítě"
|
||||
|
||||
#: js/extensionPrefs/main.js:140
|
||||
#, javascript-format
|
||||
msgid "Remove “%s”?"
|
||||
msgstr "Odebrat „%s“?"
|
||||
|
||||
#: js/extensionPrefs/main.js:141
|
||||
msgid ""
|
||||
"If you remove the extension, you need to return to download it if you want "
|
||||
"to enable it again"
|
||||
msgstr ""
|
||||
"Pokud rozšíření odeberete a budete jej chtít znovu povolit, budete se muset "
|
||||
"vrátit k jeho stažení."
|
||||
|
||||
#: js/extensionPrefs/main.js:144 js/gdm/authPrompt.js:135
|
||||
#: js/ui/audioDeviceSelection.js:57 js/ui/components/networkAgent.js:107
|
||||
#: js/ui/components/polkitAgent.js:139 js/ui/endSessionDialog.js:374
|
||||
#: js/ui/extensionDownloader.js:165 js/ui/shellMountOperation.js:376
|
||||
#: js/ui/shellMountOperation.js:386 js/ui/status/network.js:913
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: js/extensionPrefs/main.js:145
|
||||
msgid "Remove"
|
||||
msgstr "Odebrat"
|
||||
|
||||
#: js/extensionPrefs/main.js:217
|
||||
msgid "translator-credits"
|
||||
msgstr "Marek Černocký <marek@manet.cz>"
|
||||
|
||||
#: js/extensionPrefs/main.js:219
|
||||
msgid "Manage your GNOME Extensions"
|
||||
msgstr "Správa vašich rozšíření GNOME"
|
||||
|
||||
#: js/extensionPrefs/main.js:261 js/extensionPrefs/ui/extensions-window.ui:222
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:36
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:224
|
||||
msgid "Something’s gone wrong"
|
||||
msgstr "Něco se stalo špatně"
|
||||
|
||||
#: js/extensionPrefs/main.js:268
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:48
|
||||
msgid ""
|
||||
"We’re very sorry, but there’s been a problem: the settings for this "
|
||||
"extension can’t be displayed. We recommend that you report the issue to the "
|
||||
@ -441,112 +400,31 @@ msgstr ""
|
||||
"Omlouváme se, ale vyskytl se problém: nastavení pro toto rozšíření nelze "
|
||||
"zobrazit. Doporučujeme problém nahlásit autorovi rozšíření."
|
||||
|
||||
#: js/extensionPrefs/main.js:275
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:82
|
||||
msgid "Technical Details"
|
||||
msgstr "Technické podrobnosti"
|
||||
|
||||
#: js/extensionPrefs/main.js:310
|
||||
msgid "Copy Error"
|
||||
msgstr "Zkopírovat chybu"
|
||||
|
||||
#: js/extensionPrefs/main.js:337
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:165
|
||||
msgid "Homepage"
|
||||
msgstr "Domovská stránka"
|
||||
|
||||
#: js/extensionPrefs/main.js:338
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:166
|
||||
msgid "Visit extension homepage"
|
||||
msgstr "Navštívit domovskou stránku rozšíření"
|
||||
|
||||
#: js/extensionPrefs/main.js:449
|
||||
#, javascript-format
|
||||
msgid "%d extension will be updated on next login."
|
||||
msgid_plural "%d extensions will be updated on next login."
|
||||
msgstr[0] "Při příštím přihlášení bude aktualizováno %d rozšíření."
|
||||
msgstr[1] "Při příštím přihlášení budou aktualizována %d rozšíření."
|
||||
msgstr[2] "Při příštím přihlášení bude aktualizováno %d rozšíření."
|
||||
|
||||
#: js/extensionPrefs/ui/extension-row.ui:100
|
||||
#: subprojects/extensions-tool/src/command-create.c:211
|
||||
#: subprojects/extensions-tool/src/main.c:173
|
||||
msgid "Description"
|
||||
msgstr "Popis"
|
||||
|
||||
#: js/extensionPrefs/ui/extension-row.ui:123
|
||||
#: subprojects/extensions-tool/src/main.c:185
|
||||
msgid "Version"
|
||||
msgstr "Verze"
|
||||
|
||||
#: js/extensionPrefs/ui/extension-row.ui:151
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: js/extensionPrefs/ui/extension-row.ui:175
|
||||
msgid "Website"
|
||||
msgstr "Webové stránky"
|
||||
|
||||
#: js/extensionPrefs/ui/extension-row.ui:192
|
||||
msgid "Remove…"
|
||||
msgstr "Odebrat…"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:8
|
||||
msgid "Help"
|
||||
msgstr "Nápověda"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:12
|
||||
msgid "About Extensions"
|
||||
msgstr "O rozšířeních"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:27
|
||||
msgid ""
|
||||
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
||||
"\">extensions.gnome.org</a>."
|
||||
msgstr ""
|
||||
"Jestli chcete vyhledat a nainstalovat rozšíření, navštivte stránku <a href="
|
||||
"\"https://extensions.gnome.org\">extensions.gnome.org</a>."
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:35
|
||||
msgid "Warning"
|
||||
msgstr "Varování"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:46
|
||||
msgid ""
|
||||
"Extensions can cause system issues, including performance problems. If you "
|
||||
"encounter problems with your system, it is recommended to disable all "
|
||||
"extensions."
|
||||
msgstr ""
|
||||
"Rozšíření mohou způsobit problémy se systémem, včetně výkonnostních "
|
||||
"problémů. Pokud ve svém systému narazíte na problémy, doporučujeme zkusit "
|
||||
"zakázat všechna rozšíření."
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:133
|
||||
msgid "Manually Installed"
|
||||
msgstr "Ručně nainstalované"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:157
|
||||
msgid "Built-In"
|
||||
msgstr "Vestavěné"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:198
|
||||
msgid "No Installed Extensions"
|
||||
msgstr "Není nainstalované žádné rozšíření"
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:234
|
||||
msgid ""
|
||||
"We’re very sorry, but it was not possible to get the list of installed "
|
||||
"extensions. Make sure you are logged into GNOME and try again."
|
||||
msgstr ""
|
||||
"Bohužel, ale není možné získat seznam nainstalovaných rozšíření. Ujistěte "
|
||||
"se, že jste přihlášení do GNOME, a zkuste to znovu."
|
||||
|
||||
#: js/extensionPrefs/ui/extensions-window.ui:287
|
||||
msgid "Log Out…"
|
||||
msgstr "Odhlásit se…"
|
||||
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
|
||||
#: js/ui/components/networkAgent.js:109 js/ui/components/polkitAgent.js:139
|
||||
#: js/ui/endSessionDialog.js:372 js/ui/extensionDownloader.js:181
|
||||
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
||||
#: js/ui/status/network.js:913 subprojects/extensions-app/js/main.js:148
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: js/gdm/authPrompt.js:237 js/ui/components/networkAgent.js:202
|
||||
#: js/ui/components/networkAgent.js:218 js/ui/components/networkAgent.js:242
|
||||
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:283
|
||||
#: js/ui/components/networkAgent.js:293 js/ui/components/polkitAgent.js:277
|
||||
#: js/gdm/authPrompt.js:237 js/ui/components/networkAgent.js:204
|
||||
#: js/ui/components/networkAgent.js:220 js/ui/components/networkAgent.js:244
|
||||
#: js/ui/components/networkAgent.js:265 js/ui/components/networkAgent.js:285
|
||||
#: js/ui/components/networkAgent.js:295 js/ui/components/polkitAgent.js:277
|
||||
#: js/ui/shellMountOperation.js:326
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
@ -569,8 +447,8 @@ msgstr "(např. uživatel nebo %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: js/gdm/loginDialog.js:917 js/ui/components/networkAgent.js:238
|
||||
#: js/ui/components/networkAgent.js:261 js/ui/components/networkAgent.js:279
|
||||
#: js/gdm/loginDialog.js:917 js/ui/components/networkAgent.js:240
|
||||
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
|
||||
msgid "Username"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
@ -840,44 +718,44 @@ msgstr "Zamítnout přístup"
|
||||
msgid "Grant Access"
|
||||
msgstr "Schválit přístup"
|
||||
|
||||
#: js/ui/appDisplay.js:910
|
||||
#: js/ui/appDisplay.js:938
|
||||
msgid "Unnamed Folder"
|
||||
msgstr "Nepojmenovaná složka"
|
||||
|
||||
#: js/ui/appDisplay.js:933
|
||||
#: js/ui/appDisplay.js:961
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Zde se objeví často používané aplikace"
|
||||
|
||||
#: js/ui/appDisplay.js:1068
|
||||
#: js/ui/appDisplay.js:1096
|
||||
msgid "Frequent"
|
||||
msgstr "Časté"
|
||||
|
||||
#: js/ui/appDisplay.js:1075
|
||||
#: js/ui/appDisplay.js:1103
|
||||
msgid "All"
|
||||
msgstr "Všechny"
|
||||
|
||||
#. Translators: This is the heading of a list of open windows
|
||||
#: js/ui/appDisplay.js:2458 js/ui/panel.js:75
|
||||
#: js/ui/appDisplay.js:2479 js/ui/panel.js:75
|
||||
msgid "Open Windows"
|
||||
msgstr "Otevřená okna"
|
||||
|
||||
#: js/ui/appDisplay.js:2478 js/ui/panel.js:82
|
||||
#: js/ui/appDisplay.js:2499 js/ui/panel.js:82
|
||||
msgid "New Window"
|
||||
msgstr "Nové okno"
|
||||
|
||||
#: js/ui/appDisplay.js:2489
|
||||
#: js/ui/appDisplay.js:2510
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Spustit pomocí vyhrazené grafické karty"
|
||||
|
||||
#: js/ui/appDisplay.js:2517 js/ui/dash.js:239
|
||||
#: js/ui/appDisplay.js:2538 js/ui/dash.js:239
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstranit z oblíbených"
|
||||
|
||||
#: js/ui/appDisplay.js:2523
|
||||
#: js/ui/appDisplay.js:2544
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Přidat mezi oblíbené"
|
||||
|
||||
#: js/ui/appDisplay.js:2533 js/ui/panel.js:93
|
||||
#: js/ui/appDisplay.js:2554 js/ui/panel.js:93
|
||||
msgid "Show Details"
|
||||
msgstr "Zobrazit podrobnosti"
|
||||
|
||||
@ -907,7 +785,7 @@ msgstr "Sluchátka"
|
||||
msgid "Headset"
|
||||
msgstr "Sluchátka s mikrofonem"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:269
|
||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
@ -1025,30 +903,30 @@ msgid "All Day"
|
||||
msgstr "Celý den"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: js/ui/calendar.js:867
|
||||
#: js/ui/calendar.js:868
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %-d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: js/ui/calendar.js:870
|
||||
#: js/ui/calendar.js:871
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %-d, %Y"
|
||||
msgstr "%A, %e. %B %Y"
|
||||
|
||||
#: js/ui/calendar.js:1096
|
||||
#: js/ui/calendar.js:1100
|
||||
msgid "No Notifications"
|
||||
msgstr "Nejsou žádná upozornění"
|
||||
|
||||
#: js/ui/calendar.js:1099
|
||||
#: js/ui/calendar.js:1103
|
||||
msgid "No Events"
|
||||
msgstr "Nejsou žádné události"
|
||||
|
||||
#: js/ui/calendar.js:1153
|
||||
#: js/ui/calendar.js:1157
|
||||
msgid "Do Not Disturb"
|
||||
msgstr "Nevyrušovat"
|
||||
|
||||
#: js/ui/calendar.js:1167
|
||||
#: js/ui/calendar.js:1176
|
||||
msgid "Clear"
|
||||
msgstr "Vymazat"
|
||||
|
||||
@ -1095,38 +973,38 @@ msgstr "Nainstalovaná verze udisks nepodporuje nastavení PIM"
|
||||
msgid "Open with %s"
|
||||
msgstr "Otevřít pomocí %s"
|
||||
|
||||
#: js/ui/components/networkAgent.js:89
|
||||
#: js/ui/components/networkAgent.js:91
|
||||
msgid ""
|
||||
"Alternatively you can connect by pushing the “WPS” button on your router."
|
||||
msgstr "Případně se můžete připojit zmáčknutím tlačítka „WPS“ na směrovači."
|
||||
|
||||
#: js/ui/components/networkAgent.js:101 js/ui/status/network.js:223
|
||||
#: js/ui/components/networkAgent.js:103 js/ui/status/network.js:223
|
||||
#: js/ui/status/network.js:314 js/ui/status/network.js:916
|
||||
msgid "Connect"
|
||||
msgstr "Připojit"
|
||||
|
||||
#: js/ui/components/networkAgent.js:208
|
||||
#: js/ui/components/networkAgent.js:210
|
||||
msgid "Key"
|
||||
msgstr "Klíč"
|
||||
|
||||
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:269
|
||||
#: js/ui/components/networkAgent.js:248 js/ui/components/networkAgent.js:271
|
||||
msgid "Private key password"
|
||||
msgstr "Heslo soukromého klíče"
|
||||
|
||||
#: js/ui/components/networkAgent.js:267
|
||||
#: js/ui/components/networkAgent.js:269
|
||||
msgid "Identity"
|
||||
msgstr "Identita"
|
||||
|
||||
#: js/ui/components/networkAgent.js:281
|
||||
#: js/ui/components/networkAgent.js:283
|
||||
msgid "Service"
|
||||
msgstr "Služba"
|
||||
|
||||
#: js/ui/components/networkAgent.js:310 js/ui/components/networkAgent.js:338
|
||||
#: js/ui/components/networkAgent.js:685 js/ui/components/networkAgent.js:706
|
||||
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:340
|
||||
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
|
||||
msgid "Authentication required"
|
||||
msgstr "Je požadováno ověření"
|
||||
|
||||
#: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:686
|
||||
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:680
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -1135,42 +1013,42 @@ msgstr ""
|
||||
"Pro přístup k bezdrátové síti „%s“ jsou vyžadována hesla nebo šifrovací "
|
||||
"klíče."
|
||||
|
||||
#: js/ui/components/networkAgent.js:315 js/ui/components/networkAgent.js:690
|
||||
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:684
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Ověření připojení po drátu 802.1X"
|
||||
|
||||
#: js/ui/components/networkAgent.js:317
|
||||
#: js/ui/components/networkAgent.js:319
|
||||
msgid "Network name"
|
||||
msgstr "Název sítě"
|
||||
|
||||
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:694
|
||||
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:688
|
||||
msgid "DSL authentication"
|
||||
msgstr "Ověření DSL"
|
||||
|
||||
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:699
|
||||
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:693
|
||||
msgid "PIN code required"
|
||||
msgstr "Požadován kód PIN"
|
||||
|
||||
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:700
|
||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:694
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Pro mobilní širokopásmové zařízení je vyžadován kód PIN"
|
||||
|
||||
#: js/ui/components/networkAgent.js:331
|
||||
#: js/ui/components/networkAgent.js:333
|
||||
msgid "PIN"
|
||||
msgstr "PIN"
|
||||
|
||||
#: js/ui/components/networkAgent.js:339 js/ui/components/networkAgent.js:691
|
||||
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:707
|
||||
#: js/ui/components/networkAgent.js:711
|
||||
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:685
|
||||
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
|
||||
#: js/ui/components/networkAgent.js:705
|
||||
#, javascript-format
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
||||
|
||||
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1691
|
||||
#: js/ui/components/networkAgent.js:668 js/ui/status/network.js:1691
|
||||
msgid "Network Manager"
|
||||
msgstr "Network Manager"
|
||||
|
||||
#: js/ui/components/networkAgent.js:710
|
||||
#: js/ui/components/networkAgent.js:704
|
||||
msgid "VPN password"
|
||||
msgstr "Heslo k VPN"
|
||||
|
||||
@ -1196,7 +1074,7 @@ msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: js/ui/components/telepathyClient.js:787
|
||||
#: js/ui/components/telepathyClient.js:823
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je teď znám jako %s"
|
||||
@ -1242,23 +1120,23 @@ msgstr "Přidat světový čas…"
|
||||
msgid "World Clocks"
|
||||
msgstr "Světové hodiny"
|
||||
|
||||
#: js/ui/dateMenu.js:276
|
||||
#: js/ui/dateMenu.js:289
|
||||
msgid "Weather"
|
||||
msgstr "Počasí"
|
||||
|
||||
#: js/ui/dateMenu.js:391
|
||||
#: js/ui/dateMenu.js:418
|
||||
msgid "Select a location…"
|
||||
msgstr "Vybrat místo…"
|
||||
|
||||
#: js/ui/dateMenu.js:404
|
||||
#: js/ui/dateMenu.js:426
|
||||
msgid "Loading…"
|
||||
msgstr "Načítá se…"
|
||||
|
||||
#: js/ui/dateMenu.js:414
|
||||
#: js/ui/dateMenu.js:436
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Připojit se kvůli informacím o počasí"
|
||||
|
||||
#: js/ui/dateMenu.js:416
|
||||
#: js/ui/dateMenu.js:438
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "Informace o počasí nejsou nyní dostupné"
|
||||
|
||||
@ -1407,35 +1285,35 @@ msgid "Other users are logged in"
|
||||
msgstr "Jsou přihlášeni jiní uživatelé"
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: js/ui/endSessionDialog.js:588
|
||||
#: js/ui/endSessionDialog.js:586
|
||||
#, javascript-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (vzdálený)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: js/ui/endSessionDialog.js:591
|
||||
#: js/ui/endSessionDialog.js:589
|
||||
#, javascript-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (konzola)"
|
||||
|
||||
#: js/ui/extensionDownloader.js:169
|
||||
#: js/ui/extensionDownloader.js:185
|
||||
msgid "Install"
|
||||
msgstr "Nainstalovat"
|
||||
|
||||
#: js/ui/extensionDownloader.js:175
|
||||
#: js/ui/extensionDownloader.js:191
|
||||
msgid "Install Extension"
|
||||
msgstr "Instalace rozšíření"
|
||||
|
||||
#: js/ui/extensionDownloader.js:176
|
||||
#: js/ui/extensionDownloader.js:192
|
||||
#, javascript-format
|
||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
|
||||
|
||||
#: js/ui/extensionSystem.js:228
|
||||
#: js/ui/extensionSystem.js:252
|
||||
msgid "Extension Updates Available"
|
||||
msgstr "Jsou dostupné aktualizace rozšíření"
|
||||
|
||||
#: js/ui/extensionSystem.js:229
|
||||
#: js/ui/extensionSystem.js:253
|
||||
msgid "Extension updates are ready to be installed."
|
||||
msgstr "Aktualizace rozšíření jsou připravené k instalaci."
|
||||
|
||||
@ -1584,11 +1462,11 @@ msgstr "Zobrazit zdroj"
|
||||
msgid "Web Page"
|
||||
msgstr "Webová stránka"
|
||||
|
||||
#: js/ui/main.js:269
|
||||
#: js/ui/main.js:279
|
||||
msgid "Logged in as a privileged user"
|
||||
msgstr "Přihlášeni jako privilegovaný uživatel"
|
||||
|
||||
#: js/ui/main.js:270
|
||||
#: js/ui/main.js:280
|
||||
msgid ""
|
||||
"Running a session as a privileged user should be avoided for security "
|
||||
"reasons. If possible, you should log in as a normal user."
|
||||
@ -1597,15 +1475,15 @@ msgstr ""
|
||||
"bezpečnostních důvodů vyhýbat. Pokud je to možné, přihlaste se jako běžný "
|
||||
"uživatel."
|
||||
|
||||
#: js/ui/main.js:276
|
||||
#: js/ui/main.js:319
|
||||
msgid "Screen Lock disabled"
|
||||
msgstr "Zamykání obrazovky zakázáno"
|
||||
|
||||
#: js/ui/main.js:277
|
||||
#: js/ui/main.js:320
|
||||
msgid "Screen Locking requires the GNOME display manager."
|
||||
msgstr "Zamykání obrazovky vyžaduje správce displejů GNOME."
|
||||
|
||||
#: js/ui/messageTray.js:1554
|
||||
#: js/ui/messageTray.js:1551
|
||||
msgid "System Information"
|
||||
msgstr "Informace o systému"
|
||||
|
||||
@ -1725,11 +1603,11 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
|
||||
#.
|
||||
#. XXX: another option is to kick the user into the gdm login
|
||||
#. screen, where we're not affected by grabs
|
||||
#: js/ui/screenShield.js:244 js/ui/screenShield.js:598
|
||||
#: js/ui/screenShield.js:244 js/ui/screenShield.js:601
|
||||
msgid "Unable to lock"
|
||||
msgstr "Nelze uzamknout obrazovku"
|
||||
|
||||
#: js/ui/screenShield.js:245 js/ui/screenShield.js:599
|
||||
#: js/ui/screenShield.js:245 js/ui/screenShield.js:602
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Zamknutí bylo zablokováno některou z aplikací"
|
||||
|
||||
@ -1813,13 +1691,13 @@ msgid "The PIM must be a number or empty."
|
||||
msgstr "PIM musí být číslo nebo prázdné."
|
||||
|
||||
#. Translators: %s is the Disks application
|
||||
#: js/ui/shellMountOperation.js:469
|
||||
#: js/ui/shellMountOperation.js:465
|
||||
#, javascript-format
|
||||
msgid "Unable to start %s"
|
||||
msgstr "Nelze spustit %s"
|
||||
|
||||
#. Translators: %s is the Disks application
|
||||
#: js/ui/shellMountOperation.js:471
|
||||
#: js/ui/shellMountOperation.js:467
|
||||
#, javascript-format
|
||||
msgid "Couldn’t find the %s application"
|
||||
msgstr "Nezdařilo se najít aplikaci %s"
|
||||
@ -2297,11 +2175,11 @@ msgstr "Chyba ověření Thunderbolt"
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s"
|
||||
|
||||
#: js/ui/status/volume.js:150
|
||||
#: js/ui/status/volume.js:151
|
||||
msgid "Volume changed"
|
||||
msgstr "Hlasitost změněna"
|
||||
|
||||
#: js/ui/status/volume.js:221
|
||||
#: js/ui/status/volume.js:222
|
||||
msgid "Volume"
|
||||
msgstr "Hlasitost"
|
||||
|
||||
@ -2335,23 +2213,23 @@ msgstr "Jen vestavěné"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: js/ui/unlockDialog.js:370
|
||||
#: js/ui/unlockDialog.js:371
|
||||
msgid "%A %B %-d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#: js/ui/unlockDialog.js:376
|
||||
#: js/ui/unlockDialog.js:377
|
||||
msgid "Swipe up to unlock"
|
||||
msgstr "Odemkněte máchnutím"
|
||||
|
||||
#: js/ui/unlockDialog.js:377
|
||||
#: js/ui/unlockDialog.js:378
|
||||
msgid "Click or press a key to unlock"
|
||||
msgstr "Odemkněte kliknutím nebo zmáčknutím zámku"
|
||||
|
||||
#: js/ui/unlockDialog.js:549
|
||||
#: js/ui/unlockDialog.js:550
|
||||
msgid "Unlock Window"
|
||||
msgstr "Odemykací okno"
|
||||
|
||||
#: js/ui/unlockDialog.js:558
|
||||
#: js/ui/unlockDialog.js:559
|
||||
msgid "Log in as another user"
|
||||
msgstr "Přihlásit se jako jiný uživatel"
|
||||
|
||||
@ -2384,7 +2262,7 @@ msgstr "Obnovit původní"
|
||||
msgid "Keep Changes"
|
||||
msgstr "Zachovat"
|
||||
|
||||
#: js/ui/windowManager.js:85
|
||||
#: js/ui/windowManager.js:86
|
||||
#, javascript-format
|
||||
msgid "Settings changes will revert in %d second"
|
||||
msgid_plural "Settings changes will revert in %d seconds"
|
||||
@ -2394,7 +2272,7 @@ msgstr[2] "Nastavení se obnoví na původní za %d sekund"
|
||||
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#: js/ui/windowManager.js:544
|
||||
#: js/ui/windowManager.js:546
|
||||
#, javascript-format
|
||||
msgid "%d × %d"
|
||||
msgstr "%d × %d"
|
||||
@ -2471,28 +2349,28 @@ msgstr "Zavřít"
|
||||
msgid "Evolution Calendar"
|
||||
msgstr "Kalendář Evolution"
|
||||
|
||||
#: src/main.c:460 subprojects/extensions-tool/src/main.c:249
|
||||
#: src/main.c:458 subprojects/extensions-tool/src/main.c:249
|
||||
msgid "Print version"
|
||||
msgstr "Vypsat verzi"
|
||||
|
||||
#: src/main.c:466
|
||||
#: src/main.c:464
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
|
||||
|
||||
#: src/main.c:472
|
||||
#: src/main.c:470
|
||||
msgid "Use a specific mode, e.g. “gdm” for login screen"
|
||||
msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“"
|
||||
|
||||
#: src/main.c:478
|
||||
#: src/main.c:476
|
||||
msgid "List possible modes"
|
||||
msgstr "Vypsat možné režimy"
|
||||
|
||||
#: src/shell-app.c:279
|
||||
#: src/shell-app.c:286
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Neznámé"
|
||||
|
||||
#: src/shell-app.c:530
|
||||
#: src/shell-app.c:537
|
||||
#, c-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Nelze spustit „%s“"
|
||||
@ -2509,6 +2387,136 @@ msgstr "Heslo nemůže být prázdné."
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
|
||||
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4
|
||||
#: subprojects/extensions-app/js/main.js:182
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
||||
msgid "Extensions"
|
||||
msgstr "Rozšíření"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
||||
#: subprojects/extensions-app/js/main.js:183
|
||||
msgid "Manage your GNOME Extensions"
|
||||
msgstr "Správa vašich rozšíření GNOME"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:35
|
||||
msgid ""
|
||||
"GNOME Extensions handles updating extensions, configuring extension "
|
||||
"preferences and removing or disabling unwanted extensions."
|
||||
msgstr ""
|
||||
"Aplikace Rozšíření GNOME umožňuje aktualizaci a nastavení předvoleb "
|
||||
"rozšíření a odstranění nebo vypnutí nechtěných rozšíření."
|
||||
|
||||
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:7
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Nastavit rozšíření pro GNOME Shell"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:144
|
||||
#, javascript-format
|
||||
msgid "Remove “%s”?"
|
||||
msgstr "Odebrat „%s“?"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:145
|
||||
msgid ""
|
||||
"If you remove the extension, you need to return to download it if you want "
|
||||
"to enable it again"
|
||||
msgstr ""
|
||||
"Pokud rozšíření odeberete a budete jej chtít znovu povolit, budete se muset "
|
||||
"vrátit k jeho stažení"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:149
|
||||
msgid "Remove"
|
||||
msgstr "Odebrat"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:181
|
||||
msgid "translator-credits"
|
||||
msgstr "Marek Černocký <marek@manet.cz>"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:316
|
||||
#, javascript-format
|
||||
msgid "%d extension will be updated on next login."
|
||||
msgid_plural "%d extensions will be updated on next login."
|
||||
msgstr[0] "Při příštím přihlášení bude aktualizováno %d rozšíření."
|
||||
msgstr[1] "Při příštím přihlášení budou aktualizována %d rozšíření."
|
||||
msgstr[2] "Při příštím přihlášení bude aktualizováno %d rozšíření."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
||||
#: subprojects/extensions-tool/src/command-create.c:211
|
||||
#: subprojects/extensions-tool/src/main.c:173
|
||||
msgid "Description"
|
||||
msgstr "Popis"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
||||
#: subprojects/extensions-tool/src/main.c:185
|
||||
msgid "Version"
|
||||
msgstr "Verze"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
||||
msgid "Website"
|
||||
msgstr "Webové stránky"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
||||
msgid "Remove…"
|
||||
msgstr "Odebrat…"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:8
|
||||
msgid "Help"
|
||||
msgstr "Nápověda"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:12
|
||||
msgid "About Extensions"
|
||||
msgstr "O aplikaci Rozšíření"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:27
|
||||
msgid ""
|
||||
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
||||
"\">extensions.gnome.org</a>."
|
||||
msgstr ""
|
||||
"Jestli chcete vyhledat a nainstalovat rozšíření, navštivte stránku <a href="
|
||||
"\"https://extensions.gnome.org\">extensions.gnome.org</a>."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:35
|
||||
msgid "Warning"
|
||||
msgstr "Varování"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:46
|
||||
msgid ""
|
||||
"Extensions can cause system issues, including performance problems. If you "
|
||||
"encounter problems with your system, it is recommended to disable all "
|
||||
"extensions."
|
||||
msgstr ""
|
||||
"Rozšíření mohou způsobit problémy se systémem, včetně výkonnostních "
|
||||
"problémů. Pokud ve svém systému narazíte na problémy, doporučujeme zkusit "
|
||||
"zakázat všechna rozšíření."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:135
|
||||
msgid "Manually Installed"
|
||||
msgstr "Ručně nainstalované"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:159
|
||||
msgid "Built-In"
|
||||
msgstr "Vestavěné"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:200
|
||||
msgid "No Installed Extensions"
|
||||
msgstr "Není nainstalované žádné rozšíření"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:236
|
||||
msgid ""
|
||||
"We’re very sorry, but it was not possible to get the list of installed "
|
||||
"extensions. Make sure you are logged into GNOME and try again."
|
||||
msgstr ""
|
||||
"Bohužel, ale není možné získat seznam nainstalovaných rozšíření. Ujistěte "
|
||||
"se, že jste přihlášení do GNOME, a zkuste to znovu."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:289
|
||||
msgid "Log Out…"
|
||||
msgstr "Odhlásit se…"
|
||||
|
||||
#. Translators: a file path to an extension directory
|
||||
#: subprojects/extensions-tool/src/command-create.c:125
|
||||
#, c-format
|
||||
@ -2771,7 +2779,7 @@ msgstr "[ARGUMENTY…]"
|
||||
|
||||
#: subprojects/extensions-tool/src/main.c:247
|
||||
msgid "Commands:"
|
||||
msgstr "Příkazy"
|
||||
msgstr "Příkazy:"
|
||||
|
||||
#: subprojects/extensions-tool/src/main.c:248
|
||||
msgid "Print help"
|
||||
@ -2846,3 +2854,6 @@ msgstr[2] "%u vstupů"
|
||||
#: subprojects/gvc/gvc-mixer-control.c:2766
|
||||
msgid "System Sounds"
|
||||
msgstr "Systémové zvuky"
|
||||
|
||||
#~ msgid "Copy Error"
|
||||
#~ msgstr "Zkopírovat chybu"
|
||||
|
35
po/fi.po
35
po/fi.po
@ -25,8 +25,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2020-03-31 07:15+0000\n"
|
||||
"PO-Revision-Date: 2020-04-02 12:43+0300\n"
|
||||
"POT-Creation-Date: 2020-04-02 09:45+0000\n"
|
||||
"PO-Revision-Date: 2020-04-13 18:02+0300\n"
|
||||
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
|
||||
"Language-Team: suomi <lokalisointi-lista@googlegroups.com>\n"
|
||||
"Language: fi\n"
|
||||
@ -736,44 +736,44 @@ msgstr "Estä pääsy"
|
||||
msgid "Grant Access"
|
||||
msgstr "Salli pääsy"
|
||||
|
||||
#: js/ui/appDisplay.js:932
|
||||
#: js/ui/appDisplay.js:937
|
||||
msgid "Unnamed Folder"
|
||||
msgstr "Nimetön kansio"
|
||||
|
||||
#: js/ui/appDisplay.js:955
|
||||
#: js/ui/appDisplay.js:960
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Usein käytetyt sovellukset ilmestyvät tänne"
|
||||
|
||||
#: js/ui/appDisplay.js:1090
|
||||
#: js/ui/appDisplay.js:1095
|
||||
msgid "Frequent"
|
||||
msgstr "Käytetyimmät"
|
||||
|
||||
#: js/ui/appDisplay.js:1097
|
||||
#: js/ui/appDisplay.js:1102
|
||||
msgid "All"
|
||||
msgstr "Kaikki"
|
||||
|
||||
#. Translators: This is the heading of a list of open windows
|
||||
#: js/ui/appDisplay.js:2473 js/ui/panel.js:75
|
||||
#: js/ui/appDisplay.js:2478 js/ui/panel.js:75
|
||||
msgid "Open Windows"
|
||||
msgstr "Avoimet ikkunat"
|
||||
|
||||
#: js/ui/appDisplay.js:2493 js/ui/panel.js:82
|
||||
#: js/ui/appDisplay.js:2498 js/ui/panel.js:82
|
||||
msgid "New Window"
|
||||
msgstr "Uusi ikkuna"
|
||||
|
||||
#: js/ui/appDisplay.js:2504
|
||||
#: js/ui/appDisplay.js:2509
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Käynnistä erillisnäytönohjainta käyttäen"
|
||||
|
||||
#: js/ui/appDisplay.js:2532 js/ui/dash.js:239
|
||||
#: js/ui/appDisplay.js:2537 js/ui/dash.js:239
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Poista suosikeista"
|
||||
|
||||
#: js/ui/appDisplay.js:2538
|
||||
#: js/ui/appDisplay.js:2543
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Lisää suosikkeihin"
|
||||
|
||||
#: js/ui/appDisplay.js:2548 js/ui/panel.js:93
|
||||
#: js/ui/appDisplay.js:2553 js/ui/panel.js:93
|
||||
msgid "Show Details"
|
||||
msgstr "Näytä tiedot"
|
||||
|
||||
@ -1472,11 +1472,11 @@ msgstr "Näytä lähde"
|
||||
msgid "Web Page"
|
||||
msgstr "Verkkosivusto"
|
||||
|
||||
#: js/ui/main.js:277
|
||||
#: js/ui/main.js:279
|
||||
msgid "Logged in as a privileged user"
|
||||
msgstr "Kirjautuneena etuoikeutettuna käyttäjänä"
|
||||
|
||||
#: js/ui/main.js:278
|
||||
#: js/ui/main.js:280
|
||||
msgid ""
|
||||
"Running a session as a privileged user should be avoided for security "
|
||||
"reasons. If possible, you should log in as a normal user."
|
||||
@ -1484,11 +1484,11 @@ msgstr ""
|
||||
"Istunnon suorittamista etuoikeutettuna käyttäjänä tulisi välttää "
|
||||
"tietoturvasyistä. Jos mahdollista, kirjaudu tavallisena käyttäjänä."
|
||||
|
||||
#: js/ui/main.js:317
|
||||
#: js/ui/main.js:319
|
||||
msgid "Screen Lock disabled"
|
||||
msgstr "Näytön lukitus pois käytöstä"
|
||||
|
||||
#: js/ui/main.js:318
|
||||
#: js/ui/main.js:320
|
||||
msgid "Screen Locking requires the GNOME display manager."
|
||||
msgstr "Näytön lukitus vaatii Gnomen kirjautumishallinnan."
|
||||
|
||||
@ -2407,6 +2407,9 @@ msgid ""
|
||||
"GNOME Extensions handles updating extensions, configuring extension "
|
||||
"preferences and removing or disabling unwanted extensions."
|
||||
msgstr ""
|
||||
"Gnomen laajennussovellus Laajennukset käsittelee laajennusten päivitykset, "
|
||||
"niiden asetukset ja sen avulla voi poistaa laajennuksia käytöstä tai "
|
||||
"kokonaan järjestelmästä."
|
||||
|
||||
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:7
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
|
423
po/pt_BR.po
423
po/pt_BR.po
@ -24,8 +24,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2020-03-19 14:34+0000\n"
|
||||
"PO-Revision-Date: 2020-03-19 11:36-0300\n"
|
||||
"POT-Creation-Date: 2020-03-31 07:15+0000\n"
|
||||
"PO-Revision-Date: 2020-04-22 09:30-0300\n"
|
||||
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
@ -413,66 +413,12 @@ msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
|
||||
msgid "Network Login"
|
||||
msgstr "Sessão de Rede"
|
||||
|
||||
#: js/extensionPrefs/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
|
||||
#: js/extensionPrefs/data/org.gnome.Extensions.desktop.in.in:4
|
||||
#: js/extensionPrefs/js/main.js:242
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:61
|
||||
msgid "Extensions"
|
||||
msgstr "Extensões"
|
||||
|
||||
#: js/extensionPrefs/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
||||
#: js/extensionPrefs/js/main.js:243
|
||||
msgid "Manage your GNOME Extensions"
|
||||
msgstr "Gerenciar suas extensões do GNOME"
|
||||
|
||||
#: js/extensionPrefs/data/metainfo/org.gnome.Extensions.metainfo.xml.in:35
|
||||
msgid ""
|
||||
"GNOME Extensions handles updating extensions, configuring extension "
|
||||
"preferences and removing or disabling unwanted extensions."
|
||||
msgstr ""
|
||||
"GNOME Extensões lida com a atualização da extensões, configuração das "
|
||||
"preferências de extensões e remoção ou desabilitação de extensões "
|
||||
"indesejadas."
|
||||
|
||||
#: js/extensionPrefs/data/org.gnome.Extensions.desktop.in.in:7
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Configurar extensões do Shell do GNOME"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:164
|
||||
#, javascript-format
|
||||
msgid "Remove “%s”?"
|
||||
msgstr "Remover “%s”?"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:165
|
||||
msgid ""
|
||||
"If you remove the extension, you need to return to download it if you want "
|
||||
"to enable it again"
|
||||
msgstr ""
|
||||
"Se você remover a extensão, você precisa voltar a baixá-la se você quiser "
|
||||
"habilitá-la novamente"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:168 js/gdm/authPrompt.js:135
|
||||
#: js/ui/audioDeviceSelection.js:57 js/ui/components/networkAgent.js:109
|
||||
#: js/ui/components/polkitAgent.js:139 js/ui/endSessionDialog.js:374
|
||||
#: js/ui/extensionDownloader.js:177 js/ui/shellMountOperation.js:376
|
||||
#: js/ui/shellMountOperation.js:386 js/ui/status/network.js:913
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:169
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:241
|
||||
msgid "translator-credits"
|
||||
msgstr "Rafael Fontenelle <rafaelff@gnome.org>"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:285
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:223
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:36
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:223
|
||||
msgid "Something’s gone wrong"
|
||||
msgstr "Algo deu errado"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:292
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:48
|
||||
msgid ""
|
||||
"We’re very sorry, but there’s been a problem: the settings for this "
|
||||
"extension can’t be displayed. We recommend that you report the issue to the "
|
||||
@ -482,105 +428,25 @@ msgstr ""
|
||||
"ser exibidas. Recomendamos que você relate o problema aos autores da "
|
||||
"extensão."
|
||||
|
||||
#: js/extensionPrefs/js/main.js:299
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:82
|
||||
msgid "Technical Details"
|
||||
msgstr "Detalhes técnicos"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:334
|
||||
msgid "Copy Error"
|
||||
msgstr "Copiar erro"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:361
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:165
|
||||
msgid "Homepage"
|
||||
msgstr "Site"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:362
|
||||
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:166
|
||||
msgid "Visit extension homepage"
|
||||
msgstr "Visita a página web da extensão"
|
||||
|
||||
#: js/extensionPrefs/js/main.js:479
|
||||
#, javascript-format
|
||||
msgid "%d extension will be updated on next login."
|
||||
msgid_plural "%d extensions will be updated on next login."
|
||||
msgstr[0] "%d extensão será atualizada na próxima sessão."
|
||||
msgstr[1] "%d extensões serão atualizadas na próxima sessão."
|
||||
|
||||
#: js/extensionPrefs/data/ui/extension-row.ui:100
|
||||
#: subprojects/extensions-tool/src/command-create.c:211
|
||||
#: subprojects/extensions-tool/src/main.c:173
|
||||
msgid "Description"
|
||||
msgstr "Descrição"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extension-row.ui:123
|
||||
#: subprojects/extensions-tool/src/main.c:185
|
||||
msgid "Version"
|
||||
msgstr "Versão"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extension-row.ui:151
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extension-row.ui:175
|
||||
msgid "Website"
|
||||
msgstr "Site"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extension-row.ui:192
|
||||
msgid "Remove…"
|
||||
msgstr "Remover…"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:8
|
||||
msgid "Help"
|
||||
msgstr "Ajuda"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:12
|
||||
msgid "About Extensions"
|
||||
msgstr "Sobre as Extensões"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:27
|
||||
msgid ""
|
||||
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
||||
"\">extensions.gnome.org</a>."
|
||||
msgstr ""
|
||||
"Para encontrar e adicionar extensões, visite <a href=\"https://extensions."
|
||||
"gnome.org\">extensions.gnome.org</a>."
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:35
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:46
|
||||
msgid ""
|
||||
"Extensions can cause system issues, including performance problems. If you "
|
||||
"encounter problems with your system, it is recommended to disable all "
|
||||
"extensions."
|
||||
msgstr ""
|
||||
"Extensões podem causar problemas no sistema, incluindo problemas de "
|
||||
"desempenho. Se você encontrar problemas com o seu sistema, é recomendável "
|
||||
"desativar todas as extensões."
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:134
|
||||
msgid "Manually Installed"
|
||||
msgstr "Instalada manualmente"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:158
|
||||
msgid "Built-In"
|
||||
msgstr "Interna"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:199
|
||||
msgid "No Installed Extensions"
|
||||
msgstr "Nenhuma extensão instalada"
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:235
|
||||
msgid ""
|
||||
"We’re very sorry, but it was not possible to get the list of installed "
|
||||
"extensions. Make sure you are logged into GNOME and try again."
|
||||
msgstr ""
|
||||
"Sentimos muito, mas não foi possível obter a lista de extensões instaladas. "
|
||||
"Certifique-se de estar em uma sessão do GNOME e tente novamente."
|
||||
|
||||
#: js/extensionPrefs/data/ui/extensions-window.ui:288
|
||||
msgid "Log Out…"
|
||||
msgstr "Encerrar sessão…"
|
||||
#: js/gdm/authPrompt.js:135 js/ui/audioDeviceSelection.js:57
|
||||
#: js/ui/components/networkAgent.js:109 js/ui/components/polkitAgent.js:139
|
||||
#: js/ui/endSessionDialog.js:374 js/ui/extensionDownloader.js:181
|
||||
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
||||
#: js/ui/status/network.js:913 subprojects/extensions-app/js/main.js:148
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#. Cisco LEAP
|
||||
#: js/gdm/authPrompt.js:237 js/ui/components/networkAgent.js:204
|
||||
@ -862,44 +728,44 @@ msgstr "Negar acesso"
|
||||
msgid "Grant Access"
|
||||
msgstr "Conceder acesso"
|
||||
|
||||
#: js/ui/appDisplay.js:898
|
||||
#: js/ui/appDisplay.js:932
|
||||
msgid "Unnamed Folder"
|
||||
msgstr "Pasta sem nome"
|
||||
|
||||
#: js/ui/appDisplay.js:921
|
||||
#: js/ui/appDisplay.js:955
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
|
||||
|
||||
#: js/ui/appDisplay.js:1056
|
||||
#: js/ui/appDisplay.js:1090
|
||||
msgid "Frequent"
|
||||
msgstr "Frequente"
|
||||
|
||||
#: js/ui/appDisplay.js:1063
|
||||
#: js/ui/appDisplay.js:1097
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#. Translators: This is the heading of a list of open windows
|
||||
#: js/ui/appDisplay.js:2446 js/ui/panel.js:75
|
||||
#: js/ui/appDisplay.js:2473 js/ui/panel.js:75
|
||||
msgid "Open Windows"
|
||||
msgstr "Janelas abertas"
|
||||
|
||||
#: js/ui/appDisplay.js:2466 js/ui/panel.js:82
|
||||
#: js/ui/appDisplay.js:2493 js/ui/panel.js:82
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: js/ui/appDisplay.js:2477
|
||||
#: js/ui/appDisplay.js:2504
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Inicia usando placa de vídeo dedicada"
|
||||
|
||||
#: js/ui/appDisplay.js:2505 js/ui/dash.js:239
|
||||
#: js/ui/appDisplay.js:2532 js/ui/dash.js:239
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Remover dos favoritos"
|
||||
|
||||
#: js/ui/appDisplay.js:2511
|
||||
#: js/ui/appDisplay.js:2538
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos favoritos"
|
||||
|
||||
#: js/ui/appDisplay.js:2521 js/ui/panel.js:93
|
||||
#: js/ui/appDisplay.js:2548 js/ui/panel.js:93
|
||||
msgid "Show Details"
|
||||
msgstr "Mostrar detalhes"
|
||||
|
||||
@ -929,7 +795,7 @@ msgstr "Fones de ouvido"
|
||||
msgid "Headset"
|
||||
msgstr "Fone de ouvido com microfone"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:269
|
||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
||||
msgid "Microphone"
|
||||
msgstr "Microfone"
|
||||
|
||||
@ -1070,7 +936,7 @@ msgstr "Nenhum evento"
|
||||
msgid "Do Not Disturb"
|
||||
msgstr "Não perturbe"
|
||||
|
||||
#: js/ui/calendar.js:1171
|
||||
#: js/ui/calendar.js:1176
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
@ -1220,7 +1086,7 @@ msgstr "Desculpe, isto não funcionou. Por favor, tente novamente."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: js/ui/components/telepathyClient.js:787
|
||||
#: js/ui/components/telepathyClient.js:823
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s agora é conhecido como %s"
|
||||
@ -1264,106 +1130,106 @@ msgstr "Adicionar relógios mundiais…"
|
||||
msgid "World Clocks"
|
||||
msgstr "Relógios mundiais"
|
||||
|
||||
#: js/ui/dateMenu.js:279
|
||||
#: js/ui/dateMenu.js:289
|
||||
msgid "Weather"
|
||||
msgstr "Meteorologia"
|
||||
|
||||
#: js/ui/dateMenu.js:394
|
||||
#: js/ui/dateMenu.js:418
|
||||
msgid "Select a location…"
|
||||
msgstr "Selecione uma localização…"
|
||||
|
||||
#: js/ui/dateMenu.js:407
|
||||
#: js/ui/dateMenu.js:426
|
||||
msgid "Loading…"
|
||||
msgstr "Carregando…"
|
||||
|
||||
#: js/ui/dateMenu.js:417
|
||||
#: js/ui/dateMenu.js:436
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Conecte-se à internet para obter as informações meteorológicas"
|
||||
|
||||
#: js/ui/dateMenu.js:419
|
||||
#: js/ui/dateMenu.js:438
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "No momento as informações meteorológicas não estão disponíveis"
|
||||
|
||||
#: js/ui/endSessionDialog.js:37
|
||||
#: js/ui/endSessionDialog.js:39
|
||||
#, javascript-format
|
||||
msgctxt "title"
|
||||
msgid "Log Out %s"
|
||||
msgstr "Encerrar sessão de %s"
|
||||
|
||||
#: js/ui/endSessionDialog.js:38
|
||||
#: js/ui/endSessionDialog.js:40
|
||||
msgctxt "title"
|
||||
msgid "Log Out"
|
||||
msgstr "Encerrar sessão"
|
||||
|
||||
#: js/ui/endSessionDialog.js:40
|
||||
#: js/ui/endSessionDialog.js:42
|
||||
#, javascript-format
|
||||
msgid "%s will be logged out automatically in %d second."
|
||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||
msgstr[0] "%s encerrará a sessão automaticamente em %d segundo."
|
||||
msgstr[1] "%s encerrará a sessão automaticamente em %d segundos."
|
||||
|
||||
#: js/ui/endSessionDialog.js:45
|
||||
#: js/ui/endSessionDialog.js:47
|
||||
#, javascript-format
|
||||
msgid "You will be logged out automatically in %d second."
|
||||
msgid_plural "You will be logged out automatically in %d seconds."
|
||||
msgstr[0] "Sua sessão será encerrada automaticamente em %d segundo."
|
||||
msgstr[1] "Sua sessão será encerrada automaticamente em %d segundos."
|
||||
|
||||
#: js/ui/endSessionDialog.js:51
|
||||
#: js/ui/endSessionDialog.js:53
|
||||
msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Encerrar sessão"
|
||||
|
||||
#: js/ui/endSessionDialog.js:56
|
||||
#: js/ui/endSessionDialog.js:58
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Desligar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:57
|
||||
#: js/ui/endSessionDialog.js:59
|
||||
msgctxt "title"
|
||||
msgid "Install Updates & Power Off"
|
||||
msgstr "Instalar atualizações & desligar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:59
|
||||
#: js/ui/endSessionDialog.js:61
|
||||
#, javascript-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "O sistema será desligado automaticamente em %d segundo."
|
||||
msgstr[1] "O sistema será desligado automaticamente em %d segundos."
|
||||
|
||||
#: js/ui/endSessionDialog.js:63
|
||||
#: js/ui/endSessionDialog.js:65
|
||||
msgctxt "checkbox"
|
||||
msgid "Install pending software updates"
|
||||
msgstr "Instalar atualizações de software pendentes"
|
||||
|
||||
#: js/ui/endSessionDialog.js:66 js/ui/endSessionDialog.js:82
|
||||
#: js/ui/endSessionDialog.js:68 js/ui/endSessionDialog.js:84
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:68
|
||||
#: js/ui/endSessionDialog.js:70
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Desligar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:74
|
||||
#: js/ui/endSessionDialog.js:76
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:76
|
||||
#: js/ui/endSessionDialog.js:78
|
||||
#, javascript-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "O sistema irá reiniciar automaticamente em %d segundo."
|
||||
msgstr[1] "O sistema irá reiniciar automaticamente em %d segundos."
|
||||
|
||||
#: js/ui/endSessionDialog.js:89
|
||||
#: js/ui/endSessionDialog.js:91
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Reiniciar & instalar atualizações"
|
||||
|
||||
#: js/ui/endSessionDialog.js:91
|
||||
#: js/ui/endSessionDialog.js:93
|
||||
#, javascript-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@ -1375,22 +1241,22 @@ msgstr[1] ""
|
||||
"O sistema irá reiniciar e instalar atualizações automaticamente em %d "
|
||||
"segundos."
|
||||
|
||||
#: js/ui/endSessionDialog.js:97 js/ui/endSessionDialog.js:116
|
||||
#: js/ui/endSessionDialog.js:99 js/ui/endSessionDialog.js:118
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Reiniciar & instalar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:98
|
||||
#: js/ui/endSessionDialog.js:100
|
||||
msgctxt "button"
|
||||
msgid "Install & Power Off"
|
||||
msgstr "Instalar & desligar"
|
||||
|
||||
#: js/ui/endSessionDialog.js:99
|
||||
#: js/ui/endSessionDialog.js:101
|
||||
msgctxt "checkbox"
|
||||
msgid "Power off after updates are installed"
|
||||
msgstr "Desligar após atualizações serem instaladas"
|
||||
|
||||
#: js/ui/endSessionDialog.js:106
|
||||
#: js/ui/endSessionDialog.js:108
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Upgrade"
|
||||
msgstr "Reiniciar & instalar atualizações"
|
||||
@ -1398,7 +1264,7 @@ msgstr "Reiniciar & instalar atualizações"
|
||||
#. Translators: This is the text displayed for system upgrades in the
|
||||
#. shut down dialog. First %s gets replaced with the distro name and
|
||||
#. second %s with the distro version to upgrade to
|
||||
#: js/ui/endSessionDialog.js:111
|
||||
#: js/ui/endSessionDialog.js:113
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"%s %s will be installed after restart. Upgrade installation can take a long "
|
||||
@ -1408,16 +1274,16 @@ msgstr ""
|
||||
"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."
|
||||
|
||||
#: js/ui/endSessionDialog.js:259
|
||||
#: js/ui/endSessionDialog.js:261
|
||||
msgid "Running on battery power: Please plug in before installing updates."
|
||||
msgstr ""
|
||||
"Funcionando na bateria: conecte na tomada antes de instalar atualizações."
|
||||
|
||||
#: js/ui/endSessionDialog.js:268
|
||||
#: js/ui/endSessionDialog.js:270
|
||||
msgid "Some applications are busy or have unsaved work"
|
||||
msgstr "Alguns aplicativos estão ocupados ou possuem trabalhos não salvos"
|
||||
|
||||
#: js/ui/endSessionDialog.js:273
|
||||
#: js/ui/endSessionDialog.js:275
|
||||
msgid "Other users are logged in"
|
||||
msgstr "Outros usuários estão com sessão aberta"
|
||||
|
||||
@ -1433,24 +1299,24 @@ msgstr "%s (remoto)"
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (console)"
|
||||
|
||||
#: js/ui/extensionDownloader.js:181
|
||||
#: js/ui/extensionDownloader.js:185
|
||||
msgid "Install"
|
||||
msgstr "Instalar"
|
||||
|
||||
#: js/ui/extensionDownloader.js:187
|
||||
#: js/ui/extensionDownloader.js:191
|
||||
msgid "Install Extension"
|
||||
msgstr "Instalar extensão"
|
||||
|
||||
#: js/ui/extensionDownloader.js:188
|
||||
#: js/ui/extensionDownloader.js:192
|
||||
#, javascript-format
|
||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||
msgstr "Baixar e instalar “%s” de extensions.gnome.org?"
|
||||
|
||||
#: js/ui/extensionSystem.js:228
|
||||
#: js/ui/extensionSystem.js:233
|
||||
msgid "Extension Updates Available"
|
||||
msgstr "Atualizações de extensões disponíveis"
|
||||
|
||||
#: js/ui/extensionSystem.js:229
|
||||
#: js/ui/extensionSystem.js:234
|
||||
msgid "Extension updates are ready to be installed."
|
||||
msgstr "Atualizações de extensões estão prontas para serem instaladas."
|
||||
|
||||
@ -1599,11 +1465,11 @@ msgstr "Ver fonte"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: js/ui/main.js:274
|
||||
#: js/ui/main.js:277
|
||||
msgid "Logged in as a privileged user"
|
||||
msgstr "Sessão aberta como um usuário privilegiado"
|
||||
|
||||
#: js/ui/main.js:275
|
||||
#: js/ui/main.js:278
|
||||
msgid ""
|
||||
"Running a session as a privileged user should be avoided for security "
|
||||
"reasons. If possible, you should log in as a normal user."
|
||||
@ -1611,15 +1477,15 @@ msgstr ""
|
||||
"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."
|
||||
|
||||
#: js/ui/main.js:281
|
||||
#: js/ui/main.js:317
|
||||
msgid "Screen Lock disabled"
|
||||
msgstr "Bloqueio de tela desabilitado"
|
||||
|
||||
#: js/ui/main.js:282
|
||||
#: js/ui/main.js:318
|
||||
msgid "Screen Locking requires the GNOME display manager."
|
||||
msgstr "O bloqueio de tela requer o gerenciador de exibição do GNOME."
|
||||
|
||||
#: js/ui/messageTray.js:1554
|
||||
#: js/ui/messageTray.js:1551
|
||||
msgid "System Information"
|
||||
msgstr "Informações do sistema"
|
||||
|
||||
@ -1826,13 +1692,13 @@ msgid "The PIM must be a number or empty."
|
||||
msgstr "O PIM deve ser um número ou vazio."
|
||||
|
||||
#. Translators: %s is the Disks application
|
||||
#: js/ui/shellMountOperation.js:469
|
||||
#: js/ui/shellMountOperation.js:465
|
||||
#, javascript-format
|
||||
msgid "Unable to start %s"
|
||||
msgstr "Não foi possível iniciar o %s"
|
||||
|
||||
#. Translators: %s is the Disks application
|
||||
#: js/ui/shellMountOperation.js:471
|
||||
#: js/ui/shellMountOperation.js:467
|
||||
#, javascript-format
|
||||
msgid "Couldn’t find the %s application"
|
||||
msgstr "Não foi possível localizar o aplicativo %s"
|
||||
@ -1985,13 +1851,13 @@ msgstr "<desconhecido>"
|
||||
#: js/ui/status/network.js:420 js/ui/status/network.js:1317
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "%s desligado"
|
||||
msgstr "%s desligada"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:423
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "Conectado a %s"
|
||||
msgstr "Conectado à %s"
|
||||
|
||||
# Não gerenciável para transmitir a ideia que o Networkmanager não consegue gerenciar o dispositivo --Enrico
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
@ -2012,7 +1878,7 @@ msgstr "Desconectando de %s"
|
||||
#: js/ui/status/network.js:438 js/ui/status/network.js:1309
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "Conectando a %s"
|
||||
msgstr "Conectando à %s"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:441
|
||||
@ -2309,11 +2175,11 @@ msgstr "Erro de autorização de thunderbolt"
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgstr "Não foi possível autorizar o dispositivo Thunderbolt: %s"
|
||||
|
||||
#: js/ui/status/volume.js:150
|
||||
#: js/ui/status/volume.js:151
|
||||
msgid "Volume changed"
|
||||
msgstr "Volume alterado"
|
||||
|
||||
#: js/ui/status/volume.js:221
|
||||
#: js/ui/status/volume.js:222
|
||||
msgid "Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
@ -2347,23 +2213,23 @@ msgstr "Interna apenas"
|
||||
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: js/ui/unlockDialog.js:370
|
||||
#: js/ui/unlockDialog.js:371
|
||||
msgid "%A %B %-d"
|
||||
msgstr "%A, %-d de %B"
|
||||
|
||||
#: js/ui/unlockDialog.js:376
|
||||
#: js/ui/unlockDialog.js:377
|
||||
msgid "Swipe up to unlock"
|
||||
msgstr "Deslize para desbloquear"
|
||||
|
||||
#: js/ui/unlockDialog.js:377
|
||||
#: js/ui/unlockDialog.js:378
|
||||
msgid "Click or press a key to unlock"
|
||||
msgstr "Clique ou pressione uma tecla para desbloquear"
|
||||
|
||||
#: js/ui/unlockDialog.js:549
|
||||
#: js/ui/unlockDialog.js:550
|
||||
msgid "Unlock Window"
|
||||
msgstr "Desbloquear janela"
|
||||
|
||||
#: js/ui/unlockDialog.js:558
|
||||
#: js/ui/unlockDialog.js:559
|
||||
msgid "Log in as another user"
|
||||
msgstr "Iniciar sessão como outro usuário"
|
||||
|
||||
@ -2523,6 +2389,136 @@ msgstr "A senha não pode estar em branco"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
|
||||
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4
|
||||
#: subprojects/extensions-app/js/main.js:182
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
||||
msgid "Extensions"
|
||||
msgstr "Extensões"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
||||
#: subprojects/extensions-app/js/main.js:183
|
||||
msgid "Manage your GNOME Extensions"
|
||||
msgstr "Gerenciar suas extensões do GNOME"
|
||||
|
||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:35
|
||||
msgid ""
|
||||
"GNOME Extensions handles updating extensions, configuring extension "
|
||||
"preferences and removing or disabling unwanted extensions."
|
||||
msgstr ""
|
||||
"GNOME Extensões lida com a atualização da extensões, configuração das "
|
||||
"preferências de extensões e remoção ou desabilitação de extensões "
|
||||
"indesejadas."
|
||||
|
||||
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:7
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Configurar extensões do Shell do GNOME"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:144
|
||||
#, javascript-format
|
||||
msgid "Remove “%s”?"
|
||||
msgstr "Remover “%s”?"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:145
|
||||
msgid ""
|
||||
"If you remove the extension, you need to return to download it if you want "
|
||||
"to enable it again"
|
||||
msgstr ""
|
||||
"Se você remover a extensão, você precisa voltar a baixá-la se você quiser "
|
||||
"habilitá-la novamente"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:149
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:181
|
||||
msgid "translator-credits"
|
||||
msgstr "Rafael Fontenelle <rafaelff@gnome.org>"
|
||||
|
||||
#: subprojects/extensions-app/js/main.js:316
|
||||
#, javascript-format
|
||||
msgid "%d extension will be updated on next login."
|
||||
msgid_plural "%d extensions will be updated on next login."
|
||||
msgstr[0] "%d extensão será atualizada na próxima sessão."
|
||||
msgstr[1] "%d extensões serão atualizadas na próxima sessão."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
||||
#: subprojects/extensions-tool/src/command-create.c:211
|
||||
#: subprojects/extensions-tool/src/main.c:173
|
||||
msgid "Description"
|
||||
msgstr "Descrição"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
||||
#: subprojects/extensions-tool/src/main.c:185
|
||||
msgid "Version"
|
||||
msgstr "Versão"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
||||
msgid "Website"
|
||||
msgstr "Site"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
||||
msgid "Remove…"
|
||||
msgstr "Remover…"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:8
|
||||
msgid "Help"
|
||||
msgstr "Ajuda"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:12
|
||||
msgid "About Extensions"
|
||||
msgstr "Sobre as Extensões"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:27
|
||||
msgid ""
|
||||
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
||||
"\">extensions.gnome.org</a>."
|
||||
msgstr ""
|
||||
"Para encontrar e adicionar extensões, visite <a href=\"https://extensions."
|
||||
"gnome.org\">extensions.gnome.org</a>."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:35
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:46
|
||||
msgid ""
|
||||
"Extensions can cause system issues, including performance problems. If you "
|
||||
"encounter problems with your system, it is recommended to disable all "
|
||||
"extensions."
|
||||
msgstr ""
|
||||
"Extensões podem causar problemas no sistema, incluindo problemas de "
|
||||
"desempenho. Se você encontrar problemas com o seu sistema, é recomendável "
|
||||
"desativar todas as extensões."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:134
|
||||
msgid "Manually Installed"
|
||||
msgstr "Instalada manualmente"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:158
|
||||
msgid "Built-In"
|
||||
msgstr "Interna"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:199
|
||||
msgid "No Installed Extensions"
|
||||
msgstr "Nenhuma extensão instalada"
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:235
|
||||
msgid ""
|
||||
"We’re very sorry, but it was not possible to get the list of installed "
|
||||
"extensions. Make sure you are logged into GNOME and try again."
|
||||
msgstr ""
|
||||
"Sentimos muito, mas não foi possível obter a lista de extensões instaladas. "
|
||||
"Certifique-se de estar em uma sessão do GNOME e tente novamente."
|
||||
|
||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:288
|
||||
msgid "Log Out…"
|
||||
msgstr "Encerrar sessão…"
|
||||
|
||||
#. Translators: a file path to an extension directory
|
||||
#: subprojects/extensions-tool/src/command-create.c:125
|
||||
#, c-format
|
||||
@ -2860,6 +2856,9 @@ msgstr[1] "%u entradas"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sons do sistema"
|
||||
|
||||
#~ msgid "Copy Error"
|
||||
#~ msgstr "Copiar erro"
|
||||
|
||||
#~| msgid "Username: "
|
||||
#~ msgid "Username…"
|
||||
#~ msgstr "Nome de usuário…"
|
||||
|
@ -109,17 +109,11 @@ load_folder (GHashTable *folders,
|
||||
|
||||
while ((name = g_dir_read_name (dir)))
|
||||
{
|
||||
g_autofree gchar *stripped_name = NULL;
|
||||
g_autofree gchar *filename = NULL;
|
||||
g_autoptr(GKeyFile) keyfile = NULL;
|
||||
|
||||
if (!g_str_has_suffix (name, ".directory"))
|
||||
continue;
|
||||
|
||||
stripped_name = g_strndup (name, strlen (name) - strlen (".directory"));
|
||||
|
||||
/* First added wins */
|
||||
if (g_hash_table_contains (folders, stripped_name))
|
||||
if (g_hash_table_contains (folders, name))
|
||||
continue;
|
||||
|
||||
filename = g_build_filename (path, name, NULL);
|
||||
@ -134,8 +128,7 @@ load_folder (GHashTable *folders,
|
||||
NULL, NULL);
|
||||
|
||||
if (translated != NULL)
|
||||
g_hash_table_insert (folders, g_steal_pointer (&stripped_name),
|
||||
translated);
|
||||
g_hash_table_insert (folders, g_strdup (name), translated);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -218,10 +218,17 @@ window_backed_app_get_icon (ShellApp *app,
|
||||
|
||||
if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_X11)
|
||||
{
|
||||
widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
|
||||
G_OBJECT (window),
|
||||
"icon",
|
||||
scaled_size);
|
||||
StWidget *texture_actor;
|
||||
|
||||
texture_actor =
|
||||
st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
|
||||
G_OBJECT (window),
|
||||
"icon",
|
||||
scaled_size);
|
||||
|
||||
widget = g_object_new (ST_TYPE_BIN,
|
||||
"child", texture_actor,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -476,9 +476,8 @@ recorder_record_frame (ShellRecorder *recorder,
|
||||
* by clutter before glSwapBuffers() makes it visible to the user.
|
||||
*/
|
||||
static void
|
||||
recorder_on_stage_paint (ClutterActor *actor,
|
||||
ClutterPaintContext *paint_context,
|
||||
ShellRecorder *recorder)
|
||||
recorder_on_stage_after_paint (ClutterActor *actor,
|
||||
ShellRecorder *recorder)
|
||||
{
|
||||
if (recorder->state == RECORDER_STATE_RECORDING)
|
||||
recorder_record_frame (recorder, FALSE);
|
||||
@ -612,8 +611,8 @@ recorder_connect_stage_callbacks (ShellRecorder *recorder)
|
||||
{
|
||||
g_signal_connect (recorder->stage, "destroy",
|
||||
G_CALLBACK (recorder_on_stage_destroy), recorder);
|
||||
g_signal_connect_after (recorder->stage, "paint",
|
||||
G_CALLBACK (recorder_on_stage_paint), recorder);
|
||||
g_signal_connect_after (recorder->stage, "after-paint",
|
||||
G_CALLBACK (recorder_on_stage_after_paint), recorder);
|
||||
g_signal_connect (recorder->stage, "notify::width",
|
||||
G_CALLBACK (recorder_on_stage_notify_size), recorder);
|
||||
g_signal_connect (recorder->stage, "notify::height",
|
||||
@ -629,7 +628,7 @@ recorder_disconnect_stage_callbacks (ShellRecorder *recorder)
|
||||
(void *)recorder_on_stage_destroy,
|
||||
recorder);
|
||||
g_signal_handlers_disconnect_by_func (recorder->stage,
|
||||
(void *)recorder_on_stage_paint,
|
||||
(void *)recorder_on_stage_after_paint,
|
||||
recorder);
|
||||
g_signal_handlers_disconnect_by_func (recorder->stage,
|
||||
(void *)recorder_on_stage_notify_size,
|
||||
|
@ -163,23 +163,6 @@ do_grab_screenshot (ShellScreenshot *screenshot,
|
||||
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
|
||||
draw_cursor_image (cairo_surface_t *surface,
|
||||
cairo_rectangle_int_t area)
|
||||
@ -468,7 +451,6 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot,
|
||||
{
|
||||
ClutterActor *stage;
|
||||
ShellScreenshotPrivate *priv;
|
||||
gboolean use_paint_signal = FALSE;
|
||||
GTask *result;
|
||||
|
||||
g_return_if_fail (SHELL_IS_SCREENSHOT (screenshot));
|
||||
@ -493,32 +475,15 @@ shell_screenshot_screenshot (ShellScreenshot *screenshot,
|
||||
g_task_set_source_tag (result, shell_screenshot_screenshot);
|
||||
|
||||
priv->stream = g_object_ref (stream);
|
||||
priv->include_cursor = FALSE;
|
||||
priv->include_cursor = include_cursor;
|
||||
|
||||
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
|
||||
|
||||
meta_disable_unredirect_for_display (shell_global_get_display (priv->global));
|
||||
|
||||
if (include_cursor)
|
||||
{
|
||||
if (should_draw_cursor_image (SHELL_SCREENSHOT_SCREEN))
|
||||
priv->include_cursor = TRUE;
|
||||
else
|
||||
use_paint_signal = TRUE;
|
||||
}
|
||||
|
||||
if (use_paint_signal)
|
||||
{
|
||||
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);
|
||||
}
|
||||
g_signal_connect_after (stage, "actors-painted",
|
||||
G_CALLBACK (on_actors_painted),
|
||||
result);
|
||||
|
||||
clutter_actor_queue_redraw (stage);
|
||||
}
|
||||
@ -696,8 +661,7 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
|
||||
|
||||
priv->stream = g_object_ref (stream);
|
||||
priv->include_frame = include_frame;
|
||||
priv->include_cursor = include_cursor &&
|
||||
should_draw_cursor_image (SHELL_SCREENSHOT_WINDOW);
|
||||
priv->include_cursor = include_cursor;
|
||||
|
||||
stage = CLUTTER_ACTOR (shell_global_get_stage (priv->global));
|
||||
|
||||
|
@ -314,7 +314,7 @@ st_entry_get_preferred_width (ClutterActor *actor,
|
||||
{
|
||||
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||
gfloat hint_w, icon_w;
|
||||
gfloat hint_w, hint_min_w, icon_w;
|
||||
|
||||
st_theme_node_adjust_for_height (theme_node, &for_height);
|
||||
|
||||
@ -324,10 +324,11 @@ st_entry_get_preferred_width (ClutterActor *actor,
|
||||
|
||||
if (priv->hint_actor)
|
||||
{
|
||||
clutter_actor_get_preferred_width (priv->hint_actor, -1, NULL, &hint_w);
|
||||
clutter_actor_get_preferred_width (priv->hint_actor, -1,
|
||||
&hint_min_w, &hint_w);
|
||||
|
||||
if (min_width_p && hint_w > *min_width_p)
|
||||
*min_width_p = hint_w;
|
||||
if (min_width_p && hint_min_w > *min_width_p)
|
||||
*min_width_p = hint_min_w;
|
||||
|
||||
if (natural_width_p && hint_w > *natural_width_p)
|
||||
*natural_width_p = hint_w;
|
||||
@ -422,7 +423,7 @@ st_entry_allocate (ClutterActor *actor,
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||
ClutterActorBox content_box, child_box, icon_box, hint_box;
|
||||
gfloat icon_w, icon_h;
|
||||
gfloat hint_w, hint_h;
|
||||
gfloat hint_w, hint_min_w, hint_h;
|
||||
gfloat entry_h, min_h, pref_h, avail_h;
|
||||
ClutterActor *left_icon, *right_icon;
|
||||
gboolean is_rtl;
|
||||
@ -488,9 +489,11 @@ st_entry_allocate (ClutterActor *actor,
|
||||
/* now allocate the hint actor */
|
||||
hint_box = child_box;
|
||||
|
||||
clutter_actor_get_preferred_width (priv->hint_actor, -1, NULL, &hint_w);
|
||||
clutter_actor_get_preferred_width (priv->hint_actor, -1, &hint_min_w, &hint_w);
|
||||
clutter_actor_get_preferred_height (priv->hint_actor, -1, NULL, &hint_h);
|
||||
|
||||
hint_w = CLAMP (hint_w, hint_min_w, child_box.x2 - child_box.x1);
|
||||
|
||||
if (is_rtl)
|
||||
hint_box.x1 = hint_box.x2 - hint_w;
|
||||
else
|
||||
|
@ -59,7 +59,6 @@ struct _StIconPrivate
|
||||
gint theme_icon_size; /* icon size from theme node */
|
||||
gint icon_size; /* icon size we are using */
|
||||
GIcon *fallback_gicon;
|
||||
GIcon *default_gicon;
|
||||
|
||||
CoglPipeline *shadow_pipeline;
|
||||
StShadow *shadow_spec;
|
||||
@ -73,6 +72,8 @@ static gboolean st_icon_update_icon_size (StIcon *icon);
|
||||
static void st_icon_update_shadow_pipeline (StIcon *icon);
|
||||
static void st_icon_clear_shadow_pipeline (StIcon *icon);
|
||||
|
||||
static GIcon *default_gicon = NULL;
|
||||
|
||||
#define IMAGE_MISSING_ICON_NAME "image-missing"
|
||||
#define DEFAULT_ICON_SIZE 48
|
||||
|
||||
@ -168,7 +169,6 @@ st_icon_dispose (GObject *gobject)
|
||||
|
||||
g_clear_object (&priv->gicon);
|
||||
g_clear_object (&priv->fallback_gicon);
|
||||
g_clear_object (&priv->default_gicon);
|
||||
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
|
||||
g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
|
||||
|
||||
@ -295,14 +295,15 @@ st_icon_init (StIcon *self)
|
||||
{
|
||||
ClutterLayoutManager *layout_manager;
|
||||
|
||||
if (G_UNLIKELY (default_gicon == NULL))
|
||||
default_gicon = g_themed_icon_new (IMAGE_MISSING_ICON_NAME);
|
||||
|
||||
self->priv = st_icon_get_instance_private (self);
|
||||
|
||||
layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
|
||||
CLUTTER_BIN_ALIGNMENT_FILL);
|
||||
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
|
||||
|
||||
self->priv->default_gicon = g_themed_icon_new (IMAGE_MISSING_ICON_NAME);
|
||||
|
||||
self->priv->icon_size = DEFAULT_ICON_SIZE;
|
||||
self->priv->prop_icon_size = -1;
|
||||
|
||||
@ -419,7 +420,10 @@ st_icon_update (StIcon *icon)
|
||||
}
|
||||
|
||||
if (priv->gicon == NULL && priv->fallback_gicon == NULL)
|
||||
return;
|
||||
{
|
||||
g_clear_pointer (&priv->icon_texture, clutter_actor_destroy);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!st_widget_get_resource_scale (ST_WIDGET (icon), &resource_scale))
|
||||
return;
|
||||
@ -453,7 +457,7 @@ st_icon_update (StIcon *icon)
|
||||
if (priv->pending_texture == NULL)
|
||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||
theme_node,
|
||||
priv->default_gicon,
|
||||
default_gicon,
|
||||
priv->icon_size,
|
||||
paint_scale,
|
||||
resource_scale);
|
||||
|
@ -1619,18 +1619,3 @@ st_texture_cache_rescan_icon_theme (StTextureCache *cache)
|
||||
|
||||
return gtk_icon_theme_rescan_if_needed (priv->icon_theme);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* st_texture_cache_invalidate:
|
||||
* @cache: a #StTextureCache
|
||||
*
|
||||
* Invalidates the texture cache, and evicts all icons.
|
||||
*/
|
||||
void
|
||||
st_texture_cache_invalidate (StTextureCache *cache)
|
||||
{
|
||||
g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
|
||||
|
||||
st_texture_cache_evict_icons (cache);
|
||||
}
|
||||
|
@ -115,6 +115,4 @@ CoglTexture * st_texture_cache_load (StTextureCache *cache,
|
||||
|
||||
gboolean st_texture_cache_rescan_icon_theme (StTextureCache *cache);
|
||||
|
||||
void st_texture_cache_invalidate (StTextureCache *cache);
|
||||
|
||||
#endif /* __ST_TEXTURE_CACHE_H__ */
|
||||
|
@ -176,11 +176,7 @@ st_theme_context_set_property (GObject *object,
|
||||
int scale_factor = g_value_get_int (value);
|
||||
if (scale_factor != context->scale_factor)
|
||||
{
|
||||
StTextureCache *cache = st_texture_cache_get_default ();
|
||||
|
||||
context->scale_factor = scale_factor;
|
||||
|
||||
st_texture_cache_invalidate (cache);
|
||||
st_theme_context_changed (context);
|
||||
}
|
||||
|
||||
@ -294,19 +290,6 @@ on_icon_theme_changed (StTextureCache *cache,
|
||||
g_source_set_name_by_id (id, "[gnome-shell] changed_idle");
|
||||
}
|
||||
|
||||
static void
|
||||
on_custom_stylesheets_changed (StTheme *theme,
|
||||
StThemeContext *context)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
StThemeNode *node;
|
||||
|
||||
g_hash_table_iter_init (&iter, context->nodes);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, (gpointer *) &node, NULL))
|
||||
_st_theme_node_reset_for_stylesheet_change (node);
|
||||
}
|
||||
|
||||
/**
|
||||
* st_theme_context_get_for_stage:
|
||||
* @stage: a #ClutterStage
|
||||
@ -359,9 +342,10 @@ st_theme_context_set_theme (StThemeContext *context,
|
||||
if (context->theme)
|
||||
{
|
||||
context->stylesheets_changed_id =
|
||||
g_signal_connect (context->theme, "custom-stylesheets-changed",
|
||||
G_CALLBACK (on_custom_stylesheets_changed),
|
||||
context);
|
||||
g_signal_connect_swapped (context->theme,
|
||||
"custom-stylesheets-changed",
|
||||
G_CALLBACK (st_theme_context_changed),
|
||||
context);
|
||||
}
|
||||
|
||||
st_theme_context_changed (context);
|
||||
@ -470,3 +454,19 @@ st_theme_context_intern_node (StThemeContext *context,
|
||||
g_hash_table_add (context->nodes, g_object_ref (node));
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* st_theme_context_get_scale_factor:
|
||||
* @context: a #StThemeContext
|
||||
*
|
||||
* Return the current scale factor of @context.
|
||||
*
|
||||
* Return value: a scale factor
|
||||
*/
|
||||
int
|
||||
st_theme_context_get_scale_factor (StThemeContext *context)
|
||||
{
|
||||
g_return_val_if_fail (ST_IS_THEME_CONTEXT (context), -1);
|
||||
|
||||
return context->scale_factor;
|
||||
}
|
||||
|
@ -58,6 +58,8 @@ StThemeNode * st_theme_context_get_root_node (StThemeContext
|
||||
StThemeNode * st_theme_context_intern_node (StThemeContext *context,
|
||||
StThemeNode *node);
|
||||
|
||||
int st_theme_context_get_scale_factor (StThemeContext *context);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __ST_THEME_CONTEXT_H__ */
|
||||
|
@ -643,15 +643,13 @@ create_cairo_pattern_of_background_image (StThemeNode *node,
|
||||
gdouble background_image_width, background_image_height;
|
||||
gdouble x, y;
|
||||
gdouble scale_w, scale_h;
|
||||
int scale_factor;
|
||||
|
||||
file = st_theme_node_get_background_image (node);
|
||||
|
||||
texture_cache = st_texture_cache_get_default ();
|
||||
|
||||
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
|
||||
surface = st_texture_cache_load_file_to_cairo_surface (texture_cache, file,
|
||||
scale_factor,
|
||||
node->cached_scale_factor,
|
||||
resource_scale);
|
||||
|
||||
if (surface == NULL)
|
||||
@ -1374,7 +1372,6 @@ st_theme_node_load_border_image (StThemeNode *node,
|
||||
{
|
||||
StBorderImage *border_image;
|
||||
GFile *file;
|
||||
int scale_factor;
|
||||
|
||||
border_image = st_theme_node_get_border_image (node);
|
||||
if (border_image == NULL)
|
||||
@ -1382,10 +1379,9 @@ st_theme_node_load_border_image (StThemeNode *node,
|
||||
|
||||
file = st_border_image_get_file (border_image);
|
||||
|
||||
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
|
||||
|
||||
node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
|
||||
file, scale_factor,
|
||||
file,
|
||||
node->cached_scale_factor,
|
||||
resource_scale);
|
||||
if (node->border_slices_texture == NULL)
|
||||
goto out;
|
||||
@ -1413,17 +1409,15 @@ st_theme_node_load_background_image (StThemeNode *node,
|
||||
{
|
||||
GFile *background_image;
|
||||
StShadow *background_image_shadow_spec;
|
||||
int scale_factor;
|
||||
|
||||
background_image = st_theme_node_get_background_image (node);
|
||||
if (background_image == NULL)
|
||||
goto out;
|
||||
|
||||
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
|
||||
|
||||
background_image_shadow_spec = st_theme_node_get_background_image_shadow (node);
|
||||
node->background_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
|
||||
background_image, scale_factor,
|
||||
background_image,
|
||||
node->cached_scale_factor,
|
||||
resource_scale);
|
||||
if (node->background_texture == NULL)
|
||||
goto out;
|
||||
|
@ -118,14 +118,13 @@ struct _StThemeNode {
|
||||
|
||||
StThemeNodePaintState cached_state;
|
||||
|
||||
int scale_factor;
|
||||
int cached_scale_factor;
|
||||
};
|
||||
|
||||
void _st_theme_node_ensure_background (StThemeNode *node);
|
||||
void _st_theme_node_ensure_geometry (StThemeNode *node);
|
||||
void _st_theme_node_apply_margins (StThemeNode *node,
|
||||
ClutterActor *actor);
|
||||
void _st_theme_node_reset_for_stylesheet_change (StThemeNode *node);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -77,13 +77,6 @@ maybe_free_properties (StThemeNode *node)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_st_theme_node_reset_for_stylesheet_change (StThemeNode *node)
|
||||
{
|
||||
maybe_free_properties (node);
|
||||
node->properties_computed = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
st_theme_node_dispose (GObject *gobject)
|
||||
{
|
||||
@ -219,14 +212,13 @@ st_theme_node_new (StThemeContext *context,
|
||||
if (theme == NULL && parent_node != NULL)
|
||||
theme = parent_node->theme;
|
||||
|
||||
g_object_get (context, "scale-factor", &node->scale_factor, NULL);
|
||||
|
||||
g_set_object (&node->theme, theme);
|
||||
node->element_type = element_type;
|
||||
node->element_id = g_strdup (element_id);
|
||||
node->element_classes = split_on_whitespace (element_class);
|
||||
node->pseudo_classes = split_on_whitespace (pseudo_class);
|
||||
node->inline_style = g_strdup (inline_style);
|
||||
node->cached_scale_factor = st_theme_context_get_scale_factor (context);
|
||||
|
||||
return node;
|
||||
}
|
||||
@ -347,7 +339,7 @@ st_theme_node_equal (StThemeNode *node_a, StThemeNode *node_b)
|
||||
node_a->context != node_b->context ||
|
||||
node_a->theme != node_b->theme ||
|
||||
node_a->element_type != node_b->element_type ||
|
||||
node_a->scale_factor != node_b->scale_factor ||
|
||||
node_a->cached_scale_factor != node_b->cached_scale_factor ||
|
||||
g_strcmp0 (node_a->element_id, node_b->element_id) ||
|
||||
g_strcmp0 (node_a->inline_style, node_b->inline_style))
|
||||
return FALSE;
|
||||
@ -399,7 +391,7 @@ st_theme_node_hash (StThemeNode *node)
|
||||
hash = hash * 33 + GPOINTER_TO_UINT (node->context);
|
||||
hash = hash * 33 + GPOINTER_TO_UINT (node->theme);
|
||||
hash = hash * 33 + ((guint) node->element_type);
|
||||
hash = hash * 33 + ((guint) node->scale_factor);
|
||||
hash = hash * 33 + ((guint) node->cached_scale_factor);
|
||||
|
||||
if (node->element_id != NULL)
|
||||
hash = hash * 33 + g_str_hash (node->element_id);
|
||||
@ -994,7 +986,7 @@ get_length_from_term (StThemeNode *node,
|
||||
{
|
||||
case NUM_LENGTH_PX:
|
||||
type = ABSOLUTE;
|
||||
multiplier = 1 * node->scale_factor;
|
||||
multiplier = 1 * node->cached_scale_factor;
|
||||
break;
|
||||
case NUM_LENGTH_PT:
|
||||
type = POINTS;
|
||||
@ -1128,7 +1120,7 @@ get_length_from_term_int (StThemeNode *node,
|
||||
|
||||
result = get_length_from_term (node, term, use_parent_font, &value);
|
||||
if (result == VALUE_FOUND)
|
||||
*length = (int) ((value / node->scale_factor) + 0.5) * node->scale_factor;
|
||||
*length = (int) ((value / node->cached_scale_factor) + 0.5) * node->cached_scale_factor;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -3122,7 +3114,7 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
|
||||
node->border_image = st_border_image_new (file,
|
||||
border_top, border_right, border_bottom, border_left,
|
||||
node->scale_factor);
|
||||
node->cached_scale_factor);
|
||||
|
||||
g_object_unref (file);
|
||||
|
||||
@ -3963,7 +3955,7 @@ st_theme_node_geometry_equal (StThemeNode *node,
|
||||
|
||||
g_return_val_if_fail (ST_IS_THEME_NODE (other), FALSE);
|
||||
|
||||
if (node->scale_factor != other->scale_factor)
|
||||
if (node->cached_scale_factor != other->cached_scale_factor)
|
||||
return FALSE;
|
||||
|
||||
_st_theme_node_ensure_geometry (node);
|
||||
|
@ -455,17 +455,12 @@ st_widget_parent_set (ClutterActor *widget,
|
||||
{
|
||||
StWidget *self = ST_WIDGET (widget);
|
||||
ClutterActorClass *parent_class;
|
||||
ClutterActor *new_parent;
|
||||
|
||||
parent_class = CLUTTER_ACTOR_CLASS (st_widget_parent_class);
|
||||
if (parent_class->parent_set)
|
||||
parent_class->parent_set (widget, old_parent);
|
||||
|
||||
new_parent = clutter_actor_get_parent (widget);
|
||||
|
||||
/* don't send the style changed signal if we no longer have a parent actor */
|
||||
if (new_parent)
|
||||
st_widget_style_changed (self);
|
||||
st_widget_style_changed (self);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -510,7 +505,6 @@ static void
|
||||
st_widget_real_style_changed (StWidget *self)
|
||||
{
|
||||
clutter_actor_queue_redraw ((ClutterActor *) self);
|
||||
notify_children_of_style_change ((ClutterActor *) self);
|
||||
}
|
||||
|
||||
void
|
||||
@ -530,6 +524,11 @@ st_widget_style_changed (StWidget *widget)
|
||||
if (clutter_actor_is_mapped (CLUTTER_ACTOR (widget)))
|
||||
st_widget_recompute_style (widget, old_theme_node);
|
||||
|
||||
/* Descend through all children. If the actor is not mapped,
|
||||
* children will clear their theme node without recomputing style.
|
||||
*/
|
||||
notify_children_of_style_change (CLUTTER_ACTOR (widget));
|
||||
|
||||
if (old_theme_node)
|
||||
g_object_unref (old_theme_node);
|
||||
}
|
||||
@ -1772,8 +1771,6 @@ st_widget_recompute_style (StWidget *widget,
|
||||
|
||||
if (!paint_equal || !geometry_equal)
|
||||
g_signal_emit (widget, signals[STYLE_CHANGED], 0);
|
||||
else
|
||||
notify_children_of_style_change ((ClutterActor *) widget);
|
||||
|
||||
priv->is_style_dirty = FALSE;
|
||||
}
|
||||
@ -1795,7 +1792,10 @@ st_widget_ensure_style (StWidget *widget)
|
||||
priv = st_widget_get_instance_private (widget);
|
||||
|
||||
if (priv->is_style_dirty)
|
||||
st_widget_recompute_style (widget, NULL);
|
||||
{
|
||||
st_widget_recompute_style (widget, NULL);
|
||||
notify_children_of_style_change (CLUTTER_ACTOR (widget));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -38,18 +38,20 @@
|
||||
</description>
|
||||
|
||||
<releases>
|
||||
<release version="3.37.0" date="2020-03-31"/>
|
||||
<release version="3.36.2" date="2020-04-29"/>
|
||||
<release version="3.36.1" date="2020-03-29"/>
|
||||
<release version="3.36.0" date="2020-03-07"/>
|
||||
</releases>
|
||||
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/master/subprojects/extensions-app/data/metainfo/extensions-main.png</image>
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/gnome-3-36/subprojects/extensions-app/data/metainfo/extensions-main.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/master/subprojects/extensions-app/data/metainfo/extensions-update.png</image>
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/gnome-3-36/subprojects/extensions-app/data/metainfo/extensions-update.png</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/master/subprojects/extensions-app/data/metainfo/extensions-remove.png</image>
|
||||
<image>https://gitlab.gnome.org/GNOME/gnome-shell/raw/gnome-3-36/subprojects/extensions-app/data/metainfo/extensions-remove.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
</component>
|
||||
|
@ -6,5 +6,5 @@ Icon=@app_id@
|
||||
Comment=Configure GNOME Shell Extensions
|
||||
Exec=@bindir@/@prgname@
|
||||
DBusActivatable=true
|
||||
Categories=GNOME;GTK;
|
||||
Categories=GNOME;GTK;Utility;
|
||||
OnlyShowIn=GNOME;
|
||||
|
@ -201,7 +201,10 @@ var ExtensionsWindow = GObject.registerClass({
|
||||
null,
|
||||
Gio.DBusCallFlags.NONE,
|
||||
-1,
|
||||
null);
|
||||
null,
|
||||
(o, res) => {
|
||||
o.call_finish(res);
|
||||
});
|
||||
}
|
||||
|
||||
_sortList(row1, row2) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('gnome-extensions-app',
|
||||
version: '3.37.0',
|
||||
version: '3.36.2',
|
||||
meson_version: '>= 0.47.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('gnome-extensions-tool', 'c',
|
||||
version: '3.37.0',
|
||||
version: '3.36.2',
|
||||
meson_version: '>= 0.47.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('shew', 'c',
|
||||
version: '3.37.0',
|
||||
version: '3.36.2',
|
||||
meson_version: '>= 0.47.0',
|
||||
license: 'LGPLv2+',
|
||||
)
|
||||
|
Reference in New Issue
Block a user