Compare commits
175 Commits
Author | SHA1 | Date | |
---|---|---|---|
7031449f01 | |||
06df79286d | |||
9297d87775 | |||
ef56b14553 | |||
30ff76272e | |||
52a7481ba6 | |||
14cfd74f08 | |||
fa97f7141b | |||
03bcd4c05b | |||
89574abc83 | |||
602078cbde | |||
96f63b08c2 | |||
d66cd0d206 | |||
ff13ad9e71 | |||
5e4b65d37e | |||
51fd0875d1 | |||
75f8903c7e | |||
124eb1ca18 | |||
b5d925817f | |||
c134091268 | |||
ff89693998 | |||
c26860dcb7 | |||
6757c7d20a | |||
751189253a | |||
21187a4cec | |||
b7db56ca9b | |||
261d36ba72 | |||
1e72874192 | |||
f29dbd1f18 | |||
b60836932a | |||
bf47d1b22d | |||
4ea0fca4fc | |||
809f820cd4 | |||
75235624b2 | |||
5ea54426b9 | |||
4aabcd9e7d | |||
918b3eeb42 | |||
482c655590 | |||
86b5a43008 | |||
d7cb2eeebc | |||
770231c2d7 | |||
ecdf62d63e | |||
d885486397 | |||
1524abc947 | |||
cb9842e4a4 | |||
140ab4dec1 | |||
845122497b | |||
d51a622fc0 | |||
e90466347a | |||
73f8c1c482 | |||
0ff75941ea | |||
e4bb2037ca | |||
481014ac9e | |||
6dbcb5f9da | |||
c1f06daf88 | |||
0717f76362 | |||
da738988cd | |||
e86e88ea47 | |||
ae338af1e8 | |||
3f9cc0ed37 | |||
8f8ecdb983 | |||
8f547c9d5d | |||
821f3e8ddf | |||
81be25bbd6 | |||
26d27fdbf8 | |||
c7e597cf72 | |||
e4db68a1da | |||
980a90f8fb | |||
87e4bf52b7 | |||
a368df61ac | |||
5e66b104dc | |||
08a5f41505 | |||
ec36762309 | |||
aa70020bc8 | |||
1e77e6fc79 | |||
68203e7091 | |||
cff0752bcc | |||
45d8e11123 | |||
5aee714b70 | |||
3c3c3b7c69 | |||
6ba2913075 | |||
75c4e1cd63 | |||
fb4a4ca4a2 | |||
4c2c1297be | |||
c5dbdad5fc | |||
4e05bcd3b6 | |||
3555550d5e | |||
8e05fa2728 | |||
d7c3050e2d | |||
89ba8562c3 | |||
82da73baff | |||
b2eeda9b46 | |||
0db41a3773 | |||
8d7f7e61dd | |||
3f4b253dac | |||
e4cbe5126a | |||
8357739ef8 | |||
6bef9334b7 | |||
8c49f45ac8 | |||
46600740fe | |||
c281e868a0 | |||
039431a73f | |||
d4f8ea1c53 | |||
96f5e2b33e | |||
93a542d52c | |||
f4fcba74ff | |||
cadbf7cd8b | |||
dd8e1aef51 | |||
15dc37a139 | |||
c23ad83c59 | |||
4a6f550acb | |||
8078d78c30 | |||
d7185d71c6 | |||
522ecba180 | |||
9b22f6183f | |||
b2c35e4fb0 | |||
af543daf1c | |||
baeb4079ee | |||
f91f9801b4 | |||
c5634335b0 | |||
2b4317349f | |||
96bfd1f8be | |||
33ab53068e | |||
40123ae6da | |||
df149524d4 | |||
f0ee9cdcf8 | |||
a3257e8df5 | |||
d2cf13eff4 | |||
8cd352b72b | |||
c210052dc6 | |||
0561af66e7 | |||
1e9b170d87 | |||
be02f76aa7 | |||
687928e7b7 | |||
ffdf3feb04 | |||
a60b8b3b50 | |||
3d6add68c7 | |||
85e055ffe3 | |||
1691e422e7 | |||
f442c9510e | |||
0de98eb772 | |||
30172b5625 | |||
8ae99a6898 | |||
5cfe5bf8c8 | |||
c790c01a3b | |||
d4a947b475 | |||
60d7999b6a | |||
c040d08b97 | |||
3a53b25873 | |||
d8e6f654a3 | |||
fdfcacf1db | |||
d3efbcce9b | |||
ac34dbe353 | |||
e0f3e13456 | |||
fdd9def922 | |||
771050f4d7 | |||
8451df977c | |||
ff55cf017e | |||
d36a180852 | |||
12c7f693d0 | |||
e0a8cb565e | |||
46547ae027 | |||
68745328df | |||
4582d7a183 | |||
cc5ed2fbf5 | |||
a2545d186a | |||
1ea22a5281 | |||
090057d2df | |||
b3aab7f401 | |||
8154728d09 | |||
5569090d1c | |||
fc3bc7678d | |||
8914a46669 | |||
e7ec373aee | |||
fe131f926d |
35
NEWS
35
NEWS
@ -1,3 +1,38 @@
|
|||||||
|
3.37.3
|
||||||
|
======
|
||||||
|
* Refactor and clean up window picker
|
||||||
|
[Jonas D., Florian; !1297, !1298, !1305, !1345, !1353]
|
||||||
|
* Move calendar events out of notifications list [Florian; !1282]
|
||||||
|
* Refine app folder dialogs [Georges; !1301]
|
||||||
|
* Hide switch-user button on lock screen if unsupported [Chingkai; #2687]
|
||||||
|
* Refactor and clean up app picker pagination [Georges; !1271]
|
||||||
|
* Add API to retrieve specified mimetypes from clipboards [Carlos; !1321]
|
||||||
|
* Support prepending workspace with horizontal layouts [Florian; #2916]
|
||||||
|
* Update microphone icon on input volume changes [fludixx; #2902]
|
||||||
|
* Cache labels on GPU [Daniel; !1329]
|
||||||
|
* Fix regressions in redesigned modal dialogs [Florian, Jonas D.; #2491, !1336]
|
||||||
|
* Use GIcon for all application icons [Florian; !1342]
|
||||||
|
* Support pre-authenticated logins in vmware environments [yun341; #1983]
|
||||||
|
* Better support sandboxed apps with multiple .desktop files [Florian; #219]
|
||||||
|
* Fix on-screen keyboard size in portrait orientation [Florian; #2349]
|
||||||
|
* Plugged leaks [Sebastian, Daniel, Florian; !1306, !1319, !1341]
|
||||||
|
* Misc. bug fixes and cleanups [Jonas D., Georges, Marco, Florian, Sebastian,
|
||||||
|
MOZGIII, Daniel, Mariana, Jonas Å.; !1296, !1295, #2643, !1300, !1309,
|
||||||
|
!1119, #2901, !1313, !1251, !1285, !1307, !1318, !1310, !1320, !1327, !1315,
|
||||||
|
!1289, !1331, !1332, !1333, !1334, !1340, !1287, !1308, !1346, !1299, !1343,
|
||||||
|
!1351, !1352, !1322]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Marco Trevisan (Treviño), Chingkai, Jonas Dreßler, Carlos Garnacho,
|
||||||
|
Sebastian Keller, MOZGIII, Florian Müllner, Georges Basile Stavracas Neto,
|
||||||
|
Mariana Picolo, Daniel van Vugt, fludixx, yun341, Jonas Ådahl
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Daniel Mustieles [es], Boyuan Yang [zh_CN], Yuri Chornoivan [uk],
|
||||||
|
Jordi Mas [ca], sicklylife [ja], Emin Tufan Çetin [tr],
|
||||||
|
Baurzhan Muftakhidinov [kk], Florentina Mușat [ro], Aurimas Černius [lt],
|
||||||
|
Rūdolfs Mazurs [lv]
|
||||||
|
|
||||||
3.37.2
|
3.37.2
|
||||||
======
|
======
|
||||||
* Add support for "PrefersNonDefaultGPU" desktop key [Bastien; !1226]
|
* Add support for "PrefersNonDefaultGPU" desktop key [Bastien; !1226]
|
||||||
|
@ -1,17 +1,13 @@
|
|||||||
/* App Grid */
|
/* App Grid */
|
||||||
|
|
||||||
$app_icon_size: 96px;
|
$app_icon_size: 96px;
|
||||||
$app_icon_padding: 24px;
|
|
||||||
|
|
||||||
// app icons
|
// app icons
|
||||||
.icon-grid {
|
.icon-grid {
|
||||||
-shell-grid-horizontal-item-size: $app_icon_size + $app_icon_padding * 2;
|
row-spacing: $base_spacing * 6;
|
||||||
-shell-grid-vertical-item-size: $app_icon_size + $app_icon_padding * 2;
|
column-spacing: $base_spacing * 6;
|
||||||
spacing: $base_spacing * 6;
|
max-row-spacing: $base_spacing * 12;
|
||||||
|
max-column-spacing: $base_spacing * 12;
|
||||||
.overview-icon {
|
|
||||||
icon-size: $app_icon_size;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* App Icons */
|
/* App Icons */
|
||||||
@ -42,8 +38,8 @@ $app_grid_fg_color: #fff;
|
|||||||
.app-folder-dialog {
|
.app-folder-dialog {
|
||||||
border-radius: $modal_radius * 1.5;
|
border-radius: $modal_radius * 1.5;
|
||||||
border: 1px solid $osd_outer_borders_color;
|
border: 1px solid $osd_outer_borders_color;
|
||||||
spacing: 12px;
|
|
||||||
background-color: transparentize(darken($osd_bg_color,10%), 0.05);
|
background-color: transparentize(darken($osd_bg_color,10%), 0.05);
|
||||||
|
padding: 12px;
|
||||||
|
|
||||||
& .folder-name-container {
|
& .folder-name-container {
|
||||||
padding: 24px 36px 0;
|
padding: 24px 36px 0;
|
||||||
@ -52,7 +48,7 @@ $app_grid_fg_color: #fff;
|
|||||||
& .folder-name-label,
|
& .folder-name-label,
|
||||||
& .folder-name-entry {
|
& .folder-name-entry {
|
||||||
font-size: 18pt;
|
font-size: 18pt;
|
||||||
font-weight: bold;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .folder-name-entry { width: 300px }
|
& .folder-name-entry { width: 300px }
|
||||||
@ -71,11 +67,24 @@ $app_grid_fg_color: #fff;
|
|||||||
& > StIcon { icon-size: 16px }
|
& > StIcon { icon-size: 16px }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
& .icon-grid {
|
||||||
|
row-spacing: $base_spacing * 2;
|
||||||
|
column-spacing: $base_spacing * 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .page-indicators {
|
||||||
|
margin-bottom: 18px;
|
||||||
|
|
||||||
|
.page-indicator {
|
||||||
|
padding: 15px 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.app-folder-dialog-container {
|
.app-folder-dialog-container {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
width: 800px;
|
width: 620px;
|
||||||
height: 600px;
|
height: 620px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-folder-icon {
|
.app-folder-icon {
|
||||||
|
@ -177,6 +177,32 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Events */
|
||||||
|
.events-button {
|
||||||
|
@include notification_bubble;
|
||||||
|
padding: $base_padding * 2;
|
||||||
|
|
||||||
|
.events-box {
|
||||||
|
spacing: $base_spacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
.events-list {
|
||||||
|
spacing: 2 * $base_spacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
.events-title {
|
||||||
|
color: desaturate(darken($fg_color,40%), 10%);
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: $base_margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.event-time {
|
||||||
|
color: darken($fg_color,20%);
|
||||||
|
font-feature-settings: "tnum";
|
||||||
|
@include fontsize($base_font_size - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* World clocks */
|
/* World clocks */
|
||||||
.world-clocks-button {
|
.world-clocks-button {
|
||||||
@include notification_bubble;
|
@include notification_bubble;
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
/* Window Picker */
|
/* Window Picker */
|
||||||
|
|
||||||
$window_picker_spacing: $base_spacing * 2; // 16px
|
$window_picker_spacing: $base_spacing; // 6px
|
||||||
$window_picker_padding: $base_padding * 2; // 16px
|
$window_picker_padding: $base_padding * 2; // 12px
|
||||||
|
|
||||||
$window_thumbnail_border_color:transparentize($selected_fg_color, 0.65);
|
$window_thumbnail_border_color:transparentize($selected_fg_color, 0.65);
|
||||||
|
|
||||||
$window_close_button_size: 24px;
|
$window_close_button_size: 24px;
|
||||||
$window_close_button_padding: 3px;
|
$window_close_button_padding: 3px;
|
||||||
|
|
||||||
|
$window_clone_border_size: 6px;
|
||||||
|
|
||||||
// Window picker
|
// Window picker
|
||||||
.window-picker {
|
.window-picker {
|
||||||
// Space between window thumbnails
|
// Space between window thumbnails
|
||||||
-horizontal-spacing: $window_picker_spacing;
|
spacing: $window_picker_spacing;
|
||||||
-vertical-spacing: $window_picker_spacing;
|
|
||||||
// Padding for container around window thumbnails
|
// Padding for container around window thumbnails
|
||||||
padding: $window_picker_padding;
|
padding: $window_picker_padding;
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ $window_close_button_padding: 3px;
|
|||||||
|
|
||||||
// Borders on window thumbnails
|
// Borders on window thumbnails
|
||||||
.window-clone-border {
|
.window-clone-border {
|
||||||
border-width: 6px;
|
border-width: $window_clone_border_size;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-color: $window_thumbnail_border_color;
|
border-color: $window_thumbnail_border_color;
|
||||||
border-radius: $base_border_radius + 2;
|
border-radius: $base_border_radius + 2;
|
||||||
@ -54,8 +55,6 @@ $window_close_button_padding: 3px;
|
|||||||
width: $window_close_button_size;
|
width: $window_close_button_size;
|
||||||
box-shadow: -1px 1px 5px 0px rgba(0,0,0,0.5);
|
box-shadow: -1px 1px 5px 0px rgba(0,0,0,0.5);
|
||||||
|
|
||||||
-shell-close-overlap: $window_close_button_size * 0.5;
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: lighten($selected_bg_color, 5%);
|
background-color: lighten($selected_bg_color, 5%);
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
|
this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
|
||||||
this._userVerifier.connect('reset', this._onReset.bind(this));
|
this._userVerifier.connect('reset', this._onReset.bind(this));
|
||||||
this._userVerifier.connect('smartcard-status-changed', this._onSmartcardStatusChanged.bind(this));
|
this._userVerifier.connect('smartcard-status-changed', this._onSmartcardStatusChanged.bind(this));
|
||||||
this._userVerifier.connect('ovirt-user-authenticated', this._onOVirtUserAuthenticated.bind(this));
|
this._userVerifier.connect('credential-manager-authenticated', this._onCredentialManagerAuthenticated.bind(this));
|
||||||
this.smartcardDetected = this._userVerifier.smartcardDetected;
|
this.smartcardDetected = this._userVerifier.smartcardDetected;
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
@ -242,7 +242,7 @@ var AuthPrompt = GObject.registerClass({
|
|||||||
this.emit('prompted');
|
this.emit('prompted');
|
||||||
}
|
}
|
||||||
|
|
||||||
_onOVirtUserAuthenticated() {
|
_onCredentialManagerAuthenticated() {
|
||||||
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
|
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
|
24
js/gdm/credentialManager.js
Normal file
24
js/gdm/credentialManager.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/* exported CredentialManager */
|
||||||
|
|
||||||
|
class CredentialManager {
|
||||||
|
constructor(service) {
|
||||||
|
this._token = null;
|
||||||
|
this._service = service;
|
||||||
|
this._authenticatedSignalId = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get token() {
|
||||||
|
return this._token;
|
||||||
|
}
|
||||||
|
|
||||||
|
set token(t) {
|
||||||
|
this._token = t;
|
||||||
|
if (this._token)
|
||||||
|
this.emit('user-authenticated', this._token);
|
||||||
|
}
|
||||||
|
|
||||||
|
get service() {
|
||||||
|
return this._service;
|
||||||
|
}
|
||||||
|
}
|
@ -810,8 +810,8 @@ var LoginDialog = GObject.registerClass({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._logoBin.destroy_all_children();
|
this._logoBin.destroy_all_children();
|
||||||
const [valid, resourceScale] = this._logoBin.get_resource_scale();
|
const resourceScale = this._logoBin.get_resource_scale();
|
||||||
if (this._logoFile && valid) {
|
if (this._logoFile) {
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
|
this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
|
||||||
-1, -1,
|
-1, -1,
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
const Credential = imports.gdm.credentialManager;
|
||||||
|
|
||||||
|
var SERVICE_NAME = 'gdm-ovirtcred';
|
||||||
|
|
||||||
const OVirtCredentialsIface = `
|
const OVirtCredentialsIface = `
|
||||||
<node>
|
<node>
|
||||||
@ -28,30 +31,14 @@ function OVirtCredentials() {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
var OVirtCredentialsManager = class {
|
var OVirtCredentialsManager = class OVirtCredentialsManager extends Credential.CredentialManager {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._token = null;
|
super(SERVICE_NAME);
|
||||||
|
|
||||||
this._credentials = new OVirtCredentials();
|
this._credentials = new OVirtCredentials();
|
||||||
this._credentials.connectSignal('UserAuthenticated',
|
this._credentials.connectSignal('UserAuthenticated',
|
||||||
this._onUserAuthenticated.bind(this));
|
(proxy, sender, [token]) => {
|
||||||
}
|
this.token = token;
|
||||||
|
});
|
||||||
_onUserAuthenticated(proxy, sender, [token]) {
|
|
||||||
this._token = token;
|
|
||||||
this.emit('user-authenticated', token);
|
|
||||||
}
|
|
||||||
|
|
||||||
hasToken() {
|
|
||||||
return this._token != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
getToken() {
|
|
||||||
return this._token;
|
|
||||||
}
|
|
||||||
|
|
||||||
resetToken() {
|
|
||||||
this._token = null;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Signals.addSignalMethods(OVirtCredentialsManager.prototype);
|
Signals.addSignalMethods(OVirtCredentialsManager.prototype);
|
||||||
|
@ -8,6 +8,7 @@ const Signals = imports.signals;
|
|||||||
const Batch = imports.gdm.batch;
|
const Batch = imports.gdm.batch;
|
||||||
const Fprint = imports.gdm.fingerprint;
|
const Fprint = imports.gdm.fingerprint;
|
||||||
const OVirt = imports.gdm.oVirt;
|
const OVirt = imports.gdm.oVirt;
|
||||||
|
const Vmware = imports.gdm.vmware;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const SmartcardManager = imports.misc.smartcardManager;
|
const SmartcardManager = imports.misc.smartcardManager;
|
||||||
@ -24,7 +25,6 @@ Gio._promisify(Gdm.UserVerifierProxy.prototype,
|
|||||||
var PASSWORD_SERVICE_NAME = 'gdm-password';
|
var PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||||
var FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
var FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||||
var SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
var SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
||||||
var OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
|
|
||||||
var FADE_ANIMATION_TIME = 160;
|
var FADE_ANIMATION_TIME = 160;
|
||||||
var CLONE_FADE_ANIMATION_TIME = 250;
|
var CLONE_FADE_ANIMATION_TIME = 250;
|
||||||
|
|
||||||
@ -160,13 +160,20 @@ var ShellUserVerifier = class {
|
|||||||
|
|
||||||
this._failCounter = 0;
|
this._failCounter = 0;
|
||||||
|
|
||||||
this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
|
this._credentialManagers = {};
|
||||||
|
this._credentialManagers[OVirt.SERVICE_NAME] = OVirt.getOVirtCredentialsManager();
|
||||||
|
this._credentialManagers[Vmware.SERVICE_NAME] = Vmware.getVmwareCredentialsManager();
|
||||||
|
|
||||||
if (this._oVirtCredentialsManager.hasToken())
|
for (let service in this._credentialManagers) {
|
||||||
this._oVirtUserAuthenticated(this._oVirtCredentialsManager.getToken());
|
if (this._credentialManagers[service].token) {
|
||||||
|
this._onCredentialManagerAuthenticated(this._credentialManagers[service],
|
||||||
|
this._credentialManagers[service].token);
|
||||||
|
}
|
||||||
|
|
||||||
this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated',
|
this._credentialManagers[service]._authenticatedSignalId =
|
||||||
this._oVirtUserAuthenticated.bind(this));
|
this._credentialManagers[service].connect('user-authenticated',
|
||||||
|
this._onCredentialManagerAuthenticated.bind(this));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
begin(userName, hold) {
|
begin(userName, hold) {
|
||||||
@ -222,8 +229,11 @@ var ShellUserVerifier = class {
|
|||||||
this._smartcardManager.disconnect(this._smartcardRemovedId);
|
this._smartcardManager.disconnect(this._smartcardRemovedId);
|
||||||
this._smartcardManager = null;
|
this._smartcardManager = null;
|
||||||
|
|
||||||
this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId);
|
for (let service in this._credentialManagers) {
|
||||||
this._oVirtCredentialsManager = null;
|
let credentialManager = this._credentialManagers[service];
|
||||||
|
credentialManager.disconnect(credentialManager._authenticatedSignalId);
|
||||||
|
credentialManager = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
answerQuery(serviceName, answer) {
|
answerQuery(serviceName, answer) {
|
||||||
@ -311,9 +321,9 @@ var ShellUserVerifier = class {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_oVirtUserAuthenticated(_token) {
|
_onCredentialManagerAuthenticated(credentialManager, _token) {
|
||||||
this._preemptingService = OVIRT_SERVICE_NAME;
|
this._preemptingService = credentialManager.service;
|
||||||
this.emit('ovirt-user-authenticated');
|
this.emit('credential-manager-authenticated');
|
||||||
}
|
}
|
||||||
|
|
||||||
_checkForSmartcard() {
|
_checkForSmartcard() {
|
||||||
@ -490,9 +500,12 @@ var ShellUserVerifier = class {
|
|||||||
if (!this.serviceIsForeground(serviceName))
|
if (!this.serviceIsForeground(serviceName))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (serviceName == OVIRT_SERVICE_NAME) {
|
let token = null;
|
||||||
// The only question asked by this service is "Token?"
|
if (this._credentialManagers[serviceName])
|
||||||
this.answerQuery(serviceName, this._oVirtCredentialsManager.getToken());
|
token = this._credentialManagers[serviceName].token;
|
||||||
|
|
||||||
|
if (token) {
|
||||||
|
this.answerQuery(serviceName, token);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,8 +573,10 @@ var ShellUserVerifier = class {
|
|||||||
// If the login failed with the preauthenticated oVirt credentials
|
// If the login failed with the preauthenticated oVirt credentials
|
||||||
// then discard the credentials and revert to default authentication
|
// then discard the credentials and revert to default authentication
|
||||||
// mechanism.
|
// mechanism.
|
||||||
if (this.serviceIsForeground(OVIRT_SERVICE_NAME)) {
|
let foregroundService = Object.keys(this._credentialManagers).find(service =>
|
||||||
this._oVirtCredentialsManager.resetToken();
|
this.serviceIsForeground(service));
|
||||||
|
if (foregroundService) {
|
||||||
|
this._credentialManagers[foregroundService].token = null;
|
||||||
this._preemptingService = null;
|
this._preemptingService = null;
|
||||||
this._verificationFailed(false);
|
this._verificationFailed(false);
|
||||||
return;
|
return;
|
||||||
|
54
js/gdm/vmware.js
Normal file
54
js/gdm/vmware.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/* exported getVmwareCredentialsManager */
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Credential = imports.gdm.credentialManager;
|
||||||
|
|
||||||
|
const dbusPath = '/org/vmware/viewagent/Credentials';
|
||||||
|
const dbusInterface = 'org.vmware.viewagent.Credentials';
|
||||||
|
|
||||||
|
var SERVICE_NAME = 'gdm-vmwcred';
|
||||||
|
|
||||||
|
const VmwareCredentialsIface = '<node> \
|
||||||
|
<interface name="' + dbusInterface + '"> \
|
||||||
|
<signal name="UserAuthenticated"> \
|
||||||
|
<arg type="s" name="token"/> \
|
||||||
|
</signal> \
|
||||||
|
</interface> \
|
||||||
|
</node>';
|
||||||
|
|
||||||
|
|
||||||
|
const VmwareCredentialsInfo = Gio.DBusInterfaceInfo.new_for_xml(VmwareCredentialsIface);
|
||||||
|
|
||||||
|
let _vmwareCredentialsManager = null;
|
||||||
|
|
||||||
|
function VmwareCredentials() {
|
||||||
|
var self = new Gio.DBusProxy({ g_connection: Gio.DBus.session,
|
||||||
|
g_interface_name: VmwareCredentialsInfo.name,
|
||||||
|
g_interface_info: VmwareCredentialsInfo,
|
||||||
|
g_name: dbusInterface,
|
||||||
|
g_object_path: dbusPath,
|
||||||
|
g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES });
|
||||||
|
self.init(null);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
var VmwareCredentialsManager = class VmwareCredentialsManager extends Credential.CredentialManager {
|
||||||
|
constructor() {
|
||||||
|
super(SERVICE_NAME);
|
||||||
|
this._credentials = new VmwareCredentials();
|
||||||
|
this._credentials.connectSignal('UserAuthenticated',
|
||||||
|
(proxy, sender, [token]) => {
|
||||||
|
this.token = token;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Signals.addSignalMethods(VmwareCredentialsManager.prototype);
|
||||||
|
|
||||||
|
function getVmwareCredentialsManager() {
|
||||||
|
if (!_vmwareCredentialsManager)
|
||||||
|
_vmwareCredentialsManager = new VmwareCredentialsManager();
|
||||||
|
|
||||||
|
return _vmwareCredentialsManager;
|
||||||
|
}
|
@ -6,6 +6,8 @@
|
|||||||
<file>gdm/fingerprint.js</file>
|
<file>gdm/fingerprint.js</file>
|
||||||
<file>gdm/loginDialog.js</file>
|
<file>gdm/loginDialog.js</file>
|
||||||
<file>gdm/oVirt.js</file>
|
<file>gdm/oVirt.js</file>
|
||||||
|
<file>gdm/credentialManager.js</file>
|
||||||
|
<file>gdm/vmware.js</file>
|
||||||
<file>gdm/realmd.js</file>
|
<file>gdm/realmd.js</file>
|
||||||
<file>gdm/util.js</file>
|
<file>gdm/util.js</file>
|
||||||
|
|
||||||
@ -108,6 +110,7 @@
|
|||||||
<file>ui/windowAttentionHandler.js</file>
|
<file>ui/windowAttentionHandler.js</file>
|
||||||
<file>ui/windowMenu.js</file>
|
<file>ui/windowMenu.js</file>
|
||||||
<file>ui/windowManager.js</file>
|
<file>ui/windowManager.js</file>
|
||||||
|
<file>ui/windowPreview.js</file>
|
||||||
<file>ui/workspace.js</file>
|
<file>ui/workspace.js</file>
|
||||||
<file>ui/workspaceSwitcherPopup.js</file>
|
<file>ui/workspaceSwitcherPopup.js</file>
|
||||||
<file>ui/workspaceThumbnail.js</file>
|
<file>ui/workspaceThumbnail.js</file>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
|
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
|
||||||
formatTime, formatTimeSpan, createTimeLabel, insertSorted,
|
formatTime, formatTimeSpan, createTimeLabel, insertSorted,
|
||||||
makeCloseButton, ensureActorVisibleInScrollView, wiggle */
|
ensureActorVisibleInScrollView, wiggle */
|
||||||
|
|
||||||
const { Clutter, Gio, GLib, GObject, Shell, St, GnomeDesktop } = imports.gi;
|
const { Clutter, Gio, GLib, Shell, St, GnomeDesktop } = imports.gi;
|
||||||
const Gettext = imports.gettext;
|
const Gettext = imports.gettext;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@ -363,51 +363,6 @@ function insertSorted(array, val, cmp) {
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
var CloseButton = GObject.registerClass(
|
|
||||||
class CloseButton extends St.Button {
|
|
||||||
_init(boxpointer) {
|
|
||||||
super._init({
|
|
||||||
style_class: 'notification-close',
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
x_align: Clutter.ActorAlign.END,
|
|
||||||
y_align: Clutter.ActorAlign.START,
|
|
||||||
});
|
|
||||||
|
|
||||||
this._boxPointer = boxpointer;
|
|
||||||
if (boxpointer)
|
|
||||||
this._boxPointer.connect('arrow-side-changed', this._sync.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
_computeBoxPointerOffset() {
|
|
||||||
if (!this._boxPointer || !this._boxPointer.get_stage())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
let side = this._boxPointer.arrowSide;
|
|
||||||
if (side == St.Side.TOP)
|
|
||||||
return this._boxPointer.getArrowHeight();
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_sync() {
|
|
||||||
let themeNode = this.get_theme_node();
|
|
||||||
|
|
||||||
let offY = this._computeBoxPointerOffset();
|
|
||||||
this.translation_x = themeNode.get_length('-shell-close-overlap-x');
|
|
||||||
this.translation_y = themeNode.get_length('-shell-close-overlap-y') + offY;
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_style_changed() {
|
|
||||||
this._sync();
|
|
||||||
super.vfunc_style_changed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
function makeCloseButton(boxpointer) {
|
|
||||||
return new CloseButton(boxpointer);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ensureActorVisibleInScrollView(scrollView, actor) {
|
function ensureActorVisibleInScrollView(scrollView, actor) {
|
||||||
let adjustment = scrollView.vscroll.adjustment;
|
let adjustment = scrollView.vscroll.adjustment;
|
||||||
let [value, lower_, upper, stepIncrement_, pageIncrement_, pageSize] = adjustment.get_values();
|
let [value, lower_, upper, stepIncrement_, pageIncrement_, pageSize] = adjustment.get_values();
|
||||||
|
@ -852,6 +852,9 @@ class AppSwitcher extends SwitcherPopup.SwitcherList {
|
|||||||
if (index === -1)
|
if (index === -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._arrows[index].destroy();
|
||||||
|
this._arrows.splice(index, 1);
|
||||||
|
|
||||||
this.icons.splice(index, 1);
|
this.icons.splice(index, 1);
|
||||||
this.removeItem(index);
|
this.removeItem(index);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ class Animation extends St.Bin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_loadFile(file, width, height) {
|
_loadFile(file, width, height) {
|
||||||
let [validResourceScale, resourceScale] = this.get_resource_scale();
|
const resourceScale = this.get_resource_scale();
|
||||||
let wasPlaying = this._isPlaying;
|
let wasPlaying = this._isPlaying;
|
||||||
|
|
||||||
if (this._isPlaying)
|
if (this._isPlaying)
|
||||||
@ -69,12 +69,6 @@ class Animation extends St.Bin {
|
|||||||
this._isLoaded = false;
|
this._isLoaded = false;
|
||||||
this.destroy_all_children();
|
this.destroy_all_children();
|
||||||
|
|
||||||
if (!validResourceScale) {
|
|
||||||
if (wasPlaying)
|
|
||||||
this.play();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
let textureCache = St.TextureCache.get_default();
|
||||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
this._animations = textureCache.load_sliced_image(file, width, height,
|
this._animations = textureCache.load_sliced_image(file, width, height,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -512,8 +512,8 @@ var SystemBackground = GObject.registerClass({
|
|||||||
super._init({
|
super._init({
|
||||||
meta_display: global.display,
|
meta_display: global.display,
|
||||||
monitor: 0,
|
monitor: 0,
|
||||||
background: _systemBackground,
|
|
||||||
});
|
});
|
||||||
|
this.content.background = _systemBackground;
|
||||||
|
|
||||||
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
|
||||||
this.emit('loaded');
|
this.emit('loaded');
|
||||||
@ -712,13 +712,18 @@ var BackgroundManager = class BackgroundManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let newBackgroundActor = this._createBackgroundActor();
|
let newBackgroundActor = this._createBackgroundActor();
|
||||||
newBackgroundActor.vignette_sharpness = this.backgroundActor.vignette_sharpness;
|
|
||||||
newBackgroundActor.brightness = this.backgroundActor.brightness;
|
const oldContent = this.backgroundActor.content;
|
||||||
|
const newContent = newBackgroundActor.content;
|
||||||
|
|
||||||
|
newContent.vignette_sharpness = oldContent.vignette_sharpness;
|
||||||
|
newContent.brightness = oldContent.brightness;
|
||||||
|
|
||||||
newBackgroundActor.visible = this.backgroundActor.visible;
|
newBackgroundActor.visible = this.backgroundActor.visible;
|
||||||
|
|
||||||
this._newBackgroundActor = newBackgroundActor;
|
this._newBackgroundActor = newBackgroundActor;
|
||||||
|
|
||||||
let background = newBackgroundActor.background;
|
const { background } = newBackgroundActor.content;
|
||||||
|
|
||||||
if (background.isLoaded) {
|
if (background.isLoaded) {
|
||||||
this._swapBackgroundActor();
|
this._swapBackgroundActor();
|
||||||
@ -738,6 +743,8 @@ var BackgroundManager = class BackgroundManager {
|
|||||||
let backgroundActor = new Meta.BackgroundActor({
|
let backgroundActor = new Meta.BackgroundActor({
|
||||||
meta_display: global.display,
|
meta_display: global.display,
|
||||||
monitor: this._monitorIndex,
|
monitor: this._monitorIndex,
|
||||||
|
});
|
||||||
|
backgroundActor.content.set({
|
||||||
background,
|
background,
|
||||||
vignette: this._vignette,
|
vignette: this._vignette,
|
||||||
vignette_sharpness: 0.5,
|
vignette_sharpness: 0.5,
|
||||||
|
@ -14,7 +14,6 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
|
|||||||
|
|
||||||
var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
||||||
var SHOW_WEEKDATE_KEY = 'show-weekdate';
|
var SHOW_WEEKDATE_KEY = 'show-weekdate';
|
||||||
var ELLIPSIS_CHAR = '\u2026';
|
|
||||||
|
|
||||||
var MESSAGE_ICON_SIZE = -1; // pick up from CSS
|
var MESSAGE_ICON_SIZE = -1; // pick up from CSS
|
||||||
|
|
||||||
@ -32,10 +31,6 @@ function sameDay(dateA, dateB) {
|
|||||||
return sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate());
|
return sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate());
|
||||||
}
|
}
|
||||||
|
|
||||||
function isToday(date) {
|
|
||||||
return sameDay(new Date(), date);
|
|
||||||
}
|
|
||||||
|
|
||||||
function _isWorkDay(date) {
|
function _isWorkDay(date) {
|
||||||
/* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
|
/* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
|
||||||
let days = C_('calendar-no-work', "06");
|
let days = C_('calendar-no-work', "06");
|
||||||
@ -723,67 +718,6 @@ var Calendar = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var EventMessage = GObject.registerClass(
|
|
||||||
class EventMessage extends MessageList.Message {
|
|
||||||
_init(event, date) {
|
|
||||||
super._init('', '');
|
|
||||||
|
|
||||||
this._date = date;
|
|
||||||
|
|
||||||
this.update(event);
|
|
||||||
|
|
||||||
this._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' });
|
|
||||||
this.setIcon(this._icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_style_changed() {
|
|
||||||
let iconVisible = this.get_parent().has_style_pseudo_class('first-child');
|
|
||||||
this._icon.opacity = iconVisible ? 255 : 0;
|
|
||||||
super.vfunc_style_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
update(event) {
|
|
||||||
this._event = event;
|
|
||||||
|
|
||||||
this.setTitle(this._formatEventTime());
|
|
||||||
this.setBody(event.summary);
|
|
||||||
}
|
|
||||||
|
|
||||||
_formatEventTime() {
|
|
||||||
let periodBegin = _getBeginningOfDay(this._date);
|
|
||||||
let periodEnd = _getEndOfDay(this._date);
|
|
||||||
let allDay = this._event.allDay || (this._event.date <= periodBegin &&
|
|
||||||
this._event.end >= periodEnd);
|
|
||||||
let title;
|
|
||||||
if (allDay) {
|
|
||||||
/* Translators: Shown in calendar event list for all day events
|
|
||||||
* Keep it short, best if you can use less then 10 characters
|
|
||||||
*/
|
|
||||||
title = C_("event list time", "All Day");
|
|
||||||
} else {
|
|
||||||
let date = this._event.date >= periodBegin
|
|
||||||
? this._event.date
|
|
||||||
: this._event.end;
|
|
||||||
title = Util.formatTime(date, { timeOnly: true });
|
|
||||||
}
|
|
||||||
|
|
||||||
let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL;
|
|
||||||
if (this._event.date < periodBegin && !this._event.allDay) {
|
|
||||||
if (rtl)
|
|
||||||
title = '%s%s'.format(title, ELLIPSIS_CHAR);
|
|
||||||
else
|
|
||||||
title = '%s%s'.format(ELLIPSIS_CHAR, title);
|
|
||||||
}
|
|
||||||
if (this._event.end > periodEnd && !this._event.allDay) {
|
|
||||||
if (rtl)
|
|
||||||
title = '%s%s'.format(ELLIPSIS_CHAR, title);
|
|
||||||
else
|
|
||||||
title = '%s%s'.format(title, ELLIPSIS_CHAR);
|
|
||||||
}
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var NotificationMessage = GObject.registerClass(
|
var NotificationMessage = GObject.registerClass(
|
||||||
class NotificationMessage extends MessageList.Message {
|
class NotificationMessage extends MessageList.Message {
|
||||||
_init(notification) {
|
_init(notification) {
|
||||||
@ -849,149 +783,6 @@ class NotificationMessage extends MessageList.Message {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var EventsSection = GObject.registerClass(
|
|
||||||
class EventsSection extends MessageList.MessageListSection {
|
|
||||||
_init() {
|
|
||||||
super._init();
|
|
||||||
|
|
||||||
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
|
||||||
this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
|
|
||||||
this._eventSource = new EmptyEventSource();
|
|
||||||
|
|
||||||
this._messageById = new Map();
|
|
||||||
|
|
||||||
this._title = new St.Button({ style_class: 'events-section-title',
|
|
||||||
label: '',
|
|
||||||
can_focus: true });
|
|
||||||
this._title.child.x_align = Clutter.ActorAlign.START;
|
|
||||||
this.insert_child_below(this._title, null);
|
|
||||||
|
|
||||||
this._title.connect('clicked', this._onTitleClicked.bind(this));
|
|
||||||
this._title.connect('key-focus-in', this._onKeyFocusIn.bind(this));
|
|
||||||
|
|
||||||
this._appSys = Shell.AppSystem.get_default();
|
|
||||||
this._appSys.connect('installed-changed',
|
|
||||||
this._appInstalledChanged.bind(this));
|
|
||||||
this._appInstalledChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
setEventSource(eventSource) {
|
|
||||||
if (!(eventSource instanceof EventSourceBase))
|
|
||||||
throw new Error('Event source is not valid type');
|
|
||||||
|
|
||||||
this._eventSource = eventSource;
|
|
||||||
this._eventSource.connect('changed', this._reloadEvents.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
get allowed() {
|
|
||||||
return Main.sessionMode.showCalendarEvents;
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateTitle() {
|
|
||||||
this._title.visible = !isToday(this._date);
|
|
||||||
|
|
||||||
if (!this._title.visible)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let dayFormat;
|
|
||||||
let now = new Date();
|
|
||||||
if (sameYear(this._date, now)) {
|
|
||||||
/* Translators: Shown on calendar heading when selected day occurs on current year */
|
|
||||||
dayFormat = Shell.util_translate_time_string(NC_("calendar heading", "%A, %B %-d"));
|
|
||||||
} else {
|
|
||||||
/* Translators: Shown on calendar heading when selected day occurs on different year */
|
|
||||||
dayFormat = Shell.util_translate_time_string(NC_("calendar heading", "%A, %B %-d, %Y"));
|
|
||||||
}
|
|
||||||
this._title.label = this._date.toLocaleFormat(dayFormat);
|
|
||||||
}
|
|
||||||
|
|
||||||
_reloadEvents() {
|
|
||||||
if (this._eventSource.isLoading || this._reloading)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._reloading = true;
|
|
||||||
|
|
||||||
let periodBegin = _getBeginningOfDay(this._date);
|
|
||||||
let periodEnd = _getEndOfDay(this._date);
|
|
||||||
let events = this._eventSource.getEvents(periodBegin, periodEnd);
|
|
||||||
|
|
||||||
let ids = events.map(e => e.id);
|
|
||||||
this._messageById.forEach((message, id) => {
|
|
||||||
if (ids.includes(id))
|
|
||||||
return;
|
|
||||||
this._messageById.delete(id);
|
|
||||||
this.removeMessage(message);
|
|
||||||
});
|
|
||||||
|
|
||||||
for (let i = 0; i < events.length; i++) {
|
|
||||||
let event = events[i];
|
|
||||||
|
|
||||||
let message = this._messageById.get(event.id);
|
|
||||||
if (!message) {
|
|
||||||
message = new EventMessage(event, this._date);
|
|
||||||
this._messageById.set(event.id, message);
|
|
||||||
this.addMessage(message, false);
|
|
||||||
} else {
|
|
||||||
message.update(event);
|
|
||||||
this.moveMessage(message, i, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this._reloading = false;
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
_appInstalledChanged() {
|
|
||||||
this._calendarApp = undefined;
|
|
||||||
this._title.reactive = this._getCalendarApp() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
_getCalendarApp() {
|
|
||||||
if (this._calendarApp !== undefined)
|
|
||||||
return this._calendarApp;
|
|
||||||
|
|
||||||
let apps = Gio.AppInfo.get_recommended_for_type('text/calendar');
|
|
||||||
if (apps && (apps.length > 0)) {
|
|
||||||
let app = Gio.AppInfo.get_default_for_type('text/calendar', false);
|
|
||||||
let defaultInRecommended = apps.some(a => a.equal(app));
|
|
||||||
this._calendarApp = defaultInRecommended ? app : apps[0];
|
|
||||||
} else {
|
|
||||||
this._calendarApp = null;
|
|
||||||
}
|
|
||||||
return this._calendarApp;
|
|
||||||
}
|
|
||||||
|
|
||||||
_onTitleClicked() {
|
|
||||||
Main.overview.hide();
|
|
||||||
Main.panel.closeCalendar();
|
|
||||||
|
|
||||||
let appInfo = this._getCalendarApp();
|
|
||||||
if (appInfo.get_id() === 'org.gnome.Evolution.desktop') {
|
|
||||||
let app = this._appSys.lookup_app('evolution-calendar.desktop');
|
|
||||||
if (app)
|
|
||||||
appInfo = app.app_info;
|
|
||||||
}
|
|
||||||
appInfo.launch([], global.create_app_launch_context(0, -1));
|
|
||||||
}
|
|
||||||
|
|
||||||
setDate(date) {
|
|
||||||
super.setDate(date);
|
|
||||||
this._updateTitle();
|
|
||||||
this._reloadEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
_shouldShow() {
|
|
||||||
return !this.empty || !isToday(this._date);
|
|
||||||
}
|
|
||||||
|
|
||||||
_sync() {
|
|
||||||
if (this._reloading)
|
|
||||||
return;
|
|
||||||
|
|
||||||
super._sync();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var TimeLabel = GObject.registerClass(
|
var TimeLabel = GObject.registerClass(
|
||||||
class NotificationTimeLabel extends St.Label {
|
class NotificationTimeLabel extends St.Label {
|
||||||
_init(datetime) {
|
_init(datetime) {
|
||||||
@ -1088,10 +879,6 @@ class NotificationSection extends MessageList.MessageListSection {
|
|||||||
});
|
});
|
||||||
super.vfunc_map();
|
super.vfunc_map();
|
||||||
}
|
}
|
||||||
|
|
||||||
_shouldShow() {
|
|
||||||
return !this.empty && isToday(this._date);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var Placeholder = GObject.registerClass(
|
var Placeholder = GObject.registerClass(
|
||||||
@ -1100,41 +887,13 @@ class Placeholder extends St.BoxLayout {
|
|||||||
super._init({ style_class: 'message-list-placeholder', vertical: true });
|
super._init({ style_class: 'message-list-placeholder', vertical: true });
|
||||||
this._date = new Date();
|
this._date = new Date();
|
||||||
|
|
||||||
let todayFile = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/no-notifications.svg');
|
const file = Gio.File.new_for_uri(
|
||||||
let otherFile = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/no-events.svg');
|
'resource:///org/gnome/shell/theme/no-notifications.svg');
|
||||||
this._todayIcon = new Gio.FileIcon({ file: todayFile });
|
this._icon = new St.Icon({ gicon: new Gio.FileIcon({ file }) });
|
||||||
this._otherIcon = new Gio.FileIcon({ file: otherFile });
|
|
||||||
|
|
||||||
this._icon = new St.Icon();
|
|
||||||
this.add_actor(this._icon);
|
this.add_actor(this._icon);
|
||||||
|
|
||||||
this._label = new St.Label();
|
this._label = new St.Label({ text: _('No Notifications') });
|
||||||
this.add_actor(this._label);
|
this.add_actor(this._label);
|
||||||
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
setDate(date) {
|
|
||||||
if (sameDay(this._date, date))
|
|
||||||
return;
|
|
||||||
this._date = date;
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
_sync() {
|
|
||||||
let today = isToday(this._date);
|
|
||||||
if (today && this._icon.gicon == this._todayIcon)
|
|
||||||
return;
|
|
||||||
if (!today && this._icon.gicon == this._otherIcon)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (today) {
|
|
||||||
this._icon.gicon = this._todayIcon;
|
|
||||||
this._label.text = _("No Notifications");
|
|
||||||
} else {
|
|
||||||
this._icon.gicon = this._otherIcon;
|
|
||||||
this._label.text = _("No Events");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1235,9 +994,6 @@ class CalendarMessageList extends St.Widget {
|
|||||||
this._notificationSection = new NotificationSection();
|
this._notificationSection = new NotificationSection();
|
||||||
this._addSection(this._notificationSection);
|
this._addSection(this._notificationSection);
|
||||||
|
|
||||||
this._eventsSection = new EventsSection();
|
|
||||||
this._addSection(this._eventsSection);
|
|
||||||
|
|
||||||
Main.sessionMode.connect('updated', this._sync.bind(this));
|
Main.sessionMode.connect('updated', this._sync.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1273,13 +1029,4 @@ class CalendarMessageList extends St.Widget {
|
|||||||
let canClear = sections.some(s => s.canClear && s.visible);
|
let canClear = sections.some(s => s.canClear && s.visible);
|
||||||
this._clearButton.reactive = canClear;
|
this._clearButton.reactive = canClear;
|
||||||
}
|
}
|
||||||
|
|
||||||
setEventSource(eventSource) {
|
|
||||||
this._eventsSection.setEventSource(eventSource);
|
|
||||||
}
|
|
||||||
|
|
||||||
setDate(date) {
|
|
||||||
this._sectionList.get_children().forEach(s => s.setDate(date));
|
|
||||||
this._placeholder.setDate(date);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
@ -13,7 +13,11 @@ const System = imports.system;
|
|||||||
|
|
||||||
const { loadInterfaceXML } = imports.misc.fileUtils;
|
const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||||
|
|
||||||
|
const NC_ = (context, str) => '%s\u0004%s'.format(context, str);
|
||||||
|
const T_ = Shell.util_translate_time_string;
|
||||||
|
|
||||||
const MAX_FORECASTS = 5;
|
const MAX_FORECASTS = 5;
|
||||||
|
const ELLIPSIS_CHAR = '\u2026';
|
||||||
|
|
||||||
const ClocksIntegrationIface = loadInterfaceXML('org.gnome.Shell.ClocksIntegration');
|
const ClocksIntegrationIface = loadInterfaceXML('org.gnome.Shell.ClocksIntegration');
|
||||||
const ClocksProxy = Gio.DBusProxy.makeProxyWrapper(ClocksIntegrationIface);
|
const ClocksProxy = Gio.DBusProxy.makeProxyWrapper(ClocksIntegrationIface);
|
||||||
@ -84,6 +88,188 @@ class TodayButton extends St.Button {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var EventsSection = GObject.registerClass(
|
||||||
|
class EventsSection extends St.Button {
|
||||||
|
_init() {
|
||||||
|
super._init({
|
||||||
|
style_class: 'events-button',
|
||||||
|
can_focus: true,
|
||||||
|
x_expand: true,
|
||||||
|
child: new St.BoxLayout({
|
||||||
|
style_class: 'events-box',
|
||||||
|
vertical: true,
|
||||||
|
x_expand: true,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
this._startDate = null;
|
||||||
|
this._endDate = null;
|
||||||
|
|
||||||
|
this._eventSource = null;
|
||||||
|
this._calendarApp = null;
|
||||||
|
|
||||||
|
this._title = new St.Label({
|
||||||
|
style_class: 'events-title',
|
||||||
|
});
|
||||||
|
this.child.add_child(this._title);
|
||||||
|
|
||||||
|
this._eventsList = new St.BoxLayout({
|
||||||
|
style_class: 'events-list',
|
||||||
|
vertical: true,
|
||||||
|
x_expand: true,
|
||||||
|
});
|
||||||
|
this.child.add_child(this._eventsList);
|
||||||
|
|
||||||
|
this._appSys = Shell.AppSystem.get_default();
|
||||||
|
this._appSys.connect('installed-changed',
|
||||||
|
this._appInstalledChanged.bind(this));
|
||||||
|
this._appInstalledChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
setDate(date) {
|
||||||
|
const day = [date.getFullYear(), date.getMonth(), date.getDate()];
|
||||||
|
this._startDate = new Date(...day);
|
||||||
|
this._endDate = new Date(...day, 23, 59, 59, 999);
|
||||||
|
|
||||||
|
this._updateTitle();
|
||||||
|
this._reloadEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
setEventSource(eventSource) {
|
||||||
|
if (!(eventSource instanceof Calendar.EventSourceBase))
|
||||||
|
throw new Error('Event source is not valid type');
|
||||||
|
|
||||||
|
this._eventSource = eventSource;
|
||||||
|
this._eventSource.connect('changed', this._reloadEvents.bind(this));
|
||||||
|
this._eventSource.connect('notify::has-calendars',
|
||||||
|
this._sync.bind(this));
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateTitle() {
|
||||||
|
/* Translators: Shown on calendar heading when selected day occurs on current year */
|
||||||
|
const sameYearFormat = T_(NC_('calendar heading', '%B %-d'));
|
||||||
|
|
||||||
|
/* Translators: Shown on calendar heading when selected day occurs on different year */
|
||||||
|
const otherYearFormat = T_(NC_('calendar heading', '%B %-d %Y'));
|
||||||
|
|
||||||
|
const timeSpanDay = GLib.TIME_SPAN_DAY / 1000;
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
if (this._startDate <= now && now <= this._endDate)
|
||||||
|
this._title.text = _('Today');
|
||||||
|
else if (this._endDate < now && now - this._endDate < timeSpanDay)
|
||||||
|
this._title.text = _('Yesterday');
|
||||||
|
else if (this._startDate > now && this._startDate - now < timeSpanDay)
|
||||||
|
this._title.text = _('Tomorrow');
|
||||||
|
else if (this._startDate.getFullYear() === now.getFullYear())
|
||||||
|
this._title.text = this._startDate.toLocaleFormat(sameYearFormat);
|
||||||
|
else
|
||||||
|
this._title.text = this._startDate.toLocaleFormat(otherYearFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
_formatEventTime(event) {
|
||||||
|
const allDay = event.allDay ||
|
||||||
|
(event.date <= this._startDate && event.end >= this._endDate);
|
||||||
|
|
||||||
|
let title;
|
||||||
|
if (allDay) {
|
||||||
|
/* Translators: Shown in calendar event list for all day events
|
||||||
|
* Keep it short, best if you can use less then 10 characters
|
||||||
|
*/
|
||||||
|
title = C_('event list time', 'All Day');
|
||||||
|
} else {
|
||||||
|
let date = event.date >= this._startDate ? event.date : event.end;
|
||||||
|
title = Util.formatTime(date, { timeOnly: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
const rtl = Clutter.get_default_text_direction() === Clutter.TextDirection.RTL;
|
||||||
|
if (event.date < this._startDate && !event.allDay) {
|
||||||
|
if (rtl)
|
||||||
|
title = '%s%s'.format(title, ELLIPSIS_CHAR);
|
||||||
|
else
|
||||||
|
title = '%s%s'.format(ELLIPSIS_CHAR, title);
|
||||||
|
}
|
||||||
|
if (event.end > this._endDate && !event.allDay) {
|
||||||
|
if (rtl)
|
||||||
|
title = '%s%s'.format(ELLIPSIS_CHAR, title);
|
||||||
|
else
|
||||||
|
title = '%s%s'.format(title, ELLIPSIS_CHAR);
|
||||||
|
}
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
_reloadEvents() {
|
||||||
|
if (this._eventSource.isLoading || this._reloading)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._reloading = true;
|
||||||
|
|
||||||
|
[...this._eventsList].forEach(c => c.destroy());
|
||||||
|
|
||||||
|
const events =
|
||||||
|
this._eventSource.getEvents(this._startDate, this._endDate);
|
||||||
|
|
||||||
|
for (let event of events) {
|
||||||
|
const box = new St.BoxLayout({
|
||||||
|
style_class: 'event-box',
|
||||||
|
vertical: true,
|
||||||
|
});
|
||||||
|
box.add(new St.Label({
|
||||||
|
text: event.summary,
|
||||||
|
style_class: 'event-summary',
|
||||||
|
}));
|
||||||
|
box.add(new St.Label({
|
||||||
|
text: this._formatEventTime(event),
|
||||||
|
style_class: 'event-time',
|
||||||
|
}));
|
||||||
|
this._eventsList.add_child(box);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._eventsList.get_n_children() === 0) {
|
||||||
|
const placeholder = new St.Label({
|
||||||
|
text: _('No Events'),
|
||||||
|
style_class: 'event-placeholder',
|
||||||
|
});
|
||||||
|
this._eventsList.add_child(placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._reloading = false;
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_clicked() {
|
||||||
|
Main.overview.hide();
|
||||||
|
Main.panel.closeCalendar();
|
||||||
|
|
||||||
|
let appInfo = this._calendarApp;
|
||||||
|
if (appInfo.get_id() === 'org.gnome.Evolution.desktop') {
|
||||||
|
const app = this._appSys.lookup_app('evolution-calendar.desktop');
|
||||||
|
if (app)
|
||||||
|
appInfo = app.app_info;
|
||||||
|
}
|
||||||
|
appInfo.launch([], global.create_app_launch_context(0, -1));
|
||||||
|
}
|
||||||
|
|
||||||
|
_appInstalledChanged() {
|
||||||
|
const apps = Gio.AppInfo.get_recommended_for_type('text/calendar');
|
||||||
|
if (apps && (apps.length > 0)) {
|
||||||
|
const app = Gio.AppInfo.get_default_for_type('text/calendar', false);
|
||||||
|
const defaultInRecommended = apps.some(a => a.equal(app));
|
||||||
|
this._calendarApp = defaultInRecommended ? app : apps[0];
|
||||||
|
} else {
|
||||||
|
this._calendarApp = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
_sync() {
|
||||||
|
this.visible = this._eventSource && this._eventSource.hasCalendars;
|
||||||
|
this.reactive = this._calendarApp !== null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var WorldClocksSection = GObject.registerClass(
|
var WorldClocksSection = GObject.registerClass(
|
||||||
class WorldClocksSection extends St.Button {
|
class WorldClocksSection extends St.Button {
|
||||||
_init() {
|
_init() {
|
||||||
@ -598,6 +784,7 @@ class DateMenuButton extends PanelMenu.Button {
|
|||||||
|
|
||||||
this._clockDisplay = new St.Label({ style_class: 'clock' });
|
this._clockDisplay = new St.Label({ style_class: 'clock' });
|
||||||
this._clockDisplay.clutter_text.y_align = Clutter.ActorAlign.CENTER;
|
this._clockDisplay.clutter_text.y_align = Clutter.ActorAlign.CENTER;
|
||||||
|
this._clockDisplay.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
|
||||||
this._indicator = new MessagesIndicator();
|
this._indicator = new MessagesIndicator();
|
||||||
|
|
||||||
@ -632,7 +819,7 @@ class DateMenuButton extends PanelMenu.Button {
|
|||||||
this._calendar.connect('selected-date-changed', (_calendar, datetime) => {
|
this._calendar.connect('selected-date-changed', (_calendar, datetime) => {
|
||||||
let date = _gDateTimeToDate(datetime);
|
let date = _gDateTimeToDate(datetime);
|
||||||
layout.frozen = !_isToday(date);
|
layout.frozen = !_isToday(date);
|
||||||
this._messageList.setDate(date);
|
this._eventsItem.setDate(date);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.menu.connect('open-state-changed', (menu, isOpen) => {
|
this.menu.connect('open-state-changed', (menu, isOpen) => {
|
||||||
@ -641,7 +828,7 @@ class DateMenuButton extends PanelMenu.Button {
|
|||||||
let now = new Date();
|
let now = new Date();
|
||||||
this._calendar.setDate(now);
|
this._calendar.setDate(now);
|
||||||
this._date.setDate(now);
|
this._date.setDate(now);
|
||||||
this._messageList.setDate(now);
|
this._eventsItem.setDate(now);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -672,6 +859,9 @@ class DateMenuButton extends PanelMenu.Button {
|
|||||||
style_class: 'datemenu-displays-box' });
|
style_class: 'datemenu-displays-box' });
|
||||||
this._displaysSection.add_actor(displaysBox);
|
this._displaysSection.add_actor(displaysBox);
|
||||||
|
|
||||||
|
this._eventsItem = new EventsSection();
|
||||||
|
displaysBox.add_child(this._eventsItem);
|
||||||
|
|
||||||
this._clocksItem = new WorldClocksSection();
|
this._clocksItem = new WorldClocksSection();
|
||||||
displaysBox.add_child(this._clocksItem);
|
displaysBox.add_child(this._clocksItem);
|
||||||
|
|
||||||
@ -697,7 +887,7 @@ class DateMenuButton extends PanelMenu.Button {
|
|||||||
this._eventSource.destroy();
|
this._eventSource.destroy();
|
||||||
|
|
||||||
this._calendar.setEventSource(eventSource);
|
this._calendar.setEventSource(eventSource);
|
||||||
this._messageList.setEventSource(eventSource);
|
this._eventsItem.setEventSource(eventSource);
|
||||||
|
|
||||||
this._eventSource = eventSource;
|
this._eventSource = eventSource;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported Dialog, MessageDialogContent, ListSection, ListSectionItem */
|
/* exported Dialog, MessageDialogContent, ListSection, ListSectionItem */
|
||||||
|
|
||||||
const { Clutter, GObject, Meta, Pango, St } = imports.gi;
|
const { Clutter, GLib, GObject, Meta, Pango, St } = imports.gi;
|
||||||
|
|
||||||
function _setLabel(label, value) {
|
function _setLabel(label, value) {
|
||||||
label.set({
|
label.set({
|
||||||
@ -221,13 +221,16 @@ var MessageDialogContent = GObject.registerClass({
|
|||||||
this._updateTitleStyleLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
this._updateTitleStyleLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||||
this._updateTitleStyleLater = 0;
|
this._updateTitleStyleLater = 0;
|
||||||
this._title.add_style_class_name('leightweight');
|
this._title.add_style_class_name('leightweight');
|
||||||
return false;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set title(title) {
|
set title(title) {
|
||||||
|
if (this._title.text === title)
|
||||||
|
return;
|
||||||
|
|
||||||
_setLabel(this._title, title);
|
_setLabel(this._title, title);
|
||||||
|
|
||||||
this._title.remove_style_class_name('leightweight');
|
this._title.remove_style_class_name('leightweight');
|
||||||
@ -237,6 +240,9 @@ var MessageDialogContent = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
set description(description) {
|
set description(description) {
|
||||||
|
if (this._description.text === description)
|
||||||
|
return;
|
||||||
|
|
||||||
_setLabel(this._description, description);
|
_setLabel(this._description, description);
|
||||||
this.notify('description');
|
this.notify('description');
|
||||||
}
|
}
|
||||||
|
42
js/ui/dnd.js
42
js/ui/dnd.js
@ -375,19 +375,30 @@ var _Draggable = class _Draggable {
|
|||||||
|
|
||||||
this._dragActorSource = undefined;
|
this._dragActorSource = undefined;
|
||||||
this._dragOrigParent = this.actor.get_parent();
|
this._dragOrigParent = this.actor.get_parent();
|
||||||
this._dragOrigX = this._dragActor.x;
|
this._dragActorHadFixedPos = this._dragActor.fixed_position_set;
|
||||||
this._dragOrigY = this._dragActor.y;
|
this._dragOrigX = this._dragActor.allocation.x1;
|
||||||
|
this._dragOrigY = this._dragActor.allocation.y1;
|
||||||
|
this._dragOrigWidth = this._dragActor.allocation.get_width();
|
||||||
|
this._dragOrigHeight = this._dragActor.allocation.get_height();
|
||||||
this._dragOrigScale = this._dragActor.scale_x;
|
this._dragOrigScale = this._dragActor.scale_x;
|
||||||
|
|
||||||
|
// When the actor gets reparented to the uiGroup, it will be
|
||||||
|
// allocated its preferred size, so use that size instead of the
|
||||||
|
// current allocation size.
|
||||||
|
const [, newAllocatedWidth] = this._dragActor.get_preferred_width(-1);
|
||||||
|
const [, newAllocatedHeight] = this._dragActor.get_preferred_height(-1);
|
||||||
|
|
||||||
|
const transformedAllocation =
|
||||||
|
Shell.util_get_transformed_allocation(this._dragActor);
|
||||||
|
|
||||||
// Set the actor's scale such that it will keep the same
|
// Set the actor's scale such that it will keep the same
|
||||||
// transformed size when it's reparented to the uiGroup
|
// transformed size when it's reparented to the uiGroup
|
||||||
let [scaledWidth, scaledHeight] = this.actor.get_transformed_size();
|
this._dragActor.set_scale(
|
||||||
this._dragActor.set_scale(scaledWidth / this.actor.width,
|
transformedAllocation.get_width() / newAllocatedWidth,
|
||||||
scaledHeight / this.actor.height);
|
transformedAllocation.get_height() / newAllocatedHeight);
|
||||||
|
|
||||||
let [actorStageX, actorStageY] = this.actor.get_transformed_position();
|
this._dragOffsetX = transformedAllocation.x1 - this._dragStartX;
|
||||||
this._dragOffsetX = actorStageX - this._dragStartX;
|
this._dragOffsetY = transformedAllocation.y1 - this._dragStartY;
|
||||||
this._dragOffsetY = actorStageY - this._dragStartY;
|
|
||||||
|
|
||||||
this._dragOrigParent.remove_actor(this._dragActor);
|
this._dragOrigParent.remove_actor(this._dragActor);
|
||||||
Main.uiGroup.add_child(this._dragActor);
|
Main.uiGroup.add_child(this._dragActor);
|
||||||
@ -417,6 +428,10 @@ var _Draggable = class _Draggable {
|
|||||||
this._dragOffsetX -= transX;
|
this._dragOffsetX -= transX;
|
||||||
this._dragOffsetY -= transY;
|
this._dragOffsetY -= transY;
|
||||||
|
|
||||||
|
this._dragActor.set_position(
|
||||||
|
this._dragX + this._dragOffsetX,
|
||||||
|
this._dragY + this._dragOffsetY);
|
||||||
|
|
||||||
if (this._dragActorMaxSize != undefined) {
|
if (this._dragActorMaxSize != undefined) {
|
||||||
let [scaledWidth, scaledHeight] = this._dragActor.get_transformed_size();
|
let [scaledWidth, scaledHeight] = this._dragActor.get_transformed_size();
|
||||||
let currentSize = Math.max(scaledWidth, scaledHeight);
|
let currentSize = Math.max(scaledWidth, scaledHeight);
|
||||||
@ -635,9 +650,15 @@ var _Draggable = class _Draggable {
|
|||||||
if (parentWidth != 0)
|
if (parentWidth != 0)
|
||||||
parentScale = parentScaledWidth / parentWidth;
|
parentScale = parentScaledWidth / parentWidth;
|
||||||
|
|
||||||
|
// Also adjust for the difference in the original actor width
|
||||||
|
// and the width it is now (children of uiGroup always get
|
||||||
|
// allocated their preferred size)
|
||||||
|
const childScaleX =
|
||||||
|
this._dragOrigWidth / this._dragActor.allocation.get_width();
|
||||||
|
|
||||||
x = parentX + parentScale * this._dragOrigX;
|
x = parentX + parentScale * this._dragOrigX;
|
||||||
y = parentY + parentScale * this._dragOrigY;
|
y = parentY + parentScale * this._dragOrigY;
|
||||||
scale = this._dragOrigScale * parentScale;
|
scale = this._dragOrigScale * parentScale * childScaleX;
|
||||||
} else {
|
} else {
|
||||||
// Snap back actor to its original stage position
|
// Snap back actor to its original stage position
|
||||||
x = this._snapBackX;
|
x = this._snapBackX;
|
||||||
@ -718,7 +739,10 @@ var _Draggable = class _Draggable {
|
|||||||
Main.uiGroup.remove_child(this._dragActor);
|
Main.uiGroup.remove_child(this._dragActor);
|
||||||
this._dragOrigParent.add_actor(this._dragActor);
|
this._dragOrigParent.add_actor(this._dragActor);
|
||||||
dragActor.set_scale(this._dragOrigScale, this._dragOrigScale);
|
dragActor.set_scale(this._dragOrigScale, this._dragOrigScale);
|
||||||
|
if (this._dragActorHadFixedPos)
|
||||||
dragActor.set_position(this._dragOrigX, this._dragOrigY);
|
dragActor.set_position(this._dragOrigX, this._dragOrigY);
|
||||||
|
else
|
||||||
|
dragActor.fixed_position_set = false;
|
||||||
} else {
|
} else {
|
||||||
dragActor.destroy();
|
dragActor.destroy();
|
||||||
}
|
}
|
||||||
|
@ -362,6 +362,10 @@ function init() {
|
|||||||
const Format = imports.format;
|
const Format = imports.format;
|
||||||
|
|
||||||
String.prototype.format = Format.format;
|
String.prototype.format = Format.format;
|
||||||
|
|
||||||
|
Math.clamp = function (x, lower, upper) {
|
||||||
|
return Math.min(Math.max(x, lower), upper);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjustAnimationTime:
|
// adjustAnimationTime:
|
||||||
|
1651
js/ui/iconGrid.js
1651
js/ui/iconGrid.js
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
/* exported InhibitShortcutsDialog */
|
/* exported InhibitShortcutsDialog */
|
||||||
const { Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Gtk, Meta, Pango, Shell, St } = imports.gi;
|
||||||
|
|
||||||
const Dialog = imports.ui.dialog;
|
const Dialog = imports.ui.dialog;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
@ -90,6 +90,8 @@ var InhibitShortcutsDialog = GObject.registerClass({
|
|||||||
text: _('You can restore shortcuts by pressing %s.').format(restoreAccel),
|
text: _('You can restore shortcuts by pressing %s.').format(restoreAccel),
|
||||||
style_class: 'message-dialog-description',
|
style_class: 'message-dialog-description',
|
||||||
});
|
});
|
||||||
|
restoreLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
restoreLabel.clutter_text.line_wrap = true;
|
||||||
content.add_child(restoreLabel);
|
content.add_child(restoreLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,24 @@ class AspectContainer extends St.Widget {
|
|||||||
this.queue_relayout();
|
this.queue_relayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_width(forHeight) {
|
||||||
|
let [min, nat] = super.vfunc_get_preferred_width(forHeight);
|
||||||
|
|
||||||
|
if (forHeight > 0)
|
||||||
|
nat = forHeight * this._ratio;
|
||||||
|
|
||||||
|
return [min, nat];
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_height(forWidth) {
|
||||||
|
let [min, nat] = super.vfunc_get_preferred_height(forWidth);
|
||||||
|
|
||||||
|
if (forWidth > 0)
|
||||||
|
nat = forWidth / this._ratio;
|
||||||
|
|
||||||
|
return [min, nat];
|
||||||
|
}
|
||||||
|
|
||||||
vfunc_allocate(box) {
|
vfunc_allocate(box) {
|
||||||
if (box.get_width() > 0 && box.get_height() > 0) {
|
if (box.get_width() > 0 && box.get_height() > 0) {
|
||||||
let sizeRatio = box.get_width() / box.get_height();
|
let sizeRatio = box.get_width() / box.get_height();
|
||||||
@ -1608,7 +1626,9 @@ class Keyboard extends St.BoxLayout {
|
|||||||
* we allow the OSK being smaller than 1/3rd of the monitor height
|
* we allow the OSK being smaller than 1/3rd of the monitor height
|
||||||
* there.
|
* there.
|
||||||
*/
|
*/
|
||||||
this.height = Math.min(maxHeight, this.get_preferred_height(monitor.width));
|
const forWidth = this.get_theme_node().adjust_for_width(monitor.width);
|
||||||
|
const [, natHeight] = this.get_preferred_height(forWidth);
|
||||||
|
this.height = Math.min(maxHeight, natHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,7 +1204,8 @@ class HotCorner extends Clutter.Actor {
|
|||||||
|
|
||||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
|
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
|
||||||
this._corner.set_position(this.width - this._corner.width, 0);
|
this._corner.set_position(this.width - this._corner.width, 0);
|
||||||
this.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
|
this.set_pivot_point(1.0, 0.0);
|
||||||
|
this.translation_x = -this.width;
|
||||||
} else {
|
} else {
|
||||||
this._corner.set_position(0, 0);
|
this._corner.set_position(0, 0);
|
||||||
}
|
}
|
||||||
|
@ -489,7 +489,10 @@ var Magnifier = class Magnifier {
|
|||||||
_updateMouseSprite() {
|
_updateMouseSprite() {
|
||||||
this._updateSpriteTexture();
|
this._updateSpriteTexture();
|
||||||
let [xHot, yHot] = this._cursorTracker.get_hot();
|
let [xHot, yHot] = this._cursorTracker.get_hot();
|
||||||
this._mouseSprite.set_anchor_point(xHot, yHot);
|
this._mouseSprite.set({
|
||||||
|
translation_x: -xHot,
|
||||||
|
translation_y: -yHot,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateSpriteTexture() {
|
_updateSpriteTexture() {
|
||||||
|
@ -4,7 +4,6 @@ const { Atk, Clutter, Gio, GLib,
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
|
||||||
const Calendar = imports.ui.calendar;
|
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
var MESSAGE_ANIMATION_TIME = 100;
|
var MESSAGE_ANIMATION_TIME = 100;
|
||||||
@ -572,7 +571,6 @@ var MessageListSection = GObject.registerClass({
|
|||||||
Main.sessionMode.disconnect(id);
|
Main.sessionMode.disconnect(id);
|
||||||
});
|
});
|
||||||
|
|
||||||
this._date = new Date();
|
|
||||||
this._empty = true;
|
this._empty = true;
|
||||||
this._canClear = false;
|
this._canClear = false;
|
||||||
this._sync();
|
this._sync();
|
||||||
@ -598,13 +596,6 @@ var MessageListSection = GObject.registerClass({
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setDate(date) {
|
|
||||||
if (Calendar.sameDay(date, this._date))
|
|
||||||
return;
|
|
||||||
this._date = date;
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
addMessage(message, animate) {
|
addMessage(message, animate) {
|
||||||
this.addMessageAtIndex(message, -1, animate);
|
this.addMessageAtIndex(message, -1, animate);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported NotificationPolicy, NotificationGenericPolicy,
|
/* exported NotificationPolicy, NotificationGenericPolicy,
|
||||||
NotificationApplicationPolicy, Source, SourceActor, SourceActorWithLabel,
|
NotificationApplicationPolicy, Source, SourceActor,
|
||||||
SystemNotificationSource, MessageTray */
|
SystemNotificationSource, MessageTray */
|
||||||
|
|
||||||
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
@ -655,77 +655,6 @@ class SourceActor extends St.Widget {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var SourceActorWithLabel = GObject.registerClass(
|
|
||||||
class SourceActorWithLabel extends SourceActor {
|
|
||||||
_init(source, size) {
|
|
||||||
super._init(source, size);
|
|
||||||
|
|
||||||
this._counterLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
|
|
||||||
x_expand: true,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
y_expand: true });
|
|
||||||
|
|
||||||
this._counterBin = new St.Bin({ style_class: 'summary-source-counter',
|
|
||||||
child: this._counterLabel,
|
|
||||||
layout_manager: new Clutter.BinLayout() });
|
|
||||||
this._counterBin.hide();
|
|
||||||
|
|
||||||
this._counterBin.connect('style-changed', () => {
|
|
||||||
let themeNode = this._counterBin.get_theme_node();
|
|
||||||
this._counterBin.translation_x = themeNode.get_length('-shell-counter-overlap-x');
|
|
||||||
this._counterBin.translation_y = themeNode.get_length('-shell-counter-overlap-y');
|
|
||||||
});
|
|
||||||
|
|
||||||
this.add_actor(this._counterBin);
|
|
||||||
|
|
||||||
this._countUpdatedId = this._source.connect('notify::count', this._updateCount.bind(this));
|
|
||||||
this._updateCount();
|
|
||||||
|
|
||||||
this.connect('destroy', () => {
|
|
||||||
this._source.disconnect(this._countUpdatedId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_allocate(box) {
|
|
||||||
super.vfunc_allocate(box);
|
|
||||||
|
|
||||||
let childBox = new Clutter.ActorBox();
|
|
||||||
|
|
||||||
let [, , naturalWidth, naturalHeight] = this._counterBin.get_preferred_size();
|
|
||||||
let direction = this.get_text_direction();
|
|
||||||
|
|
||||||
if (direction == Clutter.TextDirection.LTR) {
|
|
||||||
// allocate on the right in LTR
|
|
||||||
childBox.x1 = box.x2 - naturalWidth;
|
|
||||||
childBox.x2 = box.x2;
|
|
||||||
} else {
|
|
||||||
// allocate on the left in RTL
|
|
||||||
childBox.x1 = 0;
|
|
||||||
childBox.x2 = naturalWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
childBox.y1 = box.y2 - naturalHeight;
|
|
||||||
childBox.y2 = box.y2;
|
|
||||||
|
|
||||||
this._counterBin.allocate(childBox);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateCount() {
|
|
||||||
if (this._actorDestroyed)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._counterBin.visible = this._source.countVisible;
|
|
||||||
|
|
||||||
let text;
|
|
||||||
if (this._source.count < 100)
|
|
||||||
text = this._source.count.toString();
|
|
||||||
else
|
|
||||||
text = String.fromCharCode(0x22EF); // midline horizontal ellipsis
|
|
||||||
|
|
||||||
this._counterLabel.set_text(text);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var Source = GObject.registerClass({
|
var Source = GObject.registerClass({
|
||||||
Properties: {
|
Properties: {
|
||||||
'count': GObject.ParamSpec.int(
|
'count': GObject.ParamSpec.int(
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
const { Gio, GObject, Shell, St } = imports.gi;
|
const { Gio, GObject, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Calendar = imports.ui.calendar;
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageList = imports.ui.messageList;
|
const MessageList = imports.ui.messageList;
|
||||||
|
|
||||||
@ -252,10 +251,6 @@ class MediaSection extends MessageList.MessageListSection {
|
|||||||
this._onProxyReady.bind(this));
|
this._onProxyReady.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
_shouldShow() {
|
|
||||||
return !this.empty && Calendar.isToday(this._date);
|
|
||||||
}
|
|
||||||
|
|
||||||
get allowed() {
|
get allowed() {
|
||||||
return !Main.sessionMode.isGreeter;
|
return !Main.sessionMode.isGreeter;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
const { Clutter, GLib, GObject, Meta, Shell, St } = imports.gi;
|
const { Clutter, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
// Time for initial animation going into Overview mode;
|
||||||
|
// this is defined here to make it available in imports.
|
||||||
|
var ANIMATION_TIME = 250;
|
||||||
|
|
||||||
const Background = imports.ui.background;
|
const Background = imports.ui.background;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const LayoutManager = imports.ui.layout;
|
const LayoutManager = imports.ui.layout;
|
||||||
@ -14,9 +18,6 @@ const OverviewControls = imports.ui.overviewControls;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||||
|
|
||||||
// Time for initial animation going into Overview mode
|
|
||||||
var ANIMATION_TIME = 250;
|
|
||||||
|
|
||||||
// Must be less than ANIMATION_TIME, since we switch to
|
// Must be less than ANIMATION_TIME, since we switch to
|
||||||
// or from the overview completely after ANIMATION_TIME,
|
// or from the overview completely after ANIMATION_TIME,
|
||||||
// and don't want the shading animation to get cut off
|
// and don't want the shading animation to get cut off
|
||||||
@ -244,11 +245,11 @@ var Overview = class {
|
|||||||
_unshadeBackgrounds() {
|
_unshadeBackgrounds() {
|
||||||
let backgrounds = this._backgroundGroup.get_children();
|
let backgrounds = this._backgroundGroup.get_children();
|
||||||
for (let i = 0; i < backgrounds.length; i++) {
|
for (let i = 0; i < backgrounds.length; i++) {
|
||||||
backgrounds[i].ease_property('brightness', 1.0, {
|
backgrounds[i].ease_property('@content.brightness', 1.0, {
|
||||||
duration: SHADE_ANIMATION_TIME,
|
duration: SHADE_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
});
|
});
|
||||||
backgrounds[i].ease_property('vignette-sharpness', 0.0, {
|
backgrounds[i].ease_property('@content.vignette-sharpness', 0.0, {
|
||||||
duration: SHADE_ANIMATION_TIME,
|
duration: SHADE_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
});
|
});
|
||||||
@ -258,11 +259,13 @@ var Overview = class {
|
|||||||
_shadeBackgrounds() {
|
_shadeBackgrounds() {
|
||||||
let backgrounds = this._backgroundGroup.get_children();
|
let backgrounds = this._backgroundGroup.get_children();
|
||||||
for (let i = 0; i < backgrounds.length; i++) {
|
for (let i = 0; i < backgrounds.length; i++) {
|
||||||
backgrounds[i].ease_property('brightness', Lightbox.VIGNETTE_BRIGHTNESS, {
|
backgrounds[i].ease_property('@content.brightness',
|
||||||
|
Lightbox.VIGNETTE_BRIGHTNESS, {
|
||||||
duration: SHADE_ANIMATION_TIME,
|
duration: SHADE_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
});
|
});
|
||||||
backgrounds[i].ease_property('vignette-sharpness', Lightbox.VIGNETTE_SHARPNESS, {
|
backgrounds[i].ease_property('@content.vignette-sharpness',
|
||||||
|
Lightbox.VIGNETTE_SHARPNESS, {
|
||||||
duration: SHADE_ANIMATION_TIME,
|
duration: SHADE_ANIMATION_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
});
|
});
|
||||||
@ -437,19 +440,19 @@ var Overview = class {
|
|||||||
this.emit('windows-restacked', stackIndices);
|
this.emit('windows-restacked', stackIndices);
|
||||||
}
|
}
|
||||||
|
|
||||||
beginItemDrag(_source) {
|
beginItemDrag(source) {
|
||||||
this.emit('item-drag-begin');
|
this.emit('item-drag-begin', source);
|
||||||
this._inItemDrag = true;
|
this._inItemDrag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelledItemDrag(_source) {
|
cancelledItemDrag(source) {
|
||||||
this.emit('item-drag-cancelled');
|
this.emit('item-drag-cancelled', source);
|
||||||
}
|
}
|
||||||
|
|
||||||
endItemDrag(_source) {
|
endItemDrag(source) {
|
||||||
if (!this._inItemDrag)
|
if (!this._inItemDrag)
|
||||||
return;
|
return;
|
||||||
this.emit('item-drag-end');
|
this.emit('item-drag-end', source);
|
||||||
this._inItemDrag = false;
|
this._inItemDrag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,7 +578,7 @@ var Overview = class {
|
|||||||
this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC;
|
this._activationTime = GLib.get_monotonic_time() / GLib.USEC_PER_SEC;
|
||||||
|
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
this.viewSelector.show();
|
this.viewSelector.animateToOverview();
|
||||||
|
|
||||||
this._overview.opacity = 0;
|
this._overview.opacity = 0;
|
||||||
this._overview.ease({
|
this._overview.ease({
|
||||||
|
@ -8,8 +8,9 @@ const Main = imports.ui.main;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const ViewSelector = imports.ui.viewSelector;
|
const ViewSelector = imports.ui.viewSelector;
|
||||||
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||||
|
const Overview = imports.ui.overview;
|
||||||
|
|
||||||
var SIDE_CONTROLS_ANIMATION_TIME = 160;
|
var SIDE_CONTROLS_ANIMATION_TIME = Overview.ANIMATION_TIME;
|
||||||
|
|
||||||
function getRtlSlideDirection(direction, actor) {
|
function getRtlSlideDirection(direction, actor) {
|
||||||
let rtl = actor.text_direction == Clutter.TextDirection.RTL;
|
let rtl = actor.text_direction == Clutter.TextDirection.RTL;
|
||||||
@ -422,6 +423,7 @@ class ControlsManager extends St.Widget {
|
|||||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
||||||
|
|
||||||
this._workspaceAdjustment = new St.Adjustment({
|
this._workspaceAdjustment = new St.Adjustment({
|
||||||
|
actor: this,
|
||||||
value: activeWorkspaceIndex,
|
value: activeWorkspaceIndex,
|
||||||
lower: 0,
|
lower: 0,
|
||||||
page_increment: 1,
|
page_increment: 1,
|
||||||
@ -453,8 +455,6 @@ class ControlsManager extends St.Widget {
|
|||||||
this._group.add_child(this.viewSelector);
|
this._group.add_child(this.viewSelector);
|
||||||
this._group.add_actor(this._thumbnailsSlider);
|
this._group.add_actor(this._thumbnailsSlider);
|
||||||
|
|
||||||
layout.connect('allocation-changed', this._updateWorkspacesGeometry.bind(this));
|
|
||||||
|
|
||||||
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
|
Main.overview.connect('showing', this._updateSpacerVisibility.bind(this));
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
@ -477,26 +477,6 @@ class ControlsManager extends St.Widget {
|
|||||||
this._workspaceAdjustment.value = activeIndex;
|
this._workspaceAdjustment.value = activeIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateWorkspacesGeometry() {
|
|
||||||
let [x, y] = this.get_transformed_position();
|
|
||||||
let [width, height] = this.get_transformed_size();
|
|
||||||
let geometry = { x, y, width, height };
|
|
||||||
|
|
||||||
let spacing = this.get_theme_node().get_length('spacing');
|
|
||||||
let dashWidth = this._dashSlider.getVisibleWidth() + spacing;
|
|
||||||
let thumbnailsWidth = this._thumbnailsSlider.getNonExpandedWidth() + spacing;
|
|
||||||
|
|
||||||
geometry.width -= dashWidth;
|
|
||||||
geometry.width -= thumbnailsWidth;
|
|
||||||
|
|
||||||
if (this.get_text_direction() == Clutter.TextDirection.LTR)
|
|
||||||
geometry.x += dashWidth;
|
|
||||||
else
|
|
||||||
geometry.x += thumbnailsWidth;
|
|
||||||
|
|
||||||
this.viewSelector.setWorkspacesFullGeometry(geometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
_setVisibility() {
|
_setVisibility() {
|
||||||
// Ignore the case when we're leaving the overview, since
|
// Ignore the case when we're leaving the overview, since
|
||||||
// actors will be made visible again when entering the overview
|
// actors will be made visible again when entering the overview
|
||||||
|
@ -120,6 +120,10 @@ var PageIndicators = GObject.registerClass({
|
|||||||
for (let i = 0; i < children.length; i++)
|
for (let i = 0; i < children.length; i++)
|
||||||
this._updateIndicator(children[i], i);
|
this._updateIndicator(children[i], i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get nPages() {
|
||||||
|
return this._nPages;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AnimatedPageIndicators = GObject.registerClass(
|
var AnimatedPageIndicators = GObject.registerClass(
|
||||||
|
@ -675,7 +675,7 @@ class PanelCorner extends St.DrawingArea {
|
|||||||
let borderWidth = node.get_length('-panel-corner-border-width');
|
let borderWidth = node.get_length('-panel-corner-border-width');
|
||||||
|
|
||||||
this.set_size(cornerRadius, borderWidth + cornerRadius);
|
this.set_size(cornerRadius, borderWidth + cornerRadius);
|
||||||
this.set_anchor_point(0, borderWidth);
|
this.translation_y = -borderWidth;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -225,10 +225,6 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function clamp(value, min, max) {
|
|
||||||
return Math.max(min, Math.min(max, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
var AppAuthorizer = class {
|
var AppAuthorizer = class {
|
||||||
constructor(desktopId, reqAccuracyLevel, permStoreProxy, maxAccuracyLevel) {
|
constructor(desktopId, reqAccuracyLevel, permStoreProxy, maxAccuracyLevel) {
|
||||||
this.desktopId = desktopId;
|
this.desktopId = desktopId;
|
||||||
@ -313,9 +309,8 @@ var AppAuthorizer = class {
|
|||||||
|
|
||||||
_completeAuth() {
|
_completeAuth() {
|
||||||
if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) {
|
if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) {
|
||||||
this._accuracyLevel = clamp(this._accuracyLevel,
|
this._accuracyLevel = Math.clamp(this._accuracyLevel,
|
||||||
0,
|
0, this._maxAccuracyLevel);
|
||||||
this._maxAccuracyLevel);
|
|
||||||
}
|
}
|
||||||
this._saveToPermissionStore();
|
this._saveToPermissionStore();
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ var StreamSlider = class {
|
|||||||
|
|
||||||
this._stream = null;
|
this._stream = null;
|
||||||
this._volumeCancellable = null;
|
this._volumeCancellable = null;
|
||||||
|
this._icons = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
get stream() {
|
get stream() {
|
||||||
@ -182,24 +183,15 @@ var StreamSlider = class {
|
|||||||
if (!this._stream)
|
if (!this._stream)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
let icons = ["audio-volume-muted-symbolic",
|
|
||||||
"audio-volume-low-symbolic",
|
|
||||||
"audio-volume-medium-symbolic",
|
|
||||||
"audio-volume-high-symbolic",
|
|
||||||
"audio-volume-overamplified-symbolic"];
|
|
||||||
|
|
||||||
let volume = this._stream.volume;
|
let volume = this._stream.volume;
|
||||||
let n;
|
let n;
|
||||||
if (this._stream.is_muted || volume <= 0) {
|
if (this._stream.is_muted || volume <= 0) {
|
||||||
n = 0;
|
n = 0;
|
||||||
} else {
|
} else {
|
||||||
n = Math.ceil(3 * volume / this._control.get_vol_max_norm());
|
n = Math.ceil(3 * volume / this._control.get_vol_max_norm());
|
||||||
if (n < 1)
|
n = Math.clamp(n, 1, this._icons.length - 1);
|
||||||
n = 1;
|
|
||||||
else if (n > 3)
|
|
||||||
n = 4;
|
|
||||||
}
|
}
|
||||||
return icons[n];
|
return this._icons[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
getLevel() {
|
getLevel() {
|
||||||
@ -223,6 +215,13 @@ var OutputStreamSlider = class extends StreamSlider {
|
|||||||
constructor(control) {
|
constructor(control) {
|
||||||
super(control);
|
super(control);
|
||||||
this._slider.accessible_name = _("Volume");
|
this._slider.accessible_name = _("Volume");
|
||||||
|
this._icons = [
|
||||||
|
'audio-volume-muted-symbolic',
|
||||||
|
'audio-volume-low-symbolic',
|
||||||
|
'audio-volume-medium-symbolic',
|
||||||
|
'audio-volume-high-symbolic',
|
||||||
|
'audio-volume-overamplified-symbolic',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
_connectStream(stream) {
|
_connectStream(stream) {
|
||||||
@ -274,6 +273,12 @@ var InputStreamSlider = class extends StreamSlider {
|
|||||||
this._control.connect('stream-added', this._maybeShowInput.bind(this));
|
this._control.connect('stream-added', this._maybeShowInput.bind(this));
|
||||||
this._control.connect('stream-removed', this._maybeShowInput.bind(this));
|
this._control.connect('stream-removed', this._maybeShowInput.bind(this));
|
||||||
this._icon.icon_name = 'audio-input-microphone-symbolic';
|
this._icon.icon_name = 'audio-input-microphone-symbolic';
|
||||||
|
this._icons = [
|
||||||
|
'microphone-sensitivity-muted-symbolic',
|
||||||
|
'microphone-sensitivity-low-symbolic',
|
||||||
|
'microphone-sensitivity-medium-symbolic',
|
||||||
|
'microphone-sensitivity-high-symbolic',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
_connectStream(stream) {
|
_connectStream(stream) {
|
||||||
@ -319,7 +324,7 @@ var VolumeMenu = class extends PopupMenu.PopupMenuSection {
|
|||||||
|
|
||||||
this._output = new OutputStreamSlider(this._control);
|
this._output = new OutputStreamSlider(this._control);
|
||||||
this._output.connect('stream-updated', () => {
|
this._output.connect('stream-updated', () => {
|
||||||
this.emit('icon-changed');
|
this.emit('output-icon-changed');
|
||||||
});
|
});
|
||||||
this.addMenuItem(this._output.item);
|
this.addMenuItem(this._output.item);
|
||||||
|
|
||||||
@ -327,6 +332,9 @@ var VolumeMenu = class extends PopupMenu.PopupMenuSection {
|
|||||||
this._input.item.connect('notify::visible', () => {
|
this._input.item.connect('notify::visible', () => {
|
||||||
this.emit('input-visible-changed');
|
this.emit('input-visible-changed');
|
||||||
});
|
});
|
||||||
|
this._input.connect('stream-updated', () => {
|
||||||
|
this.emit('input-icon-changed');
|
||||||
|
});
|
||||||
this.addMenuItem(this._input.item);
|
this.addMenuItem(this._input.item);
|
||||||
|
|
||||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
@ -343,7 +351,7 @@ var VolumeMenu = class extends PopupMenu.PopupMenuSection {
|
|||||||
this._readInput();
|
this._readInput();
|
||||||
this._readOutput();
|
this._readOutput();
|
||||||
} else {
|
} else {
|
||||||
this.emit('icon-changed');
|
this.emit('output-icon-changed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,10 +363,14 @@ var VolumeMenu = class extends PopupMenu.PopupMenuSection {
|
|||||||
this._input.stream = this._control.get_default_source();
|
this._input.stream = this._control.get_default_source();
|
||||||
}
|
}
|
||||||
|
|
||||||
getIcon() {
|
getOutputIcon() {
|
||||||
return this._output.getIcon();
|
return this._output.getIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getInputIcon() {
|
||||||
|
return this._input.getIcon();
|
||||||
|
}
|
||||||
|
|
||||||
getLevel() {
|
getLevel() {
|
||||||
return this._output.getLevel();
|
return this._output.getLevel();
|
||||||
}
|
}
|
||||||
@ -382,21 +394,24 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
|
|
||||||
this._control = getMixerControl();
|
this._control = getMixerControl();
|
||||||
this._volumeMenu = new VolumeMenu(this._control);
|
this._volumeMenu = new VolumeMenu(this._control);
|
||||||
this._volumeMenu.connect('icon-changed', () => {
|
this._volumeMenu.connect('output-icon-changed', () => {
|
||||||
let icon = this._volumeMenu.getIcon();
|
let icon = this._volumeMenu.getOutputIcon();
|
||||||
|
|
||||||
if (icon != null)
|
if (icon != null)
|
||||||
this._primaryIndicator.icon_name = icon;
|
this._primaryIndicator.icon_name = icon;
|
||||||
this._primaryIndicator.visible = icon !== null;
|
this._primaryIndicator.visible = icon !== null;
|
||||||
});
|
});
|
||||||
|
|
||||||
this._inputIndicator.set({
|
this._inputIndicator.visible = this._volumeMenu.getInputVisible();
|
||||||
icon_name: 'audio-input-microphone-symbolic',
|
|
||||||
visible: this._volumeMenu.getInputVisible(),
|
|
||||||
});
|
|
||||||
this._volumeMenu.connect('input-visible-changed', () => {
|
this._volumeMenu.connect('input-visible-changed', () => {
|
||||||
this._inputIndicator.visible = this._volumeMenu.getInputVisible();
|
this._inputIndicator.visible = this._volumeMenu.getInputVisible();
|
||||||
});
|
});
|
||||||
|
this._volumeMenu.connect('input-icon-changed', () => {
|
||||||
|
let icon = this._volumeMenu.getInputIcon();
|
||||||
|
|
||||||
|
if (icon !== null)
|
||||||
|
this._inputIndicator.icon_name = icon;
|
||||||
|
});
|
||||||
|
|
||||||
this.menu.addMenuItem(this._volumeMenu);
|
this.menu.addMenuItem(this._volumeMenu);
|
||||||
}
|
}
|
||||||
@ -406,7 +421,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
if (result == Clutter.EVENT_PROPAGATE || this.menu.actor.mapped)
|
if (result == Clutter.EVENT_PROPAGATE || this.menu.actor.mapped)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
let gicon = new Gio.ThemedIcon({ name: this._volumeMenu.getIcon() });
|
let gicon = new Gio.ThemedIcon({ name: this._volumeMenu.getOutputIcon() });
|
||||||
let level = this._volumeMenu.getLevel();
|
let level = this._volumeMenu.getLevel();
|
||||||
let maxLevel = this._volumeMenu.getMaxLevel();
|
let maxLevel = this._volumeMenu.getMaxLevel();
|
||||||
Main.osdWindowManager.show(-1, gicon, null, level, maxLevel);
|
Main.osdWindowManager.show(-1, gicon, null, level, maxLevel);
|
||||||
|
@ -28,10 +28,6 @@ const State = {
|
|||||||
SCROLLING: 1,
|
SCROLLING: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
function clamp(value, min, max) {
|
|
||||||
return Math.max(min, Math.min(max, value));
|
|
||||||
}
|
|
||||||
|
|
||||||
const TouchpadSwipeGesture = GObject.registerClass({
|
const TouchpadSwipeGesture = GObject.registerClass({
|
||||||
Properties: {
|
Properties: {
|
||||||
'enabled': GObject.ParamSpec.boolean(
|
'enabled': GObject.ParamSpec.boolean(
|
||||||
@ -558,8 +554,8 @@ var SwipeTracker = GObject.registerClass({
|
|||||||
|
|
||||||
let firstPoint = this._snapPoints[0];
|
let firstPoint = this._snapPoints[0];
|
||||||
let lastPoint = this._snapPoints[this._snapPoints.length - 1];
|
let lastPoint = this._snapPoints[this._snapPoints.length - 1];
|
||||||
this._progress = clamp(this._progress, firstPoint, lastPoint);
|
this._progress = Math.clamp(this._progress, firstPoint, lastPoint);
|
||||||
this._progress = clamp(this._progress,
|
this._progress = Math.clamp(this._progress,
|
||||||
this._initialProgress - 1, this._initialProgress + 1);
|
this._initialProgress - 1, this._initialProgress + 1);
|
||||||
|
|
||||||
this.emit('update', this._progress);
|
this.emit('update', this._progress);
|
||||||
@ -606,7 +602,7 @@ var SwipeTracker = GObject.registerClass({
|
|||||||
|
|
||||||
let duration = Math.abs((this._progress - endProgress) / velocity * DURATION_MULTIPLIER);
|
let duration = Math.abs((this._progress - endProgress) / velocity * DURATION_MULTIPLIER);
|
||||||
if (duration > 0) {
|
if (duration > 0) {
|
||||||
duration = clamp(duration,
|
duration = Math.clamp(duration,
|
||||||
MIN_ANIMATION_DURATION, MAX_ANIMATION_DURATION);
|
MIN_ANIMATION_DURATION, MAX_ANIMATION_DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,6 +485,7 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
this._gdmClient = new Gdm.Client();
|
this._gdmClient = new Gdm.Client();
|
||||||
|
|
||||||
this._adjustment = new St.Adjustment({
|
this._adjustment = new St.Adjustment({
|
||||||
|
actor: this,
|
||||||
lower: 0,
|
lower: 0,
|
||||||
upper: 2,
|
upper: 2,
|
||||||
page_size: 1,
|
page_size: 1,
|
||||||
@ -524,6 +525,10 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
|
|
||||||
this._bgManagers = [];
|
this._bgManagers = [];
|
||||||
|
|
||||||
|
const themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||||
|
this._scaleChangedId = themeContext.connect('notify::scale-factor',
|
||||||
|
() => this._updateBackgroundEffects());
|
||||||
|
|
||||||
this._updateBackgrounds();
|
this._updateBackgrounds();
|
||||||
this._monitorsChangedId =
|
this._monitorsChangedId =
|
||||||
Main.layoutManager.connect('monitors-changed', this._updateBackgrounds.bind(this));
|
Main.layoutManager.connect('monitors-changed', this._updateBackgrounds.bind(this));
|
||||||
@ -566,9 +571,15 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
this._otherUserButton.set_pivot_point(0.5, 0.5);
|
this._otherUserButton.set_pivot_point(0.5, 0.5);
|
||||||
this._otherUserButton.connect('clicked', this._otherUserClicked.bind(this));
|
this._otherUserButton.connect('clicked', this._otherUserClicked.bind(this));
|
||||||
|
|
||||||
let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
|
this._screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
|
||||||
screenSaverSettings.bind('user-switch-enabled',
|
|
||||||
this._otherUserButton, 'visible', Gio.SettingsBindFlags.GET);
|
this._userSwitchEnabledId = this._screenSaverSettings.connect('changed::user-switch-enabled',
|
||||||
|
this._updateUserSwitchVisibility.bind(this));
|
||||||
|
|
||||||
|
this._userLoadedId = this._user.connect('notify::is-loaded',
|
||||||
|
this._updateUserSwitchVisibility.bind(this));
|
||||||
|
|
||||||
|
this._updateUserSwitchVisibility();
|
||||||
|
|
||||||
// Main Box
|
// Main Box
|
||||||
let mainBox = new St.Widget();
|
let mainBox = new St.Widget();
|
||||||
@ -618,6 +629,7 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
y: monitor.y,
|
y: monitor.y,
|
||||||
width: monitor.width,
|
width: monitor.width,
|
||||||
height: monitor.height,
|
height: monitor.height,
|
||||||
|
effect: new Shell.BlurEffect({ name: 'blur' }),
|
||||||
});
|
});
|
||||||
|
|
||||||
let bgManager = new Background.BackgroundManager({
|
let bgManager = new Background.BackgroundManager({
|
||||||
@ -629,19 +641,17 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
this._bgManagers.push(bgManager);
|
this._bgManagers.push(bgManager);
|
||||||
|
|
||||||
this._backgroundGroup.add_child(widget);
|
this._backgroundGroup.add_child(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateBackgroundEffects() {
|
||||||
const themeContext = St.ThemeContext.get_for_stage(global.stage);
|
const themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||||
|
|
||||||
let effect = new Shell.BlurEffect({
|
for (const widget of this._backgroundGroup) {
|
||||||
|
widget.get_effect('blur').set({
|
||||||
brightness: BLUR_BRIGHTNESS,
|
brightness: BLUR_BRIGHTNESS,
|
||||||
sigma: BLUR_SIGMA * themeContext.scale_factor,
|
sigma: BLUR_SIGMA * themeContext.scale_factor,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
this._scaleChangedId = themeContext.connect('notify::scale-factor', () => {
|
|
||||||
effect.sigma = BLUR_SIGMA * themeContext.scale_factor;
|
|
||||||
});
|
|
||||||
|
|
||||||
widget.add_effect(effect);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateBackgrounds() {
|
_updateBackgrounds() {
|
||||||
@ -653,6 +663,7 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
|
|
||||||
for (let i = 0; i < Main.layoutManager.monitors.length; i++)
|
for (let i = 0; i < Main.layoutManager.monitors.length; i++)
|
||||||
this._createBackground(i);
|
this._createBackground(i);
|
||||||
|
this._updateBackgroundEffects();
|
||||||
}
|
}
|
||||||
|
|
||||||
_ensureAuthPrompt() {
|
_ensureAuthPrompt() {
|
||||||
@ -828,6 +839,21 @@ var UnlockDialog = GObject.registerClass({
|
|||||||
this._gdmClient = null;
|
this._gdmClient = null;
|
||||||
delete this._gdmClient;
|
delete this._gdmClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._userLoadedId) {
|
||||||
|
this._user.disconnect(this._userLoadedId);
|
||||||
|
this._userLoadedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._userSwitchEnabledId) {
|
||||||
|
this._screenSaverSettings.disconnect(this._userSwitchEnabledId);
|
||||||
|
this._userSwitchEnabledId = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateUserSwitchVisibility() {
|
||||||
|
this._otherUserButton.visible = this._userManager.can_switch() &&
|
||||||
|
this._screenSaverSettings.get_boolean('user-switch-enabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
|
@ -132,6 +132,7 @@ var ViewSelector = GObject.registerClass({
|
|||||||
super._init({
|
super._init({
|
||||||
name: 'viewSelector',
|
name: 'viewSelector',
|
||||||
x_expand: true,
|
x_expand: true,
|
||||||
|
visible: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
this._showAppsButton = showAppsButton;
|
this._showAppsButton = showAppsButton;
|
||||||
@ -271,9 +272,10 @@ var ViewSelector = GObject.registerClass({
|
|||||||
Main.overview.show();
|
Main.overview.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
show() {
|
animateToOverview() {
|
||||||
|
this.show();
|
||||||
this.reset();
|
this.reset();
|
||||||
this._workspacesDisplay.show(this._showAppsButton.checked);
|
this._workspacesDisplay.animateToOverview(this._showAppsButton.checked);
|
||||||
this._activePage = null;
|
this._activePage = null;
|
||||||
if (this._showAppsButton.checked)
|
if (this._showAppsButton.checked)
|
||||||
this._showPage(this._appsPage);
|
this._showPage(this._appsPage);
|
||||||
@ -297,13 +299,11 @@ var ViewSelector = GObject.registerClass({
|
|||||||
Main.overview.fadeInDesktop();
|
Main.overview.fadeInDesktop();
|
||||||
}
|
}
|
||||||
|
|
||||||
setWorkspacesFullGeometry(geom) {
|
vfunc_hide() {
|
||||||
this._workspacesDisplay.setWorkspacesFullGeometry(geom);
|
|
||||||
}
|
|
||||||
|
|
||||||
hide() {
|
|
||||||
this.reset();
|
this.reset();
|
||||||
this._workspacesDisplay.hide();
|
this._workspacesDisplay.hide();
|
||||||
|
|
||||||
|
super.vfunc_hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
_addPage(actor, name, a11yIcon, params) {
|
_addPage(actor, name, a11yIcon, params) {
|
||||||
|
@ -1278,13 +1278,13 @@ var WindowManager = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_sizeChangeWindow(shellwm, actor, whichChange, oldFrameRect, _oldBufferRect) {
|
_sizeChangeWindow(shellwm, actor, whichChange, oldFrameRect, _oldBufferRect) {
|
||||||
let types = [Meta.WindowType.NORMAL];
|
const types = [Meta.WindowType.NORMAL];
|
||||||
if (!this._shouldAnimateActor(actor, types)) {
|
const shouldAnimate =
|
||||||
shellwm.completed_size_change(actor);
|
this._shouldAnimateActor(actor, types) &&
|
||||||
return;
|
oldFrameRect.width > 0 &&
|
||||||
}
|
oldFrameRect.height > 0;
|
||||||
|
|
||||||
if (oldFrameRect.width > 0 && oldFrameRect.height > 0)
|
if (shouldAnimate)
|
||||||
this._prepareAnimationInfo(shellwm, actor, oldFrameRect, whichChange);
|
this._prepareAnimationInfo(shellwm, actor, oldFrameRect, whichChange);
|
||||||
else
|
else
|
||||||
shellwm.completed_size_change(actor);
|
shellwm.completed_size_change(actor);
|
||||||
@ -1299,17 +1299,24 @@ var WindowManager = class {
|
|||||||
actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
|
actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
|
||||||
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
|
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
|
||||||
|
|
||||||
if (this._clearAnimationInfo(actor))
|
actor.freeze();
|
||||||
|
|
||||||
|
if (this._clearAnimationInfo(actor)) {
|
||||||
|
log('Old animationInfo removed from actor %s'.format(actor));
|
||||||
this._shellwm.completed_size_change(actor);
|
this._shellwm.completed_size_change(actor);
|
||||||
|
}
|
||||||
|
|
||||||
let destroyId = actor.connect('destroy', () => {
|
let destroyId = actor.connect('destroy', () => {
|
||||||
this._clearAnimationInfo(actor);
|
this._clearAnimationInfo(actor);
|
||||||
});
|
});
|
||||||
|
|
||||||
this._resizePending.add(actor);
|
this._resizePending.add(actor);
|
||||||
actor.__animationInfo = { clone: actorClone,
|
actor.__animationInfo = {
|
||||||
|
clone: actorClone,
|
||||||
oldRect: oldFrameRect,
|
oldRect: oldFrameRect,
|
||||||
destroyId };
|
frozen: true,
|
||||||
|
destroyId,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
_sizeChangedWindow(shellwm, actor) {
|
_sizeChangedWindow(shellwm, actor) {
|
||||||
@ -1362,13 +1369,17 @@ var WindowManager = class {
|
|||||||
// Now unfreeze actor updates, to get it to the new size.
|
// Now unfreeze actor updates, to get it to the new size.
|
||||||
// It's important that we don't wait until the animation is completed to
|
// It's important that we don't wait until the animation is completed to
|
||||||
// do this, otherwise our scale will be applied to the old texture size.
|
// do this, otherwise our scale will be applied to the old texture size.
|
||||||
shellwm.completed_size_change(actor);
|
actor.thaw();
|
||||||
|
actor.__animationInfo.frozen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_clearAnimationInfo(actor) {
|
_clearAnimationInfo(actor) {
|
||||||
if (actor.__animationInfo) {
|
if (actor.__animationInfo) {
|
||||||
actor.__animationInfo.clone.destroy();
|
actor.__animationInfo.clone.destroy();
|
||||||
actor.disconnect(actor.__animationInfo.destroyId);
|
actor.disconnect(actor.__animationInfo.destroyId);
|
||||||
|
if (actor.__animationInfo.frozen)
|
||||||
|
actor.thaw();
|
||||||
|
|
||||||
delete actor.__animationInfo;
|
delete actor.__animationInfo;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1383,11 +1394,14 @@ var WindowManager = class {
|
|||||||
actor.translation_x = 0;
|
actor.translation_x = 0;
|
||||||
actor.translation_y = 0;
|
actor.translation_y = 0;
|
||||||
this._clearAnimationInfo(actor);
|
this._clearAnimationInfo(actor);
|
||||||
|
this._shellwm.completed_size_change(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._resizePending.delete(actor))
|
if (this._resizePending.delete(actor)) {
|
||||||
|
this._clearAnimationInfo(actor);
|
||||||
this._shellwm.completed_size_change(actor);
|
this._shellwm.completed_size_change(actor);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_hasAttachedDialogs(window, ignoreWindow) {
|
_hasAttachedDialogs(window, ignoreWindow) {
|
||||||
var count = 0;
|
var count = 0;
|
||||||
@ -1786,8 +1800,7 @@ var WindowManager = class {
|
|||||||
w.window.get_parent().remove_child(w.window);
|
w.window.get_parent().remove_child(w.window);
|
||||||
w.parent.add_child(w.window);
|
w.parent.add_child(w.window);
|
||||||
|
|
||||||
if (w.window.get_meta_window().get_workspace() !=
|
if (!w.window.get_meta_window().get_workspace().active)
|
||||||
global.workspace_manager.get_active_workspace())
|
|
||||||
w.window.hide();
|
w.window.hide();
|
||||||
}
|
}
|
||||||
switchData.container.destroy();
|
switchData.container.destroy();
|
||||||
@ -1971,7 +1984,7 @@ var WindowManager = class {
|
|||||||
duration,
|
duration,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (newWs !== activeWorkspace)
|
if (!newWs.active)
|
||||||
this.actionMoveWorkspace(newWs);
|
this.actionMoveWorkspace(newWs);
|
||||||
this._finishWorkspaceSwitch(switchData);
|
this._finishWorkspaceSwitch(switchData);
|
||||||
},
|
},
|
||||||
@ -2101,8 +2114,16 @@ var WindowManager = class {
|
|||||||
newWs = workspaceManager.get_workspace_by_index(workspaceManager.n_workspaces - 1);
|
newWs = workspaceManager.get_workspace_by_index(workspaceManager.n_workspaces - 1);
|
||||||
} else if (isNaN(target)) {
|
} else if (isNaN(target)) {
|
||||||
// Prepend a new workspace dynamically
|
// Prepend a new workspace dynamically
|
||||||
if (workspaceManager.get_active_workspace_index() == 0 &&
|
let prependTarget;
|
||||||
action == 'move' && target == 'up' && this._isWorkspacePrepended == false) {
|
if (vertical)
|
||||||
|
prependTarget = 'up';
|
||||||
|
else if (rtl)
|
||||||
|
prependTarget = 'right';
|
||||||
|
else
|
||||||
|
prependTarget = 'left';
|
||||||
|
if (workspaceManager.get_active_workspace_index() === 0 &&
|
||||||
|
action === 'move' && target === prependTarget &&
|
||||||
|
this._isWorkspacePrepended === false) {
|
||||||
this.insertWorkspace(0);
|
this.insertWorkspace(0);
|
||||||
this._isWorkspacePrepended = true;
|
this._isWorkspacePrepended = true;
|
||||||
}
|
}
|
||||||
@ -2163,10 +2184,7 @@ var WindowManager = class {
|
|||||||
if (!Main.sessionMode.hasWorkspaces)
|
if (!Main.sessionMode.hasWorkspaces)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
if (!workspace.active)
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
|
||||||
|
|
||||||
if (activeWorkspace != workspace)
|
|
||||||
workspace.activate(global.get_current_time());
|
workspace.activate(global.get_current_time());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2174,10 +2192,7 @@ var WindowManager = class {
|
|||||||
if (!Main.sessionMode.hasWorkspaces)
|
if (!Main.sessionMode.hasWorkspaces)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
if (!workspace.active) {
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
|
||||||
|
|
||||||
if (activeWorkspace != workspace) {
|
|
||||||
// This won't have any effect for "always sticky" windows
|
// This won't have any effect for "always sticky" windows
|
||||||
// (like desktop windows or docks)
|
// (like desktop windows or docks)
|
||||||
|
|
||||||
|
771
js/ui/windowPreview.js
Normal file
771
js/ui/windowPreview.js
Normal file
@ -0,0 +1,771 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
/* exported WindowPreview */
|
||||||
|
|
||||||
|
const { Atk, Clutter, GLib, GObject,
|
||||||
|
Graphene, Meta, Pango, Shell, St } = imports.gi;
|
||||||
|
|
||||||
|
const DND = imports.ui.dnd;
|
||||||
|
|
||||||
|
var WINDOW_DND_SIZE = 256;
|
||||||
|
|
||||||
|
var WINDOW_OVERLAY_IDLE_HIDE_TIMEOUT = 750;
|
||||||
|
var WINDOW_OVERLAY_FADE_TIME = 200;
|
||||||
|
|
||||||
|
var DRAGGING_WINDOW_OPACITY = 100;
|
||||||
|
|
||||||
|
var WindowPreviewLayout = GObject.registerClass({
|
||||||
|
Properties: {
|
||||||
|
'bounding-box': GObject.ParamSpec.boxed(
|
||||||
|
'bounding-box', 'Bounding box', 'Bounding box',
|
||||||
|
GObject.ParamFlags.READABLE,
|
||||||
|
Clutter.ActorBox.$gtype),
|
||||||
|
},
|
||||||
|
}, class WindowPreviewLayout extends Clutter.LayoutManager {
|
||||||
|
_init() {
|
||||||
|
super._init();
|
||||||
|
|
||||||
|
this._container = null;
|
||||||
|
this._boundingBox = new Clutter.ActorBox();
|
||||||
|
this._windows = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
_layoutChanged() {
|
||||||
|
let frameRect;
|
||||||
|
|
||||||
|
for (const windowInfo of this._windows.values()) {
|
||||||
|
const frame = windowInfo.metaWindow.get_frame_rect();
|
||||||
|
frameRect = frameRect ? frameRect.union(frame) : frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!frameRect)
|
||||||
|
frameRect = new Meta.Rectangle();
|
||||||
|
|
||||||
|
const oldBox = this._boundingBox.copy();
|
||||||
|
this._boundingBox.set_origin(frameRect.x, frameRect.y);
|
||||||
|
this._boundingBox.set_size(frameRect.width, frameRect.height);
|
||||||
|
|
||||||
|
if (!this._boundingBox.equal(oldBox))
|
||||||
|
this.notify('bounding-box');
|
||||||
|
|
||||||
|
// Always call layout_changed(), a size or position change of an
|
||||||
|
// attached dialog might not affect the boundingBox
|
||||||
|
this.layout_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_set_container(container) {
|
||||||
|
this._container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_height(_container, _forWidth) {
|
||||||
|
return [0, this._boundingBox.get_height()];
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_width(_container, _forHeight) {
|
||||||
|
return [0, this._boundingBox.get_width()];
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_allocate(container, box) {
|
||||||
|
// If the scale isn't 1, we weren't allocated our preferred size
|
||||||
|
// and have to scale the children allocations accordingly.
|
||||||
|
const scaleX = this._boundingBox.get_width() > 0
|
||||||
|
? box.get_width() / this._boundingBox.get_width()
|
||||||
|
: 1;
|
||||||
|
const scaleY = this._boundingBox.get_height() > 0
|
||||||
|
? box.get_height() / this._boundingBox.get_height()
|
||||||
|
: 1;
|
||||||
|
|
||||||
|
const childBox = new Clutter.ActorBox();
|
||||||
|
|
||||||
|
for (const child of container) {
|
||||||
|
if (!child.visible)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const windowInfo = this._windows.get(child);
|
||||||
|
if (windowInfo) {
|
||||||
|
const bufferRect = windowInfo.metaWindow.get_buffer_rect();
|
||||||
|
childBox.set_origin(
|
||||||
|
bufferRect.x - this._boundingBox.x1,
|
||||||
|
bufferRect.y - this._boundingBox.y1);
|
||||||
|
|
||||||
|
const [, , natWidth, natHeight] = child.get_preferred_size();
|
||||||
|
childBox.set_size(natWidth, natHeight);
|
||||||
|
|
||||||
|
childBox.x1 *= scaleX;
|
||||||
|
childBox.x2 *= scaleX;
|
||||||
|
childBox.y1 *= scaleY;
|
||||||
|
childBox.y2 *= scaleY;
|
||||||
|
|
||||||
|
child.allocate(childBox);
|
||||||
|
} else {
|
||||||
|
child.allocate_preferred_size(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* addWindow:
|
||||||
|
* @param {Meta.Window} window: the MetaWindow instance
|
||||||
|
*
|
||||||
|
* Creates a ClutterActor drawing the texture of @window and adds it
|
||||||
|
* to the container. If @window is already part of the preview, this
|
||||||
|
* function will do nothing.
|
||||||
|
*
|
||||||
|
* @returns {Clutter.Actor} The newly created actor drawing @window
|
||||||
|
*/
|
||||||
|
addWindow(window) {
|
||||||
|
const index = [...this._windows.values()].findIndex(info =>
|
||||||
|
info.metaWindow === window);
|
||||||
|
|
||||||
|
if (index !== -1)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
const windowActor = window.get_compositor_private();
|
||||||
|
const actor = new Clutter.Clone({ source: windowActor });
|
||||||
|
|
||||||
|
this._windows.set(actor, {
|
||||||
|
metaWindow: window,
|
||||||
|
windowActor,
|
||||||
|
sizeChangedId: window.connect('size-changed', () =>
|
||||||
|
this._layoutChanged()),
|
||||||
|
positionChangedId: window.connect('position-changed', () =>
|
||||||
|
this._layoutChanged()),
|
||||||
|
windowActorDestroyId: windowActor.connect('destroy', () =>
|
||||||
|
actor.destroy()),
|
||||||
|
destroyId: actor.connect('destroy', () =>
|
||||||
|
this.removeWindow(window)),
|
||||||
|
});
|
||||||
|
|
||||||
|
this._container.add_child(actor);
|
||||||
|
|
||||||
|
this._layoutChanged();
|
||||||
|
|
||||||
|
return actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* removeWindow:
|
||||||
|
* @param {Meta.Window} window: the window to remove from the preview
|
||||||
|
*
|
||||||
|
* Removes a MetaWindow @window from the preview which has been added
|
||||||
|
* previously using addWindow(). If @window is not part of preview,
|
||||||
|
* this function will do nothing.
|
||||||
|
*/
|
||||||
|
removeWindow(window) {
|
||||||
|
const entry = [...this._windows].find(
|
||||||
|
([, i]) => i.metaWindow === window);
|
||||||
|
|
||||||
|
if (!entry)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const [actor, windowInfo] = entry;
|
||||||
|
|
||||||
|
windowInfo.metaWindow.disconnect(windowInfo.sizeChangedId);
|
||||||
|
windowInfo.metaWindow.disconnect(windowInfo.positionChangedId);
|
||||||
|
windowInfo.windowActor.disconnect(windowInfo.windowActorDestroyId);
|
||||||
|
actor.disconnect(windowInfo.destroyId);
|
||||||
|
|
||||||
|
this._windows.delete(actor);
|
||||||
|
this._container.remove_child(actor);
|
||||||
|
|
||||||
|
this._layoutChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getWindows:
|
||||||
|
*
|
||||||
|
* Gets an array of all MetaWindows that were added to the layout
|
||||||
|
* using addWindow(), ordered by the insertion order.
|
||||||
|
*
|
||||||
|
* @returns {Array} An array including all windows
|
||||||
|
*/
|
||||||
|
getWindows() {
|
||||||
|
return [...this._windows.values()].map(i => i.metaWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
get bounding_box() {
|
||||||
|
return this._boundingBox;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var WindowPreview = GObject.registerClass({
|
||||||
|
Properties: {
|
||||||
|
'overlay-enabled': GObject.ParamSpec.boolean(
|
||||||
|
'overlay-enabled', 'overlay-enabled', 'overlay-enabled',
|
||||||
|
GObject.ParamFlags.READWRITE,
|
||||||
|
true),
|
||||||
|
},
|
||||||
|
Signals: {
|
||||||
|
'drag-begin': {},
|
||||||
|
'drag-cancelled': {},
|
||||||
|
'drag-end': {},
|
||||||
|
'selected': { param_types: [GObject.TYPE_UINT] },
|
||||||
|
'show-chrome': {},
|
||||||
|
'size-changed': {},
|
||||||
|
},
|
||||||
|
}, class WindowPreview extends St.Widget {
|
||||||
|
_init(metaWindow, workspace) {
|
||||||
|
this.metaWindow = metaWindow;
|
||||||
|
this.metaWindow._delegate = this;
|
||||||
|
this._windowActor = metaWindow.get_compositor_private();
|
||||||
|
this._workspace = workspace;
|
||||||
|
|
||||||
|
super._init({
|
||||||
|
reactive: true,
|
||||||
|
can_focus: true,
|
||||||
|
accessible_role: Atk.Role.PUSH_BUTTON,
|
||||||
|
offscreen_redirect: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._windowContainer = new Clutter.Actor();
|
||||||
|
// gjs currently can't handle setting an actors layout manager during
|
||||||
|
// the initialization of the actor if that layout manager keeps track
|
||||||
|
// of its container, so set the layout manager after creating the
|
||||||
|
// container
|
||||||
|
this._windowContainer.layout_manager = new WindowPreviewLayout();
|
||||||
|
this.add_child(this._windowContainer);
|
||||||
|
|
||||||
|
this._addWindow(metaWindow);
|
||||||
|
|
||||||
|
this._delegate = this;
|
||||||
|
|
||||||
|
this._stackAbove = null;
|
||||||
|
|
||||||
|
this._windowContainer.layout_manager.connect(
|
||||||
|
'notify::bounding-box', layout => {
|
||||||
|
// A bounding box of 0x0 means all windows were removed
|
||||||
|
if (layout.bounding_box.get_area() > 0)
|
||||||
|
this.emit('size-changed');
|
||||||
|
});
|
||||||
|
|
||||||
|
this._windowDestroyId =
|
||||||
|
this._windowActor.connect('destroy', () => this.destroy());
|
||||||
|
|
||||||
|
this._updateAttachedDialogs();
|
||||||
|
|
||||||
|
let clickAction = new Clutter.ClickAction();
|
||||||
|
clickAction.connect('clicked', () => this._activate());
|
||||||
|
clickAction.connect('long-press', this._onLongPress.bind(this));
|
||||||
|
this.add_action(clickAction);
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
|
this._draggable = DND.makeDraggable(this,
|
||||||
|
{ restoreOnSuccess: true,
|
||||||
|
manualMode: true,
|
||||||
|
dragActorMaxSize: WINDOW_DND_SIZE,
|
||||||
|
dragActorOpacity: DRAGGING_WINDOW_OPACITY });
|
||||||
|
this._draggable.connect('drag-begin', this._onDragBegin.bind(this));
|
||||||
|
this._draggable.connect('drag-cancelled', this._onDragCancelled.bind(this));
|
||||||
|
this._draggable.connect('drag-end', this._onDragEnd.bind(this));
|
||||||
|
this.inDrag = false;
|
||||||
|
|
||||||
|
this._selected = false;
|
||||||
|
this._overlayEnabled = true;
|
||||||
|
this._closeRequested = false;
|
||||||
|
this._idleHideOverlayId = 0;
|
||||||
|
|
||||||
|
this._border = new St.Widget({
|
||||||
|
visible: false,
|
||||||
|
style_class: 'window-clone-border',
|
||||||
|
});
|
||||||
|
this._borderConstraint = new Clutter.BindConstraint({
|
||||||
|
source: this._windowContainer,
|
||||||
|
coordinate: Clutter.BindCoordinate.SIZE,
|
||||||
|
});
|
||||||
|
this._border.add_constraint(this._borderConstraint);
|
||||||
|
this._border.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._windowContainer,
|
||||||
|
align_axis: Clutter.AlignAxis.BOTH,
|
||||||
|
factor: 0.5,
|
||||||
|
}));
|
||||||
|
this._borderCenter = new Clutter.Actor();
|
||||||
|
this._border.bind_property('visible', this._borderCenter, 'visible',
|
||||||
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
this._borderCenterConstraint = new Clutter.BindConstraint({
|
||||||
|
source: this._windowContainer,
|
||||||
|
coordinate: Clutter.BindCoordinate.SIZE,
|
||||||
|
});
|
||||||
|
this._borderCenter.add_constraint(this._borderCenterConstraint);
|
||||||
|
this._borderCenter.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._windowContainer,
|
||||||
|
align_axis: Clutter.AlignAxis.BOTH,
|
||||||
|
factor: 0.5,
|
||||||
|
}));
|
||||||
|
this._border.connect('style-changed',
|
||||||
|
this._onBorderStyleChanged.bind(this));
|
||||||
|
|
||||||
|
this._title = new St.Label({
|
||||||
|
visible: false,
|
||||||
|
style_class: 'window-caption',
|
||||||
|
text: this._getCaption(),
|
||||||
|
reactive: true,
|
||||||
|
});
|
||||||
|
this._title.add_constraint(new Clutter.BindConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
coordinate: Clutter.BindCoordinate.POSITION,
|
||||||
|
}));
|
||||||
|
this._title.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||||
|
factor: 0.5,
|
||||||
|
}));
|
||||||
|
this._title.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.Y_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({ x: -1, y: 0.5 }),
|
||||||
|
factor: 1,
|
||||||
|
}));
|
||||||
|
this._title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||||
|
this.label_actor = this._title;
|
||||||
|
this._updateCaptionId = this.metaWindow.connect('notify::title', () => {
|
||||||
|
this._title.text = this._getCaption();
|
||||||
|
});
|
||||||
|
|
||||||
|
const layout = Meta.prefs_get_button_layout();
|
||||||
|
this._closeButtonSide =
|
||||||
|
layout.left_buttons.includes(Meta.ButtonFunction.CLOSE)
|
||||||
|
? St.Side.LEFT : St.Side.RIGHT;
|
||||||
|
|
||||||
|
this._closeButton = new St.Button({
|
||||||
|
visible: false,
|
||||||
|
style_class: 'window-close',
|
||||||
|
child: new St.Icon({ icon_name: 'window-close-symbolic' }),
|
||||||
|
});
|
||||||
|
this._closeButton.add_constraint(new Clutter.BindConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
coordinate: Clutter.BindCoordinate.POSITION,
|
||||||
|
}));
|
||||||
|
this._closeButton.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({ x: 0.5, y: -1 }),
|
||||||
|
factor: this._closeButtonSide === St.Side.LEFT ? 0 : 1,
|
||||||
|
}));
|
||||||
|
this._closeButton.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.Y_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({ x: -1, y: 0.5 }),
|
||||||
|
factor: 0,
|
||||||
|
}));
|
||||||
|
this._closeButton.connect('clicked', () => this._deleteAll());
|
||||||
|
|
||||||
|
this.add_child(this._borderCenter);
|
||||||
|
this.add_child(this._border);
|
||||||
|
this.add_child(this._title);
|
||||||
|
this.add_child(this._closeButton);
|
||||||
|
|
||||||
|
this.connect('notify::realized', () => {
|
||||||
|
if (!this.realized)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._border.ensure_style();
|
||||||
|
this._title.ensure_style();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_width(forHeight) {
|
||||||
|
const themeNode = this.get_theme_node();
|
||||||
|
|
||||||
|
// Only include window previews in size request, not chrome
|
||||||
|
const [minWidth, natWidth] =
|
||||||
|
this._windowContainer.get_preferred_width(
|
||||||
|
themeNode.adjust_for_height(forHeight));
|
||||||
|
|
||||||
|
return themeNode.adjust_preferred_width(minWidth, natWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_get_preferred_height(forWidth) {
|
||||||
|
const themeNode = this.get_theme_node();
|
||||||
|
const [minHeight, natHeight] =
|
||||||
|
this._windowContainer.get_preferred_height(
|
||||||
|
themeNode.adjust_for_width(forWidth));
|
||||||
|
|
||||||
|
return themeNode.adjust_preferred_height(minHeight, natHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_allocate(box) {
|
||||||
|
this.set_allocation(box);
|
||||||
|
|
||||||
|
for (const child of this)
|
||||||
|
child.allocate_available_size(0, 0, box.get_width(), box.get_height());
|
||||||
|
}
|
||||||
|
|
||||||
|
_onBorderStyleChanged() {
|
||||||
|
let borderNode = this._border.get_theme_node();
|
||||||
|
this._borderSize = borderNode.get_border_width(St.Side.TOP);
|
||||||
|
|
||||||
|
// Increase the size of the border actor so the border outlines
|
||||||
|
// the bounding box
|
||||||
|
this._borderConstraint.offset = this._borderSize * 2;
|
||||||
|
this._borderCenterConstraint.offset = this._borderSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
_windowCanClose() {
|
||||||
|
return this.metaWindow.can_close() &&
|
||||||
|
!this._hasAttachedDialogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
_getCaption() {
|
||||||
|
if (this.metaWindow.title)
|
||||||
|
return this.metaWindow.title;
|
||||||
|
|
||||||
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
|
let app = tracker.get_window_app(this.metaWindow);
|
||||||
|
return app.get_name();
|
||||||
|
}
|
||||||
|
|
||||||
|
chromeHeights() {
|
||||||
|
const [, closeButtonHeight] = this._closeButton.get_preferred_height(-1);
|
||||||
|
const [, titleHeight] = this._title.get_preferred_height(-1);
|
||||||
|
|
||||||
|
const topOversize = (this._borderSize / 2) + (closeButtonHeight / 2);
|
||||||
|
const bottomOversize = Math.max(
|
||||||
|
this._borderSize,
|
||||||
|
(titleHeight / 2) + (this._borderSize / 2));
|
||||||
|
|
||||||
|
return [topOversize, bottomOversize];
|
||||||
|
}
|
||||||
|
|
||||||
|
chromeWidths() {
|
||||||
|
const [, closeButtonWidth] = this._closeButton.get_preferred_width(-1);
|
||||||
|
|
||||||
|
const leftOversize = this._closeButtonSide === St.Side.LEFT
|
||||||
|
? (this._borderSize / 2) + (closeButtonWidth / 2)
|
||||||
|
: this._borderSize;
|
||||||
|
const rightOversize = this._closeButtonSide === St.Side.LEFT
|
||||||
|
? this._borderSize
|
||||||
|
: (this._borderSize / 2) + (closeButtonWidth / 2);
|
||||||
|
|
||||||
|
return [leftOversize, rightOversize];
|
||||||
|
}
|
||||||
|
|
||||||
|
showOverlay(animate) {
|
||||||
|
if (!this._overlayEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const ongoingTransition = this._border.get_transition('opacity');
|
||||||
|
|
||||||
|
// Don't do anything if we're fully visible already
|
||||||
|
if (this._border.visible && !ongoingTransition)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// If we're supposed to animate and an animation in our direction
|
||||||
|
// is already happening, let that one continue
|
||||||
|
if (animate &&
|
||||||
|
ongoingTransition &&
|
||||||
|
ongoingTransition.get_interval().peek_final_value() === 255)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const toShow = this._windowCanClose()
|
||||||
|
? [this._border, this._title, this._closeButton]
|
||||||
|
: [this._border, this._title];
|
||||||
|
|
||||||
|
toShow.forEach(a => {
|
||||||
|
a.opacity = 0;
|
||||||
|
a.show();
|
||||||
|
a.ease({
|
||||||
|
opacity: 255,
|
||||||
|
duration: animate ? WINDOW_OVERLAY_FADE_TIME : 0,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.emit('show-chrome');
|
||||||
|
}
|
||||||
|
|
||||||
|
hideOverlay(animate) {
|
||||||
|
const ongoingTransition = this._border.get_transition('opacity');
|
||||||
|
|
||||||
|
// Don't do anything if we're fully hidden already
|
||||||
|
if (!this._border.visible && !ongoingTransition)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// If we're supposed to animate and an animation in our direction
|
||||||
|
// is already happening, let that one continue
|
||||||
|
if (animate &&
|
||||||
|
ongoingTransition &&
|
||||||
|
ongoingTransition.get_interval().peek_final_value() === 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
[this._border, this._title, this._closeButton].forEach(a => {
|
||||||
|
a.opacity = 255;
|
||||||
|
a.ease({
|
||||||
|
opacity: 0,
|
||||||
|
duration: animate ? WINDOW_OVERLAY_FADE_TIME : 0,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onComplete: () => a.hide(),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_addWindow(metaWindow) {
|
||||||
|
const clone = this._windowContainer.layout_manager.addWindow(metaWindow);
|
||||||
|
|
||||||
|
// We expect this to be used for all interaction rather than
|
||||||
|
// the ClutterClone; as the former is reactive and the latter
|
||||||
|
// is not, this just works for most cases. However, for DND all
|
||||||
|
// actors are picked, so DND operations would operate on the clone.
|
||||||
|
// To avoid this, we hide it from pick.
|
||||||
|
Shell.util_set_hidden_from_pick(clone, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_has_overlaps() {
|
||||||
|
return this._hasAttachedDialogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
_deleteAll() {
|
||||||
|
const windows = this._windowContainer.layout_manager.getWindows();
|
||||||
|
|
||||||
|
// Delete all windows, starting from the bottom-most (most-modal) one
|
||||||
|
for (const window of windows.reverse())
|
||||||
|
window.delete(global.get_current_time());
|
||||||
|
|
||||||
|
this._closeRequested = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
addDialog(win) {
|
||||||
|
let parent = win.get_transient_for();
|
||||||
|
while (parent.is_attached_dialog())
|
||||||
|
parent = parent.get_transient_for();
|
||||||
|
|
||||||
|
// Display dialog if it is attached to our metaWindow
|
||||||
|
if (win.is_attached_dialog() && parent == this.metaWindow)
|
||||||
|
this._addWindow(win);
|
||||||
|
|
||||||
|
// The dialog popped up after the user tried to close the window,
|
||||||
|
// assume it's a close confirmation and leave the overview
|
||||||
|
if (this._closeRequested)
|
||||||
|
this._activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
_hasAttachedDialogs() {
|
||||||
|
return this._windowContainer.layout_manager.getWindows().length > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateAttachedDialogs() {
|
||||||
|
let iter = win => {
|
||||||
|
let actor = win.get_compositor_private();
|
||||||
|
|
||||||
|
if (!actor)
|
||||||
|
return false;
|
||||||
|
if (!win.is_attached_dialog())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
this._addWindow(win);
|
||||||
|
win.foreach_transient(iter);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
this.metaWindow.foreach_transient(iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
get boundingBox() {
|
||||||
|
const box = this._windowContainer.layout_manager.bounding_box;
|
||||||
|
|
||||||
|
return {
|
||||||
|
x: box.x1,
|
||||||
|
y: box.y1,
|
||||||
|
width: box.get_width(),
|
||||||
|
height: box.get_height(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
get windowCenter() {
|
||||||
|
const box = this._windowContainer.layout_manager.bounding_box;
|
||||||
|
|
||||||
|
return new Graphene.Point({
|
||||||
|
x: box.get_x() + box.get_width() / 2,
|
||||||
|
y: box.get_y() + box.get_height() / 2,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
get overlay_enabled() {
|
||||||
|
return this._overlayEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line camelcase
|
||||||
|
set overlay_enabled(enabled) {
|
||||||
|
if (this._overlayEnabled === enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._overlayEnabled = enabled;
|
||||||
|
this.notify('overlay-enabled');
|
||||||
|
|
||||||
|
if (!enabled)
|
||||||
|
this.hideOverlay(false);
|
||||||
|
else if (this['has-pointer'] || global.stage.key_focus === this)
|
||||||
|
this.showOverlay(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the actor just below us, respecting reparenting done by DND code
|
||||||
|
_getActualStackAbove() {
|
||||||
|
if (this._stackAbove == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (this.inDrag) {
|
||||||
|
if (this._stackAbove._delegate)
|
||||||
|
return this._stackAbove._delegate._getActualStackAbove();
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return this._stackAbove;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setStackAbove(actor) {
|
||||||
|
this._stackAbove = actor;
|
||||||
|
if (this.inDrag)
|
||||||
|
// We'll fix up the stack after the drag
|
||||||
|
return;
|
||||||
|
|
||||||
|
let parent = this.get_parent();
|
||||||
|
let actualAbove = this._getActualStackAbove();
|
||||||
|
if (actualAbove == null)
|
||||||
|
parent.set_child_below_sibling(this, null);
|
||||||
|
else
|
||||||
|
parent.set_child_above_sibling(this, actualAbove);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
this._windowActor.disconnect(this._windowDestroyId);
|
||||||
|
|
||||||
|
this.metaWindow._delegate = null;
|
||||||
|
this._delegate = null;
|
||||||
|
|
||||||
|
this.metaWindow.disconnect(this._updateCaptionId);
|
||||||
|
|
||||||
|
if (this._longPressLater) {
|
||||||
|
Meta.later_remove(this._longPressLater);
|
||||||
|
delete this._longPressLater;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._idleHideOverlayId > 0) {
|
||||||
|
GLib.source_remove(this._idleHideOverlayId);
|
||||||
|
this._idleHideOverlayId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.inDrag) {
|
||||||
|
this.emit('drag-end');
|
||||||
|
this.inDrag = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_activate() {
|
||||||
|
this._selected = true;
|
||||||
|
this.emit('selected', global.get_current_time());
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_enter_event(crossingEvent) {
|
||||||
|
this.showOverlay(true);
|
||||||
|
return super.vfunc_enter_event(crossingEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_leave_event(crossingEvent) {
|
||||||
|
if (this._idleHideOverlayId > 0)
|
||||||
|
GLib.source_remove(this._idleHideOverlayId);
|
||||||
|
|
||||||
|
this._idleHideOverlayId = GLib.timeout_add(
|
||||||
|
GLib.PRIORITY_DEFAULT,
|
||||||
|
WINDOW_OVERLAY_IDLE_HIDE_TIMEOUT, () => {
|
||||||
|
if (this._closeButton['has-pointer'] ||
|
||||||
|
this._title['has-pointer'])
|
||||||
|
return GLib.SOURCE_CONTINUE;
|
||||||
|
|
||||||
|
if (!this['has-pointer'])
|
||||||
|
this.hideOverlay(true);
|
||||||
|
|
||||||
|
this._idleHideOverlayId = 0;
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
});
|
||||||
|
|
||||||
|
GLib.Source.set_name_by_id(this._idleHideOverlayId, '[gnome-shell] this._idleHideOverlayId');
|
||||||
|
|
||||||
|
return super.vfunc_leave_event(crossingEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_key_focus_in() {
|
||||||
|
super.vfunc_key_focus_in();
|
||||||
|
this.showOverlay(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_key_focus_out() {
|
||||||
|
super.vfunc_key_focus_out();
|
||||||
|
this.hideOverlay(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_key_press_event(keyEvent) {
|
||||||
|
let symbol = keyEvent.keyval;
|
||||||
|
let isEnter = symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter;
|
||||||
|
if (isEnter) {
|
||||||
|
this._activate();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.vfunc_key_press_event(keyEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onLongPress(action, actor, state) {
|
||||||
|
// Take advantage of the Clutter policy to consider
|
||||||
|
// a long-press canceled when the pointer movement
|
||||||
|
// exceeds dnd-drag-threshold to manually start the drag
|
||||||
|
if (state == Clutter.LongPressState.CANCEL) {
|
||||||
|
let event = Clutter.get_current_event();
|
||||||
|
this._dragTouchSequence = event.get_event_sequence();
|
||||||
|
|
||||||
|
if (this._longPressLater)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// A click cancels a long-press before any click handler is
|
||||||
|
// run - make sure to not start a drag in that case
|
||||||
|
this._longPressLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||||
|
delete this._longPressLater;
|
||||||
|
if (this._selected)
|
||||||
|
return;
|
||||||
|
let [x, y] = action.get_coords();
|
||||||
|
action.release();
|
||||||
|
this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence, event.get_device());
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.showOverlay(true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDragBegin(_draggable, _time) {
|
||||||
|
this.inDrag = true;
|
||||||
|
this.hideOverlay(false);
|
||||||
|
this.emit('drag-begin');
|
||||||
|
}
|
||||||
|
|
||||||
|
handleDragOver(source, actor, x, y, time) {
|
||||||
|
return this._workspace.handleDragOver(source, actor, x, y, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
acceptDrop(source, actor, x, y, time) {
|
||||||
|
return this._workspace.acceptDrop(source, actor, x, y, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDragCancelled(_draggable, _time) {
|
||||||
|
this.emit('drag-cancelled');
|
||||||
|
}
|
||||||
|
|
||||||
|
_onDragEnd(_draggable, _time, _snapback) {
|
||||||
|
this.inDrag = false;
|
||||||
|
|
||||||
|
// We may not have a parent if DnD completed successfully, in
|
||||||
|
// which case our clone will shortly be destroyed and replaced
|
||||||
|
// with a new one on the target workspace.
|
||||||
|
let parent = this.get_parent();
|
||||||
|
if (parent !== null) {
|
||||||
|
if (this._stackAbove == null)
|
||||||
|
parent.set_child_below_sibling(this, null);
|
||||||
|
else
|
||||||
|
parent.set_child_above_sibling(this, this._stackAbove);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this['has-pointer'])
|
||||||
|
this.showOverlay(true);
|
||||||
|
|
||||||
|
this.emit('drag-end');
|
||||||
|
}
|
||||||
|
});
|
1901
js/ui/workspace.js
1901
js/ui/workspace.js
File diff suppressed because it is too large
Load Diff
@ -549,9 +549,7 @@ var WorkspaceThumbnail = GObject.registerClass({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// a click on the already current workspace should go back to the main view
|
// a click on the already current workspace should go back to the main view
|
||||||
let workspaceManager = global.workspace_manager;
|
if (this.metaWorkspace.active)
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
|
||||||
if (this.metaWorkspace == activeWorkspace)
|
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
else
|
else
|
||||||
this.metaWorkspace.activate(time);
|
this.metaWorkspace.activate(time);
|
||||||
@ -567,7 +565,8 @@ var WorkspaceThumbnail = GObject.registerClass({
|
|||||||
if (this.state > ThumbnailState.NORMAL)
|
if (this.state > ThumbnailState.NORMAL)
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|
||||||
if (source.realWindow && !this._isMyWindow(source.realWindow))
|
if (source.metaWindow &&
|
||||||
|
!this._isMyWindow(source.metaWindow.get_compositor_private()))
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
if (source.app && source.app.can_open_new_window())
|
if (source.app && source.app.can_open_new_window())
|
||||||
return DND.DragMotionResult.COPY_DROP;
|
return DND.DragMotionResult.COPY_DROP;
|
||||||
@ -581,8 +580,8 @@ var WorkspaceThumbnail = GObject.registerClass({
|
|||||||
if (this.state > ThumbnailState.NORMAL)
|
if (this.state > ThumbnailState.NORMAL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (source.realWindow) {
|
if (source.metaWindow) {
|
||||||
let win = source.realWindow;
|
let win = source.metaWindow.get_compositor_private();
|
||||||
if (this._isMyWindow(win))
|
if (this._isMyWindow(win))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -795,7 +794,7 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
|
|
||||||
// Draggable target interface
|
// Draggable target interface
|
||||||
handleDragOver(source, actor, x, y, time) {
|
handleDragOver(source, actor, x, y, time) {
|
||||||
if (!source.realWindow &&
|
if (!source.metaWindow &&
|
||||||
(!source.app || !source.app.can_open_new_window()) &&
|
(!source.app || !source.app.can_open_new_window()) &&
|
||||||
(source.app || !source.shellWorkspaceLaunch) &&
|
(source.app || !source.shellWorkspaceLaunch) &&
|
||||||
source != Main.xdndHandler)
|
source != Main.xdndHandler)
|
||||||
@ -846,7 +845,7 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
if (this._dropWorkspace != -1)
|
if (this._dropWorkspace != -1)
|
||||||
return this._thumbnails[this._dropWorkspace].handleDragOverInternal(source, actor, time);
|
return this._thumbnails[this._dropWorkspace].handleDragOverInternal(source, actor, time);
|
||||||
else if (this._dropPlaceholderPos != -1)
|
else if (this._dropPlaceholderPos != -1)
|
||||||
return source.realWindow ? DND.DragMotionResult.MOVE_DROP : DND.DragMotionResult.COPY_DROP;
|
return source.metaWindow ? DND.DragMotionResult.MOVE_DROP : DND.DragMotionResult.COPY_DROP;
|
||||||
else
|
else
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
}
|
}
|
||||||
@ -855,12 +854,12 @@ var ThumbnailsBox = GObject.registerClass({
|
|||||||
if (this._dropWorkspace != -1) {
|
if (this._dropWorkspace != -1) {
|
||||||
return this._thumbnails[this._dropWorkspace].acceptDropInternal(source, actor, time);
|
return this._thumbnails[this._dropWorkspace].acceptDropInternal(source, actor, time);
|
||||||
} else if (this._dropPlaceholderPos != -1) {
|
} else if (this._dropPlaceholderPos != -1) {
|
||||||
if (!source.realWindow &&
|
if (!source.metaWindow &&
|
||||||
(!source.app || !source.app.can_open_new_window()) &&
|
(!source.app || !source.app.can_open_new_window()) &&
|
||||||
(source.app || !source.shellWorkspaceLaunch))
|
(source.app || !source.shellWorkspaceLaunch))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let isWindow = !!source.realWindow;
|
let isWindow = !!source.metaWindow;
|
||||||
|
|
||||||
let newWorkspaceIndex;
|
let newWorkspaceIndex;
|
||||||
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
|
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
|
||||||
|
@ -7,6 +7,7 @@ const Main = imports.ui.main;
|
|||||||
const SwipeTracker = imports.ui.swipeTracker;
|
const SwipeTracker = imports.ui.swipeTracker;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
|
|
||||||
|
var { ANIMATION_TIME } = imports.ui.overview;
|
||||||
var WORKSPACE_SWITCH_TIME = 250;
|
var WORKSPACE_SWITCH_TIME = 250;
|
||||||
var SCROLL_TIMEOUT_TIME = 150;
|
var SCROLL_TIMEOUT_TIME = 150;
|
||||||
|
|
||||||
@ -21,18 +22,18 @@ var WorkspacesViewBase = GObject.registerClass({
|
|||||||
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
GTypeFlags: GObject.TypeFlags.ABSTRACT,
|
||||||
}, class WorkspacesViewBase extends St.Widget {
|
}, class WorkspacesViewBase extends St.Widget {
|
||||||
_init(monitorIndex) {
|
_init(monitorIndex) {
|
||||||
super._init({ style_class: 'workspaces-view', reactive: true });
|
const { x, y, width, height } =
|
||||||
|
Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
|
||||||
|
|
||||||
|
super._init({
|
||||||
|
style_class: 'workspaces-view',
|
||||||
|
x, y, width, height,
|
||||||
|
});
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
global.focus_manager.add_group(this);
|
global.focus_manager.add_group(this);
|
||||||
|
|
||||||
// The actor itself isn't a drop target, so we don't want to pick on its area
|
|
||||||
this.set_size(0, 0);
|
|
||||||
|
|
||||||
this._monitorIndex = monitorIndex;
|
this._monitorIndex = monitorIndex;
|
||||||
|
|
||||||
this._fullGeometry = null;
|
|
||||||
this._actualGeometry = null;
|
|
||||||
|
|
||||||
this._inDrag = false;
|
this._inDrag = false;
|
||||||
this._windowDragBeginId = Main.overview.connect('window-drag-begin', this._dragBegin.bind(this));
|
this._windowDragBeginId = Main.overview.connect('window-drag-begin', this._dragBegin.bind(this));
|
||||||
this._windowDragEndId = Main.overview.connect('window-drag-end', this._dragEnd.bind(this));
|
this._windowDragEndId = Main.overview.connect('window-drag-end', this._dragEnd.bind(this));
|
||||||
@ -51,24 +52,19 @@ var WorkspacesViewBase = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_dragBegin(overview, window) {
|
_dragBegin() {
|
||||||
this._inDrag = true;
|
this._inDrag = true;
|
||||||
this._setReservedSlot(window);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_dragEnd() {
|
_dragEnd() {
|
||||||
this._inDrag = false;
|
this._inDrag = false;
|
||||||
this._setReservedSlot(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setFullGeometry(geom) {
|
vfunc_allocate(box) {
|
||||||
this._fullGeometry = geom;
|
this.set_allocation(box);
|
||||||
this._syncFullGeometry();
|
|
||||||
}
|
|
||||||
|
|
||||||
setActualGeometry(geom) {
|
for (const child of this)
|
||||||
this._actualGeometry = geom;
|
child.allocate_available_size(0, 0, box.get_width(), box.get_height());
|
||||||
this._syncActualGeometry();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -83,9 +79,8 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
this._gestureActive = false; // touch(pad) gestures
|
this._gestureActive = false; // touch(pad) gestures
|
||||||
|
|
||||||
this._scrollAdjustment = scrollAdjustment;
|
this._scrollAdjustment = scrollAdjustment;
|
||||||
this._onScrollId =
|
this._onScrollId = this._scrollAdjustment.connect('notify::value',
|
||||||
this._scrollAdjustment.connect('notify::value',
|
this._updateScrollPosition.bind(this));
|
||||||
this._onScroll.bind(this));
|
|
||||||
|
|
||||||
this._workspaces = [];
|
this._workspaces = [];
|
||||||
this._updateWorkspaces();
|
this._updateWorkspaces();
|
||||||
@ -97,14 +92,12 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
this._workspaces.sort((a, b) => {
|
this._workspaces.sort((a, b) => {
|
||||||
return a.metaWorkspace.index() - b.metaWorkspace.index();
|
return a.metaWorkspace.index() - b.metaWorkspace.index();
|
||||||
});
|
});
|
||||||
this._updateWorkspaceActors(false);
|
this._workspaces.forEach(
|
||||||
|
(ws, i) => this.set_child_at_index(ws, i));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._overviewShownId = Main.overview.connect('shown', () => {
|
||||||
this._overviewShownId =
|
this.clip_to_allocation = true;
|
||||||
Main.overview.connect('shown', () => {
|
|
||||||
this.set_clip(this._fullGeometry.x, this._fullGeometry.y,
|
|
||||||
this._fullGeometry.width, this._fullGeometry.height);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this._switchWorkspaceNotifyId =
|
this._switchWorkspaceNotifyId =
|
||||||
@ -112,19 +105,29 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
this._activeWorkspaceChanged.bind(this));
|
this._activeWorkspaceChanged.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
_setReservedSlot(window) {
|
vfunc_allocate(box) {
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
this.set_allocation(box);
|
||||||
this._workspaces[i].setReservedSlot(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncFullGeometry() {
|
if (this.get_n_children() === 0)
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
return;
|
||||||
this._workspaces[i].setFullGeometry(this._fullGeometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncActualGeometry() {
|
const { workspaceManager } = global;
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
const { nWorkspaces } = workspaceManager;
|
||||||
this._workspaces[i].setActualGeometry(this._actualGeometry);
|
|
||||||
|
const vertical = workspaceManager.layout_rows === -1;
|
||||||
|
const rtl = this.text_direction === Clutter.TextDirection.RTL;
|
||||||
|
|
||||||
|
this._workspaces.forEach((child, index) => {
|
||||||
|
if (rtl && !vertical)
|
||||||
|
index = nWorkspaces - index - 1;
|
||||||
|
|
||||||
|
const x = vertical ? 0 : index * this.width;
|
||||||
|
const y = vertical ? index * this.height : 0;
|
||||||
|
|
||||||
|
child.allocate_available_size(x, y, box.get_width(), box.get_height());
|
||||||
|
});
|
||||||
|
|
||||||
|
this._updateScrollPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
getActiveWorkspace() {
|
getActiveWorkspace() {
|
||||||
@ -140,11 +143,11 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
else
|
else
|
||||||
this._workspaces[w].fadeToOverview();
|
this._workspaces[w].fadeToOverview();
|
||||||
}
|
}
|
||||||
this._updateWorkspaceActors(false);
|
this._updateScrollPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
animateFromOverview(animationType) {
|
animateFromOverview(animationType) {
|
||||||
this.remove_clip();
|
this.clip_to_allocation = false;
|
||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++) {
|
for (let w = 0; w < this._workspaces.length; w++) {
|
||||||
if (animationType == AnimationType.ZOOM)
|
if (animationType == AnimationType.ZOOM)
|
||||||
@ -159,49 +162,22 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
this._workspaces[i].syncStacking(stackIndices);
|
this._workspaces[i].syncStacking(stackIndices);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update workspace actors parameters
|
_scrollToActive() {
|
||||||
// @showAnimation: iff %true, transition between states
|
const { workspaceManager } = global;
|
||||||
_updateWorkspaceActors(showAnimation) {
|
const active = workspaceManager.get_active_workspace_index();
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
let active = workspaceManager.get_active_workspace_index();
|
|
||||||
|
|
||||||
this._animating = showAnimation;
|
this._animating = true;
|
||||||
|
this._updateVisibility();
|
||||||
|
|
||||||
for (let w = 0; w < this._workspaces.length; w++) {
|
this._scrollAdjustment.remove_transition('value');
|
||||||
let workspace = this._workspaces[w];
|
this._scrollAdjustment.ease(active, {
|
||||||
|
|
||||||
workspace.remove_all_transitions();
|
|
||||||
|
|
||||||
let params = {};
|
|
||||||
if (workspaceManager.layout_rows == -1)
|
|
||||||
params.y = (w - active) * this._fullGeometry.height;
|
|
||||||
else if (this.text_direction == Clutter.TextDirection.RTL)
|
|
||||||
params.x = (active - w) * this._fullGeometry.width;
|
|
||||||
else
|
|
||||||
params.x = (w - active) * this._fullGeometry.width;
|
|
||||||
|
|
||||||
if (showAnimation) {
|
|
||||||
let easeParams = Object.assign(params, {
|
|
||||||
duration: WORKSPACE_SWITCH_TIME,
|
duration: WORKSPACE_SWITCH_TIME,
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
||||||
});
|
onComplete: () => {
|
||||||
// we have to call _updateVisibility() once before the
|
|
||||||
// animation and once afterwards - it does not really
|
|
||||||
// matter which tween we use, so we pick the first one ...
|
|
||||||
if (w == 0) {
|
|
||||||
this._updateVisibility();
|
|
||||||
easeParams.onComplete = () => {
|
|
||||||
this._animating = false;
|
this._animating = false;
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
};
|
},
|
||||||
}
|
});
|
||||||
workspace.ease(easeParams);
|
|
||||||
} else {
|
|
||||||
workspace.set(params);
|
|
||||||
if (w == 0)
|
|
||||||
this._updateVisibility();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateVisibility() {
|
_updateVisibility() {
|
||||||
@ -242,19 +218,14 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._fullGeometry) {
|
this._updateScrollPosition();
|
||||||
this._updateWorkspaceActors(false);
|
|
||||||
this._syncFullGeometry();
|
|
||||||
}
|
|
||||||
if (this._actualGeometry)
|
|
||||||
this._syncActualGeometry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
||||||
if (this._scrolling)
|
if (this._scrolling)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._updateWorkspaceActors(true);
|
this._scrollToActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
@ -276,21 +247,25 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
this._gestureActive = false;
|
this._gestureActive = false;
|
||||||
|
|
||||||
// Make sure title captions etc are shown as necessary
|
// Make sure title captions etc are shown as necessary
|
||||||
this._updateWorkspaceActors(true);
|
this._scrollToActive();
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
// sync the workspaces' positions to the value of the scroll adjustment
|
// sync the workspaces' positions to the value of the scroll adjustment
|
||||||
// and change the active workspace if appropriate
|
// and change the active workspace if appropriate
|
||||||
_onScroll(adj) {
|
_updateScrollPosition() {
|
||||||
if (adj.get_transition('value') !== null && !this._gestureActive)
|
if (!this.has_allocation())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const adj = this._scrollAdjustment;
|
||||||
|
const allowSwitch =
|
||||||
|
adj.get_transition('value') === null && !this._gestureActive;
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
let active = workspaceManager.get_active_workspace_index();
|
let active = workspaceManager.get_active_workspace_index();
|
||||||
let current = Math.round(adj.value);
|
let current = Math.round(adj.value);
|
||||||
|
|
||||||
if (active != current && !this._gestureActive) {
|
if (allowSwitch && active !== current) {
|
||||||
if (!this._workspaces[current]) {
|
if (!this._workspaces[current]) {
|
||||||
// The current workspace was destroyed. This could happen
|
// The current workspace was destroyed. This could happen
|
||||||
// when you are on the last empty workspace, and consolidate
|
// when you are on the last empty workspace, and consolidate
|
||||||
@ -307,36 +282,16 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||||||
if (adj.upper == 1)
|
if (adj.upper == 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let last = this._workspaces.length - 1;
|
const vertical = workspaceManager.layout_rows === -1;
|
||||||
|
const rtl = this.text_direction === Clutter.TextDirection.RTL;
|
||||||
|
const progress = vertical || !rtl
|
||||||
|
? adj.value : adj.upper - adj.value;
|
||||||
|
|
||||||
if (workspaceManager.layout_rows == -1) {
|
for (const ws of this._workspaces) {
|
||||||
let firstWorkspaceY = this._workspaces[0].y;
|
if (vertical)
|
||||||
let lastWorkspaceY = this._workspaces[last].y;
|
ws.translation_y = -progress * this.height;
|
||||||
let workspacesHeight = lastWorkspaceY - firstWorkspaceY;
|
else
|
||||||
|
ws.translation_x = -progress * this.width;
|
||||||
let currentY = firstWorkspaceY;
|
|
||||||
let newY = -Math.round(adj.value / (adj.upper - 1) * workspacesHeight);
|
|
||||||
|
|
||||||
let dy = newY - currentY;
|
|
||||||
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++) {
|
|
||||||
this._workspaces[i].visible = Math.abs(i - adj.value) <= 1;
|
|
||||||
this._workspaces[i].y += dy;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let firstWorkspaceX = this._workspaces[0].x;
|
|
||||||
let lastWorkspaceX = this._workspaces[last].x;
|
|
||||||
let workspacesWidth = lastWorkspaceX - firstWorkspaceX;
|
|
||||||
|
|
||||||
let currentX = firstWorkspaceX;
|
|
||||||
let newX = -Math.round(adj.value / (adj.upper - 1) * workspacesWidth);
|
|
||||||
|
|
||||||
let dx = newX - currentX;
|
|
||||||
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++) {
|
|
||||||
this._workspaces[i].visible = Math.abs(i - adj.value) <= 1;
|
|
||||||
this._workspaces[i].x += dx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -349,18 +304,6 @@ class ExtraWorkspaceView extends WorkspacesViewBase {
|
|||||||
this.add_actor(this._workspace);
|
this.add_actor(this._workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
_setReservedSlot(window) {
|
|
||||||
this._workspace.setReservedSlot(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncFullGeometry() {
|
|
||||||
this._workspace.setFullGeometry(this._fullGeometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
_syncActualGeometry() {
|
|
||||||
this._workspace.setActualGeometry(this._actualGeometry);
|
|
||||||
}
|
|
||||||
|
|
||||||
getActiveWorkspace() {
|
getActiveWorkspace() {
|
||||||
return this._workspace;
|
return this._workspace;
|
||||||
}
|
}
|
||||||
@ -393,7 +336,10 @@ class ExtraWorkspaceView extends WorkspacesViewBase {
|
|||||||
var WorkspacesDisplay = GObject.registerClass(
|
var WorkspacesDisplay = GObject.registerClass(
|
||||||
class WorkspacesDisplay extends St.Widget {
|
class WorkspacesDisplay extends St.Widget {
|
||||||
_init(scrollAdjustment) {
|
_init(scrollAdjustment) {
|
||||||
super._init({ clip_to_allocation: true });
|
super._init({
|
||||||
|
visible: false,
|
||||||
|
clip_to_allocation: true,
|
||||||
|
});
|
||||||
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
|
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
@ -435,6 +381,8 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
this._windowDragEndId =
|
this._windowDragEndId =
|
||||||
Main.overview.connect('window-drag-begin',
|
Main.overview.connect('window-drag-begin',
|
||||||
this._windowDragEnd.bind(this));
|
this._windowDragEnd.bind(this));
|
||||||
|
this._overviewShownId = Main.overview.connect('shown',
|
||||||
|
this._syncWorkspacesActualGeometry.bind(this));
|
||||||
|
|
||||||
this._primaryIndex = Main.layoutManager.primaryIndex;
|
this._primaryIndex = Main.layoutManager.primaryIndex;
|
||||||
this._workspacesViews = [];
|
this._workspacesViews = [];
|
||||||
@ -449,8 +397,9 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
this._scrollEventId = 0;
|
this._scrollEventId = 0;
|
||||||
this._keyPressEventId = 0;
|
this._keyPressEventId = 0;
|
||||||
this._scrollTimeoutId = 0;
|
this._scrollTimeoutId = 0;
|
||||||
|
this._syncActualGeometryLater = 0;
|
||||||
|
|
||||||
this._fullGeometry = null;
|
this._actualGeometry = null;
|
||||||
this._inWindowDrag = false;
|
this._inWindowDrag = false;
|
||||||
|
|
||||||
this._gestureActive = false; // touch(pad) gestures
|
this._gestureActive = false; // touch(pad) gestures
|
||||||
@ -472,6 +421,11 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
this._parentSetLater = 0;
|
this._parentSetLater = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._syncActualGeometryLater) {
|
||||||
|
Meta.later_remove(this._syncActualGeometryLater);
|
||||||
|
this._syncActualGeometryLater = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._scrollTimeoutId !== 0) {
|
if (this._scrollTimeoutId !== 0) {
|
||||||
GLib.source_remove(this._scrollTimeoutId);
|
GLib.source_remove(this._scrollTimeoutId);
|
||||||
this._scrollTimeoutId = 0;
|
this._scrollTimeoutId = 0;
|
||||||
@ -481,6 +435,7 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
global.workspace_manager.disconnect(this._reorderWorkspacesdId);
|
global.workspace_manager.disconnect(this._reorderWorkspacesdId);
|
||||||
Main.overview.disconnect(this._windowDragBeginId);
|
Main.overview.disconnect(this._windowDragBeginId);
|
||||||
Main.overview.disconnect(this._windowDragEndId);
|
Main.overview.disconnect(this._windowDragEndId);
|
||||||
|
Main.overview.disconnect(this._overviewShownId);
|
||||||
}
|
}
|
||||||
|
|
||||||
_windowDragBegin() {
|
_windowDragBegin() {
|
||||||
@ -504,25 +459,11 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
workspaceManager.get_active_workspace_index();
|
workspaceManager.get_active_workspace_index();
|
||||||
}
|
}
|
||||||
|
|
||||||
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
_activeWorkspaceChanged(_wm, _from, to, _direction) {
|
||||||
if (this._gestureActive)
|
if (this._gestureActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._scrollToActive();
|
this._scrollAdjustment.ease(to, {
|
||||||
}
|
|
||||||
|
|
||||||
_scrollToActive() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
let active = workspaceManager.get_active_workspace_index();
|
|
||||||
|
|
||||||
this._updateScrollAdjustment(active);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateScrollAdjustment(index) {
|
|
||||||
if (this._gestureActive)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._scrollAdjustment.ease(index, {
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
||||||
duration: WORKSPACE_SWITCH_TIME,
|
duration: WORKSPACE_SWITCH_TIME,
|
||||||
});
|
});
|
||||||
@ -560,11 +501,8 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
this._workspacesViews[i].startTouchGesture();
|
this._workspacesViews[i].startTouchGesture();
|
||||||
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
|
||||||
let geometry = monitor === this._primaryIndex
|
|
||||||
? this._fullGeometry : monitors[monitor];
|
|
||||||
let distance = global.workspace_manager.layout_rows === -1
|
let distance = global.workspace_manager.layout_rows === -1
|
||||||
? geometry.height : geometry.width;
|
? this.height : this.width;
|
||||||
|
|
||||||
let progress = adjustment.value / adjustment.page_size;
|
let progress = adjustment.value / adjustment.page_size;
|
||||||
let points = Array.from(
|
let points = Array.from(
|
||||||
@ -584,14 +522,13 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
this._clickAction.release();
|
this._clickAction.release();
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
|
||||||
let newWs = workspaceManager.get_workspace_by_index(endProgress);
|
let newWs = workspaceManager.get_workspace_by_index(endProgress);
|
||||||
|
|
||||||
this._scrollAdjustment.ease(endProgress, {
|
this._scrollAdjustment.ease(endProgress, {
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
|
||||||
duration,
|
duration,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (newWs !== activeWorkspace)
|
if (!newWs.active)
|
||||||
newWs.activate(global.get_current_time());
|
newWs.activate(global.get_current_time());
|
||||||
this._endTouchGesture();
|
this._endTouchGesture();
|
||||||
},
|
},
|
||||||
@ -608,8 +545,11 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
return this._getPrimaryView().navigate_focus(from, direction, false);
|
return this._getPrimaryView().navigate_focus(from, direction, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
show(fadeOnPrimary) {
|
animateToOverview(fadeOnPrimary) {
|
||||||
|
this.show();
|
||||||
this._updateWorkspacesViews();
|
this._updateWorkspacesViews();
|
||||||
|
|
||||||
|
if (this._actualGeometry) {
|
||||||
for (let i = 0; i < this._workspacesViews.length; i++) {
|
for (let i = 0; i < this._workspacesViews.length; i++) {
|
||||||
let animationType;
|
let animationType;
|
||||||
if (fadeOnPrimary && i == this._primaryIndex)
|
if (fadeOnPrimary && i == this._primaryIndex)
|
||||||
@ -619,6 +559,10 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
this._workspacesViews[i].animateToOverview(animationType);
|
this._workspacesViews[i].animateToOverview(animationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!fadeOnPrimary)
|
||||||
|
this._syncWorkspacesActualGeometry();
|
||||||
|
}
|
||||||
|
|
||||||
this._restackedNotifyId =
|
this._restackedNotifyId =
|
||||||
Main.overview.connect('windows-restacked',
|
Main.overview.connect('windows-restacked',
|
||||||
this._onRestacked.bind(this));
|
this._onRestacked.bind(this));
|
||||||
@ -638,9 +582,18 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
animationType = AnimationType.ZOOM;
|
animationType = AnimationType.ZOOM;
|
||||||
this._workspacesViews[i].animateFromOverview(animationType);
|
this._workspacesViews[i].animateFromOverview(animationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { primaryIndex } = Main.layoutManager;
|
||||||
|
const { x, y, width, height } =
|
||||||
|
Main.layoutManager.getWorkAreaForMonitor(primaryIndex);
|
||||||
|
this._getPrimaryView().ease({
|
||||||
|
x, y, width, height,
|
||||||
|
duration: fadeOnPrimary ? 0 : ANIMATION_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
hide() {
|
vfunc_hide() {
|
||||||
if (this._restackedNotifyId > 0) {
|
if (this._restackedNotifyId > 0) {
|
||||||
Main.overview.disconnect(this._restackedNotifyId);
|
Main.overview.disconnect(this._restackedNotifyId);
|
||||||
this._restackedNotifyId = 0;
|
this._restackedNotifyId = 0;
|
||||||
@ -656,6 +609,8 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||||
this._workspacesViews[i].destroy();
|
this._workspacesViews[i].destroy();
|
||||||
this._workspacesViews = [];
|
this._workspacesViews = [];
|
||||||
|
|
||||||
|
super.vfunc_hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
_workspacesOnlyOnPrimaryChanged() {
|
_workspacesOnlyOnPrimaryChanged() {
|
||||||
@ -665,6 +620,7 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._updateWorkspacesViews();
|
this._updateWorkspacesViews();
|
||||||
|
this._syncWorkspacesActualGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateWorkspacesViews() {
|
_updateWorkspacesViews() {
|
||||||
@ -681,17 +637,9 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
else
|
else
|
||||||
view = new WorkspacesView(i, this._scrollAdjustment);
|
view = new WorkspacesView(i, this._scrollAdjustment);
|
||||||
|
|
||||||
// HACK: Avoid spurious allocation changes while updating views
|
|
||||||
view.hide();
|
|
||||||
|
|
||||||
this._workspacesViews.push(view);
|
this._workspacesViews.push(view);
|
||||||
Main.layoutManager.overviewGroup.add_actor(view);
|
Main.layoutManager.overviewGroup.add_actor(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._workspacesViews.forEach(v => v.show());
|
|
||||||
|
|
||||||
this._updateWorkspacesFullGeometry();
|
|
||||||
this._updateWorkspacesActualGeometry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_getMonitorIndexForEvent(event) {
|
_getMonitorIndexForEvent(event) {
|
||||||
@ -738,40 +686,35 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// This geometry should always be the fullest geometry
|
|
||||||
// the workspaces switcher can ever be allocated, as if
|
|
||||||
// the sliding controls were never slid in at all.
|
|
||||||
setWorkspacesFullGeometry(geom) {
|
|
||||||
this._fullGeometry = geom;
|
|
||||||
this._updateWorkspacesFullGeometry();
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateWorkspacesFullGeometry() {
|
|
||||||
if (!this._workspacesViews.length)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
|
||||||
for (let i = 0; i < monitors.length; i++) {
|
|
||||||
let geometry = i == this._primaryIndex ? this._fullGeometry : monitors[i];
|
|
||||||
this._workspacesViews[i].setFullGeometry(geometry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateWorkspacesActualGeometry() {
|
_updateWorkspacesActualGeometry() {
|
||||||
if (!this._workspacesViews.length)
|
const [x, y] = this.get_transformed_position();
|
||||||
|
const width = this.allocation.get_width();
|
||||||
|
const height = this.allocation.get_height();
|
||||||
|
|
||||||
|
this._actualGeometry = { x, y, width, height };
|
||||||
|
|
||||||
|
if (this._syncActualGeometryLater > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let [x, y] = this.get_transformed_position();
|
this._syncActualGeometryLater =
|
||||||
let allocation = this.allocation;
|
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||||
let width = allocation.x2 - allocation.x1;
|
this._syncWorkspacesActualGeometry();
|
||||||
let height = allocation.y2 - allocation.y1;
|
|
||||||
let primaryGeometry = { x, y, width, height };
|
|
||||||
|
|
||||||
let monitors = Main.layoutManager.monitors;
|
this._syncActualGeometryLater = 0;
|
||||||
for (let i = 0; i < monitors.length; i++) {
|
return GLib.SOURCE_REMOVE;
|
||||||
let geometry = i == this._primaryIndex ? primaryGeometry : monitors[i];
|
});
|
||||||
this._workspacesViews[i].setActualGeometry(geometry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_syncWorkspacesActualGeometry() {
|
||||||
|
const primaryView = this._getPrimaryView();
|
||||||
|
if (!primaryView)
|
||||||
|
return;
|
||||||
|
|
||||||
|
primaryView.ease({
|
||||||
|
...this._actualGeometry,
|
||||||
|
duration: Main.overview.animationInProgress ? ANIMATION_TIME : 0,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_onRestacked(overview, stackIndices) {
|
_onRestacked(overview, stackIndices) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell', 'c',
|
project('gnome-shell', 'c',
|
||||||
version: '3.37.2',
|
version: '3.37.3',
|
||||||
meson_version: '>= 0.53.0',
|
meson_version: '>= 0.53.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
@ -25,7 +25,7 @@ gio_req = '>= 2.56.0'
|
|||||||
gi_req = '>= 1.49.1'
|
gi_req = '>= 1.49.1'
|
||||||
gjs_req = '>= 1.65.1'
|
gjs_req = '>= 1.65.1'
|
||||||
gtk_req = '>= 3.15.0'
|
gtk_req = '>= 3.15.0'
|
||||||
mutter_req = '>= 3.37.2'
|
mutter_req = '>= 3.37.3'
|
||||||
polkit_req = '>= 0.100'
|
polkit_req = '>= 0.100'
|
||||||
schemas_req = '>= 3.33.1'
|
schemas_req = '>= 3.33.1'
|
||||||
startup_req = '>= 0.11'
|
startup_req = '>= 0.11'
|
||||||
|
255
po/ca.po
255
po/ca.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HEAD\n"
|
"Project-Id-Version: HEAD\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-14 17:40+0000\n"
|
"POT-Creation-Date: 2020-06-05 23:11+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-15 20:39+0200\n"
|
"PO-Revision-Date: 2020-05-15 20:39+0200\n"
|
||||||
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
|
"Last-Translator: Robert Antoni Buj Gelonch <rbuj@fedoraproject.org>\n"
|
||||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||||
@ -592,7 +592,7 @@ msgid_plural "%d hours ago"
|
|||||||
msgstr[0] "fa %d hora"
|
msgstr[0] "fa %d hora"
|
||||||
msgstr[1] "fa %d hores"
|
msgstr[1] "fa %d hores"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "Ahir"
|
msgstr "Ahir"
|
||||||
|
|
||||||
@ -712,56 +712,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "Denega l'accés"
|
msgstr "Denega l'accés"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Permet l'accés"
|
msgstr "Permet l'accés"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:944
|
#: js/ui/appDisplay.js:956
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "Carpeta sense nom"
|
msgstr "Carpeta sense nom"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:967
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "Les aplicacions utilitzades freqüentment apareixeran aquí"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1102
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "Freqüent"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1109
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Totes"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2486 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2215 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "Obre finestres"
|
msgstr "Obre finestres"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2505 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2234 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Finestra nova"
|
msgstr "Finestra nova"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2250
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "Inicia usant una targeta gràfica integrada"
|
msgstr "Inicia usant una targeta gràfica integrada"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2522
|
#: js/ui/appDisplay.js:2251
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "Inicia usant una targeta gràfica discretaa"
|
msgstr "Inicia usant una targeta gràfica discreta"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2550 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2279 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Suprimeix dels preferits"
|
msgstr "Suprimeix dels preferits"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2556
|
#: js/ui/appDisplay.js:2285
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Afegeix als preferits"
|
msgstr "Afegeix als preferits"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2566 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2295 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Mostra els detalls"
|
msgstr "Mostra els detalls"
|
||||||
|
|
||||||
@ -791,7 +779,7 @@ msgstr "Auriculars"
|
|||||||
msgid "Headset"
|
msgid "Headset"
|
||||||
msgstr "Auriculars amb micròfon"
|
msgstr "Auriculars amb micròfon"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:273
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Micròfon"
|
msgstr "Micròfon"
|
||||||
|
|
||||||
@ -808,7 +796,7 @@ msgid "Settings"
|
|||||||
msgstr "Paràmetres"
|
msgstr "Paràmetres"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -818,43 +806,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Dg"
|
msgstr "Dg"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "Dl"
|
msgstr "Dl"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Dt"
|
msgstr "Dt"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "Dc"
|
msgstr "Dc"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Dj"
|
msgstr "Dj"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "Dv"
|
msgstr "Dv"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Ds"
|
msgstr "Ds"
|
||||||
@ -865,7 +853,7 @@ msgstr "Ds"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%OB"
|
msgstr "%OB"
|
||||||
|
|
||||||
@ -878,61 +866,37 @@ msgstr "%OB"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%OB de %Y"
|
msgstr "%OB de %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Mes anterior"
|
msgstr "Mes anterior"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Mes següent"
|
msgstr "Mes següent"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%-d"
|
msgstr "%-d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "Setmana %-V"
|
msgstr "Setmana %-V"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "Tot el dia"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%A %-d %B"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%A %d %B de %Y"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "Cap notificació"
|
msgstr "Cap notificació"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "Cap cita"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "No molesteu"
|
msgstr "No molesteu"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Neteja-ho"
|
msgstr "Neteja-ho"
|
||||||
|
|
||||||
@ -1086,7 +1050,7 @@ msgstr "No ha funcionat. Torneu-ho a provar."
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "En/na %s ara es diu %s"
|
msgstr "En/na %s ara es diu %s"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Finestres"
|
msgstr "Finestres"
|
||||||
|
|
||||||
@ -1105,7 +1069,7 @@ msgstr "Quadre d'aplicacions"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%-d %B de %Y"
|
msgstr "%-d %B de %Y"
|
||||||
|
|
||||||
@ -1113,35 +1077,67 @@ msgstr "%-d %B de %Y"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%A, %-e %B de %Y"
|
msgstr "%A, %-e %B de %Y"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:161
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%-d %B"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%-d %B de %Y"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Avui"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "Demà"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "Tot el dia"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "Cap cita"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "Afegeix rellotges del món…"
|
msgstr "Afegeix rellotges del món…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Rellotges del món"
|
msgstr "Rellotges del món"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:424
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "S'està carregant…"
|
msgstr "S'està carregant…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:434
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Vés en línia per a informació sobre el temps"
|
msgstr "Vés en línia per a informació sobre el temps"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:436
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "La informació sobre el temps no està disponible"
|
msgstr "La informació sobre el temps no està disponible"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:446
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "El temps"
|
msgstr "El temps"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:448
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "Trieu una ubicació pel temps…"
|
msgstr "Trieu una ubicació pel temps…"
|
||||||
|
|
||||||
@ -1310,11 +1306,11 @@ msgstr "Instal·la l'extensió"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "Voleu baixar i instal·lar «%s» d'extensions.gnome.org?"
|
msgstr "Voleu baixar i instal·lar «%s» d'extensions.gnome.org?"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:251
|
#: js/ui/extensionSystem.js:252
|
||||||
msgid "Extension Updates Available"
|
msgid "Extension Updates Available"
|
||||||
msgstr "No hi ha cap actualització d'extensions disponible"
|
msgstr "No hi ha cap actualització d'extensions disponible"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:252
|
#: js/ui/extensionSystem.js:253
|
||||||
msgid "Extension updates are ready to be installed."
|
msgid "Extension updates are ready to be installed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Les actualitzacions de les extensions estan preparades per a ser "
|
"Les actualitzacions de les extensions estan preparades per a ser "
|
||||||
@ -1446,6 +1442,7 @@ msgid "Disabled"
|
|||||||
msgstr "Inhabilitat"
|
msgstr "Inhabilitat"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:743
|
#: js/ui/lookingGlass.js:743
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:188
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
@ -1489,11 +1486,11 @@ msgstr "El bloqueig de pantalla requereix el gestor de pantalla del GNOME."
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informació de l'ordinador"
|
msgstr "Informació de l'ordinador"
|
||||||
|
|
||||||
#: js/ui/mpris.js:204
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "Artista desconegut"
|
msgstr "Artista desconegut"
|
||||||
|
|
||||||
#: js/ui/mpris.js:214
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "Títol desconegut"
|
msgstr "Títol desconegut"
|
||||||
|
|
||||||
@ -1539,23 +1536,23 @@ msgstr "Assigna la pulsació de tecla"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Fet"
|
msgstr "Fet"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "Edita…"
|
msgstr "Edita…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Cap"
|
msgstr "Cap"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "Premeu un botó per a configurar"
|
msgstr "Premeu un botó per a configurar"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Premeu Esc per a sortir"
|
msgstr "Premeu Esc per a sortir"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "Premeu qualsevol tecla per a sortir"
|
msgstr "Premeu qualsevol tecla per a sortir"
|
||||||
|
|
||||||
@ -1613,15 +1610,15 @@ msgstr "No es pot blocar"
|
|||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Una aplicació està bloquejant el bloqueig"
|
msgstr "Una aplicació està bloquejant el bloqueig"
|
||||||
|
|
||||||
#: js/ui/search.js:702
|
#: js/ui/search.js:823
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "S'està cercant…"
|
msgstr "S'està cercant…"
|
||||||
|
|
||||||
#: js/ui/search.js:704
|
#: js/ui/search.js:825
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "No s'ha trobat cap resultat."
|
msgstr "No s'ha trobat cap resultat."
|
||||||
|
|
||||||
#: js/ui/search.js:830
|
#: js/ui/search.js:951
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d more"
|
msgid "%d more"
|
||||||
msgid_plural "%d more"
|
msgid_plural "%d more"
|
||||||
@ -1818,17 +1815,17 @@ msgstr "Ubicació inhabilitada"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Habilita"
|
msgstr "Habilita"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "Permet accés a la ubicació"
|
msgstr "Permet accés a la ubicació"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "L'aplicació %s vol accedir a la vostra ubicació"
|
msgstr "L'aplicació %s vol accedir a la vostra ubicació"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Podeu canviar la configuració de l'accés a la ubicació sempre que vulgueu "
|
"Podeu canviar la configuració de l'accés a la ubicació sempre que vulgueu "
|
||||||
@ -1940,7 +1937,8 @@ msgstr "La xarxa sense fil està desactivada"
|
|||||||
|
|
||||||
#: js/ui/status/network.js:823
|
#: js/ui/status/network.js:823
|
||||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||||
msgstr "S'ha d'activar la xarxa sense fil per a poder-se connectar a una xarxa."
|
msgstr ""
|
||||||
|
"S'ha d'activar la xarxa sense fil per a poder-se connectar a una xarxa."
|
||||||
|
|
||||||
#: js/ui/status/network.js:824
|
#: js/ui/status/network.js:824
|
||||||
msgid "Turn On Wi-Fi"
|
msgid "Turn On Wi-Fi"
|
||||||
@ -2166,11 +2164,11 @@ msgstr "S'ha produït un error d'autorització a Thunderbolt"
|
|||||||
msgid "Could not authorize the Thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "No s'ha pogut autoritzar el dispositiu Thunderbolt: %s"
|
msgstr "No s'ha pogut autoritzar el dispositiu Thunderbolt: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:151
|
#: js/ui/status/volume.js:154
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
msgstr "S'ha canviat el volum"
|
msgstr "S'ha canviat el volum"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:222
|
#: js/ui/status/volume.js:225
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volum"
|
msgstr "Volum"
|
||||||
|
|
||||||
@ -2224,11 +2222,11 @@ msgstr "Desbloqueja la finestra"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Entra amb un altre usuari"
|
msgstr "Entra amb un altre usuari"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicacions"
|
msgstr "Aplicacions"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Cerca"
|
msgstr "Cerca"
|
||||||
|
|
||||||
@ -2438,26 +2436,34 @@ msgid_plural "%d extensions will be updated on next login."
|
|||||||
msgstr[0] "%d extensió serà actualitzada la següent vegada que entreu."
|
msgstr[0] "%d extensió serà actualitzada la següent vegada que entreu."
|
||||||
msgstr[1] "%d extensions seran actualitzades la següent vegada que entreu."
|
msgstr[1] "%d extensions seran actualitzades la següent vegada que entreu."
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
#: subprojects/extensions-app/js/main.js:461
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
msgid "The extension is incompatible with the current GNOME version"
|
||||||
|
msgstr "L'extensió és incompatible amb la versió actual del GNOME"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/js/main.js:464
|
||||||
|
msgid "The extension had an error"
|
||||||
|
msgstr "L'extensió ha tingut un error"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Descripció"
|
msgstr "Descripció"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
#: subprojects/extensions-app/data/ui/extension-row.ui:132
|
||||||
#: subprojects/extensions-tool/src/main.c:253
|
#: subprojects/extensions-tool/src/main.c:253
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "Versió"
|
msgstr "Versió"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
#: subprojects/extensions-app/data/ui/extension-row.ui:160
|
||||||
msgid "Author"
|
msgid "Author"
|
||||||
msgstr "Autoria"
|
msgstr "Autoria"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
#: subprojects/extensions-app/data/ui/extension-row.ui:216
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Lloc web"
|
msgstr "Lloc web"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
#: subprojects/extensions-app/data/ui/extension-row.ui:233
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Suprimeix…"
|
msgstr "Suprimeix…"
|
||||||
|
|
||||||
@ -2474,8 +2480,8 @@ msgid ""
|
|||||||
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
|
||||||
"\">extensions.gnome.org</a>."
|
"\">extensions.gnome.org</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Per a visitar i afegir extensions, visiteu <a href=\"https://extensions.gnome."
|
"Per a visitar i afegir extensions, visiteu <a href=\"https://extensions."
|
||||||
"org\">extensions.gnome.org</a>."
|
"gnome.org\">extensions.gnome.org</a>."
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:35
|
#: subprojects/extensions-app/data/ui/extensions-window.ui:35
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
@ -2520,12 +2526,12 @@ msgid "Log Out…"
|
|||||||
msgstr "Surt…"
|
msgstr "Surt…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr "L'extensió nova s'ha creat amb èxit a %s.\n"
|
msgstr "L'extensió nova s'ha creat amb èxit a %s.\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
@ -2534,12 +2540,12 @@ msgstr ""
|
|||||||
"El nom ha de ser una cadena molt curta (idealment descriptiva).\n"
|
"El nom ha de ser una cadena molt curta (idealment descriptiva).\n"
|
||||||
"Per exemple: %s"
|
"Per exemple: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nom"
|
msgstr "Nom"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
@ -2548,7 +2554,7 @@ msgstr ""
|
|||||||
"La descripció és una explicació d'una frase de què fa l'extensió.\n"
|
"La descripció és una explicació d'una frase de què fa l'extensió.\n"
|
||||||
"Per exemple: %s"
|
"Per exemple: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
@ -2557,56 +2563,56 @@ msgstr ""
|
|||||||
"L'UUID és un identificador únic global per l'extensió\n"
|
"L'UUID és un identificador únic global per l'extensió\n"
|
||||||
"Ha de tenir el format d'una adreça de correu (exemple@softcatala.org)\n"
|
"Ha de tenir el format d'una adreça de correu (exemple@softcatala.org)\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr "Trieu una de les plantilles disponibles:\n"
|
msgstr "Trieu una de les plantilles disponibles:\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Plantilla"
|
msgstr "Plantilla"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr "L'identificador únic de l'extensió nova"
|
msgstr "L'identificador únic de l'extensió nova"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NOM"
|
msgstr "NOM"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr "El nom visible a l'usuari de l'extensió nova"
|
msgstr "El nom visible a l'usuari de l'extensió nova"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr "DESCRIPCIÓ"
|
msgstr "DESCRIPCIÓ"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr "Una descripció curta del que fa l'extensió"
|
msgstr "Una descripció curta del que fa l'extensió"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr "PLANTILLA"
|
msgstr "PLANTILLA"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr "La plantilla a usar per a l'extensió nova"
|
msgstr "La plantilla a usar per a l'extensió nova"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr "Introduïu la informació de l'extensió interactivament"
|
msgstr "Introduïu la informació de l'extensió interactivament"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "Crea una extensió nova"
|
msgstr "Crea una extensió nova"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "Arguments desconeguts"
|
msgstr "Arguments desconeguts"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr "Calen l'UUID, el nom i la descripció"
|
msgstr "Calen l'UUID, el nom i la descripció"
|
||||||
|
|
||||||
@ -2792,7 +2798,7 @@ msgstr "Desinstal·la una extensió"
|
|||||||
|
|
||||||
#: subprojects/extensions-tool/src/main.c:72
|
#: subprojects/extensions-tool/src/main.c:72
|
||||||
msgid "Do not print error messages"
|
msgid "Do not print error messages"
|
||||||
msgstr "No imprimeixis els missatges d'error "
|
msgstr "No imprimeixis els missatges d'error"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/main.c:146
|
#: subprojects/extensions-tool/src/main.c:146
|
||||||
msgid "Failed to connect to GNOME Shell"
|
msgid "Failed to connect to GNOME Shell"
|
||||||
@ -2927,3 +2933,4 @@ msgstr[1] "%u entrades"
|
|||||||
#: subprojects/gvc/gvc-mixer-control.c:2766
|
#: subprojects/gvc/gvc-mixer-control.c:2766
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sons del sistema"
|
msgstr "Sons del sistema"
|
||||||
|
|
||||||
|
286
po/es.po
286
po/es.po
@ -9,8 +9,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell.master\n"
|
"Project-Id-Version: gnome-shell.master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-07 13:09+0000\n"
|
"POT-Creation-Date: 2020-06-05 23:11+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-07 16:46+0200\n"
|
"PO-Revision-Date: 2020-06-08 16:06+0200\n"
|
||||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
|
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
|
||||||
"Language: es_ES\n"
|
"Language: es_ES\n"
|
||||||
@ -431,7 +431,7 @@ msgstr "Visitar la página web de la extensión"
|
|||||||
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
|
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
|
||||||
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:181
|
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:181
|
||||||
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
||||||
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:148
|
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ msgid_plural "%d hours ago"
|
|||||||
msgstr[0] "Hace %d hora"
|
msgstr[0] "Hace %d hora"
|
||||||
msgstr[1] "Hace %d horas"
|
msgstr[1] "Hace %d horas"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "Ayer"
|
msgstr "Ayer"
|
||||||
|
|
||||||
@ -706,56 +706,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "Denegar acceso"
|
msgstr "Denegar acceso"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Conceder acceso"
|
msgstr "Conceder acceso"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:943
|
#: js/ui/appDisplay.js:956
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "Carpeta sin nombre"
|
msgstr "Carpeta sin nombre"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:966
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1101
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "Frecuentes"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1108
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Todas"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2485 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2215 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "Ventanas abiertas"
|
msgstr "Ventanas abiertas"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2504 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2234 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Ventana nueva"
|
msgstr "Ventana nueva"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2520
|
#: js/ui/appDisplay.js:2250
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "Lanzar usando la tarjeta gráfica integrada"
|
msgstr "Lanzar usando la tarjeta gráfica integrada"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2251
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "Lanzar usando la tarjeta gráfica discreta"
|
msgstr "Lanzar usando la tarjeta gráfica discreta"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2549 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2279 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Quitar de los favoritos"
|
msgstr "Quitar de los favoritos"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2555
|
#: js/ui/appDisplay.js:2285
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Añadir a los favoritos"
|
msgstr "Añadir a los favoritos"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2565 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2295 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Mostrar detalles"
|
msgstr "Mostrar detalles"
|
||||||
|
|
||||||
@ -785,7 +773,7 @@ msgstr "Auriculares"
|
|||||||
msgid "Headset"
|
msgid "Headset"
|
||||||
msgstr "Manos libres"
|
msgstr "Manos libres"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:273
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Micrófono"
|
msgstr "Micrófono"
|
||||||
|
|
||||||
@ -802,7 +790,7 @@ msgid "Settings"
|
|||||||
msgstr "Configuración"
|
msgstr "Configuración"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -812,43 +800,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "D"
|
msgstr "D"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "L"
|
msgstr "L"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "M"
|
msgstr "M"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "X"
|
msgstr "X"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "J"
|
msgstr "J"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "V"
|
msgstr "V"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
@ -859,7 +847,7 @@ msgstr "S"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%OB"
|
msgstr "%OB"
|
||||||
|
|
||||||
@ -872,61 +860,37 @@ msgstr "%OB"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%OB de %Y"
|
msgstr "%OB de %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Mes anterior"
|
msgstr "Mes anterior"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Siguiente mes"
|
msgstr "Siguiente mes"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%d"
|
msgstr "%d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "Semana %V"
|
msgstr "Semana %V"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "Todo el día"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%A, %d de %B"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%A, %d de %B de %Y"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "No hay notificaciones"
|
msgstr "No hay notificaciones"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "No hay eventos"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "No molestar"
|
msgstr "No molestar"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Limpiar"
|
msgstr "Limpiar"
|
||||||
|
|
||||||
@ -1080,7 +1044,7 @@ msgstr "Eso no ha funcionado. Inténtelo de nuevo."
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "Ahora %s se llama %s"
|
msgstr "Ahora %s se llama %s"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Ventanas"
|
msgstr "Ventanas"
|
||||||
|
|
||||||
@ -1099,7 +1063,7 @@ msgstr "Tablero"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%B %e %Y"
|
msgstr "%B %e %Y"
|
||||||
|
|
||||||
@ -1107,35 +1071,69 @@ msgstr "%B %e %Y"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%A %e de %B de %Y"
|
msgstr "%A %e de %B de %Y"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:161
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
#| msgid "%B %-d %Y"
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%B %-d"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
#| msgid "%B %-d %Y"
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%B %-d %Y"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Hoy"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "Mañana"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "Todo el día"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "No hay eventos"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "Añadir relojes del mundo…"
|
msgstr "Añadir relojes del mundo…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Relojes del mundo"
|
msgstr "Relojes del mundo"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:424
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Cargando…"
|
msgstr "Cargando…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:434
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Conectarse para obtener la información meteorológica"
|
msgstr "Conectarse para obtener la información meteorológica"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:436
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "La información meteorológica no está disponible actualmente."
|
msgstr "La información meteorológica no está disponible actualmente."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:446
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Meteorología"
|
msgstr "Meteorología"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:448
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "Seleccionar ubicación meteorológica…"
|
msgstr "Seleccionar ubicación meteorológica…"
|
||||||
|
|
||||||
@ -1301,11 +1299,11 @@ msgstr "Instalar extensión"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
|
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:251
|
#: js/ui/extensionSystem.js:252
|
||||||
msgid "Extension Updates Available"
|
msgid "Extension Updates Available"
|
||||||
msgstr "Actualizaciones de extensiones disponibles"
|
msgstr "Actualizaciones de extensiones disponibles"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:252
|
#: js/ui/extensionSystem.js:253
|
||||||
msgid "Extension updates are ready to be installed."
|
msgid "Extension updates are ready to be installed."
|
||||||
msgstr "Las actualizaciones de las extensiones están listas para instalarse."
|
msgstr "Las actualizaciones de las extensiones están listas para instalarse."
|
||||||
|
|
||||||
@ -1435,6 +1433,7 @@ msgid "Disabled"
|
|||||||
msgstr "Desactivado"
|
msgstr "Desactivado"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:743
|
#: js/ui/lookingGlass.js:743
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:188
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
@ -1478,11 +1477,11 @@ msgstr "La pantalla de bloqueo necesita el gestor de pantallas de GNOME."
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Información del sistema"
|
msgstr "Información del sistema"
|
||||||
|
|
||||||
#: js/ui/mpris.js:199
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "Artista desconocido"
|
msgstr "Artista desconocido"
|
||||||
|
|
||||||
#: js/ui/mpris.js:209
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "Título desconocido"
|
msgstr "Título desconocido"
|
||||||
|
|
||||||
@ -1528,23 +1527,23 @@ msgstr "Asignar pulsación"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Hecho"
|
msgstr "Hecho"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "Editar…"
|
msgstr "Editar…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nada"
|
msgstr "Nada"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "Pulse un botón para configurar"
|
msgstr "Pulse un botón para configurar"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Pulse Esc para salir"
|
msgstr "Pulse Esc para salir"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "Pulse cualquier tecla para salir"
|
msgstr "Pulse cualquier tecla para salir"
|
||||||
|
|
||||||
@ -1602,15 +1601,15 @@ msgstr "No se pudo bloquear"
|
|||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Una aplicación impidió el bloqueo"
|
msgstr "Una aplicación impidió el bloqueo"
|
||||||
|
|
||||||
#: js/ui/search.js:702
|
#: js/ui/search.js:823
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Buscando…"
|
msgstr "Buscando…"
|
||||||
|
|
||||||
#: js/ui/search.js:704
|
#: js/ui/search.js:825
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "No se encontraron resultados."
|
msgstr "No se encontraron resultados."
|
||||||
|
|
||||||
#: js/ui/search.js:830
|
#: js/ui/search.js:951
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d more"
|
msgid "%d more"
|
||||||
msgid_plural "%d more"
|
msgid_plural "%d more"
|
||||||
@ -1808,17 +1807,17 @@ msgstr "Ubicación desactivada"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Activar"
|
msgstr "Activar"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "Permitir acceso a la ubicación"
|
msgstr "Permitir acceso a la ubicación"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "La aplicación %s quiere acceder a su ubicación"
|
msgstr "La aplicación %s quiere acceder a su ubicación"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Los servicios de ubicación se pueden cambiar en cualquier momento desde la "
|
"Los servicios de ubicación se pueden cambiar en cualquier momento desde la "
|
||||||
@ -2154,11 +2153,11 @@ msgstr "Error de autorización de Thunderbolt"
|
|||||||
msgid "Could not authorize the Thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s"
|
msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:151
|
#: js/ui/status/volume.js:154
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
msgstr "Volumen modificado"
|
msgstr "Volumen modificado"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:222
|
#: js/ui/status/volume.js:225
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volumen"
|
msgstr "Volumen"
|
||||||
|
|
||||||
@ -2212,11 +2211,11 @@ msgstr "Desbloquear ventana"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Iniciar sesión como otro usuario"
|
msgstr "Iniciar sesión como otro usuario"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicaciones"
|
msgstr "Aplicaciones"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Buscar"
|
msgstr "Buscar"
|
||||||
|
|
||||||
@ -2369,13 +2368,13 @@ msgstr "El usuario rechazó el diálogo de autenticación"
|
|||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
|
#: 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/data/org.gnome.Extensions.desktop.in.in:4
|
||||||
#: subprojects/extensions-app/js/main.js:182
|
#: subprojects/extensions-app/js/main.js:183
|
||||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
||||||
msgid "Extensions"
|
msgid "Extensions"
|
||||||
msgstr "Extensiones"
|
msgstr "Extensiones"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
||||||
#: subprojects/extensions-app/js/main.js:183
|
#: subprojects/extensions-app/js/main.js:184
|
||||||
msgid "Manage your GNOME Extensions"
|
msgid "Manage your GNOME Extensions"
|
||||||
msgstr "Gestionar sus extensiones de GNOME Shell"
|
msgstr "Gestionar sus extensiones de GNOME Shell"
|
||||||
|
|
||||||
@ -2395,12 +2394,12 @@ msgstr ""
|
|||||||
msgid "Configure GNOME Shell Extensions"
|
msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "Configurar las extensiones de GNOME Shell"
|
msgstr "Configurar las extensiones de GNOME Shell"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:144
|
#: subprojects/extensions-app/js/main.js:145
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Remove “%s”?"
|
msgid "Remove “%s”?"
|
||||||
msgstr "¿Quitar «%s»?"
|
msgstr "¿Quitar «%s»?"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:145
|
#: subprojects/extensions-app/js/main.js:146
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you remove the extension, you need to return to download it if you want "
|
"If you remove the extension, you need to return to download it if you want "
|
||||||
"to enable it again"
|
"to enable it again"
|
||||||
@ -2408,44 +2407,52 @@ msgstr ""
|
|||||||
"Si quita la extensión necesitará volver a descargarla si quiere activarla de "
|
"Si quita la extensión necesitará volver a descargarla si quiere activarla de "
|
||||||
"nuevo"
|
"nuevo"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:149
|
#: subprojects/extensions-app/js/main.js:150
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:181
|
#: subprojects/extensions-app/js/main.js:182
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Daniel Mustieles <daniel.mustieles@gmail.com>, 2010-2020\n"
|
"Daniel Mustieles <daniel.mustieles@gmail.com>, 2010-2020\n"
|
||||||
"Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011\n"
|
"Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011\n"
|
||||||
"Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011"
|
"Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:313
|
#: subprojects/extensions-app/js/main.js:314
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d extension will be updated on next login."
|
msgid "%d extension will be updated on next login."
|
||||||
msgid_plural "%d extensions will be updated on next login."
|
msgid_plural "%d extensions will be updated on next login."
|
||||||
msgstr[0] "la próxima vez que inicie sesión se actualizará %d extensión"
|
msgstr[0] "la próxima vez que inicie sesión se actualizará %d extensión"
|
||||||
msgstr[1] "la próxima vez que inicie sesión se actualizarán %d extensiones"
|
msgstr[1] "la próxima vez que inicie sesión se actualizarán %d extensiones"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
#: subprojects/extensions-app/js/main.js:461
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
msgid "The extension is incompatible with the current GNOME version"
|
||||||
|
msgstr "La extensión no es compatible con la versión de GNOME actual"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/js/main.js:464
|
||||||
|
msgid "The extension had an error"
|
||||||
|
msgstr "La extensión contiene un error"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Descripción"
|
msgstr "Descripción"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
#: subprojects/extensions-app/data/ui/extension-row.ui:132
|
||||||
#: subprojects/extensions-tool/src/main.c:253
|
#: subprojects/extensions-tool/src/main.c:253
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "Versión"
|
msgstr "Versión"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
#: subprojects/extensions-app/data/ui/extension-row.ui:160
|
||||||
msgid "Author"
|
msgid "Author"
|
||||||
msgstr "Autor"
|
msgstr "Autor"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
#: subprojects/extensions-app/data/ui/extension-row.ui:216
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Página web"
|
msgstr "Página web"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
#: subprojects/extensions-app/data/ui/extension-row.ui:233
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Quitar…"
|
msgstr "Quitar…"
|
||||||
|
|
||||||
@ -2508,12 +2515,12 @@ msgid "Log Out…"
|
|||||||
msgstr "Cerrar la sesión…"
|
msgstr "Cerrar la sesión…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr "Se ha creado correctamente la nueva extensión en %s.\n"
|
msgstr "Se ha creado correctamente la nueva extensión en %s.\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
@ -2522,12 +2529,12 @@ msgstr ""
|
|||||||
"El nombre debe ser una cadena (descriptiva) muy corta.\n"
|
"El nombre debe ser una cadena (descriptiva) muy corta.\n"
|
||||||
"Algunos ejemplos: %s"
|
"Algunos ejemplos: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nombre"
|
msgstr "Nombre"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
@ -2536,7 +2543,7 @@ msgstr ""
|
|||||||
"La descripción es una única frase para explicar qué hace su extensión.\n"
|
"La descripción es una única frase para explicar qué hace su extensión.\n"
|
||||||
"Algunos ejemplos: %s"
|
"Algunos ejemplos: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
@ -2546,56 +2553,56 @@ msgstr ""
|
|||||||
"Normalmente debe estar en formato de dirección de correo electrónico "
|
"Normalmente debe estar en formato de dirección de correo electrónico "
|
||||||
"(pulsarparaenfocar@usuario.ejemplo.com)\n"
|
"(pulsarparaenfocar@usuario.ejemplo.com)\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr "Elija una de las plantillas disponibles:\n"
|
msgstr "Elija una de las plantillas disponibles:\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Plantilla"
|
msgstr "Plantilla"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr "El identificador único de la nueva extensión"
|
msgstr "El identificador único de la nueva extensión"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NOMBRE"
|
msgstr "NOMBRE"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr "El nombre visible por el usuario de esta extensión"
|
msgstr "El nombre visible por el usuario de esta extensión"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr "DESCRIPCIÓN"
|
msgstr "DESCRIPCIÓN"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr "Una breve descripción de qué hace la extensión"
|
msgstr "Una breve descripción de qué hace la extensión"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr "PLANTILLA"
|
msgstr "PLANTILLA"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr "La plantilla que usar para la nueva extensión"
|
msgstr "La plantilla que usar para la nueva extensión"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr "Introduzca la información de la extensión interactivamente"
|
msgstr "Introduzca la información de la extensión interactivamente"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "Crear una extensión nueva"
|
msgstr "Crear una extensión nueva"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "Argumentos desconocidos"
|
msgstr "Argumentos desconocidos"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr "Se necesita el UUID, el nombre y la descripción"
|
msgstr "Se necesita el UUID, el nombre y la descripción"
|
||||||
|
|
||||||
@ -2917,6 +2924,23 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sonidos del sistema"
|
msgstr "Sonidos del sistema"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d"
|
||||||
|
#~ msgstr "%A, %d de %B"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d, %Y"
|
||||||
|
#~ msgstr "%A, %d de %B de %Y"
|
||||||
|
|
||||||
|
#~ msgid "Frequently used applications will appear here"
|
||||||
|
#~ msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
|
||||||
|
|
||||||
|
#~ msgid "Frequent"
|
||||||
|
#~ msgstr "Frecuentes"
|
||||||
|
|
||||||
|
#~ msgid "All"
|
||||||
|
#~ msgstr "Todas"
|
||||||
|
|
||||||
#~ msgid "Copy Error"
|
#~ msgid "Copy Error"
|
||||||
#~ msgstr "Copiar error"
|
#~ msgstr "Copiar error"
|
||||||
|
|
||||||
@ -3265,12 +3289,6 @@ msgstr "Sonidos del sistema"
|
|||||||
#~ msgid "Nothing Scheduled"
|
#~ msgid "Nothing Scheduled"
|
||||||
#~ msgstr "Nada programado"
|
#~ msgstr "Nada programado"
|
||||||
|
|
||||||
#~ msgid "Today"
|
|
||||||
#~ msgstr "Hoy"
|
|
||||||
|
|
||||||
#~ msgid "Tomorrow"
|
|
||||||
#~ msgstr "Mañana"
|
|
||||||
|
|
||||||
#~ msgid "This week"
|
#~ msgid "This week"
|
||||||
#~ msgstr "Esta semana"
|
#~ msgstr "Esta semana"
|
||||||
|
|
||||||
|
290
po/ja.po
290
po/ja.po
@ -1,5 +1,5 @@
|
|||||||
# Japanese translation of gnome-shell package.
|
# Japanese translation of gnome-shell package.
|
||||||
# Copyright (C) 2009-2020 the gnome-shell copyright holder.
|
# Copyright (C) 2010-2017, 2019-2020 the gnome-shell copyright holder.
|
||||||
# This file is distributed under the same license as the gnome-shell package.
|
# This file is distributed under the same license as the gnome-shell package.
|
||||||
# Nishio Futoshi <fut_nis@d3.dion.ne.jp>, 2010.
|
# Nishio Futoshi <fut_nis@d3.dion.ne.jp>, 2010.
|
||||||
# Kiyotaka NISHIBORI <ml.nishibori.kiyotaka@gmail.com>, 2011.
|
# Kiyotaka NISHIBORI <ml.nishibori.kiyotaka@gmail.com>, 2011.
|
||||||
@ -16,8 +16,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-04 14:38+0000\n"
|
"POT-Creation-Date: 2020-06-10 17:32+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-13 23:00+0900\n"
|
"PO-Revision-Date: 2020-06-11 19:00+0900\n"
|
||||||
"Last-Translator: sicklylife <translation@sicklylife.jp>\n"
|
"Last-Translator: sicklylife <translation@sicklylife.jp>\n"
|
||||||
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
@ -421,7 +421,7 @@ msgstr "拡張機能のホームページを開く"
|
|||||||
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
|
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:139
|
||||||
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:181
|
#: js/ui/endSessionDialog.js:369 js/ui/extensionDownloader.js:181
|
||||||
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
|
||||||
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:148
|
#: js/ui/status/network.js:916 subprojects/extensions-app/js/main.js:149
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "キャンセル"
|
msgstr "キャンセル"
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ msgid "%d hour ago"
|
|||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d 時間前"
|
msgstr[0] "%d 時間前"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "昨日"
|
msgstr "昨日"
|
||||||
|
|
||||||
@ -692,56 +692,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "拒否"
|
msgstr "拒否"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "許可"
|
msgstr "許可"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:943
|
#: js/ui/appDisplay.js:902
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "名前なしのフォルダー"
|
msgstr "名前なしのフォルダー"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:966
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "よく使用するアプリケーションがここに表示されます"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1101
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "常用"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1108
|
|
||||||
msgid "All"
|
|
||||||
msgstr "すべて"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2485 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2241 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "開いているウィンドウ"
|
msgstr "開いているウィンドウ"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2504 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2260 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "新しいウィンドウで開く"
|
msgstr "新しいウィンドウで開く"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2520
|
#: js/ui/appDisplay.js:2276
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "統合グラフィックカードを使用して起動"
|
msgstr "統合グラフィックカードを使用して起動"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2277
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "ディスクリートグラフィックカードを使用して起動"
|
msgstr "ディスクリートグラフィックカードを使用して起動"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2549 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2305 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "お気に入りから削除"
|
msgstr "お気に入りから削除"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2555
|
#: js/ui/appDisplay.js:2311
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "お気に入りに追加"
|
msgstr "お気に入りに追加"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2565 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2321 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "詳細を表示"
|
msgstr "詳細を表示"
|
||||||
|
|
||||||
@ -771,7 +759,7 @@ msgstr "ヘッドフォン"
|
|||||||
msgid "Headset"
|
msgid "Headset"
|
||||||
msgstr "ヘッドセット"
|
msgstr "ヘッドセット"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:273
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "マイク"
|
msgstr "マイク"
|
||||||
|
|
||||||
@ -788,7 +776,7 @@ msgid "Settings"
|
|||||||
msgstr "設定"
|
msgstr "設定"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -798,43 +786,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "日"
|
msgstr "日"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "月"
|
msgstr "月"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "火"
|
msgstr "火"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "水"
|
msgstr "水"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "木"
|
msgstr "木"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "金"
|
msgstr "金"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "土"
|
msgstr "土"
|
||||||
@ -847,7 +835,7 @@ msgstr "土"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%B"
|
msgstr "%B"
|
||||||
|
|
||||||
@ -860,61 +848,37 @@ msgstr "%B"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%Y年%B"
|
msgstr "%Y年%B"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "先月"
|
msgstr "先月"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "来月"
|
msgstr "来月"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%d"
|
msgstr "%d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "第 %V 週"
|
msgstr "第 %V 週"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "終日"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%B%-e日 (%a)"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%Y年%B%-e日 (%a)"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "通知なし"
|
msgstr "通知なし"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "イベントなし"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "通知ポップアップを表示しない"
|
msgstr "通知ポップアップを表示しない"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "消去"
|
msgstr "消去"
|
||||||
|
|
||||||
@ -1066,7 +1030,7 @@ msgstr "申し訳ありません、認証できませんでした。再試行し
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s は %s になりました"
|
msgstr "%s は %s になりました"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "ウィンドウ"
|
msgstr "ウィンドウ"
|
||||||
|
|
||||||
@ -1085,7 +1049,7 @@ msgstr "ダッシュボード"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%Y年%-m月%-e日"
|
msgstr "%Y年%-m月%-e日"
|
||||||
|
|
||||||
@ -1093,35 +1057,67 @@ msgstr "%Y年%-m月%-e日"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%Y年%-m月%-e日 (%a)"
|
msgstr "%Y年%-m月%-e日 (%a)"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:161
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%-m月%-e日"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%Y年%-m月%-e日"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "今日"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "明日"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "終日"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "イベントなし"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "世界時計を追加…"
|
msgstr "世界時計を追加…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "世界時計"
|
msgstr "世界時計"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:424
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "読み込み中…"
|
msgstr "読み込み中…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:434
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "気象情報取得のためにネットワークに接続してください"
|
msgstr "気象情報取得のためにネットワークに接続してください"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:436
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "気象情報を取得できません"
|
msgstr "気象情報を取得できません"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:446
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "天気"
|
msgstr "天気"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:448
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "天気の場所を選択…"
|
msgstr "天気の場所を選択…"
|
||||||
|
|
||||||
@ -1279,11 +1275,11 @@ msgstr "拡張機能をインストール"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "extensions.gnome.org から“%s”をダウンロードしてインストールしますか?"
|
msgstr "extensions.gnome.org から“%s”をダウンロードしてインストールしますか?"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:251
|
#: js/ui/extensionSystem.js:252
|
||||||
msgid "Extension Updates Available"
|
msgid "Extension Updates Available"
|
||||||
msgstr "拡張機能のアップデートが利用可能です"
|
msgstr "拡張機能のアップデートが利用可能です"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:252
|
#: js/ui/extensionSystem.js:253
|
||||||
msgid "Extension updates are ready to be installed."
|
msgid "Extension updates are ready to be installed."
|
||||||
msgstr "拡張機能のアップデートをインストールする準備ができました。"
|
msgstr "拡張機能のアップデートをインストールする準備ができました。"
|
||||||
|
|
||||||
@ -1410,6 +1406,7 @@ msgid "Disabled"
|
|||||||
msgstr "無効"
|
msgstr "無効"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:743
|
#: js/ui/lookingGlass.js:743
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:188
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "エラー"
|
msgstr "エラー"
|
||||||
|
|
||||||
@ -1453,11 +1450,11 @@ msgstr "画面ロックには GNOME ディスプレイマネージャーが必
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "システム情報"
|
msgstr "システム情報"
|
||||||
|
|
||||||
#: js/ui/mpris.js:199
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "不明なアーティスト"
|
msgstr "不明なアーティスト"
|
||||||
|
|
||||||
#: js/ui/mpris.js:209
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "不明なタイトル"
|
msgstr "不明なタイトル"
|
||||||
|
|
||||||
@ -1503,23 +1500,23 @@ msgstr "キーストロークを割り当て"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "完了"
|
msgstr "完了"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "編集…"
|
msgstr "編集…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "なし"
|
msgstr "なし"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "ボタンを押して設定してください"
|
msgstr "ボタンを押して設定してください"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Esc を押すと終了します"
|
msgstr "Esc を押すと終了します"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "キーを押すと終了します"
|
msgstr "キーを押すと終了します"
|
||||||
|
|
||||||
@ -1529,16 +1526,16 @@ msgstr "終了"
|
|||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: js/ui/panel.js:432
|
#: js/ui/panel.js:435
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "アクティビティ"
|
msgstr "アクティビティ"
|
||||||
|
|
||||||
#: js/ui/panel.js:711
|
#: js/ui/panel.js:714
|
||||||
msgctxt "System menu in the top bar"
|
msgctxt "System menu in the top bar"
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "システム"
|
msgstr "システム"
|
||||||
|
|
||||||
#: js/ui/panel.js:824
|
#: js/ui/panel.js:827
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "トップバー"
|
msgstr "トップバー"
|
||||||
|
|
||||||
@ -1577,15 +1574,15 @@ msgstr "ロックできません"
|
|||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "アプリケーションによってロックがブロックされました"
|
msgstr "アプリケーションによってロックがブロックされました"
|
||||||
|
|
||||||
#: js/ui/search.js:702
|
#: js/ui/search.js:823
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "検索中…"
|
msgstr "検索中…"
|
||||||
|
|
||||||
#: js/ui/search.js:704
|
#: js/ui/search.js:825
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "一致するものがありません。"
|
msgstr "一致するものがありません。"
|
||||||
|
|
||||||
#: js/ui/search.js:830
|
#: js/ui/search.js:951
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d more"
|
msgid "%d more"
|
||||||
msgid_plural "%d more"
|
msgid_plural "%d more"
|
||||||
@ -1782,17 +1779,17 @@ msgstr "位置情報サービス無効"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "有効"
|
msgstr "有効"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "位置情報へのアクセスの許可"
|
msgstr "位置情報へのアクセスの許可"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "アプリ %s が位置情報へのアクセスを要求しています"
|
msgstr "アプリ %s が位置情報へのアクセスを要求しています"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"位置情報のアクセス許可設定は、プライバシー設定からいつでも変更できます。"
|
"位置情報のアクセス許可設定は、プライバシー設定からいつでも変更できます。"
|
||||||
@ -2123,11 +2120,11 @@ msgstr "Thunderbolt 認証エラー"
|
|||||||
msgid "Could not authorize the Thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "Thunderbolt デバイスを認証できませんでした: %s"
|
msgstr "Thunderbolt デバイスを認証できませんでした: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:151
|
#: js/ui/status/volume.js:154
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
msgstr "音量変更しました"
|
msgstr "音量変更しました"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:222
|
#: js/ui/status/volume.js:225
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "音量"
|
msgstr "音量"
|
||||||
|
|
||||||
@ -2181,11 +2178,11 @@ msgstr "ロック解除"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "別のユーザーでログイン"
|
msgstr "別のユーザーでログイン"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "アプリケーション"
|
msgstr "アプリケーション"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "検索"
|
msgstr "検索"
|
||||||
|
|
||||||
@ -2335,19 +2332,19 @@ msgstr "認証ダイアログはユーザーに拒否されました"
|
|||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
|
#: 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/data/org.gnome.Extensions.desktop.in.in:4
|
||||||
#: subprojects/extensions-app/js/main.js:182
|
#: subprojects/extensions-app/js/main.js:183
|
||||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
#: subprojects/extensions-app/data/ui/extensions-window.ui:61
|
||||||
msgid "Extensions"
|
msgid "Extensions"
|
||||||
msgstr "拡張機能"
|
msgstr "拡張機能"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:6
|
||||||
#: subprojects/extensions-app/js/main.js:183
|
#: subprojects/extensions-app/js/main.js:184
|
||||||
msgid "Manage your GNOME Extensions"
|
msgid "Manage your GNOME Extensions"
|
||||||
msgstr "GNOME 拡張機能を管理します"
|
msgstr "GNOME 拡張機能を管理します"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:17
|
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:17
|
||||||
msgid "The GNOME Project"
|
msgid "The GNOME Project"
|
||||||
msgstr ""
|
msgstr "The GNOME Project"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:36
|
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:36
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -2359,23 +2356,23 @@ msgstr ""
|
|||||||
msgid "Configure GNOME Shell Extensions"
|
msgid "Configure GNOME Shell Extensions"
|
||||||
msgstr "GNOME Shell 拡張機能の設定を行います"
|
msgstr "GNOME Shell 拡張機能の設定を行います"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:144
|
#: subprojects/extensions-app/js/main.js:145
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Remove “%s”?"
|
msgid "Remove “%s”?"
|
||||||
msgstr "“%s”を削除しますか?"
|
msgstr "“%s”を削除しますか?"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:145
|
#: subprojects/extensions-app/js/main.js:146
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you remove the extension, you need to return to download it if you want "
|
"If you remove the extension, you need to return to download it if you want "
|
||||||
"to enable it again"
|
"to enable it again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"拡張機能を削除した場合、再度有効にするにはダウンロードし直す必要があります"
|
"拡張機能を削除した場合、再度有効にするにはダウンロードし直す必要があります"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:149
|
#: subprojects/extensions-app/js/main.js:150
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "削除"
|
msgstr "削除"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:181
|
#: subprojects/extensions-app/js/main.js:182
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hideki Yamane <henrich@debian.org>\n"
|
"Hideki Yamane <henrich@debian.org>\n"
|
||||||
@ -2389,32 +2386,40 @@ msgstr ""
|
|||||||
"Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>\n"
|
"Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>\n"
|
||||||
"Yoji TOYODA <bsyamato@sea.plala.or.jp>"
|
"Yoji TOYODA <bsyamato@sea.plala.or.jp>"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:313
|
#: subprojects/extensions-app/js/main.js:314
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d extension will be updated on next login."
|
msgid "%d extension will be updated on next login."
|
||||||
msgid_plural "%d extensions will be updated on next login."
|
msgid_plural "%d extensions will be updated on next login."
|
||||||
msgstr[0] "%d 個の拡張機能を次回ログイン時に更新します。"
|
msgstr[0] "%d 個の拡張機能を次回ログイン時に更新します。"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
#: subprojects/extensions-app/js/main.js:461
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
msgid "The extension is incompatible with the current GNOME version"
|
||||||
|
msgstr "現在の GNOME のバージョンと互換性のない拡張機能です"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/js/main.js:464
|
||||||
|
msgid "The extension had an error"
|
||||||
|
msgstr "拡張機能にエラーがありました"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "説明"
|
msgstr "説明"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
#: subprojects/extensions-app/data/ui/extension-row.ui:132
|
||||||
#: subprojects/extensions-tool/src/main.c:253
|
#: subprojects/extensions-tool/src/main.c:253
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "バージョン"
|
msgstr "バージョン"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
#: subprojects/extensions-app/data/ui/extension-row.ui:160
|
||||||
msgid "Author"
|
msgid "Author"
|
||||||
msgstr "作者"
|
msgstr "作者"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
#: subprojects/extensions-app/data/ui/extension-row.ui:216
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "ウェブサイト"
|
msgstr "ウェブサイト"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
#: subprojects/extensions-app/data/ui/extension-row.ui:233
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "削除…"
|
msgstr "削除…"
|
||||||
|
|
||||||
@ -2470,94 +2475,94 @@ msgstr ""
|
|||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:273
|
#: subprojects/extensions-app/data/ui/extensions-window.ui:273
|
||||||
msgid "Extension Updates Ready"
|
msgid "Extension Updates Ready"
|
||||||
msgstr "拡張機能を更新できます"
|
msgstr "拡張機能の更新準備完了"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extensions-window.ui:289
|
#: subprojects/extensions-app/data/ui/extensions-window.ui:289
|
||||||
msgid "Log Out…"
|
msgid "Log Out…"
|
||||||
msgstr "ログアウト…"
|
msgstr "ログアウト…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
"Examples are: %s"
|
"Examples are: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "名前"
|
msgstr "名前"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
"Examples are: %s"
|
"Examples are: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
"example.com)\n"
|
"example.com)\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "新しい拡張機能を作成します"
|
msgstr "新しい拡張機能を作成します"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "不明な引数です"
|
msgstr "不明な引数です"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2877,6 +2882,23 @@ msgstr[0] "入力数: %u"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "システムのサウンド"
|
msgstr "システムのサウンド"
|
||||||
|
|
||||||
|
#~ msgid "Frequently used applications will appear here"
|
||||||
|
#~ msgstr "よく使用するアプリケーションがここに表示されます"
|
||||||
|
|
||||||
|
#~ msgid "Frequent"
|
||||||
|
#~ msgstr "常用"
|
||||||
|
|
||||||
|
#~ msgid "All"
|
||||||
|
#~ msgstr "すべて"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d"
|
||||||
|
#~ msgstr "%B%-e日 (%a)"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d, %Y"
|
||||||
|
#~ msgstr "%Y年%B%-e日 (%a)"
|
||||||
|
|
||||||
#~ msgid "Copy Error"
|
#~ msgid "Copy Error"
|
||||||
#~ msgstr "エラーをコピー"
|
#~ msgstr "エラーをコピー"
|
||||||
|
|
||||||
|
239
po/ro.po
239
po/ro.po
@ -10,9 +10,10 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-21 23:22+0000\n"
|
"POT-Creation-Date: 2020-06-09 19:41+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-22 15:07+0300\n"
|
"PO-Revision-Date: 2020-06-17 18:47+0300\n"
|
||||||
"Last-Translator: Florentina Mușat <emryslokadottir [at] gmail [dot] com>\n"
|
"Last-Translator: Florentina Mușat <florentina [dot] musat [dot] 28 [at] "
|
||||||
|
"gmail [dot] com>\n"
|
||||||
"Language-Team: Gnome Romanian Translation Team <gnomero-list@lists."
|
"Language-Team: Gnome Romanian Translation Team <gnomero-list@lists."
|
||||||
"sourceforge.net>\n"
|
"sourceforge.net>\n"
|
||||||
"Language: ro\n"
|
"Language: ro\n"
|
||||||
@ -594,7 +595,7 @@ msgstr[0] "%d oră în urmă"
|
|||||||
msgstr[1] "%d ore în urmă"
|
msgstr[1] "%d ore în urmă"
|
||||||
msgstr[2] "%d de ore în urmă"
|
msgstr[2] "%d de ore în urmă"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "Ieri"
|
msgstr "Ieri"
|
||||||
|
|
||||||
@ -718,56 +719,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "Refuză accesul"
|
msgstr "Refuză accesul"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Permite accesul"
|
msgstr "Permite accesul"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:944
|
#: js/ui/appDisplay.js:902
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "Dosar nedenumit"
|
msgstr "Dosar nedenumit"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:967
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "Aplicațiile utilizate frecvent vor fi afișate aici"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1102
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "Frecvente"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1109
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Toate"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2486 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2241 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "Ferestre deschise"
|
msgstr "Ferestre deschise"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2505 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2260 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Fereastră nouă"
|
msgstr "Fereastră nouă"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2276
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "Lansează folosind placa grafică integrată"
|
msgstr "Lansează folosind placa grafică integrată"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2522
|
#: js/ui/appDisplay.js:2277
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "Lansează folosind placa grafică discretă"
|
msgstr "Lansează folosind placa grafică discretă"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2550 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2305 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Elimină din favorite"
|
msgstr "Elimină din favorite"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2556
|
#: js/ui/appDisplay.js:2311
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Adaugă la Favorite"
|
msgstr "Adaugă la Favorite"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2566 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2321 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Arată detaliile"
|
msgstr "Arată detaliile"
|
||||||
|
|
||||||
@ -814,7 +803,7 @@ msgid "Settings"
|
|||||||
msgstr "Configurări"
|
msgstr "Configurări"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -824,43 +813,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "D"
|
msgstr "D"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "L"
|
msgstr "L"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "M"
|
msgstr "M"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "M"
|
msgstr "M"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "J"
|
msgstr "J"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "V"
|
msgstr "V"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
@ -871,7 +860,7 @@ msgstr "S"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%OB"
|
msgstr "%OB"
|
||||||
|
|
||||||
@ -884,61 +873,37 @@ msgstr "%OB"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%OB %Y"
|
msgstr "%OB %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Luna precedentă"
|
msgstr "Luna precedentă"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Luna viitoare"
|
msgstr "Luna viitoare"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%d"
|
msgstr "%d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "Săptămâna %V"
|
msgstr "Săptămâna %V"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "Toată ziua"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%A, %B %-d"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%A, %B %-d, %Y"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "Nu există notificări"
|
msgstr "Nu există notificări"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "Nu există evenimente"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "Nu deranja"
|
msgstr "Nu deranja"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Curăță"
|
msgstr "Curăță"
|
||||||
|
|
||||||
@ -1093,7 +1058,7 @@ msgstr "Nu a funcționat. Încercați din nou."
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s este acum cunoscut ca %s"
|
msgstr "%s este acum cunoscut ca %s"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Ferestre"
|
msgstr "Ferestre"
|
||||||
|
|
||||||
@ -1112,7 +1077,7 @@ msgstr "Dash"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%B %-d %Y"
|
msgstr "%B %-d %Y"
|
||||||
|
|
||||||
@ -1120,35 +1085,67 @@ msgstr "%B %-d %Y"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%A %B %e %Y"
|
msgstr "%A %B %e %Y"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%B %-d"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%B %-d %Y"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Astăzi"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "Mâine"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "Toată ziua"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "Nu există evenimente"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "Adaugă un fus orar…"
|
msgstr "Adaugă un fus orar…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:163
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Fusuri orare"
|
msgstr "Fusuri orare"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:443
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Se încarcă…"
|
msgstr "Se încarcă…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:453
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Conectați-vă la internet pentru informații despre vreme"
|
msgstr "Conectați-vă la internet pentru informații despre vreme"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:455
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Informațiile despre vreme nu sunt disponibile momentan"
|
msgstr "Informațiile despre vreme nu sunt disponibile momentan"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:465
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Vreme"
|
msgstr "Vreme"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:467
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "Selectează locația vremii…"
|
msgstr "Selectează locația vremii…"
|
||||||
|
|
||||||
@ -1495,11 +1492,11 @@ msgstr "Blocarea ecranului necesită administratorul de afișaj GNOME."
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informații despre sistem"
|
msgstr "Informații despre sistem"
|
||||||
|
|
||||||
#: js/ui/mpris.js:204
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "Artist necunoscut"
|
msgstr "Artist necunoscut"
|
||||||
|
|
||||||
#: js/ui/mpris.js:214
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "Titlu necunoscut"
|
msgstr "Titlu necunoscut"
|
||||||
|
|
||||||
@ -1545,23 +1542,23 @@ msgstr "Alochează tasta apăsată"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Gata"
|
msgstr "Gata"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "Editează…"
|
msgstr "Editează…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nespecificat"
|
msgstr "Nespecificat"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "Apăsați un buton de configurat"
|
msgstr "Apăsați un buton de configurat"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Apăsați Esc pentru a ieși"
|
msgstr "Apăsați Esc pentru a ieși"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "Apăsați orice tastă pentru a ieși"
|
msgstr "Apăsați orice tastă pentru a ieși"
|
||||||
|
|
||||||
@ -1826,17 +1823,17 @@ msgstr "Locația dezactivată"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Activează"
|
msgstr "Activează"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "Permite accesul la locație"
|
msgstr "Permite accesul la locație"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "Aplicația %s dorește să vă acceseze locația"
|
msgstr "Aplicația %s dorește să vă acceseze locația"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Accesul la locație poate fi schimbat oricând din configurările de "
|
"Accesul la locație poate fi schimbat oricând din configurările de "
|
||||||
@ -2233,11 +2230,11 @@ msgstr "Deblochează fereastră"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Intră în sesiune ca utilizator diferit"
|
msgstr "Intră în sesiune ca utilizator diferit"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicații"
|
msgstr "Aplicații"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Caută"
|
msgstr "Caută"
|
||||||
|
|
||||||
@ -2434,7 +2431,8 @@ msgstr "Elimină"
|
|||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:182
|
#: subprojects/extensions-app/js/main.js:182
|
||||||
msgid "translator-credits"
|
msgid "translator-credits"
|
||||||
msgstr "Florentina Mușat <emryslokadottir [at] gmail [dot] com>, 2020"
|
msgstr ""
|
||||||
|
"Florentina Mușat <florentina [dot] musat [dot] 28 [at] gmail [dot] com>, 2020"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:314
|
#: subprojects/extensions-app/js/main.js:314
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
@ -2453,7 +2451,7 @@ msgid "The extension had an error"
|
|||||||
msgstr "Extensia a avut o eroare"
|
msgstr "Extensia a avut o eroare"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Descriere"
|
msgstr "Descriere"
|
||||||
@ -2534,12 +2532,12 @@ msgid "Log Out…"
|
|||||||
msgstr "Deautentificare…"
|
msgstr "Deautentificare…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr "Extensia nouă a fost creată cu succes la %s.\n"
|
msgstr "Extensia nouă a fost creată cu succes la %s.\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
@ -2548,12 +2546,12 @@ msgstr ""
|
|||||||
"Numele ar trebui să fie un șir foarte scurt (ideal descriptiv).\n"
|
"Numele ar trebui să fie un șir foarte scurt (ideal descriptiv).\n"
|
||||||
"Exemple: %s"
|
"Exemple: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Nume"
|
msgstr "Nume"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
@ -2563,7 +2561,7 @@ msgstr ""
|
|||||||
"extensia.\n"
|
"extensia.\n"
|
||||||
"Exemple: %s"
|
"Exemple: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
@ -2573,56 +2571,56 @@ msgstr ""
|
|||||||
"Aceasta ar trebui să fie în formatul unei adrese de email "
|
"Aceasta ar trebui să fie în formatul unei adrese de email "
|
||||||
"(clicktofocus@janedoe.example.com)\n"
|
"(clicktofocus@janedoe.example.com)\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr "Alege unul din șabloanele existente:\n"
|
msgstr "Alege unul din șabloanele existente:\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Șablon"
|
msgstr "Șablon"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr "Identificatorul unic al noii extensii"
|
msgstr "Identificatorul unic al noii extensii"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "NUME"
|
msgstr "NUME"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr "Numele vizibil de utilizator pentru noua extensie"
|
msgstr "Numele vizibil de utilizator pentru noua extensie"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr "DESCRIERE"
|
msgstr "DESCRIERE"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr "O scurtă descriere despre ce face extensia"
|
msgstr "O scurtă descriere despre ce face extensia"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr "ȘABLON"
|
msgstr "ȘABLON"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr "Șablonul de utilizat pentru extensia nouă"
|
msgstr "Șablonul de utilizat pentru extensia nouă"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr "Introdu informațiile extensiei interactiv"
|
msgstr "Introdu informațiile extensiei interactiv"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "Creează o nouă extensie"
|
msgstr "Creează o nouă extensie"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "Argumente necunoscute"
|
msgstr "Argumente necunoscute"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr "UUID-ul, numele și descrierea sunt necesare"
|
msgstr "UUID-ul, numele și descrierea sunt necesare"
|
||||||
|
|
||||||
@ -2946,6 +2944,23 @@ msgstr[2] "%u de intrări"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sunete de sistem"
|
msgstr "Sunete de sistem"
|
||||||
|
|
||||||
|
#~ msgid "Frequently used applications will appear here"
|
||||||
|
#~ msgstr "Aplicațiile utilizate frecvent vor fi afișate aici"
|
||||||
|
|
||||||
|
#~ msgid "Frequent"
|
||||||
|
#~ msgstr "Frecvente"
|
||||||
|
|
||||||
|
#~ msgid "All"
|
||||||
|
#~ msgstr "Toate"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d"
|
||||||
|
#~ msgstr "%A, %B %-d"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d, %Y"
|
||||||
|
#~ msgstr "%A, %B %-d, %Y"
|
||||||
|
|
||||||
#~ msgid "Copy Error"
|
#~ msgid "Copy Error"
|
||||||
#~ msgstr "Eroare la copiere"
|
#~ msgstr "Eroare la copiere"
|
||||||
|
|
||||||
@ -3115,12 +3130,6 @@ msgstr "Sunete de sistem"
|
|||||||
#~ msgid "Nothing Scheduled"
|
#~ msgid "Nothing Scheduled"
|
||||||
#~ msgstr "Nimic programat"
|
#~ msgstr "Nimic programat"
|
||||||
|
|
||||||
#~ msgid "Today"
|
|
||||||
#~ msgstr "Astăzi"
|
|
||||||
|
|
||||||
#~ msgid "Tomorrow"
|
|
||||||
#~ msgstr "Mâine"
|
|
||||||
|
|
||||||
#~ msgid "This week"
|
#~ msgid "This week"
|
||||||
#~ msgstr "Săptămâna aceasta"
|
#~ msgstr "Săptămâna aceasta"
|
||||||
|
|
||||||
|
267
po/tr.po
267
po/tr.po
@ -17,7 +17,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-15 18:43+0000\n"
|
"POT-Creation-Date: 2020-06-11 10:28+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-16 12:12+0300\n"
|
"PO-Revision-Date: 2020-05-16 12:12+0300\n"
|
||||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||||
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
||||||
@ -586,7 +586,7 @@ msgid "%d hour ago"
|
|||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d saat önce"
|
msgstr[0] "%d saat önce"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "Dün"
|
msgstr "Dün"
|
||||||
|
|
||||||
@ -702,56 +702,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "Erişimi Reddet"
|
msgstr "Erişimi Reddet"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Erişime İzin Ver"
|
msgstr "Erişime İzin Ver"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:944
|
#: js/ui/appDisplay.js:902
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "Adsız Klasör"
|
msgstr "Adsız Klasör"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:967
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "Sık kullanılan uygulamalar burada yer alacak"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1102
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "Sık Sık"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1109
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Tümü"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2486 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2241 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "Açık Pencereler"
|
msgstr "Açık Pencereler"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2505 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2260 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Yeni Pencere"
|
msgstr "Yeni Pencere"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2276
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "Tümleşik Ekran Kartıyla Başlat"
|
msgstr "Tümleşik Ekran Kartıyla Başlat"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2522
|
#: js/ui/appDisplay.js:2277
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "Ayrık Ekran Kartıyla Başlat"
|
msgstr "Ayrık Ekran Kartıyla Başlat"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2550 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2305 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Sık Kullanılanlardan Çıkar"
|
msgstr "Sık Kullanılanlardan Çıkar"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2556
|
#: js/ui/appDisplay.js:2311
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Sık Kullanılanlara Ekle"
|
msgstr "Sık Kullanılanlara Ekle"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2566 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2321 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Ayrıntıları Göster"
|
msgstr "Ayrıntıları Göster"
|
||||||
|
|
||||||
@ -781,7 +769,7 @@ msgstr "Kulaklıklar"
|
|||||||
msgid "Headset"
|
msgid "Headset"
|
||||||
msgstr "Kulaklıklı Mikrofon"
|
msgstr "Kulaklıklı Mikrofon"
|
||||||
|
|
||||||
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:270
|
#: js/ui/audioDeviceSelection.js:68 js/ui/status/volume.js:273
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
@ -798,7 +786,7 @@ msgid "Settings"
|
|||||||
msgstr "Ayarlar"
|
msgstr "Ayarlar"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -808,43 +796,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "S"
|
msgstr "S"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "Ç"
|
msgstr "Ç"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "P"
|
msgstr "P"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "C"
|
msgstr "C"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "C"
|
msgstr "C"
|
||||||
@ -855,7 +843,7 @@ msgstr "C"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%OB"
|
msgstr "%OB"
|
||||||
|
|
||||||
@ -868,61 +856,37 @@ msgstr "%OB"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%OB %Y"
|
msgstr "%OB %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Önceki ay"
|
msgstr "Önceki ay"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Gelecek ay"
|
msgstr "Gelecek ay"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%d"
|
msgstr "%d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "%V. Hafta"
|
msgstr "%V. Hafta"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "Tüm Gün"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%A, %-d %B"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%A, %-d %B, %Y"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "Bildirim Yok"
|
msgstr "Bildirim Yok"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "Olay Yok"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "Rahatsız Etme"
|
msgstr "Rahatsız Etme"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Temizle"
|
msgstr "Temizle"
|
||||||
|
|
||||||
@ -1076,7 +1040,7 @@ msgstr "Üzgünüm ama işe yaramadı. Lütfen yeniden deneyin."
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s, şimdi %s olarak biliniyor"
|
msgstr "%s, şimdi %s olarak biliniyor"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Pencereler"
|
msgstr "Pencereler"
|
||||||
|
|
||||||
@ -1095,7 +1059,7 @@ msgstr "Konsol"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%-d %B %Y"
|
msgstr "%-d %B %Y"
|
||||||
|
|
||||||
@ -1103,35 +1067,67 @@ msgstr "%-d %B %Y"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%e %B %Y %A"
|
msgstr "%e %B %Y %A"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:161
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%-d %B"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%-d %B %Y"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Bugün"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "Yarın"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "Tüm Gün"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "Olay Yok"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "Dünya saatlerini ekle…"
|
msgstr "Dünya saatlerini ekle…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Dünya Saatleri"
|
msgstr "Dünya Saatleri"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:424
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Yükleniyor…"
|
msgstr "Yükleniyor…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:434
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Hava durumu bilgisi için çevrim içi olun"
|
msgstr "Hava durumu bilgisi için çevrim içi olun"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:436
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Hava durumu bilgisi şu anda kullanılabilir değil"
|
msgstr "Hava durumu bilgisi şu anda kullanılabilir değil"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:446
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Hava Durumu"
|
msgstr "Hava Durumu"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:448
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "Hava durumu konumu seç…"
|
msgstr "Hava durumu konumu seç…"
|
||||||
|
|
||||||
@ -1290,11 +1286,11 @@ msgstr "Uzantı Yükle"
|
|||||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||||
msgstr "extensions.gnome.org üstünden “%s” uzantısı indirilip kurulsun mu?"
|
msgstr "extensions.gnome.org üstünden “%s” uzantısı indirilip kurulsun mu?"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:251
|
#: js/ui/extensionSystem.js:252
|
||||||
msgid "Extension Updates Available"
|
msgid "Extension Updates Available"
|
||||||
msgstr "Uzantı Güncellemeleri Var"
|
msgstr "Uzantı Güncellemeleri Var"
|
||||||
|
|
||||||
#: js/ui/extensionSystem.js:252
|
#: js/ui/extensionSystem.js:253
|
||||||
msgid "Extension updates are ready to be installed."
|
msgid "Extension updates are ready to be installed."
|
||||||
msgstr "Uzantı güncellemeleri kuruluma hazır."
|
msgstr "Uzantı güncellemeleri kuruluma hazır."
|
||||||
|
|
||||||
@ -1421,6 +1417,7 @@ msgid "Disabled"
|
|||||||
msgstr "Devre dışı"
|
msgstr "Devre dışı"
|
||||||
|
|
||||||
#: js/ui/lookingGlass.js:743
|
#: js/ui/lookingGlass.js:743
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:188
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Hata"
|
msgstr "Hata"
|
||||||
|
|
||||||
@ -1464,11 +1461,11 @@ msgstr "Ekran Kilitleme, GNOME ekran yöneticisi gerektirir."
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Sistem Bilgisi"
|
msgstr "Sistem Bilgisi"
|
||||||
|
|
||||||
#: js/ui/mpris.js:204
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "Bilinmeyen sanatçı"
|
msgstr "Bilinmeyen sanatçı"
|
||||||
|
|
||||||
#: js/ui/mpris.js:214
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "Bilinmeyen başlık"
|
msgstr "Bilinmeyen başlık"
|
||||||
|
|
||||||
@ -1514,23 +1511,23 @@ msgstr "Tuş vuruşu ata"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Bitti"
|
msgstr "Bitti"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "Düzenle…"
|
msgstr "Düzenle…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Yok"
|
msgstr "Yok"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "Yapılandırmak için düğmeye bas"
|
msgstr "Yapılandırmak için düğmeye bas"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Çıkmak için Esc’ye bas"
|
msgstr "Çıkmak için Esc’ye bas"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "Çıkmak için herhangi bir tuşa bas"
|
msgstr "Çıkmak için herhangi bir tuşa bas"
|
||||||
|
|
||||||
@ -1588,15 +1585,15 @@ msgstr "Kilitlenemedi"
|
|||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Kilitleme bir uygulama tarafından engellendi"
|
msgstr "Kilitleme bir uygulama tarafından engellendi"
|
||||||
|
|
||||||
#: js/ui/search.js:702
|
#: js/ui/search.js:823
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Aranıyor…"
|
msgstr "Aranıyor…"
|
||||||
|
|
||||||
#: js/ui/search.js:704
|
#: js/ui/search.js:825
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Sonuç yok."
|
msgstr "Sonuç yok."
|
||||||
|
|
||||||
#: js/ui/search.js:830
|
#: js/ui/search.js:951
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%d more"
|
msgid "%d more"
|
||||||
msgid_plural "%d more"
|
msgid_plural "%d more"
|
||||||
@ -1793,17 +1790,17 @@ msgstr "Konum Devre Dışı"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Etkinleştir"
|
msgstr "Etkinleştir"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "Konum erişimine izin ver"
|
msgstr "Konum erişimine izin ver"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "%s uygulaması konumunuza erişmek istiyor"
|
msgstr "%s uygulaması konumunuza erişmek istiyor"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr "Konum erişimi, gizlilik ayarlarından her zaman değiştirilebilir."
|
msgstr "Konum erişimi, gizlilik ayarlarından her zaman değiştirilebilir."
|
||||||
|
|
||||||
@ -2134,11 +2131,11 @@ msgstr "Thunderbolt yetkilendirme hatası"
|
|||||||
msgid "Could not authorize the Thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "Thunderbolt aygıtı yetkilendirilemedi: %s"
|
msgstr "Thunderbolt aygıtı yetkilendirilemedi: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:151
|
#: js/ui/status/volume.js:154
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
msgstr "Bölüm değişti"
|
msgstr "Bölüm değişti"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:222
|
#: js/ui/status/volume.js:225
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Bölüm"
|
msgstr "Bölüm"
|
||||||
|
|
||||||
@ -2192,11 +2189,11 @@ msgstr "Kilit Açma Penceresi"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Başka kullanıcı olarak oturum aç"
|
msgstr "Başka kullanıcı olarak oturum aç"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Uygulamalar"
|
msgstr "Uygulamalar"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Ara"
|
msgstr "Ara"
|
||||||
|
|
||||||
@ -2402,26 +2399,34 @@ msgid "%d extension will be updated on next login."
|
|||||||
msgid_plural "%d extensions will be updated on next login."
|
msgid_plural "%d extensions will be updated on next login."
|
||||||
msgstr[0] "%d uzantı sonraki girişte güncellenecek."
|
msgstr[0] "%d uzantı sonraki girişte güncellenecek."
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:100
|
#: subprojects/extensions-app/js/main.js:461
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
msgid "The extension is incompatible with the current GNOME version"
|
||||||
|
msgstr "Uzantı, geçerli GNOME sürümüyle uyumsuz"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/js/main.js:464
|
||||||
|
msgid "The extension had an error"
|
||||||
|
msgstr "Uzantıda hata oluştu"
|
||||||
|
|
||||||
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Açıklama"
|
msgstr "Açıklama"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:123
|
#: subprojects/extensions-app/data/ui/extension-row.ui:132
|
||||||
#: subprojects/extensions-tool/src/main.c:253
|
#: subprojects/extensions-tool/src/main.c:253
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "Sürüm"
|
msgstr "Sürüm"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:151
|
#: subprojects/extensions-app/data/ui/extension-row.ui:160
|
||||||
msgid "Author"
|
msgid "Author"
|
||||||
msgstr "Yazar"
|
msgstr "Yazar"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:175
|
#: subprojects/extensions-app/data/ui/extension-row.ui:216
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Web Sitesi"
|
msgstr "Web Sitesi"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:192
|
#: subprojects/extensions-app/data/ui/extension-row.ui:233
|
||||||
msgid "Remove…"
|
msgid "Remove…"
|
||||||
msgstr "Kaldır…"
|
msgstr "Kaldır…"
|
||||||
|
|
||||||
@ -2483,12 +2488,12 @@ msgid "Log Out…"
|
|||||||
msgstr "Oturumu Kapat…"
|
msgstr "Oturumu Kapat…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr "Yeni uzantı %s içinde oluşturuldu.\n"
|
msgstr "Yeni uzantı %s içinde oluşturuldu.\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
@ -2497,12 +2502,12 @@ msgstr ""
|
|||||||
"Ad çok kısa (ideal olarak açıklayıcı) dizge olmalıdır.\n"
|
"Ad çok kısa (ideal olarak açıklayıcı) dizge olmalıdır.\n"
|
||||||
"Örnekler: %s"
|
"Örnekler: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Ad"
|
msgstr "Ad"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
@ -2511,7 +2516,7 @@ msgstr ""
|
|||||||
"Açıklama, uzantınızın ne yaptığı anlatan tek tümcelik tanımlamadır.\n"
|
"Açıklama, uzantınızın ne yaptığı anlatan tek tümcelik tanımlamadır.\n"
|
||||||
"Örnekler: %s"
|
"Örnekler: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
@ -2520,56 +2525,56 @@ msgstr ""
|
|||||||
"UUID, uzantınız için genel ve benzersiz tanımlayıcıdır.\n"
|
"UUID, uzantınız için genel ve benzersiz tanımlayıcıdır.\n"
|
||||||
"E-posta biçiminde olmalıdır (clicktofocus@janedoe.example.com)\n"
|
"E-posta biçiminde olmalıdır (clicktofocus@janedoe.example.com)\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr "Uygun şablonlardan birini seçin:\n"
|
msgstr "Uygun şablonlardan birini seçin:\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Şablon"
|
msgstr "Şablon"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr "Yeni uzantının eşsiz tanımlayıcısı"
|
msgstr "Yeni uzantının eşsiz tanımlayıcısı"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "AD"
|
msgstr "AD"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr "Yeni uzantının kullanıcı tarafından görülebilir adı"
|
msgstr "Yeni uzantının kullanıcı tarafından görülebilir adı"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr "AÇIKLAMA"
|
msgstr "AÇIKLAMA"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr "Uzantının ne yaptığına dair kısa açıklama"
|
msgstr "Uzantının ne yaptığına dair kısa açıklama"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr "ŞABLON"
|
msgstr "ŞABLON"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr "Yeni uzantı için kullanılacak şablon"
|
msgstr "Yeni uzantı için kullanılacak şablon"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr "Uzantı bilgisini etkileşimli olarak gir"
|
msgstr "Uzantı bilgisini etkileşimli olarak gir"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "Yeni uzantı oluştur"
|
msgstr "Yeni uzantı oluştur"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "Bilinmeyen argüman"
|
msgstr "Bilinmeyen argüman"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr "UUID, ad ve açıklama gereklidir"
|
msgstr "UUID, ad ve açıklama gereklidir"
|
||||||
|
|
||||||
@ -2889,7 +2894,23 @@ msgstr[0] "%u Girdi"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sistem Sesleri"
|
msgstr "Sistem Sesleri"
|
||||||
|
|
||||||
#, javascript-format
|
#~ msgid "Frequently used applications will appear here"
|
||||||
|
#~ msgstr "Sık kullanılan uygulamalar burada yer alacak"
|
||||||
|
|
||||||
|
#~ msgid "Frequent"
|
||||||
|
#~ msgstr "Sık Sık"
|
||||||
|
|
||||||
|
#~ msgid "All"
|
||||||
|
#~ msgstr "Tümü"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d"
|
||||||
|
#~ msgstr "%A, %-d %B"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d, %Y"
|
||||||
|
#~ msgstr "%A, %-d %B, %Y"
|
||||||
|
|
||||||
#~ msgid "%d Connected"
|
#~ msgid "%d Connected"
|
||||||
#~ msgid_plural "%d Connected"
|
#~ msgid_plural "%d Connected"
|
||||||
#~ msgstr[0] "%d Aygıt Bağlandı"
|
#~ msgstr[0] "%d Aygıt Bağlandı"
|
||||||
@ -3217,12 +3238,6 @@ msgstr "Sistem Sesleri"
|
|||||||
#~ msgid "Nothing Scheduled"
|
#~ msgid "Nothing Scheduled"
|
||||||
#~ msgstr "Planınız Boş"
|
#~ msgstr "Planınız Boş"
|
||||||
|
|
||||||
#~ msgid "Today"
|
|
||||||
#~ msgstr "Bugün"
|
|
||||||
|
|
||||||
#~ msgid "Tomorrow"
|
|
||||||
#~ msgstr "Yarın"
|
|
||||||
|
|
||||||
#~ msgid "This week"
|
#~ msgid "This week"
|
||||||
#~ msgstr "Bu hafta"
|
#~ msgstr "Bu hafta"
|
||||||
|
|
||||||
|
230
po/uk.po
230
po/uk.po
@ -10,8 +10,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2020-05-21 23:22+0000\n"
|
"POT-Creation-Date: 2020-06-05 23:11+0000\n"
|
||||||
"PO-Revision-Date: 2020-05-22 08:44+0300\n"
|
"PO-Revision-Date: 2020-06-06 15:53+0300\n"
|
||||||
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
||||||
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
|
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
|
||||||
"Language: uk\n"
|
"Language: uk\n"
|
||||||
@ -578,7 +578,7 @@ msgstr[1] "%d години тому"
|
|||||||
msgstr[2] "%d годин тому"
|
msgstr[2] "%d годин тому"
|
||||||
msgstr[3] "%d година тому"
|
msgstr[3] "%d година тому"
|
||||||
|
|
||||||
#: js/misc/util.js:191
|
#: js/misc/util.js:191 js/ui/dateMenu.js:162
|
||||||
msgid "Yesterday"
|
msgid "Yesterday"
|
||||||
msgstr "Учора"
|
msgstr "Учора"
|
||||||
|
|
||||||
@ -705,56 +705,44 @@ msgstr ""
|
|||||||
|
|
||||||
#. No support for non-modal system dialogs, so ignore the option
|
#. No support for non-modal system dialogs, so ignore the option
|
||||||
#. let modal = options['modal'] || true;
|
#. let modal = options['modal'] || true;
|
||||||
#: js/ui/accessDialog.js:39 js/ui/status/location.js:374
|
#: js/ui/accessDialog.js:39 js/ui/status/location.js:369
|
||||||
msgid "Deny Access"
|
msgid "Deny Access"
|
||||||
msgstr "Заборонити доступ"
|
msgstr "Заборонити доступ"
|
||||||
|
|
||||||
#: js/ui/accessDialog.js:40 js/ui/status/location.js:377
|
#: js/ui/accessDialog.js:40 js/ui/status/location.js:372
|
||||||
msgid "Grant Access"
|
msgid "Grant Access"
|
||||||
msgstr "Надати доступ"
|
msgstr "Надати доступ"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:944
|
#: js/ui/appDisplay.js:956
|
||||||
msgid "Unnamed Folder"
|
msgid "Unnamed Folder"
|
||||||
msgstr "Неназвана тека"
|
msgstr "Неназвана тека"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:967
|
|
||||||
msgid "Frequently used applications will appear here"
|
|
||||||
msgstr "Часто використовувані програми будуть з'являтись тут"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1102
|
|
||||||
msgid "Frequent"
|
|
||||||
msgstr "Частовживане"
|
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1109
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Усе"
|
|
||||||
|
|
||||||
#. Translators: This is the heading of a list of open windows
|
#. Translators: This is the heading of a list of open windows
|
||||||
#: js/ui/appDisplay.js:2486 js/ui/panel.js:75
|
#: js/ui/appDisplay.js:2215 js/ui/panel.js:75
|
||||||
msgid "Open Windows"
|
msgid "Open Windows"
|
||||||
msgstr "Відкрити вікна"
|
msgstr "Відкрити вікна"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2505 js/ui/panel.js:82
|
#: js/ui/appDisplay.js:2234 js/ui/panel.js:82
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Нове вікно"
|
msgstr "Нове вікно"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2521
|
#: js/ui/appDisplay.js:2250
|
||||||
msgid "Launch using Integrated Graphics Card"
|
msgid "Launch using Integrated Graphics Card"
|
||||||
msgstr "Запустити через інтегровану графічну плату"
|
msgstr "Запустити через інтегровану графічну плату"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2522
|
#: js/ui/appDisplay.js:2251
|
||||||
msgid "Launch using Discrete Graphics Card"
|
msgid "Launch using Discrete Graphics Card"
|
||||||
msgstr "Запустити через дискретну графічну плату"
|
msgstr "Запустити через дискретну графічну плату"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2550 js/ui/dash.js:239
|
#: js/ui/appDisplay.js:2279 js/ui/dash.js:239
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Вилучити з улюбленого"
|
msgstr "Вилучити з улюбленого"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2556
|
#: js/ui/appDisplay.js:2285
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Додати до улюбленого"
|
msgstr "Додати до улюбленого"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:2566 js/ui/panel.js:93
|
#: js/ui/appDisplay.js:2295 js/ui/panel.js:93
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Показати подробиці"
|
msgstr "Показати подробиці"
|
||||||
|
|
||||||
@ -801,7 +789,7 @@ msgid "Settings"
|
|||||||
msgstr "Параметри"
|
msgstr "Параметри"
|
||||||
|
|
||||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
|
||||||
#: js/ui/calendar.js:41
|
#: js/ui/calendar.js:36
|
||||||
msgctxt "calendar-no-work"
|
msgctxt "calendar-no-work"
|
||||||
msgid "06"
|
msgid "06"
|
||||||
msgstr "06"
|
msgstr "06"
|
||||||
@ -811,43 +799,43 @@ msgstr "06"
|
|||||||
#. * NOTE: These grid abbreviations are always shown together
|
#. * NOTE: These grid abbreviations are always shown together
|
||||||
#. * and in order, e.g. "S M T W T F S".
|
#. * and in order, e.g. "S M T W T F S".
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:70
|
#: js/ui/calendar.js:65
|
||||||
msgctxt "grid sunday"
|
msgctxt "grid sunday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "Н"
|
msgstr "Н"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Monday
|
#. Translators: Calendar grid abbreviation for Monday
|
||||||
#: js/ui/calendar.js:72
|
#: js/ui/calendar.js:67
|
||||||
msgctxt "grid monday"
|
msgctxt "grid monday"
|
||||||
msgid "M"
|
msgid "M"
|
||||||
msgstr "П"
|
msgstr "П"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Tuesday
|
#. Translators: Calendar grid abbreviation for Tuesday
|
||||||
#: js/ui/calendar.js:74
|
#: js/ui/calendar.js:69
|
||||||
msgctxt "grid tuesday"
|
msgctxt "grid tuesday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "В"
|
msgstr "В"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Wednesday
|
#. Translators: Calendar grid abbreviation for Wednesday
|
||||||
#: js/ui/calendar.js:76
|
#: js/ui/calendar.js:71
|
||||||
msgctxt "grid wednesday"
|
msgctxt "grid wednesday"
|
||||||
msgid "W"
|
msgid "W"
|
||||||
msgstr "С"
|
msgstr "С"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Thursday
|
#. Translators: Calendar grid abbreviation for Thursday
|
||||||
#: js/ui/calendar.js:78
|
#: js/ui/calendar.js:73
|
||||||
msgctxt "grid thursday"
|
msgctxt "grid thursday"
|
||||||
msgid "T"
|
msgid "T"
|
||||||
msgstr "Ч"
|
msgstr "Ч"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Friday
|
#. Translators: Calendar grid abbreviation for Friday
|
||||||
#: js/ui/calendar.js:80
|
#: js/ui/calendar.js:75
|
||||||
msgctxt "grid friday"
|
msgctxt "grid friday"
|
||||||
msgid "F"
|
msgid "F"
|
||||||
msgstr "П"
|
msgstr "П"
|
||||||
|
|
||||||
#. Translators: Calendar grid abbreviation for Saturday
|
#. Translators: Calendar grid abbreviation for Saturday
|
||||||
#: js/ui/calendar.js:82
|
#: js/ui/calendar.js:77
|
||||||
msgctxt "grid saturday"
|
msgctxt "grid saturday"
|
||||||
msgid "S"
|
msgid "S"
|
||||||
msgstr "С"
|
msgstr "С"
|
||||||
@ -858,7 +846,7 @@ msgstr "С"
|
|||||||
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
#. * "%OB" is the new format specifier introduced in glibc 2.27,
|
||||||
#. * in most cases you should not change it.
|
#. * in most cases you should not change it.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:397
|
#: js/ui/calendar.js:392
|
||||||
msgid "%OB"
|
msgid "%OB"
|
||||||
msgstr "%OB"
|
msgstr "%OB"
|
||||||
|
|
||||||
@ -871,61 +859,37 @@ msgstr "%OB"
|
|||||||
#. * in most cases you should not use the old "%B" here unless you
|
#. * in most cases you should not use the old "%B" here unless you
|
||||||
#. * absolutely know what you are doing.
|
#. * absolutely know what you are doing.
|
||||||
#.
|
#.
|
||||||
#: js/ui/calendar.js:407
|
#: js/ui/calendar.js:402
|
||||||
msgid "%OB %Y"
|
msgid "%OB %Y"
|
||||||
msgstr "%OB %Y"
|
msgstr "%OB %Y"
|
||||||
|
|
||||||
#: js/ui/calendar.js:466
|
#: js/ui/calendar.js:461
|
||||||
msgid "Previous month"
|
msgid "Previous month"
|
||||||
msgstr "Попередній місяць"
|
msgstr "Попередній місяць"
|
||||||
|
|
||||||
#: js/ui/calendar.js:481
|
#: js/ui/calendar.js:476
|
||||||
msgid "Next month"
|
msgid "Next month"
|
||||||
msgstr "Наступний місяць"
|
msgstr "Наступний місяць"
|
||||||
|
|
||||||
#: js/ui/calendar.js:631
|
#: js/ui/calendar.js:626
|
||||||
#, no-javascript-format
|
#, no-javascript-format
|
||||||
msgctxt "date day number format"
|
msgctxt "date day number format"
|
||||||
msgid "%d"
|
msgid "%d"
|
||||||
msgstr "%d"
|
msgstr "%d"
|
||||||
|
|
||||||
#: js/ui/calendar.js:687
|
#: js/ui/calendar.js:682
|
||||||
msgid "Week %V"
|
msgid "Week %V"
|
||||||
msgstr "Тиждень %V"
|
msgstr "Тиждень %V"
|
||||||
|
|
||||||
#. Translators: Shown in calendar event list for all day events
|
#: js/ui/calendar.js:895
|
||||||
#. * Keep it short, best if you can use less then 10 characters
|
|
||||||
#.
|
|
||||||
#: js/ui/calendar.js:762
|
|
||||||
msgctxt "event list time"
|
|
||||||
msgid "All Day"
|
|
||||||
msgstr "Увесь день"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
|
||||||
#: js/ui/calendar.js:900
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d"
|
|
||||||
msgstr "%A, %-d %B"
|
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
|
||||||
#: js/ui/calendar.js:903
|
|
||||||
msgctxt "calendar heading"
|
|
||||||
msgid "%A, %B %-d, %Y"
|
|
||||||
msgstr "%A, %-d %B, %Y"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1133
|
|
||||||
msgid "No Notifications"
|
msgid "No Notifications"
|
||||||
msgstr "Немає сповіщень"
|
msgstr "Немає сповіщень"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1136
|
#: js/ui/calendar.js:949
|
||||||
msgid "No Events"
|
|
||||||
msgstr "Немає подій"
|
|
||||||
|
|
||||||
#: js/ui/calendar.js:1190
|
|
||||||
msgid "Do Not Disturb"
|
msgid "Do Not Disturb"
|
||||||
msgstr "Не турбувати"
|
msgstr "Не турбувати"
|
||||||
|
|
||||||
#: js/ui/calendar.js:1209
|
#: js/ui/calendar.js:968
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr "Очистити"
|
msgstr "Очистити"
|
||||||
|
|
||||||
@ -1076,7 +1040,7 @@ msgstr "Вибачте, це не спрацювало. Спробуйте ще.
|
|||||||
msgid "%s is now known as %s"
|
msgid "%s is now known as %s"
|
||||||
msgstr "%s тепер відомий як %s"
|
msgstr "%s тепер відомий як %s"
|
||||||
|
|
||||||
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:177
|
#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:178
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Вікна"
|
msgstr "Вікна"
|
||||||
|
|
||||||
@ -1095,7 +1059,7 @@ msgstr "Риска"
|
|||||||
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
|
||||||
#. * "February 17 2015".
|
#. * "February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:75
|
#: js/ui/dateMenu.js:79
|
||||||
msgid "%B %-d %Y"
|
msgid "%B %-d %Y"
|
||||||
msgstr "%-d %B %Y"
|
msgstr "%-d %B %Y"
|
||||||
|
|
||||||
@ -1103,35 +1067,69 @@ msgstr "%-d %B %Y"
|
|||||||
#. * below the time in the shell; it should combine the weekday and the
|
#. * below the time in the shell; it should combine the weekday and the
|
||||||
#. * date, e.g. "Tuesday February 17 2015".
|
#. * date, e.g. "Tuesday February 17 2015".
|
||||||
#.
|
#.
|
||||||
#: js/ui/dateMenu.js:82
|
#: js/ui/dateMenu.js:86
|
||||||
msgid "%A %B %e %Y"
|
msgid "%A %B %e %Y"
|
||||||
msgstr "%A %-d %B %Y"
|
msgstr "%A %-d %B %Y"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:162
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
|
#: js/ui/dateMenu.js:151
|
||||||
|
#| msgid "%B %-d %Y"
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d"
|
||||||
|
msgstr "%-d %B"
|
||||||
|
|
||||||
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
|
#: js/ui/dateMenu.js:154
|
||||||
|
#| msgid "%B %-d %Y"
|
||||||
|
msgctxt "calendar heading"
|
||||||
|
msgid "%B %-d %Y"
|
||||||
|
msgstr "%-d %B %Y"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:160
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Сьогодні"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:164
|
||||||
|
msgid "Tomorrow"
|
||||||
|
msgstr "Завтра"
|
||||||
|
|
||||||
|
#. Translators: Shown in calendar event list for all day events
|
||||||
|
#. * Keep it short, best if you can use less then 10 characters
|
||||||
|
#.
|
||||||
|
#: js/ui/dateMenu.js:180
|
||||||
|
msgctxt "event list time"
|
||||||
|
msgid "All Day"
|
||||||
|
msgstr "Увесь день"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:231
|
||||||
|
msgid "No Events"
|
||||||
|
msgstr "Немає подій"
|
||||||
|
|
||||||
|
#: js/ui/dateMenu.js:348
|
||||||
msgid "Add world clocks…"
|
msgid "Add world clocks…"
|
||||||
msgstr "Додати світові годинники…"
|
msgstr "Додати світові годинники…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:163
|
#: js/ui/dateMenu.js:349
|
||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Світові годинники"
|
msgstr "Світові годинники"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:443
|
#: js/ui/dateMenu.js:629
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Завантаження…"
|
msgstr "Завантаження…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:453
|
#: js/ui/dateMenu.js:639
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Увійти в мережу за прогнозом погоди"
|
msgstr "Увійти в мережу за прогнозом погоди"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:455
|
#: js/ui/dateMenu.js:641
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Наразі інформації про погоду недоступна"
|
msgstr "Наразі інформації про погоду недоступна"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:465
|
#: js/ui/dateMenu.js:651
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Погода"
|
msgstr "Погода"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:467
|
#: js/ui/dateMenu.js:653
|
||||||
msgid "Select weather location…"
|
msgid "Select weather location…"
|
||||||
msgstr "Виберіть місцевість для погоди…"
|
msgstr "Виберіть місцевість для погоди…"
|
||||||
|
|
||||||
@ -1483,11 +1481,11 @@ msgstr "Блокування екрана потребує керування в
|
|||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Інформація про систему"
|
msgstr "Інформація про систему"
|
||||||
|
|
||||||
#: js/ui/mpris.js:204
|
#: js/ui/mpris.js:203
|
||||||
msgid "Unknown artist"
|
msgid "Unknown artist"
|
||||||
msgstr "Невідомий виконавець"
|
msgstr "Невідомий виконавець"
|
||||||
|
|
||||||
#: js/ui/mpris.js:214
|
#: js/ui/mpris.js:213
|
||||||
msgid "Unknown title"
|
msgid "Unknown title"
|
||||||
msgstr "Невідома назва"
|
msgstr "Невідома назва"
|
||||||
|
|
||||||
@ -1533,23 +1531,23 @@ msgstr "Призначити клавішу"
|
|||||||
msgid "Done"
|
msgid "Done"
|
||||||
msgstr "Зроблено"
|
msgstr "Зроблено"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:745
|
#: js/ui/padOsd.js:732
|
||||||
msgid "Edit…"
|
msgid "Edit…"
|
||||||
msgstr "Редагувати…"
|
msgstr "Редагувати…"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:787 js/ui/padOsd.js:910
|
#: js/ui/padOsd.js:774 js/ui/padOsd.js:891
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Немає"
|
msgstr "Немає"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:863
|
#: js/ui/padOsd.js:845
|
||||||
msgid "Press a button to configure"
|
msgid "Press a button to configure"
|
||||||
msgstr "Натисніть кнопку, щоб налаштувати"
|
msgstr "Натисніть кнопку, щоб налаштувати"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:864
|
#: js/ui/padOsd.js:846
|
||||||
msgid "Press Esc to exit"
|
msgid "Press Esc to exit"
|
||||||
msgstr "Натисніть клавішу «Esc», щоб вийти"
|
msgstr "Натисніть клавішу «Esc», щоб вийти"
|
||||||
|
|
||||||
#: js/ui/padOsd.js:867
|
#: js/ui/padOsd.js:849
|
||||||
msgid "Press any key to exit"
|
msgid "Press any key to exit"
|
||||||
msgstr "Натисніть будь-яку клавішу, щоб вийти"
|
msgstr "Натисніть будь-яку клавішу, щоб вийти"
|
||||||
|
|
||||||
@ -1813,17 +1811,17 @@ msgstr "Місцевість вимкнено"
|
|||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr "Увімкнути"
|
msgstr "Увімкнути"
|
||||||
|
|
||||||
#: js/ui/status/location.js:355
|
#: js/ui/status/location.js:350
|
||||||
msgid "Allow location access"
|
msgid "Allow location access"
|
||||||
msgstr "Дозволити доступ до даних перебування"
|
msgstr "Дозволити доступ до даних перебування"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/status/location.js:357
|
#: js/ui/status/location.js:352
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "The app %s wants to access your location"
|
msgid "The app %s wants to access your location"
|
||||||
msgstr "Програмі %s потрібен доступ до даних щодо місця вашого перебування"
|
msgstr "Програмі %s потрібен доступ до даних щодо місця вашого перебування"
|
||||||
|
|
||||||
#: js/ui/status/location.js:367
|
#: js/ui/status/location.js:362
|
||||||
msgid "Location access can be changed at any time from the privacy settings."
|
msgid "Location access can be changed at any time from the privacy settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Доступ до місця перебування можна змінити в будь-яку мить у параметрах "
|
"Доступ до місця перебування можна змінити в будь-яку мить у параметрах "
|
||||||
@ -2222,11 +2220,11 @@ msgstr "Розблокувати вікно"
|
|||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Увійти як інший користувач"
|
msgstr "Увійти як інший користувач"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:181
|
#: js/ui/viewSelector.js:182
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Програми"
|
msgstr "Програми"
|
||||||
|
|
||||||
#: js/ui/viewSelector.js:185
|
#: js/ui/viewSelector.js:186
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Пошук"
|
msgstr "Пошук"
|
||||||
|
|
||||||
@ -2443,12 +2441,11 @@ msgid "The extension is incompatible with the current GNOME version"
|
|||||||
msgstr "Розширення є несумісним із поточною версією GNOME"
|
msgstr "Розширення є несумісним із поточною версією GNOME"
|
||||||
|
|
||||||
#: subprojects/extensions-app/js/main.js:464
|
#: subprojects/extensions-app/js/main.js:464
|
||||||
#| msgid "Show extension info"
|
|
||||||
msgid "The extension had an error"
|
msgid "The extension had an error"
|
||||||
msgstr "У розширенні сталася помилка"
|
msgstr "У розширенні сталася помилка"
|
||||||
|
|
||||||
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
#: subprojects/extensions-app/data/ui/extension-row.ui:109
|
||||||
#: subprojects/extensions-tool/src/command-create.c:301
|
#: subprojects/extensions-tool/src/command-create.c:325
|
||||||
#: subprojects/extensions-tool/src/main.c:241
|
#: subprojects/extensions-tool/src/main.c:241
|
||||||
msgid "Description"
|
msgid "Description"
|
||||||
msgstr "Опис"
|
msgstr "Опис"
|
||||||
@ -2529,12 +2526,12 @@ msgid "Log Out…"
|
|||||||
msgstr "Вийти…"
|
msgstr "Вийти…"
|
||||||
|
|
||||||
#. Translators: a file path to an extension directory
|
#. Translators: a file path to an extension directory
|
||||||
#: subprojects/extensions-tool/src/command-create.c:202
|
#: subprojects/extensions-tool/src/command-create.c:226
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "The new extension was successfully created in %s.\n"
|
msgid "The new extension was successfully created in %s.\n"
|
||||||
msgstr "Нове розширення успішно створено в %s.\n"
|
msgstr "Нове розширення успішно створено в %s.\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:275
|
#: subprojects/extensions-tool/src/command-create.c:299
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Name should be a very short (ideally descriptive) string.\n"
|
"Name should be a very short (ideally descriptive) string.\n"
|
||||||
@ -2543,12 +2540,12 @@ msgstr ""
|
|||||||
"Назва повинна бути дуже короткою (бажано максимально описовою).\n"
|
"Назва повинна бути дуже короткою (бажано максимально описовою).\n"
|
||||||
"Наприклад: %s"
|
"Наприклад: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:281
|
#: subprojects/extensions-tool/src/command-create.c:305
|
||||||
#: subprojects/extensions-tool/src/main.c:238
|
#: subprojects/extensions-tool/src/main.c:238
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr "Назва"
|
msgstr "Назва"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:295
|
#: subprojects/extensions-tool/src/command-create.c:319
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Description is a single-sentence explanation of what your extension does.\n"
|
"Description is a single-sentence explanation of what your extension does.\n"
|
||||||
@ -2557,7 +2554,7 @@ msgstr ""
|
|||||||
"Опис — пояснення одним реченням того, що розширення робить.\n"
|
"Опис — пояснення одним реченням того, що розширення робить.\n"
|
||||||
"Наприклад: %s"
|
"Наприклад: %s"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:315
|
#: subprojects/extensions-tool/src/command-create.c:339
|
||||||
msgid ""
|
msgid ""
|
||||||
"UUID is a globally-unique identifier for your extension.\n"
|
"UUID is a globally-unique identifier for your extension.\n"
|
||||||
"This should be in the format of an email address (clicktofocus@janedoe."
|
"This should be in the format of an email address (clicktofocus@janedoe."
|
||||||
@ -2567,56 +2564,56 @@ msgstr ""
|
|||||||
"Він зберігається у форматі електронної адреси (clicktofocus@janedoe.example."
|
"Він зберігається у форматі електронної адреси (clicktofocus@janedoe.example."
|
||||||
"com)\n"
|
"com)\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:342
|
#: subprojects/extensions-tool/src/command-create.c:366
|
||||||
msgid "Choose one of the available templates:\n"
|
msgid "Choose one of the available templates:\n"
|
||||||
msgstr "Виберіть один із доступних шаблонів:\n"
|
msgstr "Виберіть один із доступних шаблонів:\n"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:356
|
#: subprojects/extensions-tool/src/command-create.c:380
|
||||||
msgid "Template"
|
msgid "Template"
|
||||||
msgstr "Шаблон"
|
msgstr "Шаблон"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:411
|
#: subprojects/extensions-tool/src/command-create.c:435
|
||||||
msgid "The unique identifier of the new extension"
|
msgid "The unique identifier of the new extension"
|
||||||
msgstr "Унікальний код розширення"
|
msgstr "Унікальний код розширення"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:414
|
#: subprojects/extensions-tool/src/command-create.c:438
|
||||||
msgid "NAME"
|
msgid "NAME"
|
||||||
msgstr "НАЗВА"
|
msgstr "НАЗВА"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:415
|
#: subprojects/extensions-tool/src/command-create.c:439
|
||||||
msgid "The user-visible name of the new extension"
|
msgid "The user-visible name of the new extension"
|
||||||
msgstr "Загальна назва розширення"
|
msgstr "Загальна назва розширення"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:417
|
#: subprojects/extensions-tool/src/command-create.c:441
|
||||||
msgid "DESCRIPTION"
|
msgid "DESCRIPTION"
|
||||||
msgstr "ОПИС"
|
msgstr "ОПИС"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:419
|
#: subprojects/extensions-tool/src/command-create.c:443
|
||||||
msgid "A short description of what the extension does"
|
msgid "A short description of what the extension does"
|
||||||
msgstr "Короткий опис того, що розширення робить"
|
msgstr "Короткий опис того, що розширення робить"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:422
|
#: subprojects/extensions-tool/src/command-create.c:446
|
||||||
msgid "TEMPLATE"
|
msgid "TEMPLATE"
|
||||||
msgstr "ШАБЛОН"
|
msgstr "ШАБЛОН"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:423
|
#: subprojects/extensions-tool/src/command-create.c:447
|
||||||
msgid "The template to use for the new extension"
|
msgid "The template to use for the new extension"
|
||||||
msgstr "Шаблон, яким слід скористатися для нового розширення"
|
msgstr "Шаблон, яким слід скористатися для нового розширення"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:429
|
#: subprojects/extensions-tool/src/command-create.c:453
|
||||||
msgid "Enter extension information interactively"
|
msgid "Enter extension information interactively"
|
||||||
msgstr "Ввести інформацію про розширення покроково"
|
msgstr "Ввести інформацію про розширення покроково"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:437
|
#: subprojects/extensions-tool/src/command-create.c:461
|
||||||
msgid "Create a new extension"
|
msgid "Create a new extension"
|
||||||
msgstr "Створити розширення"
|
msgstr "Створити розширення"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:455
|
#: subprojects/extensions-tool/src/command-create.c:479
|
||||||
#: subprojects/extensions-tool/src/command-list.c:172
|
#: subprojects/extensions-tool/src/command-list.c:172
|
||||||
msgid "Unknown arguments"
|
msgid "Unknown arguments"
|
||||||
msgstr "Невідомі параметри"
|
msgstr "Невідомі параметри"
|
||||||
|
|
||||||
#: subprojects/extensions-tool/src/command-create.c:480
|
#: subprojects/extensions-tool/src/command-create.c:504
|
||||||
msgid "UUID, name and description are required"
|
msgid "UUID, name and description are required"
|
||||||
msgstr "UUID, назва і опис — обов'язкові"
|
msgstr "UUID, назва і опис — обов'язкові"
|
||||||
|
|
||||||
@ -2942,6 +2939,23 @@ msgstr[3] "%u вхід"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Системні звуки"
|
msgstr "Системні звуки"
|
||||||
|
|
||||||
|
#~ msgid "Frequently used applications will appear here"
|
||||||
|
#~ msgstr "Часто використовувані програми будуть з'являтись тут"
|
||||||
|
|
||||||
|
#~ msgid "Frequent"
|
||||||
|
#~ msgstr "Частовживане"
|
||||||
|
|
||||||
|
#~ msgid "All"
|
||||||
|
#~ msgstr "Усе"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d"
|
||||||
|
#~ msgstr "%A, %-d %B"
|
||||||
|
|
||||||
|
#~ msgctxt "calendar heading"
|
||||||
|
#~ msgid "%A, %B %-d, %Y"
|
||||||
|
#~ msgstr "%A, %-d %B, %Y"
|
||||||
|
|
||||||
#~ msgid "Copy Error"
|
#~ msgid "Copy Error"
|
||||||
#~ msgstr "Скопіювати помилку"
|
#~ msgstr "Скопіювати помилку"
|
||||||
|
|
||||||
|
630
po/zh_CN.po
630
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
@ -695,10 +695,35 @@ app_stop_view (App *app,
|
|||||||
g_signal_handlers_disconnect_by_func (view, on_objects_removed, app);
|
g_signal_handlers_disconnect_by_func (view, on_objects_removed, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
app_notify_has_calendars (App *app)
|
||||||
|
{
|
||||||
|
GVariantBuilder dict_builder;
|
||||||
|
|
||||||
|
g_variant_builder_init (&dict_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||||
|
g_variant_builder_add (&dict_builder, "{sv}", "HasCalendars",
|
||||||
|
g_variant_new_boolean (app_has_calendars (app)));
|
||||||
|
|
||||||
|
g_dbus_connection_emit_signal (app->connection,
|
||||||
|
NULL,
|
||||||
|
"/org/gnome/Shell/CalendarServer",
|
||||||
|
"org.freedesktop.DBus.Properties",
|
||||||
|
"PropertiesChanged",
|
||||||
|
g_variant_new ("(sa{sv}as)",
|
||||||
|
"org.gnome.Shell.CalendarServer",
|
||||||
|
&dict_builder,
|
||||||
|
NULL),
|
||||||
|
NULL);
|
||||||
|
g_variant_builder_clear (&dict_builder);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
app_update_views (App *app)
|
app_update_views (App *app)
|
||||||
{
|
{
|
||||||
GSList *link, *clients;
|
GSList *link, *clients;
|
||||||
|
gboolean had_views, has_views;
|
||||||
|
|
||||||
|
had_views = app->live_views != NULL;
|
||||||
|
|
||||||
for (link = app->live_views; link; link = g_slist_next (link))
|
for (link = app->live_views; link; link = g_slist_next (link))
|
||||||
{
|
{
|
||||||
@ -723,31 +748,14 @@ app_update_views (App *app)
|
|||||||
app->live_views = g_slist_prepend (app->live_views, view);
|
app->live_views = g_slist_prepend (app->live_views, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
has_views = app->live_views != NULL;
|
||||||
|
|
||||||
|
if (has_views != had_views)
|
||||||
|
app_notify_has_calendars (app);
|
||||||
|
|
||||||
g_slist_free_full (clients, g_object_unref);
|
g_slist_free_full (clients, g_object_unref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
app_notify_has_calendars (App *app)
|
|
||||||
{
|
|
||||||
GVariantBuilder dict_builder;
|
|
||||||
|
|
||||||
g_variant_builder_init (&dict_builder, G_VARIANT_TYPE ("a{sv}"));
|
|
||||||
g_variant_builder_add (&dict_builder, "{sv}", "HasCalendars",
|
|
||||||
g_variant_new_boolean (app_has_calendars (app)));
|
|
||||||
|
|
||||||
g_dbus_connection_emit_signal (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
|
|
||||||
NULL,
|
|
||||||
"/org/gnome/Shell/CalendarServer",
|
|
||||||
"org.freedesktop.DBus.Properties",
|
|
||||||
"PropertiesChanged",
|
|
||||||
g_variant_new ("(sa{sv}as)",
|
|
||||||
"org.gnome.Shell.CalendarServer",
|
|
||||||
&dict_builder,
|
|
||||||
NULL),
|
|
||||||
NULL);
|
|
||||||
g_variant_builder_clear (&dict_builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_client_appeared_cb (CalendarSources *sources,
|
on_client_appeared_cb (CalendarSources *sources,
|
||||||
ECalClient *client,
|
ECalClient *client,
|
||||||
|
@ -253,6 +253,8 @@ deep_count_one (DeepCountState *state,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
content_type = g_file_info_get_content_type (info);
|
content_type = g_file_info_get_content_type (info);
|
||||||
|
|
||||||
|
if (content_type)
|
||||||
add_content_type_to_cache (state, content_type);
|
add_content_type_to_cache (state, content_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,7 @@ struct _ShellApp
|
|||||||
* want (e.g. it will be of TYPE_NORMAL from
|
* want (e.g. it will be of TYPE_NORMAL from
|
||||||
* the way shell-window-tracker.c works).
|
* the way shell-window-tracker.c works).
|
||||||
*/
|
*/
|
||||||
|
GIcon *fallback_icon;
|
||||||
|
|
||||||
ShellAppRunningState *running_state;
|
ShellAppRunningState *running_state;
|
||||||
|
|
||||||
@ -180,66 +181,47 @@ window_backed_app_get_window (ShellApp *app)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClutterActor *
|
/**
|
||||||
window_backed_app_get_icon (ShellApp *app,
|
* shell_app_get_icon:
|
||||||
int size)
|
*
|
||||||
|
* Look up the icon for this application
|
||||||
|
*
|
||||||
|
* Return value: (transfer none): A #GIcon
|
||||||
|
*/
|
||||||
|
GIcon *
|
||||||
|
shell_app_get_icon (ShellApp *app)
|
||||||
{
|
{
|
||||||
MetaWindow *window = NULL;
|
MetaWindow *window = NULL;
|
||||||
StWidget *widget;
|
|
||||||
int scale, scaled_size;
|
|
||||||
ShellGlobal *global;
|
|
||||||
StThemeContext *context;
|
|
||||||
|
|
||||||
global = shell_global_get ();
|
g_return_val_if_fail (SHELL_IS_APP (app), NULL);
|
||||||
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
|
|
||||||
g_object_get (context, "scale-factor", &scale, NULL);
|
|
||||||
|
|
||||||
scaled_size = size * scale;
|
if (app->info)
|
||||||
|
return g_app_info_get_icon (G_APP_INFO (app->info));
|
||||||
|
|
||||||
|
if (app->fallback_icon)
|
||||||
|
return app->fallback_icon;
|
||||||
|
|
||||||
/* During a state transition from running to not-running for
|
/* During a state transition from running to not-running for
|
||||||
* window-backend apps, it's possible we get a request for the icon.
|
* window-backend apps, it's possible we get a request for the icon.
|
||||||
* Avoid asserting here and just return an empty image.
|
* Avoid asserting here and just return a fallback icon
|
||||||
*/
|
*/
|
||||||
if (app->running_state != NULL)
|
if (app->running_state != NULL)
|
||||||
window = window_backed_app_get_window (app);
|
window = window_backed_app_get_window (app);
|
||||||
|
|
||||||
if (window == NULL)
|
if (window &&
|
||||||
|
meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_X11)
|
||||||
{
|
{
|
||||||
ClutterActor *actor;
|
app->fallback_icon =
|
||||||
|
|
||||||
actor = clutter_actor_new ();
|
|
||||||
g_object_set (actor,
|
|
||||||
"opacity", 0,
|
|
||||||
"width", (float) scaled_size,
|
|
||||||
"height", (float) scaled_size,
|
|
||||||
NULL);
|
|
||||||
return actor;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_X11)
|
|
||||||
{
|
|
||||||
StWidget *texture_actor;
|
|
||||||
|
|
||||||
texture_actor =
|
|
||||||
st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
|
st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
|
||||||
G_OBJECT (window),
|
G_OBJECT (window),
|
||||||
"icon",
|
"icon");
|
||||||
scaled_size);
|
|
||||||
|
|
||||||
widget = g_object_new (ST_TYPE_BIN,
|
|
||||||
"child", texture_actor,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
widget = g_object_new (ST_TYPE_ICON,
|
app->fallback_icon = g_themed_icon_new ("application-x-executable");
|
||||||
"icon-size", size,
|
|
||||||
"icon-name", "application-x-executable",
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
st_widget_add_style_class_name (widget, "fallback-app-icon");
|
|
||||||
|
|
||||||
return CLUTTER_ACTOR (widget);
|
return app->fallback_icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -257,16 +239,16 @@ shell_app_create_icon_texture (ShellApp *app,
|
|||||||
GIcon *icon;
|
GIcon *icon;
|
||||||
ClutterActor *ret;
|
ClutterActor *ret;
|
||||||
|
|
||||||
if (app->info == NULL)
|
|
||||||
return window_backed_app_get_icon (app, size);
|
|
||||||
|
|
||||||
ret = st_icon_new ();
|
ret = st_icon_new ();
|
||||||
st_icon_set_icon_size (ST_ICON (ret), size);
|
st_icon_set_icon_size (ST_ICON (ret), size);
|
||||||
st_icon_set_fallback_icon_name (ST_ICON (ret), "application-x-executable");
|
st_icon_set_fallback_icon_name (ST_ICON (ret), "application-x-executable");
|
||||||
|
|
||||||
icon = g_app_info_get_icon (G_APP_INFO (app->info));
|
icon = shell_app_get_icon (app);
|
||||||
st_icon_set_gicon (ST_ICON (ret), icon);
|
st_icon_set_gicon (ST_ICON (ret), icon);
|
||||||
|
|
||||||
|
if (shell_app_is_window_backed (app))
|
||||||
|
st_widget_add_style_class_name (ST_WIDGET (ret), "fallback-app-icon");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1576,6 +1558,7 @@ shell_app_dispose (GObject *object)
|
|||||||
ShellApp *app = SHELL_APP (object);
|
ShellApp *app = SHELL_APP (object);
|
||||||
|
|
||||||
g_clear_object (&app->info);
|
g_clear_object (&app->info);
|
||||||
|
g_clear_object (&app->fallback_icon);
|
||||||
|
|
||||||
while (app->running_state)
|
while (app->running_state)
|
||||||
_shell_app_remove_window (app, app->running_state->windows->data);
|
_shell_app_remove_window (app, app->running_state->windows->data);
|
||||||
|
@ -29,6 +29,7 @@ const char *shell_app_get_id (ShellApp *app);
|
|||||||
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
|
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
|
||||||
|
|
||||||
ClutterActor *shell_app_create_icon_texture (ShellApp *app, int size);
|
ClutterActor *shell_app_create_icon_texture (ShellApp *app, int size);
|
||||||
|
GIcon *shell_app_get_icon (ShellApp *app);
|
||||||
const char *shell_app_get_name (ShellApp *app);
|
const char *shell_app_get_name (ShellApp *app);
|
||||||
const char *shell_app_get_description (ShellApp *app);
|
const char *shell_app_get_description (ShellApp *app);
|
||||||
gboolean shell_app_is_window_backed (ShellApp *app);
|
gboolean shell_app_is_window_backed (ShellApp *app);
|
||||||
|
@ -900,6 +900,7 @@ load_gl_symbol (const char *name,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
global_stage_after_paint (ClutterStage *stage,
|
global_stage_after_paint (ClutterStage *stage,
|
||||||
|
ClutterStageView *stage_view,
|
||||||
ShellGlobal *global)
|
ShellGlobal *global)
|
||||||
{
|
{
|
||||||
/* At this point, we've finished all layout and painting, but haven't
|
/* At this point, we've finished all layout and painting, but haven't
|
||||||
|
@ -508,9 +508,7 @@ recorder_update_size (ShellRecorder *recorder)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
recorder_on_stage_notify_size (GObject *object,
|
recorder_on_stage_notify_size (ShellRecorder *recorder)
|
||||||
GParamSpec *pspec,
|
|
||||||
ShellRecorder *recorder)
|
|
||||||
{
|
{
|
||||||
recorder_update_size (recorder);
|
recorder_update_size (recorder);
|
||||||
|
|
||||||
@ -614,12 +612,15 @@ recorder_connect_stage_callbacks (ShellRecorder *recorder)
|
|||||||
G_CALLBACK (recorder_on_stage_destroy), recorder);
|
G_CALLBACK (recorder_on_stage_destroy), recorder);
|
||||||
g_signal_connect_after (recorder->stage, "paint",
|
g_signal_connect_after (recorder->stage, "paint",
|
||||||
G_CALLBACK (recorder_on_stage_paint), recorder);
|
G_CALLBACK (recorder_on_stage_paint), recorder);
|
||||||
g_signal_connect (recorder->stage, "notify::width",
|
g_signal_connect_swapped (recorder->stage, "notify::width",
|
||||||
G_CALLBACK (recorder_on_stage_notify_size), recorder);
|
G_CALLBACK (recorder_on_stage_notify_size),
|
||||||
g_signal_connect (recorder->stage, "notify::height",
|
recorder);
|
||||||
G_CALLBACK (recorder_on_stage_notify_size), recorder);
|
g_signal_connect_swapped (recorder->stage, "notify::height",
|
||||||
g_signal_connect (recorder->stage, "notify::resource-scale",
|
G_CALLBACK (recorder_on_stage_notify_size),
|
||||||
G_CALLBACK (recorder_on_stage_notify_size), recorder);
|
recorder);
|
||||||
|
g_signal_connect_swapped (recorder->stage, "resource-scale-changed",
|
||||||
|
G_CALLBACK (recorder_on_stage_notify_size),
|
||||||
|
recorder);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -393,8 +393,7 @@ grab_window_screenshot (ClutterActor *stage,
|
|||||||
if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_WAYLAND)
|
if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_WAYLAND)
|
||||||
{
|
{
|
||||||
float resource_scale;
|
float resource_scale;
|
||||||
if (!clutter_actor_get_resource_scale (window_actor, &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (window_actor);
|
||||||
resource_scale = 1.0f;
|
|
||||||
|
|
||||||
cairo_surface_set_device_scale (priv->image, resource_scale, resource_scale);
|
cairo_surface_set_device_scale (priv->image, resource_scale, resource_scale);
|
||||||
}
|
}
|
||||||
|
@ -119,6 +119,16 @@ shell_window_tracker_class_init (ShellWindowTrackerClass *klass)
|
|||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
check_app_id_prefix (ShellApp *app,
|
||||||
|
const char *prefix)
|
||||||
|
{
|
||||||
|
if (prefix == NULL)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return g_str_has_prefix (shell_app_get_id (app), prefix);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get_app_from_window_wmclass:
|
* get_app_from_window_wmclass:
|
||||||
*
|
*
|
||||||
@ -135,8 +145,10 @@ get_app_from_window_wmclass (MetaWindow *window)
|
|||||||
ShellAppSystem *appsys;
|
ShellAppSystem *appsys;
|
||||||
const char *wm_class;
|
const char *wm_class;
|
||||||
const char *wm_instance;
|
const char *wm_instance;
|
||||||
|
const char *sandbox_id;
|
||||||
|
|
||||||
appsys = shell_app_system_get_default ();
|
appsys = shell_app_system_get_default ();
|
||||||
|
sandbox_id = meta_window_get_sandboxed_app_id (window);
|
||||||
|
|
||||||
/* Notes on the heuristics used here:
|
/* Notes on the heuristics used here:
|
||||||
much of the complexity here comes from the desire to support
|
much of the complexity here comes from the desire to support
|
||||||
@ -176,23 +188,23 @@ get_app_from_window_wmclass (MetaWindow *window)
|
|||||||
/* first try a match from WM_CLASS (instance part) to StartupWMClass */
|
/* first try a match from WM_CLASS (instance part) to StartupWMClass */
|
||||||
wm_instance = meta_window_get_wm_class_instance (window);
|
wm_instance = meta_window_get_wm_class_instance (window);
|
||||||
app = shell_app_system_lookup_startup_wmclass (appsys, wm_instance);
|
app = shell_app_system_lookup_startup_wmclass (appsys, wm_instance);
|
||||||
if (app != NULL)
|
if (app != NULL && check_app_id_prefix (app, sandbox_id))
|
||||||
return g_object_ref (app);
|
return g_object_ref (app);
|
||||||
|
|
||||||
/* then try a match from WM_CLASS to StartupWMClass */
|
/* then try a match from WM_CLASS to StartupWMClass */
|
||||||
wm_class = meta_window_get_wm_class (window);
|
wm_class = meta_window_get_wm_class (window);
|
||||||
app = shell_app_system_lookup_startup_wmclass (appsys, wm_class);
|
app = shell_app_system_lookup_startup_wmclass (appsys, wm_class);
|
||||||
if (app != NULL)
|
if (app != NULL && check_app_id_prefix (app, sandbox_id))
|
||||||
return g_object_ref (app);
|
return g_object_ref (app);
|
||||||
|
|
||||||
/* then try a match from WM_CLASS (instance part) to .desktop */
|
/* then try a match from WM_CLASS (instance part) to .desktop */
|
||||||
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_instance);
|
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_instance);
|
||||||
if (app != NULL)
|
if (app != NULL && check_app_id_prefix (app, sandbox_id))
|
||||||
return g_object_ref (app);
|
return g_object_ref (app);
|
||||||
|
|
||||||
/* finally, try a match from WM_CLASS to .desktop */
|
/* finally, try a match from WM_CLASS to .desktop */
|
||||||
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_class);
|
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_class);
|
||||||
if (app != NULL)
|
if (app != NULL && check_app_id_prefix (app, sandbox_id))
|
||||||
return g_object_ref (app);
|
return g_object_ref (app);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -214,7 +226,7 @@ get_app_from_id (MetaWindow *window,
|
|||||||
{
|
{
|
||||||
ShellApp *app;
|
ShellApp *app;
|
||||||
ShellAppSystem *appsys;
|
ShellAppSystem *appsys;
|
||||||
char *desktop_file;
|
g_autofree char *desktop_file = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (id != NULL, NULL);
|
g_return_val_if_fail (id != NULL, NULL);
|
||||||
|
|
||||||
@ -223,10 +235,9 @@ get_app_from_id (MetaWindow *window,
|
|||||||
desktop_file = g_strconcat (id, ".desktop", NULL);
|
desktop_file = g_strconcat (id, ".desktop", NULL);
|
||||||
app = shell_app_system_lookup_app (appsys, desktop_file);
|
app = shell_app_system_lookup_app (appsys, desktop_file);
|
||||||
if (app)
|
if (app)
|
||||||
g_object_ref (app);
|
return g_object_ref (app);
|
||||||
|
|
||||||
g_free (desktop_file);
|
return NULL;
|
||||||
return app;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -391,6 +402,13 @@ get_app_for_window (ShellWindowTracker *tracker,
|
|||||||
if (meta_window_is_remote (window))
|
if (meta_window_is_remote (window))
|
||||||
return _shell_app_new_for_window (window);
|
return _shell_app_new_for_window (window);
|
||||||
|
|
||||||
|
/* Check if the app's WM_CLASS specifies an app; this is
|
||||||
|
* canonical if it does.
|
||||||
|
*/
|
||||||
|
result = get_app_from_window_wmclass (window);
|
||||||
|
if (result != NULL)
|
||||||
|
return result;
|
||||||
|
|
||||||
/* Check if the window was opened from within a sandbox; if this
|
/* Check if the window was opened from within a sandbox; if this
|
||||||
* is the case, a corresponding .desktop file is guaranteed to match;
|
* is the case, a corresponding .desktop file is guaranteed to match;
|
||||||
*/
|
*/
|
||||||
@ -405,13 +423,6 @@ get_app_for_window (ShellWindowTracker *tracker,
|
|||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
/* Check if the app's WM_CLASS specifies an app; this is
|
|
||||||
* canonical if it does.
|
|
||||||
*/
|
|
||||||
result = get_app_from_window_wmclass (window);
|
|
||||||
if (result != NULL)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result = get_app_from_window_pid (tracker, window);
|
result = get_app_from_window_pid (tracker, window);
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
return result;
|
return result;
|
||||||
|
@ -41,6 +41,8 @@ typedef struct _StAdjustmentPrivate StAdjustmentPrivate;
|
|||||||
|
|
||||||
struct _StAdjustmentPrivate
|
struct _StAdjustmentPrivate
|
||||||
{
|
{
|
||||||
|
ClutterActor *actor;
|
||||||
|
|
||||||
/* Do not sanity-check values while constructing,
|
/* Do not sanity-check values while constructing,
|
||||||
* not all properties may be set yet. */
|
* not all properties may be set yet. */
|
||||||
guint is_constructing : 1;
|
guint is_constructing : 1;
|
||||||
@ -66,6 +68,7 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
|
||||||
|
PROP_ACTOR,
|
||||||
PROP_LOWER,
|
PROP_LOWER,
|
||||||
PROP_UPPER,
|
PROP_UPPER,
|
||||||
PROP_VALUE,
|
PROP_VALUE,
|
||||||
@ -106,9 +109,21 @@ static gboolean st_adjustment_set_page_increment (StAdjustment *adjustment,
|
|||||||
static gboolean st_adjustment_set_page_size (StAdjustment *adjustment,
|
static gboolean st_adjustment_set_page_size (StAdjustment *adjustment,
|
||||||
gdouble size);
|
gdouble size);
|
||||||
|
|
||||||
|
static ClutterActor *
|
||||||
|
st_adjustment_get_actor (ClutterAnimatable *animatable)
|
||||||
|
{
|
||||||
|
StAdjustment *adjustment = ST_ADJUSTMENT (animatable);
|
||||||
|
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adjustment);
|
||||||
|
|
||||||
|
g_warn_if_fail (priv->actor);
|
||||||
|
|
||||||
|
return priv->actor;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
animatable_iface_init (ClutterAnimatableInterface *iface)
|
animatable_iface_init (ClutterAnimatableInterface *iface)
|
||||||
{
|
{
|
||||||
|
iface->get_actor = st_adjustment_get_actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -141,6 +156,10 @@ st_adjustment_get_property (GObject *gobject,
|
|||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
|
case PROP_ACTOR:
|
||||||
|
g_value_set_object (value, priv->actor);
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_LOWER:
|
case PROP_LOWER:
|
||||||
g_value_set_double (value, priv->lower);
|
g_value_set_double (value, priv->lower);
|
||||||
break;
|
break;
|
||||||
@ -171,6 +190,18 @@ st_adjustment_get_property (GObject *gobject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
actor_destroyed (gpointer user_data,
|
||||||
|
GObject *where_the_object_was)
|
||||||
|
{
|
||||||
|
StAdjustment *adj = ST_ADJUSTMENT (user_data);
|
||||||
|
StAdjustmentPrivate *priv = st_adjustment_get_instance_private (adj);
|
||||||
|
|
||||||
|
priv->actor = NULL;
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (adj), props[PROP_ACTOR]);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_adjustment_set_property (GObject *gobject,
|
st_adjustment_set_property (GObject *gobject,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -178,9 +209,20 @@ st_adjustment_set_property (GObject *gobject,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
StAdjustment *adj = ST_ADJUSTMENT (gobject);
|
StAdjustment *adj = ST_ADJUSTMENT (gobject);
|
||||||
|
StAdjustmentPrivate *priv;
|
||||||
|
|
||||||
|
priv = st_adjustment_get_instance_private (ST_ADJUSTMENT (gobject));
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
|
case PROP_ACTOR:
|
||||||
|
if (priv->actor)
|
||||||
|
g_object_weak_unref (G_OBJECT (priv->actor), actor_destroyed, adj);
|
||||||
|
priv->actor = g_value_get_object (value);
|
||||||
|
if (priv->actor)
|
||||||
|
g_object_weak_ref (G_OBJECT (priv->actor), actor_destroyed, adj);
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_LOWER:
|
case PROP_LOWER:
|
||||||
st_adjustment_set_lower (adj, g_value_get_double (value));
|
st_adjustment_set_lower (adj, g_value_get_double (value));
|
||||||
break;
|
break;
|
||||||
@ -217,6 +259,11 @@ st_adjustment_dispose (GObject *object)
|
|||||||
StAdjustmentPrivate *priv;
|
StAdjustmentPrivate *priv;
|
||||||
|
|
||||||
priv = st_adjustment_get_instance_private (ST_ADJUSTMENT (object));
|
priv = st_adjustment_get_instance_private (ST_ADJUSTMENT (object));
|
||||||
|
if (priv->actor)
|
||||||
|
{
|
||||||
|
g_object_weak_unref (G_OBJECT (priv->actor), actor_destroyed, object);
|
||||||
|
priv->actor = NULL;
|
||||||
|
}
|
||||||
g_clear_pointer (&priv->transitions, g_hash_table_unref);
|
g_clear_pointer (&priv->transitions, g_hash_table_unref);
|
||||||
|
|
||||||
G_OBJECT_CLASS (st_adjustment_parent_class)->dispose (object);
|
G_OBJECT_CLASS (st_adjustment_parent_class)->dispose (object);
|
||||||
@ -232,6 +279,11 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
object_class->set_property = st_adjustment_set_property;
|
object_class->set_property = st_adjustment_set_property;
|
||||||
object_class->dispose = st_adjustment_dispose;
|
object_class->dispose = st_adjustment_dispose;
|
||||||
|
|
||||||
|
props[PROP_ACTOR] =
|
||||||
|
g_param_spec_object ("actor", "Actor", "Actor",
|
||||||
|
CLUTTER_TYPE_ACTOR,
|
||||||
|
ST_PARAM_READWRITE);
|
||||||
|
|
||||||
props[PROP_LOWER] =
|
props[PROP_LOWER] =
|
||||||
g_param_spec_double ("lower", "Lower", "Lower bound",
|
g_param_spec_double ("lower", "Lower", "Lower bound",
|
||||||
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
|
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
|
||||||
@ -299,7 +351,8 @@ st_adjustment_init (StAdjustment *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
StAdjustment *
|
StAdjustment *
|
||||||
st_adjustment_new (gdouble value,
|
st_adjustment_new (ClutterActor *actor,
|
||||||
|
gdouble value,
|
||||||
gdouble lower,
|
gdouble lower,
|
||||||
gdouble upper,
|
gdouble upper,
|
||||||
gdouble step_increment,
|
gdouble step_increment,
|
||||||
@ -307,6 +360,7 @@ st_adjustment_new (gdouble value,
|
|||||||
gdouble page_size)
|
gdouble page_size)
|
||||||
{
|
{
|
||||||
return g_object_new (ST_TYPE_ADJUSTMENT,
|
return g_object_new (ST_TYPE_ADJUSTMENT,
|
||||||
|
"actor", actor,
|
||||||
"value", value,
|
"value", value,
|
||||||
"lower", lower,
|
"lower", lower,
|
||||||
"upper", upper,
|
"upper", upper,
|
||||||
|
@ -48,7 +48,8 @@ struct _StAdjustmentClass
|
|||||||
void (* changed) (StAdjustment *adjustment);
|
void (* changed) (StAdjustment *adjustment);
|
||||||
};
|
};
|
||||||
|
|
||||||
StAdjustment *st_adjustment_new (gdouble value,
|
StAdjustment *st_adjustment_new (ClutterActor *actor,
|
||||||
|
gdouble value,
|
||||||
gdouble lower,
|
gdouble lower,
|
||||||
gdouble upper,
|
gdouble upper,
|
||||||
gdouble step_increment,
|
gdouble step_increment,
|
||||||
|
@ -40,7 +40,7 @@ typedef struct _TransferData TransferData;
|
|||||||
struct _TransferData
|
struct _TransferData
|
||||||
{
|
{
|
||||||
StClipboard *clipboard;
|
StClipboard *clipboard;
|
||||||
StClipboardCallbackFunc callback;
|
GCallback callback;
|
||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
GOutputStream *stream;
|
GOutputStream *stream;
|
||||||
};
|
};
|
||||||
@ -140,12 +140,29 @@ transfer_cb (MetaSelection *selection,
|
|||||||
memcpy (text, g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (data->stream)), data_size);
|
memcpy (text, g_memory_output_stream_get_data (G_MEMORY_OUTPUT_STREAM (data->stream)), data_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
data->callback (data->clipboard, text, data->user_data);
|
((StClipboardCallbackFunc) data->callback) (data->clipboard, text,
|
||||||
|
data->user_data);
|
||||||
g_object_unref (data->stream);
|
g_object_unref (data->stream);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transfer_bytes_cb (MetaSelection *selection,
|
||||||
|
GAsyncResult *res,
|
||||||
|
TransferData *data)
|
||||||
|
{
|
||||||
|
GBytes *bytes = NULL;
|
||||||
|
|
||||||
|
if (meta_selection_transfer_finish (selection, res, NULL))
|
||||||
|
bytes = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (data->stream));
|
||||||
|
|
||||||
|
((StClipboardContentCallbackFunc) data->callback) (data->clipboard, bytes,
|
||||||
|
data->user_data);
|
||||||
|
g_object_unref (data->stream);
|
||||||
|
g_clear_pointer (&bytes, g_bytes_unref);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_clipboard_get_mimetypes:
|
* st_clipboard_get_mimetypes:
|
||||||
* @clipboard: a #StClipboard
|
* @clipboard: a #StClipboard
|
||||||
@ -205,7 +222,7 @@ st_clipboard_get_text (StClipboard *clipboard,
|
|||||||
|
|
||||||
data = g_new0 (TransferData, 1);
|
data = g_new0 (TransferData, 1);
|
||||||
data->clipboard = clipboard;
|
data->clipboard = clipboard;
|
||||||
data->callback = callback;
|
data->callback = G_CALLBACK (callback);
|
||||||
data->user_data = user_data;
|
data->user_data = user_data;
|
||||||
data->stream = g_memory_output_stream_new_resizable ();
|
data->stream = g_memory_output_stream_new_resizable ();
|
||||||
|
|
||||||
@ -217,6 +234,52 @@ st_clipboard_get_text (StClipboard *clipboard,
|
|||||||
data);
|
data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_clipboard_get_content:
|
||||||
|
* @clipboard: A #StCliboard
|
||||||
|
* @type: The type of clipboard data you want
|
||||||
|
* @mimetype: The mimetype to get content for
|
||||||
|
* @callback: (scope async): function to be called when the type is retrieved
|
||||||
|
* @user_data: data to be passed to the callback
|
||||||
|
*
|
||||||
|
* Request the data from the clipboard in #GBytes form. @callback is executed
|
||||||
|
* when the data is retrieved.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
st_clipboard_get_content (StClipboard *clipboard,
|
||||||
|
StClipboardType type,
|
||||||
|
const gchar *mimetype,
|
||||||
|
StClipboardContentCallbackFunc callback,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
MetaSelectionType selection_type;
|
||||||
|
TransferData *data;
|
||||||
|
|
||||||
|
g_return_if_fail (ST_IS_CLIPBOARD (clipboard));
|
||||||
|
g_return_if_fail (meta_selection != NULL);
|
||||||
|
g_return_if_fail (callback != NULL);
|
||||||
|
|
||||||
|
if (!mimetype || !convert_type (type, &selection_type))
|
||||||
|
{
|
||||||
|
callback (clipboard, NULL, user_data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = g_new0 (TransferData, 1);
|
||||||
|
data->clipboard = clipboard;
|
||||||
|
data->callback = G_CALLBACK (callback);
|
||||||
|
data->user_data = user_data;
|
||||||
|
data->stream = g_memory_output_stream_new_resizable ();
|
||||||
|
|
||||||
|
meta_selection_transfer_async (meta_selection,
|
||||||
|
selection_type,
|
||||||
|
mimetype, -1,
|
||||||
|
data->stream, NULL,
|
||||||
|
(GAsyncReadyCallback) transfer_bytes_cb,
|
||||||
|
data);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_clipboard_set_content:
|
* st_clipboard_set_content:
|
||||||
* @clipboard: A #StClipboard
|
* @clipboard: A #StClipboard
|
||||||
|
@ -63,6 +63,18 @@ typedef void (*StClipboardCallbackFunc) (StClipboard *clipboard,
|
|||||||
const gchar *text,
|
const gchar *text,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StClipboardContentCallbackFunc:
|
||||||
|
* @clipboard: A #StClipboard
|
||||||
|
* @bytes: content from the clipboard
|
||||||
|
* @user_data: user data
|
||||||
|
*
|
||||||
|
* Callback function called when content is retrieved from the clipboard.
|
||||||
|
*/
|
||||||
|
typedef void (*StClipboardContentCallbackFunc) (StClipboard *clipboard,
|
||||||
|
GBytes *bytes,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
StClipboard* st_clipboard_get_default (void);
|
StClipboard* st_clipboard_get_default (void);
|
||||||
|
|
||||||
GList * st_clipboard_get_mimetypes (StClipboard *clipboard,
|
GList * st_clipboard_get_mimetypes (StClipboard *clipboard,
|
||||||
@ -80,6 +92,11 @@ void st_clipboard_set_content (StClipboard *clipboard,
|
|||||||
StClipboardType type,
|
StClipboardType type,
|
||||||
const gchar *mimetype,
|
const gchar *mimetype,
|
||||||
GBytes *bytes);
|
GBytes *bytes);
|
||||||
|
void st_clipboard_get_content (StClipboard *clipboard,
|
||||||
|
StClipboardType type,
|
||||||
|
const gchar *mimetype,
|
||||||
|
StClipboardContentCallbackFunc callback,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
void st_clipboard_set_selection (MetaSelection *selection);
|
void st_clipboard_set_selection (MetaSelection *selection);
|
||||||
|
|
||||||
|
@ -85,12 +85,7 @@ st_drawing_area_allocate (ClutterActor *self,
|
|||||||
int width, height;
|
int width, height;
|
||||||
float resource_scale;
|
float resource_scale;
|
||||||
|
|
||||||
if (!st_widget_get_resource_scale (ST_WIDGET (self), &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (self);
|
||||||
{
|
|
||||||
ClutterActorBox empty = CLUTTER_ACTOR_BOX_INIT_ZERO;
|
|
||||||
clutter_actor_set_allocation (self, &empty);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_actor_set_allocation (self, box);
|
clutter_actor_set_allocation (self, box);
|
||||||
st_theme_node_get_content_box (theme_node, box, &content_box);
|
st_theme_node_get_content_box (theme_node, box, &content_box);
|
||||||
@ -111,13 +106,16 @@ st_drawing_area_style_changed (StWidget *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_drawing_area_resource_scale_changed (StWidget *self)
|
st_drawing_area_resource_scale_changed (ClutterActor *self)
|
||||||
{
|
{
|
||||||
float resource_scale;
|
float resource_scale;
|
||||||
ClutterContent *content = clutter_actor_get_content (CLUTTER_ACTOR (self));
|
ClutterContent *content = clutter_actor_get_content (self);
|
||||||
|
|
||||||
if (st_widget_get_resource_scale (ST_WIDGET (self), &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (self);
|
||||||
clutter_canvas_set_scale_factor (CLUTTER_CANVAS (content), resource_scale);
|
clutter_canvas_set_scale_factor (CLUTTER_CANVAS (content), resource_scale);
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_CLASS (st_drawing_area_parent_class)->resource_scale_changed)
|
||||||
|
CLUTTER_ACTOR_CLASS (st_drawing_area_parent_class)->resource_scale_changed (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -128,7 +126,7 @@ st_drawing_area_class_init (StDrawingAreaClass *klass)
|
|||||||
|
|
||||||
actor_class->allocate = st_drawing_area_allocate;
|
actor_class->allocate = st_drawing_area_allocate;
|
||||||
widget_class->style_changed = st_drawing_area_style_changed;
|
widget_class->style_changed = st_drawing_area_style_changed;
|
||||||
widget_class->resource_scale_changed = st_drawing_area_resource_scale_changed;
|
actor_class->resource_scale_changed = st_drawing_area_resource_scale_changed;
|
||||||
|
|
||||||
st_drawing_area_signals[REPAINT] =
|
st_drawing_area_signals[REPAINT] =
|
||||||
g_signal_new ("repaint",
|
g_signal_new ("repaint",
|
||||||
@ -215,15 +213,10 @@ st_drawing_area_get_surface_size (StDrawingArea *area,
|
|||||||
content = clutter_actor_get_content (CLUTTER_ACTOR (area));
|
content = clutter_actor_get_content (CLUTTER_ACTOR (area));
|
||||||
clutter_content_get_preferred_size (content, &w, &h);
|
clutter_content_get_preferred_size (content, &w, &h);
|
||||||
|
|
||||||
if (st_widget_get_resource_scale (ST_WIDGET (area), &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (area));
|
||||||
{
|
|
||||||
w /= resource_scale;
|
w /= resource_scale;
|
||||||
h /= resource_scale;
|
h /= resource_scale;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
w = h = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width)
|
if (width)
|
||||||
*width = ceilf (w);
|
*width = ceilf (w);
|
||||||
|
@ -678,6 +678,8 @@ st_entry_key_press_event (ClutterActor *actor,
|
|||||||
ST_CLIPBOARD_TYPE_CLIPBOARD,
|
ST_CLIPBOARD_TYPE_CLIPBOARD,
|
||||||
text);
|
text);
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -704,6 +706,8 @@ st_entry_key_press_event (ClutterActor *actor,
|
|||||||
clutter_text_delete_selection ((ClutterText *) priv->entry);
|
clutter_text_delete_selection ((ClutterText *) priv->entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_free (text);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,9 +231,12 @@ st_icon_style_changed (StWidget *widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_icon_resource_scale_changed (StWidget *widget)
|
st_icon_resource_scale_changed (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
st_icon_update (ST_ICON (widget));
|
st_icon_update (ST_ICON (actor));
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_CLASS (st_icon_parent_class)->resource_scale_changed)
|
||||||
|
CLUTTER_ACTOR_CLASS (st_icon_parent_class)->resource_scale_changed (actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -250,7 +253,7 @@ st_icon_class_init (StIconClass *klass)
|
|||||||
actor_class->paint = st_icon_paint;
|
actor_class->paint = st_icon_paint;
|
||||||
|
|
||||||
widget_class->style_changed = st_icon_style_changed;
|
widget_class->style_changed = st_icon_style_changed;
|
||||||
widget_class->resource_scale_changed = st_icon_resource_scale_changed;
|
actor_class->resource_scale_changed = st_icon_resource_scale_changed;
|
||||||
|
|
||||||
props[PROP_GICON] =
|
props[PROP_GICON] =
|
||||||
g_param_spec_object ("gicon",
|
g_param_spec_object ("gicon",
|
||||||
@ -425,8 +428,7 @@ st_icon_update (StIcon *icon)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!st_widget_get_resource_scale (ST_WIDGET (icon), &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (icon));
|
||||||
return;
|
|
||||||
|
|
||||||
theme_node = st_widget_peek_theme_node (ST_WIDGET (icon));
|
theme_node = st_widget_peek_theme_node (ST_WIDGET (icon));
|
||||||
if (theme_node == NULL)
|
if (theme_node == NULL)
|
||||||
|
@ -42,11 +42,17 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void clutter_content_interface_init (ClutterContentInterface *iface);
|
static void clutter_content_interface_init (ClutterContentInterface *iface);
|
||||||
|
static void g_icon_interface_init (GIconIface *iface);
|
||||||
|
static void g_loadable_icon_interface_init (GLoadableIconIface *iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (StImageContent, st_image_content, CLUTTER_TYPE_IMAGE,
|
G_DEFINE_TYPE_WITH_CODE (StImageContent, st_image_content, CLUTTER_TYPE_IMAGE,
|
||||||
G_ADD_PRIVATE (StImageContent)
|
G_ADD_PRIVATE (StImageContent)
|
||||||
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
|
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTENT,
|
||||||
clutter_content_interface_init))
|
clutter_content_interface_init)
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_ICON,
|
||||||
|
g_icon_interface_init)
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_LOADABLE_ICON,
|
||||||
|
g_loadable_icon_interface_init))
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_image_content_init (StImageContent *self)
|
st_image_content_init (StImageContent *self)
|
||||||
@ -165,12 +171,157 @@ st_image_content_get_preferred_size (ClutterContent *content,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkPixbuf*
|
||||||
|
pixbuf_from_image (StImageContent *image)
|
||||||
|
{
|
||||||
|
CoglTexture *texture;
|
||||||
|
int width, height, rowstride;
|
||||||
|
uint8_t *data;
|
||||||
|
|
||||||
|
texture = clutter_image_get_texture (CLUTTER_IMAGE (image));
|
||||||
|
if (!texture || !cogl_texture_is_get_data_supported (texture))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
width = cogl_texture_get_width (texture);
|
||||||
|
height = cogl_texture_get_width (texture);
|
||||||
|
rowstride = 4 * width;
|
||||||
|
data = g_new (uint8_t, rowstride * height);
|
||||||
|
|
||||||
|
cogl_texture_get_data (texture, COGL_PIXEL_FORMAT_RGBA_8888, rowstride, data);
|
||||||
|
|
||||||
|
return gdk_pixbuf_new_from_data ((const guchar *)data,
|
||||||
|
GDK_COLORSPACE_RGB,
|
||||||
|
TRUE, 8, width, height, rowstride,
|
||||||
|
(GdkPixbufDestroyNotify)g_free, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_content_interface_init (ClutterContentInterface *iface)
|
clutter_content_interface_init (ClutterContentInterface *iface)
|
||||||
{
|
{
|
||||||
iface->get_preferred_size = st_image_content_get_preferred_size;
|
iface->get_preferred_size = st_image_content_get_preferred_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static guint
|
||||||
|
st_image_content_hash (GIcon *icon)
|
||||||
|
{
|
||||||
|
return g_direct_hash (icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
st_image_content_equal (GIcon *icon1,
|
||||||
|
GIcon *icon2)
|
||||||
|
{
|
||||||
|
return g_direct_equal (icon1, icon2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GVariant *
|
||||||
|
st_image_content_serialize (GIcon *icon)
|
||||||
|
{
|
||||||
|
g_autoptr (GdkPixbuf) pixbuf = NULL;
|
||||||
|
|
||||||
|
pixbuf = pixbuf_from_image (ST_IMAGE_CONTENT (icon));
|
||||||
|
if (!pixbuf)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return g_icon_serialize (G_ICON (pixbuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
g_icon_interface_init (GIconIface *iface)
|
||||||
|
{
|
||||||
|
iface->hash = st_image_content_hash;
|
||||||
|
iface->equal = st_image_content_equal;
|
||||||
|
iface->serialize = st_image_content_serialize;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GInputStream *
|
||||||
|
st_image_load (GLoadableIcon *icon,
|
||||||
|
int size,
|
||||||
|
char **type,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_autoptr (GdkPixbuf) pixbuf = NULL;
|
||||||
|
|
||||||
|
pixbuf = pixbuf_from_image (ST_IMAGE_CONTENT (icon));
|
||||||
|
if (!pixbuf)
|
||||||
|
{
|
||||||
|
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"Failed to read texture");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_loadable_icon_load (G_LOADABLE_ICON (pixbuf),
|
||||||
|
size, type, cancellable, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
load_image_thread (GTask *task,
|
||||||
|
gpointer object,
|
||||||
|
gpointer task_data,
|
||||||
|
GCancellable *cancellable)
|
||||||
|
{
|
||||||
|
GInputStream *stream;
|
||||||
|
GError *error = NULL;
|
||||||
|
char *type;
|
||||||
|
|
||||||
|
stream = st_image_load (G_LOADABLE_ICON (object),
|
||||||
|
GPOINTER_TO_INT (task_data),
|
||||||
|
&type,
|
||||||
|
cancellable,
|
||||||
|
&error);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
g_task_return_error (task, error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_task_set_task_data (task, type, g_free);
|
||||||
|
g_task_return_pointer (task, stream, g_object_unref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_image_load_async (GLoadableIcon *icon,
|
||||||
|
int size,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GAsyncReadyCallback callback,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_autoptr (GTask) task = NULL;
|
||||||
|
|
||||||
|
task = g_task_new (icon, cancellable, callback, user_data);
|
||||||
|
g_task_set_task_data (task, GINT_TO_POINTER (size), NULL);
|
||||||
|
g_task_run_in_thread (task, load_image_thread);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GInputStream *
|
||||||
|
st_image_load_finish (GLoadableIcon *icon,
|
||||||
|
GAsyncResult *res,
|
||||||
|
char **type,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
GInputStream *stream;
|
||||||
|
|
||||||
|
stream = g_task_propagate_pointer (G_TASK (res), error);
|
||||||
|
if (!stream)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
*type = g_strdup (g_task_get_task_data (G_TASK (res)));
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
g_loadable_icon_interface_init (GLoadableIconIface *iface)
|
||||||
|
{
|
||||||
|
iface->load = st_image_load;
|
||||||
|
iface->load_async = st_image_load_async;
|
||||||
|
iface->load_finish = st_image_load_finish;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_image_content_new_with_preferred_size:
|
* st_image_content_new_with_preferred_size:
|
||||||
* @width: The preferred width to be used when drawing the content
|
* @width: The preferred width to be used when drawing the content
|
||||||
|
@ -200,17 +200,16 @@ st_label_paint (ClutterActor *actor,
|
|||||||
st_widget_paint_background (ST_WIDGET (actor), paint_context);
|
st_widget_paint_background (ST_WIDGET (actor), paint_context);
|
||||||
|
|
||||||
if (shadow_spec)
|
if (shadow_spec)
|
||||||
{
|
|
||||||
float resource_scale;
|
|
||||||
|
|
||||||
if (clutter_actor_get_resource_scale (priv->label, &resource_scale))
|
|
||||||
{
|
{
|
||||||
ClutterActorBox allocation;
|
ClutterActorBox allocation;
|
||||||
float width, height;
|
float width, height;
|
||||||
|
float resource_scale;
|
||||||
|
|
||||||
clutter_actor_get_allocation_box (priv->label, &allocation);
|
clutter_actor_get_allocation_box (priv->label, &allocation);
|
||||||
clutter_actor_box_get_size (&allocation, &width, &height);
|
clutter_actor_box_get_size (&allocation, &width, &height);
|
||||||
|
|
||||||
|
resource_scale = clutter_actor_get_resource_scale (priv->label);
|
||||||
|
|
||||||
width *= resource_scale;
|
width *= resource_scale;
|
||||||
height *= resource_scale;
|
height *= resource_scale;
|
||||||
|
|
||||||
@ -240,17 +239,19 @@ st_label_paint (ClutterActor *actor,
|
|||||||
clutter_actor_get_paint_opacity (priv->label));
|
clutter_actor_get_paint_opacity (priv->label));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
clutter_actor_paint (priv->label, paint_context);
|
clutter_actor_paint (priv->label, paint_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_label_resource_scale_changed (StWidget *widget)
|
st_label_resource_scale_changed (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
StLabelPrivate *priv = ST_LABEL (widget)->priv;
|
StLabelPrivate *priv = ST_LABEL (actor)->priv;
|
||||||
|
|
||||||
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
|
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_CLASS (st_label_parent_class)->resource_scale_changed)
|
||||||
|
CLUTTER_ACTOR_CLASS (st_label_parent_class)->resource_scale_changed (actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -268,9 +269,9 @@ st_label_class_init (StLabelClass *klass)
|
|||||||
actor_class->allocate = st_label_allocate;
|
actor_class->allocate = st_label_allocate;
|
||||||
actor_class->get_preferred_width = st_label_get_preferred_width;
|
actor_class->get_preferred_width = st_label_get_preferred_width;
|
||||||
actor_class->get_preferred_height = st_label_get_preferred_height;
|
actor_class->get_preferred_height = st_label_get_preferred_height;
|
||||||
|
actor_class->resource_scale_changed = st_label_resource_scale_changed;
|
||||||
|
|
||||||
widget_class->style_changed = st_label_style_changed;
|
widget_class->style_changed = st_label_style_changed;
|
||||||
widget_class->resource_scale_changed = st_label_resource_scale_changed;
|
|
||||||
widget_class->get_accessible_type = st_label_accessible_get_type;
|
widget_class->get_accessible_type = st_label_accessible_get_type;
|
||||||
|
|
||||||
props[PROP_CLUTTER_TEXT] =
|
props[PROP_CLUTTER_TEXT] =
|
||||||
@ -293,6 +294,7 @@ st_label_class_init (StLabelClass *klass)
|
|||||||
static void
|
static void
|
||||||
st_label_init (StLabel *label)
|
st_label_init (StLabel *label)
|
||||||
{
|
{
|
||||||
|
ClutterActor *actor = CLUTTER_ACTOR (label);
|
||||||
StLabelPrivate *priv;
|
StLabelPrivate *priv;
|
||||||
|
|
||||||
label->priv = priv = st_label_get_instance_private (label);
|
label->priv = priv = st_label_get_instance_private (label);
|
||||||
@ -304,7 +306,10 @@ st_label_init (StLabel *label)
|
|||||||
label->priv->shadow_width = -1.;
|
label->priv->shadow_width = -1.;
|
||||||
label->priv->shadow_height = -1.;
|
label->priv->shadow_height = -1.;
|
||||||
|
|
||||||
clutter_actor_add_child (CLUTTER_ACTOR (label), priv->label);
|
clutter_actor_add_child (actor, priv->label);
|
||||||
|
|
||||||
|
clutter_actor_set_offscreen_redirect (actor,
|
||||||
|
CLUTTER_OFFSCREEN_REDIRECT_ALWAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -461,8 +461,7 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
|
|||||||
if (width == 0 || height == 0)
|
if (width == 0 || height == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!clutter_actor_get_resource_scale (actor, &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (actor);
|
||||||
return NULL;
|
|
||||||
|
|
||||||
width = ceilf (width * resource_scale);
|
width = ceilf (width * resource_scale);
|
||||||
height = ceilf (height * resource_scale);
|
height = ceilf (height * resource_scale);
|
||||||
|
@ -262,14 +262,25 @@ scroll_bar_allocate_children (StScrollBar *bar,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
ClutterTextDirection direction;
|
||||||
|
|
||||||
avail_size = content_box.x2 - content_box.x1;
|
avail_size = content_box.x2 - content_box.x1;
|
||||||
handle_size = increment * avail_size;
|
handle_size = increment * avail_size;
|
||||||
handle_size = CLAMP (handle_size, min_size, max_size);
|
handle_size = CLAMP (handle_size, min_size, max_size);
|
||||||
|
|
||||||
|
direction = clutter_actor_get_text_direction (CLUTTER_ACTOR (bar));
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
{
|
||||||
|
handle_box.x2 = content_box.x2 - position * (avail_size - handle_size);
|
||||||
|
handle_box.x1 = handle_box.x2 - handle_size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
handle_box.x1 = content_box.x1 + position * (avail_size - handle_size);
|
handle_box.x1 = content_box.x1 + position * (avail_size - handle_size);
|
||||||
handle_box.y1 = content_box.y1;
|
|
||||||
|
|
||||||
handle_box.x2 = handle_box.x1 + handle_size;
|
handle_box.x2 = handle_box.x1 + handle_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_box.y1 = content_box.y1;
|
||||||
handle_box.y2 = content_box.y2;
|
handle_box.y2 = content_box.y2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,28 +475,40 @@ st_scroll_bar_scroll_event (ClutterActor *actor,
|
|||||||
ClutterScrollEvent *event)
|
ClutterScrollEvent *event)
|
||||||
{
|
{
|
||||||
StScrollBarPrivate *priv = ST_SCROLL_BAR_PRIVATE (actor);
|
StScrollBarPrivate *priv = ST_SCROLL_BAR_PRIVATE (actor);
|
||||||
|
ClutterTextDirection direction;
|
||||||
|
ClutterScrollDirection scroll_dir;
|
||||||
|
|
||||||
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
|
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
switch (event->direction)
|
direction = clutter_actor_get_text_direction (actor);
|
||||||
|
scroll_dir = event->direction;
|
||||||
|
|
||||||
|
switch (scroll_dir)
|
||||||
{
|
{
|
||||||
case CLUTTER_SCROLL_SMOOTH:
|
case CLUTTER_SCROLL_SMOOTH:
|
||||||
{
|
{
|
||||||
gdouble delta_x, delta_y;
|
gdouble delta_x, delta_y;
|
||||||
clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y);
|
clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y);
|
||||||
|
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
delta_x *= -1;
|
||||||
|
|
||||||
if (priv->vertical)
|
if (priv->vertical)
|
||||||
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_y);
|
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_y);
|
||||||
else
|
else
|
||||||
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_x);
|
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_x);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CLUTTER_SCROLL_UP:
|
|
||||||
case CLUTTER_SCROLL_DOWN:
|
|
||||||
case CLUTTER_SCROLL_LEFT:
|
case CLUTTER_SCROLL_LEFT:
|
||||||
case CLUTTER_SCROLL_RIGHT:
|
case CLUTTER_SCROLL_RIGHT:
|
||||||
adjust_with_direction (priv->adjustment, event->direction);
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
scroll_dir = scroll_dir == CLUTTER_SCROLL_LEFT ? CLUTTER_SCROLL_RIGHT
|
||||||
|
: CLUTTER_SCROLL_LEFT;
|
||||||
|
/* Fall through */
|
||||||
|
case CLUTTER_SCROLL_UP:
|
||||||
|
case CLUTTER_SCROLL_DOWN:
|
||||||
|
adjust_with_direction (priv->adjustment, scroll_dir);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_return_val_if_reached (FALSE);
|
g_return_val_if_reached (FALSE);
|
||||||
@ -552,6 +575,7 @@ move_slider (StScrollBar *bar,
|
|||||||
gfloat y)
|
gfloat y)
|
||||||
{
|
{
|
||||||
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
|
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
|
||||||
|
ClutterTextDirection direction;
|
||||||
gdouble position, lower, upper, page_size;
|
gdouble position, lower, upper, page_size;
|
||||||
gfloat ux, uy, pos, size;
|
gfloat ux, uy, pos, size;
|
||||||
|
|
||||||
@ -585,6 +609,10 @@ move_slider (StScrollBar *bar,
|
|||||||
NULL,
|
NULL,
|
||||||
&page_size);
|
&page_size);
|
||||||
|
|
||||||
|
direction = clutter_actor_get_text_direction (CLUTTER_ACTOR (bar));
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
pos = size - pos;
|
||||||
|
|
||||||
position = ((pos / size)
|
position = ((pos / size)
|
||||||
* (upper - lower - page_size))
|
* (upper - lower - page_size))
|
||||||
+ lower;
|
+ lower;
|
||||||
@ -668,6 +696,7 @@ static gboolean
|
|||||||
trough_paging_cb (StScrollBar *self)
|
trough_paging_cb (StScrollBar *self)
|
||||||
{
|
{
|
||||||
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
|
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
|
||||||
|
ClutterTextDirection direction;
|
||||||
g_autoptr (ClutterTransition) transition = NULL;
|
g_autoptr (ClutterTransition) transition = NULL;
|
||||||
StSettings *settings;
|
StSettings *settings;
|
||||||
gfloat handle_pos, event_pos, tx, ty;
|
gfloat handle_pos, event_pos, tx, ty;
|
||||||
@ -725,6 +754,10 @@ trough_paging_cb (StScrollBar *self)
|
|||||||
priv->move_y,
|
priv->move_y,
|
||||||
&tx, &ty);
|
&tx, &ty);
|
||||||
|
|
||||||
|
direction = clutter_actor_get_text_direction (CLUTTER_ACTOR (self));
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
page_increment *= -1;
|
||||||
|
|
||||||
if (priv->vertical)
|
if (priv->vertical)
|
||||||
event_pos = ty;
|
event_pos = ty;
|
||||||
else
|
else
|
||||||
|
@ -757,6 +757,7 @@ st_scroll_view_scroll_event (ClutterActor *self,
|
|||||||
ClutterScrollEvent *event)
|
ClutterScrollEvent *event)
|
||||||
{
|
{
|
||||||
StScrollViewPrivate *priv = ST_SCROLL_VIEW (self)->priv;
|
StScrollViewPrivate *priv = ST_SCROLL_VIEW (self)->priv;
|
||||||
|
ClutterTextDirection direction;
|
||||||
|
|
||||||
/* don't handle scroll events if requested not to */
|
/* don't handle scroll events if requested not to */
|
||||||
if (!priv->mouse_scroll)
|
if (!priv->mouse_scroll)
|
||||||
@ -765,12 +766,18 @@ st_scroll_view_scroll_event (ClutterActor *self,
|
|||||||
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
|
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
direction = clutter_actor_get_text_direction (self);
|
||||||
|
|
||||||
switch (event->direction)
|
switch (event->direction)
|
||||||
{
|
{
|
||||||
case CLUTTER_SCROLL_SMOOTH:
|
case CLUTTER_SCROLL_SMOOTH:
|
||||||
{
|
{
|
||||||
gdouble delta_x, delta_y;
|
gdouble delta_x, delta_y;
|
||||||
clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y);
|
clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y);
|
||||||
|
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
delta_x *= -1;
|
||||||
|
|
||||||
st_adjustment_adjust_for_scroll_event (priv->hadjustment, delta_x);
|
st_adjustment_adjust_for_scroll_event (priv->hadjustment, delta_x);
|
||||||
st_adjustment_adjust_for_scroll_event (priv->vadjustment, delta_y);
|
st_adjustment_adjust_for_scroll_event (priv->vadjustment, delta_y);
|
||||||
}
|
}
|
||||||
@ -781,7 +788,18 @@ st_scroll_view_scroll_event (ClutterActor *self,
|
|||||||
break;
|
break;
|
||||||
case CLUTTER_SCROLL_LEFT:
|
case CLUTTER_SCROLL_LEFT:
|
||||||
case CLUTTER_SCROLL_RIGHT:
|
case CLUTTER_SCROLL_RIGHT:
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
{
|
||||||
|
ClutterScrollDirection dir;
|
||||||
|
|
||||||
|
dir = event->direction == CLUTTER_SCROLL_LEFT ? CLUTTER_SCROLL_RIGHT
|
||||||
|
: CLUTTER_SCROLL_LEFT;
|
||||||
|
adjust_with_direction (priv->hadjustment, dir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
adjust_with_direction (priv->hadjustment, event->direction);
|
adjust_with_direction (priv->hadjustment, event->direction);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_warn_if_reached();
|
g_warn_if_reached();
|
||||||
@ -881,13 +899,17 @@ st_scroll_view_init (StScrollView *self)
|
|||||||
priv->hscrollbar_policy = ST_POLICY_AUTOMATIC;
|
priv->hscrollbar_policy = ST_POLICY_AUTOMATIC;
|
||||||
priv->vscrollbar_policy = ST_POLICY_AUTOMATIC;
|
priv->vscrollbar_policy = ST_POLICY_AUTOMATIC;
|
||||||
|
|
||||||
priv->hadjustment = g_object_new (ST_TYPE_ADJUSTMENT, NULL);
|
priv->hadjustment = g_object_new (ST_TYPE_ADJUSTMENT,
|
||||||
|
"actor", self,
|
||||||
|
NULL);
|
||||||
priv->hscroll = g_object_new (ST_TYPE_SCROLL_BAR,
|
priv->hscroll = g_object_new (ST_TYPE_SCROLL_BAR,
|
||||||
"adjustment", priv->hadjustment,
|
"adjustment", priv->hadjustment,
|
||||||
"vertical", FALSE,
|
"vertical", FALSE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
priv->vadjustment = g_object_new (ST_TYPE_ADJUSTMENT, NULL);
|
priv->vadjustment = g_object_new (ST_TYPE_ADJUSTMENT,
|
||||||
|
"actor", self,
|
||||||
|
NULL);
|
||||||
priv->vscroll = g_object_new (ST_TYPE_SCROLL_BAR,
|
priv->vscroll = g_object_new (ST_TYPE_SCROLL_BAR,
|
||||||
"adjustment", priv->vadjustment,
|
"adjustment", priv->vadjustment,
|
||||||
"vertical", TRUE,
|
"vertical", TRUE,
|
||||||
|
@ -722,8 +722,7 @@ load_texture_async (StTextureCache *cache,
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
StTextureCache *cache;
|
StTextureCache *cache;
|
||||||
ClutterActor *actor;
|
ClutterContent *image;
|
||||||
gint size;
|
|
||||||
GObject *source;
|
GObject *source;
|
||||||
gulong notify_signal_id;
|
gulong notify_signal_id;
|
||||||
gboolean weakref_active;
|
gboolean weakref_active;
|
||||||
@ -742,37 +741,33 @@ st_texture_cache_reset_texture (StTextureCachePropertyBind *bind,
|
|||||||
(cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ||
|
(cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ||
|
||||||
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_RGB24))
|
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_RGB24))
|
||||||
{
|
{
|
||||||
g_autoptr(ClutterContent) image = NULL;
|
|
||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
int size = bind->size;
|
int width, height, size;
|
||||||
|
|
||||||
if (size < 0)
|
width = cairo_image_surface_get_width (surface);
|
||||||
clutter_actor_get_preferred_width (bind->actor, -1, NULL, (float *)&size);
|
height = cairo_image_surface_get_width (surface);
|
||||||
|
size = MAX(width, height);
|
||||||
|
|
||||||
image = clutter_actor_get_content (bind->actor);
|
if (!bind->image)
|
||||||
if (!image || !CLUTTER_IS_IMAGE (image))
|
bind->image = st_image_content_new_with_preferred_size (size, size);
|
||||||
image = st_image_content_new_with_preferred_size (size, size);
|
|
||||||
else
|
|
||||||
g_object_ref (image);
|
|
||||||
|
|
||||||
clutter_image_set_data (CLUTTER_IMAGE (image),
|
clutter_image_set_data (CLUTTER_IMAGE (bind->image),
|
||||||
cairo_image_surface_get_data (surface),
|
cairo_image_surface_get_data (surface),
|
||||||
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ?
|
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ?
|
||||||
COGL_PIXEL_FORMAT_BGRA_8888 : COGL_PIXEL_FORMAT_BGR_888,
|
COGL_PIXEL_FORMAT_BGRA_8888 : COGL_PIXEL_FORMAT_BGR_888,
|
||||||
cairo_image_surface_get_width (surface),
|
width,
|
||||||
cairo_image_surface_get_height (surface),
|
height,
|
||||||
cairo_image_surface_get_stride (surface),
|
cairo_image_surface_get_stride (surface),
|
||||||
&error);
|
&error);
|
||||||
|
|
||||||
if (image)
|
if (error)
|
||||||
clutter_actor_set_content (bind->actor, image);
|
|
||||||
else if (error)
|
|
||||||
g_warning ("Failed to allocate texture: %s", error->message);
|
g_warning ("Failed to allocate texture: %s", error->message);
|
||||||
|
|
||||||
clutter_actor_set_opacity (bind->actor, 255);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
clutter_actor_set_opacity (bind->actor, 0);
|
bind->image = g_object_new (ST_TYPE_IMAGE_CONTENT,
|
||||||
|
"preferred-width", 0, /* tough luck */
|
||||||
|
"preferred-height", 0,
|
||||||
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -798,57 +793,48 @@ st_texture_cache_free_bind (gpointer data)
|
|||||||
{
|
{
|
||||||
StTextureCachePropertyBind *bind = data;
|
StTextureCachePropertyBind *bind = data;
|
||||||
if (bind->weakref_active)
|
if (bind->weakref_active)
|
||||||
g_object_weak_unref (G_OBJECT (bind->actor), st_texture_cache_bind_weak_notify, bind);
|
g_object_weak_unref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
|
||||||
g_slice_free (StTextureCachePropertyBind, bind);
|
g_slice_free (StTextureCachePropertyBind, bind);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_texture_cache_bind_cairo_surface_property:
|
* st_texture_cache_bind_cairo_surface_property:
|
||||||
* @cache:
|
* @cache:
|
||||||
* @object: A #GObject with a property @property_name of type #GdkPixbuf
|
* @object: A #GObject with a property @property_name of type #cairo_surface_t
|
||||||
* @property_name: Name of a property
|
* @property_name: Name of a property
|
||||||
*
|
*
|
||||||
* Create a #ClutterActor which tracks the #cairo_surface_t value of a GObject property
|
* Create a #GIcon which tracks the #cairo_surface_t value of a GObject property
|
||||||
* named by @property_name. Unlike other methods in StTextureCache, the underlying
|
* named by @property_name. Unlike other methods in StTextureCache, the underlying
|
||||||
* #CoglTexture is not shared by default with other invocations to this method.
|
* #CoglTexture is not shared by default with other invocations to this method.
|
||||||
*
|
*
|
||||||
* If the source object is destroyed, the texture will continue to show the last
|
* If the source object is destroyed, the texture will continue to show the last
|
||||||
* value of the property.
|
* value of the property.
|
||||||
*
|
*
|
||||||
* Return value: (transfer none): A new #StWidget
|
* Return value: (transfer none): A new #GIcon
|
||||||
*/
|
*/
|
||||||
StWidget *
|
GIcon *
|
||||||
st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
|
st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
|
||||||
GObject *object,
|
GObject *object,
|
||||||
const char *property_name,
|
const char *property_name)
|
||||||
gint size)
|
|
||||||
{
|
{
|
||||||
StWidget *widget;
|
|
||||||
gchar *notify_key;
|
gchar *notify_key;
|
||||||
StTextureCachePropertyBind *bind;
|
StTextureCachePropertyBind *bind;
|
||||||
|
|
||||||
widget = g_object_new (ST_TYPE_WIDGET,
|
|
||||||
"opacity", 0,
|
|
||||||
"width", (float)size,
|
|
||||||
"height", (float)size,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
bind = g_slice_new0 (StTextureCachePropertyBind);
|
bind = g_slice_new0 (StTextureCachePropertyBind);
|
||||||
bind->cache = cache;
|
bind->cache = cache;
|
||||||
bind->actor = CLUTTER_ACTOR (widget);
|
|
||||||
bind->size = size;
|
|
||||||
bind->source = object;
|
bind->source = object;
|
||||||
g_object_weak_ref (G_OBJECT (widget), st_texture_cache_bind_weak_notify, bind);
|
|
||||||
bind->weakref_active = TRUE;
|
|
||||||
|
|
||||||
st_texture_cache_reset_texture (bind, property_name);
|
st_texture_cache_reset_texture (bind, property_name);
|
||||||
|
|
||||||
|
g_object_weak_ref (G_OBJECT (bind->image), st_texture_cache_bind_weak_notify, bind);
|
||||||
|
bind->weakref_active = TRUE;
|
||||||
|
|
||||||
notify_key = g_strdup_printf ("notify::%s", property_name);
|
notify_key = g_strdup_printf ("notify::%s", property_name);
|
||||||
bind->notify_signal_id = g_signal_connect_data (object, notify_key, G_CALLBACK(st_texture_cache_on_pixbuf_notify),
|
bind->notify_signal_id = g_signal_connect_data (object, notify_key, G_CALLBACK(st_texture_cache_on_pixbuf_notify),
|
||||||
bind, (GClosureNotify)st_texture_cache_free_bind, 0);
|
bind, (GClosureNotify)st_texture_cache_free_bind, 0);
|
||||||
g_free (notify_key);
|
g_free (notify_key);
|
||||||
|
|
||||||
return widget;
|
return G_ICON (bind->image);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -981,6 +967,18 @@ st_texture_cache_load_gicon (StTextureCache *cache,
|
|||||||
StIconStyle icon_style = ST_ICON_STYLE_REQUESTED;
|
StIconStyle icon_style = ST_ICON_STYLE_REQUESTED;
|
||||||
GtkIconLookupFlags lookup_flags;
|
GtkIconLookupFlags lookup_flags;
|
||||||
|
|
||||||
|
actor_size = size * paint_scale;
|
||||||
|
|
||||||
|
if (ST_IS_IMAGE_CONTENT (icon))
|
||||||
|
{
|
||||||
|
return g_object_new (CLUTTER_TYPE_ACTOR,
|
||||||
|
"request-mode", CLUTTER_REQUEST_CONTENT_SIZE,
|
||||||
|
"width", actor_size,
|
||||||
|
"height", actor_size,
|
||||||
|
"content", CLUTTER_CONTENT (icon),
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (theme_node)
|
if (theme_node)
|
||||||
{
|
{
|
||||||
colors = st_theme_node_get_icon_colors (theme_node);
|
colors = st_theme_node_get_icon_colors (theme_node);
|
||||||
@ -1034,7 +1032,6 @@ st_texture_cache_load_gicon (StTextureCache *cache,
|
|||||||
g_free (gicon_string);
|
g_free (gicon_string);
|
||||||
|
|
||||||
actor = create_invisible_actor ();
|
actor = create_invisible_actor ();
|
||||||
actor_size = size * paint_scale;
|
|
||||||
clutter_actor_set_size (actor, actor_size, actor_size);
|
clutter_actor_set_size (actor, actor_size, actor_size);
|
||||||
if (ensure_request (cache, key, policy, &request, actor))
|
if (ensure_request (cache, key, policy, &request, actor))
|
||||||
{
|
{
|
||||||
|
@ -64,10 +64,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
GFunc load_callback,
|
GFunc load_callback,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
StWidget *st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
|
GIcon *st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
|
||||||
GObject *object,
|
GObject *object,
|
||||||
const char *property_name,
|
const char *property_name);
|
||||||
gint size);
|
|
||||||
|
|
||||||
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
|
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
|
||||||
StThemeNode *theme_node,
|
StThemeNode *theme_node,
|
||||||
|
@ -84,10 +84,11 @@ on_timeline_new_frame (ClutterTimeline *timeline,
|
|||||||
}
|
}
|
||||||
|
|
||||||
StThemeNodeTransition *
|
StThemeNodeTransition *
|
||||||
st_theme_node_transition_new (StThemeNode *from_node,
|
st_theme_node_transition_new (ClutterActor *actor,
|
||||||
|
StThemeNode *from_node,
|
||||||
StThemeNode *to_node,
|
StThemeNode *to_node,
|
||||||
StThemeNodePaintState *old_paint_state,
|
StThemeNodePaintState *old_paint_state,
|
||||||
guint duration)
|
unsigned int duration)
|
||||||
{
|
{
|
||||||
StThemeNodeTransition *transition;
|
StThemeNodeTransition *transition;
|
||||||
g_return_val_if_fail (ST_IS_THEME_NODE (from_node), NULL);
|
g_return_val_if_fail (ST_IS_THEME_NODE (from_node), NULL);
|
||||||
@ -103,7 +104,7 @@ st_theme_node_transition_new (StThemeNode *from_node,
|
|||||||
st_theme_node_paint_state_copy (&transition->priv->old_paint_state,
|
st_theme_node_paint_state_copy (&transition->priv->old_paint_state,
|
||||||
old_paint_state);
|
old_paint_state);
|
||||||
|
|
||||||
transition->priv->timeline = clutter_timeline_new (duration);
|
transition->priv->timeline = clutter_timeline_new_for_actor (actor, duration);
|
||||||
|
|
||||||
transition->priv->timeline_completed_id =
|
transition->priv->timeline_completed_id =
|
||||||
g_signal_connect (transition->priv->timeline, "completed",
|
g_signal_connect (transition->priv->timeline, "completed",
|
||||||
|
@ -32,7 +32,8 @@ G_BEGIN_DECLS
|
|||||||
G_DECLARE_FINAL_TYPE (StThemeNodeTransition, st_theme_node_transition,
|
G_DECLARE_FINAL_TYPE (StThemeNodeTransition, st_theme_node_transition,
|
||||||
ST, THEME_NODE_TRANSITION, GObject)
|
ST, THEME_NODE_TRANSITION, GObject)
|
||||||
|
|
||||||
StThemeNodeTransition *st_theme_node_transition_new (StThemeNode *from_node,
|
StThemeNodeTransition *st_theme_node_transition_new (ClutterActor *actor,
|
||||||
|
StThemeNode *from_node,
|
||||||
StThemeNode *to_node,
|
StThemeNode *to_node,
|
||||||
StThemeNodePaintState *old_paint_state,
|
StThemeNodePaintState *old_paint_state,
|
||||||
guint duration);
|
guint duration);
|
||||||
|
@ -78,6 +78,7 @@ adjustment_value_notify_cb (StAdjustment *adjustment,
|
|||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
StViewport *viewport)
|
StViewport *viewport)
|
||||||
{
|
{
|
||||||
|
clutter_actor_invalidate_transform (CLUTTER_ACTOR (viewport));
|
||||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (viewport));
|
clutter_actor_queue_relayout (CLUTTER_ACTOR (viewport));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +262,9 @@ st_viewport_allocate (ClutterActor *actor,
|
|||||||
clutter_actor_set_allocation (actor, box);
|
clutter_actor_set_allocation (actor, box);
|
||||||
|
|
||||||
content_box = viewport_box;
|
content_box = viewport_box;
|
||||||
|
if (priv->hadjustment)
|
||||||
content_box.x2 += MAX (0, min_width - avail_width);
|
content_box.x2 += MAX (0, min_width - avail_width);
|
||||||
|
if (priv->vadjustment)
|
||||||
content_box.y2 += MAX (0, min_height - avail_height);
|
content_box.y2 += MAX (0, min_height - avail_height);
|
||||||
|
|
||||||
clutter_layout_manager_allocate (layout, CLUTTER_CONTAINER (actor),
|
clutter_layout_manager_allocate (layout, CLUTTER_CONTAINER (actor),
|
||||||
@ -301,6 +304,26 @@ st_viewport_allocate (ClutterActor *actor,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
get_hadjustment_value (StViewport *viewport)
|
||||||
|
{
|
||||||
|
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
|
||||||
|
ClutterTextDirection direction;
|
||||||
|
double x, upper, page_size;
|
||||||
|
|
||||||
|
if (!priv->hadjustment)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
st_adjustment_get_values (priv->hadjustment,
|
||||||
|
&x, NULL, &upper, NULL, NULL, &page_size);
|
||||||
|
|
||||||
|
direction = clutter_actor_get_text_direction (CLUTTER_ACTOR (viewport));
|
||||||
|
if (direction == CLUTTER_TEXT_DIRECTION_RTL)
|
||||||
|
return upper - page_size - x;
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_viewport_apply_transform (ClutterActor *actor,
|
st_viewport_apply_transform (ClutterActor *actor,
|
||||||
CoglMatrix *matrix)
|
CoglMatrix *matrix)
|
||||||
@ -314,7 +337,7 @@ st_viewport_apply_transform (ClutterActor *actor,
|
|||||||
parent_class->apply_transform (actor, matrix);
|
parent_class->apply_transform (actor, matrix);
|
||||||
|
|
||||||
if (priv->hadjustment)
|
if (priv->hadjustment)
|
||||||
x = st_adjustment_get_value (priv->hadjustment);
|
x = get_hadjustment_value (viewport);
|
||||||
else
|
else
|
||||||
x = 0;
|
x = 0;
|
||||||
|
|
||||||
@ -336,7 +359,7 @@ get_border_paint_offsets (StViewport *viewport,
|
|||||||
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
|
StViewportPrivate *priv = st_viewport_get_instance_private (viewport);
|
||||||
|
|
||||||
if (priv->hadjustment)
|
if (priv->hadjustment)
|
||||||
*x = st_adjustment_get_value (priv->hadjustment);
|
*x = get_hadjustment_value (viewport);
|
||||||
else
|
else
|
||||||
*x = 0;
|
*x = 0;
|
||||||
|
|
||||||
|
@ -124,7 +124,6 @@ enum
|
|||||||
{
|
{
|
||||||
STYLE_CHANGED,
|
STYLE_CHANGED,
|
||||||
POPUP_MENU,
|
POPUP_MENU,
|
||||||
RESOURCE_SCALE_CHANGED,
|
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
@ -412,8 +411,7 @@ st_widget_paint_background (StWidget *widget,
|
|||||||
float resource_scale;
|
float resource_scale;
|
||||||
guint8 opacity;
|
guint8 opacity;
|
||||||
|
|
||||||
if (!st_widget_get_resource_scale (widget, &resource_scale))
|
resource_scale = clutter_actor_get_resource_scale (CLUTTER_ACTOR (widget));
|
||||||
return;
|
|
||||||
|
|
||||||
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
|
framebuffer = clutter_paint_context_get_framebuffer (paint_context);
|
||||||
theme_node = st_widget_get_theme_node (widget);
|
theme_node = st_widget_get_theme_node (widget);
|
||||||
@ -601,8 +599,11 @@ st_widget_get_theme_node (StWidget *widget)
|
|||||||
|
|
||||||
if (stage == NULL)
|
if (stage == NULL)
|
||||||
{
|
{
|
||||||
|
g_autofree char *desc = st_describe_actor (CLUTTER_ACTOR (widget));
|
||||||
|
|
||||||
g_critical ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
|
g_critical ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
|
||||||
st_describe_actor (CLUTTER_ACTOR (widget)));
|
desc);
|
||||||
|
|
||||||
return g_object_new (ST_TYPE_THEME_NODE, NULL);
|
return g_object_new (ST_TYPE_THEME_NODE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -817,6 +818,20 @@ st_widget_real_get_focus_chain (StWidget *widget)
|
|||||||
return g_list_reverse (visible);
|
return g_list_reverse (visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
st_widget_resource_scale_changed (ClutterActor *actor)
|
||||||
|
{
|
||||||
|
StWidget *widget = ST_WIDGET (actor);
|
||||||
|
StWidgetPrivate *priv = st_widget_get_instance_private (widget);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (priv->paint_states); i++)
|
||||||
|
st_theme_node_paint_state_invalidate (&priv->paint_states[i]);
|
||||||
|
|
||||||
|
if (CLUTTER_ACTOR_CLASS (st_widget_parent_class)->resource_scale_changed)
|
||||||
|
CLUTTER_ACTOR_CLASS (st_widget_parent_class)->resource_scale_changed (actor);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_class_init (StWidgetClass *klass)
|
st_widget_class_init (StWidgetClass *klass)
|
||||||
{
|
{
|
||||||
@ -846,6 +861,8 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
actor_class->get_accessible = st_widget_get_accessible;
|
actor_class->get_accessible = st_widget_get_accessible;
|
||||||
actor_class->has_accessible = st_widget_has_accessible;
|
actor_class->has_accessible = st_widget_has_accessible;
|
||||||
|
|
||||||
|
actor_class->resource_scale_changed = st_widget_resource_scale_changed;
|
||||||
|
|
||||||
klass->style_changed = st_widget_real_style_changed;
|
klass->style_changed = st_widget_real_style_changed;
|
||||||
klass->navigate_focus = st_widget_real_navigate_focus;
|
klass->navigate_focus = st_widget_real_navigate_focus;
|
||||||
klass->get_accessible_type = st_widget_accessible_get_type;
|
klass->get_accessible_type = st_widget_accessible_get_type;
|
||||||
@ -999,21 +1016,6 @@ st_widget_class_init (StWidgetClass *klass)
|
|||||||
G_STRUCT_OFFSET (StWidgetClass, popup_menu),
|
G_STRUCT_OFFSET (StWidgetClass, popup_menu),
|
||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
/**
|
|
||||||
* StWidget::resource-scale-changed:
|
|
||||||
* @widget: the #StWidget
|
|
||||||
*
|
|
||||||
* Emitted when the paint scale that the widget will be painted as
|
|
||||||
* changed.
|
|
||||||
*/
|
|
||||||
signals[RESOURCE_SCALE_CHANGED] =
|
|
||||||
g_signal_new ("resource-scale-changed",
|
|
||||||
G_TYPE_FROM_CLASS (klass),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET (StWidgetClass, resource_scale_changed),
|
|
||||||
NULL, NULL, NULL,
|
|
||||||
G_TYPE_NONE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
static const gchar *
|
||||||
@ -1397,23 +1399,6 @@ st_widget_get_style (StWidget *actor)
|
|||||||
return ST_WIDGET_PRIVATE (actor)->inline_style;
|
return ST_WIDGET_PRIVATE (actor)->inline_style;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* st_widget_get_resource_scale:
|
|
||||||
* @widget: A #StWidget
|
|
||||||
* @resource_scale: (out): return location for the resource scale
|
|
||||||
*
|
|
||||||
* Retrieves the resource scale for this #StWidget, if available.
|
|
||||||
*
|
|
||||||
* The resource scale refers to the scale the actor should use for its resources.
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
st_widget_get_resource_scale (StWidget *widget,
|
|
||||||
float *resource_scale)
|
|
||||||
{
|
|
||||||
return clutter_actor_get_resource_scale (CLUTTER_ACTOR (widget),
|
|
||||||
resource_scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_set_first_visible_child (StWidget *widget,
|
st_widget_set_first_visible_child (StWidget *widget,
|
||||||
ClutterActor *actor)
|
ClutterActor *actor)
|
||||||
@ -1480,23 +1465,6 @@ st_widget_name_notify (StWidget *widget,
|
|||||||
st_widget_style_changed (widget);
|
st_widget_style_changed (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
st_widget_resource_scale_notify (StWidget *widget,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
StWidgetPrivate *priv = st_widget_get_instance_private (widget);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (priv->paint_states); i++)
|
|
||||||
st_theme_node_paint_state_invalidate (&priv->paint_states[i]);
|
|
||||||
|
|
||||||
g_signal_emit (widget, signals[RESOURCE_SCALE_CHANGED], 0);
|
|
||||||
|
|
||||||
if (clutter_actor_is_mapped (CLUTTER_ACTOR (widget)))
|
|
||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (widget));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_widget_reactive_notify (StWidget *widget,
|
st_widget_reactive_notify (StWidget *widget,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
@ -1648,7 +1616,6 @@ st_widget_init (StWidget *actor)
|
|||||||
|
|
||||||
/* connect style changed */
|
/* connect style changed */
|
||||||
g_signal_connect (actor, "notify::name", G_CALLBACK (st_widget_name_notify), NULL);
|
g_signal_connect (actor, "notify::name", G_CALLBACK (st_widget_name_notify), NULL);
|
||||||
g_signal_connect (actor, "notify::resource-scale", G_CALLBACK (st_widget_resource_scale_notify), NULL);
|
|
||||||
g_signal_connect (actor, "notify::reactive", G_CALLBACK (st_widget_reactive_notify), NULL);
|
g_signal_connect (actor, "notify::reactive", G_CALLBACK (st_widget_reactive_notify), NULL);
|
||||||
|
|
||||||
g_signal_connect (actor, "notify::visible", G_CALLBACK (st_widget_visible_notify), NULL);
|
g_signal_connect (actor, "notify::visible", G_CALLBACK (st_widget_visible_notify), NULL);
|
||||||
@ -1720,7 +1687,8 @@ st_widget_recompute_style (StWidget *widget,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
priv->transition_animation =
|
priv->transition_animation =
|
||||||
st_theme_node_transition_new (old_theme_node,
|
st_theme_node_transition_new (CLUTTER_ACTOR (widget),
|
||||||
|
old_theme_node,
|
||||||
new_theme_node,
|
new_theme_node,
|
||||||
current_paint_state (widget),
|
current_paint_state (widget),
|
||||||
transition_duration);
|
transition_duration);
|
||||||
@ -1903,7 +1871,7 @@ st_widget_sync_hover (StWidget *widget)
|
|||||||
|
|
||||||
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
|
||||||
pointer = clutter_seat_get_pointer (seat);
|
pointer = clutter_seat_get_pointer (seat);
|
||||||
pointer_actor = clutter_input_device_get_pointer_actor (pointer);
|
pointer_actor = clutter_input_device_get_actor (pointer, NULL);
|
||||||
if (pointer_actor && clutter_actor_get_reactive (CLUTTER_ACTOR (widget)))
|
if (pointer_actor && clutter_actor_get_reactive (CLUTTER_ACTOR (widget)))
|
||||||
st_widget_set_hover (widget, clutter_actor_contains (CLUTTER_ACTOR (widget), pointer_actor));
|
st_widget_set_hover (widget, clutter_actor_contains (CLUTTER_ACTOR (widget), pointer_actor));
|
||||||
else
|
else
|
||||||
|
@ -63,7 +63,6 @@ struct _StWidgetClass
|
|||||||
/* signals */
|
/* signals */
|
||||||
void (* style_changed) (StWidget *self);
|
void (* style_changed) (StWidget *self);
|
||||||
void (* popup_menu) (StWidget *self);
|
void (* popup_menu) (StWidget *self);
|
||||||
void (* resource_scale_changed) (StWidget *self);
|
|
||||||
|
|
||||||
/* vfuncs */
|
/* vfuncs */
|
||||||
|
|
||||||
@ -135,8 +134,6 @@ StThemeNode * st_widget_peek_theme_node (StWidget *widg
|
|||||||
GList * st_widget_get_focus_chain (StWidget *widget);
|
GList * st_widget_get_focus_chain (StWidget *widget);
|
||||||
void st_widget_paint_background (StWidget *widget,
|
void st_widget_paint_background (StWidget *widget,
|
||||||
ClutterPaintContext *paint_context);
|
ClutterPaintContext *paint_context);
|
||||||
gboolean st_widget_get_resource_scale (StWidget *widget,
|
|
||||||
float *resource_scale);
|
|
||||||
|
|
||||||
/* debug methods */
|
/* debug methods */
|
||||||
char *st_describe_actor (ClutterActor *actor);
|
char *st_describe_actor (ClutterActor *actor);
|
||||||
|
@ -566,26 +566,26 @@ main (int argc, char **argv)
|
|||||||
|
|
||||||
root = st_theme_context_get_root_node (context);
|
root = st_theme_context_get_root_node (context);
|
||||||
group1 = st_theme_node_new (context, root, NULL,
|
group1 = st_theme_node_new (context, root, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group1", NULL, NULL, NULL);
|
CLUTTER_TYPE_ACTOR, "group1", NULL, NULL, NULL);
|
||||||
text1 = st_theme_node_new (context, group1, NULL,
|
text1 = st_theme_node_new (context, group1, NULL,
|
||||||
CLUTTER_TYPE_TEXT, "text1", "special-text", NULL, NULL);
|
CLUTTER_TYPE_TEXT, "text1", "special-text", NULL, NULL);
|
||||||
text2 = st_theme_node_new (context, group1, NULL,
|
text2 = st_theme_node_new (context, group1, NULL,
|
||||||
CLUTTER_TYPE_TEXT, "text2", NULL, NULL, NULL);
|
CLUTTER_TYPE_TEXT, "text2", NULL, NULL, NULL);
|
||||||
group2 = st_theme_node_new (context, root, NULL,
|
group2 = st_theme_node_new (context, root, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group2", NULL, NULL, NULL);
|
CLUTTER_TYPE_ACTOR, "group2", NULL, NULL, NULL);
|
||||||
group4 = st_theme_node_new (context, root, NULL,
|
group4 = st_theme_node_new (context, root, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group4", NULL, NULL, NULL);
|
CLUTTER_TYPE_ACTOR, "group4", NULL, NULL, NULL);
|
||||||
group5 = st_theme_node_new (context, root, NULL,
|
group5 = st_theme_node_new (context, root, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group5", NULL, NULL, NULL);
|
CLUTTER_TYPE_ACTOR, "group5", NULL, NULL, NULL);
|
||||||
group6 = st_theme_node_new (context, root, NULL,
|
group6 = st_theme_node_new (context, root, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group6", NULL, NULL, NULL);
|
CLUTTER_TYPE_ACTOR, "group6", NULL, NULL, NULL);
|
||||||
text3 = st_theme_node_new (context, group2, NULL,
|
text3 = st_theme_node_new (context, group2, NULL,
|
||||||
CLUTTER_TYPE_TEXT, "text3", NULL, NULL,
|
CLUTTER_TYPE_TEXT, "text3", NULL, NULL,
|
||||||
"color: #0000ff; padding-bottom: 12px;");
|
"color: #0000ff; padding-bottom: 12px;");
|
||||||
text4 = st_theme_node_new (context, group2, NULL,
|
text4 = st_theme_node_new (context, group2, NULL,
|
||||||
CLUTTER_TYPE_TEXT, "text4", NULL, "visited hover", NULL);
|
CLUTTER_TYPE_TEXT, "text4", NULL, "visited hover", NULL);
|
||||||
group3 = st_theme_node_new (context, group2, NULL,
|
group3 = st_theme_node_new (context, group2, NULL,
|
||||||
CLUTTER_TYPE_GROUP, "group3", NULL, "hover", NULL);
|
CLUTTER_TYPE_ACTOR, "group3", NULL, "hover", NULL);
|
||||||
button = st_theme_node_new (context, root, NULL,
|
button = st_theme_node_new (context, root, NULL,
|
||||||
ST_TYPE_BUTTON, "button", NULL, NULL, NULL);
|
ST_TYPE_BUTTON, "button", NULL, NULL, NULL);
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
</description>
|
</description>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="3.37.3" date="2020-07-07"/>
|
||||||
<release version="3.37.2" date="2020-06-02"/>
|
<release version="3.37.2" date="2020-06-02"/>
|
||||||
<release version="3.37.1" date="2020-04-29"/>
|
<release version="3.37.1" date="2020-04-29"/>
|
||||||
</releases>
|
</releases>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
project('gnome-extensions-app',
|
project('gnome-extensions-app',
|
||||||
version: '3.37.2',
|
version: '3.37.3',
|
||||||
meson_version: '>= 0.53.0',
|
meson_version: '>= 0.53.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
project('gnome-extensions-tool', 'c',
|
project('gnome-extensions-tool', 'c',
|
||||||
version: '3.37.2',
|
version: '3.37.3',
|
||||||
meson_version: '>= 0.53.0',
|
meson_version: '>= 0.53.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
project('shew', 'c',
|
project('shew', 'c',
|
||||||
version: '3.37.2',
|
version: '3.37.3',
|
||||||
meson_version: '>= 0.53.0',
|
meson_version: '>= 0.53.0',
|
||||||
license: 'LGPLv2+',
|
license: 'LGPLv2+',
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user