Compare commits
48 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
969db82f5a | ||
![]() |
6ee13ff685 | ||
![]() |
c0a453f64f | ||
![]() |
5336175736 | ||
![]() |
2997e4950b | ||
![]() |
a49fb90d86 | ||
![]() |
ffc0eb1de2 | ||
![]() |
853c81eb62 | ||
![]() |
594cc7cbef | ||
![]() |
0932324d39 | ||
![]() |
2d6cf236c4 | ||
![]() |
642107a28f | ||
![]() |
581b38ecf4 | ||
![]() |
fbc03cc262 | ||
![]() |
a6ff195893 | ||
![]() |
f411724064 | ||
![]() |
39f43a4cd4 | ||
![]() |
c82cb918ae | ||
![]() |
38cdaa6c20 | ||
![]() |
0327069e83 | ||
![]() |
7601b029c8 | ||
![]() |
fb509dfc25 | ||
![]() |
874a91968f | ||
![]() |
0963ccddba | ||
![]() |
c4e0f6df08 | ||
![]() |
58aafe9520 | ||
![]() |
a46df7f8ec | ||
![]() |
1dd16618d1 | ||
![]() |
a4190f83ac | ||
![]() |
a8e17f73ec | ||
![]() |
86a741c1ee | ||
![]() |
5cc6fef689 | ||
![]() |
522a5fe480 | ||
![]() |
b1239b1257 | ||
![]() |
58063d9ee1 | ||
![]() |
d7aba2dece | ||
![]() |
35fced27df | ||
![]() |
be76b19300 | ||
![]() |
376d696b8b | ||
![]() |
695d61968d | ||
![]() |
d6d09fd3c8 | ||
![]() |
f1b1501f9b | ||
![]() |
cdbc99e992 | ||
![]() |
69afe7785d | ||
![]() |
b99e304f1e | ||
![]() |
c29bd46e7a | ||
![]() |
5fcf40b973 | ||
![]() |
a198dfe3d8 |
57
NEWS
57
NEWS
@@ -1,57 +1,16 @@
|
|||||||
3.28.4
|
3.29.1
|
||||||
======
|
======
|
||||||
* Fix wrong window positions in overview on wayland [Marco; #776588]
|
* Support icons in app-menu [Florian; #760985]
|
||||||
* overview: Fix handling of confirmation dialogs on wayland [verdre; !180]
|
* Misc. bug fixes [Marco, Florian, Lubomir; #792687, #221, !63]
|
||||||
* Avoid some full relayout/redraws [Carlos; !197]
|
|
||||||
* Keep workspace switcher slid out when workspaces are in use [Florian; !161]
|
|
||||||
* Cancel search on overview hiding [Marco; !205]
|
|
||||||
* Fix disappearing network icon [Iain; #140]
|
|
||||||
* Improve performance of app icon animations [Daniel; !253]
|
|
||||||
* notifications: Support icon theme names in 'image-path' hint [Marco; !285]
|
|
||||||
* Avoid focus changes when updating keyboard options [Takao; #391]
|
|
||||||
* Fix unresponsive-app dialog blocking input in other windows [Florian; #273]
|
|
||||||
* Fix ellipsization in dialog subtitles/bodies [Marco; !531]
|
|
||||||
* Misc. bug fixes [Marco, Andrea, Florian, Jasper, Sam, verdre, Jonas,
|
|
||||||
Cosimo, Carlos; #792681, #372, !112, !162, #414, #663461, #788882, #787260,
|
|
||||||
!188, #791233, #602, #632, !305, !286, !314, #781, #693, #618, #430, #799,
|
|
||||||
#783, !293, #298, #1015, #539, #1270]
|
|
||||||
|
|
||||||
Contributors:
|
Contributors:
|
||||||
Jonas Ådahl, Andrea Azzarone, Cosimo Cecchi, Takao Fujiwara, Carlos Garnacho,
|
Piotr Drąg, Takao Fujiwara, Christian Kellner, Florian Müllner,
|
||||||
Iain Lane, Florian Müllner, Georges Basile Stavracas Neto, Jasper St. Pierre,
|
Mario Sanchez Prada, Lubomir Rintel, Didier Roche, Marco Trevisan (Treviño),
|
||||||
Sam Spilsbury, Ray Strode, Will Thompson, Marco Trevisan (Treviño), verdre,
|
verdre
|
||||||
Daniel van Vugt
|
|
||||||
|
|
||||||
Translators:
|
Translators:
|
||||||
Marek Černocký [cs]
|
gogo [hr], Stas Solovey [ru], Matej Urbančič [sl], Daniel Șerbănescu [ro],
|
||||||
|
Fabio Tomat [fur], Marek Cernocky [cs], Daniel Mustieles [es]
|
||||||
3.28.3
|
|
||||||
======
|
|
||||||
* Fix lagging pointer when zoomed [Daniel; #682013]
|
|
||||||
* Fix "Clear All" for calendar events [Florian; #325]
|
|
||||||
* Misc. bug fixes [Florian, Mario, Marco; #136, #214, #788931, #791233]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Carlos Garnacho, Florian Müllner, Mario Sanchez Prada, Joe Rabinoff,
|
|
||||||
Didier Roche, Marco Trevisan (Treviño), Daniel van Vugt
|
|
||||||
|
|
||||||
Translators:
|
|
||||||
Pieter Schalk Schoeman [af], Gun Chleoc [gd]
|
|
||||||
|
|
||||||
3.28.2
|
|
||||||
======
|
|
||||||
* Fix lock-up on cancelling polkit dialog [Florian; #221]
|
|
||||||
* Guard against untimely keyboard map changes [Carlos; #240]
|
|
||||||
* Fix blurriness of OSD under some resolutions [Silvère; #782011]
|
|
||||||
* Fix icons in search provider results [Florian; #249]
|
|
||||||
* Misc. bug fixes [Marco, Florian; #792687, #781471]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Carlos Garnacho, Silvère Latchurié, Florian Müllner, Mario Sanchez Prada,
|
|
||||||
Ray Strode, Marco Trevisan (Treviño)
|
|
||||||
|
|
||||||
Translators:
|
|
||||||
Stas Solovey [ru], Rafael Fontenelle [pt_BR]
|
|
||||||
|
|
||||||
3.28.1
|
3.28.1
|
||||||
======
|
======
|
||||||
|
@@ -1788,20 +1788,19 @@ StScrollBar {
|
|||||||
.login-dialog-user-list-view { -st-vfade-offset: 1em; }
|
.login-dialog-user-list-view { -st-vfade-offset: 1em; }
|
||||||
.login-dialog-user-list {
|
.login-dialog-user-list {
|
||||||
spacing: 12px;
|
spacing: 12px;
|
||||||
padding: .2em;
|
|
||||||
width: 23em;
|
width: 23em;
|
||||||
&:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
|
&:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
|
||||||
&:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; }
|
&:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; }
|
||||||
}
|
}
|
||||||
.login-dialog-user-list-item {
|
.login-dialog-user-list-item {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
padding: .2em;
|
padding: 6px;
|
||||||
color: darken($osd_fg_color,30%);
|
color: darken($osd_fg_color,30%);
|
||||||
&:ltr { padding-right: 1em; }
|
&:ltr .user-widget { padding-right: 1em; }
|
||||||
&:rtl { padding-left: 1em; }
|
&:rtl .user-widget { padding-left: 1em; }
|
||||||
.login-dialog-timed-login-indicator {
|
.login-dialog-timed-login-indicator {
|
||||||
height: 2px;
|
height: 2px;
|
||||||
margin: 2px 0 0 0;
|
margin-top: 6px;
|
||||||
background-color: $osd_fg_color;
|
background-color: $osd_fg_color;
|
||||||
}
|
}
|
||||||
&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
|
&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
|
||||||
@@ -1816,8 +1815,8 @@ StScrollBar {
|
|||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
}
|
}
|
||||||
.user-widget-label {
|
.user-widget-label {
|
||||||
&:ltr { padding-left: 18px; }
|
&:ltr { padding-left: 14px; }
|
||||||
&:rtl { padding-right: 18px; }
|
&:rtl { padding-right: 14px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog-prompt-layout {
|
.login-dialog-prompt-layout {
|
||||||
|
@@ -242,11 +242,11 @@ var AuthPrompt = new Lang.Class({
|
|||||||
this.emit('prompted');
|
this.emit('prompted');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onVerificationFailed(userVerifier, canRetry) {
|
_onVerificationFailed() {
|
||||||
this._queryingService = null;
|
this._queryingService = null;
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
||||||
this.updateSensitivity(canRetry);
|
this.updateSensitivity(true);
|
||||||
this.setActorInDefaultButtonWell(null);
|
this.setActorInDefaultButtonWell(null);
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
|
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
|
||||||
},
|
},
|
||||||
@@ -439,7 +439,6 @@ var AuthPrompt = new Lang.Class({
|
|||||||
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
|
||||||
this.cancelButton.reactive = true;
|
this.cancelButton.reactive = true;
|
||||||
this.nextButton.label = _("Next");
|
this.nextButton.label = _("Next");
|
||||||
this._preemptiveAnswer = null;
|
|
||||||
|
|
||||||
if (this._userVerifier)
|
if (this._userVerifier)
|
||||||
this._userVerifier.cancel();
|
this._userVerifier.cancel();
|
||||||
|
@@ -25,7 +25,6 @@ const GLib = imports.gi.GLib;
|
|||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
@@ -86,7 +85,8 @@ var UserListItem = new Lang.Class({
|
|||||||
GObject.BindingFlags.SYNC_CREATE);
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
|
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
|
||||||
scale_x: 0 });
|
scale_x: 0,
|
||||||
|
visible: false });
|
||||||
layout.add(this._timedLoginIndicator);
|
layout.add(this._timedLoginIndicator);
|
||||||
|
|
||||||
this.actor.connect('clicked', this._onClicked.bind(this));
|
this.actor.connect('clicked', this._onClicked.bind(this));
|
||||||
@@ -126,6 +126,8 @@ var UserListItem = new Lang.Class({
|
|||||||
|
|
||||||
this.hideTimedLoginIndicator();
|
this.hideTimedLoginIndicator();
|
||||||
|
|
||||||
|
this._timedLoginIndicator.visible = true;
|
||||||
|
|
||||||
let startTime = GLib.get_monotonic_time();
|
let startTime = GLib.get_monotonic_time();
|
||||||
|
|
||||||
this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33,
|
this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33,
|
||||||
@@ -152,6 +154,8 @@ var UserListItem = new Lang.Class({
|
|||||||
GLib.source_remove(this._timedLoginTimeoutId);
|
GLib.source_remove(this._timedLoginTimeoutId);
|
||||||
this._timedLoginTimeoutId = 0;
|
this._timedLoginTimeoutId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._timedLoginIndicator.visible = false;
|
||||||
this._timedLoginIndicator.scale_x = 0.;
|
this._timedLoginIndicator.scale_x = 0.;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -991,59 +995,81 @@ var LoginDialog = new Lang.Class({
|
|||||||
return hold;
|
return hold;
|
||||||
},
|
},
|
||||||
|
|
||||||
_showTimedLoginAnimation() {
|
|
||||||
this._timedLoginItem.actor.grab_key_focus();
|
|
||||||
return this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime);
|
|
||||||
},
|
|
||||||
|
|
||||||
_blockTimedLoginUntilIdle() {
|
_blockTimedLoginUntilIdle() {
|
||||||
// This blocks timed login from starting until a few
|
|
||||||
// seconds after the user stops interacting with the
|
|
||||||
// login screen.
|
|
||||||
//
|
|
||||||
// We skip this step if the timed login delay is very
|
|
||||||
// short.
|
|
||||||
if ((this._timedLoginDelay - _TIMED_LOGIN_IDLE_THRESHOLD) <= 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
let hold = new Batch.Hold();
|
let hold = new Batch.Hold();
|
||||||
|
|
||||||
this._timedLoginIdleTimeOutId = Mainloop.timeout_add_seconds(_TIMED_LOGIN_IDLE_THRESHOLD,
|
this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD,
|
||||||
() => {
|
() => {
|
||||||
this._timedLoginAnimationTime -= _TIMED_LOGIN_IDLE_THRESHOLD;
|
this._timedLoginIdleTimeOutId = 0;
|
||||||
hold.release();
|
hold.release();
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginAnimationTime');
|
GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginIdleTimeOutId');
|
||||||
return hold;
|
return hold;
|
||||||
},
|
},
|
||||||
|
|
||||||
_startTimedLogin(userName, delay) {
|
_startTimedLogin(userName, delay) {
|
||||||
this._timedLoginItem = null;
|
let firstRun = true;
|
||||||
this._timedLoginDelay = delay;
|
|
||||||
this._timedLoginAnimationTime = delay;
|
// Cancel execution of old batch
|
||||||
|
if (this._timedLoginBatch) {
|
||||||
|
this._timedLoginBatch.cancel();
|
||||||
|
this._timedLoginBatch = null;
|
||||||
|
firstRun = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset previous idle-timeout
|
||||||
|
if (this._timedLoginIdleTimeOutId) {
|
||||||
|
GLib.source_remove(this._timedLoginIdleTimeOutId);
|
||||||
|
this._timedLoginIdleTimeOutId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let loginItem = null;
|
||||||
|
let animationTime;
|
||||||
|
|
||||||
let tasks = [() => this._waitForItemForUser(userName),
|
let tasks = [() => this._waitForItemForUser(userName),
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
this._timedLoginItem = this._userList.getItemFromUserName(userName);
|
loginItem = this._userList.getItemFromUserName(userName);
|
||||||
|
|
||||||
|
// If there is an animation running on the item, reset it.
|
||||||
|
loginItem.hideTimedLoginIndicator();
|
||||||
},
|
},
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
// If we're just starting out, start on the right
|
// If we're just starting out, start on the right item.
|
||||||
// item.
|
|
||||||
if (!this._userManager.is_loaded) {
|
if (!this._userManager.is_loaded) {
|
||||||
this._userList.jumpToItem(this._timedLoginItem);
|
this._userList.jumpToItem(loginItem);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
this._blockTimedLoginUntilIdle,
|
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
this._userList.scrollToItem(this._timedLoginItem);
|
// This blocks the timed login animation until a few
|
||||||
|
// seconds after the user stops interacting with the
|
||||||
|
// login screen.
|
||||||
|
|
||||||
|
// We skip this step if the timed login delay is very short.
|
||||||
|
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD) {
|
||||||
|
animationTime = delay - _TIMED_LOGIN_IDLE_THRESHOLD;
|
||||||
|
return this._blockTimedLoginUntilIdle();
|
||||||
|
} else {
|
||||||
|
animationTime = delay;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
this._showTimedLoginAnimation,
|
() => {
|
||||||
|
// If idle timeout is done, make sure the timed login indicator is shown
|
||||||
|
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD &&
|
||||||
|
this._authPrompt.actor.visible)
|
||||||
|
this._authPrompt.cancel();
|
||||||
|
|
||||||
|
if (delay > _TIMED_LOGIN_IDLE_THRESHOLD || firstRun) {
|
||||||
|
this._userList.scrollToItem(loginItem);
|
||||||
|
loginItem.actor.grab_key_focus();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
() => loginItem.showTimedLoginIndicator(animationTime),
|
||||||
|
|
||||||
() => {
|
() => {
|
||||||
this._timedLoginBatch = null;
|
this._timedLoginBatch = null;
|
||||||
@@ -1055,37 +1081,17 @@ var LoginDialog = new Lang.Class({
|
|||||||
return this._timedLoginBatch.run();
|
return this._timedLoginBatch.run();
|
||||||
},
|
},
|
||||||
|
|
||||||
_resetTimedLogin() {
|
|
||||||
if (this._timedLoginBatch) {
|
|
||||||
this._timedLoginBatch.cancel();
|
|
||||||
this._timedLoginBatch = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._timedLoginItem)
|
|
||||||
this._timedLoginItem.hideTimedLoginIndicator();
|
|
||||||
|
|
||||||
let userName = this._timedLoginItem.user.get_user_name();
|
|
||||||
|
|
||||||
if (userName)
|
|
||||||
this._startTimedLogin(userName, this._timedLoginDelay);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onTimedLoginRequested(client, userName, seconds) {
|
_onTimedLoginRequested(client, userName, seconds) {
|
||||||
|
if (this._timedLoginBatch)
|
||||||
|
return;
|
||||||
|
|
||||||
this._startTimedLogin(userName, seconds);
|
this._startTimedLogin(userName, seconds);
|
||||||
|
|
||||||
|
// Restart timed login on user interaction
|
||||||
global.stage.connect('captured-event', (actor, event) => {
|
global.stage.connect('captured-event', (actor, event) => {
|
||||||
if (this._timedLoginDelay == undefined)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
if (event.type() == Clutter.EventType.KEY_PRESS ||
|
if (event.type() == Clutter.EventType.KEY_PRESS ||
|
||||||
event.type() == Clutter.EventType.BUTTON_PRESS) {
|
event.type() == Clutter.EventType.BUTTON_PRESS) {
|
||||||
if (this._timedLoginBatch) {
|
this._startTimedLogin(userName, seconds);
|
||||||
this._timedLoginBatch.cancel();
|
|
||||||
this._timedLoginBatch = null;
|
|
||||||
}
|
|
||||||
} else if (event.type() == Clutter.EventType.KEY_RELEASE ||
|
|
||||||
event.type() == Clutter.EventType.BUTTON_RELEASE) {
|
|
||||||
this._resetTimedLogin();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
@@ -534,13 +534,12 @@ var ShellUserVerifier = new Lang.Class({
|
|||||||
_verificationFailed(retry) {
|
_verificationFailed(retry) {
|
||||||
// For Not Listed / enterprise logins, immediately reset
|
// For Not Listed / enterprise logins, immediately reset
|
||||||
// the dialog
|
// the dialog
|
||||||
// Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
|
// Otherwise, we allow ALLOWED_FAILURES attempts. After that, we
|
||||||
// After that, we go back to the welcome screen.
|
// go back to the welcome screen.
|
||||||
|
|
||||||
this._failCounter++;
|
this._failCounter++;
|
||||||
let canRetry = retry && this._userName &&
|
let canRetry = retry && this._userName &&
|
||||||
(this._reauthOnly ||
|
this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY);
|
||||||
this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY));
|
|
||||||
|
|
||||||
if (canRetry) {
|
if (canRetry) {
|
||||||
if (!this.hasPendingMessages) {
|
if (!this.hasPendingMessages) {
|
||||||
@@ -563,7 +562,7 @@ var ShellUserVerifier = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.emit('verification-failed', canRetry);
|
this.emit('verification-failed');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onConversationStopped(client, serviceName) {
|
_onConversationStopped(client, serviceName) {
|
||||||
|
@@ -115,11 +115,6 @@ var IBusManager = new Lang.Class({
|
|||||||
object_path: IBus.PATH_PANEL });
|
object_path: IBus.PATH_PANEL });
|
||||||
this._candidatePopup.setPanelService(this._panelService);
|
this._candidatePopup.setPanelService(this._panelService);
|
||||||
this._panelService.connect('update-property', this._updateProperty.bind(this));
|
this._panelService.connect('update-property', this._updateProperty.bind(this));
|
||||||
this._panelService.connect('set-cursor-location', (ps, x, y, w, h) => {
|
|
||||||
let cursorLocation = { x, y, width: w, height: h };
|
|
||||||
this.emit('set-cursor-location', cursorLocation);
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// IBus versions older than 1.5.10 have a bug which
|
// IBus versions older than 1.5.10 have a bug which
|
||||||
// causes spurious set-content-type emissions when
|
// causes spurious set-content-type emissions when
|
||||||
@@ -205,7 +200,7 @@ var IBusManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
|
||||||
null, callback || null);
|
null, callback);
|
||||||
},
|
},
|
||||||
|
|
||||||
preloadEngines(ids) {
|
preloadEngines(ids) {
|
||||||
|
@@ -236,12 +236,11 @@ var ObjectManager = new Lang.Class({
|
|||||||
_onNameVanished() {
|
_onNameVanished() {
|
||||||
let objectPaths = Object.keys(this._objects);
|
let objectPaths = Object.keys(this._objects);
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
for (let i = 0; i < objectPaths.length; i++) {
|
||||||
let objectPath = objectPaths[i];
|
let object = this._objects[objectPaths];
|
||||||
let object = this._objects[objectPath];
|
|
||||||
|
|
||||||
let interfaceNames = Object.keys(object);
|
let interfaceNames = Object.keys(object);
|
||||||
for (let j = 0; j < interfaceNames.length; j++) {
|
for (let j = 0; i < interfaceNames.length; i++) {
|
||||||
let interfaceName = interfaceNames[j];
|
let interfaceName = interfaceNames[i];
|
||||||
|
|
||||||
if (object[interfaceName])
|
if (object[interfaceName])
|
||||||
this._removeInterface(objectPath, interfaceName);
|
this._removeInterface(objectPath, interfaceName);
|
||||||
|
@@ -136,8 +136,7 @@ function run() {
|
|||||||
global.frame_finish_timestamp = true;
|
global.frame_finish_timestamp = true;
|
||||||
|
|
||||||
for (let k = 0; k < 5; k++)
|
for (let k = 0; k < 5; k++)
|
||||||
yield Scripting.createTestWindow(640, 480,
|
yield Scripting.createTestWindow({ maximized: true });
|
||||||
{ maximized: true });
|
|
||||||
yield Scripting.waitTestWindows();
|
yield Scripting.waitTestWindows();
|
||||||
|
|
||||||
yield Scripting.sleep(1000);
|
yield Scripting.sleep(1000);
|
||||||
@@ -158,8 +157,7 @@ function run() {
|
|||||||
yield Scripting.destroyTestWindows();
|
yield Scripting.destroyTestWindows();
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
|
|
||||||
yield Scripting.createTestWindow(640, 480,
|
yield Scripting.createTestWindow({ maximized: true,
|
||||||
{ maximized: true,
|
|
||||||
redraws: true});
|
redraws: true});
|
||||||
yield Scripting.waitTestWindows();
|
yield Scripting.waitTestWindows();
|
||||||
|
|
||||||
|
@@ -802,8 +802,6 @@ var NotificationMessage = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this.parent();
|
|
||||||
|
|
||||||
if (this._updatedId)
|
if (this._updatedId)
|
||||||
this.notification.disconnect(this._updatedId);
|
this.notification.disconnect(this._updatedId);
|
||||||
this._updatedId = 0;
|
this._updatedId = 0;
|
||||||
@@ -823,8 +821,6 @@ var EventsSection = new Lang.Class({
|
|||||||
this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
|
this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
|
||||||
this._eventSource = new EmptyEventSource();
|
this._eventSource = new EmptyEventSource();
|
||||||
|
|
||||||
this._messageById = new Map();
|
|
||||||
|
|
||||||
this.parent();
|
this.parent();
|
||||||
|
|
||||||
this._title = new St.Button({ style_class: 'events-section-title',
|
this._title = new St.Button({ style_class: 'events-section-title',
|
||||||
@@ -879,32 +875,20 @@ var EventsSection = new Lang.Class({
|
|||||||
|
|
||||||
this._reloading = true;
|
this._reloading = true;
|
||||||
|
|
||||||
|
this._list.destroy_all_children();
|
||||||
|
|
||||||
let periodBegin = _getBeginningOfDay(this._date);
|
let periodBegin = _getBeginningOfDay(this._date);
|
||||||
let periodEnd = _getEndOfDay(this._date);
|
let periodEnd = _getEndOfDay(this._date);
|
||||||
let events = this._eventSource.getEvents(periodBegin, periodEnd);
|
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++) {
|
for (let i = 0; i < events.length; i++) {
|
||||||
let event = events[i];
|
let event = events[i];
|
||||||
|
|
||||||
let message = this._messageById.get(event.id);
|
let message = new EventMessage(event, this._date);
|
||||||
if (!message) {
|
message.connect('close', () => {
|
||||||
message = new EventMessage(event, this._date);
|
this._ignoreEvent(event);
|
||||||
message.connect('close', () => {
|
});
|
||||||
this._ignoreEvent(event);
|
this.addMessage(message, false);
|
||||||
});
|
|
||||||
this._messageById.set(event.id, message);
|
|
||||||
this.addMessage(message, false);
|
|
||||||
} else {
|
|
||||||
this.moveMessage(message, i, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._reloading = false;
|
this._reloading = false;
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
@@ -14,7 +13,6 @@ const Tweener = imports.ui.tweener;
|
|||||||
|
|
||||||
var FROZEN_WINDOW_BRIGHTNESS = -0.3
|
var FROZEN_WINDOW_BRIGHTNESS = -0.3
|
||||||
var DIALOG_TRANSITION_TIME = 0.15
|
var DIALOG_TRANSITION_TIME = 0.15
|
||||||
var ALIVE_TIMEOUT = 5000;
|
|
||||||
|
|
||||||
var CloseDialog = new Lang.Class({
|
var CloseDialog = new Lang.Class({
|
||||||
Name: 'CloseDialog',
|
Name: 'CloseDialog',
|
||||||
@@ -28,10 +26,6 @@ var CloseDialog = new Lang.Class({
|
|||||||
this.parent();
|
this.parent();
|
||||||
this._window = window;
|
this._window = window;
|
||||||
this._dialog = null;
|
this._dialog = null;
|
||||||
this._tracked = undefined;
|
|
||||||
this._timeoutId = 0;
|
|
||||||
this._windowFocusChangedId = 0;
|
|
||||||
this._keyFocusChangedId = 0;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
get window() {
|
get window() {
|
||||||
@@ -99,57 +93,10 @@ var CloseDialog = new Lang.Class({
|
|||||||
this.response(Meta.CloseDialogResponse.FORCE_CLOSE);
|
this.response(Meta.CloseDialogResponse.FORCE_CLOSE);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onFocusChanged() {
|
|
||||||
if (Meta.is_wayland_compositor())
|
|
||||||
return;
|
|
||||||
|
|
||||||
let focusWindow = global.display.focus_window;
|
|
||||||
let keyFocus = global.stage.key_focus;
|
|
||||||
|
|
||||||
let shouldTrack;
|
|
||||||
if (focusWindow != null)
|
|
||||||
shouldTrack = focusWindow == this._window;
|
|
||||||
else
|
|
||||||
shouldTrack = keyFocus && this._dialog.contains(keyFocus);
|
|
||||||
|
|
||||||
if (this._tracked === shouldTrack)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (shouldTrack)
|
|
||||||
Main.layoutManager.trackChrome(this._dialog,
|
|
||||||
{ affectsInputRegion: true });
|
|
||||||
else
|
|
||||||
Main.layoutManager.untrackChrome(this._dialog);
|
|
||||||
|
|
||||||
// The buttons are broken when they aren't added to the input region,
|
|
||||||
// so disable them properly in that case
|
|
||||||
this._dialog.buttonLayout.get_children().forEach(b => {
|
|
||||||
b.reactive = shouldTrack;
|
|
||||||
});
|
|
||||||
|
|
||||||
this._tracked = shouldTrack;
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_show() {
|
vfunc_show() {
|
||||||
if (this._dialog != null)
|
if (this._dialog != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Meta.disable_unredirect_for_screen(global.screen);
|
|
||||||
|
|
||||||
this._timeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, ALIVE_TIMEOUT,
|
|
||||||
() => {
|
|
||||||
this._window.check_alive(global.display.get_current_time_roundtrip());
|
|
||||||
return GLib.SOURCE_CONTINUE;
|
|
||||||
});
|
|
||||||
|
|
||||||
this._windowFocusChangedId =
|
|
||||||
global.display.connect('notify::focus-window',
|
|
||||||
this._onFocusChanged.bind(this));
|
|
||||||
|
|
||||||
this._keyFocusChangedId =
|
|
||||||
global.stage.connect('notify::key-focus',
|
|
||||||
this._onFocusChanged.bind(this));
|
|
||||||
|
|
||||||
this._addWindowEffect();
|
this._addWindowEffect();
|
||||||
this._initDialog();
|
this._initDialog();
|
||||||
|
|
||||||
@@ -160,7 +107,9 @@ var CloseDialog = new Lang.Class({
|
|||||||
{ scale_y: 1,
|
{ scale_y: 1,
|
||||||
transition: 'linear',
|
transition: 'linear',
|
||||||
time: DIALOG_TRANSITION_TIME,
|
time: DIALOG_TRANSITION_TIME,
|
||||||
onComplete: this._onFocusChanged.bind(this)
|
onComplete: () => {
|
||||||
|
Main.layoutManager.trackChrome(this._dialog, { affectsInputRegion: true });
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -168,17 +117,6 @@ var CloseDialog = new Lang.Class({
|
|||||||
if (this._dialog == null)
|
if (this._dialog == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Meta.enable_unredirect_for_screen(global.screen);
|
|
||||||
|
|
||||||
GLib.source_remove(this._timeoutId);
|
|
||||||
this._timeoutId = 0;
|
|
||||||
|
|
||||||
global.display.disconnect(this._windowFocusChangedId)
|
|
||||||
this._windowFocusChangedId = 0;
|
|
||||||
|
|
||||||
global.stage.disconnect(this._keyFocusChangedId);
|
|
||||||
this._keyFocusChangedId = 0;
|
|
||||||
|
|
||||||
let dialog = this._dialog;
|
let dialog = this._dialog;
|
||||||
this._dialog = null;
|
this._dialog = null;
|
||||||
this._removeWindowEffect();
|
this._removeWindowEffect();
|
||||||
|
@@ -210,10 +210,6 @@ var AutomountManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onVolumeRemoved(monitor, volume) {
|
_onVolumeRemoved(monitor, volume) {
|
||||||
if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) {
|
|
||||||
Mainloop.source_remove(volume._allowAutorunExpireId);
|
|
||||||
delete volume._allowAutorunExpireId;
|
|
||||||
}
|
|
||||||
this._volumeQueue =
|
this._volumeQueue =
|
||||||
this._volumeQueue.filter(element => (element != volume));
|
this._volumeQueue.filter(element => (element != volume));
|
||||||
},
|
},
|
||||||
@@ -238,10 +234,8 @@ var AutomountManager = new Lang.Class({
|
|||||||
_allowAutorunExpire(volume) {
|
_allowAutorunExpire(volume) {
|
||||||
let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => {
|
let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => {
|
||||||
volume.allowAutorun = false;
|
volume.allowAutorun = false;
|
||||||
delete volume._allowAutorunExpireId;
|
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
});
|
});
|
||||||
volume._allowAutorunExpireId = id;
|
|
||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
|
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -604,12 +604,17 @@ var NetworkAgent = new Lang.Class({
|
|||||||
|
|
||||||
this._native.connect('new-request', this._newRequest.bind(this));
|
this._native.connect('new-request', this._newRequest.bind(this));
|
||||||
this._native.connect('cancel-request', this._cancelRequest.bind(this));
|
this._native.connect('cancel-request', this._cancelRequest.bind(this));
|
||||||
try {
|
|
||||||
this._native.init(null);
|
this._initialized = false;
|
||||||
} catch(e) {
|
this._native.init_async(GLib.PRIORITY_DEFAULT, null, (o, res) => {
|
||||||
this._native = null;
|
try {
|
||||||
logError(e, 'error initializing the NetworkManager Agent');
|
this._native.init_finish(res);
|
||||||
}
|
this._initialized = true;
|
||||||
|
} catch(e) {
|
||||||
|
this._native = null;
|
||||||
|
logError(e, 'error initializing the NetworkManager Agent');
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
@@ -617,7 +622,7 @@ var NetworkAgent = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._native.auto_register = true;
|
this._native.auto_register = true;
|
||||||
if (!this._native.registered)
|
if (this._initialized && !this._native.registered)
|
||||||
this._native.register_async(null, null);
|
this._native.register_async(null, null);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -640,7 +645,7 @@ var NetworkAgent = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._native.auto_register = false;
|
this._native.auto_register = false;
|
||||||
if (this._native.registered)
|
if (this._initialized && this._native.registered)
|
||||||
this._native.unregister_async(null, null);
|
this._native.unregister_async(null, null);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -52,8 +52,6 @@ var DashItemContainer = new Lang.Class({
|
|||||||
this.animatingOut = false;
|
this.animatingOut = false;
|
||||||
|
|
||||||
this.connect('destroy', () => {
|
this.connect('destroy', () => {
|
||||||
if (this.child != null)
|
|
||||||
this.child.destroy();
|
|
||||||
this.label.destroy();
|
this.label.destroy();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@@ -183,7 +183,7 @@ var MessageDialogContent = new Lang.Class({
|
|||||||
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
|
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
|
let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
|
||||||
line_wrap: true };
|
line_wrap: true };
|
||||||
Object.assign(this._subtitle.clutter_text, textProps);
|
Object.assign(this._subtitle.clutter_text, textProps);
|
||||||
Object.assign(this._body.clutter_text, textProps);
|
Object.assign(this._body.clutter_text, textProps);
|
||||||
|
32
js/ui/dnd.js
32
js/ui/dnd.js
@@ -125,16 +125,6 @@ var _Draggable = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onTouchEvent(actor, event) {
|
_onTouchEvent(actor, event) {
|
||||||
// Here we only handle touch events on wayland. On X11
|
|
||||||
// we do get emulated pointer events, which already works
|
|
||||||
// for single-touch cases. Besides, the X11 passive touch grab
|
|
||||||
// set up by Mutter will make us see first the touch events
|
|
||||||
// and later the pointer events, so it will look like two
|
|
||||||
// unrelated series of events, we want to avoid double handling
|
|
||||||
// in these cases.
|
|
||||||
if (!Meta.is_wayland_compositor())
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
|
if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
|
||||||
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
@@ -406,15 +396,10 @@ var _Draggable = new Lang.Class({
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_pickTargetActor() {
|
|
||||||
return this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
|
|
||||||
this._dragX, this._dragY);
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateDragHover() {
|
_updateDragHover() {
|
||||||
this._updateHoverId = 0;
|
this._updateHoverId = 0;
|
||||||
let target = this._pickTargetActor();
|
let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
|
||||||
|
this._dragX, this._dragY);
|
||||||
let dragEvent = {
|
let dragEvent = {
|
||||||
x: this._dragX,
|
x: this._dragX,
|
||||||
y: this._dragY,
|
y: this._dragY,
|
||||||
@@ -422,18 +407,6 @@ var _Draggable = new Lang.Class({
|
|||||||
source: this.actor._delegate,
|
source: this.actor._delegate,
|
||||||
targetActor: target
|
targetActor: target
|
||||||
};
|
};
|
||||||
|
|
||||||
let targetActorDestroyHandlerId;
|
|
||||||
let handleTargetActorDestroyClosure;
|
|
||||||
handleTargetActorDestroyClosure = () => {
|
|
||||||
target = this._pickTargetActor();
|
|
||||||
dragEvent.targetActor = target;
|
|
||||||
targetActorDestroyHandlerId =
|
|
||||||
target.connect('destroy', handleTargetActorDestroyClosure);
|
|
||||||
};
|
|
||||||
targetActorDestroyHandlerId =
|
|
||||||
target.connect('destroy', handleTargetActorDestroyClosure);
|
|
||||||
|
|
||||||
for (let i = 0; i < dragMonitors.length; i++) {
|
for (let i = 0; i < dragMonitors.length; i++) {
|
||||||
let motionFunc = dragMonitors[i].dragMotion;
|
let motionFunc = dragMonitors[i].dragMotion;
|
||||||
if (motionFunc) {
|
if (motionFunc) {
|
||||||
@@ -444,7 +417,6 @@ var _Draggable = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dragEvent.targetActor.disconnect(targetActorDestroyHandlerId);
|
|
||||||
|
|
||||||
while (target) {
|
while (target) {
|
||||||
if (target._delegate && target._delegate.handleDragOver) {
|
if (target._delegate && target._delegate.handleDragOver) {
|
||||||
|
@@ -760,7 +760,7 @@ var EndSessionDialog = new Lang.Class({
|
|||||||
let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
|
let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
|
||||||
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
|
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
|
||||||
|
|
||||||
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || '');
|
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
|
||||||
this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed);
|
this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed);
|
||||||
this._checkBox.actor.checked = (updatePrepared && updateTriggered);
|
this._checkBox.actor.checked = (updatePrepared && updateTriggered);
|
||||||
|
|
||||||
|
@@ -76,7 +76,6 @@ function disableExtension(uuid) {
|
|||||||
if (extension.stylesheet) {
|
if (extension.stylesheet) {
|
||||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||||
theme.unload_stylesheet(extension.stylesheet);
|
theme.unload_stylesheet(extension.stylesheet);
|
||||||
delete extension.stylesheet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -116,18 +115,13 @@ function enableExtension(uuid) {
|
|||||||
extensionOrder.push(uuid);
|
extensionOrder.push(uuid);
|
||||||
|
|
||||||
let stylesheetNames = [global.session_mode + '.css', 'stylesheet.css'];
|
let stylesheetNames = [global.session_mode + '.css', 'stylesheet.css'];
|
||||||
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
|
||||||
for (let i = 0; i < stylesheetNames.length; i++) {
|
for (let i = 0; i < stylesheetNames.length; i++) {
|
||||||
try {
|
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
|
||||||
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
|
if (stylesheetFile.query_exists(null)) {
|
||||||
|
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
|
||||||
theme.load_stylesheet(stylesheetFile);
|
theme.load_stylesheet(stylesheetFile);
|
||||||
extension.stylesheet = stylesheetFile;
|
extension.stylesheet = stylesheetFile;
|
||||||
break;
|
break;
|
||||||
} catch (e) {
|
|
||||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
|
|
||||||
continue; // not an error
|
|
||||||
log(`Failed to load stylesheet for extension ${uuid}: ${e.message}`);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,10 +131,6 @@ function enableExtension(uuid) {
|
|||||||
_signals.emit('extension-state-changed', extension);
|
_signals.emit('extension-state-changed', extension);
|
||||||
return;
|
return;
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
if (extension.stylesheet) {
|
|
||||||
theme.unload_stylesheet(extension.stylesheet);
|
|
||||||
delete extension.stylesheet;
|
|
||||||
}
|
|
||||||
logExtensionError(uuid, e);
|
logExtensionError(uuid, e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -166,7 +166,7 @@ var CandidatePopup = new Lang.Class({
|
|||||||
this._panelService.cursor_down();
|
this._panelService.cursor_down();
|
||||||
});
|
});
|
||||||
|
|
||||||
this._candidateArea.connect('candidate-clicked', () => {
|
this._candidateArea.connect('candidate-clicked', (area, index, button, state) => {
|
||||||
this._panelService.candidate_clicked(index, button, state);
|
this._panelService.candidate_clicked(index, button, state);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -418,11 +418,6 @@ var IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_animationDone() {
|
_animationDone() {
|
||||||
this._clonesAnimating.forEach(clone => {
|
|
||||||
clone.source.reactive = true;
|
|
||||||
clone.source.opacity = 255;
|
|
||||||
clone.destroy();
|
|
||||||
});
|
|
||||||
this._clonesAnimating = [];
|
this._clonesAnimating = [];
|
||||||
this.emit('animation-done');
|
this.emit('animation-done');
|
||||||
},
|
},
|
||||||
@@ -543,6 +538,10 @@ var IconGrid = new Lang.Class({
|
|||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (isLastItem)
|
if (isLastItem)
|
||||||
this._animationDone();
|
this._animationDone();
|
||||||
|
|
||||||
|
actor.opacity = 255;
|
||||||
|
actor.reactive = true;
|
||||||
|
actorClone.destroy();
|
||||||
}};
|
}};
|
||||||
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
||||||
transition: 'easeInOutQuad',
|
transition: 'easeInOutQuad',
|
||||||
@@ -563,8 +562,12 @@ var IconGrid = new Lang.Class({
|
|||||||
scale_x: scaleX,
|
scale_x: scaleX,
|
||||||
scale_y: scaleY,
|
scale_y: scaleY,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
if (isLastItem)
|
if (isLastItem) {
|
||||||
this._animationDone();
|
this._animationDone();
|
||||||
|
this._restoreItemsOpacity();
|
||||||
|
}
|
||||||
|
actor.reactive = true;
|
||||||
|
actorClone.destroy();
|
||||||
}};
|
}};
|
||||||
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
|
||||||
transition: 'easeInOutQuad',
|
transition: 'easeInOutQuad',
|
||||||
@@ -578,6 +581,12 @@ var IconGrid = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_restoreItemsOpacity() {
|
||||||
|
for (let index = 0; index < this._items.length; index++) {
|
||||||
|
this._items[index].actor.opacity = 255;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_getAllocatedChildSizeAndSpacing(child) {
|
_getAllocatedChildSizeAndSpacing(child) {
|
||||||
let [,, natWidth, natHeight] = child.get_preferred_size();
|
let [,, natWidth, natHeight] = child.get_preferred_size();
|
||||||
let width = Math.min(this._getHItemSize(), natWidth);
|
let width = Math.min(this._getHItemSize(), natWidth);
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const FocusCaretTracker = imports.ui.focusCaretTracker;
|
||||||
const Atspi = imports.gi.Atspi;
|
const Atspi = imports.gi.Atspi;
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gdk = imports.gi.Gdk;
|
const Gdk = imports.gi.Gdk;
|
||||||
@@ -12,7 +13,6 @@ const Signals = imports.signals;
|
|||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const InputSourceManager = imports.ui.status.keyboard;
|
const InputSourceManager = imports.ui.status.keyboard;
|
||||||
|
|
||||||
const IBusManager = imports.misc.ibusManager;
|
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const Layout = imports.ui.layout;
|
const Layout = imports.ui.layout;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@@ -261,7 +261,6 @@ var Key = new Lang.Class({
|
|||||||
this._extended_keyboard = null;
|
this._extended_keyboard = null;
|
||||||
this._pressTimeoutId = 0;
|
this._pressTimeoutId = 0;
|
||||||
this._capturedPress = false;
|
this._capturedPress = false;
|
||||||
|
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
this._unmapId = 0;
|
this._unmapId = 0;
|
||||||
this._longPress = false;
|
this._longPress = false;
|
||||||
@@ -485,79 +484,6 @@ var KeyboardModel = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var FocusTracker = new Lang.Class({
|
|
||||||
Name: 'FocusTracker',
|
|
||||||
|
|
||||||
_init() {
|
|
||||||
this._currentWindow = null;
|
|
||||||
this._currentWindowPositionId = 0;
|
|
||||||
|
|
||||||
global.screen.get_display().connect('notify::focus-window', () => {
|
|
||||||
this._setCurrentWindow(global.screen.get_display().focus_window);
|
|
||||||
this.emit('window-changed', this._currentWindow);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* Valid for wayland clients */
|
|
||||||
Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
|
|
||||||
let newRect = { x: rect.get_x(), y: rect.get_y(), width: rect.get_width(), height: rect.get_height() };
|
|
||||||
this._setCurrentRect(newRect);
|
|
||||||
});
|
|
||||||
|
|
||||||
this._ibusManager = IBusManager.getIBusManager();
|
|
||||||
this._ibusManager.connect('set-cursor-location', (manager, rect) => {
|
|
||||||
/* Valid for X11 clients only */
|
|
||||||
if (Main.inputMethod.currentFocus)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._setCurrentRect(rect);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
get currentWindow() {
|
|
||||||
return this._currentWindow;
|
|
||||||
},
|
|
||||||
|
|
||||||
_setCurrentWindow(window) {
|
|
||||||
if (this._currentWindow)
|
|
||||||
this._currentWindow.disconnect(this._currentWindowPositionId);
|
|
||||||
|
|
||||||
this._currentWindow = window;
|
|
||||||
if (window) {
|
|
||||||
this._currentWindowPositionId = this._currentWindow.connect('position-changed', () => {
|
|
||||||
if (global.display.get_grab_op() == Meta.GrabOp.NONE)
|
|
||||||
this.emit('position-changed');
|
|
||||||
else
|
|
||||||
this.emit('reset');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_setCurrentRect(rect) {
|
|
||||||
if (this._currentWindow) {
|
|
||||||
let frameRect = this._currentWindow.get_frame_rect();
|
|
||||||
rect.x -= frameRect.x;
|
|
||||||
rect.y -= frameRect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._rect = rect;
|
|
||||||
this.emit('position-changed');
|
|
||||||
},
|
|
||||||
|
|
||||||
getCurrentRect() {
|
|
||||||
let rect = { x: this._rect.x, y: this._rect.y,
|
|
||||||
width: this._rect.width, height: this._rect.height };
|
|
||||||
|
|
||||||
if (this._currentWindow) {
|
|
||||||
let frameRect = this._currentWindow.get_frame_rect();
|
|
||||||
rect.x += frameRect.x;
|
|
||||||
rect.y += frameRect.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rect;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(FocusTracker.prototype);
|
|
||||||
|
|
||||||
var Keyboard = new Lang.Class({
|
var Keyboard = new Lang.Class({
|
||||||
Name: 'Keyboard',
|
Name: 'Keyboard',
|
||||||
|
|
||||||
@@ -565,10 +491,15 @@ var Keyboard = new Lang.Class({
|
|||||||
this.actor = null;
|
this.actor = null;
|
||||||
this._focusInExtendedKeys = false;
|
this._focusInExtendedKeys = false;
|
||||||
|
|
||||||
|
this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
|
||||||
|
this._focusCaretTracker.connect('focus-changed', this._onFocusChanged.bind(this));
|
||||||
|
this._focusCaretTracker.connect('caret-moved', this._onCaretMoved.bind(this));
|
||||||
this._languagePopup = null;
|
this._languagePopup = null;
|
||||||
|
this._currentAccessible = null;
|
||||||
|
this._caretTrackingEnabled = false;
|
||||||
|
this._updateCaretPositionId = 0;
|
||||||
this._currentFocusWindow = null;
|
this._currentFocusWindow = null;
|
||||||
this._animFocusedWindow = null;
|
this._originalWindowY = null;
|
||||||
this._delayedAnimFocusWindow = null;
|
|
||||||
|
|
||||||
this._enableKeyboard = false; // a11y settings value
|
this._enableKeyboard = false; // a11y settings value
|
||||||
this._enabled = false; // enabled state (by setting or device type)
|
this._enabled = false; // enabled state (by setting or device type)
|
||||||
@@ -579,14 +510,6 @@ var Keyboard = new Lang.Class({
|
|||||||
this._lastDeviceId = null;
|
this._lastDeviceId = null;
|
||||||
this._suggestions = null;
|
this._suggestions = null;
|
||||||
|
|
||||||
this._focusTracker = new FocusTracker();
|
|
||||||
this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this));
|
|
||||||
this._focusTracker.connect('reset', () => {
|
|
||||||
this._delayedAnimFocusWindow = null;
|
|
||||||
this._animFocusedWindow = null;
|
|
||||||
this._oskFocusWindow = null;
|
|
||||||
});
|
|
||||||
|
|
||||||
Meta.get_backend().connect('last-device-changed',
|
Meta.get_backend().connect('last-device-changed',
|
||||||
(backend, deviceId) => {
|
(backend, deviceId) => {
|
||||||
let manager = Clutter.DeviceManager.get_default();
|
let manager = Clutter.DeviceManager.get_default();
|
||||||
@@ -609,15 +532,102 @@ var Keyboard = new Lang.Class({
|
|||||||
this._keyboardRestingId = 0;
|
this._keyboardRestingId = 0;
|
||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
|
Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
|
||||||
|
//Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
|
||||||
|
// if (this._keyboardVisible) {
|
||||||
|
// let currentWindow = global.screen.get_display().focus_window;
|
||||||
|
// this.setCursorLocation(currentWindow, rect.get_x(), rect.get_y(),
|
||||||
|
// rect.get_width(), rect.get_height());
|
||||||
|
// }
|
||||||
|
//});
|
||||||
},
|
},
|
||||||
|
|
||||||
get visible() {
|
get visible() {
|
||||||
return this._keyboardVisible;
|
return this._keyboardVisible;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onFocusPositionChanged(focusTracker) {
|
_setCaretTrackerEnabled(enabled) {
|
||||||
let rect = focusTracker.getCurrentRect();
|
if (this._caretTrackingEnabled == enabled)
|
||||||
this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
|
return;
|
||||||
|
|
||||||
|
this._caretTrackingEnabled = enabled;
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
this._focusCaretTracker.registerFocusListener();
|
||||||
|
this._focusCaretTracker.registerCaretListener();
|
||||||
|
} else {
|
||||||
|
this._focusCaretTracker.deregisterFocusListener();
|
||||||
|
this._focusCaretTracker.deregisterCaretListener();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateCaretPosition(accessible) {
|
||||||
|
if (this._updateCaretPositionId)
|
||||||
|
GLib.source_remove(this._updateCaretPositionId);
|
||||||
|
if (!this._keyboardRequested)
|
||||||
|
return;
|
||||||
|
this._updateCaretPositionId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
|
||||||
|
this._updateCaretPositionId = 0;
|
||||||
|
|
||||||
|
let currentWindow = global.screen.get_display().focus_window;
|
||||||
|
if (!currentWindow) {
|
||||||
|
this.setCursorLocation(null);
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
let windowRect = currentWindow.get_frame_rect();
|
||||||
|
let text = accessible.get_text_iface();
|
||||||
|
let component = accessible.get_component_iface();
|
||||||
|
|
||||||
|
try {
|
||||||
|
let caretOffset = text.get_caret_offset();
|
||||||
|
let caretRect = text.get_character_extents(caretOffset, Atspi.CoordType.WINDOW);
|
||||||
|
let focusRect = component.get_extents(Atspi.CoordType.WINDOW);
|
||||||
|
|
||||||
|
if (caretRect.width == 0 && caretRect.height == 0)
|
||||||
|
caretRect = focusRect;
|
||||||
|
|
||||||
|
this.setCursorLocation(currentWindow, caretRect.x, caretRect.y, caretRect.width, caretRect.height);
|
||||||
|
} catch (e) {
|
||||||
|
log('Error updating caret position for OSK: ' + e.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
});
|
||||||
|
|
||||||
|
GLib.Source.set_name_by_id(this._updateCaretPositionId, '[gnome-shell] this._updateCaretPosition');
|
||||||
|
},
|
||||||
|
|
||||||
|
_focusIsTextEntry(accessible) {
|
||||||
|
try {
|
||||||
|
let role = accessible.get_role();
|
||||||
|
let stateSet = accessible.get_state_set();
|
||||||
|
return stateSet.contains(Atspi.StateType.EDITABLE) || role == Atspi.Role.TERMINAL;
|
||||||
|
} catch (e) {
|
||||||
|
log('Error determining accessible role: ' + e.message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onFocusChanged(caretTracker, event) {
|
||||||
|
let accessible = event.source;
|
||||||
|
if (!this._focusIsTextEntry(accessible))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let focused = event.detail1 != 0;
|
||||||
|
if (focused) {
|
||||||
|
this._currentAccessible = accessible;
|
||||||
|
this._updateCaretPosition(accessible);
|
||||||
|
this.show(Main.layoutManager.focusIndex);
|
||||||
|
} else if (this._currentAccessible == accessible) {
|
||||||
|
this._currentAccessible = null;
|
||||||
|
this.hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onCaretMoved(caretTracker, event) {
|
||||||
|
let accessible = event.source;
|
||||||
|
if (this._currentAccessible == accessible)
|
||||||
|
this._updateCaretPosition(accessible);
|
||||||
},
|
},
|
||||||
|
|
||||||
_lastDeviceIsTouchscreen() {
|
_lastDeviceIsTouchscreen() {
|
||||||
@@ -640,6 +650,8 @@ var Keyboard = new Lang.Class({
|
|||||||
if (!this._enabled && !this._keyboardController)
|
if (!this._enabled && !this._keyboardController)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._setCaretTrackerEnabled(this._enabled);
|
||||||
|
|
||||||
if (this._enabled && !this._keyboardController)
|
if (this._enabled && !this._keyboardController)
|
||||||
this._setupKeyboard();
|
this._setupKeyboard();
|
||||||
else if (!this._enabled)
|
else if (!this._enabled)
|
||||||
@@ -924,11 +936,9 @@ var Keyboard = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_relayout() {
|
_relayout() {
|
||||||
let monitor = Main.layoutManager.keyboardMonitor;
|
if (this.actor == null)
|
||||||
|
|
||||||
if (this.actor == null || monitor == null)
|
|
||||||
return;
|
return;
|
||||||
|
let monitor = Main.layoutManager.keyboardMonitor;
|
||||||
let maxHeight = monitor.height / 3;
|
let maxHeight = monitor.height / 3;
|
||||||
this.actor.width = monitor.width;
|
this.actor.width = monitor.width;
|
||||||
this.actor.height = maxHeight;
|
this.actor.height = maxHeight;
|
||||||
@@ -1017,14 +1027,11 @@ var Keyboard = new Lang.Class({
|
|||||||
if (!this._keyboardRequested)
|
if (!this._keyboardRequested)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (this._currentAccessible)
|
||||||
|
this._updateCaretPosition(this._currentAccessible);
|
||||||
Main.layoutManager.keyboardIndex = monitor;
|
Main.layoutManager.keyboardIndex = monitor;
|
||||||
this._relayout();
|
this._relayout();
|
||||||
Main.layoutManager.showKeyboard();
|
Main.layoutManager.showKeyboard();
|
||||||
|
|
||||||
if (this._delayedAnimFocusWindow) {
|
|
||||||
this._setAnimationWindow(this._delayedAnimFocusWindow);
|
|
||||||
this._delayedAnimFocusWindow = null;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
hide() {
|
hide() {
|
||||||
@@ -1095,9 +1102,8 @@ var Keyboard = new Lang.Class({
|
|||||||
window.move_frame(true, frameRect.x, frameRect.y);
|
window.move_frame(true, frameRect.x, frameRect.y);
|
||||||
},
|
},
|
||||||
|
|
||||||
_animateWindow(window, show) {
|
_animateWindow(window, show, deltaY) {
|
||||||
let windowActor = window.get_compositor_private();
|
let windowActor = window.get_compositor_private();
|
||||||
let deltaY = Main.layoutManager.keyboardBox.height;
|
|
||||||
if (!windowActor)
|
if (!windowActor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -1118,39 +1124,35 @@ var Keyboard = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_setAnimationWindow(window) {
|
setCursorLocation(window, x, y , w, h) {
|
||||||
if (this._animFocusedWindow == window)
|
if (window == this._oskFocusWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._animFocusedWindow)
|
if (this._oskFocusWindow) {
|
||||||
this._animateWindow(this._animFocusedWindow, false);
|
let display = global.screen.get_display();
|
||||||
if (window)
|
|
||||||
this._animateWindow(window, true);
|
|
||||||
|
|
||||||
this._animFocusedWindow = window;
|
if (display.get_grab_op() == Meta.GrabOp.NONE ||
|
||||||
},
|
display.get_focus_window() != this._oskFocusWindow)
|
||||||
|
this._animateWindow(this._oskFocusWindow, false, this._oskFocusWindowDelta);
|
||||||
|
|
||||||
setCursorLocation(window, x, y , w, h) {
|
this._oskFocusWindow = null;
|
||||||
let monitor = Main.layoutManager.keyboardMonitor;
|
this._oskFocusWindowDelta = null;
|
||||||
|
|
||||||
if (window && monitor) {
|
|
||||||
let keyboardHeight = Main.layoutManager.keyboardBox.height;
|
|
||||||
let focusObscured = false;
|
|
||||||
|
|
||||||
if (y + h >= monitor.y + monitor.height - keyboardHeight) {
|
|
||||||
if (this._keyboardVisible)
|
|
||||||
this._setAnimationWindow(window);
|
|
||||||
else
|
|
||||||
this._delayedAnimFocusWindow = window;
|
|
||||||
} else if (y < keyboardHeight) {
|
|
||||||
this._delayedAnimFocusWindow = null;
|
|
||||||
this._setAnimationWindow(null);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this._setAnimationWindow(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this._oskFocusWindow = window;
|
if (window) {
|
||||||
|
let monitor = Main.layoutManager.keyboardMonitor;
|
||||||
|
let keyboardHeight = Main.layoutManager.keyboardBox.height;
|
||||||
|
let frameRect = window.get_frame_rect();
|
||||||
|
let windowActor = window.get_compositor_private();
|
||||||
|
let delta = 0;
|
||||||
|
|
||||||
|
if (frameRect.y + y + h >= monitor.height - keyboardHeight)
|
||||||
|
delta = keyboardHeight;
|
||||||
|
|
||||||
|
this._animateWindow(window, true, delta);
|
||||||
|
this._oskFocusWindow = window;
|
||||||
|
this._oskFocusWindowDelta = delta;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -203,7 +203,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
|
|
||||||
// Set up stage hierarchy to group all UI actors under one container.
|
// Set up stage hierarchy to group all UI actors under one container.
|
||||||
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
|
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
|
||||||
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
|
||||||
this.uiGroup.connect('allocate', (actor, box, flags) => {
|
this.uiGroup.connect('allocate', (actor, box, flags) => {
|
||||||
let children = actor.get_children();
|
let children = actor.get_children();
|
||||||
for (let i = 0; i < children.length; i++)
|
for (let i = 0; i < children.length; i++)
|
||||||
@@ -558,8 +557,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
get focusMonitor() {
|
get focusMonitor() {
|
||||||
if (this.focusIndex < 0)
|
|
||||||
return null;
|
|
||||||
return this.monitors[this.focusIndex];
|
return this.monitors[this.focusIndex];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -19,6 +19,7 @@ const MagnifierDBus = imports.ui.magnifierDBus;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const PointerWatcher = imports.ui.pointerWatcher;
|
const PointerWatcher = imports.ui.pointerWatcher;
|
||||||
|
|
||||||
|
var MOUSE_POLL_FREQUENCY = 50;
|
||||||
var CROSSHAIRS_CLIP_SIZE = [100, 100];
|
var CROSSHAIRS_CLIP_SIZE = [100, 100];
|
||||||
var NO_CHANGE = 0.0;
|
var NO_CHANGE = 0.0;
|
||||||
|
|
||||||
@@ -151,10 +152,8 @@ var Magnifier = new Lang.Class({
|
|||||||
* Turn on mouse tracking, if not already doing so.
|
* Turn on mouse tracking, if not already doing so.
|
||||||
*/
|
*/
|
||||||
startTrackingMouse() {
|
startTrackingMouse() {
|
||||||
if (!this._pointerWatch) {
|
if (!this._pointerWatch)
|
||||||
let interval = 1000 / Clutter.get_default_frame_rate();
|
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(MOUSE_POLL_FREQUENCY, this.scrollToMousePos.bind(this));
|
||||||
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this));
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -343,9 +343,6 @@ function loadTheme() {
|
|||||||
let theme = new St.Theme ({ application_stylesheet: _cssStylesheet,
|
let theme = new St.Theme ({ application_stylesheet: _cssStylesheet,
|
||||||
default_stylesheet: _defaultCssStylesheet });
|
default_stylesheet: _defaultCssStylesheet });
|
||||||
|
|
||||||
if (theme.default_stylesheet == null)
|
|
||||||
throw new Error("No valid stylesheet found for '%s'".format(sessionMode.stylesheetName));
|
|
||||||
|
|
||||||
if (previousTheme) {
|
if (previousTheme) {
|
||||||
let customStylesheets = previousTheme.get_custom_stylesheets();
|
let customStylesheets = previousTheme.get_custom_stylesheets();
|
||||||
|
|
||||||
|
@@ -362,8 +362,7 @@ var Message = new Lang.Class({
|
|||||||
this.setBody(body);
|
this.setBody(body);
|
||||||
|
|
||||||
this._closeButton.connect('clicked', this.close.bind(this));
|
this._closeButton.connect('clicked', this.close.bind(this));
|
||||||
let actorHoverId = this.actor.connect('notify::hover', this._sync.bind(this));
|
this.actor.connect('notify::hover', this._sync.bind(this));
|
||||||
this._closeButton.connect('destroy', this.actor.disconnect.bind(this.actor, actorHoverId));
|
|
||||||
this.actor.connect('clicked', this._onClicked.bind(this));
|
this.actor.connect('clicked', this._onClicked.bind(this));
|
||||||
this.actor.connect('destroy', this._onDestroy.bind(this));
|
this.actor.connect('destroy', this._onDestroy.bind(this));
|
||||||
this._sync();
|
this._sync();
|
||||||
|
@@ -1320,7 +1320,6 @@ var MessageTray = new Lang.Class({
|
|||||||
this._bannerBin.y = -this._banner.actor.height;
|
this._bannerBin.y = -this._banner.actor.height;
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
Meta.disable_unredirect_for_screen(global.screen);
|
|
||||||
this._updateShowingNotification();
|
this._updateShowingNotification();
|
||||||
|
|
||||||
let [x, y, mods] = global.get_pointer();
|
let [x, y, mods] = global.get_pointer();
|
||||||
@@ -1458,7 +1457,6 @@ var MessageTray = new Lang.Class({
|
|||||||
|
|
||||||
this._pointerInNotification = false;
|
this._pointerInNotification = false;
|
||||||
this._notificationRemoved = false;
|
this._notificationRemoved = false;
|
||||||
Meta.enable_unredirect_for_screen(global.screen);
|
|
||||||
|
|
||||||
this._banner.actor.destroy();
|
this._banner.actor.destroy();
|
||||||
this._banner = null;
|
this._banner = null;
|
||||||
|
@@ -117,8 +117,10 @@ var FdoNotificationDaemon = new Lang.Class({
|
|||||||
bitsPerSample, nChannels, data] = hints['image-data'];
|
bitsPerSample, nChannels, data] = hints['image-data'];
|
||||||
return Shell.util_create_pixbuf_from_data(data, GdkPixbuf.Colorspace.RGB, hasAlpha,
|
return Shell.util_create_pixbuf_from_data(data, GdkPixbuf.Colorspace.RGB, hasAlpha,
|
||||||
bitsPerSample, width, height, rowStride);
|
bitsPerSample, width, height, rowStride);
|
||||||
|
} else if (hints['image-path']) {
|
||||||
|
return new Gio.FileIcon({ file: Gio.File.new_for_path(hints['image-path']) });
|
||||||
}
|
}
|
||||||
return this._iconForNotificationData(hints['image-path']);
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_fallbackIconForNotificationData(hints) {
|
_fallbackIconForNotificationData(hints) {
|
||||||
|
@@ -108,30 +108,15 @@ var OsdWindow = new Lang.Class({
|
|||||||
this._hideTimeoutId = 0;
|
this._hideTimeoutId = 0;
|
||||||
this._reset();
|
this._reset();
|
||||||
|
|
||||||
this.actor.connect('destroy', this._onDestroy.bind(this));
|
Main.layoutManager.connect('monitors-changed',
|
||||||
|
this._relayout.bind(this));
|
||||||
this._monitorsChangedId =
|
|
||||||
Main.layoutManager.connect('monitors-changed',
|
|
||||||
this._relayout.bind(this));
|
|
||||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||||
this._scaleChangedId =
|
themeContext.connect('notify::scale-factor',
|
||||||
themeContext.connect('notify::scale-factor',
|
this._relayout.bind(this));
|
||||||
this._relayout.bind(this));
|
|
||||||
this._relayout();
|
this._relayout();
|
||||||
Main.uiGroup.add_child(this.actor);
|
Main.uiGroup.add_child(this.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
if (this._monitorsChangedId)
|
|
||||||
Main.layoutManager.disconnect(this._monitorsChangedId);
|
|
||||||
this._monitorsChangedId = 0;
|
|
||||||
|
|
||||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
|
||||||
if (this._scaleChangedId)
|
|
||||||
themeContext.disconnect(this._scaleChangedId);
|
|
||||||
this._scaleChangedId = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
setIcon(icon) {
|
setIcon(icon) {
|
||||||
this._icon.gicon = icon;
|
this._icon.gicon = icon;
|
||||||
},
|
},
|
||||||
|
@@ -393,8 +393,10 @@ var Overview = new Lang.Class({
|
|||||||
if (!Main.layoutManager.primaryMonitor)
|
if (!Main.layoutManager.primaryMonitor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._coverPane.set_position(0, 0);
|
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
||||||
this._coverPane.set_size(global.screen_width, global.screen_height);
|
|
||||||
|
this._coverPane.set_position(0, workArea.y);
|
||||||
|
this._coverPane.set_size(workArea.width, workArea.height);
|
||||||
|
|
||||||
this._updateBackgrounds();
|
this._updateBackgrounds();
|
||||||
},
|
},
|
||||||
|
@@ -284,11 +284,6 @@ var ThumbnailsSlider = new Lang.Class({
|
|||||||
return child.get_theme_node().get_length('visible-width');
|
return child.get_theme_node().get_length('visible-width');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDragEnd() {
|
|
||||||
this.actor.sync_hover();
|
|
||||||
this.parent();
|
|
||||||
},
|
|
||||||
|
|
||||||
_getSlide() {
|
_getSlide() {
|
||||||
if (!this._visible)
|
if (!this._visible)
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -796,7 +796,6 @@ var Panel = new Lang.Class({
|
|||||||
this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
|
this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
|
||||||
this.actor.connect('allocate', this._allocate.bind(this));
|
this.actor.connect('allocate', this._allocate.bind(this));
|
||||||
this.actor.connect('button-press-event', this._onButtonPress.bind(this));
|
this.actor.connect('button-press-event', this._onButtonPress.bind(this));
|
||||||
this.actor.connect('touch-event', this._onButtonPress.bind(this));
|
|
||||||
this.actor.connect('key-press-event', this._onKeyPress.bind(this));
|
this.actor.connect('key-press-event', this._onKeyPress.bind(this));
|
||||||
|
|
||||||
Main.overview.connect('showing', () => {
|
Main.overview.connect('showing', () => {
|
||||||
@@ -940,13 +939,8 @@ var Panel = new Lang.Class({
|
|||||||
if (event.get_source() != actor)
|
if (event.get_source() != actor)
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
let type = event.type();
|
let button = event.get_button();
|
||||||
let isPress = type == Clutter.EventType.BUTTON_PRESS;
|
if (button != 1)
|
||||||
if (!isPress && type != Clutter.EventType.TOUCH_BEGIN)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
let button = isPress ? event.get_button() : -1;
|
|
||||||
if (isPress && button != 1)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
let focusWindow = global.display.focus_window;
|
let focusWindow = global.display.focus_window;
|
||||||
@@ -1085,7 +1079,6 @@ var Panel = new Lang.Class({
|
|||||||
let windows = activeWorkspace.list_windows().filter(metaWindow => {
|
let windows = activeWorkspace.list_windows().filter(metaWindow => {
|
||||||
return metaWindow.is_on_primary_monitor() &&
|
return metaWindow.is_on_primary_monitor() &&
|
||||||
metaWindow.showing_on_its_workspace() &&
|
metaWindow.showing_on_its_workspace() &&
|
||||||
!metaWindow.is_hidden() &&
|
|
||||||
metaWindow.get_window_type() != Meta.WindowType.DESKTOP;
|
metaWindow.get_window_type() != Meta.WindowType.DESKTOP;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -141,17 +141,8 @@ var PopupBaseMenuItem = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPressEvent(actor, event) {
|
_onKeyPressEvent(actor, event) {
|
||||||
let state = event.get_state();
|
|
||||||
|
|
||||||
// if user has a modifier down (except capslock)
|
|
||||||
// then don't handle the key press here
|
|
||||||
state &= ~Clutter.ModifierType.LOCK_MASK;
|
|
||||||
state &= Clutter.ModifierType.MODIFIER_MASK;
|
|
||||||
|
|
||||||
if (state)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
|
|
||||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||||
this.activate(event);
|
this.activate(event);
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
|
@@ -119,6 +119,9 @@ var RemoteMenuItemMapper = new Lang.Class({
|
|||||||
this._trackerItem = trackerItem;
|
this._trackerItem = trackerItem;
|
||||||
|
|
||||||
this.menuItem = new PopupMenu.PopupBaseMenuItem();
|
this.menuItem = new PopupMenu.PopupBaseMenuItem();
|
||||||
|
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||||
|
this.menuItem.actor.add_child(this._icon);
|
||||||
|
|
||||||
this._label = new St.Label();
|
this._label = new St.Label();
|
||||||
this.menuItem.actor.add_child(this._label);
|
this.menuItem.actor.add_child(this._label);
|
||||||
this.menuItem.actor.label_actor = this._label;
|
this.menuItem.actor.label_actor = this._label;
|
||||||
@@ -129,11 +132,13 @@ var RemoteMenuItemMapper = new Lang.Class({
|
|||||||
|
|
||||||
this._trackerItem.bind_property('visible', this.menuItem.actor, 'visible', GObject.BindingFlags.SYNC_CREATE);
|
this._trackerItem.bind_property('visible', this.menuItem.actor, 'visible', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
this._trackerItem.connect('notify::icon', this._updateIcon.bind(this));
|
||||||
this._trackerItem.connect('notify::label', this._updateLabel.bind(this));
|
this._trackerItem.connect('notify::label', this._updateLabel.bind(this));
|
||||||
this._trackerItem.connect('notify::sensitive', this._updateSensitivity.bind(this));
|
this._trackerItem.connect('notify::sensitive', this._updateSensitivity.bind(this));
|
||||||
this._trackerItem.connect('notify::role', this._updateRole.bind(this));
|
this._trackerItem.connect('notify::role', this._updateRole.bind(this));
|
||||||
this._trackerItem.connect('notify::toggled', this._updateDecoration.bind(this));
|
this._trackerItem.connect('notify::toggled', this._updateDecoration.bind(this));
|
||||||
|
|
||||||
|
this._updateIcon();
|
||||||
this._updateLabel();
|
this._updateLabel();
|
||||||
this._updateSensitivity();
|
this._updateSensitivity();
|
||||||
this._updateRole();
|
this._updateRole();
|
||||||
@@ -143,6 +148,11 @@ var RemoteMenuItemMapper = new Lang.Class({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_updateIcon() {
|
||||||
|
this._icon.gicon = this._trackerItem.icon;
|
||||||
|
this._icon.visible = (this._icon.gicon != null);
|
||||||
|
},
|
||||||
|
|
||||||
_updateLabel() {
|
_updateLabel() {
|
||||||
this._label.text = stripMnemonics(this._trackerItem.label);
|
this._label.text = stripMnemonics(this._trackerItem.label);
|
||||||
},
|
},
|
||||||
|
@@ -114,16 +114,18 @@ var RunDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._history = new History.HistoryManager({ gsettingsKey: HISTORY_KEY,
|
this._history = new History.HistoryManager({ gsettingsKey: HISTORY_KEY,
|
||||||
entry: this._entryText });
|
entry: this._entryText });
|
||||||
this._entryText.connect('activate', (o) => {
|
|
||||||
this.popModal();
|
|
||||||
this._run(o.get_text(),
|
|
||||||
Clutter.get_current_event().get_state() & Clutter.ModifierType.CONTROL_MASK);
|
|
||||||
if (!this._commandError ||
|
|
||||||
!this.pushModal())
|
|
||||||
this.close();
|
|
||||||
});
|
|
||||||
this._entryText.connect('key-press-event', (o, e) => {
|
this._entryText.connect('key-press-event', (o, e) => {
|
||||||
let symbol = e.get_key_symbol();
|
let symbol = e.get_key_symbol();
|
||||||
|
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
|
||||||
|
this.popModal();
|
||||||
|
this._run(o.get_text(),
|
||||||
|
e.get_state() & Clutter.ModifierType.CONTROL_MASK);
|
||||||
|
if (!this._commandError ||
|
||||||
|
!this.pushModal())
|
||||||
|
this.close();
|
||||||
|
|
||||||
|
return Clutter.EVENT_STOP;
|
||||||
|
}
|
||||||
if (symbol == Clutter.Tab) {
|
if (symbol == Clutter.Tab) {
|
||||||
let text = o.get_text();
|
let text = o.get_text();
|
||||||
let prefix;
|
let prefix;
|
||||||
|
@@ -133,7 +133,7 @@ function _callRemote(obj, method, ...args) {
|
|||||||
* because of the normal X asynchronous mapping process, to actually wait
|
* because of the normal X asynchronous mapping process, to actually wait
|
||||||
* until the window has been mapped and exposed, use waitTestWindows().
|
* until the window has been mapped and exposed, use waitTestWindows().
|
||||||
*/
|
*/
|
||||||
function createTestWindow(width, height, params) {
|
function createTestWindow(params) {
|
||||||
params = Params.parse(params, { width: 640,
|
params = Params.parse(params, { width: 640,
|
||||||
height: 480,
|
height: 480,
|
||||||
alpha: false,
|
alpha: false,
|
||||||
|
@@ -192,7 +192,6 @@ var SearchResultsBase = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
this._cancellable.cancel();
|
|
||||||
for (let resultId in this._resultDisplays)
|
for (let resultId in this._resultDisplays)
|
||||||
this._resultDisplays[resultId].actor.destroy();
|
this._resultDisplays[resultId].actor.destroy();
|
||||||
this._resultDisplays = {};
|
this._resultDisplays = {};
|
||||||
@@ -226,12 +225,6 @@ var SearchResultsBase = new Lang.Class({
|
|||||||
this._cancellable.reset();
|
this._cancellable.reset();
|
||||||
|
|
||||||
this.provider.getResultMetas(metasNeeded, metas => {
|
this.provider.getResultMetas(metasNeeded, metas => {
|
||||||
if (this._cancellable.is_cancelled()) {
|
|
||||||
if (metas.length > 0)
|
|
||||||
log(`Search provider ${this.provider.id} returned results after the request was canceled`);
|
|
||||||
callback(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (metas.length != metasNeeded.length) {
|
if (metas.length != metasNeeded.length) {
|
||||||
log('Wrong number of result metas returned by search provider ' + this.provider.id +
|
log('Wrong number of result metas returned by search provider ' + this.provider.id +
|
||||||
': expected ' + metasNeeded.length + ' but got ' + metas.length);
|
': expected ' + metasNeeded.length + ' but got ' + metas.length);
|
||||||
|
@@ -360,14 +360,11 @@ var InputSourceManager = new Lang.Class({
|
|||||||
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
||||||
this._sourcesPerWindowChanged();
|
this._sourcesPerWindowChanged();
|
||||||
this._disableIBus = false;
|
this._disableIBus = false;
|
||||||
this._reloading = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
reload() {
|
reload() {
|
||||||
this._reloading = true;
|
|
||||||
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
||||||
this._inputSourcesChanged();
|
this._inputSourcesChanged();
|
||||||
this._reloading = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_ibusReadyCallback(im, ready) {
|
_ibusReadyCallback(im, ready) {
|
||||||
@@ -461,15 +458,7 @@ var InputSourceManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
activateInputSource(is, interactive) {
|
activateInputSource(is, interactive) {
|
||||||
// The focus changes during holdKeyboard/releaseKeyboard may trick
|
KeyboardManager.holdKeyboard();
|
||||||
// the client into hiding UI containing the currently focused entry.
|
|
||||||
// So holdKeyboard/releaseKeyboard are not called when
|
|
||||||
// 'set-content-type' signal is received.
|
|
||||||
// E.g. Focusing on a password entry in a popup in Xorg Firefox
|
|
||||||
// will emit 'set-content-type' signal.
|
|
||||||
// https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
|
|
||||||
if (!this._reloading)
|
|
||||||
KeyboardManager.holdKeyboard();
|
|
||||||
this._keyboardManager.apply(is.xkbId);
|
this._keyboardManager.apply(is.xkbId);
|
||||||
|
|
||||||
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
||||||
@@ -484,10 +473,7 @@ var InputSourceManager = new Lang.Class({
|
|||||||
else
|
else
|
||||||
engine = 'xkb:us::eng';
|
engine = 'xkb:us::eng';
|
||||||
|
|
||||||
if (!this._reloading)
|
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
||||||
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
|
||||||
else
|
|
||||||
this._ibusManager.setEngine(engine);
|
|
||||||
this._currentInputSourceChanged(is);
|
this._currentInputSourceChanged(is);
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
|
@@ -419,14 +419,12 @@ var NMConnectionDevice = new Lang.Class({
|
|||||||
this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
|
this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
|
||||||
|
|
||||||
if (this._activeConnection == null) {
|
if (this._activeConnection == null) {
|
||||||
let activeConnection = this._device.active_connection;
|
this._activeConnection = this._device.active_connection;
|
||||||
if (activeConnection && activeConnection.connection) {
|
|
||||||
let item = this._connectionItems.get(activeConnection.connection.get_uuid());
|
if (this._activeConnection) {
|
||||||
if (item) {
|
ensureActiveConnectionProps(this._activeConnection, this._client);
|
||||||
this._activeConnection = activeConnection;
|
let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
|
||||||
ensureActiveConnectionProps(this._activeConnection, this._client);
|
item.setActiveConnection(this._activeConnection);
|
||||||
item.setActiveConnection(this._activeConnection);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1946,7 +1944,6 @@ var NMApplet = new Lang.Class({
|
|||||||
this.indicators.visible = this._client.nm_running;
|
this.indicators.visible = this._client.nm_running;
|
||||||
this.menu.actor.visible = this._client.networking_enabled;
|
this.menu.actor.visible = this._client.networking_enabled;
|
||||||
|
|
||||||
this._updateIcon();
|
|
||||||
this._syncConnectivity();
|
this._syncConnectivity();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -58,9 +58,6 @@ var AltSwitcher = new Lang.Class({
|
|||||||
childToShow = this._standard;
|
childToShow = this._standard;
|
||||||
} else if (this._alternate.visible) {
|
} else if (this._alternate.visible) {
|
||||||
childToShow = this._alternate;
|
childToShow = this._alternate;
|
||||||
} else {
|
|
||||||
this.actor.hide();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let childShown = this.actor.get_child();
|
let childShown = this.actor.get_child();
|
||||||
@@ -82,7 +79,7 @@ var AltSwitcher = new Lang.Class({
|
|||||||
global.sync_pointer();
|
global.sync_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.actor.show();
|
this.actor.visible = (childToShow != null);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
|
@@ -56,12 +56,11 @@ const BoltDeviceProxy = Gio.DBusProxy.makeProxyWrapper(BoltDeviceInterface);
|
|||||||
|
|
||||||
var Status = {
|
var Status = {
|
||||||
DISCONNECTED: 'disconnected',
|
DISCONNECTED: 'disconnected',
|
||||||
|
CONNECTING: 'connecting',
|
||||||
CONNECTED: 'connected',
|
CONNECTED: 'connected',
|
||||||
AUTHORIZING: 'authorizing',
|
AUTHORIZING: 'authorizing',
|
||||||
AUTH_ERROR: 'auth-error',
|
AUTH_ERROR: 'auth-error',
|
||||||
AUTHORIZED: 'authorized',
|
AUTHORIZED: 'authorized'
|
||||||
AUTHORIZED_SECURE: 'authorized-secure',
|
|
||||||
AUTHORIZED_NEWKEY: 'authorized-newkey'
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var Policy = {
|
var Policy = {
|
||||||
@@ -70,7 +69,7 @@ var Policy = {
|
|||||||
AUTO: 'auto'
|
AUTO: 'auto'
|
||||||
};
|
};
|
||||||
|
|
||||||
var AuthFlags = {
|
var AuthCtrl = {
|
||||||
NONE: 'none',
|
NONE: 'none',
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -141,9 +140,10 @@ var Client = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
enrollDevice(id, policy, callback) {
|
enrollDevice(id, policy, callback) {
|
||||||
this._proxy.EnrollDeviceRemote(id, policy, AuthFlags.NONE,
|
this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE,
|
||||||
(res, error) => {
|
(res, error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
Gio.DBusError.strip_remote_error(error);
|
||||||
callback(null, error);
|
callback(null, error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -228,7 +228,7 @@ var AuthRobot = new Lang.Class({
|
|||||||
|
|
||||||
_onEnrollDone(device, error) {
|
_onEnrollDone(device, error) {
|
||||||
if (error)
|
if (error)
|
||||||
this.emit('enroll-failed', error, device);
|
this.emit('enroll-failed', device, error);
|
||||||
|
|
||||||
/* TODO: scan the list of devices to be authorized for children
|
/* TODO: scan the list of devices to be authorized for children
|
||||||
* of this device and remove them (and their children and
|
* of this device and remove them (and their children and
|
||||||
@@ -354,7 +354,7 @@ var Indicator = new Lang.Class({
|
|||||||
|
|
||||||
_onEnrollFailed(obj, device, error) {
|
_onEnrollFailed(obj, device, error) {
|
||||||
const title = _('Thunderbolt authorization error');
|
const title = _('Thunderbolt authorization error');
|
||||||
const body = _('Could not authorize the thunderbolt device: %s'.format(error.message));
|
const body = _('Could not authorize the Thunderbolt device: %s'.format(error.message));
|
||||||
this._notify(title, body);
|
this._notify(title, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -311,7 +311,6 @@ var ViewSelector = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
hide() {
|
hide() {
|
||||||
this.reset();
|
|
||||||
this._workspacesDisplay.hide();
|
this._workspacesDisplay.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -460,11 +459,7 @@ var ViewSelector = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
reset() {
|
reset() {
|
||||||
// Don't drop the key focus on Clutter's side if anything but the
|
global.stage.set_key_focus(null);
|
||||||
// overview has pushed a modal (e.g. system modals when activated using
|
|
||||||
// the overview).
|
|
||||||
if (Main.modalCount <= 1)
|
|
||||||
global.stage.set_key_focus(null);
|
|
||||||
|
|
||||||
this._entry.text = '';
|
this._entry.text = '';
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@ const EdgeDragAction = imports.ui.edgeDragAction;
|
|||||||
const CloseDialog = imports.ui.closeDialog;
|
const CloseDialog = imports.ui.closeDialog;
|
||||||
const SwitchMonitor = imports.ui.switchMonitor;
|
const SwitchMonitor = imports.ui.switchMonitor;
|
||||||
|
|
||||||
var SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||||
var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
|
var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
|
||||||
var SHOW_WINDOW_ANIMATION_TIME = 0.15;
|
var SHOW_WINDOW_ANIMATION_TIME = 0.15;
|
||||||
var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
|
var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
|
||||||
@@ -627,8 +627,8 @@ var AppSwitchAction = new Lang.Class({
|
|||||||
|
|
||||||
if (this.get_n_current_points() == 3) {
|
if (this.get_n_current_points() == 3) {
|
||||||
for (let i = 0; i < this.get_n_current_points(); i++) {
|
for (let i = 0; i < this.get_n_current_points(); i++) {
|
||||||
let [startX, startY] = this.get_press_coords(i);
|
[startX, startY] = this.get_press_coords(i);
|
||||||
let [x, y] = this.get_motion_coords(i);
|
[x, y] = this.get_motion_coords(i);
|
||||||
|
|
||||||
if (Math.abs(x - startX) > MOTION_THRESHOLD ||
|
if (Math.abs(x - startX) > MOTION_THRESHOLD ||
|
||||||
Math.abs(y - startY) > MOTION_THRESHOLD)
|
Math.abs(y - startY) > MOTION_THRESHOLD)
|
||||||
@@ -1173,10 +1173,6 @@ var WindowManager = new Lang.Class({
|
|||||||
yScale = geom.height / actor.height;
|
yScale = geom.height / actor.height;
|
||||||
} else {
|
} else {
|
||||||
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||||
if (!monitor) {
|
|
||||||
this._minimizeWindowDone();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
xDest = monitor.x;
|
xDest = monitor.x;
|
||||||
yDest = monitor.y;
|
yDest = monitor.y;
|
||||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
||||||
@@ -1252,11 +1248,6 @@ var WindowManager = new Lang.Class({
|
|||||||
geom.height / actor.height);
|
geom.height / actor.height);
|
||||||
} else {
|
} else {
|
||||||
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||||
if (!monitor) {
|
|
||||||
actor.show();
|
|
||||||
this._unminimizeWindowDone();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
actor.set_position(monitor.x, monitor.y);
|
actor.set_position(monitor.x, monitor.y);
|
||||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
|
||||||
actor.x += monitor.width;
|
actor.x += monitor.width;
|
||||||
@@ -1763,14 +1754,6 @@ var WindowManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < switchData.windows.length; i++) {
|
|
||||||
let w = switchData.windows[i];
|
|
||||||
|
|
||||||
w.windowDestroyId = w.window.connect('destroy', () => {
|
|
||||||
switchData.windows.splice(switchData.windows.indexOf(w), 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
switchData.inGroup.set_position(-xDest, -yDest);
|
switchData.inGroup.set_position(-xDest, -yDest);
|
||||||
switchData.inGroup.raise_top();
|
switchData.inGroup.raise_top();
|
||||||
|
|
||||||
@@ -1801,8 +1784,8 @@ var WindowManager = new Lang.Class({
|
|||||||
|
|
||||||
for (let i = 0; i < switchData.windows.length; i++) {
|
for (let i = 0; i < switchData.windows.length; i++) {
|
||||||
let w = switchData.windows[i];
|
let w = switchData.windows[i];
|
||||||
w.window.disconnect(w.windowDestroyId);
|
if (w.window.is_destroyed()) // Window gone
|
||||||
|
continue;
|
||||||
if (w.window.get_parent() == switchData.outGroup) {
|
if (w.window.get_parent() == switchData.outGroup) {
|
||||||
w.window.reparent(w.parent);
|
w.window.reparent(w.parent);
|
||||||
w.window.hide();
|
w.window.hide();
|
||||||
|
@@ -128,10 +128,11 @@ var WindowMenu = new Lang.Class({
|
|||||||
|
|
||||||
let screen = global.screen;
|
let screen = global.screen;
|
||||||
let nMonitors = screen.get_n_monitors();
|
let nMonitors = screen.get_n_monitors();
|
||||||
let monitorIndex = window.get_monitor();
|
if (nMonitors > 1) {
|
||||||
if (nMonitors > 1 && monitorIndex >= 0) {
|
|
||||||
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
|
let monitorIndex = window.get_monitor();
|
||||||
|
|
||||||
let dir = Meta.ScreenDirection.UP;
|
let dir = Meta.ScreenDirection.UP;
|
||||||
let upMonitorIndex =
|
let upMonitorIndex =
|
||||||
screen.get_monitor_neighbor_index(monitorIndex, dir);
|
screen.get_monitor_neighbor_index(monitorIndex, dir);
|
||||||
|
@@ -137,10 +137,8 @@ var WindowClone = new Lang.Class({
|
|||||||
this._dragSlot = [0, 0, 0, 0];
|
this._dragSlot = [0, 0, 0, 0];
|
||||||
this._stackAbove = null;
|
this._stackAbove = null;
|
||||||
|
|
||||||
this._windowClone._sizeChangedId = this.metaWindow.connect('size-changed',
|
this._windowClone._updateId = this.metaWindow.connect('size-changed',
|
||||||
this._onMetaWindowSizeChanged.bind(this));
|
this._onRealWindowSizeChanged.bind(this));
|
||||||
this._windowClone._posChangedId = this.metaWindow.connect('position-changed',
|
|
||||||
this._computeBoundingBox.bind(this));
|
|
||||||
this._windowClone._destroyId =
|
this._windowClone._destroyId =
|
||||||
this.realWindow.connect('destroy', () => {
|
this.realWindow.connect('destroy', () => {
|
||||||
// First destroy the clone and then destroy everything
|
// First destroy the clone and then destroy everything
|
||||||
@@ -208,7 +206,8 @@ var WindowClone = new Lang.Class({
|
|||||||
|
|
||||||
addAttachedDialog(win) {
|
addAttachedDialog(win) {
|
||||||
this._doAddAttachedDialog(win, win.get_compositor_private());
|
this._doAddAttachedDialog(win, win.get_compositor_private());
|
||||||
this._onMetaWindowSizeChanged();
|
this._computeBoundingBox();
|
||||||
|
this.emit('size-changed');
|
||||||
},
|
},
|
||||||
|
|
||||||
hasAttachedDialogs() {
|
hasAttachedDialogs() {
|
||||||
@@ -217,14 +216,15 @@ var WindowClone = new Lang.Class({
|
|||||||
|
|
||||||
_doAddAttachedDialog(metaWin, realWin) {
|
_doAddAttachedDialog(metaWin, realWin) {
|
||||||
let clone = new Clutter.Clone({ source: realWin });
|
let clone = new Clutter.Clone({ source: realWin });
|
||||||
clone._sizeChangedId = metaWin.connect('size-changed',
|
clone._updateId = metaWin.connect('size-changed', () => {
|
||||||
this._onMetaWindowSizeChanged.bind(this));
|
this._computeBoundingBox();
|
||||||
clone._posChangedId = metaWin.connect('position-changed',
|
this.emit('size-changed');
|
||||||
this._onMetaWindowSizeChanged.bind(this));
|
});
|
||||||
clone._destroyId = realWin.connect('destroy', () => {
|
clone._destroyId = realWin.connect('destroy', () => {
|
||||||
clone.destroy();
|
clone.destroy();
|
||||||
|
|
||||||
this._onMetaWindowSizeChanged();
|
this._computeBoundingBox();
|
||||||
|
this.emit('size-changed');
|
||||||
});
|
});
|
||||||
this.actor.add_child(clone);
|
this.actor.add_child(clone);
|
||||||
},
|
},
|
||||||
@@ -321,13 +321,12 @@ var WindowClone = new Lang.Class({
|
|||||||
else
|
else
|
||||||
realWindow = child.source;
|
realWindow = child.source;
|
||||||
|
|
||||||
realWindow.meta_window.disconnect(child._sizeChangedId);
|
realWindow.meta_window.disconnect(child._updateId);
|
||||||
realWindow.meta_window.disconnect(child._posChangedId);
|
|
||||||
realWindow.disconnect(child._destroyId);
|
realWindow.disconnect(child._destroyId);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_onMetaWindowSizeChanged() {
|
_onRealWindowSizeChanged() {
|
||||||
this._computeBoundingBox();
|
this._computeBoundingBox();
|
||||||
this.emit('size-changed');
|
this.emit('size-changed');
|
||||||
},
|
},
|
||||||
@@ -470,6 +469,7 @@ var WindowOverlay = new Lang.Class({
|
|||||||
this._windowAddedId = 0;
|
this._windowAddedId = 0;
|
||||||
|
|
||||||
button.hide();
|
button.hide();
|
||||||
|
title.hide();
|
||||||
|
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.closeButton = button;
|
this.closeButton = button;
|
||||||
@@ -544,10 +544,12 @@ var WindowOverlay = new Lang.Class({
|
|||||||
let titleX = cloneX + (cloneWidth - title.width) / 2;
|
let titleX = cloneX + (cloneWidth - title.width) / 2;
|
||||||
let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
|
let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
|
||||||
|
|
||||||
if (animate)
|
if (animate) {
|
||||||
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY));
|
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), title.width);
|
||||||
else
|
} else {
|
||||||
|
title.width = title.width;
|
||||||
title.set_position(Math.floor(titleX), Math.floor(titleY));
|
title.set_position(Math.floor(titleX), Math.floor(titleY));
|
||||||
|
}
|
||||||
|
|
||||||
let borderX = cloneX - this.borderSize;
|
let borderX = cloneX - this.borderSize;
|
||||||
let borderY = cloneY - this.borderSize;
|
let borderY = cloneY - this.borderSize;
|
||||||
@@ -566,12 +568,10 @@ var WindowOverlay = new Lang.Class({
|
|||||||
_animateOverlayActor(actor, x, y, width, height) {
|
_animateOverlayActor(actor, x, y, width, height) {
|
||||||
let params = { x: x,
|
let params = { x: x,
|
||||||
y: y,
|
y: y,
|
||||||
|
width: width,
|
||||||
time: Overview.ANIMATION_TIME,
|
time: Overview.ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad' };
|
transition: 'easeOutQuad' };
|
||||||
|
|
||||||
if (width !== undefined)
|
|
||||||
params.width = width;
|
|
||||||
|
|
||||||
if (height !== undefined)
|
if (height !== undefined)
|
||||||
params.height = height;
|
params.height = height;
|
||||||
|
|
||||||
@@ -1431,26 +1431,34 @@ var Workspace = new Lang.Class({
|
|||||||
_doRemoveWindow(metaWin) {
|
_doRemoveWindow(metaWin) {
|
||||||
let win = metaWin.get_compositor_private();
|
let win = metaWin.get_compositor_private();
|
||||||
|
|
||||||
let clone = this._removeWindowClone(metaWin);
|
// find the position of the window in our list
|
||||||
|
let index = this._lookupIndex (metaWin);
|
||||||
|
|
||||||
if (clone) {
|
if (index == -1)
|
||||||
// If metaWin.get_compositor_private() returned non-NULL, that
|
return;
|
||||||
// means the window still exists (and is just being moved to
|
|
||||||
// another workspace or something), so set its overviewHint
|
let clone = this._windows[index];
|
||||||
// accordingly. (If it returned NULL, then the window is being
|
|
||||||
// destroyed; we'd like to animate this, but it's too late at
|
this._windows.splice(index, 1);
|
||||||
// this point.)
|
this._windowOverlays.splice(index, 1);
|
||||||
if (win) {
|
|
||||||
let [stageX, stageY] = clone.actor.get_transformed_position();
|
// If metaWin.get_compositor_private() returned non-NULL, that
|
||||||
let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
|
// means the window still exists (and is just being moved to
|
||||||
win._overviewHint = {
|
// another workspace or something), so set its overviewHint
|
||||||
x: stageX,
|
// accordingly. (If it returned NULL, then the window is being
|
||||||
y: stageY,
|
// destroyed; we'd like to animate this, but it's too late at
|
||||||
scale: stageWidth / clone.actor.width
|
// this point.)
|
||||||
};
|
if (win) {
|
||||||
}
|
let [stageX, stageY] = clone.actor.get_transformed_position();
|
||||||
clone.destroy();
|
let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
|
||||||
|
win._overviewHint = {
|
||||||
|
x: stageX,
|
||||||
|
y: stageY,
|
||||||
|
scale: stageWidth / clone.actor.width
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
clone.destroy();
|
||||||
|
|
||||||
|
|
||||||
// We need to reposition the windows; to avoid shuffling windows
|
// We need to reposition the windows; to avoid shuffling windows
|
||||||
// around while the user is interacting with the workspace, we delay
|
// around while the user is interacting with the workspace, we delay
|
||||||
@@ -1506,7 +1514,7 @@ var Workspace = new Lang.Class({
|
|||||||
if (metaWin.is_attached_dialog()) {
|
if (metaWin.is_attached_dialog()) {
|
||||||
let parent = metaWin.get_transient_for();
|
let parent = metaWin.get_transient_for();
|
||||||
while (parent.is_attached_dialog())
|
while (parent.is_attached_dialog())
|
||||||
parent = parent.get_transient_for();
|
parent = metaWin.get_transient_for();
|
||||||
|
|
||||||
let idx = this._lookupIndex (parent);
|
let idx = this._lookupIndex (parent);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
@@ -1840,9 +1848,6 @@ var Workspace = new Lang.Class({
|
|||||||
clone.connect('size-changed', () => {
|
clone.connect('size-changed', () => {
|
||||||
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
||||||
});
|
});
|
||||||
clone.actor.connect('destroy', () => {
|
|
||||||
this._removeWindowClone(clone.metaWindow);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.actor.add_actor(clone.actor);
|
this.actor.add_actor(clone.actor);
|
||||||
|
|
||||||
@@ -1864,17 +1869,6 @@ var Workspace = new Lang.Class({
|
|||||||
return [clone, overlay];
|
return [clone, overlay];
|
||||||
},
|
},
|
||||||
|
|
||||||
_removeWindowClone(metaWin) {
|
|
||||||
// find the position of the window in our list
|
|
||||||
let index = this._lookupIndex (metaWin);
|
|
||||||
|
|
||||||
if (index == -1)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
this._windowOverlays.splice(index, 1);
|
|
||||||
return this._windows.splice(index, 1).pop();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onShowOverlayClose(windowOverlay) {
|
_onShowOverlayClose(windowOverlay) {
|
||||||
for (let i = 0; i < this._windowOverlays.length; i++) {
|
for (let i = 0; i < this._windowOverlays.length; i++) {
|
||||||
let overlay = this._windowOverlays[i];
|
let overlay = this._windowOverlays[i];
|
||||||
|
@@ -31,7 +31,7 @@ var WORKSPACE_CUT_SIZE = 10;
|
|||||||
|
|
||||||
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
||||||
|
|
||||||
var OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
||||||
|
|
||||||
/* A layout manager that requests size only for primary_actor, but then allocates
|
/* A layout manager that requests size only for primary_actor, but then allocates
|
||||||
all using a fixed layout */
|
all using a fixed layout */
|
||||||
@@ -68,7 +68,7 @@ var WindowClone = new Lang.Class({
|
|||||||
this.realWindow = realWindow;
|
this.realWindow = realWindow;
|
||||||
this.metaWindow = realWindow.meta_window;
|
this.metaWindow = realWindow.meta_window;
|
||||||
|
|
||||||
this.clone._updateId = this.realWindow.connect('notify::position',
|
this.clone._updateId = this.metaWindow.connect('position-changed',
|
||||||
this._onPositionChanged.bind(this));
|
this._onPositionChanged.bind(this));
|
||||||
this.clone._destroyId = this.realWindow.connect('destroy', () => {
|
this.clone._destroyId = this.realWindow.connect('destroy', () => {
|
||||||
// First destroy the clone and then destroy everything
|
// First destroy the clone and then destroy everything
|
||||||
@@ -153,7 +153,7 @@ var WindowClone = new Lang.Class({
|
|||||||
let clone = new Clutter.Clone({ source: realDialog });
|
let clone = new Clutter.Clone({ source: realDialog });
|
||||||
this._updateDialogPosition(realDialog, clone);
|
this._updateDialogPosition(realDialog, clone);
|
||||||
|
|
||||||
clone._updateId = realDialog.connect('notify::position', dialog => {
|
clone._updateId = metaDialog.connect('position-changed', dialog => {
|
||||||
this._updateDialogPosition(dialog, clone);
|
this._updateDialogPosition(dialog, clone);
|
||||||
});
|
});
|
||||||
clone._destroyId = realDialog.connect('destroy', () => {
|
clone._destroyId = realDialog.connect('destroy', () => {
|
||||||
@@ -171,6 +171,7 @@ var WindowClone = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onPositionChanged() {
|
_onPositionChanged() {
|
||||||
|
let rect = this.metaWindow.get_frame_rect();
|
||||||
this.actor.set_position(this.realWindow.x, this.realWindow.y);
|
this.actor.set_position(this.realWindow.x, this.realWindow.y);
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -178,7 +179,7 @@ var WindowClone = new Lang.Class({
|
|||||||
this.actor.get_children().forEach(child => {
|
this.actor.get_children().forEach(child => {
|
||||||
let realWindow = child.source;
|
let realWindow = child.source;
|
||||||
|
|
||||||
realWindow.disconnect(child._updateId);
|
realWindow.meta_window.disconnect(child._updateId);
|
||||||
realWindow.disconnect(child._destroyId);
|
realWindow.disconnect(child._destroyId);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -240,7 +241,7 @@ var WindowClone = new Lang.Class({
|
|||||||
Signals.addSignalMethods(WindowClone.prototype);
|
Signals.addSignalMethods(WindowClone.prototype);
|
||||||
|
|
||||||
|
|
||||||
var ThumbnailState = {
|
const ThumbnailState = {
|
||||||
NEW : 0,
|
NEW : 0,
|
||||||
ANIMATING_IN : 1,
|
ANIMATING_IN : 1,
|
||||||
NORMAL: 2,
|
NORMAL: 2,
|
||||||
@@ -371,9 +372,18 @@ var WorkspaceThumbnail = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_doRemoveWindow(metaWin) {
|
_doRemoveWindow(metaWin) {
|
||||||
let clone = this._removeWindowClone(metaWin);
|
let win = metaWin.get_compositor_private();
|
||||||
if (clone)
|
|
||||||
clone.destroy();
|
// find the position of the window in our list
|
||||||
|
let index = this._lookupIndex (metaWin);
|
||||||
|
|
||||||
|
if (index == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let clone = this._windows[index];
|
||||||
|
this._windows.splice(index, 1);
|
||||||
|
|
||||||
|
clone.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
_doAddWindow(metaWin) {
|
_doAddWindow(metaWin) {
|
||||||
@@ -416,7 +426,7 @@ var WorkspaceThumbnail = new Lang.Class({
|
|||||||
} else if (metaWin.is_attached_dialog()) {
|
} else if (metaWin.is_attached_dialog()) {
|
||||||
let parent = metaWin.get_transient_for();
|
let parent = metaWin.get_transient_for();
|
||||||
while (parent.is_attached_dialog())
|
while (parent.is_attached_dialog())
|
||||||
parent = parent.get_transient_for();
|
parent = metaWin.get_transient_for();
|
||||||
|
|
||||||
let idx = this._lookupIndex (parent);
|
let idx = this._lookupIndex (parent);
|
||||||
if (idx < 0) {
|
if (idx < 0) {
|
||||||
@@ -525,9 +535,6 @@ var WorkspaceThumbnail = new Lang.Class({
|
|||||||
clone.connect('drag-end', () => {
|
clone.connect('drag-end', () => {
|
||||||
Main.overview.endWindowDrag(clone.metaWindow);
|
Main.overview.endWindowDrag(clone.metaWindow);
|
||||||
});
|
});
|
||||||
clone.actor.connect('destroy', () => {
|
|
||||||
this._removeWindowClone(clone.metaWindow);
|
|
||||||
});
|
|
||||||
this._contents.add_actor(clone.actor);
|
this._contents.add_actor(clone.actor);
|
||||||
|
|
||||||
if (this._windows.length == 0)
|
if (this._windows.length == 0)
|
||||||
@@ -540,16 +547,6 @@ var WorkspaceThumbnail = new Lang.Class({
|
|||||||
return clone;
|
return clone;
|
||||||
},
|
},
|
||||||
|
|
||||||
_removeWindowClone(metaWin) {
|
|
||||||
// find the position of the window in our list
|
|
||||||
let index = this._lookupIndex (metaWin);
|
|
||||||
|
|
||||||
if (index == -1)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return this._windows.splice(index, 1).pop();
|
|
||||||
},
|
|
||||||
|
|
||||||
activate(time) {
|
activate(time) {
|
||||||
if (this.state > ThumbnailState.NORMAL)
|
if (this.state > ThumbnailState.NORMAL)
|
||||||
return;
|
return;
|
||||||
@@ -676,11 +673,7 @@ var ThumbnailsBox = new Lang.Class({
|
|||||||
this._settings.connect('changed::dynamic-workspaces',
|
this._settings.connect('changed::dynamic-workspaces',
|
||||||
this._updateSwitcherVisibility.bind(this));
|
this._updateSwitcherVisibility.bind(this));
|
||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed', () => {
|
Main.layoutManager.connect('monitors-changed', this._rebuildThumbnails.bind(this));
|
||||||
this._destroyThumbnails();
|
|
||||||
if (Main.overview.visible)
|
|
||||||
this._createThumbnails();
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateSwitcherVisibility() {
|
_updateSwitcherVisibility() {
|
||||||
@@ -873,6 +866,9 @@ var ThumbnailsBox = new Lang.Class({
|
|||||||
Main.overview.connect('windows-restacked',
|
Main.overview.connect('windows-restacked',
|
||||||
this._syncStacking.bind(this));
|
this._syncStacking.bind(this));
|
||||||
|
|
||||||
|
this._workareasChangedId =
|
||||||
|
global.screen.connect('workareas-changed', this._rebuildThumbnails.bind(this));
|
||||||
|
|
||||||
this._targetScale = 0;
|
this._targetScale = 0;
|
||||||
this._scale = 0;
|
this._scale = 0;
|
||||||
this._pendingScaleUpdate = false;
|
this._pendingScaleUpdate = false;
|
||||||
@@ -888,6 +884,9 @@ var ThumbnailsBox = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_destroyThumbnails() {
|
_destroyThumbnails() {
|
||||||
|
if (this._thumbnails.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (this._switchWorkspaceNotifyId > 0) {
|
if (this._switchWorkspaceNotifyId > 0) {
|
||||||
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
||||||
this._switchWorkspaceNotifyId = 0;
|
this._switchWorkspaceNotifyId = 0;
|
||||||
@@ -902,12 +901,24 @@ var ThumbnailsBox = new Lang.Class({
|
|||||||
this._syncStackingId = 0;
|
this._syncStackingId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._workareasChangedId > 0) {
|
||||||
|
global.screen.disconnect(this._workareasChangedId);
|
||||||
|
this._workareasChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (let w = 0; w < this._thumbnails.length; w++)
|
for (let w = 0; w < this._thumbnails.length; w++)
|
||||||
this._thumbnails[w].destroy();
|
this._thumbnails[w].destroy();
|
||||||
this._thumbnails = [];
|
this._thumbnails = [];
|
||||||
this._porthole = null;
|
this._porthole = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_rebuildThumbnails() {
|
||||||
|
this._destroyThumbnails();
|
||||||
|
|
||||||
|
if (Main.overview.visible)
|
||||||
|
this._createThumbnails();
|
||||||
|
},
|
||||||
|
|
||||||
_workspacesChanged() {
|
_workspacesChanged() {
|
||||||
let validThumbnails =
|
let validThumbnails =
|
||||||
this._thumbnails.filter(t => t.state <= ThumbnailState.NORMAL);
|
this._thumbnails.filter(t => t.state <= ThumbnailState.NORMAL);
|
||||||
|
@@ -470,7 +470,6 @@ var WorkspacesDisplay = new Lang.Class({
|
|||||||
this._switchWorkspaceNotifyId = 0;
|
this._switchWorkspaceNotifyId = 0;
|
||||||
|
|
||||||
this._notifyOpacityId = 0;
|
this._notifyOpacityId = 0;
|
||||||
this._restackedNotifyId = 0;
|
|
||||||
this._scrollEventId = 0;
|
this._scrollEventId = 0;
|
||||||
this._keyPressEventId = 0;
|
this._keyPressEventId = 0;
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell', 'c',
|
project('gnome-shell', 'c',
|
||||||
version: '3.28.4',
|
version: '3.29.1',
|
||||||
meson_version: '>= 0.42.0',
|
meson_version: '>= 0.42.0',
|
||||||
license: 'GPLv2+'
|
license: 'GPLv2+'
|
||||||
)
|
)
|
||||||
@@ -23,7 +23,7 @@ gi_req = '>= 1.49.1'
|
|||||||
gjs_req = '>= 1.47.0'
|
gjs_req = '>= 1.47.0'
|
||||||
gtk_req = '>= 3.15.0'
|
gtk_req = '>= 3.15.0'
|
||||||
json_glib_req = '>= 0.13.2'
|
json_glib_req = '>= 0.13.2'
|
||||||
mutter_req = '>= 3.28.0'
|
mutter_req = '>= 3.29.1'
|
||||||
polkit_req = '>= 0.100'
|
polkit_req = '>= 0.100'
|
||||||
schemas_req = '>= 3.21.3'
|
schemas_req = '>= 3.21.3'
|
||||||
startup_req = '>= 0.11'
|
startup_req = '>= 0.11'
|
||||||
@@ -31,7 +31,7 @@ ibus_req = '>= 1.5.2'
|
|||||||
|
|
||||||
bt_req = '>= 3.9.0'
|
bt_req = '>= 3.9.0'
|
||||||
gst_req = '>= 0.11.92'
|
gst_req = '>= 0.11.92'
|
||||||
nm_req = '>= 0.9.8'
|
nm_req = '>= 1.10.4'
|
||||||
secret_req = '>= 0.18'
|
secret_req = '>= 0.18'
|
||||||
|
|
||||||
gnome = import('gnome')
|
gnome = import('gnome')
|
||||||
|
64
po/cs.po
64
po/cs.po
@@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||||
"POT-Creation-Date: 2018-02-26 12:57+0000\n"
|
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||||
"PO-Revision-Date: 2018-02-26 17:57+0100\n"
|
"PO-Revision-Date: 2018-04-24 17:32+0200\n"
|
||||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
@@ -332,7 +332,7 @@ msgstr ""
|
|||||||
"Nastala chyba při načítání dialogového okna předvoleb pro rozšíření %s:"
|
"Nastala chyba při načítání dialogového okna předvoleb pro rozšíření %s:"
|
||||||
|
|
||||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@@ -667,12 +667,12 @@ msgstr "Přidat mezi oblíbené"
|
|||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Zobrazit podrobnosti"
|
msgstr "Zobrazit podrobnosti"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:138
|
#: js/ui/appFavorites.js:140
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s byl přidán mezi oblíbené."
|
msgstr "%s byl přidán mezi oblíbené."
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:172
|
#: js/ui/appFavorites.js:174
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s byl odstraněn z oblíbených."
|
msgstr "%s byl odstraněn z oblíbených."
|
||||||
@@ -867,7 +867,7 @@ msgstr "Externí svazek odpojen"
|
|||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Otevřít pomocí %s"
|
msgstr "Otevřít pomocí %s"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Heslo:"
|
msgstr "Heslo:"
|
||||||
|
|
||||||
@@ -955,15 +955,15 @@ msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
|||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Network Manager"
|
msgstr "Network Manager"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:43
|
#: js/ui/components/polkitAgent.js:48
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Je vyžadováno ověření"
|
msgstr "Je vyžadováno ověření"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:71
|
#: js/ui/components/polkitAgent.js:76
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Správce"
|
msgstr "Správce"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:151
|
#: js/ui/components/polkitAgent.js:156
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Ověřit"
|
msgstr "Ověřit"
|
||||||
|
|
||||||
@@ -971,7 +971,7 @@ msgstr "Ověřit"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||||
msgid "Sorry, that didn’t work. Please try again."
|
msgid "Sorry, that didn’t work. Please try again."
|
||||||
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
||||||
|
|
||||||
@@ -1021,7 +1021,7 @@ msgstr "Přidat světový čas…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Světové hodiny"
|
msgstr "Světové hodiny"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:225
|
#: js/ui/dateMenu.js:227
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Počasí"
|
msgstr "Počasí"
|
||||||
|
|
||||||
@@ -1029,7 +1029,7 @@ msgstr "Počasí"
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:289
|
#: js/ui/dateMenu.js:291
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s all day."
|
msgid "%s all day."
|
||||||
msgstr "%s celý den."
|
msgstr "%s celý den."
|
||||||
@@ -1038,7 +1038,7 @@ msgstr "%s celý den."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:295
|
#: js/ui/dateMenu.js:297
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s later."
|
msgid "%s, then %s later."
|
||||||
msgstr "%s, později %s."
|
msgstr "%s, později %s."
|
||||||
@@ -1047,30 +1047,30 @@ msgstr "%s, později %s."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:301
|
#: js/ui/dateMenu.js:303
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s, followed by %s later."
|
msgid "%s, then %s, followed by %s later."
|
||||||
msgstr "%s, pak %s a později %s."
|
msgstr "%s, pak %s a později %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:312
|
#: js/ui/dateMenu.js:314
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Vybrat místo…"
|
msgstr "Vybrat místo…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:315
|
#: js/ui/dateMenu.js:317
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Načítá se…"
|
msgstr "Načítá se…"
|
||||||
|
|
||||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||||
#: js/ui/dateMenu.js:321
|
#: js/ui/dateMenu.js:323
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Feels like %s."
|
msgid "Feels like %s."
|
||||||
msgstr "Pocitová teplota %s."
|
msgstr "Pocitově jako %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:324
|
#: js/ui/dateMenu.js:326
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Připojit se kvůli informacím o počasí"
|
msgstr "Připojit se kvůli informacím o počasí"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:326
|
#: js/ui/dateMenu.js:328
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Informace o počasí nejsou nyní dostupné"
|
msgstr "Informace o počasí nejsou nyní dostupné"
|
||||||
|
|
||||||
@@ -1986,16 +1986,16 @@ msgstr "Uspat do paměti"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Vypnout"
|
msgstr "Vypnout"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:272
|
#: js/ui/status/thunderbolt.js:294
|
||||||
msgid "Thunderbolt"
|
msgid "Thunderbolt"
|
||||||
msgstr "Thunderbolt"
|
msgstr "Thunderbolt"
|
||||||
|
|
||||||
#. we are done
|
#. we are done
|
||||||
#: js/ui/status/thunderbolt.js:328
|
#: js/ui/status/thunderbolt.js:350
|
||||||
msgid "Unknown Thunderbolt device"
|
msgid "Unknown Thunderbolt device"
|
||||||
msgstr "Neznámé zařízení Thunderbolt"
|
msgstr "Neznámé zařízení Thunderbolt"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:329
|
#: js/ui/status/thunderbolt.js:351
|
||||||
msgid ""
|
msgid ""
|
||||||
"New device has been detected while you were away. Please disconnect and "
|
"New device has been detected while you were away. Please disconnect and "
|
||||||
"reconnect the device to start using it."
|
"reconnect the device to start using it."
|
||||||
@@ -2003,13 +2003,13 @@ msgstr ""
|
|||||||
"Zatímco jste byli pryč, bylo nalezeno nové zařízení. Odpojte jej prosím a "
|
"Zatímco jste byli pryč, bylo nalezeno nové zařízení. Odpojte jej prosím a "
|
||||||
"znovu připojte, abyste jej mohli používat."
|
"znovu připojte, abyste jej mohli používat."
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:334
|
#: js/ui/status/thunderbolt.js:356
|
||||||
msgid "Thunderbolt authorization error"
|
msgid "Thunderbolt authorization error"
|
||||||
msgstr "Chyba ověření Thunderbolt"
|
msgstr "Chyba ověření Thunderbolt"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:335
|
#: js/ui/status/thunderbolt.js:357
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Could not authorize the thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s"
|
msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:128
|
#: js/ui/status/volume.js:128
|
||||||
@@ -2233,15 +2233,3 @@ msgstr[2] "%u vstupů"
|
|||||||
#: subprojects/gvc/gvc-mixer-control.c:2738
|
#: subprojects/gvc/gvc-mixer-control.c:2738
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systémové zvuky"
|
msgstr "Systémové zvuky"
|
||||||
|
|
||||||
#~ msgctxt "search-result"
|
|
||||||
#~ msgid "Power off"
|
|
||||||
#~ msgstr "Vypnout"
|
|
||||||
|
|
||||||
#~ msgctxt "search-result"
|
|
||||||
#~ msgid "Log out"
|
|
||||||
#~ msgstr "Odhlásit se"
|
|
||||||
|
|
||||||
#~ msgctxt "search-result"
|
|
||||||
#~ msgid "Switch user"
|
|
||||||
#~ msgstr "Přepnout uživatele"
|
|
||||||
|
51
po/es.po
51
po/es.po
@@ -9,8 +9,8 @@ msgid ""
|
|||||||
msgstr ""
|
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: 2018-02-22 09:24+0000\n"
|
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||||
"PO-Revision-Date: 2018-02-23 08:26+0100\n"
|
"PO-Revision-Date: 2018-04-25 12:54+0200\n"
|
||||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
@@ -346,7 +346,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
|||||||
msgstr "Hubo un error al lanzar el diálogo de preferencias para %s:"
|
msgstr "Hubo un error al lanzar el diálogo de preferencias para %s:"
|
||||||
|
|
||||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@@ -665,12 +665,12 @@ msgstr "Añadir a los favoritos"
|
|||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Mostrar detalles"
|
msgstr "Mostrar detalles"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:138
|
#: js/ui/appFavorites.js:140
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "Se ha añadido %s a sus favoritos."
|
msgstr "Se ha añadido %s a sus favoritos."
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:172
|
#: js/ui/appFavorites.js:174
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "Se ha quitado %s de sus favoritos."
|
msgstr "Se ha quitado %s de sus favoritos."
|
||||||
@@ -865,7 +865,7 @@ msgstr "Dispositivo externo desconectado"
|
|||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Abrir con %s"
|
msgstr "Abrir con %s"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Contraseña:"
|
msgstr "Contraseña:"
|
||||||
|
|
||||||
@@ -953,15 +953,15 @@ msgstr "Se requiere una contraseña para conectarse a «%s»."
|
|||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Gestor de la red"
|
msgstr "Gestor de la red"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:43
|
#: js/ui/components/polkitAgent.js:48
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Se necesita autenticación"
|
msgstr "Se necesita autenticación"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:71
|
#: js/ui/components/polkitAgent.js:76
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Administrador"
|
msgstr "Administrador"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:151
|
#: js/ui/components/polkitAgent.js:156
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Autenticar"
|
msgstr "Autenticar"
|
||||||
|
|
||||||
@@ -969,7 +969,7 @@ msgstr "Autenticar"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||||
msgid "Sorry, that didn’t work. Please try again."
|
msgid "Sorry, that didn’t work. Please try again."
|
||||||
msgstr "Eso no ha funcionado. Inténtelo de nuevo."
|
msgstr "Eso no ha funcionado. Inténtelo de nuevo."
|
||||||
|
|
||||||
@@ -1017,7 +1017,7 @@ msgstr "Añadir relojes del mundo…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Relojes del mundo"
|
msgstr "Relojes del mundo"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:225
|
#: js/ui/dateMenu.js:227
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Meteorología"
|
msgstr "Meteorología"
|
||||||
|
|
||||||
@@ -1025,7 +1025,7 @@ msgstr "Meteorología"
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:289
|
#: js/ui/dateMenu.js:291
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s all day."
|
msgid "%s all day."
|
||||||
msgstr "%s todo el día."
|
msgstr "%s todo el día."
|
||||||
@@ -1034,7 +1034,7 @@ msgstr "%s todo el día."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:295
|
#: js/ui/dateMenu.js:297
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s later."
|
msgid "%s, then %s later."
|
||||||
msgstr "%s, luego %s."
|
msgstr "%s, luego %s."
|
||||||
@@ -1043,30 +1043,30 @@ msgstr "%s, luego %s."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:301
|
#: js/ui/dateMenu.js:303
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s, followed by %s later."
|
msgid "%s, then %s, followed by %s later."
|
||||||
msgstr "%s, luego %s seguido de %s."
|
msgstr "%s, luego %s seguido de %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:312
|
#: js/ui/dateMenu.js:314
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Seleccionar ubicación…"
|
msgstr "Seleccionar ubicación…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:315
|
#: js/ui/dateMenu.js:317
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Cargando…"
|
msgstr "Cargando…"
|
||||||
|
|
||||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||||
#: js/ui/dateMenu.js:321
|
#: js/ui/dateMenu.js:323
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Feels like %s."
|
msgid "Feels like %s."
|
||||||
msgstr "Sensación térmica de %s."
|
msgstr "Sensación térmica de %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:324
|
#: js/ui/dateMenu.js:326
|
||||||
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:326
|
#: js/ui/dateMenu.js:328
|
||||||
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."
|
||||||
|
|
||||||
@@ -1968,16 +1968,16 @@ msgstr "Suspender"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Apagar"
|
msgstr "Apagar"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:272
|
#: js/ui/status/thunderbolt.js:294
|
||||||
msgid "Thunderbolt"
|
msgid "Thunderbolt"
|
||||||
msgstr "Thunderbolt"
|
msgstr "Thunderbolt"
|
||||||
|
|
||||||
#. we are done
|
#. we are done
|
||||||
#: js/ui/status/thunderbolt.js:328
|
#: js/ui/status/thunderbolt.js:350
|
||||||
msgid "Unknown Thunderbolt device"
|
msgid "Unknown Thunderbolt device"
|
||||||
msgstr "Dispositivo Thunderbolt desconocido"
|
msgstr "Dispositivo Thunderbolt desconocido"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:329
|
#: js/ui/status/thunderbolt.js:351
|
||||||
msgid ""
|
msgid ""
|
||||||
"New device has been detected while you were away. Please disconnect and "
|
"New device has been detected while you were away. Please disconnect and "
|
||||||
"reconnect the device to start using it."
|
"reconnect the device to start using it."
|
||||||
@@ -1985,13 +1985,14 @@ msgstr ""
|
|||||||
"Se ha detectado un dispositivo nuevo mientras estaba fuera. Desconéctelo y "
|
"Se ha detectado un dispositivo nuevo mientras estaba fuera. Desconéctelo y "
|
||||||
"vuélvalo a conectar para empezar a usarlo."
|
"vuélvalo a conectar para empezar a usarlo."
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:334
|
#: js/ui/status/thunderbolt.js:356
|
||||||
msgid "Thunderbolt authorization error"
|
msgid "Thunderbolt authorization error"
|
||||||
msgstr "Error de autorización de Thunderbolt"
|
msgstr "Error de autorización de Thunderbolt"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:335
|
#: js/ui/status/thunderbolt.js:357
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Could not authorize the thunderbolt device: %s"
|
#| msgid "Could not authorize the thunderbolt device: %s"
|
||||||
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s"
|
msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:128
|
#: js/ui/status/volume.js:128
|
||||||
|
54
po/hr.po
54
po/hr.po
@@ -7,8 +7,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: 2018-02-26 17:00+0000\n"
|
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||||
"PO-Revision-Date: 2018-03-07 22:46+0100\n"
|
"PO-Revision-Date: 2018-04-16 14:30+0200\n"
|
||||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||||
"Language-Team: Croatian <hr@li.org>\n"
|
"Language-Team: Croatian <hr@li.org>\n"
|
||||||
"Language: hr\n"
|
"Language: hr\n"
|
||||||
@@ -337,7 +337,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
|||||||
msgstr "Dogodila se greška učitavanja dijaloga osobitosti za %s:"
|
msgstr "Dogodila se greška učitavanja dijaloga osobitosti za %s:"
|
||||||
|
|
||||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@@ -663,12 +663,12 @@ msgstr "Dodaj u omiljene"
|
|||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Prikaži pojedinosti"
|
msgstr "Prikaži pojedinosti"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:138
|
#: js/ui/appFavorites.js:140
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s je dodan u omiljene."
|
msgstr "%s je dodan u omiljene."
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:172
|
#: js/ui/appFavorites.js:174
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s je uklonjen iz omiljenih."
|
msgstr "%s je uklonjen iz omiljenih."
|
||||||
@@ -863,7 +863,7 @@ msgstr "Vanjski uređaj odspojen"
|
|||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Otvori s(a) %s"
|
msgstr "Otvori s(a) %s"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Lozinka:"
|
msgstr "Lozinka:"
|
||||||
|
|
||||||
@@ -950,15 +950,15 @@ msgstr "Potrebna je lozinka za povezivanje s “%s”."
|
|||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Mrežni upravitelj"
|
msgstr "Mrežni upravitelj"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:43
|
#: js/ui/components/polkitAgent.js:48
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Potrebna je ovjera"
|
msgstr "Potrebna je ovjera"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:71
|
#: js/ui/components/polkitAgent.js:76
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Administrator"
|
msgstr "Administrator"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:151
|
#: js/ui/components/polkitAgent.js:156
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Ovjeri"
|
msgstr "Ovjeri"
|
||||||
|
|
||||||
@@ -966,7 +966,7 @@ msgstr "Ovjeri"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||||
msgid "Sorry, that didn’t work. Please try again."
|
msgid "Sorry, that didn’t work. Please try again."
|
||||||
msgstr "Nažalost, to ne radi. Pokušajte ponovno."
|
msgstr "Nažalost, to ne radi. Pokušajte ponovno."
|
||||||
|
|
||||||
@@ -1014,7 +1014,7 @@ msgstr "Dodaj satove iz svijeta…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Svjetski satovi"
|
msgstr "Svjetski satovi"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:225
|
#: js/ui/dateMenu.js:227
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Vrijeme"
|
msgstr "Vrijeme"
|
||||||
|
|
||||||
@@ -1022,7 +1022,7 @@ msgstr "Vrijeme"
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:289
|
#: js/ui/dateMenu.js:291
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s all day."
|
msgid "%s all day."
|
||||||
msgstr "%s cijeli dan."
|
msgstr "%s cijeli dan."
|
||||||
@@ -1031,7 +1031,7 @@ msgstr "%s cijeli dan."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:295
|
#: js/ui/dateMenu.js:297
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s later."
|
msgid "%s, then %s later."
|
||||||
msgstr "%s, zatim %s kasnije."
|
msgstr "%s, zatim %s kasnije."
|
||||||
@@ -1040,30 +1040,30 @@ msgstr "%s, zatim %s kasnije."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:301
|
#: js/ui/dateMenu.js:303
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s, followed by %s later."
|
msgid "%s, then %s, followed by %s later."
|
||||||
msgstr "%s, zatim %s, praćena s %s kasnije."
|
msgstr "%s, zatim %s, praćena s %s kasnije."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:312
|
#: js/ui/dateMenu.js:314
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Odaberi lokaciju…"
|
msgstr "Odaberi lokaciju…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:315
|
#: js/ui/dateMenu.js:317
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Pretraživanje…"
|
msgstr "Pretraživanje…"
|
||||||
|
|
||||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||||
#: js/ui/dateMenu.js:321
|
#: js/ui/dateMenu.js:323
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Feels like %s."
|
msgid "Feels like %s."
|
||||||
msgstr "Kao da je %s."
|
msgstr "Kao da je %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:324
|
#: js/ui/dateMenu.js:326
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Posjetite za opširnije vremenske informacije"
|
msgstr "Posjetite za opširnije vremenske informacije"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:326
|
#: js/ui/dateMenu.js:328
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Vremenske informacije su trenutno nedostupne"
|
msgstr "Vremenske informacije su trenutno nedostupne"
|
||||||
|
|
||||||
@@ -1977,16 +1977,16 @@ msgstr "Suspendiraj"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Isključivanje"
|
msgstr "Isključivanje"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:272
|
#: js/ui/status/thunderbolt.js:294
|
||||||
msgid "Thunderbolt"
|
msgid "Thunderbolt"
|
||||||
msgstr "Thunderbolt"
|
msgstr "Thunderbolt"
|
||||||
|
|
||||||
#. we are done
|
#. we are done
|
||||||
#: js/ui/status/thunderbolt.js:328
|
#: js/ui/status/thunderbolt.js:350
|
||||||
msgid "Unknown Thunderbolt device"
|
msgid "Unknown Thunderbolt device"
|
||||||
msgstr "Nepoznati Thunderbolt uređaj"
|
msgstr "Nepoznati Thunderbolt uređaj"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:329
|
#: js/ui/status/thunderbolt.js:351
|
||||||
msgid ""
|
msgid ""
|
||||||
"New device has been detected while you were away. Please disconnect and "
|
"New device has been detected while you were away. Please disconnect and "
|
||||||
"reconnect the device to start using it."
|
"reconnect the device to start using it."
|
||||||
@@ -1994,14 +1994,14 @@ msgstr ""
|
|||||||
"Otkriven je novi uređaj dok ste bili odsutni. Odspojite i ponovno spojite "
|
"Otkriven je novi uređaj dok ste bili odsutni. Odspojite i ponovno spojite "
|
||||||
"uređaj kako bi ga mogli koristiti."
|
"uređaj kako bi ga mogli koristiti."
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:334
|
#: js/ui/status/thunderbolt.js:356
|
||||||
msgid "Thunderbolt authorization error"
|
msgid "Thunderbolt authorization error"
|
||||||
msgstr "Greška Thunderbolt ovjere"
|
msgstr "Greška Thunderbolt odobravanja"
|
||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:335
|
#: js/ui/status/thunderbolt.js:357
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Could not authorize the thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "Nemoguća ovjera Thunderbolt uređaja: %s"
|
msgstr "Nemoguće odobravanje Thunderbolt uređaja: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:128
|
#: js/ui/status/volume.js:128
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
|
87
po/sl.po
87
po/sl.po
@@ -8,8 +8,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: 2018-03-18 10:36+0000\n"
|
"POT-Creation-Date: 2018-04-17 15:11+0000\n"
|
||||||
"PO-Revision-Date: 2018-03-19 21:42+0100\n"
|
"PO-Revision-Date: 2018-04-17 18:32+0200\n"
|
||||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||||
"Language: sl\n"
|
"Language: sl\n"
|
||||||
@@ -66,19 +66,19 @@ msgstr "Upravljanje oken in zaganjanje programov"
|
|||||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Omogoči dostop do orodij razvijalcev in preizkuševalcev programske opreme "
|
"Omogoči dostop do orodij razvijalcev in preizkuševalcev programske opreme "
|
||||||
"preko Alt-F2 vnosnega polja."
|
"prek vnosnega polja Alt-F2."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:9
|
#: data/org.gnome.shell.gschema.xml.in:9
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
"dialog."
|
"dialog."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dovoli dostop do razhroščevanja in drugih orodij nadzora preko Alt-F2 "
|
"Dovoli dostop do razhroščevanja in drugih orodij nadzora prek vnosnega polja "
|
||||||
"vnosnega polja."
|
"Alt-F2."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:16
|
#: data/org.gnome.shell.gschema.xml.in:16
|
||||||
msgid "UUIDs of extensions to enable"
|
msgid "UUIDs of extensions to enable"
|
||||||
msgstr "Določila UUID razširitev, ki bodo omogočene"
|
msgstr "Določila razširitev UUID, ki bodo omogočene"
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:17
|
#: data/org.gnome.shell.gschema.xml.in:17
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -87,10 +87,9 @@ msgid ""
|
|||||||
"list. You can also manipulate this list with the EnableExtension and "
|
"list. You can also manipulate this list with the EnableExtension and "
|
||||||
"DisableExtension D-Bus methods on org.gnome.Shell."
|
"DisableExtension D-Bus methods on org.gnome.Shell."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Razširitve lupine GNOME imajo določila UUID; ključ določa seznam razširitev, "
|
"Razširitve lupine GNOME imajo nastavljeno določilo UUID; ključ določa seznam "
|
||||||
"ki bodo naložene. Razširitev, ki se naj naloži, mora biti zavedena na tem "
|
"razširitev, ki naj bodo naložene ob zagonu. Upravljanje seznama je mogoče "
|
||||||
"seznamu. Upravljanje seznama je mogoče tudi preko vodila D-BUs na org.gnome."
|
"tudi prek vodila D-BUs na org.gnome.Shell."
|
||||||
"Shell."
|
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:26
|
#: data/org.gnome.shell.gschema.xml.in:26
|
||||||
msgid "Disable user extensions"
|
msgid "Disable user extensions"
|
||||||
@@ -115,8 +114,8 @@ msgid ""
|
|||||||
"load all extensions regardless of the versions they claim to support."
|
"load all extensions regardless of the versions they claim to support."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lupina GNOME naloži le razširitve, ki so skladne z nameščeno različico. "
|
"Lupina GNOME naloži le razširitve, ki so skladne z nameščeno različico. "
|
||||||
"Izbrana možnost onemogoči preverjanje skladnosti, zato so lahko naložene "
|
"Izbrana možnost onemogoči preverjanje, zato so lahko naložene tudi "
|
||||||
"tudi razširitve, katerih skladnost ni potrjena."
|
"razširitve, katerih skladnost ni potrjena."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:43
|
#: data/org.gnome.shell.gschema.xml.in:43
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
@@ -127,7 +126,7 @@ msgid ""
|
|||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Programi določeni s temi določili bodo prikazani v območju priljubljenih "
|
"Programi, ki ustrezajo določilom, bodo prikazani v polju priljubljenih "
|
||||||
"programov"
|
"programov"
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:51
|
#: data/org.gnome.shell.gschema.xml.in:51
|
||||||
@@ -145,18 +144,18 @@ msgstr "Zgodovina pogovornega okna ukazov (Alt-F2)"
|
|||||||
#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
|
#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
|
||||||
#: data/org.gnome.shell.gschema.xml.in:63
|
#: data/org.gnome.shell.gschema.xml.in:63
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Zgodovina za pogovorno okno povečevalnega stekla"
|
msgstr "Zgodovina za pogovorno okno povečevala"
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:67
|
#: data/org.gnome.shell.gschema.xml.in:67
|
||||||
msgid "Always show the “Log out” menu item in the user menu."
|
msgid "Always show the “Log out” menu item in the user menu."
|
||||||
msgstr "Vedno pokaži možnost »Odjava« v uporabniškem meniju."
|
msgstr "Vedno pokaži možnost »Odjave« v uporabniškem meniju."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:68
|
#: data/org.gnome.shell.gschema.xml.in:68
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the “Log out” menu item in single-"
|
"This key overrides the automatic hiding of the “Log out” menu item in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Izbira prepiše možnost samodejnega skrivanja predmeta »Odjava« na sistemskem "
|
"Izbira prepiše možnost samodejnega skrivanja gumba za »Odjavo« na sistemskem "
|
||||||
"meniju pri eno-uporabniškem in eno-sejnem zagonu."
|
"meniju pri eno-uporabniškem in eno-sejnem zagonu."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:75
|
#: data/org.gnome.shell.gschema.xml.in:75
|
||||||
@@ -174,8 +173,8 @@ msgid ""
|
|||||||
"state of the checkbox."
|
"state of the checkbox."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Za priklop oddaljenega datotečnega sistema ali šifrirane naprave bo po "
|
"Za priklop oddaljenega datotečnega sistema ali šifrirane naprave bo po "
|
||||||
"izbiri možnosti zahtevano geslo. Na pogovornem oknu bo prikazana možnost "
|
"izbiri podana zahteva za vnos gesla. Na pogovornem oknu bo prikazana tudi "
|
||||||
"»Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja."
|
"možnost »Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja."
|
||||||
|
|
||||||
#: data/org.gnome.shell.gschema.xml.in:85
|
#: data/org.gnome.shell.gschema.xml.in:85
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -333,7 +332,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
|||||||
msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnostmi za %s:"
|
msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnostmi za %s:"
|
||||||
|
|
||||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
@@ -664,12 +663,12 @@ msgstr "Dodaj med priljubljene"
|
|||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "Pokaži besedilo"
|
msgstr "Pokaži besedilo"
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:138
|
#: js/ui/appFavorites.js:140
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "Program »%s« je dodan med priljubljeno."
|
msgstr "Program »%s« je dodan med priljubljeno."
|
||||||
|
|
||||||
#: js/ui/appFavorites.js:172
|
#: js/ui/appFavorites.js:174
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "Program »%s« je odstranjen iz priljubljenih."
|
msgstr "Program »%s« je odstranjen iz priljubljenih."
|
||||||
@@ -840,7 +839,7 @@ msgid ""
|
|||||||
"You may choose to wait a short while for it to continue or force the "
|
"You may choose to wait a short while for it to continue or force the "
|
||||||
"application to quit entirely."
|
"application to quit entirely."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lahko še malo počakate, če začne morda program spet delovati, ali pa vsilite "
|
"Lahko počakate, če se program morda začne spet odzivati, lahko pa vsilite "
|
||||||
"končanje delovanja."
|
"končanje delovanja."
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:61
|
#: js/ui/closeDialog.js:61
|
||||||
@@ -864,13 +863,13 @@ msgstr "Zunanji pogon je odklopljen"
|
|||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Odpri s programom %s"
|
msgstr "Odpri s programom %s"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Geslo:"
|
msgstr "Geslo:"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:140
|
#: js/ui/components/keyring.js:140
|
||||||
msgid "Type again:"
|
msgid "Type again:"
|
||||||
msgstr "Vpišite znova:"
|
msgstr "Ponovni vpis:"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:245
|
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:245
|
||||||
#: js/ui/status/network.js:336 js/ui/status/network.js:922
|
#: js/ui/status/network.js:336 js/ui/status/network.js:922
|
||||||
@@ -887,19 +886,19 @@ msgstr "Geslo:"
|
|||||||
#. static WEP
|
#. static WEP
|
||||||
#: js/ui/components/networkAgent.js:210
|
#: js/ui/components/networkAgent.js:210
|
||||||
msgid "Key: "
|
msgid "Key: "
|
||||||
msgstr "Ključ:"
|
msgstr "Ključ: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:249
|
#: js/ui/components/networkAgent.js:249
|
||||||
msgid "Identity: "
|
msgid "Identity: "
|
||||||
msgstr "_Istovetnost:"
|
msgstr "_Istovetnost: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:251
|
#: js/ui/components/networkAgent.js:251
|
||||||
msgid "Private key password: "
|
msgid "Private key password: "
|
||||||
msgstr "Geslo zasebnega ključa:"
|
msgstr "Geslo zasebnega ključa: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:263
|
#: js/ui/components/networkAgent.js:263
|
||||||
msgid "Service: "
|
msgid "Service: "
|
||||||
msgstr "Storitev:"
|
msgstr "Storitev: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659
|
#: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659
|
||||||
msgid "Authentication required by wireless network"
|
msgid "Authentication required by wireless network"
|
||||||
@@ -920,7 +919,7 @@ msgstr "Žična overitev 802.1X"
|
|||||||
|
|
||||||
#: js/ui/components/networkAgent.js:299
|
#: js/ui/components/networkAgent.js:299
|
||||||
msgid "Network name: "
|
msgid "Network name: "
|
||||||
msgstr "Naziv omrežja:"
|
msgstr "Naziv omrežja: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667
|
#: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667
|
||||||
msgid "DSL authentication"
|
msgid "DSL authentication"
|
||||||
@@ -952,15 +951,15 @@ msgstr "Za povezavo z omrežjem »%s« je zahtevano geslo."
|
|||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Upravljalnik omrežij"
|
msgstr "Upravljalnik omrežij"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:43
|
#: js/ui/components/polkitAgent.js:48
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Zahtevana je overitev"
|
msgstr "Zahtevana je overitev"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:71
|
#: js/ui/components/polkitAgent.js:76
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Skrbnik"
|
msgstr "Skrbnik"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:151
|
#: js/ui/components/polkitAgent.js:156
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Overi"
|
msgstr "Overi"
|
||||||
|
|
||||||
@@ -968,7 +967,7 @@ msgstr "Overi"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||||
msgid "Sorry, that didn’t work. Please try again."
|
msgid "Sorry, that didn’t work. Please try again."
|
||||||
msgstr "Overitev je spodletela.. Poskusite znova."
|
msgstr "Overitev je spodletela.. Poskusite znova."
|
||||||
|
|
||||||
@@ -1016,7 +1015,7 @@ msgstr "Dodaj svetovni čas ..."
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "Svetovni časi"
|
msgstr "Svetovni časi"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:225
|
#: js/ui/dateMenu.js:227
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "Vreme"
|
msgstr "Vreme"
|
||||||
|
|
||||||
@@ -1024,7 +1023,7 @@ msgstr "Vreme"
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:289
|
#: js/ui/dateMenu.js:291
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s all day."
|
msgid "%s all day."
|
||||||
msgstr "%s – ves dan."
|
msgstr "%s – ves dan."
|
||||||
@@ -1033,7 +1032,7 @@ msgstr "%s – ves dan."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:295
|
#: js/ui/dateMenu.js:297
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s later."
|
msgid "%s, then %s later."
|
||||||
msgstr "%s, sledi %s."
|
msgstr "%s, sledi %s."
|
||||||
@@ -1042,30 +1041,30 @@ msgstr "%s, sledi %s."
|
|||||||
#. libgweather for the possible condition strings. If at all
|
#. libgweather for the possible condition strings. If at all
|
||||||
#. possible, the sentence should match the grammatical case etc. of
|
#. possible, the sentence should match the grammatical case etc. of
|
||||||
#. the inserted conditions.
|
#. the inserted conditions.
|
||||||
#: js/ui/dateMenu.js:301
|
#: js/ui/dateMenu.js:303
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s, followed by %s later."
|
msgid "%s, then %s, followed by %s later."
|
||||||
msgstr "%s, sledi %s, kasneje tudi %s."
|
msgstr "%s, sledi %s, kasneje tudi %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:312
|
#: js/ui/dateMenu.js:314
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "Izbor mesta ..."
|
msgstr "Izbor mesta ..."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:315
|
#: js/ui/dateMenu.js:317
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "Poteka nalaganje ..."
|
msgstr "Poteka nalaganje ..."
|
||||||
|
|
||||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||||
#: js/ui/dateMenu.js:321
|
#: js/ui/dateMenu.js:323
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Feels like %s."
|
msgid "Feels like %s."
|
||||||
msgstr "Občuti se kot %s."
|
msgstr "Občuti se kot %s."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:324
|
#: js/ui/dateMenu.js:326
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "Preglej splet za podrobnosti o vremenu."
|
msgstr "Preglej splet za podrobnosti o vremenu."
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:326
|
#: js/ui/dateMenu.js:328
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "Podatki o vremenu trenutno niso na voljo."
|
msgstr "Podatki o vremenu trenutno niso na voljo."
|
||||||
|
|
||||||
@@ -2014,8 +2013,8 @@ msgstr "Napaka overitve naprave Thunderbolt"
|
|||||||
|
|
||||||
#: js/ui/status/thunderbolt.js:357
|
#: js/ui/status/thunderbolt.js:357
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Could not authorize the thunderbolt device: %s"
|
msgid "Could not authorize the Thunderbolt device: %s"
|
||||||
msgstr "Naprave thunderbolt ni mogoče overiti: %s"
|
msgstr "Naprave Thunderbolt ni mogoče overiti: %s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:128
|
#: js/ui/status/volume.js:128
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
|
@@ -590,6 +590,11 @@ app_load_events (App *app)
|
|||||||
g_list_free (app->live_views);
|
g_list_free (app->live_views);
|
||||||
app->live_views = NULL;
|
app->live_views = NULL;
|
||||||
|
|
||||||
|
if (!app->since || !app->until)
|
||||||
|
{
|
||||||
|
print_debug ("Skipping load of events, no time interval set yet");
|
||||||
|
return;
|
||||||
|
}
|
||||||
/* timezone could have changed */
|
/* timezone could have changed */
|
||||||
app_update_timezone (app);
|
app_update_timezone (app);
|
||||||
|
|
||||||
|
@@ -347,10 +347,10 @@ if options.perf == None:
|
|||||||
options.perf = 'core'
|
options.perf = 'core'
|
||||||
|
|
||||||
if options.extra_filter is None:
|
if options.extra_filter is None:
|
||||||
if options.hwtest:
|
options.extra_filter = []
|
||||||
options.extra_filter = ['Gedit']
|
|
||||||
else:
|
if options.perf == 'hwtest':
|
||||||
options.extra_filter = []
|
options.extra_filter.append('Gedit')
|
||||||
|
|
||||||
if args:
|
if args:
|
||||||
parser.print_usage()
|
parser.print_usage()
|
||||||
|
@@ -1190,12 +1190,37 @@ app_child_setup (gpointer user_data)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
_shell_app_watch_callback (GPid pid,
|
||||||
|
gint status,
|
||||||
|
ShellApp *app)
|
||||||
|
{
|
||||||
|
if (app->state == SHELL_APP_STATE_STARTING)
|
||||||
|
{
|
||||||
|
ShellWindowTracker *tracker = shell_window_tracker_get_default ();
|
||||||
|
GSList *startup_sequences = shell_window_tracker_get_startup_sequences (tracker);
|
||||||
|
GSList *iter = NULL;
|
||||||
|
|
||||||
|
for (iter = startup_sequences; iter; iter = g_slist_next (iter))
|
||||||
|
{
|
||||||
|
ShellStartupSequence *sequence = (ShellStartupSequence*) iter->data;
|
||||||
|
ShellApp *startup_app = shell_startup_sequence_get_app (sequence);
|
||||||
|
if (startup_app == app)
|
||||||
|
shell_startup_sequence_complete (sequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
shell_app_state_transition (app, SHELL_APP_STATE_STOPPED);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_spawn_close_pid (pid);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wait_pid (GDesktopAppInfo *appinfo,
|
wait_pid (GDesktopAppInfo *appinfo,
|
||||||
GPid pid,
|
GPid pid,
|
||||||
gpointer user_data)
|
ShellApp *app)
|
||||||
{
|
{
|
||||||
g_child_watch_add (pid, (GChildWatchFunc) g_spawn_close_pid, NULL);
|
g_child_watch_add (pid, (GChildWatchFunc) _shell_app_watch_callback, app);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1242,7 +1267,8 @@ shell_app_launch (ShellApp *app,
|
|||||||
#else
|
#else
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
#endif
|
#endif
|
||||||
wait_pid, NULL,
|
(GDesktopAppLaunchCallback) wait_pid,
|
||||||
|
app,
|
||||||
error);
|
error);
|
||||||
g_object_unref (context);
|
g_object_unref (context);
|
||||||
|
|
||||||
|
@@ -906,6 +906,11 @@ shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size)
|
|||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
shell_startup_sequence_complete (ShellStartupSequence *sequence)
|
||||||
|
{
|
||||||
|
sn_startup_sequence_complete ((SnStartupSequence*)sequence);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_window_tracker_get_default:
|
* shell_window_tracker_get_default:
|
||||||
|
@@ -36,6 +36,7 @@ const char *shell_startup_sequence_get_name (ShellStartupSequence *sequence);
|
|||||||
gboolean shell_startup_sequence_get_completed (ShellStartupSequence *sequence);
|
gboolean shell_startup_sequence_get_completed (ShellStartupSequence *sequence);
|
||||||
int shell_startup_sequence_get_workspace (ShellStartupSequence *sequence);
|
int shell_startup_sequence_get_workspace (ShellStartupSequence *sequence);
|
||||||
ClutterActor *shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size);
|
ClutterActor *shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size);
|
||||||
|
void shell_startup_sequence_complete (ShellStartupSequence *sequence);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@@ -205,8 +205,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_UPPER,
|
PROP_UPPER,
|
||||||
g_param_spec_double ("upper",
|
g_param_spec_double ("upper",
|
||||||
@@ -216,8 +215,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_VALUE,
|
PROP_VALUE,
|
||||||
g_param_spec_double ("value",
|
g_param_spec_double ("value",
|
||||||
@@ -227,8 +225,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_STEP_INC,
|
PROP_STEP_INC,
|
||||||
g_param_spec_double ("step-increment",
|
g_param_spec_double ("step-increment",
|
||||||
@@ -238,8 +235,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_PAGE_INC,
|
PROP_PAGE_INC,
|
||||||
g_param_spec_double ("page-increment",
|
g_param_spec_double ("page-increment",
|
||||||
@@ -249,8 +245,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (object_class,
|
||||||
PROP_PAGE_SIZE,
|
PROP_PAGE_SIZE,
|
||||||
g_param_spec_double ("page-size",
|
g_param_spec_double ("page-size",
|
||||||
@@ -260,8 +255,7 @@ st_adjustment_class_init (StAdjustmentClass *klass)
|
|||||||
G_MAXDOUBLE,
|
G_MAXDOUBLE,
|
||||||
0.0,
|
0.0,
|
||||||
ST_PARAM_READWRITE |
|
ST_PARAM_READWRITE |
|
||||||
G_PARAM_CONSTRUCT |
|
G_PARAM_CONSTRUCT));
|
||||||
G_PARAM_EXPLICIT_NOTIFY));
|
|
||||||
/**
|
/**
|
||||||
* StAdjustment::changed:
|
* StAdjustment::changed:
|
||||||
* @self: the #StAdjustment
|
* @self: the #StAdjustment
|
||||||
|
@@ -177,15 +177,15 @@ st_bin_get_preferred_height (ClutterActor *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_bin_destroy (ClutterActor *actor)
|
st_bin_dispose (GObject *gobject)
|
||||||
{
|
{
|
||||||
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (actor));
|
StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (gobject));
|
||||||
|
|
||||||
if (priv->child)
|
if (priv->child)
|
||||||
clutter_actor_destroy (priv->child);
|
clutter_actor_destroy (priv->child);
|
||||||
g_assert (priv->child == NULL);
|
g_assert (priv->child == NULL);
|
||||||
|
|
||||||
CLUTTER_ACTOR_CLASS (st_bin_parent_class)->destroy (actor);
|
G_OBJECT_CLASS (st_bin_parent_class)->dispose (gobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -315,11 +315,11 @@ st_bin_class_init (StBinClass *klass)
|
|||||||
|
|
||||||
gobject_class->set_property = st_bin_set_property;
|
gobject_class->set_property = st_bin_set_property;
|
||||||
gobject_class->get_property = st_bin_get_property;
|
gobject_class->get_property = st_bin_get_property;
|
||||||
|
gobject_class->dispose = st_bin_dispose;
|
||||||
|
|
||||||
actor_class->get_preferred_width = st_bin_get_preferred_width;
|
actor_class->get_preferred_width = st_bin_get_preferred_width;
|
||||||
actor_class->get_preferred_height = st_bin_get_preferred_height;
|
actor_class->get_preferred_height = st_bin_get_preferred_height;
|
||||||
actor_class->allocate = st_bin_allocate;
|
actor_class->allocate = st_bin_allocate;
|
||||||
actor_class->destroy = st_bin_destroy;
|
|
||||||
|
|
||||||
widget_class->popup_menu = st_bin_popup_menu;
|
widget_class->popup_menu = st_bin_popup_menu;
|
||||||
widget_class->navigate_focus = st_bin_navigate_focus;
|
widget_class->navigate_focus = st_bin_navigate_focus;
|
||||||
|
@@ -90,7 +90,7 @@ adjustment_value_notify_cb (StAdjustment *adjustment,
|
|||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
StBoxLayout *box)
|
StBoxLayout *box)
|
||||||
{
|
{
|
||||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (box));
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (box));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -490,7 +490,7 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
|
|||||||
ClutterPaintVolume *volume)
|
ClutterPaintVolume *volume)
|
||||||
{
|
{
|
||||||
StBoxLayout *self = ST_BOX_LAYOUT (actor);
|
StBoxLayout *self = ST_BOX_LAYOUT (actor);
|
||||||
gdouble x, y, lower, upper;
|
gdouble x, y;
|
||||||
StBoxLayoutPrivate *priv = self->priv;
|
StBoxLayoutPrivate *priv = self->priv;
|
||||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||||
ClutterActorBox allocation_box;
|
ClutterActorBox allocation_box;
|
||||||
@@ -505,42 +505,13 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
|
|||||||
* our paint volume on that. */
|
* our paint volume on that. */
|
||||||
if (priv->hadjustment || priv->vadjustment)
|
if (priv->hadjustment || priv->vadjustment)
|
||||||
{
|
{
|
||||||
gdouble width, height;
|
|
||||||
|
|
||||||
clutter_actor_get_allocation_box (actor, &allocation_box);
|
clutter_actor_get_allocation_box (actor, &allocation_box);
|
||||||
st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
|
st_theme_node_get_content_box (theme_node, &allocation_box, &content_box);
|
||||||
origin.x = content_box.x1 - allocation_box.x1;
|
origin.x = content_box.x1 - allocation_box.x1;
|
||||||
origin.y = content_box.y1 - allocation_box.y2;
|
origin.y = content_box.y1 - allocation_box.y2;
|
||||||
origin.z = 0.f;
|
origin.z = 0.f;
|
||||||
|
clutter_paint_volume_set_width (volume, content_box.x2 - content_box.x1);
|
||||||
if (priv->hadjustment)
|
clutter_paint_volume_set_height (volume, content_box.y2 - content_box.y1);
|
||||||
{
|
|
||||||
g_object_get (priv->hadjustment,
|
|
||||||
"lower", &lower,
|
|
||||||
"upper", &upper,
|
|
||||||
NULL);
|
|
||||||
width = upper - lower;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
width = content_box.x2 - content_box.x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->vadjustment)
|
|
||||||
{
|
|
||||||
g_object_get (priv->vadjustment,
|
|
||||||
"lower", &lower,
|
|
||||||
"upper", &upper,
|
|
||||||
NULL);
|
|
||||||
height = upper - lower;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
height = content_box.y2 - content_box.y1;
|
|
||||||
}
|
|
||||||
|
|
||||||
clutter_paint_volume_set_width (volume, width);
|
|
||||||
clutter_paint_volume_set_height (volume, height);
|
|
||||||
}
|
}
|
||||||
else if (!CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->get_paint_volume (actor, volume))
|
else if (!CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->get_paint_volume (actor, volume))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@@ -248,17 +248,14 @@ st_button_touch_event (ClutterActor *actor,
|
|||||||
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
if (event->type == CLUTTER_TOUCH_BEGIN && !priv->press_sequence)
|
||||||
{
|
{
|
||||||
clutter_input_device_sequence_grab (device, sequence, actor);
|
clutter_input_device_sequence_grab (device, sequence, actor);
|
||||||
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
st_button_press (button, device, 0, sequence);
|
||||||
st_button_press (button, device, 0, sequence);
|
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
else if (event->type == CLUTTER_TOUCH_END &&
|
else if (event->type == CLUTTER_TOUCH_END &&
|
||||||
priv->device == device &&
|
priv->device == device &&
|
||||||
priv->press_sequence == sequence)
|
priv->press_sequence == sequence)
|
||||||
{
|
{
|
||||||
if (!clutter_event_is_pointer_emulated ((ClutterEvent*) event))
|
st_button_release (button, device, mask, 0, sequence);
|
||||||
st_button_release (button, device, mask, 0, sequence);
|
|
||||||
|
|
||||||
clutter_input_device_sequence_ungrab (device, sequence);
|
clutter_input_device_sequence_ungrab (device, sequence);
|
||||||
return CLUTTER_EVENT_STOP;
|
return CLUTTER_EVENT_STOP;
|
||||||
}
|
}
|
||||||
|
@@ -308,9 +308,8 @@ st_entry_style_changed (StWidget *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
theme_node = st_widget_get_theme_node (self);
|
theme_node = st_widget_get_theme_node (self);
|
||||||
|
|
||||||
st_theme_node_get_foreground_color (theme_node, &color);
|
_st_set_text_from_style (CLUTTER_TEXT (priv->entry), theme_node);
|
||||||
clutter_text_set_color (CLUTTER_TEXT (priv->entry), &color);
|
|
||||||
|
|
||||||
if (st_theme_node_lookup_length (theme_node, "caret-size", TRUE, &size))
|
if (st_theme_node_lookup_length (theme_node, "caret-size", TRUE, &size))
|
||||||
clutter_text_set_cursor_size (CLUTTER_TEXT (priv->entry), (int)(.5 + size));
|
clutter_text_set_cursor_size (CLUTTER_TEXT (priv->entry), (int)(.5 + size));
|
||||||
@@ -906,13 +905,6 @@ st_entry_unmap (ClutterActor *actor)
|
|||||||
CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
|
CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
st_entry_get_paint_volume (ClutterActor *actor,
|
|
||||||
ClutterPaintVolume *volume)
|
|
||||||
{
|
|
||||||
return clutter_paint_volume_set_from_allocation (volume, actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_entry_class_init (StEntryClass *klass)
|
st_entry_class_init (StEntryClass *klass)
|
||||||
{
|
{
|
||||||
@@ -930,7 +922,6 @@ st_entry_class_init (StEntryClass *klass)
|
|||||||
actor_class->allocate = st_entry_allocate;
|
actor_class->allocate = st_entry_allocate;
|
||||||
actor_class->paint = st_entry_paint;
|
actor_class->paint = st_entry_paint;
|
||||||
actor_class->unmap = st_entry_unmap;
|
actor_class->unmap = st_entry_unmap;
|
||||||
actor_class->get_paint_volume = st_entry_get_paint_volume;
|
|
||||||
|
|
||||||
actor_class->key_press_event = st_entry_key_press_event;
|
actor_class->key_press_event = st_entry_key_press_event;
|
||||||
actor_class->key_focus_in = st_entry_key_focus_in;
|
actor_class->key_focus_in = st_entry_key_focus_in;
|
||||||
@@ -1295,10 +1286,10 @@ st_entry_get_input_hints (StEntry *entry)
|
|||||||
return clutter_text_get_input_hints (CLUTTER_TEXT (priv->entry));
|
return clutter_text_get_input_hints (CLUTTER_TEXT (priv->entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
_st_entry_icon_clicked_cb (ClutterClickAction *action,
|
_st_entry_icon_press_cb (ClutterActor *actor,
|
||||||
ClutterActor *actor,
|
ClutterButtonEvent *event,
|
||||||
StEntry *entry)
|
StEntry *entry)
|
||||||
{
|
{
|
||||||
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
|
StEntryPrivate *priv = ST_ENTRY_PRIV (entry);
|
||||||
|
|
||||||
@@ -1306,6 +1297,8 @@ _st_entry_icon_clicked_cb (ClutterClickAction *action,
|
|||||||
g_signal_emit (entry, entry_signals[PRIMARY_ICON_CLICKED], 0);
|
g_signal_emit (entry, entry_signals[PRIMARY_ICON_CLICKED], 0);
|
||||||
else
|
else
|
||||||
g_signal_emit (entry, entry_signals[SECONDARY_ICON_CLICKED], 0);
|
g_signal_emit (entry, entry_signals[SECONDARY_ICON_CLICKED], 0);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1315,24 +1308,21 @@ _st_entry_set_icon (StEntry *entry,
|
|||||||
{
|
{
|
||||||
if (*icon)
|
if (*icon)
|
||||||
{
|
{
|
||||||
clutter_actor_remove_action_by_name (*icon, "entry-icon-action");
|
g_signal_handlers_disconnect_by_func (*icon,
|
||||||
|
_st_entry_icon_press_cb,
|
||||||
|
entry);
|
||||||
clutter_actor_remove_child (CLUTTER_ACTOR (entry), *icon);
|
clutter_actor_remove_child (CLUTTER_ACTOR (entry), *icon);
|
||||||
*icon = NULL;
|
*icon = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_icon)
|
if (new_icon)
|
||||||
{
|
{
|
||||||
ClutterAction *action;
|
|
||||||
|
|
||||||
*icon = g_object_ref (new_icon);
|
*icon = g_object_ref (new_icon);
|
||||||
|
|
||||||
clutter_actor_set_reactive (*icon, TRUE);
|
clutter_actor_set_reactive (*icon, TRUE);
|
||||||
clutter_actor_add_child (CLUTTER_ACTOR (entry), *icon);
|
clutter_actor_add_child (CLUTTER_ACTOR (entry), *icon);
|
||||||
|
g_signal_connect (*icon, "button-release-event",
|
||||||
action = clutter_click_action_new ();
|
G_CALLBACK (_st_entry_icon_press_cb), entry);
|
||||||
clutter_actor_add_action_with_name (*icon, "entry-icon-action", action);
|
|
||||||
g_signal_connect (action, "clicked",
|
|
||||||
G_CALLBACK (_st_entry_icon_clicked_cb), entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (entry));
|
clutter_actor_queue_relayout (CLUTTER_ACTOR (entry));
|
||||||
|
@@ -180,7 +180,6 @@ st_label_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
StLabelPrivate *priv = ST_LABEL (object)->priv;
|
StLabelPrivate *priv = ST_LABEL (object)->priv;
|
||||||
|
|
||||||
priv->label = NULL;
|
|
||||||
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
|
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
|
||||||
|
|
||||||
G_OBJECT_CLASS (st_label_parent_class)->dispose (object);
|
G_OBJECT_CLASS (st_label_parent_class)->dispose (object);
|
||||||
|
@@ -116,6 +116,7 @@ _st_set_text_from_style (ClutterText *text,
|
|||||||
PangoAttrList *attribs = NULL;
|
PangoAttrList *attribs = NULL;
|
||||||
const PangoFontDescription *font;
|
const PangoFontDescription *font;
|
||||||
StTextAlign align;
|
StTextAlign align;
|
||||||
|
gdouble spacing;
|
||||||
|
|
||||||
st_theme_node_get_foreground_color (theme_node, &color);
|
st_theme_node_get_foreground_color (theme_node, &color);
|
||||||
clutter_text_set_color (text, &color);
|
clutter_text_set_color (text, &color);
|
||||||
@@ -123,11 +124,11 @@ _st_set_text_from_style (ClutterText *text,
|
|||||||
font = st_theme_node_get_font (theme_node);
|
font = st_theme_node_get_font (theme_node);
|
||||||
clutter_text_set_font_description (text, (PangoFontDescription *) font);
|
clutter_text_set_font_description (text, (PangoFontDescription *) font);
|
||||||
|
|
||||||
|
attribs = pango_attr_list_new ();
|
||||||
|
|
||||||
decoration = st_theme_node_get_text_decoration (theme_node);
|
decoration = st_theme_node_get_text_decoration (theme_node);
|
||||||
if (decoration)
|
if (decoration)
|
||||||
{
|
{
|
||||||
attribs = pango_attr_list_new ();
|
|
||||||
|
|
||||||
if (decoration & ST_TEXT_DECORATION_UNDERLINE)
|
if (decoration & ST_TEXT_DECORATION_UNDERLINE)
|
||||||
{
|
{
|
||||||
PangoAttribute *underline = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
|
PangoAttribute *underline = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
|
||||||
@@ -143,6 +144,13 @@ _st_set_text_from_style (ClutterText *text,
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spacing = st_theme_node_get_letter_spacing (theme_node);
|
||||||
|
if (spacing)
|
||||||
|
{
|
||||||
|
PangoAttribute *letter_spacing = pango_attr_letter_spacing_new ((int)(.5 + spacing) * PANGO_SCALE);
|
||||||
|
pango_attr_list_insert (attribs, letter_spacing);
|
||||||
|
}
|
||||||
|
|
||||||
clutter_text_set_attributes (text, attribs);
|
clutter_text_set_attributes (text, attribs);
|
||||||
|
|
||||||
if (attribs)
|
if (attribs)
|
||||||
|
@@ -304,13 +304,6 @@ st_scroll_view_pick (ClutterActor *actor,
|
|||||||
clutter_actor_paint (priv->vscroll);
|
clutter_actor_paint (priv->vscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
st_scroll_view_get_paint_volume (ClutterActor *actor,
|
|
||||||
ClutterPaintVolume *volume)
|
|
||||||
{
|
|
||||||
return clutter_paint_volume_set_from_allocation (volume, actor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static double
|
static double
|
||||||
get_scrollbar_width (StScrollView *scroll,
|
get_scrollbar_width (StScrollView *scroll,
|
||||||
gfloat for_height)
|
gfloat for_height)
|
||||||
@@ -800,7 +793,6 @@ st_scroll_view_class_init (StScrollViewClass *klass)
|
|||||||
|
|
||||||
actor_class->paint = st_scroll_view_paint;
|
actor_class->paint = st_scroll_view_paint;
|
||||||
actor_class->pick = st_scroll_view_pick;
|
actor_class->pick = st_scroll_view_pick;
|
||||||
actor_class->get_paint_volume = st_scroll_view_get_paint_volume;
|
|
||||||
actor_class->get_preferred_width = st_scroll_view_get_preferred_width;
|
actor_class->get_preferred_width = st_scroll_view_get_preferred_width;
|
||||||
actor_class->get_preferred_height = st_scroll_view_get_preferred_height;
|
actor_class->get_preferred_height = st_scroll_view_get_preferred_height;
|
||||||
actor_class->allocate = st_scroll_view_allocate;
|
actor_class->allocate = st_scroll_view_allocate;
|
||||||
|
@@ -37,7 +37,6 @@ struct _StTextureCachePrivate
|
|||||||
|
|
||||||
/* Things that were loaded with a cache policy != NONE */
|
/* Things that were loaded with a cache policy != NONE */
|
||||||
GHashTable *keyed_cache; /* char * -> CoglTexture* */
|
GHashTable *keyed_cache; /* char * -> CoglTexture* */
|
||||||
GHashTable *keyed_surface_cache; /* char * -> cairo_surface_t* */
|
|
||||||
|
|
||||||
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
|
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
|
||||||
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
|
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
|
||||||
@@ -146,10 +145,6 @@ st_texture_cache_init (StTextureCache *self)
|
|||||||
|
|
||||||
self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
g_free, cogl_object_unref);
|
g_free, cogl_object_unref);
|
||||||
self->priv->keyed_surface_cache = g_hash_table_new_full (g_str_hash,
|
|
||||||
g_str_equal,
|
|
||||||
g_free,
|
|
||||||
(GDestroyNotify) cairo_surface_destroy);
|
|
||||||
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
g_free, NULL);
|
g_free, NULL);
|
||||||
self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
|
self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
|
||||||
@@ -171,7 +166,6 @@ st_texture_cache_dispose (GObject *object)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
|
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
|
||||||
g_clear_pointer (&self->priv->keyed_surface_cache, g_hash_table_destroy);
|
|
||||||
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
|
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
|
||||||
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
|
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
|
||||||
|
|
||||||
@@ -526,8 +520,6 @@ finish_texture_load (AsyncTextureLoadData *data,
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
texdata = pixbuf_to_cogl_texture (pixbuf);
|
texdata = pixbuf_to_cogl_texture (pixbuf);
|
||||||
if (!texdata)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
|
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
|
||||||
{
|
{
|
||||||
@@ -780,13 +772,13 @@ st_texture_cache_load (StTextureCache *cache,
|
|||||||
if (!texture)
|
if (!texture)
|
||||||
{
|
{
|
||||||
texture = load (cache, key, data, error);
|
texture = load (cache, key, data, error);
|
||||||
if (texture && policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
if (texture)
|
||||||
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texture);
|
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texture);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture && policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
cogl_object_ref (texture);
|
||||||
cogl_object_ref (texture);
|
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -984,7 +976,7 @@ file_changed_cb (GFileMonitor *monitor,
|
|||||||
char *key;
|
char *key;
|
||||||
guint file_hash;
|
guint file_hash;
|
||||||
|
|
||||||
if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
|
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
file_hash = g_file_hash (file);
|
file_hash = g_file_hash (file);
|
||||||
@@ -994,7 +986,7 @@ file_changed_cb (GFileMonitor *monitor,
|
|||||||
g_free (key);
|
g_free (key);
|
||||||
|
|
||||||
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
|
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
|
||||||
g_hash_table_remove (cache->priv->keyed_surface_cache, key);
|
g_hash_table_remove (cache->priv->keyed_cache, key);
|
||||||
g_free (key);
|
g_free (key);
|
||||||
|
|
||||||
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
|
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
|
||||||
@@ -1281,9 +1273,6 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
|
|||||||
texdata = pixbuf_to_cogl_texture (pixbuf);
|
texdata = pixbuf_to_cogl_texture (pixbuf);
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
|
|
||||||
if (!texdata)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||||
{
|
{
|
||||||
cogl_object_ref (texdata);
|
cogl_object_ref (texdata);
|
||||||
@@ -1315,7 +1304,7 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
|
|||||||
|
|
||||||
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
|
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
|
||||||
|
|
||||||
surface = g_hash_table_lookup (cache->priv->keyed_surface_cache, key);
|
surface = g_hash_table_lookup (cache->priv->keyed_cache, key);
|
||||||
|
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
{
|
{
|
||||||
@@ -1329,8 +1318,7 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
|
|||||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||||
{
|
{
|
||||||
cairo_surface_reference (surface);
|
cairo_surface_reference (surface);
|
||||||
g_hash_table_insert (cache->priv->keyed_surface_cache,
|
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), surface);
|
||||||
g_strdup (key), surface);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -229,9 +229,9 @@ unpremultiply (ClutterColor *color)
|
|||||||
{
|
{
|
||||||
if (color->alpha != 0)
|
if (color->alpha != 0)
|
||||||
{
|
{
|
||||||
color->red = MIN((color->red * 255 + 127) / color->alpha, 255);
|
color->red = (color->red * 255 + 127) / color->alpha;
|
||||||
color->green = MIN((color->green * 255 + 127) / color->alpha, 255);
|
color->green = (color->green * 255 + 127) / color->alpha;
|
||||||
color->blue = MIN((color->blue * 255 + 127) / color->alpha, 255);
|
color->blue = (color->blue * 255 + 127) / color->alpha;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +402,7 @@ st_theme_node_lookup_corner (StThemeNode *node,
|
|||||||
return COGL_INVALID_HANDLE;
|
return COGL_INVALID_HANDLE;
|
||||||
|
|
||||||
key = corner_to_string (&corner);
|
key = corner_to_string (&corner);
|
||||||
texture = st_texture_cache_load (cache, key, ST_TEXTURE_CACHE_POLICY_FOREVER, load_corner, &corner, NULL);
|
texture = st_texture_cache_load (cache, key, ST_TEXTURE_CACHE_POLICY_NONE, load_corner, &corner, NULL);
|
||||||
|
|
||||||
if (texture)
|
if (texture)
|
||||||
{
|
{
|
||||||
@@ -1414,32 +1414,6 @@ st_theme_node_load_background_image (StThemeNode *node)
|
|||||||
return node->background_texture != COGL_INVALID_HANDLE;
|
return node->background_texture != COGL_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
st_theme_node_invalidate_resources_for_file (StThemeNode *node,
|
|
||||||
GFile *file)
|
|
||||||
{
|
|
||||||
StBorderImage *border_image;
|
|
||||||
gboolean changed = FALSE;
|
|
||||||
GFile *theme_file;
|
|
||||||
|
|
||||||
theme_file = st_theme_node_get_background_image (node);
|
|
||||||
if ((theme_file != NULL) && g_file_equal (theme_file, file))
|
|
||||||
{
|
|
||||||
st_theme_node_invalidate_background_image (node);
|
|
||||||
changed = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
border_image = st_theme_node_get_border_image (node);
|
|
||||||
theme_file = border_image ? st_border_image_get_file (border_image) : NULL;
|
|
||||||
if ((theme_file != NULL) && g_file_equal (theme_file, file))
|
|
||||||
{
|
|
||||||
st_theme_node_invalidate_border_image (node);
|
|
||||||
changed = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void st_theme_node_prerender_shadow (StThemeNodePaintState *state);
|
static void st_theme_node_prerender_shadow (StThemeNodePaintState *state);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2777,17 +2751,3 @@ st_theme_node_paint_state_invalidate (StThemeNodePaintState *state)
|
|||||||
state->alloc_width = 0;
|
state->alloc_width = 0;
|
||||||
state->alloc_height = 0;
|
state->alloc_height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
st_theme_node_paint_state_invalidate_for_file (StThemeNodePaintState *state,
|
|
||||||
GFile *file)
|
|
||||||
{
|
|
||||||
if (state->node != NULL &&
|
|
||||||
st_theme_node_invalidate_resources_for_file (state->node, file))
|
|
||||||
{
|
|
||||||
st_theme_node_paint_state_invalidate (state);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
@@ -2545,6 +2545,28 @@ st_theme_node_get_text_align(StThemeNode *node)
|
|||||||
return ST_TEXT_ALIGN_LEFT;
|
return ST_TEXT_ALIGN_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* st_theme_node_get_letter_spacing:
|
||||||
|
* @node: a #StThemeNode
|
||||||
|
*
|
||||||
|
* Gets the value for the letter-spacing style property, in pixels.
|
||||||
|
*
|
||||||
|
* Return value: the value of the letter-spacing property, if
|
||||||
|
* found, or zero if such property has not been found.
|
||||||
|
*/
|
||||||
|
gdouble
|
||||||
|
st_theme_node_get_letter_spacing (StThemeNode *node)
|
||||||
|
{
|
||||||
|
gdouble spacing = 0.;
|
||||||
|
|
||||||
|
g_return_val_if_fail (ST_IS_THEME_NODE (node), spacing);
|
||||||
|
|
||||||
|
ensure_properties (node);
|
||||||
|
|
||||||
|
st_theme_node_lookup_length (node, "letter-spacing", FALSE, &spacing);
|
||||||
|
return spacing;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
font_family_from_terms (CRTerm *term,
|
font_family_from_terms (CRTerm *term,
|
||||||
char **family)
|
char **family)
|
||||||
|
@@ -223,6 +223,8 @@ StTextDecoration st_theme_node_get_text_decoration (StThemeNode *node);
|
|||||||
|
|
||||||
StTextAlign st_theme_node_get_text_align (StThemeNode *node);
|
StTextAlign st_theme_node_get_text_align (StThemeNode *node);
|
||||||
|
|
||||||
|
double st_theme_node_get_letter_spacing (StThemeNode *node);
|
||||||
|
|
||||||
/* Font rule processing is pretty complicated, so we just hardcode it
|
/* Font rule processing is pretty complicated, so we just hardcode it
|
||||||
* under the standard font/font-family/font-size/etc names. This means
|
* under the standard font/font-family/font-size/etc names. This means
|
||||||
* you can't have multiple separate styled fonts for a single item,
|
* you can't have multiple separate styled fonts for a single item,
|
||||||
@@ -287,9 +289,6 @@ void st_theme_node_paint_state_free (StThemeNodePaintState *state);
|
|||||||
void st_theme_node_paint_state_copy (StThemeNodePaintState *state,
|
void st_theme_node_paint_state_copy (StThemeNodePaintState *state,
|
||||||
StThemeNodePaintState *other);
|
StThemeNodePaintState *other);
|
||||||
void st_theme_node_paint_state_invalidate (StThemeNodePaintState *state);
|
void st_theme_node_paint_state_invalidate (StThemeNodePaintState *state);
|
||||||
gboolean st_theme_node_paint_state_invalidate_for_file (StThemeNodePaintState *state,
|
|
||||||
GFile *file);
|
|
||||||
|
|
||||||
void st_theme_node_paint_state_set_node (StThemeNodePaintState *state,
|
void st_theme_node_paint_state_set_node (StThemeNodePaintState *state,
|
||||||
StThemeNode *node);
|
StThemeNode *node);
|
||||||
|
|
||||||
|
@@ -289,17 +289,44 @@ st_widget_texture_cache_changed (StTextureCache *cache,
|
|||||||
{
|
{
|
||||||
StWidget *actor = ST_WIDGET (user_data);
|
StWidget *actor = ST_WIDGET (user_data);
|
||||||
StWidgetPrivate *priv = st_widget_get_instance_private (actor);
|
StWidgetPrivate *priv = st_widget_get_instance_private (actor);
|
||||||
|
StThemeNode *node = priv->theme_node;
|
||||||
|
StBorderImage *border_image;
|
||||||
gboolean changed = FALSE;
|
gboolean changed = FALSE;
|
||||||
int i;
|
GFile *theme_file;
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS (priv->paint_states); i++)
|
if (node == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
theme_file = st_theme_node_get_background_image (node);
|
||||||
|
if ((theme_file != NULL) && g_file_equal (theme_file, file))
|
||||||
{
|
{
|
||||||
StThemeNodePaintState *paint_state = &priv->paint_states[i];
|
st_theme_node_invalidate_background_image (node);
|
||||||
changed |= st_theme_node_paint_state_invalidate_for_file (paint_state, file);
|
changed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed && clutter_actor_is_mapped (CLUTTER_ACTOR (actor)))
|
border_image = st_theme_node_get_border_image (node);
|
||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
|
theme_file = border_image ? st_border_image_get_file (border_image) : NULL;
|
||||||
|
if ((theme_file != NULL) && g_file_equal (theme_file, file))
|
||||||
|
{
|
||||||
|
st_theme_node_invalidate_border_image (node);
|
||||||
|
changed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
/* If we prerender the background / border, we need to update
|
||||||
|
* the paint state. We should probably implement a method to
|
||||||
|
* the theme node to determine this, but for now, just wipe
|
||||||
|
* the entire paint state.
|
||||||
|
*
|
||||||
|
* Use the existing state instead of a new one because it's
|
||||||
|
* assumed the rest of the state will stay the same.
|
||||||
|
*/
|
||||||
|
st_theme_node_paint_state_invalidate (current_paint_state (actor));
|
||||||
|
|
||||||
|
if (clutter_actor_is_mapped (CLUTTER_ACTOR (actor)))
|
||||||
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user